diff -u sic-0.9/LICENSE sic-0.9-ipv6/LICENSE --- sic-0.9/LICENSE 2007-02-13 17:02:16.000000000 +0100 +++ sic-0.9-ipv6/LICENSE 2008-05-19 13:32:09.000000000 +0200 @@ -1,6 +1,6 @@ MIT/X Consortium License
-(C)opyright MMV-MMVI Anselm R. Garbe <[EMAIL PROTECTED]> +(C)opyright MMV-MMVIII Anselm R. Garbe <[EMAIL PROTECTED]> (C)opyright MMV Nico Golde <nico at ngolde dot de> Permission is hereby granted, free of charge, to any person obtaining a @@ -20,3 +20,8 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +-------------------------------------------------------------------------------- + +IPv6 code is protected by the GPLv3 +(C)opyright MMVIII Sylvain BERTRAND <sylvain.bertrand at gmail dot com> diff -u sic-0.9/sic.c sic-0.9-ipv6/sic.c --- sic-0.9/sic.c 2008-03-20 12:26:29.000000000 +0100 +++ sic-0.9-ipv6/sic.c 2008-05-19 13:34:16.000000000 +0200 @@ -1,5 +1,6 @@ /* (C)opyright MMV-MMVI Anselm R. Garbe <garbeam at gmail dot com> * (C)opyright MMV-MMVI Nico Golde <nico at ngolde dot de> + * (C)opyright MMVIII Sylvain BERTRAND <sylvain.bertrand at gmail dot com> * See LICENSE file for license details. */ #include <errno.h> @@ -17,8 +18,8 @@ #define PINGTIMEOUT 1000 #define MAXMSG 4096 -static char *host = "irc.freenode.net"; -static unsigned short port = 6667; +static char *host = "ipv6.chat.eu.freenode.net"; +static char *port = "6667"; static char *password = NULL; static char nick[32]; @@ -154,10 +155,9 @@ main(int argc, char *argv[]) { int i; struct timeval tv; - struct hostent *hp; - static struct sockaddr_in addr; /* initially filled with 0's */ char ping[256]; fd_set rd; + struct addrinfo hints,*results,*rp; strncpy(nick, getenv("USER"), sizeof nick); for(i = 1; i < argc; i++) @@ -165,7 +165,7 @@ if(++i < argc) host = argv[i]; } else if(!strncmp(argv[i], "-p", 3)) { - if(++i < argc) port = (unsigned short)atoi(argv[i]); + if(++i < argc) port = argv[i]; } else if(!strncmp(argv[i], "-n", 3)) { if(++i < argc) strncpy(nick, argv[i], sizeof nick); @@ -174,22 +174,24 @@ if(++i < argc) password = argv[i]; } else if(!strncmp(argv[i], "-v", 3)) - eprint("sic-"VERSION", (C)opyright MMVI Anselm R. Garbe\n"); + eprint("sic-"VERSION", (C)opyright MMV-MMVIII Anselm R. Garbe and others\n"); else eprint("usage: sic [-h host] [-p port] [-n nick] [-k keyword] [-v]\n"); /* init */ - if((srv = socket(AF_INET, SOCK_STREAM, 0)) < 0) - eprint("sic: cannot connect host '%s'\n", host); - if(NULL == (hp = gethostbyname(host))) - eprint("sic: cannot resolve hostname '%s'\n", host); - addr.sin_family = AF_INET; - addr.sin_port = htons(port); - memcpy(&addr.sin_addr, hp->h_addr, hp->h_length); - if(connect(srv, (struct sockaddr *) &addr, sizeof(struct sockaddr_in))) { + memset(&hints,0,sizeof(hints)); + hints.ai_family=AF_INET6; + hints.ai_socktype=SOCK_STREAM; + if(getaddrinfo(host,port,&hints,&results)!=0) + eprint("sic: cannot resolve hostname '%s'\n",host); + for(rp=results;rp!=NULL;rp=rp->ai_next){ + if((srv=socket(rp->ai_family,rp->ai_socktype,rp->ai_protocol))<0) continue; + if(connect(srv,rp->ai_addr,rp->ai_addrlen)!=-1) break; close(srv); - eprint("sic: cannot connect host '%s'\n", host); } + if(!rp) eprint("sic: unable to connect to '%s:%s'\n",host,port); + freeaddrinfo(results); + /* login */ if(password) snprintf(bufout, sizeof bufout,