]> sjero.net Git - linphone/commitdiff
Fix upnp binding loop when not getting provided port
authorYann Diorcet <yann.diorcet@belledonne-communications.com>
Thu, 4 Apr 2013 14:44:46 +0000 (16:44 +0200)
committerYann Diorcet <yann.diorcet@belledonne-communications.com>
Thu, 4 Apr 2013 14:53:27 +0000 (16:53 +0200)
coreapi/upnp.c

index ec7d1f9c6ba895c94ddf35207e67caaa94ed87e0..71a3c9d2a63f37a16b920cd1726e1cf270cedd27 100644 (file)
@@ -553,9 +553,8 @@ int linphone_upnp_context_send_add_port_binding(UpnpContext *lupnp, UpnpPortBind
                mapping.local_port = port->local_port;
                mapping.local_host = port->local_addr;
                if(port->external_port == -1)
-                       mapping.remote_port = rand()%(0xffff - 1024) + 1024;
-               else
-                       mapping.remote_port = port->external_port;
+                       port->external_port = rand()%(0xffff - 1024) + 1024;
+               mapping.remote_port = port->external_port;
                mapping.remote_host = "";
                snprintf(description, 128, "%s %s at %s:%d",
                                PACKAGE_NAME,
@@ -877,7 +876,7 @@ void linphone_upnp_update_port_binding(UpnpContext *lupnp, UpnpPortBinding **por
                        }
                }
                if(*port_mapping == NULL) {
-                       *port_mapping = linphone_upnp_port_binding_new_or_collect(lupnp->pending_bindings, protocol, port, port);
+                       *port_mapping = linphone_upnp_port_binding_new_or_collect(lupnp->pending_bindings, protocol, port, -1);
                }
                
                // Get addresses
@@ -1107,8 +1106,8 @@ void linphone_upnp_port_binding_log(int level, const char *msg, const UpnpPortBi
 
 bool_t linphone_upnp_port_binding_equal(const UpnpPortBinding *port1, const UpnpPortBinding *port2) {
        return port1->protocol == port2->protocol &&
-                       port1->local_port == port2->local_port &&
-                       port1->external_port == port2->external_port;
+              port1->local_port == port2->local_port &&
+              (port1->external_port == -1 || port2->external_port == -1 || port1->external_port == port2->external_port);
 }
 
 UpnpPortBinding *linphone_upnp_port_binding_equivalent_in_list(MSList *list, const UpnpPortBinding *port) {