diff options
Diffstat (limited to 'src/plugins/relay')
-rw-r--r-- | src/plugins/relay/irc/relay-irc.c | 72 | ||||
-rw-r--r-- | src/plugins/relay/relay-client.c | 42 |
2 files changed, 66 insertions, 48 deletions
diff --git a/src/plugins/relay/irc/relay-irc.c b/src/plugins/relay/irc/relay-irc.c index 6382142db..6685b29ec 100644 --- a/src/plugins/relay/irc/relay-irc.c +++ b/src/plugins/relay/irc/relay-irc.c @@ -59,13 +59,13 @@ relay_irc_command_relayed (const char *irc_command) { int i; - if (irc_command) + if (!irc_command) + return 0; + + for (i = 0; relay_irc_relay_commands[i]; i++) { - for (i = 0; relay_irc_relay_commands[i]; i++) - { - if (weechat_strcasecmp (relay_irc_relay_commands[i], irc_command) == 0) - return 1; - } + if (weechat_strcasecmp (relay_irc_relay_commands[i], irc_command) == 0) + return 1; } /* command must NOT be relayed to client */ @@ -85,16 +85,16 @@ relay_irc_command_ignored (const char *irc_command) { int i; - if (irc_command) + if (!irc_command) + return 0; + + for (i = 0; relay_irc_ignore_commands[i]; i++) { - for (i = 0; relay_irc_ignore_commands[i]; i++) - { - if (weechat_strcasecmp (relay_irc_ignore_commands[i], irc_command) == 0) - return 1; - } + if (weechat_strcasecmp (relay_irc_ignore_commands[i], irc_command) == 0) + return 1; } - /* command must NOT be relayed to client */ + /* command must be ignored */ return 0; } @@ -158,6 +158,9 @@ relay_irc_message_parse (const char *message) { struct t_hashtable *hash_msg, *hash_parsed; + if (!message) + return NULL; + hash_msg = NULL; hash_parsed = NULL; @@ -384,30 +387,30 @@ relay_irc_tag_relay_client_id (const char *tags) result = -1; - if (tags && tags[0]) + if (!tags || !tags[0]) + return result; + + argv = weechat_string_split (tags, ",", NULL, + WEECHAT_STRING_SPLIT_STRIP_LEFT + | WEECHAT_STRING_SPLIT_STRIP_RIGHT + | WEECHAT_STRING_SPLIT_COLLAPSE_SEPS, + 0, &argc); + if (argv) { - argv = weechat_string_split (tags, ",", NULL, - WEECHAT_STRING_SPLIT_STRIP_LEFT - | WEECHAT_STRING_SPLIT_STRIP_RIGHT - | WEECHAT_STRING_SPLIT_COLLAPSE_SEPS, - 0, &argc); - if (argv) + for (i = 0; i < argc; i++) { - for (i = 0; i < argc; i++) + if (strncmp (argv[i], "relay_client_", 13) == 0) { - if (strncmp (argv[i], "relay_client_", 13) == 0) + error = NULL; + number = strtol (argv[i] + 13, &error, 10); + if (error && !error[0]) { - error = NULL; - number = strtol (argv[i] + 13, &error, 10); - if (error && !error[0]) - { - result = number; - break; - } + result = number; + break; } } - weechat_string_free_split (argv); } + weechat_string_free_split (argv); } return result; @@ -1189,7 +1192,7 @@ relay_irc_send_join_channels (struct t_relay_client *client) void relay_irc_input_send (struct t_relay_client *client, const char *irc_channel, - char *options, const char *format, ...) + const char *options, const char *format, ...) { char buf_beginning[1024], *buf; int length_beginning, length_vbuffer; @@ -1459,11 +1462,7 @@ relay_irc_recv (struct t_relay_client *client, const char *data) /* server capabilities */ if (irc_command && (weechat_strcasecmp (irc_command, "cap") == 0)) { - if (num_params > 0) - { - relay_irc_recv_command_capab (client, - num_params, (const char **)params); - } + relay_irc_recv_command_capab (client, num_params, (const char **)params); } /* if client is not yet "connected" */ if (!RELAY_IRC_DATA(client, connected)) @@ -1541,6 +1540,7 @@ relay_irc_recv (struct t_relay_client *client, const char *data) RELAY_IRC_DATA(client, address)); relay_client_set_status (client, RELAY_STATUS_DISCONNECTED); + weechat_infolist_free (infolist_server); goto end; } if (num_params > 0) diff --git a/src/plugins/relay/relay-client.c b/src/plugins/relay/relay-client.c index 9376e5633..7863d7b37 100644 --- a/src/plugins/relay/relay-client.c +++ b/src/plugins/relay/relay-client.c @@ -591,6 +591,9 @@ relay_client_recv_cb (const void *pointer, void *data, int fd) client = (struct t_relay_client *)pointer; + if (client->sock < 0) + return WEECHAT_RC_OK; + /* * data can be received only during authentication * or if connected (authentication was OK) @@ -800,15 +803,19 @@ relay_client_send_outqueue (struct t_relay_client *client) { if (client->tls) { - num_sent = gnutls_record_send (client->gnutls_sess, - client->outqueue->data, - client->outqueue->data_size); + num_sent = (client->sock >= 0) ? + gnutls_record_send (client->gnutls_sess, + client->outqueue->data, + client->outqueue->data_size) : + client->outqueue->data_size; } else { - num_sent = send (client->sock, - client->outqueue->data, - client->outqueue->data_size, 0); + num_sent = (client->sock >= 0) ? + send (client->sock, + client->outqueue->data, + client->outqueue->data_size, 0) : + client->outqueue->data_size; } if (num_sent >= 0) { @@ -1138,9 +1145,16 @@ relay_client_send (struct t_relay_client *client, else { if (client->tls) - num_sent = gnutls_record_send (client->gnutls_sess, ptr_data, data_size); + { + num_sent = (client->sock >= 0) ? + gnutls_record_send (client->gnutls_sess, ptr_data, data_size) : + data_size; + } else - num_sent = send (client->sock, ptr_data, data_size, 0); + { + num_sent = (client->sock >= 0) ? + send (client->sock, ptr_data, data_size, 0) : data_size; + } if (num_sent >= 0) { @@ -1307,6 +1321,7 @@ relay_client_new (int sock, const char *address, struct t_relay_server *server) new_client->sock = sock; new_client->server_port = server->port; new_client->tls = server->tls; + new_client->gnutls_sess = NULL; new_client->hook_timer_handshake = NULL; new_client->gnutls_handshake_ok = 0; new_client->websocket = RELAY_CLIENT_WEBSOCKET_NOT_USED; @@ -1464,10 +1479,13 @@ relay_client_new (int sock, const char *address, struct t_relay_server *server) _(relay_client_status_string[new_client->status])); } - new_client->hook_fd = weechat_hook_fd (new_client->sock, - 1, 0, 0, - &relay_client_recv_cb, - new_client, NULL); + if (new_client->sock >= 0) + { + new_client->hook_fd = weechat_hook_fd (new_client->sock, + 1, 0, 0, + &relay_client_recv_cb, + new_client, NULL); + } relay_client_count++; |