annotate server.php @ 5:5d62af5270dd

Small bugfix in server STAT command (no data follows, so don't send a dot)
author Ivo Smits <Ivo@UCIS.nl>
date Tue, 12 Apr 2011 02:23:22 +0200
parents 0dcdb73cbcbf
children 01dc7eeaf5df
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1 #!/usr/bin/php
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
2 <?php
2
40e545510a57 Added support for POSTing to the server, added readme and todo, added support for upstream synchronization using POST
Ivo Smits <Ivo@UCIS.nl>
parents: 0
diff changeset
3 chdir(__DIR__);
3
0dcdb73cbcbf Increased article body length to 16MB in database scheme, cleaned up the code, added a script to forcefully reload an individual article
Ivo Smits <Ivo@UCIS.nl>
parents: 2
diff changeset
4 require_once './common.php';
0
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
5
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
6 $logfile = fopen('./server.log', 'w');
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
7 $currentgroup = NULL;
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
8 $currentarticle = NULL;
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
9
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
10 function exception_handler($exception) {
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
11 nntp_writeline(STDOUT, '');
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
12 nntp_writeline(STDOUT, '590 Exception: '.$exception->getMessage());
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
13 die();
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
14 }
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
15 function error_handler($errno, $errstr, $errfile, $errline) {
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
16 nntp_writeline(STDOUT, '');
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
17 nntp_writeline(STDOUT, '590 Error in file '.$errfile.' line '.$errline.' error '.$errno.' '.$errstr);
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
18 die();
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
19 }
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
20 set_exception_handler('exception_handler');
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
21 set_error_handler("error_handler");
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
22
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
23 nntp_writeline(STDOUT, '200 pNewss ready');
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
24 while (TRUE) {
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
25 $line = nntp_readline(STDIN);
2
40e545510a57 Added support for POSTing to the server, added readme and todo, added support for upstream synchronization using POST
Ivo Smits <Ivo@UCIS.nl>
parents: 0
diff changeset
26 if ($line === FALSE || $line === NULL) break;
3
0dcdb73cbcbf Increased article body length to 16MB in database scheme, cleaned up the code, added a script to forcefully reload an individual article
Ivo Smits <Ivo@UCIS.nl>
parents: 2
diff changeset
27 $cmd = strtoupper(strtok($line, " \t"));
0dcdb73cbcbf Increased article body length to 16MB in database scheme, cleaned up the code, added a script to forcefully reload an individual article
Ivo Smits <Ivo@UCIS.nl>
parents: 2
diff changeset
28 switch ($cmd) {
0
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
29 case 'LIST':
3
0dcdb73cbcbf Increased article body length to 16MB in database scheme, cleaned up the code, added a script to forcefully reload an individual article
Ivo Smits <Ivo@UCIS.nl>
parents: 2
diff changeset
30 nntp_writeline(STDOUT, '215 list of groups follows');
0
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
31 foreach ($db->evalAllAssoc('SELECT * FROM `groups`') as $group) {
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
32 $groupmessages = $db->evalRow('SELECT MIN(`number`), MAX(`number`) FROM `groupmessages` WHERE `group` = ?', $group['id']);
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
33 nntp_writeline(STDOUT, $group['name'].' '.intval($groupmessages[1]).' '.intval($groupmessages[0]).' n');
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
34 }
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
35 nntp_writeline(STDOUT, '.');
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
36 break;
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
37 case 'GROUP':
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
38 $groupname = strtok(" \t");
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
39 $group = $db->evalRowAssoc('SELECT * FROM `groups` WHERE `name` = ?', $groupname);
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
40 if ($group === FALSE) {
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
41 nntp_writeline(STDOUT, '411 No such group '.$groupname);
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
42 } else {
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
43 $currentgroup = $group;
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
44 $groupmessages = $db->evalRow('SELECT MIN(`number`), MAX(`number`), COUNT(`number`) FROM `groupmessages` WHERE `group` = ?', $group['id']);
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
45 nntp_writeline(STDOUT, '211 '.intval($groupmessages[2]).' '.intval($groupmessages[0]).' '.intval($groupmessages[1]).' '.$group['name']);
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
46 if ($groupmessages[0] === NULL) {
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
47 $currentarticle = NULL;
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
48 } else {
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
49 $currentarticle = $db->evalRowAssoc('SELECT * FROM `groupmessages` WHERE `group` = ? AND `number` = ?', array($group['id'], $groupmessages[0]));
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
50 if ($currentarticle === FALSE) $currentarticle = NULL;
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
51 }
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
52 }
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
53 break;
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
54 case 'STAT':
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
55 case 'HEAD':
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
56 case 'BODY':
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
57 case 'ARTICLE':
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
58 $article = nntp_get_article(strtok(" \t"));
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
59 if ($article === NULL) break;
3
0dcdb73cbcbf Increased article body length to 16MB in database scheme, cleaned up the code, added a script to forcefully reload an individual article
Ivo Smits <Ivo@UCIS.nl>
parents: 2
diff changeset
60 switch ($cmd) {
5
5d62af5270dd Small bugfix in server STAT command (no data follows, so don't send a dot)
Ivo Smits <Ivo@UCIS.nl>
parents: 3
diff changeset
61 case 'ARTICLE': nntp_writeline(STDOUT, '220 '.$article['messagenumber'].' <'.$article['messageid'].'> article'); break;
3
0dcdb73cbcbf Increased article body length to 16MB in database scheme, cleaned up the code, added a script to forcefully reload an individual article
Ivo Smits <Ivo@UCIS.nl>
parents: 2
diff changeset
62 case 'HEAD': nntp_writeline(STDOUT, '221 '.$article['messagenumber'].' <'.$article['messageid'].'> head'); break;
0dcdb73cbcbf Increased article body length to 16MB in database scheme, cleaned up the code, added a script to forcefully reload an individual article
Ivo Smits <Ivo@UCIS.nl>
parents: 2
diff changeset
63 case 'BODY': nntp_writeline(STDOUT, '222 '.$article['messagenumber'].' <'.$article['messageid'].'> body'); break;
5
5d62af5270dd Small bugfix in server STAT command (no data follows, so don't send a dot)
Ivo Smits <Ivo@UCIS.nl>
parents: 3
diff changeset
64 case 'STAT': nntp_writeline(STDOUT, '223 '.$article['messagenumber'].' <'.$article['messageid'].'> stat'); break;
3
0dcdb73cbcbf Increased article body length to 16MB in database scheme, cleaned up the code, added a script to forcefully reload an individual article
Ivo Smits <Ivo@UCIS.nl>
parents: 2
diff changeset
65 default: throw new Exception('Internal error');
0dcdb73cbcbf Increased article body length to 16MB in database scheme, cleaned up the code, added a script to forcefully reload an individual article
Ivo Smits <Ivo@UCIS.nl>
parents: 2
diff changeset
66 }
0dcdb73cbcbf Increased article body length to 16MB in database scheme, cleaned up the code, added a script to forcefully reload an individual article
Ivo Smits <Ivo@UCIS.nl>
parents: 2
diff changeset
67 if ($cmd == 'HEAD' || $cmd == 'ARTICLE') foreach (explode("\r\n", $article['header']) as $line) nntp_writeline(STDOUT, $line);
0dcdb73cbcbf Increased article body length to 16MB in database scheme, cleaned up the code, added a script to forcefully reload an individual article
Ivo Smits <Ivo@UCIS.nl>
parents: 2
diff changeset
68 if ($cmd == 'ARTICLE') nntp_writeline(STDOUT, '');
0dcdb73cbcbf Increased article body length to 16MB in database scheme, cleaned up the code, added a script to forcefully reload an individual article
Ivo Smits <Ivo@UCIS.nl>
parents: 2
diff changeset
69 if ($cmd == 'BODY' || $cmd == 'ARTICLE') foreach (explode("\r\n", $article['body']) as $line) nntp_writeline(STDOUT, $line);
5
5d62af5270dd Small bugfix in server STAT command (no data follows, so don't send a dot)
Ivo Smits <Ivo@UCIS.nl>
parents: 3
diff changeset
70 if ($cmd != 'STAT') nntp_writeline(STDOUT, '.');
0
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
71 break;
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
72 case 'LAST':
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
73 case 'NEXT':
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
74 if ($currentarticle === NULL) {
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
75 nntp_writeline(STDOUT, '420 no current article has been selected');
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
76 break;
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
77 }
3
0dcdb73cbcbf Increased article body length to 16MB in database scheme, cleaned up the code, added a script to forcefully reload an individual article
Ivo Smits <Ivo@UCIS.nl>
parents: 2
diff changeset
78 switch ($cmd) {
0dcdb73cbcbf Increased article body length to 16MB in database scheme, cleaned up the code, added a script to forcefully reload an individual article
Ivo Smits <Ivo@UCIS.nl>
parents: 2
diff changeset
79 case 'LAST': $query = 'SELECT * FROM `groupmessages` WHERE `group` = ? AND `number` < ? ORDER BY `number` DESC LIMIT 1'; break;
0dcdb73cbcbf Increased article body length to 16MB in database scheme, cleaned up the code, added a script to forcefully reload an individual article
Ivo Smits <Ivo@UCIS.nl>
parents: 2
diff changeset
80 case 'NEXT': $query = 'SELECT * FROM `groupmessages` WHERE `group` = ? AND `number` > ? ORDER BY `number` ASC LIMIT 1'; break;
0dcdb73cbcbf Increased article body length to 16MB in database scheme, cleaned up the code, added a script to forcefully reload an individual article
Ivo Smits <Ivo@UCIS.nl>
parents: 2
diff changeset
81 default: throw new Exception('Internal error');
0dcdb73cbcbf Increased article body length to 16MB in database scheme, cleaned up the code, added a script to forcefully reload an individual article
Ivo Smits <Ivo@UCIS.nl>
parents: 2
diff changeset
82 }
0dcdb73cbcbf Increased article body length to 16MB in database scheme, cleaned up the code, added a script to forcefully reload an individual article
Ivo Smits <Ivo@UCIS.nl>
parents: 2
diff changeset
83 $article = $db->evalRowAssoc($query, array($currentarticle['group'], $currentarticle['number']));
0
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
84 if ($article === FALSE) {
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
85 nntp_writeline(STDOUT, '422 no previous article in this group');
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
86 } else {
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
87 $articlea = $db->evalRowAssoc('SELECT * FROM `messages` WHERE `id` = ?', $article['message']);
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
88 if ($articlea === FALSE) {
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
89 nntp_writeline(STDOUT, '430 no such article found');
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
90 return NULL;
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
91 }
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
92 $currentarticle = $article;
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
93 nntp_writeline(STDOUT, '223 '.$article['number'].' <'.$articlea['messageid'].'> ok');
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
94 }
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
95 break;
2
40e545510a57 Added support for POSTing to the server, added readme and todo, added support for upstream synchronization using POST
Ivo Smits <Ivo@UCIS.nl>
parents: 0
diff changeset
96 case 'POST':
40e545510a57 Added support for POSTing to the server, added readme and todo, added support for upstream synchronization using POST
Ivo Smits <Ivo@UCIS.nl>
parents: 0
diff changeset
97 nntp_writeline(STDOUT, '340 Ok, recommended message-ID <'.md5(time().rand()).'@pNews.Core.UCIS.nl>');
40e545510a57 Added support for POSTing to the server, added readme and todo, added support for upstream synchronization using POST
Ivo Smits <Ivo@UCIS.nl>
parents: 0
diff changeset
98 $lines = nntp_readlines(STDIN);
3
0dcdb73cbcbf Increased article body length to 16MB in database scheme, cleaned up the code, added a script to forcefully reload an individual article
Ivo Smits <Ivo@UCIS.nl>
parents: 2
diff changeset
99 try {
0dcdb73cbcbf Increased article body length to 16MB in database scheme, cleaned up the code, added a script to forcefully reload an individual article
Ivo Smits <Ivo@UCIS.nl>
parents: 2
diff changeset
100 $msgid = nntp_article_store($lines);
0dcdb73cbcbf Increased article body length to 16MB in database scheme, cleaned up the code, added a script to forcefully reload an individual article
Ivo Smits <Ivo@UCIS.nl>
parents: 2
diff changeset
101 nntp_writeline(STDOUT, '240 Article received <'.$msgid.'>');
0dcdb73cbcbf Increased article body length to 16MB in database scheme, cleaned up the code, added a script to forcefully reload an individual article
Ivo Smits <Ivo@UCIS.nl>
parents: 2
diff changeset
102 } catch (Exception $ex) {
0dcdb73cbcbf Increased article body length to 16MB in database scheme, cleaned up the code, added a script to forcefully reload an individual article
Ivo Smits <Ivo@UCIS.nl>
parents: 2
diff changeset
103 nntp_writeline(STDOUT, '441 '.$ex->getMessage());
2
40e545510a57 Added support for POSTing to the server, added readme and todo, added support for upstream synchronization using POST
Ivo Smits <Ivo@UCIS.nl>
parents: 0
diff changeset
104 }
40e545510a57 Added support for POSTing to the server, added readme and todo, added support for upstream synchronization using POST
Ivo Smits <Ivo@UCIS.nl>
parents: 0
diff changeset
105 break;
0
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
106 case 'QUIT':
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
107 nntp_writeline(STDOUT, '205 .');
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
108 return;
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
109 default:
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
110 nntp_writeline(STDOUT, '500 Command not understood');
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
111 break;
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
112 }
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
113 }
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
114
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
115 function nntp_get_article($article) {
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
116 global $currentgroup, $currentarticle, $db;
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
117 if ($article === FALSE) {
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
118 if ($currentarticle === NULL) {
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
119 nntp_writeline(STDOUT, '420 no current article has been selected');
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
120 return NULL;
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
121 }
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
122 $messagenumber = $currentarticle['number'];
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
123 $article = $db->evalRowAssoc('SELECT * FROM `messages` WHERE `id` = ?', $currentarticle['message']);
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
124 if ($article === FALSE) {
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
125 nntp_writeline(STDOUT, '430 no such article found');
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
126 return NULL;
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
127 }
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
128 } elseif (strlen($article) > 2 && $article[0] == '<' && $article[strlen($article)-1] == '>') {
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
129 $messagenumber = 0;
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
130 $article = substr($article, 1, -1);
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
131 $article = $db->evalRowAssoc('SELECT * FROM `messages` WHERE `messageid` = ?', $article);
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
132 if ($article === FALSE) {
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
133 nntp_writeline(STDOUT, '430 no such article found');
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
134 return NULL;
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
135 }
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
136 } elseif (is_numeric($article)) {
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
137 if ($currentgroup === NULL) {
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
138 nntp_writeline(STDOUT, '412 no newsgroup has been selected');
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
139 return NULL;
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
140 }
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
141 $article = $db->evalRowAssoc('SELECT * FROM `groupmessages` WHERE `group` = ? AND `number` = ?', array($currentgroup['id'], $article));
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
142 if ($article === FALSE) {
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
143 nntp_writeline(STDOUT, '423 no such article number in this group');
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
144 return NULL;
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
145 }
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
146 $currentarticle = $article;
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
147 $messagenumber = $article['number'];
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
148 $article = $db->evalRowAssoc('SELECT * FROM `messages` WHERE `id` = ?', $article['message']);
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
149 if ($article === FALSE) {
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
150 nntp_writeline(STDOUT, '430 no such article found');
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
151 return NULL;
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
152 }
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
153 } else {
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
154 nntp_writeline(STDOUT, '500 Error in arguments');
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
155 }
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
156 $article['messagenumber'] = $messagenumber;
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
157 return $article;
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
158 }
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
159
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
160 function writelog($line) {
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
161 global $logfile;
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
162 fwrite($logfile, $line."\n");
d7ab68b71c74 Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
163 }