comparison server.php @ 13:cccd73f72bf6 draft

Added filtering support and several bugfixes
author Ivo Smits <Ivo@UCIS.nl>
date Thu, 10 Jul 2014 22:26:45 +0200
parents 7917bd536187
children 372f4e195986
comparison
equal deleted inserted replaced
12:7917bd536187 13:cccd73f72bf6
93 case 'LISTGROUP': 93 case 'LISTGROUP':
94 $groupname = strtok(" \t"); 94 $groupname = strtok(" \t");
95 if ($groupname === FALSE) { 95 if ($groupname === FALSE) {
96 $group = $currentgroup; 96 $group = $currentgroup;
97 } else { 97 } else {
98 $group = $db->evalRowAssoc('SELECT * FROM `groups` WHERE `name` = ?', $groupname); 98 $group = $db->evalRowAssoc('SELECT * FROM `groups` WHERE `name` = ?', array($groupname));
99 } 99 }
100 if ($group === FALSE) { 100 if (!$group) {
101 nntp_writeline(STDOUT, '411 No such group '.$groupname); 101 nntp_writeline(STDOUT, '411 No such group '.$groupname);
102 } else { 102 } else {
103 $currentgroup = $group; 103 $currentgroup = $group;
104 $groupmessages = $db->evalRow('SELECT MIN(`number`), MAX(`number`), COUNT(`number`) FROM `groupmessages` WHERE `group` = ?', $group['id']); 104 $groupmessages = $db->evalRow('SELECT MIN(`number`), MAX(`number`), COUNT(`number`) FROM `groupmessages` WHERE `group` = ?', $group['id']);
105 nntp_writeline(STDOUT, '211 '.intval($groupmessages[2]).' '.intval($groupmessages[0]).' '.intval($groupmessages[1]).' '.$group['name']); 105 nntp_writeline(STDOUT, '211 '.intval($groupmessages[2]).' '.intval($groupmessages[0]).' '.intval($groupmessages[1]).' '.$group['name']);
171 nntp_writeline(STDOUT, '422 no previous article in this group'); 171 nntp_writeline(STDOUT, '422 no previous article in this group');
172 } else { 172 } else {
173 $articlea = $db->evalRowAssoc('SELECT * FROM `messages` WHERE `id` = ?', $article['message']); 173 $articlea = $db->evalRowAssoc('SELECT * FROM `messages` WHERE `id` = ?', $article['message']);
174 if ($articlea === FALSE) { 174 if ($articlea === FALSE) {
175 nntp_writeline(STDOUT, '430 no such article found'); 175 nntp_writeline(STDOUT, '430 no such article found');
176 return NULL; 176 } else {
177 $currentarticle = $article;
178 nntp_writeline(STDOUT, '223 '.$article['number'].' <'.$articlea['messageid'].'> ok');
177 } 179 }
178 $currentarticle = $article;
179 nntp_writeline(STDOUT, '223 '.$article['number'].' <'.$articlea['messageid'].'> ok');
180 } 180 }
181 break; 181 break;
182 case 'POST': 182 case 'POST':
183 nntp_writeline(STDOUT, '340 Ok, recommended message-ID <'.md5(time().rand()).'@pNews.Core.UCIS.nl>'); 183 nntp_writeline(STDOUT, '340 Ok, recommended message-ID <'.md5(time().rand()).'@pNews.Core.UCIS.nl>');
184 $lines = nntp_readlines(STDIN); 184 $lines = nntp_readlines(STDIN);
194 if ($messageid === FALSE || strlen($messageid) <= 2 || $messageid[0] != '<' || $messageid[strlen($messageid)-1] != '>') { 194 if ($messageid === FALSE || strlen($messageid) <= 2 || $messageid[0] != '<' || $messageid[strlen($messageid)-1] != '>') {
195 nntp_writeline(STDOUT, '435 Argument error'); 195 nntp_writeline(STDOUT, '435 Argument error');
196 break; 196 break;
197 } 197 }
198 $messageid = substr($messageid, 1, -1); 198 $messageid = substr($messageid, 1, -1);
199 if ($db->evalRow('SELECT `id` FROM `messages` WHERE `messageid` = ?', $messageid) !== FALSE) { 199 if (!nntp_article_wanted($messageid)) {
200 nntp_writeline(STDOUT, '435 Duplicate'); 200 nntp_writeline(STDOUT, '435 Duplicate or filtered');
201 break; 201 break;
202 } 202 }
203 nntp_writeline(STDOUT, '335 Send article to be transferred'); 203 nntp_writeline(STDOUT, '335 Send article to be transferred');
204 $lines = nntp_readlines(STDIN); 204 $lines = nntp_readlines(STDIN);
205 try { 205 try {
214 if ($messageid === FALSE || strlen($messageid) <= 2 || $messageid[0] != '<' || $messageid[strlen($messageid)-1] != '>') { 214 if ($messageid === FALSE || strlen($messageid) <= 2 || $messageid[0] != '<' || $messageid[strlen($messageid)-1] != '>') {
215 nntp_writeline(STDOUT, '435 Argument error'); 215 nntp_writeline(STDOUT, '435 Argument error');
216 break; 216 break;
217 } 217 }
218 $messageid = substr($messageid, 1, -1); 218 $messageid = substr($messageid, 1, -1);
219 if ($db->evalRow('SELECT `id` FROM `messages` WHERE `messageid` = ?', $messageid) !== FALSE) { 219 if (!nntp_article_wanted($messageid)) {
220 nntp_writeline(STDOUT, '438 <'.$messageid.'> Duplicate'); 220 nntp_writeline(STDOUT, '438 <'.$messageid.'> Duplicate or filtered');
221 break; 221 break;
222 } 222 }
223 nntp_writeline(STDOUT, '238 <'.$messageid.'> Send article to be transferred'); 223 nntp_writeline(STDOUT, '238 <'.$messageid.'> Send article to be transferred');
224 break; 224 break;
225 case 'TAKETHIS': 225 case 'TAKETHIS':
228 if ($messageid === FALSE || strlen($messageid) <= 2 || $messageid[0] != '<' || $messageid[strlen($messageid)-1] != '>') { 228 if ($messageid === FALSE || strlen($messageid) <= 2 || $messageid[0] != '<' || $messageid[strlen($messageid)-1] != '>') {
229 nntp_writeline(STDOUT, '435 Argument error'); 229 nntp_writeline(STDOUT, '435 Argument error');
230 break; 230 break;
231 } 231 }
232 $messageid = substr($messageid, 1, -1); 232 $messageid = substr($messageid, 1, -1);
233 if ($db->evalRow('SELECT `id` FROM `messages` WHERE `messageid` = ?', $messageid) !== FALSE) { 233 if (!nntp_article_wanted($messageid)) {
234 nntp_writeline(STDOUT, '439 <'.$messageid.'> Duplicate'); 234 nntp_writeline(STDOUT, '439 <'.$messageid.'> Duplicate or filtered');
235 break; 235 break;
236 } 236 }
237 try { 237 try {
238 $messageid = nntp_article_store($lines); 238 $messageid = nntp_article_store($lines);
239 nntp_writeline(STDOUT, '239 <'.$messageid.'> Article stored'); 239 nntp_writeline(STDOUT, '239 <'.$messageid.'> Article stored');
288 nntp_writeline(STDOUT, '430 no such article found'); 288 nntp_writeline(STDOUT, '430 no such article found');
289 return NULL; 289 return NULL;
290 } 290 }
291 } else { 291 } else {
292 nntp_writeline(STDOUT, '500 Error in arguments'); 292 nntp_writeline(STDOUT, '500 Error in arguments');
293 return NULL;
293 } 294 }
294 $article['messagenumber'] = $messagenumber; 295 $article['messagenumber'] = $messagenumber;
295 return $article; 296 return $article;
296 } 297 }
297 298