aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMatthias Wachs <wachs@net.in.tum.de>2011-09-26 09:14:11 +0000
committerMatthias Wachs <wachs@net.in.tum.de>2011-09-26 09:14:11 +0000
commitaa390e34b0b9e793e1c9f82a606ad0c10fcc84ca (patch)
tree90c8392bbe4c86bab7cd059dc5aec06b6bb429d1 /src
parent858f4546a0044b3ea9abdfbe6dda2e95d7c04dc1 (diff)
downloadgnunet-aa390e34b0b9e793e1c9f82a606ad0c10fcc84ca.tar.gz
gnunet-aa390e34b0b9e793e1c9f82a606ad0c10fcc84ca.zip
binding to specific address
Diffstat (limited to 'src')
-rw-r--r--src/transport/plugin_transport_http.h3
-rw-r--r--src/transport/plugin_transport_http_new.c86
-rw-r--r--src/transport/plugin_transport_http_server.c11
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 */
677static void
678nat_connection_reversal (void *cls, const struct sockaddr *addr,
679 socklen_t addrlen)
680{
681
682
683
684}
685
686static void 668static void
687nat_add_address (void *cls, int add_remove, const struct sockaddr *addr, 669nat_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
1024fail:
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,