diff options
Diffstat (limited to 'src/setup/gnunet-setup-transport.c')
-rw-r--r-- | src/setup/gnunet-setup-transport.c | 231 |
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 | */ |
77 | static void | 78 | static void |
78 | result_callback (void *cls, | 79 | result_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 | */ |
101 | static void | 101 | static void |
102 | fail_timeout (void *cls, | 102 | fail_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 | */ |
119 | static void | 118 | static void |
120 | reversal_test (void *cls, | 119 | reversal_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 | |||
146 | test_connection_reversal () | 138 | test_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 | */ |
168 | static int | 160 | static int |
169 | nipo (void *cls, | 161 | nipo (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 | */ |
210 | static void | 197 | static void |
211 | set_external_ipv4 (void *cls, | 198 | set_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 */ |