diff options
author | Martin Schanzenbach <mschanzenbach@posteo.de> | 2020-05-30 17:45:38 +0200 |
---|---|---|
committer | Martin Schanzenbach <mschanzenbach@posteo.de> | 2020-05-30 17:45:38 +0200 |
commit | a325c3eaa8450d325fe57959eac29da5496cfd6d (patch) | |
tree | 76d985d7ca2ade1db4e4d6aba791da16c0fe0c50 /src/transport/gnunet-communicator-udp.c | |
parent | 63109da3eb675557a12904fe4700078355f200fa (diff) | |
download | gnunet-a325c3eaa8450d325fe57959eac29da5496cfd6d.tar.gz gnunet-a325c3eaa8450d325fe57959eac29da5496cfd6d.zip |
towards UDP backchannels
Diffstat (limited to 'src/transport/gnunet-communicator-udp.c')
-rw-r--r-- | src/transport/gnunet-communicator-udp.c | 32 |
1 files changed, 28 insertions, 4 deletions
diff --git a/src/transport/gnunet-communicator-udp.c b/src/transport/gnunet-communicator-udp.c index 72e84567a..344ba5180 100644 --- a/src/transport/gnunet-communicator-udp.c +++ b/src/transport/gnunet-communicator-udp.c | |||
@@ -1030,6 +1030,8 @@ check_timeouts (void *cls) | |||
1030 | rt = GNUNET_TIME_absolute_get_remaining (receiver->timeout); | 1030 | rt = GNUNET_TIME_absolute_get_remaining (receiver->timeout); |
1031 | if (0 != rt.rel_value_us) | 1031 | if (0 != rt.rel_value_us) |
1032 | break; | 1032 | break; |
1033 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | ||
1034 | "Receiver timed out\n"); | ||
1033 | receiver_destroy (receiver); | 1035 | receiver_destroy (receiver); |
1034 | } | 1036 | } |
1035 | st = GNUNET_TIME_UNIT_FOREVER_REL; | 1037 | st = GNUNET_TIME_UNIT_FOREVER_REL; |
@@ -1257,23 +1259,35 @@ handle_ack (void *cls, const struct GNUNET_PeerIdentity *pid, void *value) | |||
1257 | { | 1259 | { |
1258 | const struct UDPAck *ack = cls; | 1260 | const struct UDPAck *ack = cls; |
1259 | struct ReceiverAddress *receiver = value; | 1261 | struct ReceiverAddress *receiver = value; |
1262 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | ||
1263 | "in handle ack\n"); | ||
1260 | 1264 | ||
1261 | (void) pid; | 1265 | (void) pid; |
1262 | for (struct SharedSecret *ss = receiver->ss_head; NULL != ss; ss = ss->next) | 1266 | for (struct SharedSecret *ss = receiver->ss_head; NULL != ss; ss = ss->next) |
1263 | { | 1267 | { |
1268 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | ||
1269 | "Checking shared secrets\n"); | ||
1264 | if (0 == memcmp (&ack->cmac, &ss->cmac, sizeof(struct GNUNET_HashCode))) | 1270 | if (0 == memcmp (&ack->cmac, &ss->cmac, sizeof(struct GNUNET_HashCode))) |
1265 | { | 1271 | { |
1266 | uint32_t allowed; | 1272 | uint32_t allowed; |
1273 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | ||
1274 | "Found matching mac\n"); | ||
1267 | 1275 | ||
1268 | allowed = ntohl (ack->sequence_max); | 1276 | allowed = ntohl (ack->sequence_max); |
1269 | 1277 | ||
1270 | if (allowed > ss->sequence_allowed) | 1278 | if (allowed > ss->sequence_allowed) |
1271 | { | 1279 | { |
1280 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | ||
1281 | "%u > %u (%u)\n", allowed, ss->sequence_allowed, | ||
1282 | receiver->acks_available); | ||
1283 | |||
1272 | receiver->acks_available += (allowed - ss->sequence_allowed); | 1284 | receiver->acks_available += (allowed - ss->sequence_allowed); |
1273 | if ((allowed - ss->sequence_allowed) == receiver->acks_available) | 1285 | if ((allowed - ss->sequence_allowed) == receiver->acks_available) |
1274 | { | 1286 | { |
1275 | /* we just incremented from zero => MTU change! */ | 1287 | /* we just incremented from zero => MTU change! */ |
1276 | setup_receiver_mq (receiver); | 1288 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, |
1289 | "we just incremented from zero => MTU change!\n"); | ||
1290 | //TODO setup_receiver_mq (receiver); | ||
1277 | } | 1291 | } |
1278 | ss->sequence_allowed = allowed; | 1292 | ss->sequence_allowed = allowed; |
1279 | /* move ss to head to avoid discarding it anytime soon! */ | 1293 | /* move ss to head to avoid discarding it anytime soon! */ |
@@ -1361,6 +1375,9 @@ consider_ss_ack (struct SharedSecret *ss) | |||
1361 | ack.header.size = htons (sizeof(ack)); | 1375 | ack.header.size = htons (sizeof(ack)); |
1362 | ack.sequence_max = htonl (ss->sequence_allowed); | 1376 | ack.sequence_max = htonl (ss->sequence_allowed); |
1363 | ack.cmac = ss->cmac; | 1377 | ack.cmac = ss->cmac; |
1378 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | ||
1379 | "Notifying transport of UDPAck %s\n", | ||
1380 | GNUNET_i2s_full (&ss->sender->target)); | ||
1364 | GNUNET_TRANSPORT_communicator_notify (ch, | 1381 | GNUNET_TRANSPORT_communicator_notify (ch, |
1365 | &ss->sender->target, | 1382 | &ss->sender->target, |
1366 | COMMUNICATOR_ADDRESS_PREFIX, | 1383 | COMMUNICATOR_ADDRESS_PREFIX, |
@@ -2031,11 +2048,12 @@ static void | |||
2031 | mq_destroy (struct GNUNET_MQ_Handle *mq, void *impl_state) | 2048 | mq_destroy (struct GNUNET_MQ_Handle *mq, void *impl_state) |
2032 | { | 2049 | { |
2033 | struct ReceiverAddress *receiver = impl_state; | 2050 | struct ReceiverAddress *receiver = impl_state; |
2034 | 2051 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | |
2052 | "MQ destroyed\n"); | ||
2035 | if (mq == receiver->mq) | 2053 | if (mq == receiver->mq) |
2036 | { | 2054 | { |
2037 | receiver->mq = NULL; | 2055 | receiver->mq = NULL; |
2038 | receiver_destroy (receiver); | 2056 | //receiver_destroy (receiver); |
2039 | } | 2057 | } |
2040 | } | 2058 | } |
2041 | 2059 | ||
@@ -2093,7 +2111,7 @@ setup_receiver_mq (struct ReceiverAddress *receiver) | |||
2093 | GNUNET_TRANSPORT_communicator_mq_del (receiver->qh); | 2111 | GNUNET_TRANSPORT_communicator_mq_del (receiver->qh); |
2094 | receiver->qh = NULL; | 2112 | receiver->qh = NULL; |
2095 | } | 2113 | } |
2096 | GNUNET_assert (NULL == receiver->mq); | 2114 | //GNUNET_assert (NULL == receiver->mq); |
2097 | switch (receiver->address->sa_family) | 2115 | switch (receiver->address->sa_family) |
2098 | { | 2116 | { |
2099 | case AF_INET: | 2117 | case AF_INET: |
@@ -2190,6 +2208,9 @@ mq_init (void *cls, const struct GNUNET_PeerIdentity *peer, const char *address) | |||
2190 | &receiver->target, | 2208 | &receiver->target, |
2191 | receiver, | 2209 | receiver, |
2192 | GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE); | 2210 | GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE); |
2211 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | ||
2212 | "Added %s to receivers\n", | ||
2213 | GNUNET_i2s_full (&receiver->target)); | ||
2193 | receiver->timeout = | 2214 | receiver->timeout = |
2194 | GNUNET_TIME_relative_to_absolute (GNUNET_CONSTANTS_IDLE_CONNECTION_TIMEOUT); | 2215 | GNUNET_TIME_relative_to_absolute (GNUNET_CONSTANTS_IDLE_CONNECTION_TIMEOUT); |
2195 | receiver->hn = GNUNET_CONTAINER_heap_insert (receivers_heap, | 2216 | receiver->hn = GNUNET_CONTAINER_heap_insert (receivers_heap, |
@@ -2336,6 +2357,9 @@ enc_notify_cb (void *cls, | |||
2336 | const struct UDPAck *ack; | 2357 | const struct UDPAck *ack; |
2337 | 2358 | ||
2338 | (void) cls; | 2359 | (void) cls; |
2360 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | ||
2361 | "Storing UDPAck received from backchannel from %s\n", | ||
2362 | GNUNET_i2s_full (sender)); | ||
2339 | if ((ntohs (msg->type) != GNUNET_MESSAGE_TYPE_COMMUNICATOR_UDP_ACK) || | 2363 | if ((ntohs (msg->type) != GNUNET_MESSAGE_TYPE_COMMUNICATOR_UDP_ACK) || |
2340 | (ntohs (msg->size) != sizeof(struct UDPAck))) | 2364 | (ntohs (msg->size) != sizeof(struct UDPAck))) |
2341 | { | 2365 | { |