aboutsummaryrefslogtreecommitdiff
path: root/src/dv/dv_api.c
diff options
context:
space:
mode:
authorNathan S. Evans <evans@in.tum.de>2010-03-12 17:30:49 +0000
committerNathan S. Evans <evans@in.tum.de>2010-03-12 17:30:49 +0000
commit54ce17ec50827d3a905a3cb182ccd3c18bbd3668 (patch)
tree61b35438d97bf9985cf220edb9ae3c2e744d5162 /src/dv/dv_api.c
parent81b31b0577c1c4e3ddfc736f65d3329b5afad1a9 (diff)
downloadgnunet-54ce17ec50827d3a905a3cb182ccd3c18bbd3668.tar.gz
gnunet-54ce17ec50827d3a905a3cb182ccd3c18bbd3668.zip
wont work because someone made my random heap function unpossible. committing for posterity mostly
Diffstat (limited to 'src/dv/dv_api.c')
-rw-r--r--src/dv/dv_api.c19
1 files changed, 14 insertions, 5 deletions
diff --git a/src/dv/dv_api.c b/src/dv/dv_api.c
index 15ef822d6..9e99790fb 100644
--- a/src/dv/dv_api.c
+++ b/src/dv/dv_api.c
@@ -250,7 +250,10 @@ void handle_message_receipt (void *cls,
250{ 250{
251 struct GNUNET_DV_Handle *handle = cls; 251 struct GNUNET_DV_Handle *handle = cls;
252 struct GNUNET_DV_MessageReceived *received_msg; 252 struct GNUNET_DV_MessageReceived *received_msg;
253 size_t packed_msg_len;
254 size_t sender_address_len;
253 char *sender_address; 255 char *sender_address;
256 char *packed_msg;
254 257
255 GNUNET_assert(ntohs(msg->type) == GNUNET_MESSAGE_TYPE_TRANSPORT_DV_RECEIVE); 258 GNUNET_assert(ntohs(msg->type) == GNUNET_MESSAGE_TYPE_TRANSPORT_DV_RECEIVE);
256 259
@@ -258,17 +261,22 @@ void handle_message_receipt (void *cls,
258 return; 261 return;
259 262
260 received_msg = (struct GNUNET_DV_MessageReceived *)msg; 263 received_msg = (struct GNUNET_DV_MessageReceived *)msg;
261 GNUNET_assert(ntohs(msg->size) == (sizeof(struct GNUNET_DV_MessageReceived) + ntohs(received_msg->msg->size) + ntohs(received_msg->sender_address_len))); 264 packed_msg_len = ntohs(received_msg->msg_len);
265 sender_address_len = ntohs(received_msg->sender_address_len);
266 GNUNET_assert(ntohs(msg->size) == (sizeof(struct GNUNET_DV_MessageReceived) + packed_msg_len + sender_address_len));
262 267
263 sender_address = GNUNET_malloc(ntohs(received_msg->sender_address_len)); 268 sender_address = GNUNET_malloc(sender_address_len);
264 sender_address = memcpy(sender_address, &received_msg[1], ntohs(received_msg->sender_address_len)); 269 memcpy(sender_address, &received_msg[1], sender_address_len);
270 packed_msg = GNUNET_malloc(packed_msg_len);
271 memcpy(packed_msg, &received_msg[1 + sender_address_len], packed_msg_len);
265 272
266 handle->receive_handler(handle->receive_cls, 273 handle->receive_handler(handle->receive_cls,
267 &received_msg->sender, 274 &received_msg->sender,
268 received_msg->msg, 275 packed_msg,
276 packed_msg_len,
269 ntohl(received_msg->distance), 277 ntohl(received_msg->distance),
270 sender_address, 278 sender_address,
271 ntohs(received_msg->sender_address_len)); 279 sender_address_len);
272 280
273 GNUNET_free(sender_address); 281 GNUNET_free(sender_address);
274 282
@@ -281,6 +289,7 @@ void handle_message_receipt (void *cls,
281 * Send a message from the plugin to the DV service indicating that 289 * Send a message from the plugin to the DV service indicating that
282 * a message should be sent via DV to some peer. 290 * a message should be sent via DV to some peer.
283 * 291 *
292 * @param dv_handle the handle to the DV api
284 * @param target the final target of the message 293 * @param target the final target of the message
285 * @param msgbuf the msg(s) to send 294 * @param msgbuf the msg(s) to send
286 * @param msgbuf_size the size of msgbuf 295 * @param msgbuf_size the size of msgbuf