comparison unrealircdlink/unrealircdlink.php @ 1:7f01316130e8

Basic support for private messages in unrealircd proxy
author Ivo Smits <Ivo@UCIS.nl>
date Fri, 01 Apr 2011 17:02:41 +0200
parents dd81c38b513a
children
comparison
equal deleted inserted replaced
0:dd81c38b513a 1:7f01316130e8
201 $line .= "\r\n"; 201 $line .= "\r\n";
202 socket_send($ircd_socket, $line, strlen($line), 0); 202 socket_send($ircd_socket, $line, strlen($line), 0);
203 } 203 }
204 204
205 function udpmsg_process($ret) { 205 function udpmsg_process($ret) {
206 global $uchannels; 206 global $uchannels, $config;
207 if (!isset($ret['CHN']) || !isset($ret['CMD']) || !isset($ret['USR'])) return; 207 if (!isset($ret['CHN']) || !isset($ret['CMD']) || !isset($ret['USR']) || !array_key_exists($ret['CHN'], $uchannels)) {
208 if (!array_key_exists($ret['CHN'], $uchannels)) return; 208 $ch = NULL;
209 $ch = $uchannels[$ret['CHN']]; 209 } else {
210 $ch = $uchannels[$ret['CHN']];
211 }
210 $net = isset($ret['NET']) ? $ret['NET'] : NULL; 212 $net = isset($ret['NET']) ? $ret['NET'] : NULL;
211 switch ($ret['CMD']) { 213 switch ($ret['CMD']) {
212 case 'MSG': 214 case 'MSG':
213 if (!isset($ret['MSG'])) break; 215 if ($ch === NULL || !isset($ret['MSG'])) break;
214 $usr = udpmsg_join($ret['USR'], $ch, $net); 216 $usr = udpmsg_join($ret['USR'], $ch, $net);
215 ircd_send(':'.$usr->iname.' PRIVMSG '.$ch->iname.' :'.preg_replace('/[\x00\x10-\x13]/', '', $ret['MSG'])); 217 ircd_send(':'.$usr->iname.' PRIVMSG '.$ch->iname.' :'.preg_replace('/[\x00\x10-\x13]/', '', $ret['MSG']));
216 break; 218 break;
219 case 'PMSG':
220 if (!isset($ret['DUSR']) || !isset($ret['MSG'])) break;
221 if (isset($ret['DNET']) && $ret['DNET'] != $config['udpmsg']['netname']) break;
222 $tousr = ircd_getuser($ret['DUSR'], FALSE);
223 if ($tousr === NULL) break;
224 $usr = udpmsg_getuser($ret['USR'], TRUE, $net, FALSE);
225 ircd_send(':'.$usr->iname.' PRIVMSG '.$tousr->iname.' :'.preg_replace('/[\x00\x10-\x13]/', '', $ret['MSG']));
226 break;
217 case 'ALIVE': 227 case 'ALIVE':
218 case 'JOIN': 228 case 'JOIN':
229 if ($ch === NULL) break;
219 udpmsg_join($ret['USR'], $ch, $net, TRUE); 230 udpmsg_join($ret['USR'], $ch, $net, TRUE);
220 break; 231 break;
221 case 'PART': 232 case 'PART':
233 if ($ch === NULL) break;
222 udpmsg_part($ret['USR'], $ch); 234 udpmsg_part($ret['USR'], $ch);
223 break; 235 break;
224 case 'NICK': 236 case 'NICK':
225 udpmsg_part($ret['USR'], $ch); 237 udpmsg_part($ret['USR'], $ch);
226 if (!isset($ret['NEWNICK'])) break; 238 if (!isset($ret['NEWNICK'])) break;
275 287
276 function udpmsg_getnick($usr, $req) { 288 function udpmsg_getnick($usr, $req) {
277 global $iusers, $config; 289 global $iusers, $config;
278 $nick = preg_replace('/[^a-zA-Z0-9\-_]/', '', $req); 290 $nick = preg_replace('/[^a-zA-Z0-9\-_]/', '', $req);
279 if (!strlen($nick)) $nick = 'NoNick'; 291 if (!strlen($nick)) $nick = 'NoNick';
292 else if (strlen($nick) > 20) $nick = substr($nick, 0, 20);
280 switch ($config['ircd']['nick_format']) { 293 switch ($config['ircd']['nick_format']) {
281 case 'plain': break; 294 case 'plain': break;
282 case 'prefix': $nick = $config['ircd']['nick_prefix'].$nick; break; 295 case 'prefix': $nick = $config['ircd']['nick_prefix'].$nick; break;
283 case 'suffix': $nick = $nick.$config['ircd']['nick_suffix']; break; 296 case 'suffix': $nick = $nick.$config['ircd']['nick_suffix']; break;
284 } 297 }
329 case 'PRIVMSG': case 'NOTICE': 342 case 'PRIVMSG': case 'NOTICE':
330 if ($parts[1] == '--print-internals' && $parts[0][0] == '#') { 343 if ($parts[1] == '--print-internals' && $parts[0][0] == '#') {
331 ircd_send(':'.$bot_nick.' PRIVMSG '.$parts[0].' :We have '.count($GLOBALS['iusers']).' IRC users of which '.count($GLOBALS['uusers']).' UDPMSG users, and '.count($GLOBALS['ichannels']).' channels.'); 344 ircd_send(':'.$bot_nick.' PRIVMSG '.$parts[0].' :We have '.count($GLOBALS['iusers']).' IRC users of which '.count($GLOBALS['uusers']).' UDPMSG users, and '.count($GLOBALS['ichannels']).' channels.');
332 break; 345 break;
333 } 346 }
334 $ch = ircd_getchannel($parts[0]);
335 $usr = ircd_getuser($sendernick, FALSE); 347 $usr = ircd_getuser($sendernick, FALSE);
336 if ($ch === NULL || $usr === NULL) break; 348 if ($parts[0][0] == '#') {
337 udpmsg_send(array('CMD' => 'MSG', 'CHN' => $ch->uname, 'MSG' => $parts[1], 'USR' => $usr->iname)); 349 $ch = ircd_getchannel($parts[0]);
350 if ($ch === NULL || $usr === NULL) break;
351 udpmsg_send(array('CMD' => 'MSG', 'CHN' => $ch->uname, 'MSG' => $parts[1], 'USR' => $usr->iname));
352 } else {
353 $tousr = ircd_getuser($parts[0], FALSE);
354 if ($tousr === NULL || $usr === NULL) break;
355 udpmsg_send(array('CMD' => 'PMSG', 'DUSR' => $tousr->uname, 'MSG' => $parts[1], 'USR' => $usr->iname));
356 }
338 break; 357 break;
339 case 'SAJOIN': 358 case 'SAJOIN':
340 case 'SVSJOIN': 359 case 'SVSJOIN':
341 $sendernick = array_shift($parts); 360 $sendernick = array_shift($parts);
342 case 'JOIN': 361 case 'JOIN':