82 |
server->child_pid = 0; |
server->child_pid = 0; |
83 |
server->child_read = -1; |
server->child_read = -1; |
84 |
server->child_write = -1; |
server->child_write = -1; |
85 |
server->sock4 = -1; |
server->sock = -1; |
86 |
server->is_connected = 0; |
server->is_connected = 0; |
87 |
server->unterminated_message = NULL; |
server->unterminated_message = NULL; |
88 |
server->nick = NULL; |
server->nick = NULL; |
271 |
{ |
{ |
272 |
t_irc_server *new_irc_servers; |
t_irc_server *new_irc_servers; |
273 |
|
|
274 |
|
/* close any opened channel/private */ |
275 |
|
while (server->channels) |
276 |
|
channel_free (server, server->channels); |
277 |
|
|
278 |
/* remove server from queue */ |
/* remove server from queue */ |
279 |
if (last_irc_server == server) |
if (last_irc_server == server) |
280 |
last_irc_server = server->prev_server; |
last_irc_server = server->prev_server; |
368 |
*/ |
*/ |
369 |
|
|
370 |
int |
int |
371 |
server_send (t_irc_server * server, char *buffer, int size_buf) |
server_send (t_irc_server *server, char *buffer, int size_buf) |
372 |
{ |
{ |
373 |
if (!server) |
if (!server) |
374 |
return -1; |
return -1; |
375 |
|
|
376 |
return send (server->sock4, buffer, size_buf, 0); |
return send (server->sock, buffer, size_buf, 0); |
377 |
} |
} |
378 |
|
|
379 |
/* |
/* |
381 |
*/ |
*/ |
382 |
|
|
383 |
void |
void |
384 |
server_sendf (t_irc_server * server, char *fmt, ...) |
server_sendf (t_irc_server *server, char *fmt, ...) |
385 |
{ |
{ |
386 |
va_list args; |
va_list args; |
387 |
static char buffer[1024]; |
static char buffer[4096]; |
388 |
char *buf2; |
char *buf2; |
389 |
int size_buf; |
int size_buf; |
390 |
|
|
391 |
if (!server) |
if (!server) |
392 |
return; |
return; |
393 |
|
|
394 |
va_start (args, fmt); |
va_start (args, fmt); |
395 |
size_buf = vsnprintf (buffer, sizeof (buffer) - 1, fmt, args); |
size_buf = vsnprintf (buffer, sizeof (buffer) - 1, fmt, args); |
396 |
va_end (args); |
va_end (args); |
397 |
|
|
398 |
if ((size_buf == 0) || (strcmp (buffer, "\r\n") == 0)) |
if ((size_buf == 0) || (strcmp (buffer, "\r\n") == 0)) |
399 |
return; |
return; |
400 |
|
|
401 |
buffer[sizeof (buffer) - 1] = '\0'; |
buffer[sizeof (buffer) - 1] = '\0'; |
402 |
if ((size_buf < 0) || (size_buf > (int) (sizeof (buffer) - 1))) |
if ((size_buf < 0) || (size_buf > (int) (sizeof (buffer) - 1))) |
403 |
size_buf = strlen (buffer); |
size_buf = strlen (buffer); |
636 |
static char buffer[4096 + 2]; |
static char buffer[4096 + 2]; |
637 |
int num_read; |
int num_read; |
638 |
|
|
639 |
num_read = recv (server->sock4, buffer, sizeof (buffer) - 2, 0); |
num_read = recv (server->sock, buffer, sizeof (buffer) - 2, 0); |
640 |
if (num_read > 0) |
if (num_read > 0) |
641 |
{ |
{ |
642 |
buffer[num_read] = '\0'; |
buffer[num_read] = '\0'; |
691 |
server_kill_child (server); |
server_kill_child (server); |
692 |
|
|
693 |
/* close network socket */ |
/* close network socket */ |
694 |
if (server->sock4 != -1) |
if (server->sock != -1) |
695 |
{ |
{ |
696 |
close (server->sock4); |
close (server->sock); |
697 |
server->sock4 = -1; |
server->sock = -1; |
698 |
} |
} |
699 |
|
|
700 |
/* free any pending message */ |
/* free any pending message */ |
808 |
} |
} |
809 |
|
|
810 |
/* connect to server */ |
/* connect to server */ |
811 |
error = connect (server->sock4, (struct sockaddr *) &addr, sizeof (addr)); |
error = connect (server->sock, (struct sockaddr *) &addr, sizeof (addr)); |
812 |
if (error != 0) |
if (error != 0) |
813 |
{ |
{ |
814 |
write (server->child_write, "3", 1); |
write (server->child_write, "3", 1); |
853 |
server->child_write = child_pipe[1]; |
server->child_write = child_pipe[1]; |
854 |
|
|
855 |
/* create socket and set options */ |
/* create socket and set options */ |
856 |
server->sock4 = socket (AF_INET, SOCK_STREAM, 0); |
server->sock = socket (AF_INET, SOCK_STREAM, 0); |
857 |
if (server->sock4 == -1) |
if (server->sock == -1) |
858 |
{ |
{ |
859 |
irc_display_prefix (server->buffer, PREFIX_ERROR); |
irc_display_prefix (server->buffer, PREFIX_ERROR); |
860 |
gui_printf (server->buffer, |
gui_printf (server->buffer, |
865 |
|
|
866 |
/* set SO_REUSEADDR option for socket */ |
/* set SO_REUSEADDR option for socket */ |
867 |
set = 1; |
set = 1; |
868 |
if (setsockopt (server->sock4, SOL_SOCKET, SO_REUSEADDR, |
if (setsockopt (server->sock, SOL_SOCKET, SO_REUSEADDR, |
869 |
(void *) &set, sizeof (set)) == -1) |
(void *) &set, sizeof (set)) == -1) |
870 |
{ |
{ |
871 |
irc_display_prefix (server->buffer, PREFIX_ERROR); |
irc_display_prefix (server->buffer, PREFIX_ERROR); |
876 |
|
|
877 |
/* set SO_KEEPALIVE option for socket */ |
/* set SO_KEEPALIVE option for socket */ |
878 |
set = 1; |
set = 1; |
879 |
if (setsockopt (server->sock4, SOL_SOCKET, SO_KEEPALIVE, |
if (setsockopt (server->sock, SOL_SOCKET, SO_KEEPALIVE, |
880 |
(void *) &set, sizeof (set)) == -1) |
(void *) &set, sizeof (set)) == -1) |
881 |
{ |
{ |
882 |
irc_display_prefix (server->buffer, PREFIX_ERROR); |
irc_display_prefix (server->buffer, PREFIX_ERROR); |