00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef __EKG_PLUGINS_IRC_MISC_H
00019 #define __EKG_PLUGINS_IRC_MISC_H
00020
00021 #include <stdio.h>
00022
00023 #include <ekg/plugins.h>
00024 #include <ekg/sessions.h>
00025
00026 #include "irc.h"
00027
00028 #define IRC_COMMAND(x) static int x(session_t *s, irc_private_t *j, int fd, int ecode, char **param)
00029 typedef int (*Irc_Cmd) (session_t * , irc_private_t * , int , int , char **);
00030
00031 #define IRC_LISTBAN 0x001
00032 #define IRC_LISTEXC 0x002
00033 #define IRC_LISTINV 0x004
00034 #define IRC_LISTLIN 0x008
00035 #define IRC_LISTSTA 0x010
00036 #define IRC_LISTWHO 0x020
00037 #define IRC_LISTCHA 0x040
00038 #define IRC_LISTEND 0x080
00039
00040 #define IRC_WHOIS 0x001
00041 #define IRC_WHOWAS 0x002
00042 #define IRC_WHOERR 0x004
00043
00044 enum { IRC_ERR_12=0, IRC_ERR_21, IRC_ERR_ONLY1, IRC_ERR_NEW, IRC_ERR_IGNO,
00045 IRC_ERR_OTHER,
00046
00047 IRC_RPL_12=256, IRC_RPL_21, IRC_RPL_ONLY1, IRC_RPL_NEW, IRC_RPL_IGNO,
00048 IRC_RPL_OTHER };
00049
00050 typedef struct {
00051 int type;
00052 int num;
00053 const char *comm;
00054 const char *name;
00055 Irc_Cmd handler;
00056 int future;
00057 } IrcCommand;
00058
00059 IRC_COMMAND(irc_c_init);
00060 IRC_COMMAND(irc_c_invite);
00061 IRC_COMMAND(irc_c_ping);
00062 IRC_COMMAND(irc_c_nick);
00063 IRC_COMMAND(irc_c_msg);
00064 IRC_COMMAND(irc_c_join);
00065 IRC_COMMAND(irc_c_part);
00066 IRC_COMMAND(irc_c_kick);
00067 IRC_COMMAND(irc_c_quit);
00068 IRC_COMMAND(irc_c_error);
00069 IRC_COMMAND(irc_c_list);
00070 IRC_COMMAND(irc_c_namerpl);
00071 IRC_COMMAND(irc_c_mode);
00072 IRC_COMMAND(irc_c_topic);
00073 IRC_COMMAND(irc_c_whois);
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096 static const IrcCommand irccommands[] =
00097 {
00098 { 1, -1, NULL, NULL, &irc_c_error, IRC_ERR_NEW },
00099 { 1, 1, NULL, "RPL_WELCOME", &irc_c_init, 0 },
00100 { 1, 2, NULL, "RPL_YOURHOST", &irc_c_init, 0 },
00101 { 1, 3, NULL, "RPL_CREATED", &irc_c_init, 0 },
00102 { 1, 4, NULL, "RPL_MYINFO", &irc_c_init, 0 },
00103 { 1, 5, NULL, "RPL_BOUNCE", &irc_c_init, 0 },
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125 { 1, 212, NULL, "RPL_STATS", &irc_c_list, IRC_LISTSTA},
00126
00127 { 1, 213, NULL, "RPL_STATS_EXT", &irc_c_list, IRC_LISTSTA},
00128
00129 { 1, 215, NULL, "RPL_STATS_EXT", &irc_c_list, IRC_LISTSTA},
00130
00131 { 1, 216, NULL, "RPL_STATS_EXT", &irc_c_list, IRC_LISTSTA},
00132
00133 { 1, 218, NULL, "RPL_STATS", &irc_c_list, IRC_LISTSTA},
00134 { 1, 219, NULL, "RPL_STATSEND", &irc_c_list, IRC_LISTSTA|IRC_LISTEND },
00135
00136 { 1, 220, NULL, "RPL_STATS_EXT", &irc_c_list, IRC_LISTSTA},
00137
00138 { 1, 226, NULL, "RPL_STATS", &irc_c_list, IRC_LISTSTA},
00139
00140 { 1, 242, NULL, "RPL_STATS", &irc_c_list, IRC_LISTSTA},
00141
00142 { 1, 243, NULL, "RPL_STATS_EXT", &irc_c_list, IRC_LISTSTA},
00143
00144 { 1, 244, NULL, "RPL_STATS", &irc_c_list, IRC_LISTSTA},
00145
00146 { 1, 249, NULL, "RPL_STATS", &irc_c_list, IRC_LISTSTA},
00147
00148
00149
00150
00151
00152
00153
00154
00155
00156
00157
00158
00159
00160
00161
00162
00163
00164
00165 { 1, 263, NULL, "RPL_TRYAGAIN", &irc_c_error, IRC_ERR_ONLY1},
00166
00167
00168
00169
00170 { 1, 301, NULL, "RPL_AWAY", &irc_c_error, IRC_RPL_OTHER},
00171 { 1, 305, NULL, "RPL_UNAWAY", &irc_c_error, IRC_RPL_ONLY1},
00172 { 1, 306, NULL, "RPL_NOWAWAY", &irc_c_error, IRC_RPL_ONLY1},
00173
00174 { 1, 311, NULL, "RPL_WHOISUSER", &irc_c_whois,IRC_WHOIS},
00175 { 1, 312, NULL, "RPL_WHOISSERVER", &irc_c_whois,IRC_WHOIS},
00176 { 1, 313, NULL, "RPL_WHOISOPERATOR", &irc_c_whois,IRC_WHOIS},
00177 { 1, 317, NULL, "RPL_WHOISIDLE", &irc_c_whois,IRC_WHOIS},
00178 { 1, 318, NULL, "RPL_ENDOFWHOIS", &irc_c_whois,IRC_WHOIS},
00179 { 1, 319, NULL, "RPL_WHOISCHANNELS", &irc_c_whois,IRC_WHOIS},
00180 { 1, 320, NULL, "RPL_WHOISMISC", &irc_c_whois,IRC_WHOIS},
00181 { 1, 314, NULL, "RPL_WHOWASUSER", &irc_c_whois,IRC_WHOWAS},
00182 { 1, 369, NULL, "RPL_ENDOFWHOWAS", &irc_c_whois,IRC_WHOWAS},
00183
00184
00185 { 1, 315, NULL, "RPL_ENDOFWHO", &irc_c_list, IRC_LISTWHO|IRC_LISTEND },
00186 { 1, 352, NULL, "RPL_WHOREPLY", &irc_c_list, IRC_LISTWHO },
00187
00188
00189
00190 { 1, 321, NULL, "RPL_CHLISTSTART", &irc_c_list, IRC_LISTCHA },
00191 { 1, 322, NULL, "RPL_LIST", &irc_c_list, IRC_LISTCHA },
00192 { 1, 323, NULL, "RPL_LISTEND", &irc_c_list, IRC_LISTCHA|IRC_LISTEND },
00193
00194
00195 { 1, 324, NULL, "RPL_CHANNELMODEIS", &irc_c_mode, IRC_RPL_OTHER},
00196
00197 { 1, 331, NULL, "RPL_TOPIC", &irc_c_error, IRC_RPL_OTHER},
00198 { 1, 332, NULL, "RPL_TOPIC", &irc_c_error, IRC_RPL_OTHER},
00199
00200 { 1, 333, NULL, "RPL_TOPICBY", &irc_c_error, IRC_RPL_OTHER},
00201 { 1, 341, NULL, "RPL_INVITE", &irc_c_error, IRC_RPL_OTHER},
00202
00203
00204 { 1, 353, NULL, "RPL_NAMREPLY", &irc_c_namerpl, 0 },
00205 { 1, 364, NULL, "RPL_LINKS", &irc_c_list, IRC_LISTLIN },
00206 { 1, 365, NULL, "RPL_ENDOFLINKS", &irc_c_list, IRC_LISTLIN|IRC_LISTEND },
00207
00208 { 1, 346, NULL, "RPL_INVITELIST", &irc_c_list, IRC_LISTINV },
00209 { 1, 347, NULL, "RPL_ENDOFLIST", &irc_c_list, IRC_LISTINV|IRC_LISTEND },
00210 { 1, 348, NULL, "RPL_EXCEPTLIST", &irc_c_list, IRC_LISTEXC },
00211 { 1, 349, NULL, "RPL_ENDOFLIST", &irc_c_list, IRC_LISTEXC|IRC_LISTEND },
00212
00213 { 1, 366, NULL, "RPL_ENDOFNAMES", &irc_c_error, IRC_RPL_IGNO},
00214 { 1, 367, NULL, "RPL_BANLIST", &irc_c_list, IRC_LISTBAN },
00215 { 1, 368, NULL, "RPL_ENDOFBANLIST", &irc_c_list, IRC_LISTBAN|IRC_LISTEND },
00216
00217 { 1, 372, NULL, "RPL_MOTD", &irc_c_error, IRC_RPL_OTHER},
00218
00219 { 1, 375, NULL, "RPL_MOTDSTART", &irc_c_error, IRC_RPL_OTHER},
00220 { 1, 376, NULL, "RPL_ENDOFMOTD", &irc_c_error, IRC_RPL_OTHER},
00221
00222
00223
00224
00225
00226
00227
00228
00229
00230 { 1, 401, NULL, "ERR_NOSUCHNICK", &irc_c_error, IRC_ERR_21 },
00231 { 1, 402, NULL, "ERR_NOSUCHSERVER", &irc_c_error, IRC_ERR_21 },
00232 { 1, 403, NULL, "ERR_NOSUCHCHANNEL", &irc_c_error, IRC_ERR_21 },
00233
00234
00235
00236
00237
00238
00239
00240
00241 { 1, 404, NULL, "ERR_CANNOTSENDTOCHAN", &irc_c_error, IRC_ERR_OTHER },
00242 { 1, 404, NULL, "ERR_CANNOTSENDTOCHAN", &irc_c_error, IRC_ERR_OTHER },
00243 { 1, 405, NULL, "ERR_TOOMANYCHANNELS", &irc_c_error, IRC_ERR_12 },
00244 { 1, 406, NULL, "ERR_WASNOSUCHNICK", &irc_c_error, IRC_ERR_21 },
00245 { 1, 407, NULL, "ERR_TOOMANYTARGETS", &irc_c_error, IRC_ERR_12 },
00246 { 1, 408, NULL, "ERR_NOSUCHSERVICE", &irc_c_error, IRC_ERR_21 },
00247 { 1, 409, NULL, "ERR_NOORIGIN", &irc_c_error, IRC_ERR_ONLY1 },
00248 { 1, 411, NULL, "ERR_NORECIPIENT", &irc_c_error, IRC_ERR_ONLY1 },
00249 { 1, 412, NULL, "ERR_NOTEXTTOSEND", &irc_c_error, IRC_ERR_ONLY1 },
00250 { 1, 413, NULL, "ERR_NOTOPLEVEL", &irc_c_error, IRC_ERR_21 },
00251 { 1, 414, NULL, "ERR_WILDTOPLEVEL", &irc_c_error, IRC_ERR_21 },
00252 { 1, 415, NULL, "ERR_BADMASK", &irc_c_error, IRC_ERR_21 },
00253 { 1, 421, NULL, "ERR_UNKNOWNCOMMAND", &irc_c_error, IRC_ERR_21 },
00254 { 1, 422, NULL, "ERR_NOMOTD", &irc_c_error, IRC_ERR_ONLY1 },
00255 { 1, 423, NULL, "ERR_NOADMININFO", &irc_c_error, IRC_ERR_12 },
00256 { 1, 424, NULL, "ERR_FILEERROR", &irc_c_error, IRC_ERR_ONLY1 },
00257 { 1, 431, NULL, "ERR_NONICKNAMEGIVEN", &irc_c_error, IRC_ERR_ONLY1 },
00258 { 1, 432, NULL, "ERR_ERRONEUSNICKNAME", &irc_c_error, IRC_ERR_21 },
00259 { 1, 433, NULL, "ERR_NICKNAMEINUSE", &irc_c_error, IRC_ERR_OTHER },
00260 { 1, 436, NULL, "ERR_NICKCOLLISION", &irc_c_error, IRC_ERR_12 },
00261 { 1, 437, NULL, "ERR_UNAVAILRESOURCE", &irc_c_error, IRC_ERR_12 },
00262 { 1, 441, NULL, "ERR_USERNOTINCHANNEL", &irc_c_error, IRC_ERR_NEW },
00263 { 1, 442, NULL, "ERR_NOTONCHANNEL", &irc_c_error, IRC_ERR_21 },
00264 { 1, 443, NULL, "ERR_USERONCHANNEL", &irc_c_error, IRC_ERR_NEW },
00265 { 1, 444, NULL, "ERR_NOLOGIN", &irc_c_error, IRC_ERR_12 },
00266 { 1, 445, NULL, "ERR_SUMMONDISABLED", &irc_c_error, IRC_ERR_ONLY1 },
00267 { 1, 446, NULL, "ERR_USERSDISABLED", &irc_c_error, IRC_ERR_ONLY1 },
00268 { 1, 451, NULL, "ERR_NOTREGISTERED", &irc_c_error, IRC_ERR_ONLY1 },
00269 { 1, 461, NULL, "ERR_NEEDMOREPARAMS", &irc_c_error, IRC_ERR_12 },
00270 { 1, 462, NULL, "ERR_ALREADYREGISTRED", &irc_c_error, IRC_ERR_ONLY1 },
00271 { 1, 463, NULL, "ERR_NOPERMFORHOST", &irc_c_error, IRC_ERR_ONLY1 },
00272 { 1, 464, NULL, "ERR_PASSWDMISMATCH", &irc_c_error, IRC_ERR_ONLY1 },
00273 { 1, 465, NULL, "ERR_YOUREBANNEDCREEP", &irc_c_error, IRC_ERR_ONLY1 },
00274 { 1, 466, NULL, "ERR_YOUWILLBEBANNED", &irc_c_error, IRC_ERR_NEW },
00275 { 1, 467, NULL, "ERR_KEYSET", &irc_c_error, IRC_ERR_12 },
00276 { 1, 471, NULL, "ERR_CHANNELISFULL", &irc_c_error, IRC_ERR_12 },
00277 { 1, 472, NULL, "ERR_UNKNOWNMODE", &irc_c_error, IRC_ERR_12 },
00278 { 1, 473, NULL, "ERR_INVITEONLYCHAN", &irc_c_error, IRC_ERR_12 },
00279 { 1, 474, NULL, "ERR_BANNEDFROMCHAN", &irc_c_error, IRC_ERR_12 },
00280 { 1, 475, NULL, "ERR_BADCHANNELKEY", &irc_c_error, IRC_ERR_12 },
00281 { 1, 476, NULL, "ERR_BADCHANMASK", &irc_c_error, IRC_ERR_12 },
00282 { 1, 477, NULL, "ERR_NOCHANMODES", &irc_c_error, IRC_ERR_12 },
00283 { 1, 478, NULL, "ERR_BANLISTFULL", &irc_c_error, IRC_ERR_NEW },
00284 { 1, 481, NULL, "ERR_NOPRIVILEGES", &irc_c_error, IRC_ERR_ONLY1 },
00285 { 1, 482, NULL, "ERR_CHANOPRIVSNEEDED", &irc_c_error, IRC_ERR_12 },
00286 { 1, 483, NULL, "ERR_CANTKILLSERVER", &irc_c_error, IRC_ERR_ONLY1 },
00287 { 1, 484, NULL, "ERR_RESTRICTED", &irc_c_error, IRC_ERR_ONLY1 },
00288 { 1, 485, NULL, "ERR_UNIQOPPRIVSNEEDED",&irc_c_error, IRC_ERR_ONLY1 },
00289 { 1, 491, NULL, "ERR_NOOPERHOST", &irc_c_error, IRC_ERR_ONLY1 },
00290 { 1, 501, NULL, "ERR_UMODEUNKNOWNFLAG", &irc_c_error, IRC_ERR_ONLY1 },
00291 { 1, 502, NULL, "ERR_USERSDONTMATCH", &irc_c_error, IRC_ERR_ONLY1 },
00292
00293 { 0, 0, "PING", "PING", &irc_c_ping, 0 },
00294 { 0, 0, "INVITE", "INVITE", &irc_c_invite, 0 },
00295 { 0, 0, "NICK", "NICK", &irc_c_nick, 0 },
00296 { 0, 0, "PRIVMSG", "PRIVMSG", &irc_c_msg, 0 },
00297 { 0, 0, "NOTICE", "NOTICE", &irc_c_msg, 0 },
00298 { 0, 0, "JOIN", "JOIN", &irc_c_join, 0 },
00299 { 0, 0, "PART", "PART", &irc_c_part, 0 },
00300 { 0, 0, "KICK", "KICK", &irc_c_kick, 0 },
00301 { 0, 0, "QUIT", "QUIT", &irc_c_quit, 0 },
00302 { 0, 0, "MODE", "MODE", &irc_c_mode, 0 },
00303 { 0, 0, "TOPIC", "TOPIC", &irc_c_topic, 0 },
00304 { 0, 0, "ERROR", "ERROR", &irc_c_error, 0 },
00305 { -1, -1, NULL, NULL, NULL, 0 }
00306 };
00307
00308
00309
00310
00311 #endif
00312
00313
00314
00315
00316
00317
00318
00319
00320