3 #include "ClientSocket.h"
5 struct irc_cmd *irc_commands = NULL;
7 int parse_lines(struct ClientSocket *client, char *lines, int len) {
9 for(i = 0; i < len; i++) {
10 if(lines[i] == "\r") //just zero it out :D
12 if(lines[i] == "\n") {
14 parse_line(client, lines);
22 static void parse_line(struct ClientSocket *client, char *line) {
24 char *argv[MAXNUMPARAMS];
25 printf("[recv %s] %s", strlen(line), line);
35 //the rest is a single parameter
36 argv[argc++] = line + 1;
39 if (argc >= MAXNUMPARAMS)
41 while (*line != ' ' && *line)
45 parse_raw(client, argv[0], argv[1], argv+2, argc-2);
49 static void register_irc_function(char *command, irc_cmd_t *func) {
50 struct irc_cmd *irc_cmd = malloc(sizeof(*irc_cmd));
53 perror("malloc() failed");
56 irc_cmd->cmd = command;
58 irc_cmd->next = irc_commands;
59 irc_commands = irc_cmd;
64 register_irc_function("001", raw_001);
68 static void parse_raw(struct ClientSocket *client, char *from, char *cmd, char **argv, int argc) {
69 struct irc_cmd *irc_cmd;
70 for(irc_cmd = irc_commands; irc_cmd; irc_cmd = irc_cmd->next) {
71 if(!stricmp(irc_cmd->cmd)) {
72 irc_cmd->func(client, from, argv, argc);
78 static IRC_CMD(raw_001) {
79 client->flags |= SOCKET_FLAG_READY;
80 write_socket(client, "PRIVMSG Watchcat :hi\n", 21);