annotate ircrelay/ircrelay_admincmd.php @ 2:7e342a0a3b74 draft default tip

Fixed UDP mode in hub
author Ivo Smits <Ivo@UCIS.nl>
date Sat, 04 May 2013 00:36:14 +0200
parents dd81c38b513a
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1 <?php
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
2 function admincmd($parts) {
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
3 global $channels, $networks;
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
4 switch (strtolower($parts[0])) {
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
5 case 'die': exit(0);
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
6 case 'c': case 'chn': case 'chan': case 'channel':
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
7 switch (strtolower($parts[1])) {
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
8 case 'join': case 'part': case 'rejoin': case 'msg': case 'links':
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
9 if (!isset($channels[$parts[2]])) return 'ERR Channel does not exist';
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
10 return admincmd_channel($parts[1], $channels[$parts[2]], array_slice($parts, 3));
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
11 case 'list': return 'OK '.implode('; ', array_keys($channels));
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
12 case 'help':
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
13 return 'OK list; links [ch]; join [ch]; part [ch]; rejoin [ch]; msg [ch] [msg]; help';
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
14 }
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
15 break;
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
16 case 'n': case 'net': case 'network':
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
17 switch (strtolower($parts[1])) {
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
18 case 'disconnect': case 'raw': case 'join': case 'part': case 'rejoin': case 'msg': case 'delete': case 'info': case 'status': case 'channels': case 'set': case 'active': case 'ipv6': case 'link': case 'unlink': case 'linkinfo':
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
19 if (!isset($networks[$parts[2]])) return 'ERR Network does not exist';
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
20 return admincmd_network($parts[1], $networks[$parts[2]], array_slice($parts, 3));
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
21 case 'list': return 'OK '.implode('; ', array_keys($networks));
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
22 case 'help':
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
23 return 'OK list; disconnect [net]; raw [net] [text]; join [net] [ch]; part [net] [ch]; rejoin [net] [ch]; msg [net] [ch] [msg]; help; delete; info; status; channels; set [name] [server] [port] [nick]; active [enable]; ipv6 [enable]; link [name] [channel] [display]; unlink [name]; linkinfo [name]';
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
24 }
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
25 break;
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
26 case 'help':
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
27 return 'OK die; channel help; network help';
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
28 }
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
29 return 'ERR Unknown command';
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
30 }
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
31 function admincmd_channel($cmd, $chn, $parts) {
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
32 switch (strtolower($cmd)) {
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
33 case 'links':
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
34 $arr = array();
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
35 foreach ($chn->links as $link) $arr[] = $link->network->key.'/'.$link->name;
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
36 return 'OK '.implode('; ', $arr);
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
37 case 'join':
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
38 foreach ($chn->links as $link) if ($link->network->connected) network_send($link->network, 'JOIN '.$link->name);
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
39 return 'OK';
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
40 case 'part':
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
41 foreach ($chn->links as $link) if ($link->network->connected) network_send($link->network, 'PART '.$link->name);
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
42 return 'OK';
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
43 case 'rejoin':
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
44 foreach ($chn->links as $link) if ($link->network->connected) network_send($link->network, 'PART '.$link->name);
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
45 foreach ($chn->links as $link) if ($link->network->connected) network_send($link->network, 'JOIN '.$link->name);
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
46 return 'OK';
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
47 case 'msg':
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
48 foreach ($chn->links as $link) if ($link->network->connected) network_send($link->network, 'PRIVMSG '.$link->name.' :'.implode(' ', array_slice($parts, 0)));
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
49 return 'OK';
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
50 }
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
51 return 'ERR Unknown command';
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
52 }
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
53 function admincmd_network($cmd, $net, $parts) {
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
54 global $channels;
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
55 switch (strtolower($cmd)) {
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
56 case 'disconnect':
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
57 network_reset($net);
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
58 return 'OK';
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
59 case 'raw':
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
60 network_send($net, implode(' ', array_slice($parts, 0)));
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
61 return 'OK';
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
62 case 'join':
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
63 network_send($net, 'JOIN '.$parts[0]);
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
64 return 'OK';
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
65 case 'part':
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
66 network_send($net, 'PART '.$parts[0]);
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
67 return 'OK';
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
68 case 'rejoin':
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
69 network_send($net, 'JOIN '.$parts[0]);
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
70 network_send($net, 'PART '.$parts[0]);
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
71 return 'OK';
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
72 case 'msg':
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
73 network_send($net, 'PRIVMSG '.$parts[0].' :'.implode(' ', array_slice($parts, 1)));
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
74 return 'OK';
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
75 case 'delete':
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
76 network_Reset($net);
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
77 unset($networks[$net->key]);
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
78 return 'OK';
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
79 case 'info':
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
80 return 'OK key='.$net->key.'; name='.$net->name.'; server='.$net->server.'; port='.$net->port.'; nick='.$net->nick.'; active='.$net->active.'; af='.$net->addressfamily;
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
81 case 'status':
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
82 return 'OK connected='.$net->connected.'; connecting='.$net->connecting.'; timeout='.$net->timeout.'; nick='.$net->realnick;
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
83 case 'channels':
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
84 return 'OK '.implode('; ', array_keys($net->channels));
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
85 case 'set':
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
86 $net->name = $parts[0];
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
87 $net->server = $parts[1];
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
88 $net->port = (int)$parts[2];
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
89 $net->nick = $parts[3];
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
90 return 'OK';
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
91 case 'active':
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
92 $net->active = $parts[0];
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
93 return 'OK';
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
94 case 'ipv6':
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
95 $net->addressfamily = $parts[0] ? AF_INET6 : AF_INET;
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
96 return 'OK';
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
97 case 'link':
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
98 if (isset($net->channels[$parts[0]])) return 'ERR Channel already linked';
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
99 $link = new NetworkChannel();
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
100 $link->name = $parts[0];
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
101 $link->network = $net;
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
102 $link->channel = getchannel($parts[1]);
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
103 $link->display = implode(' ', array_slice($parts, 2));
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
104 $link->channel->links[] = $link;
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
105 $net->channels[$link->name] = $link;
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
106 if ($net->connected && $link->name[0] == '#') network_send($net, 'JOIN '.$link->name);
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
107 return 'OK';
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
108 case 'unlink':
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
109 if (!isset($net->channels[$parts[0]])) return 'ERR Channel not linked';
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
110 $link = $net->channels[$parts[0]];
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
111 unset($net->channels[$link->name]);
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
112 foreach ($link->channel->links as $k => $l) if ($l === $link) unset($link->channel->links[$k]);
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
113 if (!count($link->channel->links)) unset($channels[$link->channel->name]);
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
114 if ($net->connected && $link->name[0] == '#') network_send($net, 'PART '.$link->name);
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
115 return 'OK';
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
116 case 'linkinfo':
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
117 if (!isset($net->channels[$parts[0]])) return 'ERR Channel not linked';
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
118 $link = $net->channels[$parts[0]];
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
119 return 'OK channel='.$link->channel->name.'; display='.$link->display;
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
120 }
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
121 return 'ERR Unknown command';
dd81c38b513a Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
122 }