X-Git-Url: https://git.armaanb.net/?a=blobdiff_plain;f=sic.c;h=8d6580918df69c13a3395d71654876350af4e4c5;hb=c2fcf48e6d334234859c5e015ec6cc816bca451b;hp=7199c14381b810bce0badac9bc71fb1641383fb1;hpb=1871cf41b32fb5d7a750a2de250d19d21e00cec8;p=sic.git diff --git a/sic.c b/sic.c index 7199c14..8d65809 100644 --- a/sic.c +++ b/sic.c @@ -10,19 +10,20 @@ #include #include #include -#include #include +#include +#include +#include #define PINGTIMEOUT 300 #define MAXMSG 4096 enum { Tnick, Tuser, Tcmd, Tchan, Targ, Ttext, Tlast }; -/* CUSTOMIZE */ static char *server = "irc.oftc.net"; -static int port = 6667; -static char *nick = "arg"; -static char *fullname = "Anselm R. Garbe"; +static unsigned short port = 6667; +static char *nick = NULL; +static char *fullname = NULL; static char *password = NULL; static char bufin[MAXMSG], bufout[MAXMSG]; @@ -52,7 +53,7 @@ pout(char *channel, char *msg) time_t t = time(0); strftime(timestr, sizeof(timestr), "%a %R", localtime(&t)); - fprintf(stdout, "%s: %s %s\n", channel, timestr, msg); + fprintf(stdout, "%-8.8s: %s %s\n", channel, timestr, msg); } static void @@ -69,6 +70,8 @@ parsein(char *msg) { char *p; + if(msg[0] == 0) + return; if(msg[0] != '/') { privmsg(channel, msg); return; @@ -224,7 +227,8 @@ parsesrv(char *msg) else if(!strncmp("NOTICE", argv[Tcmd], 7)) snprintf(bufout, sizeof(bufout), "-!- \"%s\")", argv[Ttext] ? argv[Ttext] : ""); - else if(!strncmp("PRIVMSG", argv[Tcmd], 8)) snprintf(bufout, sizeof(bufout), "<%s> %s", + else if(!strncmp("PRIVMSG", argv[Tcmd], 8)) + 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); @@ -238,10 +242,11 @@ 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; + nick = fullname = getenv("USER"); for(i = 1; (i < argc) && (argv[i][0] == '-'); i++) { switch (argv[i][1]) { default: @@ -250,19 +255,19 @@ main(int argc, char *argv[]) exit(EXIT_FAILURE); break; case 's': - server = argv[i++]; + server = argv[++i]; break; case 'p': - port = atoi(argv[i++]); + port = (unsigned short)atoi(argv[++i]); break; case 'n': - nick = argv[i++]; + nick = argv[++i]; break; case 'k': - password = argv[i++]; + password = argv[++i]; break; case 'f': - fullname = argv[i++]; + fullname = argv[++i]; break; case 'v': fputs("sic-"VERSION", (C)opyright MMVI Anselm R. Garbe\n", stdout); @@ -276,10 +281,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); @@ -289,11 +297,11 @@ main(int argc, char *argv[]) /* login */ if(password) snprintf(bufout, sizeof(bufout), - "PASS %s\r\nNICK %s\r\nUSER %s localserver %s :%s\r\n", - password, nick, nick, server, fullname ? fullname : nick); + "PASS %s\r\nNICK %s\r\nUSER %s localhost %s :%s\r\n", + password, nick, nick, server, fullname); else - snprintf(bufout, sizeof(bufout), "NICK %s\r\nUSER %s localserver %s :%s\r\n", - nick, nick, server, fullname ? fullname : nick); + snprintf(bufout, sizeof(bufout), "NICK %s\r\nUSER %s localhost %s :%s\r\n", + nick, nick, server, fullname); write(srv, bufout, strlen(bufout)); snprintf(ping, sizeof(ping), "PING %s\r\n", server);