Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <string.h>
- #define MAX_PARAMS 15
- char *g_messages[] = {
- "NOTICE AUTH :*** Processing connection to irc.servercentral.net\r\n"
- "PING :irc.servercentral.net \r\n",
- ":irc.servercentral.net 372 {manpage} :- - \r\n",
- ":irc.servercentral.net 376 {manpage} :End of /MOTD command.\r\n",
- ":{manpage}!~bot@d23-16-195-6.bchsia.telus.net JOIN :#c-test\r\n",
- ":irc.servercentral.net 353 {manpage} = #c-test :{manpage} tofu1\r\n",
- ":irc.servercentral.net 366 {manpage} #c-test :End of /NAMES list.\r\n",
- ":tofu1!~tofu@rootstorm.com PRIVMSG #c-test :test\r\n",
- ":tofu1!~tofu@rootstorm.com PRIVMSG {manpage} :message test\r\n",
- ":tofu1!~tofu@rootstorm.com PRIVMSG {manpage} :PING 1590092030 937335\r\n",
- ":tofu1!~tofu@rootstorm.com PRIVMSG {manpage} :VERSION\r\n",
- NULL,
- };
- typedef struct _IRC_MESSAGE_FIELDS
- {
- char *message;
- char *prefix;
- char *command;
- char *params[MAX_PARAMS + 1];
- } IRC_MESSAGE_FIELDS;
- char *ParseMessage(char *str, IRC_MESSAGE_FIELDS *msg);
- char *ParsePrefix(char *str, IRC_MESSAGE_FIELDS *msg);
- char *ParseCommand(char *str, IRC_MESSAGE_FIELDS *msg);
- char *ParseParams(char *str, IRC_MESSAGE_FIELDS *msg);
- int main(int argc, char **argv)
- {
- IRC_MESSAGE_FIELDS msg;
- char *no_prefix = strdup("PING :irc.servercentral.net \r\n");
- char *prefix = strdup(":tofu1!~tofu@rootstorm.com PRIVMSG {manpage} :message test\r\n");
- // ParseMessage(no_prefix, &msg);
- ParseMessage(prefix, &msg);
- puts(msg.message);
- if (msg.prefix != NULL)
- printf("prefix: %s\n", msg.prefix);
- else
- printf("prefix: NULL\n");
- printf("command: %s\n", msg.command);
- printf("params: {\n");
- for (int i = 0; msg.params[i] != NULL; i++)
- puts(msg.params[i]);
- printf("}\n");
- return 0;
- }
- // <message> ::= [':' <prefix> <SPACE> ] <command> <params> <crlf>
- char *ParseMessage(char *str, IRC_MESSAGE_FIELDS *msg)
- {
- msg->message = strdup(str);
- char *head = strtok(str, ":");
- char *tail = strtok(NULL, ":");
- if (str[0] == ':')
- {
- ParsePrefix(head, msg);
- }
- else // there was no prefix
- {
- msg->prefix = NULL;
- ParseCommand(head, msg);
- }
- return NULL;
- }
- // <prefix> ::= <servername> | <nick> [ '!' <user> ] [ '@' <host> ]
- char *ParsePrefix(char *str, IRC_MESSAGE_FIELDS *msg)
- {
- msg->prefix = strtok(str, " ");
- ParseCommand(NULL, msg);
- return NULL;
- }
- // <command> ::= <letter> { <letter> } | <number> <number> <number>
- char *ParseCommand(char *str, IRC_MESSAGE_FIELDS *msg)
- {
- if (str == NULL)
- {
- msg->command = strtok(NULL, " ");
- }
- else // there was no prefix
- {
- msg->command = strtok(str, " ");
- puts(msg->command);
- }
- ParseParams(NULL, msg);
- return NULL;
- }
- // <params> ::= <SPACE> [ ':' <trailing> | <middle> <params> ]
- char *ParseParams(char *str, IRC_MESSAGE_FIELDS *msg)
- {
- int i = -1;
- do
- {
- i++;
- msg->params[i] = strtok(NULL, " ");
- } while (msg->params[i] != NULL);
- return NULL;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement