[Freeswitch-svn] [commit] r13636 - freeswitch/trunk/src
FreeSWITCH SVN
mrene at freeswitch.org
Fri Jun 5 08:01:55 PDT 2009
Author: mrene
Date: Fri Jun 5 10:01:54 2009
New Revision: 13636
Log:
Use a new natpmp_t object for every request
Modified:
freeswitch/trunk/src/switch_nat.c
Modified: freeswitch/trunk/src/switch_nat.c
==============================================================================
--- freeswitch/trunk/src/switch_nat.c (original)
+++ freeswitch/trunk/src/switch_nat.c Fri Jun 5 10:01:54 2009
@@ -41,7 +41,6 @@
typedef struct {
switch_memory_pool_t *pool;
switch_nat_type_t nat_type;
- natpmp_t natpmp;
struct UPNPUrls urls;
struct IGDdatas data;
char pub_addr[16];
@@ -105,10 +104,11 @@
natpmpresp_t response;
char *pubaddr = NULL;
fd_set fds;
+ natpmp_t natpmp;
- initnatpmp(&nat_globals.natpmp);
- r = sendpublicaddressrequest(&nat_globals.natpmp);
+ initnatpmp(&natpmp);
+ r = sendpublicaddressrequest(&natpmp);
if (r < 0) {
goto end;
@@ -120,10 +120,10 @@
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Checking for PMP %d/%d\n", i, max);
FD_ZERO(&fds);
- FD_SET(nat_globals.natpmp.s, &fds);
- getnatpmprequesttimeout(&nat_globals.natpmp, &timeout);
+ FD_SET(natpmp.s, &fds);
+ getnatpmprequesttimeout(&natpmp, &timeout);
select(FD_SETSIZE, &fds, NULL, NULL, &timeout);
- r = readnatpmpresponseorretry(&nat_globals.natpmp, &response);
+ r = readnatpmpresponseorretry(&natpmp, &response);
} while(r == NATPMP_TRYAGAIN && i < max);
if (r < 0) {
@@ -134,9 +134,7 @@
switch_set_string(nat_globals.pub_addr, pubaddr);
nat_globals.nat_type = SWITCH_NAT_TYPE_PMP;
- if (r) {
- closenatpmp(&nat_globals.natpmp);
- }
+ closenatpmp(&natpmp);
end:
@@ -175,21 +173,24 @@
switch_status_t status = SWITCH_STATUS_FALSE;
natpmpresp_t response;
int r;
+ natpmp_t natpmp;
+ initnatpmp(&natpmp);
+
if (proto == SWITCH_NAT_TCP) {
- sendnewportmappingrequest(&nat_globals.natpmp, NATPMP_PROTOCOL_TCP, port, port, 31104000);
+ sendnewportmappingrequest(&natpmp, NATPMP_PROTOCOL_TCP, port, port, 31104000);
} else if(proto == SWITCH_NAT_UDP) {
- sendnewportmappingrequest(&nat_globals.natpmp, NATPMP_PROTOCOL_UDP, port, port, 31104000);
+ sendnewportmappingrequest(&natpmp, NATPMP_PROTOCOL_UDP, port, port, 31104000);
}
do {
fd_set fds;
struct timeval timeout = { 1, 0 };
FD_ZERO(&fds);
- FD_SET(nat_globals.natpmp.s, &fds);
- getnatpmprequesttimeout(&nat_globals.natpmp, &timeout);
+ FD_SET(natpmp.s, &fds);
+ getnatpmprequesttimeout(&natpmp, &timeout);
select(FD_SETSIZE, &fds, NULL, NULL, &timeout);
- r = readnatpmpresponseorretry(&nat_globals.natpmp, &response);
+ r = readnatpmpresponseorretry(&natpmp, &response);
} while(r == NATPMP_TRYAGAIN);
if (r == 0) {
@@ -210,7 +211,9 @@
status = SWITCH_STATUS_SUCCESS;
}
-
+
+ closenatpmp(&natpmp);
+
return status;
}
@@ -244,21 +247,24 @@
switch_status_t status = SWITCH_STATUS_FALSE;
natpmpresp_t response;
int r;
+ natpmp_t natpmp;
+
+ initnatpmp(&natpmp);
if (proto == SWITCH_NAT_TCP) {
- sendnewportmappingrequest(&nat_globals.natpmp, NATPMP_PROTOCOL_TCP, port, port, 0);
+ sendnewportmappingrequest(&natpmp, NATPMP_PROTOCOL_TCP, port, port, 0);
} else if(proto == SWITCH_NAT_UDP) {
- sendnewportmappingrequest(&nat_globals.natpmp, NATPMP_PROTOCOL_UDP, port, port, 0);
+ sendnewportmappingrequest(&natpmp, NATPMP_PROTOCOL_UDP, port, port, 0);
}
do {
fd_set fds;
struct timeval timeout;
FD_ZERO(&fds);
- FD_SET(nat_globals.natpmp.s, &fds);
- getnatpmprequesttimeout(&nat_globals.natpmp, &timeout);
+ FD_SET(natpmp.s, &fds);
+ getnatpmprequesttimeout(&natpmp, &timeout);
select(FD_SETSIZE, &fds, NULL, NULL, &timeout);
- r = readnatpmpresponseorretry(&nat_globals.natpmp, &response);
+ r = readnatpmpresponseorretry(&natpmp, &response);
} while(r == NATPMP_TRYAGAIN);
if (r == 0) {
@@ -269,6 +275,8 @@
response.pnu.newportmapping.privateport);
status = SWITCH_STATUS_SUCCESS;
}
+
+ closenatpmp(&natpmp);
return status;
}
@@ -337,9 +345,7 @@
SWITCH_DECLARE(void) switch_nat_shutdown(void)
{
- if (nat_globals.nat_type == SWITCH_NAT_TYPE_PMP) {
- closenatpmp(&nat_globals.natpmp);
- }
+
}
More information about the Freeswitch-svn
mailing list