diff options
author | Christian Grothoff <christian@grothoff.org> | 2011-10-13 14:17:18 +0000 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2011-10-13 14:17:18 +0000 |
commit | e35111701eb4dc745372f077c2f0d7c991ac1fac (patch) | |
tree | 42653444b6b4305e65823c446180783e5858caa5 | |
parent | 76fbf6c253e780078f4ac5acf43ff89f95c78253 (diff) | |
download | gnunet-e35111701eb4dc745372f077c2f0d7c991ac1fac.tar.gz gnunet-e35111701eb4dc745372f077c2f0d7c991ac1fac.zip |
finish
-rw-r--r-- | src/ats/ats_api_performance.c | 51 |
1 files changed, 45 insertions, 6 deletions
diff --git a/src/ats/ats_api_performance.c b/src/ats/ats_api_performance.c index 4dda50cce..cf948da48 100644 --- a/src/ats/ats_api_performance.c +++ b/src/ats/ats_api_performance.c | |||
@@ -448,21 +448,60 @@ GNUNET_ATS_change_preference (struct GNUNET_ATS_PerformanceHandle *ph, | |||
448 | size_t msize; | 448 | size_t msize; |
449 | uint32_t count; | 449 | uint32_t count; |
450 | struct PreferenceInformation *pi; | 450 | struct PreferenceInformation *pi; |
451 | va_list ap; | ||
452 | enum GNUNET_ATS_PreferenceKind kind; | ||
451 | 453 | ||
452 | // FIXME: set 'count' | 454 | count = 0; |
455 | va_start (ap, peer); | ||
456 | while (GNUNET_ATS_PREFERENCE_END != (kind = va_arg (ap, enum GNUNET_ATS_PreferenceKind))) | ||
457 | { | ||
458 | switch (kind) | ||
459 | { | ||
460 | case GNUNET_ATS_PREFERENCE_BANDWIDTH: | ||
461 | count++; | ||
462 | (void) va_arg (ap, double); | ||
463 | break; | ||
464 | case GNUNET_ATS_PREFERENCE_LATENCY: | ||
465 | count++; | ||
466 | (void) va_arg (ap, double); | ||
467 | break; | ||
468 | default: | ||
469 | GNUNET_assert (0); | ||
470 | } | ||
471 | } | ||
472 | va_end (ap); | ||
473 | msize = count * sizeof (struct PreferenceInformation) + | ||
474 | sizeof (struct ChangePreferenceMessage); | ||
453 | p = GNUNET_malloc (sizeof (struct PendingMessage) + | 475 | p = GNUNET_malloc (sizeof (struct PendingMessage) + |
454 | sizeof (struct ChangePreferenceMessage) + | 476 | msize); |
455 | count * sizeof (struct PreferenceInformation)); | ||
456 | p->size = msize; | 477 | p->size = msize; |
457 | p->is_init = GNUNET_NO; | 478 | p->is_init = GNUNET_NO; |
458 | m = (struct ReservationRequestMessage*) &p[1]; | 479 | m = (struct ChangePreferenceMessage*) &p[1]; |
459 | m->header.type = htons (GNUNET_MESSAGE_TYPE_ATS_ADDRESS_UPDATE); | 480 | m->header.type = htons (GNUNET_MESSAGE_TYPE_ATS_ADDRESS_UPDATE); |
460 | m->header.size = htons (msize); | 481 | m->header.size = htons (msize); |
461 | m->num_preferences = htonl (count); | 482 | m->num_preferences = htonl (count); |
462 | m->peer = *peer; | 483 | m->peer = *peer; |
463 | pi = (struct PreferenceInformation*) &m[1]; | 484 | pi = (struct PreferenceInformation*) &m[1]; |
464 | // FIXME: fill in 'pi' | 485 | count = 0; |
465 | 486 | va_start (ap, peer); | |
487 | while (GNUNET_ATS_PREFERENCE_END != (kind = va_arg (ap, enum GNUNET_ATS_PreferenceKind))) | ||
488 | { | ||
489 | pi[count].preference_kind = htonl (kind); | ||
490 | switch (kind) | ||
491 | { | ||
492 | case GNUNET_ATS_PREFERENCE_BANDWIDTH: | ||
493 | pi[count].preference_value = (float) va_arg (ap, double); | ||
494 | count++; | ||
495 | break; | ||
496 | case GNUNET_ATS_PREFERENCE_LATENCY: | ||
497 | pi[count].preference_value = (float) va_arg (ap, double); | ||
498 | count++; | ||
499 | break; | ||
500 | default: | ||
501 | GNUNET_assert (0); | ||
502 | } | ||
503 | } | ||
504 | va_end (ap); | ||
466 | GNUNET_CONTAINER_DLL_insert_tail (ph->pending_head, | 505 | GNUNET_CONTAINER_DLL_insert_tail (ph->pending_head, |
467 | ph->pending_tail, | 506 | ph->pending_tail, |
468 | p); | 507 | p); |