diff options
author | Christian Grothoff <christian@grothoff.org> | 2010-06-05 16:16:46 +0000 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2010-06-05 16:16:46 +0000 |
commit | 69a23725d6937db68fc8ca2fd1e8490220edc7de (patch) | |
tree | b4a4060dfb25ccf18254e0b726120c9b6bef9ee5 /src | |
parent | cf96e25a7a3c3864bb936b1b82fd086ca8d16a5e (diff) | |
download | gnunet-69a23725d6937db68fc8ca2fd1e8490220edc7de.tar.gz gnunet-69a23725d6937db68fc8ca2fd1e8490220edc7de.zip |
UNIX domain socket support
Diffstat (limited to 'src')
25 files changed, 441 insertions, 131 deletions
diff --git a/src/arm/gnunet-service-arm_interceptor.c b/src/arm/gnunet-service-arm_interceptor.c index 10847c2ba..afefe4e48 100644 --- a/src/arm/gnunet-service-arm_interceptor.c +++ b/src/arm/gnunet-service-arm_interceptor.c | |||
@@ -936,15 +936,21 @@ createListeningSocket (struct sockaddr *sa, | |||
936 | case AF_INET6: | 936 | case AF_INET6: |
937 | sock = GNUNET_NETWORK_socket_create (PF_INET6, SOCK_STREAM, 0); | 937 | sock = GNUNET_NETWORK_socket_create (PF_INET6, SOCK_STREAM, 0); |
938 | break; | 938 | break; |
939 | case AF_UNIX: | ||
940 | sock = GNUNET_NETWORK_socket_create (PF_UNIX, SOCK_STREAM, 0); | ||
941 | break; | ||
939 | default: | 942 | default: |
943 | GNUNET_break (0); | ||
940 | sock = NULL; | 944 | sock = NULL; |
945 | errno = EAFNOSUPPORT; | ||
941 | break; | 946 | break; |
942 | } | 947 | } |
943 | if (NULL == sock) | 948 | if (NULL == sock) |
944 | { | 949 | { |
945 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, | 950 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, |
946 | _("Unable to create socket for service `%s'"), | 951 | _("Unable to create socket for service `%s': %s\n"), |
947 | serviceName); | 952 | serviceName, |
953 | STRERROR (errno)); | ||
948 | GNUNET_free (sa); | 954 | GNUNET_free (sa); |
949 | return; | 955 | return; |
950 | } | 956 | } |
diff --git a/src/core/test_core_api_peer1.conf b/src/core/test_core_api_peer1.conf index 21bb7481b..a33893a39 100644 --- a/src/core/test_core_api_peer1.conf +++ b/src/core/test_core_api_peer1.conf | |||
@@ -4,10 +4,12 @@ DEFAULTCONFIG = test_core_api_peer1.conf | |||
4 | 4 | ||
5 | [resolver] | 5 | [resolver] |
6 | PORT = 12464 | 6 | PORT = 12464 |
7 | UNIXPATH = /tmp/gnunet-p1-service-resolver.sock | ||
7 | #PREFIX = xterm -T resolver1 -e valgrind --tool=memcheck | 8 | #PREFIX = xterm -T resolver1 -e valgrind --tool=memcheck |
8 | 9 | ||
9 | [transport] | 10 | [transport] |
10 | PORT = 12465 | 11 | PORT = 12465 |
12 | UNIXPATH = /tmp/gnunet-p1-service-transport.sock | ||
11 | PLUGINS = tcp | 13 | PLUGINS = tcp |
12 | #PREFIX = xterm -T transport1 -e | 14 | #PREFIX = xterm -T transport1 -e |
13 | #PREFIX= xterm -e xterm -T transport1 -e gdb --args | 15 | #PREFIX= xterm -e xterm -T transport1 -e gdb --args |
@@ -17,6 +19,7 @@ PLUGINS = tcp | |||
17 | 19 | ||
18 | [arm] | 20 | [arm] |
19 | PORT = 12466 | 21 | PORT = 12466 |
22 | UNIXPATH = /tmp/gnunet-p1-service-arm.sock | ||
20 | DEFAULTSERVICES = | 23 | DEFAULTSERVICES = |
21 | #GLOBAL_PREFIX = xterm -e valgrind --tool=memcheck | 24 | #GLOBAL_PREFIX = xterm -e valgrind --tool=memcheck |
22 | 25 | ||
@@ -31,12 +34,14 @@ BINDTO = 127.0.0.1 | |||
31 | 34 | ||
32 | [peerinfo] | 35 | [peerinfo] |
33 | PORT = 12469 | 36 | PORT = 12469 |
37 | UNIXPATH = /tmp/gnunet-p1-service-peerinfo.sock | ||
34 | #PREFIX = xterm -T peerinfo1 -e valgrind --tool=memcheck | 38 | #PREFIX = xterm -T peerinfo1 -e valgrind --tool=memcheck |
35 | #PREFIX = xterm -T peerinfo1 -e | 39 | #PREFIX = xterm -T peerinfo1 -e |
36 | #DEBUG = YES | 40 | #DEBUG = YES |
37 | 41 | ||
38 | [core] | 42 | [core] |
39 | PORT = 12470 | 43 | PORT = 12470 |
44 | UNIXPATH = /tmp/gnunet-p1-service-core.sock | ||
40 | #PREFIX = valgrind --tool=memcheck | 45 | #PREFIX = valgrind --tool=memcheck |
41 | #OPTIONS = -l log-core-1 | 46 | #OPTIONS = -l log-core-1 |
42 | #PREFIX = xterm -e xterm -T core1 -e gdb --args | 47 | #PREFIX = xterm -e xterm -T core1 -e gdb --args |
diff --git a/src/core/test_core_api_peer2.conf b/src/core/test_core_api_peer2.conf index 71a167e73..7389d68f6 100644 --- a/src/core/test_core_api_peer2.conf +++ b/src/core/test_core_api_peer2.conf | |||
@@ -4,10 +4,12 @@ DEFAULTCONFIG = test_core_api_peer2.conf | |||
4 | 4 | ||
5 | [resolver] | 5 | [resolver] |
6 | PORT = 22464 | 6 | PORT = 22464 |
7 | UNIXPATH = /tmp/gnunet-p2-service-resolver.sock | ||
7 | #PREFIX = xterm -T resolver2 -e valgrind --tool=memcheck | 8 | #PREFIX = xterm -T resolver2 -e valgrind --tool=memcheck |
8 | 9 | ||
9 | [transport] | 10 | [transport] |
10 | PORT = 22465 | 11 | PORT = 22465 |
12 | UNIXPATH = /tmp/gnunet-p2-service-transport.sock | ||
11 | PLUGINS = tcp | 13 | PLUGINS = tcp |
12 | #PREFIX = xterm -T transport2 -e gdb --args | 14 | #PREFIX = xterm -T transport2 -e gdb --args |
13 | #PREFIX = xterm -e xterm -T transport2 -e gdb --args | 15 | #PREFIX = xterm -e xterm -T transport2 -e gdb --args |
@@ -17,11 +19,13 @@ PLUGINS = tcp | |||
17 | 19 | ||
18 | [arm] | 20 | [arm] |
19 | PORT = 22466 | 21 | PORT = 22466 |
22 | UNIXPATH = /tmp/gnunet-p2-service-arm.sock | ||
20 | DEFAULTSERVICES = | 23 | DEFAULTSERVICES = |
21 | #GLOBAL_PREFIX = xterm -e valgrind --tool=memcheck | 24 | #GLOBAL_PREFIX = xterm -e valgrind --tool=memcheck |
22 | 25 | ||
23 | [statistics] | 26 | [statistics] |
24 | PORT = 22467 | 27 | PORT = 22467 |
28 | UNIXPATH = /tmp/gnunet-p2-service-statistics.sock | ||
25 | #PREFIX = xterm -T statistics2 -e valgrind --tool=memcheck | 29 | #PREFIX = xterm -T statistics2 -e valgrind --tool=memcheck |
26 | 30 | ||
27 | [transport-tcp] | 31 | [transport-tcp] |
@@ -31,12 +35,14 @@ BINDTO = 127.0.0.1 | |||
31 | 35 | ||
32 | [peerinfo] | 36 | [peerinfo] |
33 | PORT = 22469 | 37 | PORT = 22469 |
38 | UNIXPATH = /tmp/gnunet-p2-service-peerinfo.sock | ||
34 | #PREFIX = xterm -T peerinfo2 -e valgrind --tool=memcheck | 39 | #PREFIX = xterm -T peerinfo2 -e valgrind --tool=memcheck |
35 | #PREFIX = xterm -T peerinfo2 -e | 40 | #PREFIX = xterm -T peerinfo2 -e |
36 | #DEBUG = YES | 41 | #DEBUG = YES |
37 | 42 | ||
38 | [core] | 43 | [core] |
39 | PORT = 22470 | 44 | PORT = 22470 |
45 | UNIXPATH = /tmp/gnunet-p2-service-core.sock | ||
40 | #PREFIX = xterm -T core2 -e | 46 | #PREFIX = xterm -T core2 -e |
41 | #PREFIX = valgrind --tool=memcheck | 47 | #PREFIX = valgrind --tool=memcheck |
42 | #DEBUG = YES | 48 | #DEBUG = YES |
diff --git a/src/hostlist/test_gnunet_daemon_hostlist_peer1.conf b/src/hostlist/test_gnunet_daemon_hostlist_peer1.conf index 19874f022..be5db7582 100644 --- a/src/hostlist/test_gnunet_daemon_hostlist_peer1.conf +++ b/src/hostlist/test_gnunet_daemon_hostlist_peer1.conf | |||
@@ -4,20 +4,24 @@ DEFAULTCONFIG = test_gnunet_daemon_hostlist_peer1.conf | |||
4 | 4 | ||
5 | [resolver] | 5 | [resolver] |
6 | PORT = 12964 | 6 | PORT = 12964 |
7 | UNIXPATH = /tmp/gnunet-p1-service-resolver.sock | ||
7 | 8 | ||
8 | [transport] | 9 | [transport] |
9 | PORT = 12965 | 10 | PORT = 12965 |
11 | UNIXPATH = /tmp/gnunet-p1-service-transport.sock | ||
10 | PLUGINS = tcp | 12 | PLUGINS = tcp |
11 | #DEBUG = YES | 13 | #DEBUG = YES |
12 | DEBUG = NO | 14 | DEBUG = NO |
13 | 15 | ||
14 | [arm] | 16 | [arm] |
15 | PORT = 12966 | 17 | PORT = 12966 |
18 | UNIXPATH = /tmp/gnunet-p1-service-arm.sock | ||
16 | DEFAULTSERVICES = hostlist topology | 19 | DEFAULTSERVICES = hostlist topology |
17 | #GLOBAL_PREFIX = xterm -e gdb -x cmd --args | 20 | #GLOBAL_PREFIX = xterm -e gdb -x cmd --args |
18 | 21 | ||
19 | [statistics] | 22 | [statistics] |
20 | PORT = 12967 | 23 | PORT = 12967 |
24 | UNIXPATH = /tmp/gnunet-p1-service-statistics.sock | ||
21 | 25 | ||
22 | [transport-tcp] | 26 | [transport-tcp] |
23 | PORT = 12968 | 27 | PORT = 12968 |
@@ -25,9 +29,11 @@ DEBUG = NO | |||
25 | 29 | ||
26 | [peerinfo] | 30 | [peerinfo] |
27 | PORT = 12969 | 31 | PORT = 12969 |
32 | UNIXPATH = /tmp/gnunet-p1-service-peerinfo.sock | ||
28 | 33 | ||
29 | [core] | 34 | [core] |
30 | PORT = 12970 | 35 | PORT = 12970 |
36 | UNIXPATH = /tmp/gnunet-p1-service-core.sock | ||
31 | #DEBUG = YES | 37 | #DEBUG = YES |
32 | #PREFIX = valgrind --tool=memcheck\ | 38 | #PREFIX = valgrind --tool=memcheck\ |
33 | DEBUG = NO | 39 | DEBUG = NO |
diff --git a/src/hostlist/test_gnunet_daemon_hostlist_peer2.conf b/src/hostlist/test_gnunet_daemon_hostlist_peer2.conf index c256c2829..dd47a27e6 100644 --- a/src/hostlist/test_gnunet_daemon_hostlist_peer2.conf +++ b/src/hostlist/test_gnunet_daemon_hostlist_peer2.conf | |||
@@ -4,21 +4,25 @@ DEFAULTCONFIG = test_gnunet_daemon_hostlist_peer2.conf | |||
4 | 4 | ||
5 | [resolver] | 5 | [resolver] |
6 | PORT = 22964 | 6 | PORT = 22964 |
7 | UNIXPATH = /tmp/gnunet-p2-service-resolver.sock | ||
7 | DEBUG = NO | 8 | DEBUG = NO |
8 | 9 | ||
9 | [transport] | 10 | [transport] |
10 | PORT = 22965 | 11 | PORT = 22965 |
12 | UNIXPATH = /tmp/gnunet-p2-service-transport.sock | ||
11 | PLUGINS = tcp | 13 | PLUGINS = tcp |
12 | DEBUG = NO | 14 | DEBUG = NO |
13 | 15 | ||
14 | [arm] | 16 | [arm] |
15 | PORT = 22966 | 17 | PORT = 22966 |
18 | UNIXPATH = /tmp/gnunet-p2-service-arm.sock | ||
16 | DEFAULTSERVICES = hostlist topology | 19 | DEFAULTSERVICES = hostlist topology |
17 | #GLOBAL_PREFIX = xterm -e gdb -x cmd --args | 20 | #GLOBAL_PREFIX = xterm -e gdb -x cmd --args |
18 | DEBUG = NO | 21 | DEBUG = NO |
19 | 22 | ||
20 | [statistics] | 23 | [statistics] |
21 | PORT = 22967 | 24 | PORT = 22967 |
25 | UNIXPATH = /tmp/gnunet-p2-service-statistics.sock | ||
22 | 26 | ||
23 | [transport-tcp] | 27 | [transport-tcp] |
24 | PORT = 22968 | 28 | PORT = 22968 |
@@ -26,9 +30,11 @@ DEBUG = NO | |||
26 | 30 | ||
27 | [peerinfo] | 31 | [peerinfo] |
28 | PORT = 22969 | 32 | PORT = 22969 |
33 | UNIXPATH = /tmp/gnunet-p2-service-peerinfo.sock | ||
29 | 34 | ||
30 | [core] | 35 | [core] |
31 | PORT = 22970 | 36 | PORT = 22970 |
37 | UNIXPATH = /tmp/gnunet-p2-service-core.sock | ||
32 | DEBUG = NO | 38 | DEBUG = NO |
33 | #PREFIX = valgrind --tool=memcheck | 39 | #PREFIX = valgrind --tool=memcheck |
34 | 40 | ||
@@ -52,4 +58,4 @@ DEBUG = NO | |||
52 | AUTOSTART = NO | 58 | AUTOSTART = NO |
53 | 59 | ||
54 | [datastore] | 60 | [datastore] |
55 | AUTOSTART = NO \ No newline at end of file | 61 | AUTOSTART = NO |
diff --git a/src/include/gnunet_connection_lib.h b/src/include/gnunet_connection_lib.h index 9701eb149..1230c10c8 100644 --- a/src/include/gnunet_connection_lib.h +++ b/src/include/gnunet_connection_lib.h | |||
@@ -155,7 +155,28 @@ struct GNUNET_CONNECTION_Handle | |||
155 | const struct GNUNET_CONFIGURATION_Handle *cfg, | 155 | const struct GNUNET_CONFIGURATION_Handle *cfg, |
156 | const char *hostname, | 156 | const char *hostname, |
157 | uint16_t port, | 157 | uint16_t port, |
158 | size_t maxbuf); | 158 | size_t maxbuf); |
159 | |||
160 | |||
161 | /** | ||
162 | * Create a socket handle by connecting to a UNIX domain service. | ||
163 | * This function returns immediately, even if the connection has not | ||
164 | * yet been established. This function only creates UNIX connections. | ||
165 | * | ||
166 | * @param sched scheduler to use | ||
167 | * @param cfg configuration to use | ||
168 | * @param unixpath path to connect to | ||
169 | * @param maxbuf maximum write buffer size for the socket (use | ||
170 | * 0 for sockets that need no write buffers, such as listen sockets) | ||
171 | * @return the socket handle, NULL on systems without UNIX support | ||
172 | */ | ||
173 | struct GNUNET_CONNECTION_Handle * | ||
174 | GNUNET_CONNECTION_create_from_connect_to_unixpath (struct GNUNET_SCHEDULER_Handle *sched, | ||
175 | const struct | ||
176 | GNUNET_CONFIGURATION_Handle *cfg, | ||
177 | const char *unixpath, | ||
178 | size_t maxbuf); | ||
179 | |||
159 | 180 | ||
160 | 181 | ||
161 | 182 | ||
diff --git a/src/include/platform.h b/src/include/platform.h index 0d39eaf10..fb9c992ec 100644 --- a/src/include/platform.h +++ b/src/include/platform.h | |||
@@ -82,6 +82,7 @@ | |||
82 | #ifndef MINGW | 82 | #ifndef MINGW |
83 | #include <netdb.h> | 83 | #include <netdb.h> |
84 | #include <sys/socket.h> | 84 | #include <sys/socket.h> |
85 | #include <sys/un.h> | ||
85 | #include <netinet/in.h> | 86 | #include <netinet/in.h> |
86 | #include <netinet/ip.h> /* superset of previous */ | 87 | #include <netinet/ip.h> /* superset of previous */ |
87 | #include <arpa/inet.h> | 88 | #include <arpa/inet.h> |
diff --git a/src/testing/test_testing_connect_peer1.conf b/src/testing/test_testing_connect_peer1.conf index 76e5ee536..9b240c855 100644 --- a/src/testing/test_testing_connect_peer1.conf +++ b/src/testing/test_testing_connect_peer1.conf | |||
@@ -4,10 +4,12 @@ DEFAULTCONFIG = test_testing_connect_peer1.conf | |||
4 | 4 | ||
5 | [resolver] | 5 | [resolver] |
6 | PORT = 12564 | 6 | PORT = 12564 |
7 | UNIXPATH = /tmp/gnunet-p1-service-resolver.sock | ||
7 | HOSTNAME = localhost | 8 | HOSTNAME = localhost |
8 | 9 | ||
9 | [transport] | 10 | [transport] |
10 | PORT = 12565 | 11 | PORT = 12565 |
12 | UNIXPATH = /tmp/gnunet-p1-service-transport.sock | ||
11 | HOSTNAME = localhost | 13 | HOSTNAME = localhost |
12 | PLUGINS = tcp | 14 | PLUGINS = tcp |
13 | #PREFIX = xterm -e xterm -T transport -e gdb -x cmd --args | 15 | #PREFIX = xterm -e xterm -T transport -e gdb -x cmd --args |
@@ -15,12 +17,14 @@ PLUGINS = tcp | |||
15 | 17 | ||
16 | [arm] | 18 | [arm] |
17 | PORT = 12566 | 19 | PORT = 12566 |
20 | UNIXPATH = /tmp/gnunet-p1-service-arm.sock | ||
18 | HOSTNAME = localhost | 21 | HOSTNAME = localhost |
19 | DEFAULTSERVICES = | 22 | DEFAULTSERVICES = |
20 | #DEBUG = YES | 23 | #DEBUG = YES |
21 | 24 | ||
22 | [statistics] | 25 | [statistics] |
23 | PORT = 12567 | 26 | PORT = 12567 |
27 | UNIXPATH = /tmp/gnunet-p1-service-statistics.sock | ||
24 | HOSTNAME = localhost | 28 | HOSTNAME = localhost |
25 | 29 | ||
26 | [transport-tcp] | 30 | [transport-tcp] |
@@ -28,10 +32,12 @@ PORT = 12568 | |||
28 | 32 | ||
29 | [peerinfo] | 33 | [peerinfo] |
30 | PORT = 12569 | 34 | PORT = 12569 |
35 | UNIXPATH = /tmp/gnunet-p1-service-peerinfo.sock | ||
31 | HOSTNAME = localhost | 36 | HOSTNAME = localhost |
32 | 37 | ||
33 | [core] | 38 | [core] |
34 | PORT = 12570 | 39 | PORT = 12570 |
40 | UNIXPATH = /tmp/gnunet-p1-service-core.sock | ||
35 | HOSTNAME = localhost | 41 | HOSTNAME = localhost |
36 | #DEBUG = YES | 42 | #DEBUG = YES |
37 | 43 | ||
diff --git a/src/testing/test_testing_connect_peer2.conf b/src/testing/test_testing_connect_peer2.conf index 5e8ae7a18..5d4237343 100644 --- a/src/testing/test_testing_connect_peer2.conf +++ b/src/testing/test_testing_connect_peer2.conf | |||
@@ -4,10 +4,12 @@ DEFAULTCONFIG = test_testing_connect_peer2.conf | |||
4 | 4 | ||
5 | [resolver] | 5 | [resolver] |
6 | PORT = 22564 | 6 | PORT = 22564 |
7 | UNIXPATH = /tmp/gnunet-p2-service-resolver.sock | ||
7 | HOSTNAME = localhost | 8 | HOSTNAME = localhost |
8 | 9 | ||
9 | [transport] | 10 | [transport] |
10 | PORT = 22565 | 11 | PORT = 22565 |
12 | UNIXPATH = /tmp/gnunet-p2-service-transport.sock | ||
11 | HOSTNAME = localhost | 13 | HOSTNAME = localhost |
12 | PLUGINS = tcp | 14 | PLUGINS = tcp |
13 | #PREFIX = xterm -e xterm -T transport -e gdb -x cmd --args | 15 | #PREFIX = xterm -e xterm -T transport -e gdb -x cmd --args |
@@ -15,12 +17,14 @@ PLUGINS = tcp | |||
15 | 17 | ||
16 | [arm] | 18 | [arm] |
17 | PORT = 22566 | 19 | PORT = 22566 |
20 | UNIXPATH = /tmp/gnunet-p2-service-arm.sock | ||
18 | DEFAULTSERVICES = | 21 | DEFAULTSERVICES = |
19 | HOSTNAME = localhost | 22 | HOSTNAME = localhost |
20 | #DEBUG = YES | 23 | #DEBUG = YES |
21 | 24 | ||
22 | [statistics] | 25 | [statistics] |
23 | PORT = 22567 | 26 | PORT = 22567 |
27 | UNIXPATH = /tmp/gnunet-p2-service-statistics.sock | ||
24 | HOSTNAME = localhost | 28 | HOSTNAME = localhost |
25 | 29 | ||
26 | [transport-tcp] | 30 | [transport-tcp] |
@@ -28,10 +32,12 @@ PORT = 22568 | |||
28 | 32 | ||
29 | [peerinfo] | 33 | [peerinfo] |
30 | PORT = 22569 | 34 | PORT = 22569 |
35 | UNIXPATH = /tmp/gnunet-p2-service-peerinfo.sock | ||
31 | HOSTNAME = localhost | 36 | HOSTNAME = localhost |
32 | 37 | ||
33 | [core] | 38 | [core] |
34 | PORT = 22570 | 39 | PORT = 22570 |
40 | UNIXPATH = /tmp/gnunet-p2-service-core.sock | ||
35 | HOSTNAME = localhost | 41 | HOSTNAME = localhost |
36 | #DEBUG = YES | 42 | #DEBUG = YES |
37 | 43 | ||
diff --git a/src/testing/testing_group.c b/src/testing/testing_group.c index bf90ea4b0..2920594c5 100644 --- a/src/testing/testing_group.c +++ b/src/testing/testing_group.c | |||
@@ -313,8 +313,9 @@ uid_from_hash (const GNUNET_HashCode *hash, uint32_t *uid) | |||
313 | struct UpdateContext | 313 | struct UpdateContext |
314 | { | 314 | { |
315 | struct GNUNET_CONFIGURATION_Handle *ret; | 315 | struct GNUNET_CONFIGURATION_Handle *ret; |
316 | unsigned int nport; | ||
317 | const char *hostname; | 316 | const char *hostname; |
317 | unsigned int nport; | ||
318 | unsigned int upnum; | ||
318 | }; | 319 | }; |
319 | 320 | ||
320 | 321 | ||
@@ -351,11 +352,25 @@ update_config (void *cls, | |||
351 | struct UpdateContext *ctx = cls; | 352 | struct UpdateContext *ctx = cls; |
352 | unsigned int ival; | 353 | unsigned int ival; |
353 | char cval[12]; | 354 | char cval[12]; |
355 | char uval[128]; | ||
354 | 356 | ||
355 | if ((0 == strcmp (option, "PORT")) && (1 == sscanf (value, "%u", &ival))) | 357 | if ((0 == strcmp (option, "PORT")) && (1 == sscanf (value, "%u", &ival))) |
356 | { | 358 | { |
357 | GNUNET_snprintf (cval, sizeof (cval), "%u", ctx->nport++); | 359 | if (ival != 0) |
358 | value = cval; | 360 | { |
361 | GNUNET_snprintf (cval, sizeof (cval), "%u", ctx->nport++); | ||
362 | value = cval; | ||
363 | } | ||
364 | } | ||
365 | |||
366 | if (0 == strcmp (option, "UNIXPATH")) | ||
367 | { | ||
368 | GNUNET_snprintf (uval, | ||
369 | sizeof (uval), | ||
370 | "/tmp/test-service-%s-%u", | ||
371 | section, | ||
372 | ctx->upnum++); | ||
373 | value = uval; | ||
359 | } | 374 | } |
360 | 375 | ||
361 | if ((0 == strcmp (option, "HOSTNAME")) && (ctx->hostname != NULL)) | 376 | if ((0 == strcmp (option, "HOSTNAME")) && (ctx->hostname != NULL)) |
@@ -376,12 +391,16 @@ update_config (void *cls, | |||
376 | * @param cfg template configuration | 391 | * @param cfg template configuration |
377 | * @param port port numbers to use, update to reflect | 392 | * @param port port numbers to use, update to reflect |
378 | * port numbers that were used | 393 | * port numbers that were used |
394 | * @param upnum number to make unix domain socket names unique | ||
379 | * @param hostname hostname of the controlling host, to allow control connections from | 395 | * @param hostname hostname of the controlling host, to allow control connections from |
380 | * | 396 | * |
381 | * @return new configuration, NULL on error | 397 | * @return new configuration, NULL on error |
382 | */ | 398 | */ |
383 | static struct GNUNET_CONFIGURATION_Handle * | 399 | static struct GNUNET_CONFIGURATION_Handle * |
384 | make_config (const struct GNUNET_CONFIGURATION_Handle *cfg, uint16_t * port, const char *hostname) | 400 | make_config (const struct GNUNET_CONFIGURATION_Handle *cfg, |
401 | uint16_t * port, | ||
402 | uint32_t * upnum, | ||
403 | const char *hostname) | ||
385 | { | 404 | { |
386 | struct UpdateContext uc; | 405 | struct UpdateContext uc; |
387 | uint16_t orig; | 406 | uint16_t orig; |
@@ -390,6 +409,7 @@ make_config (const struct GNUNET_CONFIGURATION_Handle *cfg, uint16_t * port, con | |||
390 | 409 | ||
391 | orig = *port; | 410 | orig = *port; |
392 | uc.nport = *port; | 411 | uc.nport = *port; |
412 | uc.upnum = *upnum; | ||
393 | uc.ret = GNUNET_CONFIGURATION_create (); | 413 | uc.ret = GNUNET_CONFIGURATION_create (); |
394 | uc.hostname = hostname; | 414 | uc.hostname = hostname; |
395 | 415 | ||
@@ -420,6 +440,7 @@ make_config (const struct GNUNET_CONFIGURATION_Handle *cfg, uint16_t * port, con | |||
420 | } | 440 | } |
421 | 441 | ||
422 | *port = (uint16_t) uc.nport; | 442 | *port = (uint16_t) uc.nport; |
443 | *upnum = uc.upnum; | ||
423 | return uc.ret; | 444 | return uc.ret; |
424 | } | 445 | } |
425 | 446 | ||
@@ -2499,13 +2520,14 @@ GNUNET_TESTING_daemons_start (struct GNUNET_SCHEDULER_Handle *sched, | |||
2499 | unsigned int off; | 2520 | unsigned int off; |
2500 | unsigned int hostcnt; | 2521 | unsigned int hostcnt; |
2501 | uint16_t minport; | 2522 | uint16_t minport; |
2523 | uint32_t upnum; | ||
2502 | 2524 | ||
2503 | if (0 == total) | 2525 | if (0 == total) |
2504 | { | 2526 | { |
2505 | GNUNET_break (0); | 2527 | GNUNET_break (0); |
2506 | return NULL; | 2528 | return NULL; |
2507 | } | 2529 | } |
2508 | 2530 | upnum = 0; | |
2509 | pg = GNUNET_malloc (sizeof (struct GNUNET_TESTING_PeerGroup)); | 2531 | pg = GNUNET_malloc (sizeof (struct GNUNET_TESTING_PeerGroup)); |
2510 | pg->sched = sched; | 2532 | pg->sched = sched; |
2511 | pg->cfg = cfg; | 2533 | pg->cfg = cfg; |
@@ -2571,12 +2593,18 @@ GNUNET_TESTING_daemons_start (struct GNUNET_SCHEDULER_Handle *sched, | |||
2571 | if (hostcnt > 0) | 2593 | if (hostcnt > 0) |
2572 | { | 2594 | { |
2573 | hostname = pg->hosts[off % hostcnt].hostname; | 2595 | hostname = pg->hosts[off % hostcnt].hostname; |
2574 | pcfg = make_config (cfg, &pg->hosts[off % hostcnt].minport, hostname); | 2596 | pcfg = make_config (cfg, |
2597 | &pg->hosts[off % hostcnt].minport, | ||
2598 | &upnum, | ||
2599 | hostname); | ||
2575 | } | 2600 | } |
2576 | else | 2601 | else |
2577 | { | 2602 | { |
2578 | hostname = NULL; | 2603 | hostname = NULL; |
2579 | pcfg = make_config (cfg, &minport, hostname); | 2604 | pcfg = make_config (cfg, |
2605 | &minport, | ||
2606 | &upnum, | ||
2607 | hostname); | ||
2580 | } | 2608 | } |
2581 | 2609 | ||
2582 | if (NULL == pcfg) | 2610 | if (NULL == pcfg) |
diff --git a/src/transport/test_transport_api_http_peer1.conf b/src/transport/test_transport_api_http_peer1.conf index 539e9ab6c..793e12cc0 100644 --- a/src/transport/test_transport_api_http_peer1.conf +++ b/src/transport/test_transport_api_http_peer1.conf | |||
@@ -40,6 +40,7 @@ CONFIG = $DEFAULTCONFIG | |||
40 | HOME = $SERVICEHOME | 40 | HOME = $SERVICEHOME |
41 | HOSTNAME = localhost | 41 | HOSTNAME = localhost |
42 | PORT = 12365 | 42 | PORT = 12365 |
43 | UNIXPATH = /tmp/gnunet-p1-service-transport.sock | ||
43 | 44 | ||
44 | [peerinfo] | 45 | [peerinfo] |
45 | TRUST = $SERVICEHOME/data/credit/ | 46 | TRUST = $SERVICEHOME/data/credit/ |
@@ -51,6 +52,7 @@ CONFIG = $DEFAULTCONFIG | |||
51 | HOME = $SERVICEHOME | 52 | HOME = $SERVICEHOME |
52 | HOSTNAME = localhost | 53 | HOSTNAME = localhost |
53 | PORT = 12369 | 54 | PORT = 12369 |
55 | UNIXPATH = /tmp/gnunet-p1-service-peerinfo.sock | ||
54 | 56 | ||
55 | [resolver] | 57 | [resolver] |
56 | ACCEPT_FROM6 = ::1; | 58 | ACCEPT_FROM6 = ::1; |
@@ -60,6 +62,7 @@ CONFIG = $DEFAULTCONFIG | |||
60 | HOME = $SERVICEHOME | 62 | HOME = $SERVICEHOME |
61 | HOSTNAME = localhost | 63 | HOSTNAME = localhost |
62 | PORT = 12364 | 64 | PORT = 12364 |
65 | UNIXPATH = /tmp/gnunet-p1-service-resolver.sock | ||
63 | 66 | ||
64 | [statistics] | 67 | [statistics] |
65 | ACCEPT_FROM6 = ::1; | 68 | ACCEPT_FROM6 = ::1; |
@@ -69,6 +72,7 @@ CONFIG = $DEFAULTCONFIG | |||
69 | HOME = $SERVICEHOME | 72 | HOME = $SERVICEHOME |
70 | HOSTNAME = localhost | 73 | HOSTNAME = localhost |
71 | PORT = 12367 | 74 | PORT = 12367 |
75 | UNIXPATH = /tmp/gnunet-p1-service-statistics.sock | ||
72 | 76 | ||
73 | [arm] | 77 | [arm] |
74 | DEFAULTSERVICES = | 78 | DEFAULTSERVICES = |
@@ -79,6 +83,7 @@ CONFIG = $DEFAULTCONFIG | |||
79 | HOME = $SERVICEHOME | 83 | HOME = $SERVICEHOME |
80 | HOSTNAME = localhost | 84 | HOSTNAME = localhost |
81 | PORT = 12366 | 85 | PORT = 12366 |
86 | UNIXPATH = /tmp/gnunet-p1-service-arm.sock | ||
82 | 87 | ||
83 | [transport-http] | 88 | [transport-http] |
84 | PORT = 12389 | 89 | PORT = 12389 |
diff --git a/src/transport/test_transport_api_http_peer2.conf b/src/transport/test_transport_api_http_peer2.conf index 1cbe8cae0..00b90358f 100644 --- a/src/transport/test_transport_api_http_peer2.conf +++ b/src/transport/test_transport_api_http_peer2.conf | |||
@@ -43,6 +43,7 @@ CONFIG = $DEFAULTCONFIG | |||
43 | HOME = $SERVICEHOME | 43 | HOME = $SERVICEHOME |
44 | HOSTNAME = localhost | 44 | HOSTNAME = localhost |
45 | PORT = 22365 | 45 | PORT = 22365 |
46 | UNIXPATH = /tmp/gnunet-p2-service-transport.sock | ||
46 | #PREFIX = xterm -T transport1 -e gdb --command=cmd --args | 47 | #PREFIX = xterm -T transport1 -e gdb --command=cmd --args |
47 | #PREFIX = valgrind --leak-check=full | 48 | #PREFIX = valgrind --leak-check=full |
48 | 49 | ||
@@ -56,6 +57,7 @@ CONFIG = $DEFAULTCONFIG | |||
56 | HOME = $SERVICEHOME | 57 | HOME = $SERVICEHOME |
57 | HOSTNAME = localhost | 58 | HOSTNAME = localhost |
58 | PORT = 22369 | 59 | PORT = 22369 |
60 | UNIXPATH = /tmp/gnunet-p2-service-peerinfo.sock | ||
59 | 61 | ||
60 | [resolver] | 62 | [resolver] |
61 | ACCEPT_FROM6 = ::1; | 63 | ACCEPT_FROM6 = ::1; |
@@ -65,6 +67,7 @@ CONFIG = $DEFAULTCONFIG | |||
65 | HOME = $SERVICEHOME | 67 | HOME = $SERVICEHOME |
66 | HOSTNAME = localhost | 68 | HOSTNAME = localhost |
67 | PORT = 22364 | 69 | PORT = 22364 |
70 | UNIXPATH = /tmp/gnunet-p2-service-resolver.sock | ||
68 | 71 | ||
69 | [statistics] | 72 | [statistics] |
70 | ACCEPT_FROM6 = ::1; | 73 | ACCEPT_FROM6 = ::1; |
@@ -74,6 +77,8 @@ CONFIG = $DEFAULTCONFIG | |||
74 | HOME = $SERVICEHOME | 77 | HOME = $SERVICEHOME |
75 | HOSTNAME = localhost | 78 | HOSTNAME = localhost |
76 | PORT = 22367 | 79 | PORT = 22367 |
80 | UNIXPATH = /tmp/gnunet-p2-service-statistics.sock | ||
81 | |||
77 | 82 | ||
78 | [arm] | 83 | [arm] |
79 | DEFAULTSERVICES = | 84 | DEFAULTSERVICES = |
@@ -84,6 +89,8 @@ CONFIG = $DEFAULTCONFIG | |||
84 | HOME = $SERVICEHOME | 89 | HOME = $SERVICEHOME |
85 | HOSTNAME = localhost | 90 | HOSTNAME = localhost |
86 | PORT = 22366 | 91 | PORT = 22366 |
92 | UNIXPATH = /tmp/gnunet-p2-service-arm.sock | ||
93 | |||
87 | 94 | ||
88 | [transport-http] | 95 | [transport-http] |
89 | PORT = 22389 | 96 | PORT = 22389 |
diff --git a/src/transport/test_transport_api_tcp_peer1.conf b/src/transport/test_transport_api_tcp_peer1.conf index 97e2111c8..f5bdc2063 100644 --- a/src/transport/test_transport_api_tcp_peer1.conf +++ b/src/transport/test_transport_api_tcp_peer1.conf | |||
@@ -43,6 +43,7 @@ CONFIG = $DEFAULTCONFIG | |||
43 | HOME = $SERVICEHOME | 43 | HOME = $SERVICEHOME |
44 | HOSTNAME = localhost | 44 | HOSTNAME = localhost |
45 | PORT = 12365 | 45 | PORT = 12365 |
46 | UNIXPATH = /tmp/gnunet-p1-service-transport.sock | ||
46 | 47 | ||
47 | [peerinfo] | 48 | [peerinfo] |
48 | TRUST = $SERVICEHOME/data/credit/ | 49 | TRUST = $SERVICEHOME/data/credit/ |
@@ -54,6 +55,7 @@ CONFIG = $DEFAULTCONFIG | |||
54 | HOME = $SERVICEHOME | 55 | HOME = $SERVICEHOME |
55 | HOSTNAME = localhost | 56 | HOSTNAME = localhost |
56 | PORT = 12369 | 57 | PORT = 12369 |
58 | UNIXPATH = /tmp/gnunet-p1-service-peerinfo.sock | ||
57 | 59 | ||
58 | [resolver] | 60 | [resolver] |
59 | ACCEPT_FROM6 = ::1; | 61 | ACCEPT_FROM6 = ::1; |
@@ -62,7 +64,8 @@ BINARY = gnunet-service-resolver | |||
62 | CONFIG = $DEFAULTCONFIG | 64 | CONFIG = $DEFAULTCONFIG |
63 | HOME = $SERVICEHOME | 65 | HOME = $SERVICEHOME |
64 | HOSTNAME = localhost | 66 | HOSTNAME = localhost |
65 | PORT = 12364 | 67 | PORT = 1236 |
68 | UNIXPATH = /tmp/gnunet-p1-service-resolver.sock | ||
66 | 69 | ||
67 | [statistics] | 70 | [statistics] |
68 | ACCEPT_FROM6 = ::1; | 71 | ACCEPT_FROM6 = ::1; |
@@ -72,6 +75,7 @@ CONFIG = $DEFAULTCONFIG | |||
72 | HOME = $SERVICEHOME | 75 | HOME = $SERVICEHOME |
73 | HOSTNAME = localhost | 76 | HOSTNAME = localhost |
74 | PORT = 12367 | 77 | PORT = 12367 |
78 | UNIXPATH = /tmp/gnunet-p1-service-statistics.sock | ||
75 | 79 | ||
76 | [arm] | 80 | [arm] |
77 | DEFAULTSERVICES = transport statistics | 81 | DEFAULTSERVICES = transport statistics |
@@ -82,6 +86,7 @@ CONFIG = $DEFAULTCONFIG | |||
82 | HOME = $SERVICEHOME | 86 | HOME = $SERVICEHOME |
83 | HOSTNAME = localhost | 87 | HOSTNAME = localhost |
84 | PORT = 12366 | 88 | PORT = 12366 |
89 | UNIXPATH = /tmp/gnunet-p1-service-arm.sock | ||
85 | 90 | ||
86 | [transport-tcp] | 91 | [transport-tcp] |
87 | TIMEOUT = 300000 | 92 | TIMEOUT = 300000 |
diff --git a/src/transport/test_transport_api_tcp_peer2.conf b/src/transport/test_transport_api_tcp_peer2.conf index f6ab6c231..f2c22e336 100644 --- a/src/transport/test_transport_api_tcp_peer2.conf +++ b/src/transport/test_transport_api_tcp_peer2.conf | |||
@@ -42,6 +42,7 @@ CONFIG = $DEFAULTCONFIG | |||
42 | HOME = $SERVICEHOME | 42 | HOME = $SERVICEHOME |
43 | HOSTNAME = localhost | 43 | HOSTNAME = localhost |
44 | PORT = 22365 | 44 | PORT = 22365 |
45 | UNIXPATH = /tmp/gnunet-p2-service-transport.sock | ||
45 | #PREFIX = xterm -T transport1 -e gdb --command=cmd --args | 46 | #PREFIX = xterm -T transport1 -e gdb --command=cmd --args |
46 | #PREFIX = valgrind --leak-check=full | 47 | #PREFIX = valgrind --leak-check=full |
47 | 48 | ||
@@ -55,6 +56,7 @@ CONFIG = $DEFAULTCONFIG | |||
55 | HOME = $SERVICEHOME | 56 | HOME = $SERVICEHOME |
56 | HOSTNAME = localhost | 57 | HOSTNAME = localhost |
57 | PORT = 22369 | 58 | PORT = 22369 |
59 | UNIXPATH = /tmp/gnunet-p2-service-peerinfo.sock | ||
58 | 60 | ||
59 | [resolver] | 61 | [resolver] |
60 | ACCEPT_FROM6 = ::1; | 62 | ACCEPT_FROM6 = ::1; |
@@ -64,6 +66,7 @@ CONFIG = $DEFAULTCONFIG | |||
64 | HOME = $SERVICEHOME | 66 | HOME = $SERVICEHOME |
65 | HOSTNAME = localhost | 67 | HOSTNAME = localhost |
66 | PORT = 22364 | 68 | PORT = 22364 |
69 | UNIXPATH = /tmp/gnunet-p2-service-resolver.sock | ||
67 | 70 | ||
68 | [statistics] | 71 | [statistics] |
69 | ACCEPT_FROM6 = ::1; | 72 | ACCEPT_FROM6 = ::1; |
@@ -73,6 +76,7 @@ CONFIG = $DEFAULTCONFIG | |||
73 | HOME = $SERVICEHOME | 76 | HOME = $SERVICEHOME |
74 | HOSTNAME = localhost | 77 | HOSTNAME = localhost |
75 | PORT = 22367 | 78 | PORT = 22367 |
79 | UNIXPATH = /tmp/gnunet-p2-service-statistics.sock | ||
76 | 80 | ||
77 | [arm] | 81 | [arm] |
78 | DEFAULTSERVICES = transport statistics | 82 | DEFAULTSERVICES = transport statistics |
@@ -83,6 +87,7 @@ CONFIG = $DEFAULTCONFIG | |||
83 | HOME = $SERVICEHOME | 87 | HOME = $SERVICEHOME |
84 | HOSTNAME = localhost | 88 | HOSTNAME = localhost |
85 | PORT = 22366 | 89 | PORT = 22366 |
90 | UNIXPATH = /tmp/gnunet-p2-service-arm.sock | ||
86 | 91 | ||
87 | [transport-tcp] | 92 | [transport-tcp] |
88 | TIMEOUT = 300000 | 93 | TIMEOUT = 300000 |
diff --git a/src/transport/test_transport_api_udp_nat_peer1.conf b/src/transport/test_transport_api_udp_nat_peer1.conf index d2ab3ecee..0956c83eb 100644 --- a/src/transport/test_transport_api_udp_nat_peer1.conf +++ b/src/transport/test_transport_api_udp_nat_peer1.conf | |||
@@ -5,29 +5,13 @@ INTERNAL_ADDRESS = 127.0.0.1 | |||
5 | EXTERNAL_ADDRESS = 127.0.0.1 | 5 | EXTERNAL_ADDRESS = 127.0.0.1 |
6 | 6 | ||
7 | [fs] | 7 | [fs] |
8 | ACCEPT_FROM6 = ::1; | 8 | AUTOSTART = NO |
9 | ACCEPT_FROM = 127.0.0.1; | ||
10 | BINARY = gnunet-service-fs | ||
11 | CONFIG = $DEFAULTCONFIG | ||
12 | HOME = $SERVICEHOME | ||
13 | HOSTNAME = localhost | ||
14 | PORT = 2094 | ||
15 | INDEXDB = $SERVICEHOME/idxinfo.lst | ||
16 | 9 | ||
17 | [datastore-sqlite] | 10 | [datastore-sqlite] |
18 | FILENAME = $SERVICEHOME/datastore/sqlite.db | 11 | FILENAME = $SERVICEHOME/datastore/sqlite.db |
19 | 12 | ||
20 | [datastore] | 13 | [datastore] |
21 | DATABASE = sqlite | 14 | AUTOSTART = NO |
22 | BLOOMFILTER = $SERVICEHOME/fs/bloomfilter | ||
23 | QUOTA = 100000000 | ||
24 | ACCEPT_FROM6 = ::1; | ||
25 | ACCEPT_FROM = 127.0.0.1; | ||
26 | BINARY = gnunet-service-datastore | ||
27 | CONFIG = $DEFAULTCONFIG | ||
28 | HOME = $SERVICEHOME | ||
29 | HOSTNAME = localhost | ||
30 | PORT = 2093 | ||
31 | 15 | ||
32 | [hostlist] | 16 | [hostlist] |
33 | HTTP-PROXY = | 17 | HTTP-PROXY = |
@@ -49,15 +33,7 @@ FRIENDS-ONLY = NO | |||
49 | MINIMUM-FRIENDS = 0 | 33 | MINIMUM-FRIENDS = 0 |
50 | 34 | ||
51 | [core] | 35 | [core] |
52 | TOTAL_QUOTA_OUT = 3932160 | 36 | AUTOSTART = NO |
53 | TOTAL_QUOTA_IN = 3932160 | ||
54 | ACCEPT_FROM6 = ::1; | ||
55 | ACCEPT_FROM = 127.0.0.1; | ||
56 | BINARY = gnunet-service-core | ||
57 | CONFIG = $DEFAULTCONFIG | ||
58 | HOME = $SERVICEHOME | ||
59 | HOSTNAME = localhost | ||
60 | PORT = 2092 | ||
61 | 37 | ||
62 | [transport] | 38 | [transport] |
63 | PLUGINS = udp_nat | 39 | PLUGINS = udp_nat |
@@ -70,6 +46,7 @@ CONFIG = $DEFAULTCONFIG | |||
70 | HOME = $SERVICEHOME | 46 | HOME = $SERVICEHOME |
71 | HOSTNAME = localhost | 47 | HOSTNAME = localhost |
72 | PORT = 12365 | 48 | PORT = 12365 |
49 | UNIXPATH = /tmp/gnunet-p1-service-transport.sock | ||
73 | #PREFIX = valgrind --track-origins=yes --leak-check=full --log-file=valgrind_udp_peer1.log | 50 | #PREFIX = valgrind --track-origins=yes --leak-check=full --log-file=valgrind_udp_peer1.log |
74 | #PREFIX = xterm -e xterm -T transport -e gdb --args | 51 | #PREFIX = xterm -e xterm -T transport -e gdb --args |
75 | 52 | ||
@@ -83,6 +60,7 @@ CONFIG = $DEFAULTCONFIG | |||
83 | HOME = $SERVICEHOME | 60 | HOME = $SERVICEHOME |
84 | HOSTNAME = localhost | 61 | HOSTNAME = localhost |
85 | PORT = 12369 | 62 | PORT = 12369 |
63 | UNIXPATH = /tmp/gnunet-p1-service-peerinfo.sock | ||
86 | 64 | ||
87 | [resolver] | 65 | [resolver] |
88 | ACCEPT_FROM6 = ::1; | 66 | ACCEPT_FROM6 = ::1; |
@@ -92,6 +70,7 @@ CONFIG = $DEFAULTCONFIG | |||
92 | HOME = $SERVICEHOME | 70 | HOME = $SERVICEHOME |
93 | HOSTNAME = localhost | 71 | HOSTNAME = localhost |
94 | PORT = 12364 | 72 | PORT = 12364 |
73 | UNIXPATH = /tmp/gnunet-p1-service-resolver.sock | ||
95 | 74 | ||
96 | [statistics] | 75 | [statistics] |
97 | ACCEPT_FROM6 = ::1; | 76 | ACCEPT_FROM6 = ::1; |
@@ -101,6 +80,7 @@ CONFIG = $DEFAULTCONFIG | |||
101 | HOME = $SERVICEHOME | 80 | HOME = $SERVICEHOME |
102 | HOSTNAME = localhost | 81 | HOSTNAME = localhost |
103 | PORT = 12367 | 82 | PORT = 12367 |
83 | UNIXPATH = /tmp/gnunet-p1-service-statistics.sock | ||
104 | 84 | ||
105 | [arm] | 85 | [arm] |
106 | DEFAULTSERVICES = | 86 | DEFAULTSERVICES = |
@@ -111,6 +91,7 @@ CONFIG = $DEFAULTCONFIG | |||
111 | HOME = $SERVICEHOME | 91 | HOME = $SERVICEHOME |
112 | HOSTNAME = localhost | 92 | HOSTNAME = localhost |
113 | PORT = 12366 | 93 | PORT = 12366 |
94 | UNIXPATH = /tmp/gnunet-p1-service-arm.sock | ||
114 | 95 | ||
115 | [transport-tcp] | 96 | [transport-tcp] |
116 | TIMEOUT = 300000 | 97 | TIMEOUT = 300000 |
diff --git a/src/transport/test_transport_api_udp_nat_peer2.conf b/src/transport/test_transport_api_udp_nat_peer2.conf index 32d8cab23..3dc4d672b 100644 --- a/src/transport/test_transport_api_udp_nat_peer2.conf +++ b/src/transport/test_transport_api_udp_nat_peer2.conf | |||
@@ -5,29 +5,10 @@ EXTERNAL_ADDRESS = 127.0.0.1 | |||
5 | INTERNAL_ADDRESS = 127.0.0.1 | 5 | INTERNAL_ADDRESS = 127.0.0.1 |
6 | 6 | ||
7 | [fs] | 7 | [fs] |
8 | ACCEPT_FROM6 = ::1; | 8 | AUTOSTART = NO |
9 | ACCEPT_FROM = 127.0.0.1; | ||
10 | BINARY = gnunet-service-fs | ||
11 | CONFIG = $DEFAULTCONFIG | ||
12 | HOME = $SERVICEHOME | ||
13 | HOSTNAME = localhost | ||
14 | PORT = 2094 | ||
15 | INDEXDB = $SERVICEHOME/idxinfo.lst | ||
16 | |||
17 | [datastore-sqlite] | ||
18 | FILENAME = $SERVICEHOME/datastore/sqlite.db | ||
19 | 9 | ||
20 | [datastore] | 10 | [datastore] |
21 | DATABASE = sqlite | 11 | AUTOSTART = NO |
22 | BLOOMFILTER = $SERVICEHOME/fs/bloomfilter | ||
23 | QUOTA = 100000000 | ||
24 | ACCEPT_FROM6 = ::1; | ||
25 | ACCEPT_FROM = 127.0.0.1; | ||
26 | BINARY = gnunet-service-datastore | ||
27 | CONFIG = $DEFAULTCONFIG | ||
28 | HOME = $SERVICEHOME | ||
29 | HOSTNAME = localhost | ||
30 | PORT = 2093 | ||
31 | 12 | ||
32 | [hostlist] | 13 | [hostlist] |
33 | HTTP-PROXY = | 14 | HTTP-PROXY = |
@@ -49,15 +30,7 @@ FRIENDS-ONLY = NO | |||
49 | MINIMUM-FRIENDS = 0 | 30 | MINIMUM-FRIENDS = 0 |
50 | 31 | ||
51 | [core] | 32 | [core] |
52 | TOTAL_QUOTA_OUT = 3932160 | 33 | AUTOSTART = NO |
53 | TOTAL_QUOTA_IN = 3932160 | ||
54 | ACCEPT_FROM6 = ::1; | ||
55 | ACCEPT_FROM = 127.0.0.1; | ||
56 | BINARY = gnunet-service-core | ||
57 | CONFIG = $DEFAULTCONFIG | ||
58 | HOME = $SERVICEHOME | ||
59 | HOSTNAME = localhost | ||
60 | PORT = 2092 | ||
61 | 34 | ||
62 | [transport] | 35 | [transport] |
63 | PLUGINS = udp_nat | 36 | PLUGINS = udp_nat |
@@ -71,6 +44,7 @@ CONFIG = $DEFAULTCONFIG | |||
71 | HOME = $SERVICEHOME | 44 | HOME = $SERVICEHOME |
72 | HOSTNAME = localhost | 45 | HOSTNAME = localhost |
73 | PORT = 22365 | 46 | PORT = 22365 |
47 | UNIXPATH = /tmp/gnunet-p2-service-transport.sock | ||
74 | #PREFIX = xterm -e xterm -T transport -e gdb --args | 48 | #PREFIX = xterm -e xterm -T transport -e gdb --args |
75 | 49 | ||
76 | [peerinfo] | 50 | [peerinfo] |
@@ -83,6 +57,7 @@ CONFIG = $DEFAULTCONFIG | |||
83 | HOME = $SERVICEHOME | 57 | HOME = $SERVICEHOME |
84 | HOSTNAME = localhost | 58 | HOSTNAME = localhost |
85 | PORT = 22369 | 59 | PORT = 22369 |
60 | UNIXPATH = /tmp/gnunet-p2-service-peerinfo.sock | ||
86 | 61 | ||
87 | [resolver] | 62 | [resolver] |
88 | ACCEPT_FROM6 = ::1; | 63 | ACCEPT_FROM6 = ::1; |
@@ -92,6 +67,7 @@ CONFIG = $DEFAULTCONFIG | |||
92 | HOME = $SERVICEHOME | 67 | HOME = $SERVICEHOME |
93 | HOSTNAME = localhost | 68 | HOSTNAME = localhost |
94 | PORT = 22364 | 69 | PORT = 22364 |
70 | UNIXPATH = /tmp/gnunet-p2-service-resolver.sock | ||
95 | 71 | ||
96 | [statistics] | 72 | [statistics] |
97 | ACCEPT_FROM6 = ::1; | 73 | ACCEPT_FROM6 = ::1; |
@@ -101,6 +77,7 @@ CONFIG = $DEFAULTCONFIG | |||
101 | HOME = $SERVICEHOME | 77 | HOME = $SERVICEHOME |
102 | HOSTNAME = localhost | 78 | HOSTNAME = localhost |
103 | PORT = 22367 | 79 | PORT = 22367 |
80 | UNIXPATH = /tmp/gnunet-p2-service-statistics.sock | ||
104 | 81 | ||
105 | [arm] | 82 | [arm] |
106 | DEFAULTSERVICES = | 83 | DEFAULTSERVICES = |
@@ -111,6 +88,7 @@ CONFIG = $DEFAULTCONFIG | |||
111 | HOME = $SERVICEHOME | 88 | HOME = $SERVICEHOME |
112 | HOSTNAME = localhost | 89 | HOSTNAME = localhost |
113 | PORT = 22366 | 90 | PORT = 22366 |
91 | UNIXPATH = /tmp/gnunet-p2-service-arm.sock | ||
114 | 92 | ||
115 | [transport-tcp] | 93 | [transport-tcp] |
116 | TIMEOUT = 300000 | 94 | TIMEOUT = 300000 |
diff --git a/src/transport/test_transport_api_udp_peer1.conf b/src/transport/test_transport_api_udp_peer1.conf index e1ff1644e..49efbff63 100644 --- a/src/transport/test_transport_api_udp_peer1.conf +++ b/src/transport/test_transport_api_udp_peer1.conf | |||
@@ -30,15 +30,7 @@ FRIENDS-ONLY = NO | |||
30 | MINIMUM-FRIENDS = 0 | 30 | MINIMUM-FRIENDS = 0 |
31 | 31 | ||
32 | [core] | 32 | [core] |
33 | TOTAL_QUOTA_OUT = 3932160 | 33 | AUTOSTART = NO |
34 | TOTAL_QUOTA_IN = 3932160 | ||
35 | ACCEPT_FROM6 = ::1; | ||
36 | ACCEPT_FROM = 127.0.0.1; | ||
37 | BINARY = gnunet-service-core | ||
38 | CONFIG = $DEFAULTCONFIG | ||
39 | HOME = $SERVICEHOME | ||
40 | HOSTNAME = localhost | ||
41 | PORT = 2092 | ||
42 | 34 | ||
43 | [transport] | 35 | [transport] |
44 | PLUGINS = udp | 36 | PLUGINS = udp |
@@ -51,6 +43,7 @@ CONFIG = $DEFAULTCONFIG | |||
51 | HOME = $SERVICEHOME | 43 | HOME = $SERVICEHOME |
52 | HOSTNAME = localhost | 44 | HOSTNAME = localhost |
53 | PORT = 12365 | 45 | PORT = 12365 |
46 | UNIXPATH = /tmp/gnunet-p1-service-transport.sock | ||
54 | #PREFIX = valgrind --track-origins=yes --leak-check=full --log-file=valgrind_udp_peer1.log | 47 | #PREFIX = valgrind --track-origins=yes --leak-check=full --log-file=valgrind_udp_peer1.log |
55 | #PREFIX = xterm -e xterm -T transport -e gdb --args | 48 | #PREFIX = xterm -e xterm -T transport -e gdb --args |
56 | 49 | ||
@@ -64,6 +57,7 @@ CONFIG = $DEFAULTCONFIG | |||
64 | HOME = $SERVICEHOME | 57 | HOME = $SERVICEHOME |
65 | HOSTNAME = localhost | 58 | HOSTNAME = localhost |
66 | PORT = 12369 | 59 | PORT = 12369 |
60 | UNIXPATH = /tmp/gnunet-p1-service-peerinfo.sock | ||
67 | 61 | ||
68 | [resolver] | 62 | [resolver] |
69 | ACCEPT_FROM6 = ::1; | 63 | ACCEPT_FROM6 = ::1; |
@@ -73,6 +67,7 @@ CONFIG = $DEFAULTCONFIG | |||
73 | HOME = $SERVICEHOME | 67 | HOME = $SERVICEHOME |
74 | HOSTNAME = localhost | 68 | HOSTNAME = localhost |
75 | PORT = 12364 | 69 | PORT = 12364 |
70 | UNIXPATH = /tmp/gnunet-p1-service-resolver.sock | ||
76 | 71 | ||
77 | [statistics] | 72 | [statistics] |
78 | ACCEPT_FROM6 = ::1; | 73 | ACCEPT_FROM6 = ::1; |
@@ -82,6 +77,7 @@ CONFIG = $DEFAULTCONFIG | |||
82 | HOME = $SERVICEHOME | 77 | HOME = $SERVICEHOME |
83 | HOSTNAME = localhost | 78 | HOSTNAME = localhost |
84 | PORT = 12367 | 79 | PORT = 12367 |
80 | UNIXPATH = /tmp/gnunet-p1-service-statistics.sock | ||
85 | 81 | ||
86 | [arm] | 82 | [arm] |
87 | DEFAULTSERVICES = | 83 | DEFAULTSERVICES = |
@@ -92,6 +88,7 @@ CONFIG = $DEFAULTCONFIG | |||
92 | HOME = $SERVICEHOME | 88 | HOME = $SERVICEHOME |
93 | HOSTNAME = localhost | 89 | HOSTNAME = localhost |
94 | PORT = 12366 | 90 | PORT = 12366 |
91 | UNIXPATH = /tmp/gnunet-p1-service-arm.sock | ||
95 | 92 | ||
96 | [transport-tcp] | 93 | [transport-tcp] |
97 | TIMEOUT = 300000 | 94 | TIMEOUT = 300000 |
diff --git a/src/transport/test_transport_api_udp_peer2.conf b/src/transport/test_transport_api_udp_peer2.conf index cb4d4778d..2259e23f7 100644 --- a/src/transport/test_transport_api_udp_peer2.conf +++ b/src/transport/test_transport_api_udp_peer2.conf | |||
@@ -29,17 +29,6 @@ AUTOCONNECT = YES | |||
29 | FRIENDS-ONLY = NO | 29 | FRIENDS-ONLY = NO |
30 | MINIMUM-FRIENDS = 0 | 30 | MINIMUM-FRIENDS = 0 |
31 | 31 | ||
32 | [core] | ||
33 | TOTAL_QUOTA_OUT = 3932160 | ||
34 | TOTAL_QUOTA_IN = 3932160 | ||
35 | ACCEPT_FROM6 = ::1; | ||
36 | ACCEPT_FROM = 127.0.0.1; | ||
37 | BINARY = gnunet-service-core | ||
38 | CONFIG = $DEFAULTCONFIG | ||
39 | HOME = $SERVICEHOME | ||
40 | HOSTNAME = localhost | ||
41 | PORT = 2092 | ||
42 | |||
43 | [transport] | 32 | [transport] |
44 | PLUGINS = udp | 33 | PLUGINS = udp |
45 | DEBUG = NO | 34 | DEBUG = NO |
@@ -52,6 +41,7 @@ CONFIG = $DEFAULTCONFIG | |||
52 | HOME = $SERVICEHOME | 41 | HOME = $SERVICEHOME |
53 | HOSTNAME = localhost | 42 | HOSTNAME = localhost |
54 | PORT = 22365 | 43 | PORT = 22365 |
44 | UNIXPATH = /tmp/gnunet-p1-service-transport.sock | ||
55 | #PREFIX = valgrind --track-origins=yes --leak-check=full --log-file=valgrind_udp_peer2.log | 45 | #PREFIX = valgrind --track-origins=yes --leak-check=full --log-file=valgrind_udp_peer2.log |
56 | 46 | ||
57 | [peerinfo] | 47 | [peerinfo] |
@@ -64,6 +54,7 @@ CONFIG = $DEFAULTCONFIG | |||
64 | HOME = $SERVICEHOME | 54 | HOME = $SERVICEHOME |
65 | HOSTNAME = localhost | 55 | HOSTNAME = localhost |
66 | PORT = 22369 | 56 | PORT = 22369 |
57 | UNIXPATH = /tmp/gnunet-p1-service-peerinfo.sock | ||
67 | 58 | ||
68 | [resolver] | 59 | [resolver] |
69 | ACCEPT_FROM6 = ::1; | 60 | ACCEPT_FROM6 = ::1; |
@@ -73,6 +64,7 @@ CONFIG = $DEFAULTCONFIG | |||
73 | HOME = $SERVICEHOME | 64 | HOME = $SERVICEHOME |
74 | HOSTNAME = localhost | 65 | HOSTNAME = localhost |
75 | PORT = 22364 | 66 | PORT = 22364 |
67 | UNIXPATH = /tmp/gnunet-p1-service-resolver.sock | ||
76 | 68 | ||
77 | [statistics] | 69 | [statistics] |
78 | ACCEPT_FROM6 = ::1; | 70 | ACCEPT_FROM6 = ::1; |
@@ -82,6 +74,7 @@ CONFIG = $DEFAULTCONFIG | |||
82 | HOME = $SERVICEHOME | 74 | HOME = $SERVICEHOME |
83 | HOSTNAME = localhost | 75 | HOSTNAME = localhost |
84 | PORT = 22367 | 76 | PORT = 22367 |
77 | UNIXPATH = /tmp/gnunet-p1-service-statistics.sock | ||
85 | 78 | ||
86 | [arm] | 79 | [arm] |
87 | DEFAULTSERVICES = | 80 | DEFAULTSERVICES = |
@@ -92,6 +85,7 @@ CONFIG = $DEFAULTCONFIG | |||
92 | HOME = $SERVICEHOME | 85 | HOME = $SERVICEHOME |
93 | HOSTNAME = localhost | 86 | HOSTNAME = localhost |
94 | PORT = 22366 | 87 | PORT = 22366 |
88 | UNIXPATH = /tmp/gnunet-p1-service-arm.sock | ||
95 | 89 | ||
96 | [transport-tcp] | 90 | [transport-tcp] |
97 | TIMEOUT = 300000 | 91 | TIMEOUT = 300000 |
diff --git a/src/util/bandwidth.c b/src/util/bandwidth.c index 124cede9b..e47df4382 100644 --- a/src/util/bandwidth.c +++ b/src/util/bandwidth.c | |||
@@ -211,7 +211,7 @@ int | |||
211 | GNUNET_BANDWIDTH_tracker_consume (struct GNUNET_BANDWIDTH_Tracker *av, | 211 | GNUNET_BANDWIDTH_tracker_consume (struct GNUNET_BANDWIDTH_Tracker *av, |
212 | ssize_t size) | 212 | ssize_t size) |
213 | { | 213 | { |
214 | uint64_t nc; | 214 | int64_t nc; |
215 | 215 | ||
216 | #if DEBUG_BANDWIDTH | 216 | #if DEBUG_BANDWIDTH |
217 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | 217 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, |
diff --git a/src/util/client.c b/src/util/client.c index f964b7322..c7853d146 100644 --- a/src/util/client.c +++ b/src/util/client.c | |||
@@ -250,19 +250,55 @@ struct GNUNET_CLIENT_Connection | |||
250 | * Are we ignoring shutdown signals? | 250 | * Are we ignoring shutdown signals? |
251 | */ | 251 | */ |
252 | int ignore_shutdown; | 252 | int ignore_shutdown; |
253 | |||
254 | /** | ||
255 | * How often have we tried to connect? | ||
256 | */ | ||
257 | unsigned int attempts; | ||
253 | 258 | ||
254 | }; | 259 | }; |
255 | 260 | ||
256 | 261 | ||
262 | /** | ||
263 | * Try to connect to the service. | ||
264 | * | ||
265 | * @param sched scheduler to use | ||
266 | * @param service_name name of service to connect to | ||
267 | * @param cfg configuration to use | ||
268 | * @param attempt counter used to alternate between IP and UNIX domain sockets | ||
269 | * @return NULL on error | ||
270 | */ | ||
257 | static struct GNUNET_CONNECTION_Handle * | 271 | static struct GNUNET_CONNECTION_Handle * |
258 | do_connect (struct GNUNET_SCHEDULER_Handle *sched, | 272 | do_connect (struct GNUNET_SCHEDULER_Handle *sched, |
259 | const char *service_name, | 273 | const char *service_name, |
260 | const struct GNUNET_CONFIGURATION_Handle *cfg) | 274 | const struct GNUNET_CONFIGURATION_Handle *cfg, |
275 | unsigned int attempt) | ||
261 | { | 276 | { |
262 | struct GNUNET_CONNECTION_Handle *sock; | 277 | struct GNUNET_CONNECTION_Handle *sock; |
263 | char *hostname; | 278 | char *hostname; |
279 | char *unixpath; | ||
264 | unsigned long long port; | 280 | unsigned long long port; |
265 | 281 | ||
282 | #if AF_UNIX | ||
283 | if (0 == attempt % 2) | ||
284 | { | ||
285 | /* on even rounds, try UNIX */ | ||
286 | if (GNUNET_OK == | ||
287 | GNUNET_CONFIGURATION_get_value_string (cfg, | ||
288 | service_name, | ||
289 | "UNIXPATH", &unixpath)) | ||
290 | { | ||
291 | sock = GNUNET_CONNECTION_create_from_connect_to_unixpath (sched, | ||
292 | cfg, | ||
293 | unixpath, | ||
294 | GNUNET_SERVER_MAX_MESSAGE_SIZE); | ||
295 | GNUNET_free (unixpath); | ||
296 | if (sock != NULL) | ||
297 | return sock; | ||
298 | } | ||
299 | } | ||
300 | #endif | ||
301 | |||
266 | if ((GNUNET_OK != | 302 | if ((GNUNET_OK != |
267 | GNUNET_CONFIGURATION_get_value_number (cfg, | 303 | GNUNET_CONFIGURATION_get_value_number (cfg, |
268 | service_name, | 304 | service_name, |
@@ -314,10 +350,13 @@ GNUNET_CLIENT_connect (struct GNUNET_SCHEDULER_Handle *sched, | |||
314 | struct GNUNET_CLIENT_Connection *ret; | 350 | struct GNUNET_CLIENT_Connection *ret; |
315 | struct GNUNET_CONNECTION_Handle *sock; | 351 | struct GNUNET_CONNECTION_Handle *sock; |
316 | 352 | ||
317 | sock = do_connect (sched, service_name, cfg); | 353 | sock = do_connect (sched, |
354 | service_name, | ||
355 | cfg, 0); | ||
318 | if (sock == NULL) | 356 | if (sock == NULL) |
319 | return NULL; | 357 | return NULL; |
320 | ret = GNUNET_malloc (sizeof (struct GNUNET_CLIENT_Connection)); | 358 | ret = GNUNET_malloc (sizeof (struct GNUNET_CLIENT_Connection)); |
359 | ret->attempts = 1; | ||
321 | ret->sock = sock; | 360 | ret->sock = sock; |
322 | ret->sched = sched; | 361 | ret->sched = sched; |
323 | ret->service_name = GNUNET_strdup (service_name); | 362 | ret->service_name = GNUNET_strdup (service_name); |
@@ -770,7 +809,9 @@ client_notify (void *cls, size_t size, void *buf) | |||
770 | /* auto-retry */ | 809 | /* auto-retry */ |
771 | GNUNET_CONNECTION_destroy (th->sock->sock, GNUNET_NO); | 810 | GNUNET_CONNECTION_destroy (th->sock->sock, GNUNET_NO); |
772 | th->sock->sock = do_connect (th->sock->sched, | 811 | th->sock->sock = do_connect (th->sock->sched, |
773 | th->sock->service_name, th->sock->cfg); | 812 | th->sock->service_name, |
813 | th->sock->cfg, | ||
814 | th->sock->attempts++); | ||
774 | GNUNET_assert (NULL != th->sock->sock); | 815 | GNUNET_assert (NULL != th->sock->sock); |
775 | GNUNET_CONNECTION_ignore_shutdown (th->sock->sock, | 816 | GNUNET_CONNECTION_ignore_shutdown (th->sock->sock, |
776 | th->sock->ignore_shutdown); | 817 | th->sock->ignore_shutdown); |
diff --git a/src/util/common_logging.c b/src/util/common_logging.c index 73a374f46..c06aadc2f 100644 --- a/src/util/common_logging.c +++ b/src/util/common_logging.c | |||
@@ -510,7 +510,9 @@ GNUNET_a2s (const struct sockaddr *addr, socklen_t addrlen) | |||
510 | static char buf[INET6_ADDRSTRLEN + 8]; | 510 | static char buf[INET6_ADDRSTRLEN + 8]; |
511 | static char b2[6]; | 511 | static char b2[6]; |
512 | const struct sockaddr_in *v4; | 512 | const struct sockaddr_in *v4; |
513 | const struct sockaddr_un *un; | ||
513 | const struct sockaddr_in6 *v6; | 514 | const struct sockaddr_in6 *v6; |
515 | unsigned int off; | ||
514 | 516 | ||
515 | if (addr == NULL) | 517 | if (addr == NULL) |
516 | return _("unknown address"); | 518 | return _("unknown address"); |
@@ -535,6 +537,17 @@ GNUNET_a2s (const struct sockaddr *addr, socklen_t addrlen) | |||
535 | sprintf (b2, "%u", ntohs (v6->sin6_port)); | 537 | sprintf (b2, "%u", ntohs (v6->sin6_port)); |
536 | strcat (buf, b2); | 538 | strcat (buf, b2); |
537 | return buf; | 539 | return buf; |
540 | case AF_UNIX: | ||
541 | un = (const struct sockaddr_un*) addr; | ||
542 | off = 0; | ||
543 | if (un->sun_path[0] == '\0') off++; | ||
544 | snprintf (buf, | ||
545 | sizeof (buf), | ||
546 | "%s%.*s", | ||
547 | (off == 1) ? "@" : "", | ||
548 | addrlen - sizeof (sa_family_t) - 1 - off, | ||
549 | &un->sun_path[off]); | ||
550 | return buf; | ||
538 | default: | 551 | default: |
539 | return _("invalid address"); | 552 | return _("invalid address"); |
540 | } | 553 | } |
diff --git a/src/util/connection.c b/src/util/connection.c index fdd454105..d218714c0 100644 --- a/src/util/connection.c +++ b/src/util/connection.c | |||
@@ -889,6 +889,72 @@ GNUNET_CONNECTION_create_from_connect (struct GNUNET_SCHEDULER_Handle *sched, | |||
889 | 889 | ||
890 | 890 | ||
891 | /** | 891 | /** |
892 | * Create a socket handle by connecting to a UNIX domain service. | ||
893 | * This function returns immediately, even if the connection has not | ||
894 | * yet been established. This function only creates UNIX connections. | ||
895 | * | ||
896 | * @param sched scheduler to use | ||
897 | * @param cfg configuration to use | ||
898 | * @param unixpath path to connect to | ||
899 | * @param maxbuf maximum write buffer size for the socket (use | ||
900 | * 0 for sockets that need no write buffers, such as listen sockets) | ||
901 | * @return the socket handle, NULL on systems without UNIX support | ||
902 | */ | ||
903 | struct GNUNET_CONNECTION_Handle * | ||
904 | GNUNET_CONNECTION_create_from_connect_to_unixpath (struct GNUNET_SCHEDULER_Handle *sched, | ||
905 | const struct | ||
906 | GNUNET_CONFIGURATION_Handle *cfg, | ||
907 | const char *unixpath, | ||
908 | size_t maxbuf) | ||
909 | { | ||
910 | #ifdef AF_UNIX | ||
911 | struct GNUNET_CONNECTION_Handle *ret; | ||
912 | struct sockaddr_un *un; | ||
913 | size_t slen; | ||
914 | |||
915 | GNUNET_assert (0 < strlen (unixpath)); /* sanity check */ | ||
916 | un = GNUNET_malloc (sizeof (struct sockaddr_un)); | ||
917 | un->sun_family = AF_UNIX; | ||
918 | slen = strlen (unixpath) + 1; | ||
919 | if (slen >= sizeof (un->sun_path)) | ||
920 | slen = sizeof (un->sun_path) - 1; | ||
921 | memcpy (un->sun_path, | ||
922 | unixpath, | ||
923 | slen); | ||
924 | un->sun_path[slen] = '\0'; | ||
925 | slen += sizeof (sa_family_t); | ||
926 | #if LINUX | ||
927 | un->sun_path[0] = '\0'; | ||
928 | slen = sizeof (struct sockaddr_un); | ||
929 | #endif | ||
930 | ret = GNUNET_malloc (sizeof (struct GNUNET_CONNECTION_Handle) + maxbuf); | ||
931 | ret->cfg = cfg; | ||
932 | ret->sched = sched; | ||
933 | ret->write_buffer = (char *) &ret[1]; | ||
934 | ret->write_buffer_size = maxbuf; | ||
935 | ret->port = 0; | ||
936 | ret->hostname = NULL; | ||
937 | ret->addr = (struct sockaddr*) un; | ||
938 | ret->addrlen = slen; | ||
939 | ret->sock = GNUNET_NETWORK_socket_create (AF_UNIX, SOCK_STREAM, 0); | ||
940 | if (GNUNET_OK != GNUNET_NETWORK_socket_connect (ret->sock, | ||
941 | ret->addr, | ||
942 | ret->addrlen)) | ||
943 | { | ||
944 | GNUNET_break (GNUNET_OK == GNUNET_NETWORK_socket_close (ret->sock)); | ||
945 | GNUNET_free (ret->addr); | ||
946 | GNUNET_free (ret); | ||
947 | return NULL; | ||
948 | } | ||
949 | connect_success_continuation (ret); | ||
950 | return ret; | ||
951 | #else | ||
952 | return NULL; | ||
953 | #endif | ||
954 | } | ||
955 | |||
956 | |||
957 | /** | ||
892 | * Create a socket handle by (asynchronously) connecting to a host. | 958 | * Create a socket handle by (asynchronously) connecting to a host. |
893 | * This function returns immediately, even if the connection has not | 959 | * This function returns immediately, even if the connection has not |
894 | * yet been established. This function only creates TCP connections. | 960 | * yet been established. This function only creates TCP connections. |
diff --git a/src/util/network.c b/src/util/network.c index 0b4168034..8ec365269 100644 --- a/src/util/network.c +++ b/src/util/network.c | |||
@@ -226,7 +226,10 @@ GNUNET_NETWORK_socket_accept (const struct GNUNET_NETWORK_Handle *desc, | |||
226 | #ifdef DARWIN | 226 | #ifdef DARWIN |
227 | socket_set_nosigpipe (ret); | 227 | socket_set_nosigpipe (ret); |
228 | #endif | 228 | #endif |
229 | socket_set_nodelay (ret); | 229 | #ifdef AF_UNIX |
230 | if (address->sa_family != AF_UNIX) | ||
231 | #endif | ||
232 | socket_set_nodelay (ret); | ||
230 | return ret; | 233 | return ret; |
231 | } | 234 | } |
232 | 235 | ||
@@ -590,7 +593,11 @@ GNUNET_NETWORK_socket_create (int domain, int type, int protocol) | |||
590 | #ifdef DARWIN | 593 | #ifdef DARWIN |
591 | socket_set_nosigpipe (ret); | 594 | socket_set_nosigpipe (ret); |
592 | #endif | 595 | #endif |
593 | if (type == SOCK_STREAM) | 596 | if ( (type == SOCK_STREAM) |
597 | #ifdef AF_UNIX | ||
598 | && (domain != AF_UNIX) | ||
599 | #endif | ||
600 | ) | ||
594 | socket_set_nodelay (ret); | 601 | socket_set_nodelay (ret); |
595 | return ret; | 602 | return ret; |
596 | } | 603 | } |
diff --git a/src/util/service.c b/src/util/service.c index 82e7070a1..9ab99de3e 100644 --- a/src/util/service.c +++ b/src/util/service.c | |||
@@ -612,6 +612,10 @@ check_access (void *cls, const struct sockaddr *addr, socklen_t addrlen) | |||
612 | && ((sctx->v6_denied == NULL) || | 612 | && ((sctx->v6_denied == NULL) || |
613 | (!check_ipv6_listed (sctx->v6_denied, &i6->sin6_addr))); | 613 | (!check_ipv6_listed (sctx->v6_denied, &i6->sin6_addr))); |
614 | break; | 614 | break; |
615 | case AF_UNIX: | ||
616 | /* FIXME: support checking UID/GID in the future... */ | ||
617 | ret = GNUNET_OK; /* always OK for now */ | ||
618 | break; | ||
615 | default: | 619 | default: |
616 | GNUNET_log (GNUNET_ERROR_TYPE_WARNING, | 620 | GNUNET_log (GNUNET_ERROR_TYPE_WARNING, |
617 | _("Unknown address family %d\n"), addr->sa_family); | 621 | _("Unknown address family %d\n"), addr->sa_family); |
@@ -702,6 +706,46 @@ process_acl6 (struct IPv6NetworkSet **ret, | |||
702 | return GNUNET_OK; | 706 | return GNUNET_OK; |
703 | } | 707 | } |
704 | 708 | ||
709 | /** | ||
710 | * Add the given UNIX domain path as an address to the | ||
711 | * list (as the first entry). | ||
712 | * | ||
713 | * @param saddrs array to update | ||
714 | * @param saddrlens where to store the address length | ||
715 | * @param unixpath path to add | ||
716 | */ | ||
717 | static void | ||
718 | add_unixpath (struct sockaddr **saddrs, | ||
719 | socklen_t *saddrlens, | ||
720 | const char *unixpath) | ||
721 | { | ||
722 | #ifdef AF_UNIX | ||
723 | struct sockaddr_un *un; | ||
724 | size_t slen; | ||
725 | |||
726 | un = GNUNET_malloc (sizeof (struct sockaddr_un)); | ||
727 | un->sun_family = AF_UNIX; | ||
728 | slen = strlen (unixpath) + 1; | ||
729 | if (slen >= sizeof (un->sun_path)) | ||
730 | slen = sizeof (un->sun_path) - 1; | ||
731 | memcpy (un->sun_path, | ||
732 | unixpath, | ||
733 | slen); | ||
734 | un->sun_path[slen] = '\0'; | ||
735 | slen += sizeof (sa_family_t); | ||
736 | #if LINUX | ||
737 | un->sun_path[0] = '\0'; | ||
738 | slen = sizeof (struct sockaddr_un); | ||
739 | #endif | ||
740 | *saddrs = (struct sockaddr*) un; | ||
741 | *saddrlens = slen; | ||
742 | #else | ||
743 | /* this function should never be called | ||
744 | unless AF_UNIX is defined! */ | ||
745 | GNUNET_assert (0); | ||
746 | #endif | ||
747 | } | ||
748 | |||
705 | 749 | ||
706 | /** | 750 | /** |
707 | * Get the list of addresses that a server for the given service | 751 | * Get the list of addresses that a server for the given service |
@@ -732,6 +776,7 @@ GNUNET_SERVICE_get_server_addresses (const char *serviceName, | |||
732 | int disablev6; | 776 | int disablev6; |
733 | struct GNUNET_NETWORK_Handle *desc; | 777 | struct GNUNET_NETWORK_Handle *desc; |
734 | unsigned long long port; | 778 | unsigned long long port; |
779 | char *unixpath; | ||
735 | struct addrinfo hints; | 780 | struct addrinfo hints; |
736 | struct addrinfo *res; | 781 | struct addrinfo *res; |
737 | struct addrinfo *pos; | 782 | struct addrinfo *pos; |
@@ -781,19 +826,25 @@ GNUNET_SERVICE_get_server_addresses (const char *serviceName, | |||
781 | } | 826 | } |
782 | } | 827 | } |
783 | 828 | ||
784 | 829 | port = 0; | |
785 | if ((GNUNET_OK != | 830 | if (GNUNET_CONFIGURATION_have_value (cfg, |
786 | GNUNET_CONFIGURATION_get_value_number (cfg, | 831 | serviceName, "PORT")) |
787 | serviceName, | ||
788 | "PORT", | ||
789 | &port)) || (port > 65535)) | ||
790 | { | 832 | { |
791 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, | 833 | GNUNET_break (GNUNET_OK == |
792 | _ | 834 | GNUNET_CONFIGURATION_get_value_number (cfg, |
793 | ("Require valid port number for service `%s' in configuration!\n"), | 835 | serviceName, |
794 | serviceName); | 836 | "PORT", |
795 | return GNUNET_SYSERR; | 837 | &port)); |
838 | if (port > 65535) | ||
839 | { | ||
840 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, | ||
841 | _ | ||
842 | ("Require valid port number for service `%s' in configuration!\n"), | ||
843 | serviceName); | ||
844 | return GNUNET_SYSERR; | ||
845 | } | ||
796 | } | 846 | } |
847 | |||
797 | if (GNUNET_CONFIGURATION_have_value (cfg, | 848 | if (GNUNET_CONFIGURATION_have_value (cfg, |
798 | serviceName, "BINDTO")) | 849 | serviceName, "BINDTO")) |
799 | { | 850 | { |
@@ -806,6 +857,49 @@ GNUNET_SERVICE_get_server_addresses (const char *serviceName, | |||
806 | else | 857 | else |
807 | hostname = NULL; | 858 | hostname = NULL; |
808 | 859 | ||
860 | #ifdef AF_UNIX | ||
861 | if (GNUNET_CONFIGURATION_have_value (cfg, | ||
862 | serviceName, "UNIXPATH")) | ||
863 | { | ||
864 | GNUNET_break (GNUNET_OK == | ||
865 | GNUNET_CONFIGURATION_get_value_string (cfg, | ||
866 | serviceName, | ||
867 | "UNIXPATH", | ||
868 | &unixpath)); | ||
869 | |||
870 | /* probe UNIX support */ | ||
871 | desc = GNUNET_NETWORK_socket_create (AF_UNIX, SOCK_STREAM, 0); | ||
872 | if (NULL == desc) | ||
873 | { | ||
874 | if ((errno == ENOBUFS) || | ||
875 | (errno == ENOMEM) || (errno == ENFILE) || (errno == EACCES)) | ||
876 | { | ||
877 | GNUNET_log_strerror (GNUNET_ERROR_TYPE_ERROR, "socket"); | ||
878 | return GNUNET_SYSERR; | ||
879 | } | ||
880 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, | ||
881 | _ | ||
882 | ("Disabling UNIX domainn socket support for service `%s', failed to create UNIX domain socket: %s\n"), | ||
883 | serviceName, STRERROR (errno)); | ||
884 | GNUNET_free (unixpath); | ||
885 | unixpath = NULL; | ||
886 | } | ||
887 | } | ||
888 | else | ||
889 | unixpath = NULL; | ||
890 | #else | ||
891 | unixpath = NULL; | ||
892 | #endif | ||
893 | |||
894 | if ( (port == 0) && | ||
895 | (unixpath == NULL) ) | ||
896 | { | ||
897 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, | ||
898 | _("Have neither PORT nor UNIXPATH for service `%s', but one is required\n"), | ||
899 | serviceName); | ||
900 | return GNUNET_SYSERR; | ||
901 | } | ||
902 | |||
809 | if (hostname != NULL) | 903 | if (hostname != NULL) |
810 | { | 904 | { |
811 | #if DEBUG_SERVICE | 905 | #if DEBUG_SERVICE |
@@ -845,9 +939,16 @@ GNUNET_SERVICE_get_server_addresses (const char *serviceName, | |||
845 | return GNUNET_SYSERR; | 939 | return GNUNET_SYSERR; |
846 | } | 940 | } |
847 | resi = i; | 941 | resi = i; |
848 | saddrs = GNUNET_malloc ((i+1) * sizeof(struct sockaddr*)); | 942 | if (NULL != unixpath) |
849 | saddrlens = GNUNET_malloc ((i+1) * sizeof (socklen_t)); | 943 | resi++; |
944 | saddrs = GNUNET_malloc ((resi+1) * sizeof(struct sockaddr*)); | ||
945 | saddrlens = GNUNET_malloc ((resi+1) * sizeof (socklen_t)); | ||
850 | i = 0; | 946 | i = 0; |
947 | if (NULL != unixpath) | ||
948 | { | ||
949 | add_unixpath (saddrs, saddrlens, unixpath); | ||
950 | i++; | ||
951 | } | ||
851 | next = res; | 952 | next = res; |
852 | while (NULL != (pos = next)) | 953 | while (NULL != (pos = next)) |
853 | { | 954 | { |
@@ -890,40 +991,56 @@ GNUNET_SERVICE_get_server_addresses (const char *serviceName, | |||
890 | { | 991 | { |
891 | /* V4-only */ | 992 | /* V4-only */ |
892 | resi = 1; | 993 | resi = 1; |
893 | saddrs = GNUNET_malloc (2 * sizeof(struct sockaddr*)); | 994 | if (NULL != unixpath) |
894 | saddrlens = GNUNET_malloc (2 * sizeof (socklen_t)); | 995 | resi++; |
895 | saddrlens[0] = sizeof (struct sockaddr_in); | 996 | i = 0; |
896 | saddrs[0] = GNUNET_malloc (saddrlens[0]); | 997 | saddrs = GNUNET_malloc ((resi+1) * sizeof(struct sockaddr*)); |
998 | saddrlens = GNUNET_malloc ((resi+1) * sizeof (socklen_t)); | ||
999 | if (NULL != unixpath) | ||
1000 | { | ||
1001 | add_unixpath (saddrs, saddrlens, unixpath); | ||
1002 | i++; | ||
1003 | } | ||
1004 | saddrlens[i] = sizeof (struct sockaddr_in); | ||
1005 | saddrs[i] = GNUNET_malloc (saddrlens[i]); | ||
897 | #if HAVE_SOCKADDR_IN_SIN_LEN | 1006 | #if HAVE_SOCKADDR_IN_SIN_LEN |
898 | ((struct sockaddr_in *) saddrs[0])->sin_len = saddrlens[0]; | 1007 | ((struct sockaddr_in *) saddrs[i])->sin_len = saddrlens[i]; |
899 | #endif | 1008 | #endif |
900 | ((struct sockaddr_in *) saddrs[0])->sin_family = AF_INET; | 1009 | ((struct sockaddr_in *) saddrs[i])->sin_family = AF_INET; |
901 | ((struct sockaddr_in *) saddrs[0])->sin_port = htons (port); | 1010 | ((struct sockaddr_in *) saddrs[i])->sin_port = htons (port); |
902 | } | 1011 | } |
903 | else | 1012 | else |
904 | { | 1013 | { |
905 | /* dual stack */ | 1014 | /* dual stack */ |
906 | resi = 2; | 1015 | resi = 2; |
907 | saddrs = GNUNET_malloc (3 * sizeof(struct sockaddr*)); | 1016 | if (NULL != unixpath) |
908 | saddrlens = GNUNET_malloc (3 * sizeof (socklen_t)); | 1017 | resi++; |
909 | 1018 | saddrs = GNUNET_malloc ((resi+1) * sizeof(struct sockaddr*)); | |
910 | saddrlens[0] = sizeof (struct sockaddr_in6); | 1019 | saddrlens = GNUNET_malloc ((resi+1) * sizeof (socklen_t)); |
911 | saddrs[0] = GNUNET_malloc (saddrlens[0]); | 1020 | i = 0; |
1021 | if (NULL != unixpath) | ||
1022 | { | ||
1023 | add_unixpath (saddrs, saddrlens, unixpath); | ||
1024 | i++; | ||
1025 | } | ||
1026 | saddrlens[i] = sizeof (struct sockaddr_in6); | ||
1027 | saddrs[i] = GNUNET_malloc (saddrlens[i]); | ||
912 | #if HAVE_SOCKADDR_IN_SIN_LEN | 1028 | #if HAVE_SOCKADDR_IN_SIN_LEN |
913 | ((struct sockaddr_in6 *) saddrs[0])->sin6_len = saddrlens[0]; | 1029 | ((struct sockaddr_in6 *) saddrs[i])->sin6_len = saddrlens[0]; |
914 | #endif | 1030 | #endif |
915 | ((struct sockaddr_in6 *) saddrs[0])->sin6_family = AF_INET6; | 1031 | ((struct sockaddr_in6 *) saddrs[i])->sin6_family = AF_INET6; |
916 | ((struct sockaddr_in6 *) saddrs[0])->sin6_port = htons (port); | 1032 | ((struct sockaddr_in6 *) saddrs[i])->sin6_port = htons (port); |
917 | 1033 | i++; | |
918 | saddrlens[1] = sizeof (struct sockaddr_in); | 1034 | saddrlens[i] = sizeof (struct sockaddr_in); |
919 | saddrs[1] = GNUNET_malloc (saddrlens[1]); | 1035 | saddrs[i] = GNUNET_malloc (saddrlens[i]); |
920 | #if HAVE_SOCKADDR_IN_SIN_LEN | 1036 | #if HAVE_SOCKADDR_IN_SIN_LEN |
921 | ((struct sockaddr_in *) saddrs[1])->sin_len = saddrlens[1]; | 1037 | ((struct sockaddr_in *) saddrs[i])->sin_len = saddrlens[1]; |
922 | #endif | 1038 | #endif |
923 | ((struct sockaddr_in *) saddrs[1])->sin_family = AF_INET; | 1039 | ((struct sockaddr_in *) saddrs[i])->sin_family = AF_INET; |
924 | ((struct sockaddr_in *) saddrs[1])->sin_port = htons (port); | 1040 | ((struct sockaddr_in *) saddrs[i])->sin_port = htons (port); |
925 | } | 1041 | } |
926 | } | 1042 | } |
1043 | GNUNET_free_non_null (unixpath); | ||
927 | *addrs = saddrs; | 1044 | *addrs = saddrs; |
928 | *addr_lens = saddrlens; | 1045 | *addr_lens = saddrlens; |
929 | return resi; | 1046 | return resi; |
@@ -934,8 +1051,9 @@ GNUNET_SERVICE_get_server_addresses (const char *serviceName, | |||
934 | * Setup addr, addrlen, maxbuf, idle_timeout | 1051 | * Setup addr, addrlen, maxbuf, idle_timeout |
935 | * based on configuration! | 1052 | * based on configuration! |
936 | * | 1053 | * |
937 | * Configuration must specify a "PORT". It may | 1054 | * Configuration may specify: |
938 | * specify: | 1055 | * - PORT (where to bind to for TCP) |
1056 | * - UNIXPATH (where to bind to for UNIX domain sockets) | ||
939 | * - TIMEOUT (after how many ms does an inactive service timeout); | 1057 | * - TIMEOUT (after how many ms does an inactive service timeout); |
940 | * - MAXBUF (maximum incoming message size supported) | 1058 | * - MAXBUF (maximum incoming message size supported) |
941 | * - DISABLEV6 (disable support for IPv6, otherwise we use dual-stack) | 1059 | * - DISABLEV6 (disable support for IPv6, otherwise we use dual-stack) |
diff --git a/src/util/test_resolver_api.c b/src/util/test_resolver_api.c index e6496e7ac..c24646d07 100644 --- a/src/util/test_resolver_api.c +++ b/src/util/test_resolver_api.c | |||
@@ -222,6 +222,7 @@ static void | |||
222 | run(void *cls, struct GNUNET_SCHEDULER_Handle *sched, char * const *args, | 222 | run(void *cls, struct GNUNET_SCHEDULER_Handle *sched, char * const *args, |
223 | const char *cfgfile, const struct GNUNET_CONFIGURATION_Handle *cfg) | 223 | const char *cfgfile, const struct GNUNET_CONFIGURATION_Handle *cfg) |
224 | { | 224 | { |
225 | int *ok = cls; | ||
225 | struct sockaddr_in sa; | 226 | struct sockaddr_in sa; |
226 | struct GNUNET_TIME_Relative timeout = GNUNET_TIME_relative_multiply( | 227 | struct GNUNET_TIME_Relative timeout = GNUNET_TIME_relative_multiply( |
227 | GNUNET_TIME_UNIT_MILLISECONDS, 2500); | 228 | GNUNET_TIME_UNIT_MILLISECONDS, 2500); |
@@ -267,6 +268,7 @@ run(void *cls, struct GNUNET_SCHEDULER_Handle *sched, char * const *args, | |||
267 | #endif | 268 | #endif |
268 | fprintf (stderr, | 269 | fprintf (stderr, |
269 | "System seems to be off-line, will not run all DNS tests\n"); | 270 | "System seems to be off-line, will not run all DNS tests\n"); |
271 | *ok = 0; /* mark test as passing anyway */ | ||
270 | return; | 272 | return; |
271 | } | 273 | } |
272 | 274 | ||