1
0
mirror of https://github.com/irssi/irssi.git synced 2025-01-03 14:56:47 -05:00

/SET dcc_own_ip now affects also which interface irssi uses to connect to

outgoing DCC connections.


git-svn-id: http://svn.irssi.org/repos/irssi/trunk@2150 dbcabf3a-b0e7-0310-adc4-f8d773084564
This commit is contained in:
Timo Sirainen 2001-11-25 17:35:47 +00:00 committed by cras
parent e8b71dcd98
commit e6f006009f
4 changed files with 22 additions and 11 deletions

View File

@ -30,7 +30,6 @@
#include "irc-servers.h" #include "irc-servers.h"
#include "irc-queries.h" #include "irc-queries.h"
#include "servers-setup.h"
#include "masks.h" #include "masks.h"
#include "dcc-chat.h" #include "dcc-chat.h"
@ -360,8 +359,6 @@ static void sig_chat_connected(CHAT_DCC_REC *dcc)
static void dcc_chat_connect(CHAT_DCC_REC *dcc) static void dcc_chat_connect(CHAT_DCC_REC *dcc)
{ {
IPADDR *own_ip;
g_return_if_fail(IS_DCC_CHAT(dcc)); g_return_if_fail(IS_DCC_CHAT(dcc));
if (dcc->addrstr[0] == '\0' || if (dcc->addrstr[0] == '\0' ||
@ -370,8 +367,7 @@ static void dcc_chat_connect(CHAT_DCC_REC *dcc)
return; return;
} }
own_ip = IPADDR_IS_V6(&dcc->addr) ? source_host_ip6 : source_host_ip4; dcc->handle = dcc_connect_ip(&dcc->addr, dcc->port);
dcc->handle = net_connect_ip(&dcc->addr, dcc->port, own_ip);
if (dcc->handle != NULL) { if (dcc->handle != NULL) {
dcc->tagconn = g_input_add(dcc->handle, dcc->tagconn = g_input_add(dcc->handle,
G_INPUT_WRITE | G_INPUT_READ, G_INPUT_WRITE | G_INPUT_READ,

View File

@ -26,7 +26,6 @@
#include "settings.h" #include "settings.h"
#include "irc-servers.h" #include "irc-servers.h"
#include "servers-setup.h"
#include "dcc-get.h" #include "dcc-get.h"
@ -214,15 +213,12 @@ static void sig_dccget_connected(GET_DCC_REC *dcc)
void dcc_get_connect(GET_DCC_REC *dcc) void dcc_get_connect(GET_DCC_REC *dcc)
{ {
IPADDR *own_ip;
if (dcc->get_type == DCC_GET_DEFAULT) { if (dcc->get_type == DCC_GET_DEFAULT) {
dcc->get_type = settings_get_bool("dcc_autorename") ? dcc->get_type = settings_get_bool("dcc_autorename") ?
DCC_GET_RENAME : DCC_GET_OVERWRITE; DCC_GET_RENAME : DCC_GET_OVERWRITE;
} }
own_ip = IPADDR_IS_V6(&dcc->addr) ? source_host_ip6 : source_host_ip4; dcc->handle = dcc_connect_ip(&dcc->addr, dcc->port);
dcc->handle = net_connect_ip(&dcc->addr, dcc->port, own_ip);
if (dcc->handle != NULL) { if (dcc->handle != NULL) {
dcc->tagconn = dcc->tagconn =
g_input_add(dcc->handle, g_input_add(dcc->handle,

View File

@ -29,6 +29,7 @@
#include "levels.h" #include "levels.h"
#include "irc-servers.h" #include "irc-servers.h"
#include "servers-setup.h"
#include "dcc-chat.h" #include "dcc-chat.h"
#include "dcc-get.h" #include "dcc-get.h"
@ -199,7 +200,7 @@ GIOChannel *dcc_listen(GIOChannel *iface, IPADDR *ip, int *port)
int first, last; int first, last;
if (net_getsockname(iface, ip, NULL) == -1) if (net_getsockname(iface, ip, NULL) == -1)
return NULL; return NULL;
/* get first port */ /* get first port */
dcc_port = settings_get_str("dcc_port"); dcc_port = settings_get_str("dcc_port");
@ -233,6 +234,22 @@ GIOChannel *dcc_listen(GIOChannel *iface, IPADDR *ip, int *port)
return NULL; return NULL;
} }
/* Connect to specified IP address using the correct own_ip. */
GIOChannel *dcc_connect_ip(IPADDR *ip, int port)
{
IPADDR *own_ip, temp_ip;
if (*settings_get_str("dcc_own_ip") == '\0') {
own_ip = IPADDR_IS_V6(ip) ? source_host_ip6 : source_host_ip4;
} else {
/* use the specified interface for connecting */
net_host2ip(settings_get_str("dcc_own_ip"), &temp_ip);
own_ip = &temp_ip;
}
return net_connect_ip(ip, port, own_ip);
}
/* Server connected - update server for DCC records that have /* Server connected - update server for DCC records that have
the same server tag */ the same server tag */
static void sig_server_connected(IRC_SERVER_REC *server) static void sig_server_connected(IRC_SERVER_REC *server)

View File

@ -49,6 +49,8 @@ void dcc_str2ip(const char *str, IPADDR *ip);
/* Start listening for incoming connections */ /* Start listening for incoming connections */
GIOChannel *dcc_listen(GIOChannel *iface, IPADDR *ip, int *port); GIOChannel *dcc_listen(GIOChannel *iface, IPADDR *ip, int *port);
/* Connect to specified IP address using the correct own_ip. */
GIOChannel *dcc_connect_ip(IPADDR *ip, int port);
/* Close DCC - sends "dcc closed" signal and calls dcc_destroy() */ /* Close DCC - sends "dcc closed" signal and calls dcc_destroy() */
void dcc_close(DCC_REC *dcc); void dcc_close(DCC_REC *dcc);