]> granicus.if.org Git - transmission/commitdiff
(trunk libT) #3906 "DHT ignores bind-address-ipv6" -- make the process of getting...
authorJordan Lee <jordan@transmissionbt.com>
Sat, 22 Jan 2011 20:43:36 +0000 (20:43 +0000)
committerJordan Lee <jordan@transmissionbt.com>
Sat, 22 Jan 2011 20:43:36 +0000 (20:43 +0000)
As suggested by Juiusz after the IPv6 binding commit in r11749.  See: https://trac.transmissionbt.com/ticket/3906#comment:6

libtransmission/session.c
libtransmission/tr-udp.c
libtransmission/tr-udp.h

index e6fa30dd6d1a0ce2542a5a5d543da070c383ac12..612ef7724d2305eb0c39325e9f75f2cb14707c41 100644 (file)
@@ -706,7 +706,7 @@ tr_sessionInitImpl( void * vdata )
 
     tr_sessionSet( session, &settings );
 
-    tr_udpInit( session, &session->public_ipv4->addr );
+    tr_udpInit( session );
 
     if( session->isLPDEnabled )
         tr_lpdInit( session, &session->public_ipv4->addr );
@@ -1946,7 +1946,7 @@ toggleDHTImpl(  void * data )
 
     tr_udpUninit( session );
     session->isDHTEnabled = !session->isDHTEnabled;
-    tr_udpInit( session, &session->public_ipv4->addr );
+    tr_udpInit( session );
 }
 
 void
index 5cfdb82171cd1cc9919515899275839c7f4702c9..652a18ca5e8049611d8677a6d56004dfcf3f80f6 100644 (file)
@@ -148,8 +148,10 @@ event_callback(int s, short type, void *sv)
 }    
 
 void
-tr_udpInit(tr_session *ss, const tr_address * addr)
+tr_udpInit(tr_session *ss)
 {
+    tr_bool is_default;
+    const struct tr_address * public_addr;
     struct sockaddr_in sin;
     int rc;
 
@@ -168,7 +170,9 @@ tr_udpInit(tr_session *ss, const tr_address * addr)
 
     memset(&sin, 0, sizeof(sin));
     sin.sin_family = AF_INET;
-    memcpy(&sin.sin_addr, &addr->addr.addr4, sizeof (struct in_addr));
+    public_addr = tr_sessionGetPublicAddress(ss, TR_AF_INET, &is_default);
+    if(public_addr && !is_default)
+        memcpy(&sin.sin_addr, &public_addr->addr.addr4, sizeof (struct in_addr));
     sin.sin_port = htons(ss->udp_port);
     rc = bind(ss->udp_socket, (struct sockaddr*)&sin, sizeof(sin));
     if(rc < 0) {
index 0ad8cc490e07cddaa4b97fe772fbd6988749be66..b331e39e94e69fdec32c4f17f5cf738956557efd 100644 (file)
@@ -25,6 +25,6 @@ THE SOFTWARE.
  #error only libtransmission should #include this header.
 #endif
 
-void tr_udpInit( tr_session *, const tr_address *);
+void tr_udpInit( tr_session * );
 void tr_udpUninit( tr_session * );