aboutsummaryrefslogtreecommitdiff
path: root/src/setup/gnunet-setup-transport.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/setup/gnunet-setup-transport.c')
-rw-r--r--src/setup/gnunet-setup-transport.c231
1 files changed, 101 insertions, 130 deletions
diff --git a/src/setup/gnunet-setup-transport.c b/src/setup/gnunet-setup-transport.c
index 6b4d243c..3fae215a 100644
--- a/src/setup/gnunet-setup-transport.c
+++ b/src/setup/gnunet-setup-transport.c
@@ -56,14 +56,15 @@ update_icmp_server_enable_button (int on)
56{ 56{
57 GtkToggleButton *button; 57 GtkToggleButton *button;
58 58
59 button = GTK_TOGGLE_BUTTON (GNUNET_SETUP_get_object ("GNUNET_setup_transport_icmp_server_enable_checkbutton")); 59 button =
60 GTK_TOGGLE_BUTTON (GNUNET_SETUP_get_object
61 ("GNUNET_setup_transport_icmp_server_enable_checkbutton"));
60 if (button == NULL) 62 if (button == NULL)
61 { 63 {
62 GNUNET_break (0); 64 GNUNET_break (0);
63 return; 65 return;
64 } 66 }
65 gtk_toggle_button_set_active (button, 67 gtk_toggle_button_set_active (button, on ? TRUE : FALSE);
66 on ? TRUE : FALSE);
67} 68}
68 69
69 70
@@ -75,18 +76,17 @@ update_icmp_server_enable_button (int on)
75 * @param success currently always GNUNET_OK 76 * @param success currently always GNUNET_OK
76 */ 77 */
77static void 78static void
78result_callback (void *cls, 79result_callback (void *cls, int success)
79 int success)
80{ 80{
81 GNUNET_SCHEDULER_cancel (tsk); 81 GNUNET_SCHEDULER_cancel (tsk);
82 tsk = GNUNET_SCHEDULER_NO_TASK; 82 tsk = GNUNET_SCHEDULER_NO_TASK;
83 GNUNET_NAT_test_stop (tst); 83 GNUNET_NAT_test_stop (tst);
84 tst = NULL; 84 tst = NULL;
85 if (NULL != resolver) 85 if (NULL != resolver)
86 { 86 {
87 GNUNET_break (0 == GNUNET_OS_process_kill (resolver, SIGTERM)); 87 GNUNET_break (0 == GNUNET_OS_process_kill (resolver, SIGTERM));
88 GNUNET_OS_process_close (resolver); 88 GNUNET_OS_process_close (resolver);
89 } 89 }
90 update_icmp_server_enable_button (success); 90 update_icmp_server_enable_button (success);
91} 91}
92 92
@@ -99,8 +99,7 @@ result_callback (void *cls,
99 * @param tc scheduler callback 99 * @param tc scheduler callback
100 */ 100 */
101static void 101static void
102fail_timeout (void *cls, 102fail_timeout (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
103 const struct GNUNET_SCHEDULER_TaskContext *tc)
104{ 103{
105 GNUNET_assert (NULL != tst); 104 GNUNET_assert (NULL != tst);
106 tsk = GNUNET_SCHEDULER_NO_TASK; 105 tsk = GNUNET_SCHEDULER_NO_TASK;
@@ -116,27 +115,20 @@ fail_timeout (void *cls,
116 * @param cls the 'int*' for the result 115 * @param cls the 'int*' for the result
117 * @param tc scheduler context 116 * @param tc scheduler context
118 */ 117 */
119static void 118static void
120reversal_test (void *cls, 119reversal_test (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
121 const struct GNUNET_SCHEDULER_TaskContext *tc)
122{ 120{
123 int *ok = cls; 121 int *ok = cls;
124 122
125 GNUNET_assert (NULL != cfg); 123 GNUNET_assert (NULL != cfg);
126 GNUNET_RESOLVER_connect (cfg); 124 GNUNET_RESOLVER_connect (cfg);
127 tst = GNUNET_NAT_test_start (cfg, 125 tst = GNUNET_NAT_test_start (cfg, GNUNET_YES, 0, 0, &result_callback, ok);
128 GNUNET_YES,
129 0, 0,
130 &result_callback,
131 ok);
132 if (NULL == tst) 126 if (NULL == tst)
133 { 127 {
134 *ok = GNUNET_SYSERR; 128 *ok = GNUNET_SYSERR;
135 return; 129 return;
136 } 130 }
137 tsk = GNUNET_SCHEDULER_add_delayed (TIMEOUT, 131 tsk = GNUNET_SCHEDULER_add_delayed (TIMEOUT, &fail_timeout, ok);
138 &fail_timeout,
139 ok);
140} 132}
141 133
142/** 134/**
@@ -146,10 +138,10 @@ static void
146test_connection_reversal () 138test_connection_reversal ()
147{ 139{
148 if (NULL != resolver) 140 if (NULL != resolver)
149 return; /* test already active!? */ 141 return; /* test already active!? */
150 resolver = GNUNET_OS_start_process (NULL, NULL, 142 resolver =
151 "gnunet-service-resolver", 143 GNUNET_OS_start_process (NULL, NULL, "gnunet-service-resolver",
152 "gnunet-service-resolver", NULL); 144 "gnunet-service-resolver", NULL);
153 GNUNET_SCHEDULER_add_now (&reversal_test, NULL); 145 GNUNET_SCHEDULER_add_now (&reversal_test, NULL);
154} 146}
155 147
@@ -166,36 +158,31 @@ test_connection_reversal ()
166 * @return GNUNET_OK to continue iteration, GNUNET_SYSERR to abort 158 * @return GNUNET_OK to continue iteration, GNUNET_SYSERR to abort
167 */ 159 */
168static int 160static int
169nipo (void *cls, 161nipo (void *cls, const char *name, int isDefault, const struct sockaddr *addr,
170 const char *name, 162 socklen_t addrlen)
171 int isDefault,
172 const struct sockaddr *
173 addr, socklen_t addrlen)
174{ 163{
175 const struct sockaddr_in *in; 164 const struct sockaddr_in *in;
176 char buf[INET_ADDRSTRLEN]; 165 char buf[INET_ADDRSTRLEN];
177 GtkEntry *entry; 166 GtkEntry *entry;
178 167
179 if (! isDefault) 168 if (!isDefault)
180 return GNUNET_OK; 169 return GNUNET_OK;
181 if (addrlen != sizeof (struct sockaddr_in)) 170 if (addrlen != sizeof (struct sockaddr_in))
182 return GNUNET_OK; 171 return GNUNET_OK;
183 in = (const struct sockaddr_in*) addr; 172 in = (const struct sockaddr_in *) addr;
184 173
185 /* set internal IP address */ 174 /* set internal IP address */
186 inet_ntop (AF_INET, &in->sin_addr, buf, sizeof(buf)); 175 inet_ntop (AF_INET, &in->sin_addr, buf, sizeof (buf));
187 GNUNET_CONFIGURATION_set_value_string (cfg, 176 GNUNET_CONFIGURATION_set_value_string (cfg, "nat", "INTERNAL_ADDRESS", buf);
188 "nat", 177 entry =
189 "INTERNAL_ADDRESS", 178 GTK_ENTRY (GNUNET_SETUP_get_object
190 buf); 179 ("GNUNET_setup_transport_internal_ip_entry"));
191 entry = GTK_ENTRY (GNUNET_SETUP_get_object ("GNUNET_setup_transport_internal_ip_entry"));
192 if (entry == NULL) 180 if (entry == NULL)
193 { 181 {
194 GNUNET_break (0); 182 GNUNET_break (0);
195 return GNUNET_SYSERR; 183 return GNUNET_SYSERR;
196 } 184 }
197 gtk_entry_set_text (entry, 185 gtk_entry_set_text (entry, buf);
198 buf);
199 /* no need to continue iteration */ 186 /* no need to continue iteration */
200 return GNUNET_SYSERR; 187 return GNUNET_SYSERR;
201} 188}
@@ -208,8 +195,7 @@ nipo (void *cls,
208 * @param addr the address, NULL on errors 195 * @param addr the address, NULL on errors
209 */ 196 */
210static void 197static void
211set_external_ipv4 (void *cls, 198set_external_ipv4 (void *cls, const struct in_addr *addr)
212 const struct in_addr *addr)
213{ 199{
214 struct in_addr ia; 200 struct in_addr ia;
215 char buf[INET_ADDRSTRLEN]; 201 char buf[INET_ADDRSTRLEN];
@@ -218,46 +204,40 @@ set_external_ipv4 (void *cls,
218 GtkToggleButton *button; 204 GtkToggleButton *button;
219 205
220 if (NULL != addr) 206 if (NULL != addr)
221 { 207 {
222 /* enable 'behind nat' */ 208 /* enable 'behind nat' */
223 if (NULL != cfg) 209 if (NULL != cfg)
224 GNUNET_CONFIGURATION_set_value_string (cfg, 210 GNUNET_CONFIGURATION_set_value_string (cfg, "nat", "BEHIND_NAT", "YES");
225 "nat", 211 o = GNUNET_SETUP_get_object ("GNUNET_setup_transport_nat_checkbutton");
226 "BEHIND_NAT", 212 if (NULL != o)
227 "YES"); 213 {
228 o = GNUNET_SETUP_get_object ("GNUNET_setup_transport_nat_checkbutton"); 214 button = GTK_TOGGLE_BUTTON (o);
229 if (NULL != o) 215 if (button == NULL)
230 { 216 {
231 button = GTK_TOGGLE_BUTTON (o); 217 GNUNET_break (0);
232 if (button == NULL) 218 return;
233 { 219 }
234 GNUNET_break (0); 220 gtk_toggle_button_set_active (button, TRUE);
235 return;
236 }
237 gtk_toggle_button_set_active (button,
238 TRUE);
239 }
240
241 /* set external IP address */
242 inet_ntop (AF_INET, &ia, buf, sizeof(buf));
243 if (NULL != cfg)
244 GNUNET_CONFIGURATION_set_value_string (cfg,
245 "nat",
246 "EXTERNAL_ADDRESS",
247 buf);
248 o = GNUNET_SETUP_get_object ("GNUNET_setup_transport_external_ip_address_entry");
249 if (NULL != o)
250 {
251 entry = GTK_ENTRY (o);
252 if (entry == NULL)
253 {
254 GNUNET_break (0);
255 return;
256 }
257 gtk_entry_set_text (entry,
258 buf);
259 }
260 } 221 }
222
223 /* set external IP address */
224 inet_ntop (AF_INET, &ia, buf, sizeof (buf));
225 if (NULL != cfg)
226 GNUNET_CONFIGURATION_set_value_string (cfg, "nat", "EXTERNAL_ADDRESS",
227 buf);
228 o = GNUNET_SETUP_get_object
229 ("GNUNET_setup_transport_external_ip_address_entry");
230 if (NULL != o)
231 {
232 entry = GTK_ENTRY (o);
233 if (entry == NULL)
234 {
235 GNUNET_break (0);
236 return;
237 }
238 gtk_entry_set_text (entry, buf);
239 }
240 }
261} 241}
262 242
263 243
@@ -273,9 +253,7 @@ GNUNET_setup_transport_autoconfig_button_clicked_cb ()
273 char *tmp; 253 char *tmp;
274 254
275 /* try to detect external IP */ 255 /* try to detect external IP */
276 (void) GNUNET_NAT_mini_get_external_ipv4 (TIMEOUT, 256 (void) GNUNET_NAT_mini_get_external_ipv4 (TIMEOUT, &set_external_ipv4, NULL);
277 &set_external_ipv4,
278 NULL);
279 /* Try to detect internal IP */ 257 /* Try to detect internal IP */
280 GNUNET_OS_network_interfaces_list (&nipo, NULL); 258 GNUNET_OS_network_interfaces_list (&nipo, NULL);
281 259
@@ -283,45 +261,38 @@ GNUNET_setup_transport_autoconfig_button_clicked_cb ()
283 261
284 /* test gnunet-helper-nat-server */ 262 /* test gnunet-helper-nat-server */
285 tmp = NULL; 263 tmp = NULL;
286 hns = ( (GNUNET_OK == 264 hns =
287 GNUNET_CONFIGURATION_get_value_string (cfg, 265 ((GNUNET_OK ==
288 "nat", 266 GNUNET_CONFIGURATION_get_value_string (cfg, "nat", "EXTERNAL_ADDRESS",
289 "EXTERNAL_ADDRESS", 267 &tmp)) && (0 < strlen (tmp)) &&
290 &tmp)) && 268 (GNUNET_YES ==
291 (0 < strlen (tmp)) && 269 GNUNET_CONFIGURATION_get_value_yesno (cfg, "nat", "BEHIND_NAT")) &&
292 (GNUNET_YES == 270 (GNUNET_YES ==
293 GNUNET_CONFIGURATION_get_value_yesno (cfg, 271 GNUNET_OS_check_helper_binary ("gnunet-helper-nat-server")));
294 "nat",
295 "BEHIND_NAT")) &&
296 (GNUNET_YES ==
297 GNUNET_OS_check_helper_binary ("gnunet-helper-nat-server")) );
298 GNUNET_free_non_null (tmp); 272 GNUNET_free_non_null (tmp);
299 if (hns) 273 if (hns)
300 test_connection_reversal (); 274 test_connection_reversal ();
301 275
302 /* test gnunet-helper-nat-client */ 276 /* test gnunet-helper-nat-client */
303 tmp = NULL; 277 tmp = NULL;
304 hnc = ( (GNUNET_OK == 278 hnc =
305 GNUNET_CONFIGURATION_get_value_string (cfg, 279 ((GNUNET_OK ==
306 "nat", 280 GNUNET_CONFIGURATION_get_value_string (cfg, "nat", "INTERNAL_ADDRESS",
307 "INTERNAL_ADDRESS", 281 &tmp)) && (0 < strlen (tmp)) &&
308 &tmp)) && 282 (GNUNET_YES !=
309 (0 < strlen (tmp)) && 283 GNUNET_CONFIGURATION_get_value_yesno (cfg, "nat", "BEHIND_NAT")) &&
310 (GNUNET_YES != 284 (GNUNET_YES ==
311 GNUNET_CONFIGURATION_get_value_yesno (cfg, 285 GNUNET_OS_check_helper_binary ("gnunet-helper-nat-client")));
312 "nat",
313 "BEHIND_NAT")) &&
314 (GNUNET_YES ==
315 GNUNET_OS_check_helper_binary ("gnunet-helper-nat-client")) );
316 GNUNET_free_non_null (tmp); 286 GNUNET_free_non_null (tmp);
317 button = GTK_TOGGLE_BUTTON (GNUNET_SETUP_get_object ("GNUNET_setup_transport_icmp_client_enable_checkbutton")); 287 button =
288 GTK_TOGGLE_BUTTON (GNUNET_SETUP_get_object
289 ("GNUNET_setup_transport_icmp_client_enable_checkbutton"));
318 if (button == NULL) 290 if (button == NULL)
319 { 291 {
320 GNUNET_break (0); 292 GNUNET_break (0);
321 return; 293 return;
322 } 294 }
323 gtk_toggle_button_set_active (button, 295 gtk_toggle_button_set_active (button, hnc ? TRUE : FALSE);
324 hnc ? TRUE : FALSE);
325} 296}
326 297
327/* end of gnunet-setup-transport.c */ 298/* end of gnunet-setup-transport.c */