diff options
| -rwxr-xr-x | Makefile | 16 | ||||
| -rwxr-xr-x | sample-count.fmt | 4 | ||||
| -rwxr-xr-x | sample-devlog.fmt | 4 | ||||
| -rwxr-xr-x | sample-erdgeist.fmt | 4 | ||||
| -rwxr-xr-x | sample-mAsq.fmt | 4 | ||||
| -rwxr-xr-x | sample-oldstyle.fmt | 2 | ||||
| -rwxr-xr-x | sample-xzivi.fmt | 4 | ||||
| -rwxr-xr-x | vchat-client.c | 8 | ||||
| -rwxr-xr-x | vchat-config.h | 6 | ||||
| -rwxr-xr-x | vchat-protocol.c | 35 | ||||
| -rwxr-xr-x | vchat.h | 2 |
11 files changed, 65 insertions, 24 deletions
| @@ -12,7 +12,7 @@ CFLAGS = -Wall -Os | |||
| 12 | ## use this line when you've got an readline before 4.(x|2) | 12 | ## use this line when you've got an readline before 4.(x|2) |
| 13 | #CFLAGS += -DOLDREADLINE | 13 | #CFLAGS += -DOLDREADLINE |
| 14 | 14 | ||
| 15 | CFLAGS += $(OLDREADLINE) | 15 | CFLAGS += $(OLDREADLINE) $(EXPERIMENTAL_IPV6) |
| 16 | 16 | ||
| 17 | ## you might need one or more of these: | 17 | ## you might need one or more of these: |
| 18 | #CFLAGS += -I/usr/local/ssl/include -L/usr/local/ssl/lib | 18 | #CFLAGS += -I/usr/local/ssl/include -L/usr/local/ssl/lib |
| @@ -39,6 +39,19 @@ OBJS = vchat-client.o vchat-ui.o vchat-protocol.o vchat-user.o vchat-commands. | |||
| 39 | 39 | ||
| 40 | 40 | ||
| 41 | all: vchat-client #vchat-client.1 | 41 | all: vchat-client #vchat-client.1 |
| 42 | @echo " ***************************************" | ||
| 43 | @echo " ** **" | ||
| 44 | @echo " ** W A R N I N G **" | ||
| 45 | @echo " ** **" | ||
| 46 | @echo " ** Internal representation of server **" | ||
| 47 | @echo " ** port has changed. If you have got **" | ||
| 48 | @echo " ** a ~/.vchat/formats laying around, **" | ||
| 49 | @echo " ** please verify, that FS_CONNECTED **" | ||
| 50 | @echo " ** and FS_CONSOLE both don't contain **" | ||
| 51 | @echo " ** '%d' and, if they do, please **" | ||
| 52 | @echo " ** change those '%d' to '%s'. **" | ||
| 53 | @echo " ** **" | ||
| 54 | @echo " ***************************************" | ||
| 42 | 55 | ||
| 43 | install: vchat-client vchat-keygen vchatrc.ex | 56 | install: vchat-client vchat-keygen vchatrc.ex |
| 44 | install -d $(DESTDIR)/etc | 57 | install -d $(DESTDIR)/etc |
| @@ -49,7 +62,6 @@ install: vchat-client vchat-keygen vchatrc.ex | |||
| 49 | # install -m 0644 ./vchat-client.1 $(DESTDIR)$(PREFIX)/share/man/man1 | 62 | # install -m 0644 ./vchat-client.1 $(DESTDIR)$(PREFIX)/share/man/man1 |
| 50 | install -m 0644 ./vchatrc.ex $(DESTDIR)/etc/vchatrc | 63 | install -m 0644 ./vchatrc.ex $(DESTDIR)/etc/vchatrc |
| 51 | 64 | ||
| 52 | |||
| 53 | uninstall: | 65 | uninstall: |
| 54 | rm -f $(DESTDIR)$(PREFIX)/bin/vchat-client | 66 | rm -f $(DESTDIR)$(PREFIX)/bin/vchat-client |
| 55 | rm -f $(DESTDIR)$(PREFIX)/bin/vchat-keygen | 67 | rm -f $(DESTDIR)$(PREFIX)/bin/vchat-keygen |
diff --git a/sample-count.fmt b/sample-count.fmt index d008991..bab9751 100755 --- a/sample-count.fmt +++ b/sample-count.fmt | |||
| @@ -42,8 +42,8 @@ FS_IDLE = "^8%s" | |||
| 42 | FS_TIME = "^5[%H:%M]-- ^0" | 42 | FS_TIME = "^5[%H:%M]-- ^0" |
| 43 | FS_TOPICW = "[ Channel %d: %s" | 43 | FS_TOPICW = "[ Channel %d: %s" |
| 44 | FS_NOTOPICW = "[ Channel %d has no topic" | 44 | FS_NOTOPICW = "[ Channel %d has no topic" |
| 45 | FS_CONSOLE = "%s@%s:%d, use .h to get help" | 45 | FS_CONSOLE = "%s@%s:%s, use .h to get help" |
| 46 | FS_CONNECTED = "^2# Connected to '^6%s^2', port ^6%d^2 ..." | 46 | FS_CONNECTED = "^2# Connected to '^6%s^2', port ^6%s^2 ..." |
| 47 | FS_TOPIC = "^2# Channel ^6%d^2 topic is: '^0%s^2'" | 47 | FS_TOPIC = "^2# Channel ^6%d^2 topic is: '^0%s^2'" |
| 48 | FS_NOTOPIC = "^2# Channel ^6%d^2 has no topic" | 48 | FS_NOTOPIC = "^2# Channel ^6%d^2 has no topic" |
| 49 | FS_CHGTOPIC = "^2# ^6%s^2 changes topic to: '^0%s^2'" | 49 | FS_CHGTOPIC = "^2# ^6%s^2 changes topic to: '^0%s^2'" |
diff --git a/sample-devlog.fmt b/sample-devlog.fmt index e70364d..ac30551 100755 --- a/sample-devlog.fmt +++ b/sample-devlog.fmt | |||
| @@ -47,8 +47,8 @@ FS_IDLE = "^8%s" | |||
| 47 | FS_TIME = "^2[%H:%M]^0 " | 47 | FS_TIME = "^2[%H:%M]^0 " |
| 48 | FS_TOPICW = "[ Channel %d: %s" | 48 | FS_TOPICW = "[ Channel %d: %s" |
| 49 | FS_NOTOPICW = "[ Channel %d has no topic" | 49 | FS_NOTOPICW = "[ Channel %d has no topic" |
| 50 | FS_CONSOLE = "%s@%s:%d, use .h to get help" | 50 | FS_CONSOLE = "%s@%s:%s, use .h to get help" |
| 51 | FS_CONNECTED = "^2# Connected to '^0%s^2', port ^0%d^2 ..." | 51 | FS_CONNECTED = "^2# Connected to '^0%s^2', port ^0%s^2 ..." |
| 52 | FS_TOPIC = "^1# Channel ^6%d^2 topic is: '^0%s^2'" | 52 | FS_TOPIC = "^1# Channel ^6%d^2 topic is: '^0%s^2'" |
| 53 | FS_NOTOPIC = "^1# Channel ^6%d^2 has no topic" | 53 | FS_NOTOPIC = "^1# Channel ^6%d^2 has no topic" |
| 54 | FS_CHGTOPIC = "^1# ^4%s^1 changes topic to: '^0%s^1'" | 54 | FS_CHGTOPIC = "^1# ^4%s^1 changes topic to: '^0%s^1'" |
diff --git a/sample-erdgeist.fmt b/sample-erdgeist.fmt index 5fc87e1..7545d3d 100755 --- a/sample-erdgeist.fmt +++ b/sample-erdgeist.fmt | |||
| @@ -42,8 +42,8 @@ FS_TIME = "^9[%H:%M]^0 " | |||
| 42 | FS_CONSOLETIME = "[%H:%M] " | 42 | FS_CONSOLETIME = "[%H:%M] " |
| 43 | FS_TOPICW = "[ Channel %d: %s" | 43 | FS_TOPICW = "[ Channel %d: %s" |
| 44 | FS_NOTOPICW = "[ Channel %d has no topic" | 44 | FS_NOTOPICW = "[ Channel %d has no topic" |
| 45 | FS_CONSOLE = "%s@%s:%d, use .h to get help" | 45 | FS_CONSOLE = "%s@%s:%s, use .h to get help" |
| 46 | FS_CONNECTED = "^2# Connected to '^0%s^2', port ^0%d^2 ..." | 46 | FS_CONNECTED = "^2# Connected to '^0%s^2', port ^0%s^2 ..." |
| 47 | FS_TOPIC = "^1# Channel ^6%d^2 topic is: '^0%s^2'" | 47 | FS_TOPIC = "^1# Channel ^6%d^2 topic is: '^0%s^2'" |
| 48 | FS_NOTOPIC = "^1# Channel ^6%d^2 has no topic" | 48 | FS_NOTOPIC = "^1# Channel ^6%d^2 has no topic" |
| 49 | FS_CHGTOPIC = "^1# ^4%s^1 changes topic to: '^0%s^1'" | 49 | FS_CHGTOPIC = "^1# ^4%s^1 changes topic to: '^0%s^1'" |
diff --git a/sample-mAsq.fmt b/sample-mAsq.fmt index 9bed139..af001d7 100755 --- a/sample-mAsq.fmt +++ b/sample-mAsq.fmt | |||
| @@ -42,8 +42,8 @@ FS_IDLE = "^8%s" | |||
| 42 | FS_TIME = "^5%H:%M^0 " | 42 | FS_TIME = "^5%H:%M^0 " |
| 43 | FS_TOPICW = "[ Channel %d: %s" | 43 | FS_TOPICW = "[ Channel %d: %s" |
| 44 | FS_NOTOPICW = "[ Channel %d has no topic" | 44 | FS_NOTOPICW = "[ Channel %d has no topic" |
| 45 | FS_CONSOLE = "%s@%s:%d, use .h to get help" | 45 | FS_CONSOLE = "%s@%s:%s, use .h to get help" |
| 46 | FS_CONNECTED = "^2*^0C^2* Connected to '^6%s^2', port ^6%d^2 ..." | 46 | FS_CONNECTED = "^2*^0C^2* Connected to '^6%s^2', port ^6%s^2 ..." |
| 47 | FS_TOPIC = "^2*^0T^2* Channel ^6%d^2 topic is: '^0%s^2'" | 47 | FS_TOPIC = "^2*^0T^2* Channel ^6%d^2 topic is: '^0%s^2'" |
| 48 | FS_NOTOPIC = "^2*^0T^2* Channel ^6%d^2 has no topic" | 48 | FS_NOTOPIC = "^2*^0T^2* Channel ^6%d^2 has no topic" |
| 49 | FS_CHGTOPIC = "^5*^0T^2* ^6%s^2 changes topic to: '^0%s^2'" | 49 | FS_CHGTOPIC = "^5*^0T^2* ^6%s^2 changes topic to: '^0%s^2'" |
diff --git a/sample-oldstyle.fmt b/sample-oldstyle.fmt index a1b0eb5..d0d8f17 100755 --- a/sample-oldstyle.fmt +++ b/sample-oldstyle.fmt | |||
| @@ -43,7 +43,7 @@ FS_TIME = "^0%H:%M " | |||
| 43 | FS_TOPICW = "Channel %d: %s" | 43 | FS_TOPICW = "Channel %d: %s" |
| 44 | FS_NOTOPICW = "Channel %d has no topic" | 44 | FS_NOTOPICW = "Channel %d has no topic" |
| 45 | FS_CONSOLE = "-=- VChat V0.1 -=- type .h for help -=-" | 45 | FS_CONSOLE = "-=- VChat V0.1 -=- type .h for help -=-" |
| 46 | FS_CONNECTED = "^0* Connected to '%s', port %d ..." | 46 | FS_CONNECTED = "^0* Connected to '%s', port %s ..." |
| 47 | FS_TOPIC = "^0* Channel %d topic is: '%s'" | 47 | FS_TOPIC = "^0* Channel %d topic is: '%s'" |
| 48 | FS_NOTOPIC = "^0* Channel %d has no topic" | 48 | FS_NOTOPIC = "^0* Channel %d has no topic" |
| 49 | FS_CHGTOPIC = "^0* %s changed the channel topic to '%s'" | 49 | FS_CHGTOPIC = "^0* %s changed the channel topic to '%s'" |
diff --git a/sample-xzivi.fmt b/sample-xzivi.fmt index f839366..dbbf2b4 100755 --- a/sample-xzivi.fmt +++ b/sample-xzivi.fmt | |||
| @@ -41,8 +41,8 @@ FS_IDLE = "^1^b%s^B" | |||
| 41 | FS_TIME = "^4[%H:%M]^0 " | 41 | FS_TIME = "^4[%H:%M]^0 " |
| 42 | FS_TOPICW = "Channel %d: %s" | 42 | FS_TOPICW = "Channel %d: %s" |
| 43 | FS_NOTOPICW = "Channel %d has no topic" | 43 | FS_NOTOPICW = "Channel %d has no topic" |
| 44 | FS_CONSOLE = "%s@%s:%d" | 44 | FS_CONSOLE = "%s@%s:%s" |
| 45 | FS_CONNECTED = "# Connected to %s:%d ..." | 45 | FS_CONNECTED = "# Connected to %s:%s ..." |
| 46 | FS_TOPIC = "# Channel %d topic is: ^6%s" | 46 | FS_TOPIC = "# Channel %d topic is: ^6%s" |
| 47 | FS_NOTOPIC = "# Channel %d has no topic" | 47 | FS_NOTOPIC = "# Channel %d has no topic" |
| 48 | FS_CHGTOPIC = "# ^b%s^B changes topic to: ^6%s" | 48 | FS_CHGTOPIC = "# ^b%s^B changes topic to: ^6%s" |
diff --git a/vchat-client.c b/vchat-client.c index a3e7fd2..f30e1c0 100755 --- a/vchat-client.c +++ b/vchat-client.c | |||
| @@ -458,7 +458,7 @@ void usage(unsigned char *name) { | |||
| 458 | puts (" -l local connect (no SSL + connects localhost:2323)"); | 458 | puts (" -l local connect (no SSL + connects localhost:2323)"); |
| 459 | puts (" -z don't use certificate files"); | 459 | puts (" -z don't use certificate files"); |
| 460 | printf (" -s set server (default \"%s\")\n",getstroption(CF_SERVERHOST)); | 460 | printf (" -s set server (default \"%s\")\n",getstroption(CF_SERVERHOST)); |
| 461 | printf (" -p set port (default %d)\n",getintoption(CF_SERVERPORT)); | 461 | printf (" -p set port (default %s)\n",getstroption(CF_SERVERPORT)); |
| 462 | printf (" -c set channel (default %d)\n",getintoption(CF_CHANNEL)); | 462 | printf (" -c set channel (default %d)\n",getintoption(CF_CHANNEL)); |
| 463 | if (nick) | 463 | if (nick) |
| 464 | printf(" -n set nickname (default \"%s\")\n",nick); | 464 | printf(" -n set nickname (default \"%s\")\n",nick); |
| @@ -499,7 +499,7 @@ main (int argc, char **argv) | |||
| 499 | case 'l': setintoption(CF_USESSL,0); break; | 499 | case 'l': setintoption(CF_USESSL,0); break; |
| 500 | case 'z': setintoption(CF_USECERT,0); break; | 500 | case 'z': setintoption(CF_USECERT,0); break; |
| 501 | case 's': setstroption(CF_SERVERHOST,optarg); break; | 501 | case 's': setstroption(CF_SERVERHOST,optarg); break; |
| 502 | case 'p': setintoption(CF_SERVERPORT,strtol(optarg,NULL,10)); break; | 502 | case 'p': setstroption(CF_SERVERPORT,optarg); break; |
| 503 | case 'c': setintoption(CF_CHANNEL,strtol(optarg,NULL,10)); break; | 503 | case 'c': setintoption(CF_CHANNEL,strtol(optarg,NULL,10)); break; |
| 504 | case 'n': setstroption(CF_NICK,optarg); break; | 504 | case 'n': setstroption(CF_NICK,optarg); break; |
| 505 | case 'f': setstroption(CF_FROM,optarg); break; | 505 | case 'f': setstroption(CF_FROM,optarg); break; |
| @@ -518,7 +518,7 @@ main (int argc, char **argv) | |||
| 518 | 518 | ||
| 519 | if (!getintoption(CF_USESSL)) { | 519 | if (!getintoption(CF_USESSL)) { |
| 520 | setstroption(CF_SERVERHOST,"localhost"); | 520 | setstroption(CF_SERVERHOST,"localhost"); |
| 521 | setintoption(CF_SERVERPORT,2323); | 521 | setstroption(CF_SERVERPORT,"2323"); |
| 522 | } else { | 522 | } else { |
| 523 | SSL_library_init (); | 523 | SSL_library_init (); |
| 524 | SSL_load_error_strings (); | 524 | SSL_load_error_strings (); |
| @@ -535,7 +535,7 @@ main (int argc, char **argv) | |||
| 535 | initui (); | 535 | initui (); |
| 536 | 536 | ||
| 537 | /* attempt connection */ | 537 | /* attempt connection */ |
| 538 | if (!vcconnect (getstroption(CF_SERVERHOST), getintoption(CF_SERVERPORT))) | 538 | if (!vcconnect (getstroption(CF_SERVERHOST), getstroption(CF_SERVERPORT))) |
| 539 | { | 539 | { |
| 540 | snprintf (tmpstr, TMPSTRSIZE, "Could not connect to server, %s.", | 540 | snprintf (tmpstr, TMPSTRSIZE, "Could not connect to server, %s.", |
| 541 | sys_errlist[errno]); | 541 | sys_errlist[errno]); |
diff --git a/vchat-config.h b/vchat-config.h index 856b00c..f011a4c 100755 --- a/vchat-config.h +++ b/vchat-config.h | |||
| @@ -32,7 +32,7 @@ static volatile configoption configoptions[] = { | |||
| 32 | {CF_NICK, CO_STR, "nick", NULL, NULL, { .pstr = &nick } }, | 32 | {CF_NICK, CO_STR, "nick", NULL, NULL, { .pstr = &nick } }, |
| 33 | {CF_FROM, CO_STR, "from", "vc-alpha-0.16", NULL, { NULL } }, | 33 | {CF_FROM, CO_STR, "from", "vc-alpha-0.16", NULL, { NULL } }, |
| 34 | {CF_SERVERHOST, CO_STR, "host", "pulse.flatline.de",NULL, { NULL } }, | 34 | {CF_SERVERHOST, CO_STR, "host", "pulse.flatline.de",NULL, { NULL } }, |
| 35 | {CF_SERVERPORT, CO_INT, "port", (char *) 2325, (char *)-1, { NULL } }, | 35 | {CF_SERVERPORT, CO_STR, "port", "2325", NULL, { NULL } }, |
| 36 | {CF_CIPHERSUITE, CO_STR, "ciphers", "HIGH:MEDIUM", NULL, { NULL } }, | 36 | {CF_CIPHERSUITE, CO_STR, "ciphers", "HIGH:MEDIUM", NULL, { NULL } }, |
| 37 | {CF_CONFIGFILE, CO_STR, "conffile", "~/.vchat/config", NULL, { NULL } }, | 37 | {CF_CONFIGFILE, CO_STR, "conffile", "~/.vchat/config", NULL, { NULL } }, |
| 38 | {CF_CERTFILE, CO_STR, "certfile", "~/.vchat/cert", NULL, { NULL } }, | 38 | {CF_CERTFILE, CO_STR, "certfile", "~/.vchat/cert", NULL, { NULL } }, |
| @@ -96,8 +96,8 @@ static formatstring formatstrings[] = { | |||
| 96 | FE( FS_CONSOLETIME, "[%H:%M] "), | 96 | FE( FS_CONSOLETIME, "[%H:%M] "), |
| 97 | FE( FS_TOPICW, "[ Channel %d: %s"), | 97 | FE( FS_TOPICW, "[ Channel %d: %s"), |
| 98 | FE( FS_NOTOPICW, "[ Channel %d has no topic"), | 98 | FE( FS_NOTOPICW, "[ Channel %d has no topic"), |
| 99 | FE( FS_CONSOLE, "%s@%s:%d, use .h to get help "), | 99 | FE( FS_CONSOLE, "%s@%s:%s, use .h to get help "), |
| 100 | FE( FS_CONNECTED, "\0012# Connected to '\0016%s\0012', port \0016%d\0012 ..."), | 100 | FE( FS_CONNECTED, "\0012# Connected to '\0016%s\0012', port \0016%s\0012 ..."), |
| 101 | FE( FS_TOPIC, "\0012# Channel \0016%d\0012 topic is: '\0010%s\0012'"), | 101 | FE( FS_TOPIC, "\0012# Channel \0016%d\0012 topic is: '\0010%s\0012'"), |
| 102 | FE( FS_NOTOPIC, "\0012# Channel \0016%d\0012 has no topic"), | 102 | FE( FS_NOTOPIC, "\0012# Channel \0016%d\0012 has no topic"), |
| 103 | FE( FS_CHGTOPIC, "\0012# \0016%s\0012 changes topic to: '\0010%s\0012'"), | 103 | FE( FS_CHGTOPIC, "\0012# \0016%s\0012 changes topic to: '\0010%s\0012'"), |
diff --git a/vchat-protocol.c b/vchat-protocol.c index f1e8b5c..03161e0 100755 --- a/vchat-protocol.c +++ b/vchat-protocol.c | |||
| @@ -83,7 +83,7 @@ unsigned char *encoding; | |||
| 83 | 83 | ||
| 84 | /* connects to server */ | 84 | /* connects to server */ |
| 85 | int | 85 | int |
| 86 | vcconnect (unsigned char *server, unsigned int port) | 86 | vcconnect (unsigned char *server, unsigned char *port) |
| 87 | { | 87 | { |
| 88 | /* used for tilde expansion of cert & key filenames */ | 88 | /* used for tilde expansion of cert & key filenames */ |
| 89 | unsigned char *tildex = NULL; | 89 | unsigned char *tildex = NULL; |
| @@ -98,10 +98,16 @@ vcconnect (unsigned char *server, unsigned int port) | |||
| 98 | EVP_PKEY *certpubkey = NULL; | 98 | EVP_PKEY *certpubkey = NULL; |
| 99 | /* temporary result */ | 99 | /* temporary result */ |
| 100 | int result; | 100 | int result; |
| 101 | #ifndef EXPERIMENTAL_IPV6 | ||
| 101 | /* servers hostentry */ | 102 | /* servers hostentry */ |
| 102 | struct hostent *serverhe; | 103 | struct hostent *serverhe; |
| 103 | /* servers sockaddr */ | 104 | /* servers sockaddr */ |
| 104 | struct sockaddr_in serversi; | 105 | struct sockaddr_in serversi; |
| 106 | int portnr = strtoul(port,NULL,10); | ||
| 107 | #else | ||
| 108 | /* protocol independent server addresses */ | ||
| 109 | struct addrinfo hints, *addr, *tmpaddr; | ||
| 110 | #endif | ||
| 105 | /* SSL-context */ | 111 | /* SSL-context */ |
| 106 | SSL_CTX *sslctx = NULL; | 112 | SSL_CTX *sslctx = NULL; |
| 107 | /* SSL server certificate */ | 113 | /* SSL server certificate */ |
| @@ -115,6 +121,7 @@ vcconnect (unsigned char *server, unsigned int port) | |||
| 115 | /* variable for verify return */ | 121 | /* variable for verify return */ |
| 116 | long verify; | 122 | long verify; |
| 117 | 123 | ||
| 124 | #ifndef EXPERIMENTAL_IPV6 | ||
| 118 | /* get host-entry for server */ | 125 | /* get host-entry for server */ |
| 119 | if ((serverhe = gethostbyname (server)) == NULL) | 126 | if ((serverhe = gethostbyname (server)) == NULL) |
| 120 | return 0; | 127 | return 0; |
| @@ -125,13 +132,35 @@ vcconnect (unsigned char *server, unsigned int port) | |||
| 125 | 132 | ||
| 126 | /* initialize datastructure for connect */ | 133 | /* initialize datastructure for connect */ |
| 127 | serversi.sin_family = AF_INET; | 134 | serversi.sin_family = AF_INET; |
| 128 | serversi.sin_port = htons (port); | 135 | serversi.sin_port = htons(portnr); |
| 129 | serversi.sin_addr = *((struct in_addr *) serverhe->h_addr); | 136 | serversi.sin_addr = *((struct in_addr *) serverhe->h_addr); |
| 130 | memset (&(serversi.sin_zero), 0, 8); | 137 | memset (&(serversi.sin_zero), 0, 8); |
| 131 | 138 | ||
| 132 | /* attempt connect */ | 139 | /* attempt connect */ |
| 133 | if (connect (serverfd, (struct sockaddr *) &serversi, sizeof (struct sockaddr)) == -1) | 140 | if (connect (serverfd, (struct sockaddr *) &serversi, sizeof (struct sockaddr)) == -1) |
| 134 | return 0; | 141 | return 0; |
| 142 | #else | ||
| 143 | memset( &hints, 0, sizeof(hints)); | ||
| 144 | /* Expect v4 and v6 */ | ||
| 145 | hints.ai_family = PF_UNSPEC; | ||
| 146 | hints.ai_socktype = SOCK_STREAM; | ||
| 147 | if( getaddrinfo( server, port, &hints, &addr )) | ||
| 148 | return 0; | ||
| 149 | for( tmpaddr = addr; addr; addr = addr->ai_next ) | ||
| 150 | { | ||
| 151 | if( (serverfd = socket( addr->ai_family, addr->ai_socktype, addr->ai_protocol)) < 0) | ||
| 152 | continue; | ||
| 153 | if( connect( serverfd, addr->ai_addr, addr->ai_addrlen ) < 0) | ||
| 154 | { | ||
| 155 | close( serverfd ); | ||
| 156 | continue; | ||
| 157 | } | ||
| 158 | break; | ||
| 159 | } | ||
| 160 | if( serverfd < 0 ) | ||
| 161 | return 0; | ||
| 162 | freeaddrinfo( tmpaddr ); | ||
| 163 | #endif | ||
| 135 | 164 | ||
| 136 | /* inform user */ | 165 | /* inform user */ |
| 137 | snprintf (tmpstr, TMPSTRSIZE, getformatstr(FS_CONNECTED), server, port); | 166 | snprintf (tmpstr, TMPSTRSIZE, getformatstr(FS_CONNECTED), server, port); |
| @@ -537,7 +566,7 @@ justloggedin (unsigned char *message) | |||
| 537 | setstroption(CF_NICK,str1); | 566 | setstroption(CF_NICK,str1); |
| 538 | 567 | ||
| 539 | /* show change in console window */ | 568 | /* show change in console window */ |
| 540 | snprintf (consolestr, CONSOLESTRSIZE, getformatstr(FS_CONSOLE), nick, getstroption (CF_SERVERHOST), getintoption (CF_SERVERPORT)); | 569 | snprintf (consolestr, CONSOLESTRSIZE, getformatstr(FS_CONSOLE), nick, getstroption (CF_SERVERHOST), getstroption (CF_SERVERPORT)); |
| 541 | consoleline (NULL); | 570 | consoleline (NULL); |
| 542 | 571 | ||
| 543 | /* announce login as servermessage */ | 572 | /* announce login as servermessage */ |
| @@ -181,7 +181,7 @@ void clearfilters ( char colour ); | |||
| 181 | extern unsigned char *vchat_io_version; | 181 | extern unsigned char *vchat_io_version; |
| 182 | 182 | ||
| 183 | /* connect/disconnect */ | 183 | /* connect/disconnect */ |
| 184 | int vcconnect (unsigned char *server, unsigned int port); | 184 | int vcconnect (unsigned char *server, unsigned char *port); |
| 185 | void vcdisconnect (); | 185 | void vcdisconnect (); |
| 186 | 186 | ||
| 187 | /* network I/O */ | 187 | /* network I/O */ |
