7 #include "ClientSocket.h"
9 struct irc_cmd *irc_commands = NULL;
11 static void parse_line(struct ClientSocket *client, char *line);
12 static void register_irc_function(char *command, irc_cmd_t *func);
13 static void parse_raw(struct ClientSocket *client, char *from, char *cmd, char **argv, int argc);
15 int parse_lines(struct ClientSocket *client, char *lines, int len) {
18 for(i = 0; i < len; i++) {
19 if(lines[i] == '\r') //just zero it out :D
21 if(lines[i] == '\n') {
23 parse_line(client, line);
31 static void parse_line(struct ClientSocket *client, char *line) {
33 char *argv[MAXNUMPARAMS];
34 printf("[recv %lu] %s\n", (unsigned long) strlen(line), line);
44 //the rest is a single parameter
45 argv[argc++] = line + 1;
48 if (argc >= MAXNUMPARAMS)
50 while (*line != ' ' && *line)
54 parse_raw(client, argv[0], argv[1], argv+2, argc-2);
58 static void register_irc_function(char *command, irc_cmd_t *func) {
59 struct irc_cmd *irc_cmd = malloc(sizeof(*irc_cmd));
62 perror("malloc() failed");
65 irc_cmd->cmd = command;
67 irc_cmd->next = irc_commands;
68 irc_commands = irc_cmd;
71 static void parse_raw(struct ClientSocket *client, char *from, char *cmd, char **argv, int argc) {
72 struct irc_cmd *irc_cmd;
74 for(irc_cmd = irc_commands; irc_cmd; irc_cmd = irc_cmd->next) {
75 if(!stricmp(irc_cmd->cmd, cmd)) {
76 ret = irc_cmd->func(client, from, argv, argc);
81 //fprintf(stderr,"PARSE ERROR: %s", cmd); commented out right now - we're still developing and this is very spammy
85 static IRC_CMD(raw_001) {
86 client->flags |= SOCKET_FLAG_READY;
87 putsock(client, "JOIN #pktest");
91 static IRC_CMD(raw_join) {
92 if(from == NULL || argc < 1) return 0;
93 struct UserNode *user = getUserByMask(from);
95 user = addUserMask(from);
97 struct ChanNode *chan = getChanByName(argv[0]);
99 chan = addChannel(argv[0]);
102 putsock(client, "PRIVMSG #pktest :hi");
107 static IRC_CMD(raw_ping) {
108 if(argc == 0) return 0;
109 putsock(client, "PONG :%s", argv[0]);
114 //all the raws we receive...
115 register_irc_function("001", raw_001);
116 register_irc_function("JOIN", raw_join);
117 register_irc_function("PING", raw_ping);