aboutsummaryrefslogtreecommitdiff
path: root/src/consensus
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2016-06-18 21:07:25 +0000
committerChristian Grothoff <christian@grothoff.org>2016-06-18 21:07:25 +0000
commit8e3ecd2bc42af4f56562932563a3eef4cc6c33f2 (patch)
treed67bf5472ca26c894a5a1fbbf3d8d454e8967852 /src/consensus
parenta83a664ca22342a0ba23d6b76c2d33d7cb82a9ac (diff)
downloadgnunet-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.c60
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 */
111static int
112check_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 */
110static void 126static void
111handle_new_element (void *cls, 127handle_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 */
167static void 176static void
168mq_error_handler (void *cls, enum GNUNET_MQ_Error error) 177mq_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