diff options
author | Christian Grothoff <christian@grothoff.org> | 2011-10-13 14:09:02 +0000 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2011-10-13 14:09:02 +0000 |
commit | dd311ae144f868bf37c3af8934a66c1d3c78b68b (patch) | |
tree | 6b42d6180c28f5145c11bb692d60eb3d1db00bd6 | |
parent | 0637ca6916fa115c0dbaa82fead7b20ddaa54b7d (diff) | |
download | gnunet-dd311ae144f868bf37c3af8934a66c1d3c78b68b.tar.gz gnunet-dd311ae144f868bf37c3af8934a66c1d3c78b68b.zip |
parse updated message type
-rw-r--r-- | src/ats/ats_api_scheduling.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/src/ats/ats_api_scheduling.c b/src/ats/ats_api_scheduling.c index d379edd77..8b3e849b2 100644 --- a/src/ats/ats_api_scheduling.c +++ b/src/ats/ats_api_scheduling.c | |||
@@ -277,9 +277,11 @@ process_ats_message (void *cls, | |||
277 | { | 277 | { |
278 | struct GNUNET_ATS_SchedulingHandle *sh = cls; | 278 | struct GNUNET_ATS_SchedulingHandle *sh = cls; |
279 | const struct AddressSuggestionMessage *m; | 279 | const struct AddressSuggestionMessage *m; |
280 | const struct GNUNET_TRANSPORT_ATS_Information *atsi; | ||
280 | const char *address; | 281 | const char *address; |
281 | const char *plugin_name; | 282 | const char *plugin_name; |
282 | uint16_t address_length; | 283 | uint16_t address_length; |
284 | uint32_t ats_count; | ||
283 | 285 | ||
284 | if (NULL == msg) | 286 | if (NULL == msg) |
285 | { | 287 | { |
@@ -298,13 +300,16 @@ process_ats_message (void *cls, | |||
298 | return; | 300 | return; |
299 | } | 301 | } |
300 | m = (const struct AddressSuggestionMessage*) msg; | 302 | m = (const struct AddressSuggestionMessage*) msg; |
301 | address = (const char*) &m[1]; | 303 | ats_count = ntohl (m->ats_count); |
302 | address_length = ntohs (m->address_length); | 304 | address_length = ntohs (m->address_length); |
305 | atsi = (const struct GNUNET_TRANSPORT_ATS_Information*) &m[1]; | ||
306 | address = (const char*) &atsi[ats_count]; | ||
303 | plugin_name = &address[address_length]; | 307 | plugin_name = &address[address_length]; |
304 | GNUNET_break (0 == ntohl (m->reserved)); | ||
305 | if ( (ntohs (m->address_length) + | 308 | if ( (ntohs (m->address_length) + |
306 | ntohs (m->plugin_name_length) + | 309 | ntohs (m->plugin_name_length) + |
310 | ats_count * sizeof (struct GNUNET_TRANSPORT_ATS_Information) + | ||
307 | sizeof (struct AddressSuggestionMessage) != ntohs (msg->size)) || | 311 | sizeof (struct AddressSuggestionMessage) != ntohs (msg->size)) || |
312 | (ats_count > GNUNET_SERVER_MAX_MESSAGE_SIZE / sizeof (struct GNUNET_TRANSPORT_ATS_Information)) || | ||
308 | (plugin_name[ntohs (m->plugin_name_length) - 1] != '\0') ) | 313 | (plugin_name[ntohs (m->plugin_name_length) - 1] != '\0') ) |
309 | { | 314 | { |
310 | GNUNET_break (0); | 315 | GNUNET_break (0); |
@@ -319,7 +324,9 @@ process_ats_message (void *cls, | |||
319 | address, address_length, | 324 | address, address_length, |
320 | find_session (sh, ntohl (m->session_id)), | 325 | find_session (sh, ntohl (m->session_id)), |
321 | m->bandwidth_out, | 326 | m->bandwidth_out, |
322 | m->bandwidth_in); | 327 | m->bandwidth_in, |
328 | atsi, | ||
329 | ats_count); | ||
323 | GNUNET_CLIENT_receive (sh->client, | 330 | GNUNET_CLIENT_receive (sh->client, |
324 | &process_ats_message, sh, | 331 | &process_ats_message, sh, |
325 | GNUNET_TIME_UNIT_FOREVER_REL); | 332 | GNUNET_TIME_UNIT_FOREVER_REL); |