diff options
author | Matthias Wachs <wachs@net.in.tum.de> | 2011-09-26 09:14:11 +0000 |
---|---|---|
committer | Matthias Wachs <wachs@net.in.tum.de> | 2011-09-26 09:14:11 +0000 |
commit | aa390e34b0b9e793e1c9f82a606ad0c10fcc84ca (patch) | |
tree | 90c8392bbe4c86bab7cd059dc5aec06b6bb429d1 /src | |
parent | 858f4546a0044b3ea9abdfbe6dda2e95d7c04dc1 (diff) | |
download | gnunet-aa390e34b0b9e793e1c9f82a606ad0c10fcc84ca.tar.gz gnunet-aa390e34b0b9e793e1c9f82a606ad0c10fcc84ca.zip |
binding to specific address
Diffstat (limited to 'src')
-rw-r--r-- | src/transport/plugin_transport_http.h | 3 | ||||
-rw-r--r-- | src/transport/plugin_transport_http_new.c | 86 | ||||
-rw-r--r-- | src/transport/plugin_transport_http_server.c | 11 |
3 files changed, 75 insertions, 25 deletions
diff --git a/src/transport/plugin_transport_http.h b/src/transport/plugin_transport_http.h index d11bbd15c..5264df5f9 100644 --- a/src/transport/plugin_transport_http.h +++ b/src/transport/plugin_transport_http.h | |||
@@ -136,6 +136,9 @@ struct Plugin | |||
136 | struct MHD_Daemon *server_v6; | 136 | struct MHD_Daemon *server_v6; |
137 | GNUNET_SCHEDULER_TaskIdentifier server_v6_task; | 137 | GNUNET_SCHEDULER_TaskIdentifier server_v6_task; |
138 | 138 | ||
139 | struct sockaddr_in * server_addr_v4; | ||
140 | struct sockaddr_in6 * server_addr_v6; | ||
141 | |||
139 | char *crypto_init; | 142 | char *crypto_init; |
140 | char *key; | 143 | char *key; |
141 | char *cert; | 144 | char *cert; |
diff --git a/src/transport/plugin_transport_http_new.c b/src/transport/plugin_transport_http_new.c index 3cdb40dad..5b7da9297 100644 --- a/src/transport/plugin_transport_http_new.c +++ b/src/transport/plugin_transport_http_new.c | |||
@@ -665,24 +665,6 @@ http_plugin_disconnect (void *cls, const struct GNUNET_PeerIdentity *target) | |||
665 | } | 665 | } |
666 | } | 666 | } |
667 | 667 | ||
668 | /** | ||
669 | * Function called by the NAT subsystem suggesting another peer wants | ||
670 | * to connect to us via connection reversal. Try to connect back to the | ||
671 | * given IP. | ||
672 | * | ||
673 | * @param cls closure | ||
674 | * @param addr address to try | ||
675 | * @param addrlen number of bytes in addr | ||
676 | */ | ||
677 | static void | ||
678 | nat_connection_reversal (void *cls, const struct sockaddr *addr, | ||
679 | socklen_t addrlen) | ||
680 | { | ||
681 | |||
682 | |||
683 | |||
684 | } | ||
685 | |||
686 | static void | 668 | static void |
687 | nat_add_address (void *cls, int add_remove, const struct sockaddr *addr, | 669 | nat_add_address (void *cls, int add_remove, const struct sockaddr *addr, |
688 | socklen_t addrlen) | 670 | socklen_t addrlen) |
@@ -879,7 +861,7 @@ start_report_addresses (struct Plugin *plugin) | |||
879 | GNUNET_NAT_register (plugin->env->cfg, GNUNET_YES, plugin->port, | 861 | GNUNET_NAT_register (plugin->env->cfg, GNUNET_YES, plugin->port, |
880 | (unsigned int) res, | 862 | (unsigned int) res, |
881 | (const struct sockaddr **) addrs, addrlens, | 863 | (const struct sockaddr **) addrs, addrlens, |
882 | &nat_port_map_callback, &nat_connection_reversal, | 864 | &nat_port_map_callback, NULL, |
883 | plugin); | 865 | plugin); |
884 | while (res > 0) | 866 | while (res > 0) |
885 | { | 867 | { |
@@ -894,7 +876,7 @@ start_report_addresses (struct Plugin *plugin) | |||
894 | { | 876 | { |
895 | plugin->nat = | 877 | plugin->nat = |
896 | GNUNET_NAT_register (plugin->env->cfg, GNUNET_YES, 0, 0, NULL, NULL, | 878 | GNUNET_NAT_register (plugin->env->cfg, GNUNET_YES, 0, 0, NULL, NULL, |
897 | NULL, &nat_connection_reversal, plugin); | 879 | NULL, NULL, plugin); |
898 | } | 880 | } |
899 | } | 881 | } |
900 | 882 | ||
@@ -962,6 +944,7 @@ configure_plugin (struct Plugin *plugin) | |||
962 | plugin->name); | 944 | plugin->name); |
963 | res = GNUNET_SYSERR; | 945 | res = GNUNET_SYSERR; |
964 | } | 946 | } |
947 | |||
965 | /* Reading port number from config file */ | 948 | /* Reading port number from config file */ |
966 | unsigned long long port; | 949 | unsigned long long port; |
967 | 950 | ||
@@ -973,9 +956,63 @@ configure_plugin (struct Plugin *plugin) | |||
973 | _("Port is required! Fix in configuration\n"), | 956 | _("Port is required! Fix in configuration\n"), |
974 | plugin->name); | 957 | plugin->name); |
975 | res = GNUNET_SYSERR; | 958 | res = GNUNET_SYSERR; |
959 | goto fail; | ||
976 | } | 960 | } |
977 | plugin->port = port; | 961 | plugin->port = port; |
978 | 962 | ||
963 | |||
964 | char * bind4_address = NULL; | ||
965 | if ((plugin->ipv4 == GNUNET_YES) && (GNUNET_YES == | ||
966 | GNUNET_CONFIGURATION_get_value_string (plugin->env->cfg, plugin->name, | ||
967 | "BINDTO", &bind4_address))) | ||
968 | { | ||
969 | GNUNET_log_from (GNUNET_ERROR_TYPE_DEBUG, plugin->name, | ||
970 | "Binding %s plugin to specific IPv4 address: `%s'\n", | ||
971 | plugin->protocol, bind4_address); | ||
972 | plugin->server_addr_v4 = GNUNET_malloc (sizeof (struct sockaddr_in)); | ||
973 | if (1 != inet_pton (AF_INET, bind4_address, &plugin->server_addr_v4->sin_addr)) | ||
974 | { | ||
975 | GNUNET_log_from (GNUNET_ERROR_TYPE_ERROR, plugin->name, | ||
976 | _("Specific IPv4 address `%s' for plugin %s in configuration file is invalid! Binding to all addresses!\n"), | ||
977 | bind4_address, plugin->protocol); | ||
978 | GNUNET_free (plugin->server_addr_v4); | ||
979 | plugin->server_addr_v4 = NULL; | ||
980 | } | ||
981 | else | ||
982 | { | ||
983 | plugin->server_addr_v4->sin_family = AF_INET; | ||
984 | plugin->server_addr_v4->sin_port = htons (plugin->port); | ||
985 | } | ||
986 | GNUNET_free (bind4_address); | ||
987 | } | ||
988 | |||
989 | |||
990 | char * bind6_address = NULL; | ||
991 | if ((plugin->ipv6 == GNUNET_YES) && (GNUNET_YES == | ||
992 | GNUNET_CONFIGURATION_get_value_string (plugin->env->cfg, plugin->name, | ||
993 | "BINDTO6", &bind6_address))) | ||
994 | { | ||
995 | GNUNET_log_from (GNUNET_ERROR_TYPE_DEBUG, plugin->name, | ||
996 | "Binding %s plugin to specific IPv6 address: `%s'\n", | ||
997 | plugin->protocol, bind6_address); | ||
998 | plugin->server_addr_v6 = GNUNET_malloc (sizeof (struct sockaddr_in6)); | ||
999 | if (1 != inet_pton (AF_INET6, bind6_address, &plugin->server_addr_v6->sin6_addr)) | ||
1000 | { | ||
1001 | GNUNET_log_from (GNUNET_ERROR_TYPE_ERROR, plugin->name, | ||
1002 | _("Specific IPv6 address `%s' for plugin %s in configuration file is invalid! Binding to all addresses!\n"), | ||
1003 | bind6_address, plugin->protocol); | ||
1004 | GNUNET_free (plugin->server_addr_v6); | ||
1005 | plugin->server_addr_v6 = NULL; | ||
1006 | } | ||
1007 | else | ||
1008 | { | ||
1009 | plugin->server_addr_v6->sin6_family = AF_INET6; | ||
1010 | plugin->server_addr_v6->sin6_port = htons (plugin->port); | ||
1011 | } | ||
1012 | GNUNET_free (bind6_address); | ||
1013 | } | ||
1014 | |||
1015 | |||
979 | /* Optional parameters */ | 1016 | /* Optional parameters */ |
980 | unsigned long long maxneigh; | 1017 | unsigned long long maxneigh; |
981 | if (GNUNET_OK != | 1018 | if (GNUNET_OK != |
@@ -984,6 +1021,7 @@ configure_plugin (struct Plugin *plugin) | |||
984 | maxneigh = 128; | 1021 | maxneigh = 128; |
985 | plugin->max_connections = maxneigh; | 1022 | plugin->max_connections = maxneigh; |
986 | 1023 | ||
1024 | fail: | ||
987 | return res; | 1025 | return res; |
988 | } | 1026 | } |
989 | 1027 | ||
@@ -1020,6 +1058,8 @@ LIBGNUNET_PLUGIN_TRANSPORT_INIT (void *cls) | |||
1020 | res = configure_plugin (plugin); | 1058 | res = configure_plugin (plugin); |
1021 | if (res == GNUNET_SYSERR) | 1059 | if (res == GNUNET_SYSERR) |
1022 | { | 1060 | { |
1061 | GNUNET_free_non_null (plugin->server_addr_v4); | ||
1062 | GNUNET_free_non_null (plugin->server_addr_v6); | ||
1023 | GNUNET_free (plugin); | 1063 | GNUNET_free (plugin); |
1024 | GNUNET_free (api); | 1064 | GNUNET_free (api); |
1025 | return NULL; | 1065 | return NULL; |
@@ -1029,6 +1069,8 @@ LIBGNUNET_PLUGIN_TRANSPORT_INIT (void *cls) | |||
1029 | res = client_start (plugin); | 1069 | res = client_start (plugin); |
1030 | if (res == GNUNET_SYSERR) | 1070 | if (res == GNUNET_SYSERR) |
1031 | { | 1071 | { |
1072 | GNUNET_free_non_null (plugin->server_addr_v4); | ||
1073 | GNUNET_free_non_null (plugin->server_addr_v6); | ||
1032 | GNUNET_free (plugin); | 1074 | GNUNET_free (plugin); |
1033 | GNUNET_free (api); | 1075 | GNUNET_free (api); |
1034 | return NULL; | 1076 | return NULL; |
@@ -1041,6 +1083,8 @@ LIBGNUNET_PLUGIN_TRANSPORT_INIT (void *cls) | |||
1041 | server_stop (plugin); | 1083 | server_stop (plugin); |
1042 | client_stop (plugin); | 1084 | client_stop (plugin); |
1043 | 1085 | ||
1086 | GNUNET_free_non_null (plugin->server_addr_v4); | ||
1087 | GNUNET_free_non_null (plugin->server_addr_v6); | ||
1044 | GNUNET_free (plugin); | 1088 | GNUNET_free (plugin); |
1045 | GNUNET_free (api); | 1089 | GNUNET_free (api); |
1046 | return NULL; | 1090 | return NULL; |
@@ -1110,6 +1154,8 @@ LIBGNUNET_PLUGIN_TRANSPORT_DONE (void *cls) | |||
1110 | "Plugin `%s' unloaded\n", plugin->name); | 1154 | "Plugin `%s' unloaded\n", plugin->name); |
1111 | #endif | 1155 | #endif |
1112 | 1156 | ||
1157 | GNUNET_free_non_null (plugin->server_addr_v4); | ||
1158 | GNUNET_free_non_null (plugin->server_addr_v6); | ||
1113 | GNUNET_free (plugin); | 1159 | GNUNET_free (plugin); |
1114 | GNUNET_free (api); | 1160 | GNUNET_free (api); |
1115 | 1161 | ||
diff --git a/src/transport/plugin_transport_http_server.c b/src/transport/plugin_transport_http_server.c index 3754240f1..7776f1655 100644 --- a/src/transport/plugin_transport_http_server.c +++ b/src/transport/plugin_transport_http_server.c | |||
@@ -862,9 +862,9 @@ server_start (struct Plugin *plugin) | |||
862 | MHD_NO_FLAG, plugin->port, | 862 | MHD_NO_FLAG, plugin->port, |
863 | &server_accept_cb, plugin, | 863 | &server_accept_cb, plugin, |
864 | &server_access_cb, plugin, | 864 | &server_access_cb, plugin, |
865 | //MHD_OPTION_SOCK_ADDR, | 865 | MHD_OPTION_SOCK_ADDR, |
866 | //(struct sockaddr_in *) | 866 | (struct sockaddr_in *) |
867 | //plugin->bind4_address, | 867 | plugin->server_addr_v4, |
868 | MHD_OPTION_CONNECTION_LIMIT, | 868 | MHD_OPTION_CONNECTION_LIMIT, |
869 | (unsigned int) | 869 | (unsigned int) |
870 | plugin->max_connections, | 870 | plugin->max_connections, |
@@ -901,8 +901,9 @@ server_start (struct Plugin *plugin) | |||
901 | MHD_USE_IPv6, plugin->port, | 901 | MHD_USE_IPv6, plugin->port, |
902 | &server_accept_cb, plugin, | 902 | &server_accept_cb, plugin, |
903 | &server_access_cb, plugin, | 903 | &server_access_cb, plugin, |
904 | //MHD_OPTION_SOCK_ADDR, | 904 | MHD_OPTION_SOCK_ADDR, |
905 | //tmp, | 905 | (struct sockaddr_in6 *) |
906 | plugin->server_addr_v6, | ||
906 | MHD_OPTION_CONNECTION_LIMIT, | 907 | MHD_OPTION_CONNECTION_LIMIT, |
907 | (unsigned int) | 908 | (unsigned int) |
908 | plugin->max_connections, | 909 | plugin->max_connections, |