diff options
author | Christian Grothoff <christian@grothoff.org> | 2016-06-18 21:07:25 +0000 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2016-06-18 21:07:25 +0000 |
commit | 8e3ecd2bc42af4f56562932563a3eef4cc6c33f2 (patch) | |
tree | d67bf5472ca26c894a5a1fbbf3d8d454e8967852 /src/consensus | |
parent | a83a664ca22342a0ba23d6b76c2d33d7cb82a9ac (diff) | |
download | gnunet-8e3ecd2bc42af4f56562932563a3eef4cc6c33f2.tar.gz gnunet-8e3ecd2bc42af4f56562932563a3eef4cc6c33f2.zip |
fix consensus to match new MQ API -- and correct CONCLUDE_DONE to be fixed-size
Diffstat (limited to 'src/consensus')
-rw-r--r-- | src/consensus/consensus_api.c | 60 |
1 files changed, 37 insertions, 23 deletions
diff --git a/src/consensus/consensus_api.c b/src/consensus/consensus_api.c index 3ec2b3ff1..2a634bdd2 100644 --- a/src/consensus/consensus_api.c +++ b/src/consensus/consensus_api.c | |||
@@ -90,6 +90,7 @@ struct GNUNET_CONSENSUS_Handle | |||
90 | struct GNUNET_MQ_Handle *mq; | 90 | struct GNUNET_MQ_Handle *mq; |
91 | }; | 91 | }; |
92 | 92 | ||
93 | |||
93 | /** | 94 | /** |
94 | * FIXME: this should not bee necessary when the API | 95 | * FIXME: this should not bee necessary when the API |
95 | * issue has been fixed | 96 | * issue has been fixed |
@@ -105,25 +106,37 @@ struct InsertDoneInfo | |||
105 | * Called when the server has sent is a new element | 106 | * Called when the server has sent is a new element |
106 | * | 107 | * |
107 | * @param cls consensus handle | 108 | * @param cls consensus handle |
108 | * @param mh element message | 109 | * @param msg element message |
110 | */ | ||
111 | static int | ||
112 | check_new_element (void *cls, | ||
113 | const struct GNUNET_CONSENSUS_ElementMessage *msg) | ||
114 | { | ||
115 | /* any size is fine, elements are variable-size */ | ||
116 | return GNUNET_OK; | ||
117 | } | ||
118 | |||
119 | |||
120 | /** | ||
121 | * Called when the server has sent is a new element | ||
122 | * | ||
123 | * @param cls consensus handle | ||
124 | * @param msg element message | ||
109 | */ | 125 | */ |
110 | static void | 126 | static void |
111 | handle_new_element (void *cls, | 127 | handle_new_element (void *cls, |
112 | const struct GNUNET_MessageHeader *mh) | 128 | const struct GNUNET_CONSENSUS_ElementMessage *msg) |
113 | { | 129 | { |
114 | struct GNUNET_CONSENSUS_Handle *consensus = cls; | 130 | struct GNUNET_CONSENSUS_Handle *consensus = cls; |
115 | const struct GNUNET_CONSENSUS_ElementMessage *msg | ||
116 | = (const struct GNUNET_CONSENSUS_ElementMessage *) mh; | ||
117 | struct GNUNET_SET_Element element; | 131 | struct GNUNET_SET_Element element; |
118 | 132 | ||
119 | LOG (GNUNET_ERROR_TYPE_DEBUG, | 133 | LOG (GNUNET_ERROR_TYPE_DEBUG, |
120 | "received new element\n"); | 134 | "received new element\n"); |
121 | |||
122 | element.element_type = msg->element_type; | 135 | element.element_type = msg->element_type; |
123 | element.size = ntohs (msg->header.size) - sizeof (struct GNUNET_CONSENSUS_ElementMessage); | 136 | element.size = ntohs (msg->header.size) - sizeof (struct GNUNET_CONSENSUS_ElementMessage); |
124 | element.data = &msg[1]; | 137 | element.data = &msg[1]; |
125 | 138 | consensus->new_element_cb (consensus->new_element_cls, | |
126 | consensus->new_element_cb (consensus->new_element_cls, &element); | 139 | &element); |
127 | } | 140 | } |
128 | 141 | ||
129 | 142 | ||
@@ -139,16 +152,12 @@ handle_conclude_done (void *cls, | |||
139 | const struct GNUNET_MessageHeader *msg) | 152 | const struct GNUNET_MessageHeader *msg) |
140 | { | 153 | { |
141 | struct GNUNET_CONSENSUS_Handle *consensus = cls; | 154 | struct GNUNET_CONSENSUS_Handle *consensus = cls; |
142 | |||
143 | GNUNET_CONSENSUS_ConcludeCallback cc; | 155 | GNUNET_CONSENSUS_ConcludeCallback cc; |
144 | 156 | ||
145 | GNUNET_MQ_destroy (consensus->mq); | 157 | GNUNET_MQ_destroy (consensus->mq); |
146 | consensus->mq = NULL; | 158 | consensus->mq = NULL; |
147 | |||
148 | GNUNET_CLIENT_disconnect (consensus->client); | 159 | GNUNET_CLIENT_disconnect (consensus->client); |
149 | consensus->client = NULL; | 160 | consensus->client = NULL; |
150 | |||
151 | |||
152 | GNUNET_assert (NULL != (cc = consensus->conclude_cb)); | 161 | GNUNET_assert (NULL != (cc = consensus->conclude_cb)); |
153 | consensus->conclude_cb = NULL; | 162 | consensus->conclude_cb = NULL; |
154 | cc (consensus->conclude_cls); | 163 | cc (consensus->conclude_cls); |
@@ -165,9 +174,11 @@ handle_conclude_done (void *cls, | |||
165 | * @param error error code | 174 | * @param error error code |
166 | */ | 175 | */ |
167 | static void | 176 | static void |
168 | mq_error_handler (void *cls, enum GNUNET_MQ_Error error) | 177 | mq_error_handler (void *cls, |
178 | enum GNUNET_MQ_Error error) | ||
169 | { | 179 | { |
170 | LOG (GNUNET_ERROR_TYPE_WARNING, "consensus service disconnected us\n"); | 180 | LOG (GNUNET_ERROR_TYPE_WARNING, |
181 | "consensus service disconnected us\n"); | ||
171 | } | 182 | } |
172 | 183 | ||
173 | 184 | ||
@@ -198,18 +209,22 @@ GNUNET_CONSENSUS_create (const struct GNUNET_CONFIGURATION_Handle *cfg, | |||
198 | GNUNET_CONSENSUS_ElementCallback new_element_cb, | 209 | GNUNET_CONSENSUS_ElementCallback new_element_cb, |
199 | void *new_element_cls) | 210 | void *new_element_cls) |
200 | { | 211 | { |
201 | struct GNUNET_CONSENSUS_Handle *consensus; | 212 | GNUNET_MQ_hd_var_size (new_element, |
213 | GNUNET_MESSAGE_TYPE_CONSENSUS_CLIENT_RECEIVED_ELEMENT, | ||
214 | struct GNUNET_CONSENSUS_ElementMessage); | ||
215 | GNUNET_MQ_hd_fixed_size (conclude_done, | ||
216 | GNUNET_MESSAGE_TYPE_CONSENSUS_CLIENT_CONCLUDE_DONE, | ||
217 | struct GNUNET_MessageHeader); | ||
218 | struct GNUNET_CONSENSUS_Handle *consensus | ||
219 | = GNUNET_new (struct GNUNET_CONSENSUS_Handle); | ||
220 | struct GNUNET_MQ_MessageHandler mq_handlers[] = { | ||
221 | make_new_element_handler (consensus), | ||
222 | make_conclude_done_handler (consensus), | ||
223 | GNUNET_MQ_handler_end () | ||
224 | }; | ||
202 | struct GNUNET_CONSENSUS_JoinMessage *join_msg; | 225 | struct GNUNET_CONSENSUS_JoinMessage *join_msg; |
203 | struct GNUNET_MQ_Envelope *ev; | 226 | struct GNUNET_MQ_Envelope *ev; |
204 | const static struct GNUNET_MQ_MessageHandler mq_handlers[] = { | ||
205 | {handle_new_element, | ||
206 | GNUNET_MESSAGE_TYPE_CONSENSUS_CLIENT_RECEIVED_ELEMENT, 0}, | ||
207 | {handle_conclude_done, | ||
208 | GNUNET_MESSAGE_TYPE_CONSENSUS_CLIENT_CONCLUDE_DONE, 0}, | ||
209 | GNUNET_MQ_HANDLERS_END | ||
210 | }; | ||
211 | 227 | ||
212 | consensus = GNUNET_new (struct GNUNET_CONSENSUS_Handle); | ||
213 | consensus->cfg = cfg; | 228 | consensus->cfg = cfg; |
214 | consensus->new_element_cb = new_element_cb; | 229 | consensus->new_element_cb = new_element_cb; |
215 | consensus->new_element_cls = new_element_cls; | 230 | consensus->new_element_cls = new_element_cls; |
@@ -334,4 +349,3 @@ GNUNET_CONSENSUS_destroy (struct GNUNET_CONSENSUS_Handle *consensus) | |||
334 | } | 349 | } |
335 | GNUNET_free (consensus); | 350 | GNUNET_free (consensus); |
336 | } | 351 | } |
337 | |||