diff options
author | Matthias Wachs <wachs@net.in.tum.de> | 2011-05-16 13:35:17 +0000 |
---|---|---|
committer | Matthias Wachs <wachs@net.in.tum.de> | 2011-05-16 13:35:17 +0000 |
commit | 60858280816615ca9c70332af76bbb797f2984be (patch) | |
tree | 546e85fc35492844f83640c9d3f13ba30b682321 /src/transport | |
parent | f1d701c55b497773d7abda7b75c97012c0abab28 (diff) | |
download | gnunet-60858280816615ca9c70332af76bbb797f2984be.tar.gz gnunet-60858280816615ca9c70332af76bbb797f2984be.zip |
more fixes in address handling
Diffstat (limited to 'src/transport')
-rw-r--r-- | src/transport/plugin_transport_tcp.c | 37 |
1 files changed, 27 insertions, 10 deletions
diff --git a/src/transport/plugin_transport_tcp.c b/src/transport/plugin_transport_tcp.c index daaf02dde..cca50c1ca 100644 --- a/src/transport/plugin_transport_tcp.c +++ b/src/transport/plugin_transport_tcp.c | |||
@@ -2730,6 +2730,7 @@ libgnunet_plugin_transport_tcp_init (void *cls) | |||
2730 | int enable_upnp; | 2730 | int enable_upnp; |
2731 | char *internal_address; | 2731 | char *internal_address; |
2732 | char *external_address; | 2732 | char *external_address; |
2733 | char *bind_address; | ||
2733 | struct sockaddr_in in_addr; | 2734 | struct sockaddr_in in_addr; |
2734 | struct GNUNET_TIME_Relative idle_timeout; | 2735 | struct GNUNET_TIME_Relative idle_timeout; |
2735 | 2736 | ||
@@ -2805,6 +2806,18 @@ libgnunet_plugin_transport_tcp_init (void *cls) | |||
2805 | enable_upnp = GNUNET_NO; | 2806 | enable_upnp = GNUNET_NO; |
2806 | } | 2807 | } |
2807 | 2808 | ||
2809 | bind_address = NULL; | ||
2810 | if (GNUNET_YES == GNUNET_CONFIGURATION_get_value_string (env->cfg, | ||
2811 | "transport-tcp", | ||
2812 | "BINDTO", | ||
2813 | &bind_address)) | ||
2814 | { | ||
2815 | GNUNET_log_from (GNUNET_ERROR_TYPE_INFO, | ||
2816 | "tcp", | ||
2817 | _("Binding TCP plugin to specific address: `%s'\n"), | ||
2818 | bind_address); | ||
2819 | } | ||
2820 | |||
2808 | internal_address = NULL; | 2821 | internal_address = NULL; |
2809 | if (GNUNET_OK == | 2822 | if (GNUNET_OK == |
2810 | GNUNET_CONFIGURATION_have_value (env->cfg, | 2823 | GNUNET_CONFIGURATION_have_value (env->cfg, |
@@ -2830,6 +2843,19 @@ libgnunet_plugin_transport_tcp_init (void *cls) | |||
2830 | return NULL; | 2843 | return NULL; |
2831 | } | 2844 | } |
2832 | 2845 | ||
2846 | if ((bind_address != NULL) && (internal_address != NULL)) | ||
2847 | { | ||
2848 | if (0 != strcmp(internal_address, bind_address )) | ||
2849 | { | ||
2850 | GNUNET_log_from (GNUNET_ERROR_TYPE_ERROR, | ||
2851 | "tcp","Specific bind address `%s' and internal address `%s' must not differ, forcing internal address to bind address!\n", bind_address, internal_address); | ||
2852 | GNUNET_free (internal_address); | ||
2853 | internal_address = bind_address; | ||
2854 | GNUNET_log_from (GNUNET_ERROR_TYPE_ERROR, | ||
2855 | "tcp","New internal address `%s'\n", internal_address); | ||
2856 | } | ||
2857 | } | ||
2858 | |||
2833 | aport = 0; | 2859 | aport = 0; |
2834 | if ( (GNUNET_OK != | 2860 | if ( (GNUNET_OK != |
2835 | GNUNET_CONFIGURATION_get_value_number (env->cfg, | 2861 | GNUNET_CONFIGURATION_get_value_number (env->cfg, |
@@ -2875,6 +2901,7 @@ libgnunet_plugin_transport_tcp_init (void *cls) | |||
2875 | plugin = GNUNET_malloc (sizeof (struct Plugin)); | 2901 | plugin = GNUNET_malloc (sizeof (struct Plugin)); |
2876 | plugin->open_port = bport; | 2902 | plugin->open_port = bport; |
2877 | plugin->adv_port = aport; | 2903 | plugin->adv_port = aport; |
2904 | plugin->bind_address = bind_address; | ||
2878 | plugin->external_address = external_address; | 2905 | plugin->external_address = external_address; |
2879 | plugin->internal_address = internal_address; | 2906 | plugin->internal_address = internal_address; |
2880 | plugin->behind_nat = behind_nat; | 2907 | plugin->behind_nat = behind_nat; |
@@ -2927,16 +2954,6 @@ libgnunet_plugin_transport_tcp_init (void *cls) | |||
2927 | GNUNET_SERVER_disconnect_notify (plugin->server, | 2954 | GNUNET_SERVER_disconnect_notify (plugin->server, |
2928 | &disconnect_notify, | 2955 | &disconnect_notify, |
2929 | plugin); | 2956 | plugin); |
2930 | if (GNUNET_YES == GNUNET_CONFIGURATION_get_value_string (env->cfg, | ||
2931 | "transport-tcp", | ||
2932 | "BINDTO", | ||
2933 | &plugin->bind_address)) | ||
2934 | { | ||
2935 | GNUNET_log_from (GNUNET_ERROR_TYPE_INFO, | ||
2936 | "tcp", | ||
2937 | _("Binding TCP plugin to specific address: `%s'\n"), | ||
2938 | plugin->bind_address); | ||
2939 | } | ||
2940 | GNUNET_OS_network_interfaces_list (&process_interfaces, plugin); | 2957 | GNUNET_OS_network_interfaces_list (&process_interfaces, plugin); |
2941 | 2958 | ||
2942 | if ( (plugin->behind_nat == GNUNET_YES) && | 2959 | if ( (plugin->behind_nat == GNUNET_YES) && |