diff options
author | t3sserakt <t3ss@posteo.de> | 2020-08-28 08:20:57 +0200 |
---|---|---|
committer | t3sserakt <t3ss@posteo.de> | 2020-08-28 08:20:57 +0200 |
commit | 03f6a0233f72c2c4c3925f0d6f6f7a81987c6530 (patch) | |
tree | e7da39f4953d2543b1cca22f5f2b2be42660a4fd /src/transport | |
parent | 38193fe48a572e475b4f84717ff5b3edbcaf2d2a (diff) | |
download | gnunet-03f6a0233f72c2c4c3925f0d6f6f7a81987c6530.tar.gz gnunet-03f6a0233f72c2c4c3925f0d6f6f7a81987c6530.zip |
- fixed some bugs
Diffstat (limited to 'src/transport')
-rw-r--r-- | src/transport/gnunet-communicator-tcp.c | 109 |
1 files changed, 70 insertions, 39 deletions
diff --git a/src/transport/gnunet-communicator-tcp.c b/src/transport/gnunet-communicator-tcp.c index df1bdc410..1783edb91 100644 --- a/src/transport/gnunet-communicator-tcp.c +++ b/src/transport/gnunet-communicator-tcp.c | |||
@@ -836,6 +836,11 @@ static struct GNUNET_PEERSTORE_Handle *peerstore; | |||
836 | int shutdown_running = GNUNET_NO; | 836 | int shutdown_running = GNUNET_NO; |
837 | 837 | ||
838 | /** | 838 | /** |
839 | * The port the communicator should be assigned to. | ||
840 | */ | ||
841 | unsigned int bind_port; | ||
842 | |||
843 | /** | ||
839 | * We have been notified that our listen socket has something to | 844 | * We have been notified that our listen socket has something to |
840 | * read. Do the read and reschedule this function to be called again | 845 | * read. Do the read and reschedule this function to be called again |
841 | * once more is available. | 846 | * once more is available. |
@@ -856,7 +861,6 @@ listen_cb (void *cls); | |||
856 | static void | 861 | static void |
857 | queue_destroy (struct Queue *queue) | 862 | queue_destroy (struct Queue *queue) |
858 | { | 863 | { |
859 | struct GNUNET_MQ_Handle *mq; | ||
860 | struct ListenTask *lt; | 864 | struct ListenTask *lt; |
861 | lt = GNUNET_new (struct ListenTask); | 865 | lt = GNUNET_new (struct ListenTask); |
862 | lt->listen_sock = queue->listen_sock; | 866 | lt->listen_sock = queue->listen_sock; |
@@ -1432,7 +1436,7 @@ try_handle_plaintext (struct Queue *queue) | |||
1432 | if ((-1 != unverified_size) && (unverified_size > INITIAL_CORE_KX_SIZE)) | 1436 | if ((-1 != unverified_size) && (unverified_size > INITIAL_CORE_KX_SIZE)) |
1433 | { | 1437 | { |
1434 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, | 1438 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, |
1435 | "Already received data of size %u bigger than KX size %u!\n", | 1439 | "Already received data of size %lu bigger than KX size %lu!\n", |
1436 | unverified_size, | 1440 | unverified_size, |
1437 | INITIAL_CORE_KX_SIZE); | 1441 | INITIAL_CORE_KX_SIZE); |
1438 | GNUNET_break_op (0); | 1442 | GNUNET_break_op (0); |
@@ -1709,6 +1713,8 @@ tcp_address_to_sockaddr_numeric_v6 (socklen_t *sock_len, struct sockaddr_in6 v6, | |||
1709 | #if HAVE_SOCKADDR_IN_SIN_LEN | 1713 | #if HAVE_SOCKADDR_IN_SIN_LEN |
1710 | v6.sin6_len = sizeof(sizeof(struct sockaddr_in6)); | 1714 | v6.sin6_len = sizeof(sizeof(struct sockaddr_in6)); |
1711 | #endif | 1715 | #endif |
1716 | v6.sin6_flowinfo = 0; | ||
1717 | v6.sin6_scope_id = 0; | ||
1712 | in = GNUNET_memdup (&v6, sizeof(v6)); | 1718 | in = GNUNET_memdup (&v6, sizeof(v6)); |
1713 | *sock_len = sizeof(struct sockaddr_in6); | 1719 | *sock_len = sizeof(struct sockaddr_in6); |
1714 | 1720 | ||
@@ -1976,6 +1982,8 @@ tcp_address_to_sockaddr (const char *bindto, socklen_t *sock_len) | |||
1976 | // colon = strrchr (cp, ':'); | 1982 | // colon = strrchr (cp, ':'); |
1977 | port = extract_port (bindto); | 1983 | port = extract_port (bindto); |
1978 | in = tcp_address_to_sockaddr_numeric_v6 (sock_len, v6, port); | 1984 | in = tcp_address_to_sockaddr_numeric_v6 (sock_len, v6, port); |
1985 | }else{ | ||
1986 | GNUNET_assert (0); | ||
1979 | } | 1987 | } |
1980 | 1988 | ||
1981 | // GNUNET_free (start); | 1989 | // GNUNET_free (start); |
@@ -2826,7 +2834,7 @@ mq_init (void *cls, const struct GNUNET_PeerIdentity *peer, const char *address) | |||
2826 | struct Queue *queue; | 2834 | struct Queue *queue; |
2827 | const char *path; | 2835 | const char *path; |
2828 | struct sockaddr *in; | 2836 | struct sockaddr *in; |
2829 | socklen_t in_len; | 2837 | socklen_t in_len = 0; |
2830 | struct GNUNET_NETWORK_Handle *sock; | 2838 | struct GNUNET_NETWORK_Handle *sock; |
2831 | 2839 | ||
2832 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | 2840 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, |
@@ -3030,6 +3038,10 @@ nat_address_cb (void *cls, | |||
3030 | char *my_addr; | 3038 | char *my_addr; |
3031 | struct GNUNET_TRANSPORT_AddressIdentifier *ai; | 3039 | struct GNUNET_TRANSPORT_AddressIdentifier *ai; |
3032 | 3040 | ||
3041 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, | ||
3042 | "nat address cb %s\n", | ||
3043 | GNUNET_a2s (addr, addrlen)); | ||
3044 | |||
3033 | if (GNUNET_YES == add_remove) | 3045 | if (GNUNET_YES == add_remove) |
3034 | { | 3046 | { |
3035 | enum GNUNET_NetworkType nt; | 3047 | enum GNUNET_NetworkType nt; |
@@ -3056,6 +3068,35 @@ nat_address_cb (void *cls, | |||
3056 | } | 3068 | } |
3057 | 3069 | ||
3058 | /** | 3070 | /** |
3071 | * This method adds addresses to the DLL, that are later register at the NAT service. | ||
3072 | */ | ||
3073 | static void | ||
3074 | add_addr (struct sockaddr *in, socklen_t in_len) | ||
3075 | { | ||
3076 | |||
3077 | struct Addresses *saddrs; | ||
3078 | |||
3079 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | ||
3080 | "add address %s\n", | ||
3081 | GNUNET_a2s (in, in_len)); | ||
3082 | |||
3083 | saddrs = GNUNET_new (struct Addresses); | ||
3084 | saddrs->addr = in; | ||
3085 | saddrs->addr_len = in_len; | ||
3086 | GNUNET_CONTAINER_DLL_insert (addrs_head, addrs_tail, saddrs); | ||
3087 | |||
3088 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | ||
3089 | "after add address %s\n", | ||
3090 | GNUNET_a2s (in, in_len)); | ||
3091 | |||
3092 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | ||
3093 | "add address %s\n", | ||
3094 | GNUNET_a2s (saddrs->addr, saddrs->addr_len)); | ||
3095 | |||
3096 | addrs_lens++; | ||
3097 | } | ||
3098 | |||
3099 | /** | ||
3059 | * This method launch network interactions for each address we like to bind to. | 3100 | * This method launch network interactions for each address we like to bind to. |
3060 | * | 3101 | * |
3061 | * @param addr The address we will listen to. | 3102 | * @param addr The address we will listen to. |
@@ -3063,7 +3104,7 @@ nat_address_cb (void *cls, | |||
3063 | * @return GNUNET_SYSERR in case of error. GNUNET_OK in case we are successfully listen to the address. | 3104 | * @return GNUNET_SYSERR in case of error. GNUNET_OK in case we are successfully listen to the address. |
3064 | */ | 3105 | */ |
3065 | static int | 3106 | static int |
3066 | init_socket (const struct sockaddr *addr, | 3107 | init_socket (struct sockaddr *addr, |
3067 | socklen_t in_len) | 3108 | socklen_t in_len) |
3068 | { | 3109 | { |
3069 | struct sockaddr_storage in_sto; | 3110 | struct sockaddr_storage in_sto; |
@@ -3178,6 +3219,7 @@ init_socket (const struct sockaddr *addr, | |||
3178 | return GNUNET_SYSERR; | 3219 | return GNUNET_SYSERR; |
3179 | } | 3220 | } |
3180 | 3221 | ||
3222 | add_addr (addr, in_len); | ||
3181 | return GNUNET_OK; | 3223 | return GNUNET_OK; |
3182 | 3224 | ||
3183 | } | 3225 | } |
@@ -3194,6 +3236,10 @@ nat_register () | |||
3194 | int i; | 3236 | int i; |
3195 | struct Addresses *pos; | 3237 | struct Addresses *pos; |
3196 | 3238 | ||
3239 | |||
3240 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | ||
3241 | "starting nat register!\n"); | ||
3242 | |||
3197 | i = 0; | 3243 | i = 0; |
3198 | saddrs = GNUNET_malloc ((addrs_lens + 1) * sizeof(struct sockaddr *)); | 3244 | saddrs = GNUNET_malloc ((addrs_lens + 1) * sizeof(struct sockaddr *)); |
3199 | 3245 | ||
@@ -3202,6 +3248,10 @@ nat_register () | |||
3202 | for (pos = addrs_head; NULL != pos; pos = pos->next) | 3248 | for (pos = addrs_head; NULL != pos; pos = pos->next) |
3203 | { | 3249 | { |
3204 | 3250 | ||
3251 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | ||
3252 | "registering address %s\n", | ||
3253 | GNUNET_a2s (addrs_head->addr, addrs_head->addr_len)); | ||
3254 | |||
3205 | saddr_lens[i] = addrs_head->addr_len; | 3255 | saddr_lens[i] = addrs_head->addr_len; |
3206 | saddrs[i] = GNUNET_memdup (addrs_head->addr, saddr_lens[i]); | 3256 | saddrs[i] = GNUNET_memdup (addrs_head->addr, saddr_lens[i]); |
3207 | 3257 | ||
@@ -3236,22 +3286,6 @@ nat_register () | |||
3236 | } | 3286 | } |
3237 | 3287 | ||
3238 | /** | 3288 | /** |
3239 | * This method adds addresses to the DLL, that are later register at the NAT service. | ||
3240 | */ | ||
3241 | static void | ||
3242 | add_addr (struct sockaddr *in, socklen_t in_len) | ||
3243 | { | ||
3244 | |||
3245 | struct Addresses *saddrs; | ||
3246 | |||
3247 | saddrs = GNUNET_new (struct Addresses); | ||
3248 | saddrs->addr = in; | ||
3249 | saddrs->addr_len = in_len; | ||
3250 | GNUNET_CONTAINER_DLL_insert (addrs_head, addrs_tail, saddrs); | ||
3251 | addrs_lens++; | ||
3252 | } | ||
3253 | |||
3254 | /** | ||
3255 | * This method is the callback called by the resolver API, and wraps method init_socket. | 3289 | * This method is the callback called by the resolver API, and wraps method init_socket. |
3256 | * | 3290 | * |
3257 | * @param cls The port we will bind to. | 3291 | * @param cls The port we will bind to. |
@@ -3266,22 +3300,19 @@ init_socket_resolv (void *cls, | |||
3266 | struct sockaddr_in *v4; | 3300 | struct sockaddr_in *v4; |
3267 | struct sockaddr_in6 *v6; | 3301 | struct sockaddr_in6 *v6; |
3268 | struct sockaddr *in; | 3302 | struct sockaddr *in; |
3269 | unsigned int *port; | ||
3270 | 3303 | ||
3271 | port = cls; | 3304 | (void) cls; |
3272 | if (NULL != addr) | 3305 | if (NULL != addr) |
3273 | { | 3306 | { |
3274 | if (AF_INET == addr->sa_family) | 3307 | if (AF_INET == addr->sa_family) |
3275 | { | 3308 | { |
3276 | v4 = (struct sockaddr_in *) addr; | 3309 | v4 = (struct sockaddr_in *) addr; |
3277 | in = tcp_address_to_sockaddr_numeric_v4 (&in_len, *v4, *port);// _global); | 3310 | in = tcp_address_to_sockaddr_numeric_v4 (&in_len, *v4, bind_port);// _global); |
3278 | add_addr (in, in_len); | ||
3279 | } | 3311 | } |
3280 | else if (AF_INET6 == addr->sa_family) | 3312 | else if (AF_INET6 == addr->sa_family) |
3281 | { | 3313 | { |
3282 | v6 = (struct sockaddr_in6 *) addr; | 3314 | v6 = (struct sockaddr_in6 *) addr; |
3283 | in = tcp_address_to_sockaddr_numeric_v6 (&in_len, *v6, *port);// _global); | 3315 | in = tcp_address_to_sockaddr_numeric_v6 (&in_len, *v6, bind_port);// _global); |
3284 | add_addr (in, in_len); | ||
3285 | } | 3316 | } |
3286 | else | 3317 | else |
3287 | { | 3318 | { |
@@ -3292,13 +3323,17 @@ init_socket_resolv (void *cls, | |||
3292 | AF_INET6); | 3323 | AF_INET6); |
3293 | return; | 3324 | return; |
3294 | } | 3325 | } |
3295 | init_socket (in, | 3326 | init_socket (in, in_len); |
3296 | in_len); | ||
3297 | } | 3327 | } |
3298 | else | 3328 | else |
3299 | { | 3329 | { |
3300 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, | 3330 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, |
3301 | "Address is NULL. This might be an error or the resolver finished resolving.\n"); | 3331 | "Address is NULL. This might be an error or the resolver finished resolving.\n"); |
3332 | if (NULL == addrs_head){ | ||
3333 | GNUNET_log (GNUNET_ERROR_TYPE_WARNING, | ||
3334 | "Resolver finished resolving, but we do not listen to an address!.\n"); | ||
3335 | return; | ||
3336 | } | ||
3302 | nat_register (); | 3337 | nat_register (); |
3303 | } | 3338 | } |
3304 | } | 3339 | } |
@@ -3364,9 +3399,9 @@ run (void *cls, | |||
3364 | return; | 3399 | return; |
3365 | } | 3400 | } |
3366 | 3401 | ||
3367 | if (1 == sscanf (bindto, "%u%1s", &port, dummy)) | 3402 | if (1 == sscanf (bindto, "%u%1s", &bind_port, dummy)) |
3368 | { | 3403 | { |
3369 | po = tcp_address_to_sockaddr_port_only (bindto, &port); | 3404 | po = tcp_address_to_sockaddr_port_only (bindto, &bind_port); |
3370 | 3405 | ||
3371 | addr_len_ipv4 = po->addr_len_ipv4; | 3406 | addr_len_ipv4 = po->addr_len_ipv4; |
3372 | 3407 | ||
@@ -3378,14 +3413,12 @@ run (void *cls, | |||
3378 | if (NULL != po->addr_ipv4) | 3413 | if (NULL != po->addr_ipv4) |
3379 | { | 3414 | { |
3380 | init_socket (po->addr_ipv4, addr_len_ipv4); | 3415 | init_socket (po->addr_ipv4, addr_len_ipv4); |
3381 | add_addr (po->addr_ipv4, addr_len_ipv4); | ||
3382 | } | 3416 | } |
3383 | 3417 | ||
3384 | if (NULL != po->addr_ipv6) | 3418 | if (NULL != po->addr_ipv6) |
3385 | { | 3419 | { |
3386 | addr_len_ipv6 = po->addr_len_ipv6; | 3420 | addr_len_ipv6 = po->addr_len_ipv6; |
3387 | init_socket (po->addr_ipv6, addr_len_ipv6); | 3421 | init_socket (po->addr_ipv6, addr_len_ipv6); |
3388 | add_addr (po->addr_ipv6, addr_len_ipv6); | ||
3389 | } | 3422 | } |
3390 | 3423 | ||
3391 | GNUNET_free (po); | 3424 | GNUNET_free (po); |
@@ -3399,11 +3432,10 @@ run (void *cls, | |||
3399 | 3432 | ||
3400 | if (1 == inet_pton (AF_INET, start, &v4.sin_addr)) | 3433 | if (1 == inet_pton (AF_INET, start, &v4.sin_addr)) |
3401 | { | 3434 | { |
3402 | port = extract_port (bindto); | 3435 | bind_port = extract_port (bindto); |
3403 | 3436 | ||
3404 | in = tcp_address_to_sockaddr_numeric_v4 (&in_len, v4, port); | 3437 | in = tcp_address_to_sockaddr_numeric_v4 (&in_len, v4, bind_port); |
3405 | init_socket (in, in_len); | 3438 | init_socket (in, in_len); |
3406 | add_addr (in, in_len); | ||
3407 | nat_register (); | 3439 | nat_register (); |
3408 | GNUNET_free (bindto); | 3440 | GNUNET_free (bindto); |
3409 | return; | 3441 | return; |
@@ -3411,17 +3443,16 @@ run (void *cls, | |||
3411 | 3443 | ||
3412 | if (1 == inet_pton (AF_INET6, start, &v6.sin6_addr)) | 3444 | if (1 == inet_pton (AF_INET6, start, &v6.sin6_addr)) |
3413 | { | 3445 | { |
3414 | port = extract_port (bindto); | 3446 | bind_port = extract_port (bindto); |
3415 | in = tcp_address_to_sockaddr_numeric_v6 (&in_len, v6, port); | 3447 | in = tcp_address_to_sockaddr_numeric_v6 (&in_len, v6, bind_port); |
3416 | init_socket (in, in_len); | 3448 | init_socket (in, in_len); |
3417 | add_addr (in, in_len); | ||
3418 | nat_register (); | 3449 | nat_register (); |
3419 | GNUNET_free (bindto); | 3450 | GNUNET_free (bindto); |
3420 | return; | 3451 | return; |
3421 | } | 3452 | } |
3422 | 3453 | ||
3423 | 3454 | ||
3424 | port = extract_port (bindto); | 3455 | bind_port = extract_port (bindto); |
3425 | 3456 | ||
3426 | resolve_request_handle = GNUNET_RESOLVER_ip_get (strtok_r (bindto, ":", | 3457 | resolve_request_handle = GNUNET_RESOLVER_ip_get (strtok_r (bindto, ":", |
3427 | &rest), | 3458 | &rest), |