diff options
author | Elias Summermatter <elias.summermatter@seccom.ch> | 2021-02-17 18:00:43 +0100 |
---|---|---|
committer | Elias Summermatter <elias.summermatter@seccom.ch> | 2021-02-17 18:00:43 +0100 |
commit | 08adc88b441694e02c3e440836e4ff9585cf3f88 (patch) | |
tree | c500cf14a1c39cb605de7b1f985563ff0e770dee | |
parent | d5bf65f2bf7edea40b6f4250227d6c1711913f71 (diff) | |
download | gnunet-08adc88b441694e02c3e440836e4ff9585cf3f88.tar.gz gnunet-08adc88b441694e02c3e440836e4ff9585cf3f88.zip |
Setu integrated new phase full receiving as described in rfc draft
-rw-r--r-- | src/setu/gnunet-service-setu.c | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/src/setu/gnunet-service-setu.c b/src/setu/gnunet-service-setu.c index 7ddece8e8..9ec482559 100644 --- a/src/setu/gnunet-service-setu.c +++ b/src/setu/gnunet-service-setu.c | |||
@@ -138,6 +138,12 @@ enum UnionOperationPhase | |||
138 | * that the local peer is missing. | 138 | * that the local peer is missing. |
139 | */ | 139 | */ |
140 | PHASE_FULL_SENDING, | 140 | PHASE_FULL_SENDING, |
141 | |||
142 | /** | ||
143 | * Phase that receives full set first and then sends elements that are | ||
144 | * the local peer missing | ||
145 | */ | ||
146 | PHASE_FULL_RECEIVING | ||
141 | }; | 147 | }; |
142 | 148 | ||
143 | 149 | ||
@@ -1448,7 +1454,7 @@ handle_union_p2p_strata_estimator (void *cls, | |||
1448 | 1454 | ||
1449 | LOG (GNUNET_ERROR_TYPE_DEBUG, | 1455 | LOG (GNUNET_ERROR_TYPE_DEBUG, |
1450 | "Telling other peer that we expect its full set\n"); | 1456 | "Telling other peer that we expect its full set\n"); |
1451 | op->phase = PHASE_EXPECT_IBF; | 1457 | op->phase = PHASE_FULL_RECEIVING; |
1452 | ev = GNUNET_MQ_msg_header ( | 1458 | ev = GNUNET_MQ_msg_header ( |
1453 | GNUNET_MESSAGE_TYPE_SETU_P2P_REQUEST_FULL); | 1459 | GNUNET_MESSAGE_TYPE_SETU_P2P_REQUEST_FULL); |
1454 | GNUNET_MQ_send (op->mq, | 1460 | GNUNET_MQ_send (op->mq, |
@@ -2051,6 +2057,12 @@ check_union_p2p_full_element (void *cls, | |||
2051 | { | 2057 | { |
2052 | struct Operation *op = cls; | 2058 | struct Operation *op = cls; |
2053 | 2059 | ||
2060 | // Allow only receiving of full element message if in expect IBF or in PHASE_FULL_RECEIVING state | ||
2061 | if ( op->phase != PHASE_EXPECT_IBF && op->phase != PHASE_FULL_RECEIVING ) { | ||
2062 | GNUNET_break_op (0); | ||
2063 | return GNUNET_SYSERR; | ||
2064 | } | ||
2065 | |||
2054 | (void) op; | 2066 | (void) op; |
2055 | // FIXME: check that we expect full elements here? | 2067 | // FIXME: check that we expect full elements here? |
2056 | return GNUNET_OK; | 2068 | return GNUNET_OK; |
@@ -2072,6 +2084,8 @@ handle_union_p2p_full_element (void *cls, | |||
2072 | struct KeyEntry *ke; | 2084 | struct KeyEntry *ke; |
2073 | uint16_t element_size; | 2085 | uint16_t element_size; |
2074 | 2086 | ||
2087 | op->phase = PHASE_FULL_RECEIVING; | ||
2088 | |||
2075 | element_size = ntohs (emsg->header.size) | 2089 | element_size = ntohs (emsg->header.size) |
2076 | - sizeof(struct GNUNET_SETU_ElementMessage); | 2090 | - sizeof(struct GNUNET_SETU_ElementMessage); |
2077 | ee = GNUNET_malloc (sizeof(struct ElementEntry) + element_size); | 2091 | ee = GNUNET_malloc (sizeof(struct ElementEntry) + element_size); |