Mercurial > hg > pnewss
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 |