diff options
author | Sebastien Helleu <flashcode@flashtux.org> | 2012-11-27 22:45:22 +0100 |
---|---|---|
committer | Sebastien Helleu <flashcode@flashtux.org> | 2012-11-27 22:45:22 +0100 |
commit | 37a3001dc7d59c8f91ac3140c7f883e9f5892733 (patch) | |
tree | 2f72e5dfffb7abdb01d7582ead76ba51a4b70b67 /src | |
parent | 9c3ee3c4074cb18a351ea6add554dc48ffa3a1b1 (diff) | |
download | weechat-37a3001dc7d59c8f91ac3140c7f883e9f5892733.zip |
xfer: display remote IP address for DCC chat/file (task #12289) (patch from Nils Görs)
Diffstat (limited to 'src')
-rw-r--r-- | src/plugins/irc/irc-command.c | 4 | ||||
-rw-r--r-- | src/plugins/irc/irc-ctcp.c | 4 | ||||
-rw-r--r-- | src/plugins/irc/irc-server.c | 4 | ||||
-rw-r--r-- | src/plugins/xfer/xfer-buffer.c | 17 | ||||
-rw-r--r-- | src/plugins/xfer/xfer-chat.c | 10 | ||||
-rw-r--r-- | src/plugins/xfer/xfer-command.c | 10 | ||||
-rw-r--r-- | src/plugins/xfer/xfer-dcc.c | 2 | ||||
-rw-r--r-- | src/plugins/xfer/xfer-network.c | 24 | ||||
-rw-r--r-- | src/plugins/xfer/xfer.c | 109 | ||||
-rw-r--r-- | src/plugins/xfer/xfer.h | 7 |
10 files changed, 113 insertions, 78 deletions
diff --git a/src/plugins/irc/irc-command.c b/src/plugins/irc/irc-command.c index c4e21afc6..20c0c0ec7 100644 --- a/src/plugins/irc/irc-command.c +++ b/src/plugins/irc/irc-command.c @@ -1149,7 +1149,7 @@ irc_command_dcc (void *data, struct t_gui_buffer *buffer, int argc, weechat_infolist_new_var_string (item, "filename", argv_eol[3]); snprintf (str_address, sizeof (str_address), "%lu", address); - weechat_infolist_new_var_string (item, "address", str_address); + weechat_infolist_new_var_string (item, "local_address", str_address); weechat_infolist_new_var_integer (item, "socket", ptr_server->sock); weechat_hook_signal_send ("xfer_add", WEECHAT_HOOK_SIGNAL_POINTER, @@ -1181,7 +1181,7 @@ irc_command_dcc (void *data, struct t_gui_buffer *buffer, int argc, weechat_infolist_new_var_string (item, "charset_modifier", charset_modifier); snprintf (str_address, sizeof (str_address), "%lu", address); - weechat_infolist_new_var_string (item, "address", str_address); + weechat_infolist_new_var_string (item, "local_address", str_address); weechat_hook_signal_send ("xfer_add", WEECHAT_HOOK_SIGNAL_POINTER, infolist); diff --git a/src/plugins/irc/irc-ctcp.c b/src/plugins/irc/irc-ctcp.c index 7d90351b1..29c5bc6ac 100644 --- a/src/plugins/irc/irc-ctcp.c +++ b/src/plugins/irc/irc-ctcp.c @@ -572,7 +572,7 @@ irc_ctcp_recv_dcc (struct t_irc_server *server, const char *nick, weechat_infolist_new_var_string (item, "size", pos_size); weechat_infolist_new_var_string (item, "proxy", IRC_SERVER_OPTION_STRING(server, IRC_SERVER_OPTION_PROXY)); - weechat_infolist_new_var_string (item, "address", pos_addr); + weechat_infolist_new_var_string (item, "remote_address", pos_addr); weechat_infolist_new_var_integer (item, "port", atoi (pos_port)); weechat_hook_signal_send ("xfer_add", WEECHAT_HOOK_SIGNAL_POINTER, @@ -878,7 +878,7 @@ irc_ctcp_recv_dcc (struct t_irc_server *server, const char *nick, weechat_infolist_new_var_string (item, "charset_modifier", charset_modifier); weechat_infolist_new_var_string (item, "proxy", IRC_SERVER_OPTION_STRING(server, IRC_SERVER_OPTION_PROXY)); - weechat_infolist_new_var_string (item, "address", pos_addr); + weechat_infolist_new_var_string (item, "remote_address", pos_addr); weechat_infolist_new_var_integer (item, "port", atoi (pos_port)); weechat_hook_signal_send ("xfer_add", WEECHAT_HOOK_SIGNAL_POINTER, diff --git a/src/plugins/irc/irc-server.c b/src/plugins/irc/irc-server.c index 194bb768f..b4dc4d7ee 100644 --- a/src/plugins/irc/irc-server.c +++ b/src/plugins/irc/irc-server.c @@ -4297,7 +4297,7 @@ irc_server_xfer_send_ready_cb (void *data, const char *signal, (spaces_in_name) ? "\"" : "", filename, (spaces_in_name) ? "\"" : "", - weechat_infolist_string (infolist, "address"), + weechat_infolist_string (infolist, "local_address"), weechat_infolist_integer (infolist, "port"), weechat_infolist_string (infolist, "size")); } @@ -4307,7 +4307,7 @@ irc_server_xfer_send_ready_cb (void *data, const char *signal, IRC_SERVER_SEND_OUTQ_PRIO_HIGH, NULL, "PRIVMSG %s :\01DCC CHAT chat %s %d\01", weechat_infolist_string (infolist, "remote_nick"), - weechat_infolist_string (infolist, "address"), + weechat_infolist_string (infolist, "local_address"), weechat_infolist_integer (infolist, "port")); } } diff --git a/src/plugins/xfer/xfer-buffer.c b/src/plugins/xfer/xfer-buffer.c index e8e1f9cf7..3fe3c9b4e 100644 --- a/src/plugins/xfer/xfer-buffer.c +++ b/src/plugins/xfer/xfer-buffer.c @@ -46,6 +46,7 @@ xfer_buffer_refresh (const char *hotlist) { struct t_xfer *ptr_xfer, *xfer_selected; char str_color[256], suffix[32], status[64], date[128], eta[128]; + char str_ip[32]; char *progress_bar, *str_pos, *str_total, *str_bytes_per_sec; int i, length, line, progress_bar_size, num_bars; unsigned long long pos, pct_complete; @@ -93,9 +94,20 @@ xfer_buffer_refresh (const char *hotlist) weechat_config_string (xfer_config_color_text), weechat_config_string (xfer_config_color_text_bg)); + str_ip[0] = '\0'; + if (ptr_xfer->remote_address != 0) + { + snprintf (str_ip, sizeof (str_ip), + " (%ld.%ld.%ld.%ld)", + ptr_xfer->remote_address >> 24, + (ptr_xfer->remote_address >> 16) & 0xff, + (ptr_xfer->remote_address >> 8) & 0xff, + ptr_xfer->remote_address & 0xff); + } + /* display first line with remote nick, filename and plugin name/id */ weechat_printf_y (xfer_buffer, (line * 2) + 2, - "%s%s%-24s %s%s%s%s (%s.%s)", + "%s%s%-24s %s%s%s%s (%s.%s)%s", weechat_color(str_color), (line == xfer_buffer_selected_line) ? "*** " : " ", @@ -106,7 +118,8 @@ xfer_buffer_refresh (const char *hotlist) (XFER_IS_FILE(ptr_xfer->type)) ? "\"" : "", suffix, ptr_xfer->plugin_name, - ptr_xfer->plugin_id); + ptr_xfer->plugin_id, + str_ip); snprintf (status, sizeof (status), "%s", _(xfer_status_string[ptr_xfer->status])); diff --git a/src/plugins/xfer/xfer-chat.c b/src/plugins/xfer/xfer-chat.c index 3a1338d75..e13f41c54 100644 --- a/src/plugins/xfer/xfer-chat.c +++ b/src/plugins/xfer/xfer-chat.c @@ -341,13 +341,13 @@ xfer_chat_open_buffer (struct t_xfer *xfer) } weechat_printf (xfer->buffer, - _("Connected to %s (%d.%d.%d.%d) via " + _("Connected to %s (%ld.%ld.%ld.%ld) via " "xfer chat"), xfer->remote_nick, - xfer->address >> 24, - (xfer->address >> 16) & 0xff, - (xfer->address >> 8) & 0xff, - xfer->address & 0xff); + xfer->remote_address >> 24, + (xfer->remote_address >> 16) & 0xff, + (xfer->remote_address >> 8) & 0xff, + xfer->remote_address & 0xff); free (name); } diff --git a/src/plugins/xfer/xfer-command.c b/src/plugins/xfer/xfer-command.c index c8146e829..02c834234 100644 --- a/src/plugins/xfer/xfer-command.c +++ b/src/plugins/xfer/xfer-command.c @@ -159,15 +159,15 @@ xfer_command_xfer_list (int full) weechat_printf (NULL, _(" plugin: %s (id: %s), file: %llu " "bytes (position: %llu), address: " - "%d.%d.%d.%d (port %d)"), + "%ld.%ld.%ld.%ld (port %d)"), ptr_xfer->plugin_name, ptr_xfer->plugin_id, ptr_xfer->size, ptr_xfer->pos, - ptr_xfer->address >> 24, - (ptr_xfer->address >> 16) & 0xff, - (ptr_xfer->address >> 8) & 0xff, - ptr_xfer->address & 0xff, + ptr_xfer->remote_address >> 24, + (ptr_xfer->remote_address >> 16) & 0xff, + (ptr_xfer->remote_address >> 8) & 0xff, + ptr_xfer->remote_address & 0xff, ptr_xfer->port); date[0] = '\0'; date_tmp = localtime (&(ptr_xfer->start_transfer)); diff --git a/src/plugins/xfer/xfer-dcc.c b/src/plugins/xfer/xfer-dcc.c index a5fabd89b..4885c4fdb 100644 --- a/src/plugins/xfer/xfer-dcc.c +++ b/src/plugins/xfer/xfer-dcc.c @@ -189,7 +189,7 @@ xfer_dcc_recv_file_child (struct t_xfer *xfer) /* first connect to sender (blocking) */ if (!weechat_network_connect_to (xfer->proxy, xfer->sock, - xfer->address, xfer->port)) + xfer->remote_address, xfer->port)) { xfer_network_write_pipe (xfer, XFER_STATUS_FAILED, XFER_ERROR_CONNECT_SENDER); diff --git a/src/plugins/xfer/xfer-network.c b/src/plugins/xfer/xfer-network.c index 9580bf073..e33612f67 100644 --- a/src/plugins/xfer/xfer-network.c +++ b/src/plugins/xfer/xfer-network.c @@ -215,6 +215,22 @@ xfer_network_send_file_fork (struct t_xfer *xfer) _exit (EXIT_SUCCESS); } + weechat_printf (NULL, + _("%s: sending file to %s (%ld.%ld.%ld.%ld, %s.%s), " + "name: %s (local filename: %s), %llu bytes (protocol: %s)"), + XFER_PLUGIN_NAME, + xfer->remote_nick, + xfer->remote_address >> 24, + (xfer->remote_address >> 16) & 0xff, + (xfer->remote_address >> 8) & 0xff, + xfer->remote_address & 0xff, + xfer->plugin_name, + xfer->plugin_id, + xfer->filename, + xfer->local_filename, + xfer->size, + xfer_protocol_string[xfer->protocol]); + /* parent process */ xfer->child_pid = pid; close (xfer->child_write); @@ -364,7 +380,7 @@ xfer_network_fd_cb (void *arg_xfer, int fd) xfer_buffer_refresh (WEECHAT_HOTLIST_MESSAGE); return WEECHAT_RC_OK; } - xfer->address = ntohl (addr.sin_addr.s_addr); + xfer->remote_address = ntohl (addr.sin_addr.s_addr); xfer->status = XFER_STATUS_ACTIVE; xfer->start_transfer = time (NULL); xfer_buffer_refresh (WEECHAT_HOTLIST_MESSAGE); @@ -406,7 +422,7 @@ xfer_network_fd_cb (void *arg_xfer, int fd) xfer_buffer_refresh (WEECHAT_HOTLIST_MESSAGE); return WEECHAT_RC_OK; } - xfer->address = ntohl (addr.sin_addr.s_addr); + xfer->remote_address = ntohl (addr.sin_addr.s_addr); xfer->status = XFER_STATUS_ACTIVE; xfer_buffer_refresh (WEECHAT_HOTLIST_MESSAGE); xfer->hook_fd = weechat_hook_fd (xfer->sock, @@ -506,8 +522,8 @@ xfer_network_connect (struct t_xfer *xfer) flags = 0; if (fcntl (xfer->sock, F_SETFL, flags | O_NONBLOCK) == -1) return 0; - weechat_network_connect_to (xfer->proxy, xfer->sock, xfer->address, - xfer->port); + weechat_network_connect_to (xfer->proxy, xfer->sock, + xfer->remote_address, xfer->port); xfer->hook_fd = weechat_hook_fd (xfer->sock, 1, 0, 0, diff --git a/src/plugins/xfer/xfer.c b/src/plugins/xfer/xfer.c index 371390293..8bc7b071b 100644 --- a/src/plugins/xfer/xfer.c +++ b/src/plugins/xfer/xfer.c @@ -285,16 +285,17 @@ xfer_close (struct t_xfer *xfer, enum t_xfer_status status) if (XFER_IS_FILE(xfer->type)) { weechat_printf (NULL, - _("%s%s: file %s %s %s: %s"), - (xfer->status == XFER_STATUS_DONE) ? - "" : weechat_prefix ("error"), + _("%s%s: file %s %s %s (%ld.%ld.%ld.%ld): %s"), + (xfer->status == XFER_STATUS_DONE) ? "" : weechat_prefix ("error"), XFER_PLUGIN_NAME, xfer->filename, - (xfer->type == XFER_TYPE_FILE_SEND) ? - _("sent to") : _("received from"), + (xfer->type == XFER_TYPE_FILE_SEND) ? _("sent to") : _("received from"), xfer->remote_nick, - (xfer->status == XFER_STATUS_DONE) ? - _("OK") : _("FAILED")); + xfer->remote_address >> 24, + (xfer->remote_address >> 16) & 0xff, + (xfer->remote_address >> 8) & 0xff, + xfer->remote_address & 0xff, + (xfer->status == XFER_STATUS_DONE) ? _("OK") : _("FAILED")); xfer_network_child_kill (xfer); } } @@ -304,13 +305,13 @@ xfer_close (struct t_xfer *xfer, enum t_xfer_status status) { weechat_printf (xfer->buffer, _("%s: chat closed with %s " - "(%d.%d.%d.%d)"), + "(%ld.%ld.%ld.%ld)"), XFER_PLUGIN_NAME, xfer->remote_nick, - xfer->address >> 24, - (xfer->address >> 16) & 0xff, - (xfer->address >> 8) & 0xff, - xfer->address & 0xff); + xfer->remote_address >> 24, + (xfer->remote_address >> 16) & 0xff, + (xfer->remote_address >> 8) & 0xff, + xfer->remote_address & 0xff); } } @@ -412,33 +413,23 @@ xfer_send_signal (struct t_xfer *xfer, const char *signal) item = weechat_infolist_new_item (infolist); if (item) { - weechat_infolist_new_var_string (item, "plugin_name", - xfer->plugin_name); - weechat_infolist_new_var_string (item, "plugin_id", - xfer->plugin_id); - weechat_infolist_new_var_string (item, "type", - xfer_type_string[xfer->type]); - weechat_infolist_new_var_string (item, "protocol", - xfer_protocol_string[xfer->protocol]); - weechat_infolist_new_var_string (item, "remote_nick", - xfer->remote_nick); - weechat_infolist_new_var_string (item, "local_nick", - xfer->local_nick); - weechat_infolist_new_var_string (item, "charset_modifier", - xfer->charset_modifier); - weechat_infolist_new_var_string (item, "filename", - xfer->filename); + weechat_infolist_new_var_string (item, "plugin_name", xfer->plugin_name); + weechat_infolist_new_var_string (item, "plugin_id", xfer->plugin_id); + weechat_infolist_new_var_string (item, "type", xfer_type_string[xfer->type]); + weechat_infolist_new_var_string (item, "protocol", xfer_protocol_string[xfer->protocol]); + weechat_infolist_new_var_string (item, "remote_nick", xfer->remote_nick); + weechat_infolist_new_var_string (item, "local_nick", xfer->local_nick); + weechat_infolist_new_var_string (item, "charset_modifier", xfer->charset_modifier); + weechat_infolist_new_var_string (item, "filename", xfer->filename); snprintf (str_long, sizeof (str_long), "%llu", xfer->size); - weechat_infolist_new_var_string (item, "size", - str_long); + weechat_infolist_new_var_string (item, "size", str_long); snprintf (str_long, sizeof (str_long), "%llu", xfer->start_resume); - weechat_infolist_new_var_string (item, "start_resume", - str_long); - snprintf (str_long, sizeof (str_long), "%lu", xfer->address); - weechat_infolist_new_var_string (item, "address", - str_long); - weechat_infolist_new_var_integer (item, "port", - xfer->port); + weechat_infolist_new_var_string (item, "start_resume", str_long); + snprintf (str_long, sizeof (str_long), "%lu", xfer->local_address); + weechat_infolist_new_var_string (item, "local_address", str_long); + snprintf (str_long, sizeof (str_long), "%lu", xfer->remote_address); + weechat_infolist_new_var_string (item, "remote_address", str_long); + weechat_infolist_new_var_integer (item, "port", xfer->port); weechat_hook_signal_send (signal, WEECHAT_HOOK_SIGNAL_POINTER, infolist); @@ -466,7 +457,8 @@ xfer_alloc () /* default values */ new_xfer->filename = NULL; new_xfer->size = 0; - new_xfer->address = 0; + new_xfer->local_address = 0; + new_xfer->remote_address = 0; new_xfer->port = 0; new_xfer->remote_nick = NULL; new_xfer->local_nick = NULL; @@ -559,7 +551,16 @@ xfer_new (const char *plugin_name, const char *plugin_id, new_xfer->filename = strdup (_("xfer chat")); new_xfer->size = size; new_xfer->proxy = (proxy) ? strdup (proxy) : NULL; - new_xfer->address = address; + if (XFER_IS_RECV(type)) + { + new_xfer->local_address = 0; + new_xfer->remote_address = address; + } + else + { + new_xfer->local_address = address; + new_xfer->remote_address = 0; + } new_xfer->port = port; new_xfer->status = XFER_STATUS_WAITING; @@ -575,16 +576,16 @@ xfer_new (const char *plugin_name, const char *plugin_id, case XFER_TYPE_FILE_RECV: weechat_printf (NULL, _("%s: incoming file from %s " - "(%s.%s), ip: %d.%d.%d.%d, name: %s, %llu bytes " + "(%ld.%ld.%ld.%ld, %s.%s), name: %s, %llu bytes " "(protocol: %s)"), XFER_PLUGIN_NAME, remote_nick, - plugin_name, - plugin_id, address >> 24, (address >> 16) & 0xff, (address >> 8) & 0xff, address & 0xff, + plugin_name, + plugin_id, filename, size, xfer_protocol_string[protocol]); @@ -592,7 +593,7 @@ xfer_new (const char *plugin_name, const char *plugin_id, break; case XFER_TYPE_FILE_SEND: weechat_printf (NULL, - _("%s: sending file to %s (%s.%s): %s " + _("%s: offering file to %s (%s.%s), name: %s " "(local filename: %s), %llu bytes (protocol: %s)"), XFER_PLUGIN_NAME, remote_nick, @@ -607,15 +608,15 @@ xfer_new (const char *plugin_name, const char *plugin_id, case XFER_TYPE_CHAT_RECV: weechat_printf (NULL, _("%s: incoming chat request from %s " - "(%s.%s), ip: %d.%d.%d.%d"), + "(%ld.%ld.%ld.%ld, %s.%s)"), XFER_PLUGIN_NAME, remote_nick, - plugin_name, - plugin_id, address >> 24, (address >> 16) & 0xff, (address >> 8) & 0xff, - address & 0xff); + address & 0xff, + plugin_name, + plugin_id); xfer_buffer_refresh (WEECHAT_HOTLIST_MESSAGE); break; case XFER_TYPE_CHAT_SEND: @@ -902,13 +903,13 @@ xfer_add_cb (void *data, const char *signal, const char *type_data, if (XFER_IS_RECV(type)) { - sscanf (weechat_infolist_string (infolist, "address"), "%lu", &local_addr); + sscanf (weechat_infolist_string (infolist, "remote_address"), "%lu", &local_addr); port = weechat_infolist_integer (infolist, "port"); } else { /* get local IP address */ - sscanf (weechat_infolist_string (infolist, "address"), "%lu", &local_addr); + sscanf (weechat_infolist_string (infolist, "local_address"), "%lu", &local_addr); memset (&addr, 0, sizeof (struct sockaddr_in)); addr.sin_family = AF_INET; @@ -1306,8 +1307,11 @@ xfer_add_to_infolist (struct t_infolist *infolist, struct t_xfer *xfer) return 0; if (!weechat_infolist_new_var_string (ptr_item, "proxy", xfer->proxy)) return 0; - snprintf (value, sizeof (value), "%lu", xfer->address); - if (!weechat_infolist_new_var_string (ptr_item, "address", value)) + snprintf (value, sizeof (value), "%lu", xfer->local_address); + if (!weechat_infolist_new_var_string (ptr_item, "local_address", value)) + return 0; + snprintf (value, sizeof (value), "%lu", xfer->remote_address); + if (!weechat_infolist_new_var_string (ptr_item, "remote_address", value)) return 0; if (!weechat_infolist_new_var_integer (ptr_item, "port", xfer->port)) return 0; @@ -1401,7 +1405,8 @@ xfer_print_log () weechat_log_printf (" filename. . . . . . : '%s'", ptr_xfer->filename); weechat_log_printf (" size. . . . . . . . : %llu", ptr_xfer->size); weechat_log_printf (" proxy . . . . . . . : '%s'", ptr_xfer->proxy); - weechat_log_printf (" address . . . . . . : %lu", ptr_xfer->address); + weechat_log_printf (" local_address . . . : %lu", ptr_xfer->local_address); + weechat_log_printf (" remote_address. . . : %lu", ptr_xfer->remote_address); weechat_log_printf (" port. . . . . . . . : %d", ptr_xfer->port); weechat_log_printf (" status. . . . . . . : %d (%s)", diff --git a/src/plugins/xfer/xfer.h b/src/plugins/xfer/xfer.h index 90626bc60..d854830fe 100644 --- a/src/plugins/xfer/xfer.h +++ b/src/plugins/xfer/xfer.h @@ -78,8 +78,8 @@ enum t_xfer_error /* xfer blocksize */ -#define XFER_BLOCKSIZE_MIN 1024 /* min blocksize when sending file */ -#define XFER_BLOCKSIZE_MAX 102400 /* max blocksize when sending file */ +#define XFER_BLOCKSIZE_MIN 1024 /* min blocksize */ +#define XFER_BLOCKSIZE_MAX 102400 /* max blocksize */ /* separator in filenames */ @@ -119,7 +119,8 @@ struct t_xfer char *filename; /* filename */ unsigned long long size; /* file size */ char *proxy; /* proxy to use (optional) */ - unsigned long address; /* local or remote IP address */ + unsigned long local_address; /* local IP address */ + unsigned long remote_address; /* remote IP address */ int port; /* remote port */ /* internal data */ |