]> git.rm.cloudns.org Git - xonotic/darkplaces.git/commitdiff
IRC: primitive message parsing
authorJānis Rūcis <parasti@gmail.com>
Tue, 30 Mar 2010 14:41:01 +0000 (17:41 +0300)
committerJānis Rūcis <parasti@gmail.com>
Sun, 27 Jun 2010 12:23:20 +0000 (15:23 +0300)
irc.c

diff --git a/irc.c b/irc.c
index fd1e2061d5e811ecf11d66333c7bfc5e9f571031..85c4ccd2b36edce541cd2ad2e93931de8685cc8c 100644 (file)
--- a/irc.c
+++ b/irc.c
@@ -115,9 +115,78 @@ static void IRC_IRC_f(void)
                Con_Print("[IRC] Not connected to a server.\n");
 }
 
-static void IRC_ProcessMessage(const char *msg)
+typedef struct ircmessage_s
 {
-       Con_Printf("[IRC} %s\n", msg);
+       char *prefix;
+       char *command;
+       char *args;
+}
+ircmessage_t;
+
+static void IRC_ProcessMessage(const char *line)
+{
+       const int line_len = strlen(line);
+       const char *line_end = line + line_len;
+       ircmessage_t msg;
+       int len;
+
+       memset(&msg, 0, sizeof (msg));
+
+       if (line[0] == ':')
+       {
+               line += 1;
+
+               len = strcspn(line, " ");
+
+               if (line + len == line_end)
+                       return;
+
+               msg.prefix = Z_Malloc(len + 1);
+               memcpy(msg.prefix, line, len);
+               msg.prefix[len] = 0;
+
+               line += len;
+               line += strspn(line, " ");
+       }
+       else
+               msg.prefix = NULL;
+
+       len = strcspn(line, " ");
+
+       msg.command = Z_Malloc(len + 1);
+       memcpy(msg.command, line, len);
+       msg.command[len] = 0;
+
+       if (line + len != line_end)
+       {
+               line += len;
+               line += strspn(line, " ");
+
+               len = line_end - line;
+
+               msg.args = Z_Malloc(len + 1);
+               memcpy(msg.args, line, len);
+               msg.args[len] = 0;
+       }
+       else
+               msg.args = NULL;
+
+       Con_Printf("[IRC] prefix:  %s\n"
+                          "[IRC] command: %s\n"
+                          "[IRC] args:    %s\n",
+                          msg.prefix ? msg.prefix : "",
+                          msg.command,
+                          msg.args ? msg.args : "");
+
+       /* Free stuff. */
+
+       if (msg.prefix)
+               Z_Free(msg.prefix);
+
+       Z_Free(msg.command);
+
+       if (msg.args)
+               Z_Free(msg.args);
 }
 
 static void IRC_ProcessAllMessages(void)