[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] r11669 - gnunet/src/transport
From: |
gnunet |
Subject: |
[GNUnet-SVN] r11669 - gnunet/src/transport |
Date: |
Fri, 11 Jun 2010 13:39:20 +0200 |
Author: nevans
Date: 2010-06-11 13:39:20 +0200 (Fri, 11 Jun 2010)
New Revision: 11669
Modified:
gnunet/src/transport/plugin_transport_tcp.c
gnunet/src/transport/plugin_transport_udp.c
Log:
explicitly add user provided external address to known addresses when used with
NAT
Modified: gnunet/src/transport/plugin_transport_tcp.c
===================================================================
--- gnunet/src/transport/plugin_transport_tcp.c 2010-06-11 11:04:45 UTC (rev
11668)
+++ gnunet/src/transport/plugin_transport_tcp.c 2010-06-11 11:39:20 UTC (rev
11669)
@@ -2154,6 +2154,8 @@
int only_nat_addresses;
char *internal_address;
char *external_address;
+ struct sockaddr_in in_addr;
+ struct IPv4TcpAddress t4;
service = GNUNET_SERVICE_start ("transport-tcp", env->sched, env->cfg);
if (service == NULL)
@@ -2223,6 +2225,11 @@
return NULL;
}
+ if ((external_address != NULL) && (inet_pton(AF_INET, external_address,
&in_addr.sin_addr) != 1))
+ {
+ GNUNET_log_from(GNUNET_ERROR_TYPE_WARNING, "udp", "Malformed
EXTERNAL_ADDRESS %s given in configuration!\n", external_address);
+ }
+
internal_address = NULL;
if ((GNUNET_YES == behind_nat) && (GNUNET_OK !=
GNUNET_CONFIGURATION_get_value_string (env->cfg,
@@ -2240,6 +2247,10 @@
return NULL;
}
+ if ((internal_address != NULL) && (inet_pton(AF_INET, internal_address,
&in_addr.sin_addr) != 1))
+ {
+ GNUNET_log_from(GNUNET_ERROR_TYPE_WARNING, "udp", "Malformed
INTERNAL_ADDRESS %s given in configuration!\n", internal_address);
+ }
aport = 0;
if ((GNUNET_OK !=
@@ -2328,15 +2339,26 @@
GNUNET_SERVER_disconnect_notify (plugin->server,
&disconnect_notify,
plugin);
- /* FIXME: do the two calls below periodically again and
- not just once (since the info we get might change...) */
- GNUNET_OS_network_interfaces_list (&process_interfaces, plugin);
+ if (plugin->behind_nat == GNUNET_NO)
+ {
+ GNUNET_OS_network_interfaces_list (&process_interfaces, plugin);
+ }
+
plugin->hostname_dns = GNUNET_RESOLVER_hostname_resolve (env->sched,
env->cfg,
AF_UNSPEC,
HOSTNAME_RESOLVE_TIMEOUT,
&process_hostname_ips,
plugin);
+
+ if ((plugin->behind_nat == GNUNET_YES) && (inet_pton(AF_INET,
plugin->external_address, &t4.ipv4_addr) == 1))
+ {
+ t4.t_port = htons(0);
+ plugin->env->notify_address (plugin->env->cls,
+ "tcp",
+ &t4, sizeof(t4),
GNUNET_TIME_UNIT_FOREVER_REL);
+ }
+
return api;
}
Modified: gnunet/src/transport/plugin_transport_udp.c
===================================================================
--- gnunet/src/transport/plugin_transport_udp.c 2010-06-11 11:04:45 UTC (rev
11668)
+++ gnunet/src/transport/plugin_transport_udp.c 2010-06-11 11:39:20 UTC (rev
11669)
@@ -1671,6 +1671,7 @@
int only_nat_addresses;
char *internal_address;
char *external_address;
+ struct sockaddr_in in_addr;
service = GNUNET_SERVICE_start ("transport-udp", env->sched, env->cfg);
if (service == NULL)
@@ -1736,6 +1737,11 @@
return NULL;
}
+ if ((external_address != NULL) && (inet_pton(AF_INET, external_address,
&in_addr.sin_addr) != 1))
+ {
+ GNUNET_log_from(GNUNET_ERROR_TYPE_WARNING, "udp", "Malformed
EXTERNAL_ADDRESS %s given in configuration!\n", external_address);
+ }
+
internal_address = NULL;
if ((GNUNET_YES == behind_nat) && (GNUNET_OK !=
GNUNET_CONFIGURATION_get_value_string (env->cfg,
@@ -1753,6 +1759,11 @@
return NULL;
}
+ if ((internal_address != NULL) && (inet_pton(AF_INET, internal_address,
&in_addr.sin_addr) != 1))
+ {
+ GNUNET_log_from(GNUNET_ERROR_TYPE_WARNING, "udp", "Malformed
INTERNAL_ADDRESS %s given in configuration!\n", internal_address);
+ }
+
if (GNUNET_OK !=
GNUNET_CONFIGURATION_get_value_number (env->cfg,
"transport-udp",
@@ -1799,7 +1810,11 @@
plugin->service = service;
- GNUNET_OS_network_interfaces_list (&process_interfaces, plugin);
+ if (plugin->behind_nat == GNUNET_NO)
+ {
+ GNUNET_OS_network_interfaces_list (&process_interfaces, plugin);
+ }
+
plugin->hostname_dns = GNUNET_RESOLVER_hostname_resolve (env->sched,
env->cfg,
AF_UNSPEC,
@@ -1807,6 +1822,15 @@
&process_hostname_ips,
plugin);
+ if ((plugin->behind_nat == GNUNET_YES) && (inet_pton(AF_INET,
plugin->external_address, &in_addr.sin_addr) == 1))
+ {
+ in_addr.sin_port = htons(0);
+ in_addr.sin_family = AF_INET;
+ plugin->env->notify_address (plugin->env->cls,
+ "udp",
+ &in_addr, sizeof(in_addr),
GNUNET_TIME_UNIT_FOREVER_REL);
+ }
+
sockets_created = udp_transport_server_start (plugin);
GNUNET_assert (sockets_created == 1);
@@ -1814,7 +1838,6 @@
return api;
}
-
void *
libgnunet_plugin_transport_udp_done (void *cls)
{
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r11669 - gnunet/src/transport,
gnunet <=