]> jfr.im git - irc/hexchat/hexchat.git/commitdiff
Make dcc_ip being a per-server value.
authorStepan Broz <redacted>
Tue, 21 May 2019 14:02:30 +0000 (16:02 +0200)
committerPatrick Griffis <redacted>
Sat, 21 Dec 2019 06:27:01 +0000 (22:27 -0800)
Moved dcc_ip from prefs to sess->server.

src/common/dcc.c
src/common/dcc.h
src/common/hexchat.h
src/common/inbound.c
src/common/outbound.c

index 51f6d661bacafe2634e11a84214437603cf00dc6..df129e68de7058586a8326339809b90bcfb2a991 100644 (file)
@@ -1618,13 +1618,13 @@ dcc_accept (GIOChannel *source, GIOCondition condition, struct DCC *dcc)
 }
 
 guint32
-dcc_get_my_address (void)      /* the address we'll tell the other person */
+dcc_get_my_address (session *sess)     /* the address we'll tell the other person */
 {
        struct hostent *dns_query;
        guint32 addr = 0;
 
-       if (prefs.hex_dcc_ip_from_server && prefs.dcc_ip)
-               addr = prefs.dcc_ip;
+       if (prefs.hex_dcc_ip_from_server && sess->server->dcc_ip)
+               addr = sess->server->dcc_ip;
        else if (prefs.hex_dcc_ip[0])
        {
           dns_query = gethostbyname ((const char *) prefs.hex_dcc_ip);
@@ -1710,7 +1710,7 @@ dcc_listen_init (struct DCC *dcc, session *sess)
        /*if we have a dcc_ip, we use that, so the remote client can connect*/
        /*else we try to take an address from hex_dcc_ip*/
        /*if something goes wrong we tell the client to connect to our LAN ip*/
-       dcc->addr = dcc_get_my_address ();
+       dcc->addr = dcc_get_my_address (sess);
 
        /*if nothing else worked we use the address we bound to*/
        if (dcc->addr == 0)
index 379385e6754cdb218b1d4f86494d4df6749aa1ee..74028205b3e05dc999e955ed98c85e9562f2d7ce 100644 (file)
@@ -124,7 +124,7 @@ void dcc_chat (session *sess, char *nick, int passive);
 void handle_dcc (session *sess, char *nick, char *word[], char *word_eol[],
                                          const message_tags_data *tags_data);
 void dcc_show_list (session *sess);
-guint32 dcc_get_my_address (void);
+guint32 dcc_get_my_address (session *sess);
 void dcc_get_with_destfile (struct DCC *dcc, char *utf8file);
 
 #endif
index 8c4a6a41a1d6051031c3deaf79753217fbdc56ac..0fd985985368ffe073fbc9d78a5a9f2b715c4f46 100644 (file)
@@ -313,7 +313,6 @@ struct hexchatprefs
 
        /* these are the private variables */
        guint32 local_ip;
-       guint32 dcc_ip;
 
        unsigned int wait_on_exit;      /* wait for logs to be flushed to disk IF we're connected */
 
@@ -482,6 +481,10 @@ typedef struct server
        int proxy_sok4;
        int proxy_sok6;
        int id;                                 /* unique ID number (for plugin API) */
+
+       /* dcc_ip moved from haxchatprefs to make it per-server */
+       guint32 dcc_ip;
+
 #ifdef USE_OPENSSL
        SSL_CTX *ctx;
        SSL *ssl;
index fb8eb51150da1318162ae1eb0fea54e0084e830b..9c77b231742239ae7b572b194a9ae053f0a59472 100644 (file)
@@ -1420,7 +1420,7 @@ inbound_foundip (session *sess, char *ip, const message_tags_data *tags_data)
        HostAddr = gethostbyname (ip);
        if (HostAddr)
        {
-               prefs.dcc_ip = ((struct in_addr *) HostAddr->h_addr)->s_addr;
+               sess->server->dcc_ip = ((struct in_addr *) HostAddr->h_addr)->s_addr;
                EMIT_SIGNAL_TIMESTAMP (XP_TE_FOUNDIP, sess->server->server_session,
                                                                          inet_ntoa (*((struct in_addr *) HostAddr->h_addr)),
                                                                          NULL, NULL, NULL, 0, tags_data->timestamp);
index 96fb7fe44f7c726bad4c4bcc4cc4405863ff152e..614aad38fa2de85845bb1c463f4b299a3170cc31 100644 (file)
@@ -3287,7 +3287,7 @@ cmd_send (struct session *sess, char *tbuf, char *word[], char *word_eol[])
        if (!word[2][0])
                return FALSE;
 
-       addr = dcc_get_my_address ();
+       addr = dcc_get_my_address (sess);
        if (addr == 0)
        {
                /* use the one from our connected server socket */