X-Git-Url: https://git.armaanb.net/?a=blobdiff_plain;f=sic.c;h=b2fc38c2242033d51ab36217e67904a81cbb520c;hb=78e0c4f9ee1b689aff5b33c9aac1b86bf93ce6b3;hp=028cdef2560d6c9bf5e55204691525ead60a9630;hpb=b1989c74e6ba19f26b16215c4986c8a91e102d82;p=sic.git diff --git a/sic.c b/sic.c index 028cdef..b2fc38c 100644 --- a/sic.c +++ b/sic.c @@ -11,6 +11,7 @@ #include #include #include +#include #include #include @@ -20,7 +21,7 @@ enum { Tnick, Tuser, Tcmd, Tchan, Targ, Ttext, Tlast }; static char *server = "irc.oftc.net"; -static int port = 6667; +static unsigned short port = 6667; static char *nick = NULL; static char *fullname = NULL; static char *password = NULL; @@ -52,13 +53,13 @@ pout(char *channel, char *msg) time_t t = time(0); strftime(timestr, sizeof(timestr), "%a %R", localtime(&t)); - fprintf(stdout, "%-12.12s: %s %s\n", channel, timestr, msg); + fprintf(stdout, "%-8.8s: %s %s\n", channel, timestr, msg); } static void privmsg(char *channel, char *msg) { - snprintf(bufout, sizeof(bufout), "<%12s> %s", nick, msg); + snprintf(bufout, sizeof(bufout), "<%s> %s", nick, msg); pout(channel, bufout); snprintf(bufout, sizeof(bufout), "PRIVMSG %s :%s\r\n", channel, msg); write(srv, bufout, strlen(bufout)); @@ -69,40 +70,33 @@ parsein(char *msg) { char *p; + if(msg[0] == 0) + return; if(msg[0] != '/') { privmsg(channel, msg); return; } - if((p = strchr(&msg[3], ' '))) - *(p++) = 0; - switch (msg[1]) { - default: - snprintf(bufout, sizeof(bufout), "%s\r\n", &msg[1]); - break; - case 'j': - if(msg[3] == '#') - snprintf(bufout, sizeof(bufout), "JOIN %s\r\n", &msg[3]); - else if(p) { - privmsg(&msg[3], p + 1); - return; - } - break; - case 'l': - if(p) - snprintf(bufout, sizeof(bufout), "PART %s :%s\r\n", &msg[3], p); - else - snprintf(bufout, sizeof(bufout), "PART %s :sic\r\n", &msg[3]); - break; - case 'm': + if(!strncmp(msg + 1, "j ", 2) && (msg[3] == '#')) + snprintf(bufout, sizeof(bufout), "JOIN %s\r\n", &msg[3]); + else if(!strncmp(msg + 1, "l ", 2)) + snprintf(bufout, sizeof(bufout), "PART %s :sic\r\n", &msg[3]); + else if(!strncmp(msg + 1, "m ", 2)) { + if(p = strchr(&msg[3], ' ')) + *(p++) = 0; privmsg(&msg[3], p); return; - case 's': + } + else if(!strncmp(msg + 1, "s ", 2)) { strncpy(channel, &msg[3], sizeof(channel)); return; - case 't': + } + else if(!strncmp(msg + 1, "t ", 2)) { + if(p = strchr(&msg[3], ' ')) + *(p++) = 0; snprintf(bufout, sizeof(bufout), "TOPIC %s :%s\r\n", &msg[3], p); - break; } + else + snprintf(bufout, sizeof(bufout), "%s\r\n", &msg[1]); write(srv, bufout, strlen(bufout)); } @@ -225,7 +219,7 @@ parsesrv(char *msg) snprintf(bufout, sizeof(bufout), "-!- \"%s\")", argv[Ttext] ? argv[Ttext] : ""); else if(!strncmp("PRIVMSG", argv[Tcmd], 8)) - snprintf(bufout, sizeof(bufout), "<%12s> %s", + snprintf(bufout, sizeof(bufout), "<%s> %s", argv[Tnick], argv[Ttext] ? argv[Ttext] : ""); if(!argv[Tchan] || !strncmp(argv[Tchan], nick, strlen(nick))) pout(argv[Tnick], bufout); @@ -239,14 +233,10 @@ main(int argc, char *argv[]) int i; struct timeval tv; struct hostent *hp; - struct sockaddr_in addr = { 0 }; + static struct sockaddr_in addr; /* initially filled with 0's */ char ping[256]; fd_set rd; - pout(server, "test 123"); - pout(server, "test whdhwdwjdw djwhdwkjdwhk dwhdwkdw 123"); - pout("kjfwefiuewu", "test 123"); - pout(server, "test dwdw 123"); nick = fullname = getenv("USER"); for(i = 1; (i < argc) && (argv[i][0] == '-'); i++) { switch (argv[i][1]) { @@ -259,7 +249,7 @@ main(int argc, char *argv[]) server = argv[++i]; break; case 'p': - port = atoi(argv[++i]); + port = (unsigned short)atoi(argv[++i]); break; case 'n': nick = argv[++i]; @@ -282,10 +272,13 @@ main(int argc, char *argv[]) fprintf(stderr, "sic: cannot connect server '%s'\n", server); exit(EXIT_FAILURE); } - hp = gethostbyname(server); + if (NULL == (hp = gethostbyname(server))) { + fprintf(stderr, "sic: cannot resolve hostname '%s'\n", server); + exit(EXIT_FAILURE); + } addr.sin_family = AF_INET; addr.sin_port = htons(port); - bcopy(hp->h_addr, &addr.sin_addr, hp->h_length); + memcpy(&addr.sin_addr, hp->h_addr, hp->h_length); if(connect(srv, (struct sockaddr *) &addr, sizeof(struct sockaddr_in))) { close(srv); fprintf(stderr, "sic: cannot connect server '%s'\n", server); @@ -296,10 +289,10 @@ main(int argc, char *argv[]) if(password) snprintf(bufout, sizeof(bufout), "PASS %s\r\nNICK %s\r\nUSER %s localhost %s :%s\r\n", - password, nick, nick, server, fullname ? fullname : nick); + password, nick, nick, server, fullname); else snprintf(bufout, sizeof(bufout), "NICK %s\r\nUSER %s localhost %s :%s\r\n", - nick, nick, server, fullname ? fullname : nick); + nick, nick, server, fullname); write(srv, bufout, strlen(bufout)); snprintf(ping, sizeof(ping), "PING %s\r\n", server);