aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2011-10-13 14:09:02 +0000
committerChristian Grothoff <christian@grothoff.org>2011-10-13 14:09:02 +0000
commitdd311ae144f868bf37c3af8934a66c1d3c78b68b (patch)
tree6b42d6180c28f5145c11bb692d60eb3d1db00bd6
parent0637ca6916fa115c0dbaa82fead7b20ddaa54b7d (diff)
downloadgnunet-dd311ae144f868bf37c3af8934a66c1d3c78b68b.tar.gz
gnunet-dd311ae144f868bf37c3af8934a66c1d3c78b68b.zip
parse updated message type
-rw-r--r--src/ats/ats_api_scheduling.c13
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);