diff options
author | Christian Grothoff <christian@grothoff.org> | 2015-02-10 23:24:01 +0000 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2015-02-10 23:24:01 +0000 |
commit | 1c323bd4cbb388a9e7515a1f733a3062bf093aee (patch) | |
tree | 7cc525d79149d44840b9f7a0040aaf3e69ecd665 /src/ats/ats_api_scheduling.c | |
parent | aedaaed687db1ff20b447378f01ad7306921450c (diff) | |
download | gnunet-1c323bd4cbb388a9e7515a1f733a3062bf093aee.tar.gz gnunet-1c323bd4cbb388a9e7515a1f733a3062bf093aee.zip |
fixing #3657 (replace ATS_Information with struct), but WIHTOUT fixing ATS testcases yet
Diffstat (limited to 'src/ats/ats_api_scheduling.c')
-rw-r--r-- | src/ats/ats_api_scheduling.c | 77 |
1 files changed, 20 insertions, 57 deletions
diff --git a/src/ats/ats_api_scheduling.c b/src/ats/ats_api_scheduling.c index ed82dd2ad..f02e4a9e7 100644 --- a/src/ats/ats_api_scheduling.c +++ b/src/ats/ats_api_scheduling.c | |||
@@ -73,14 +73,9 @@ struct GNUNET_ATS_AddressRecord | |||
73 | struct Session *session; | 73 | struct Session *session; |
74 | 74 | ||
75 | /** | 75 | /** |
76 | * Array with performance data about the address. | 76 | * Performance data about the address. |
77 | */ | 77 | */ |
78 | struct GNUNET_ATS_Information *ats; | 78 | struct GNUNET_ATS_PropertiesNBO properties; |
79 | |||
80 | /** | ||
81 | * Number of entries in @e ats. | ||
82 | */ | ||
83 | uint32_t ats_count; | ||
84 | 79 | ||
85 | /** | 80 | /** |
86 | * Which slot (index) in the session array does | 81 | * Which slot (index) in the session array does |
@@ -487,7 +482,6 @@ send_add_address_message (struct GNUNET_ATS_SchedulingHandle *sh, | |||
487 | { | 482 | { |
488 | struct GNUNET_MQ_Envelope *ev; | 483 | struct GNUNET_MQ_Envelope *ev; |
489 | struct AddressAddMessage *m; | 484 | struct AddressAddMessage *m; |
490 | struct GNUNET_ATS_Information *am; | ||
491 | char *pm; | 485 | char *pm; |
492 | size_t namelen; | 486 | size_t namelen; |
493 | size_t msize; | 487 | size_t msize; |
@@ -497,16 +491,14 @@ send_add_address_message (struct GNUNET_ATS_SchedulingHandle *sh, | |||
497 | namelen = (NULL == ar->address->transport_name) | 491 | namelen = (NULL == ar->address->transport_name) |
498 | ? 0 | 492 | ? 0 |
499 | : strlen (ar->address->transport_name) + 1; | 493 | : strlen (ar->address->transport_name) + 1; |
500 | msize = ar->address->address_length + | 494 | msize = ar->address->address_length + namelen; |
501 | ar->ats_count * sizeof (struct GNUNET_ATS_Information) + namelen; | ||
502 | |||
503 | ev = GNUNET_MQ_msg_extra (m, msize, GNUNET_MESSAGE_TYPE_ATS_ADDRESS_ADD); | 495 | ev = GNUNET_MQ_msg_extra (m, msize, GNUNET_MESSAGE_TYPE_ATS_ADDRESS_ADD); |
504 | m->ats_count = htonl (ar->ats_count); | ||
505 | m->peer = ar->address->peer; | 496 | m->peer = ar->address->peer; |
506 | m->address_length = htons (ar->address->address_length); | 497 | m->address_length = htons (ar->address->address_length); |
507 | m->address_local_info = htonl ((uint32_t) ar->address->local_info); | 498 | m->address_local_info = htonl ((uint32_t) ar->address->local_info); |
508 | m->plugin_name_length = htons (namelen); | 499 | m->plugin_name_length = htons (namelen); |
509 | m->session_id = htonl (ar->slot); | 500 | m->session_id = htonl (ar->slot); |
501 | m->properties = ar->properties; | ||
510 | 502 | ||
511 | LOG (GNUNET_ERROR_TYPE_DEBUG, | 503 | LOG (GNUNET_ERROR_TYPE_DEBUG, |
512 | "Adding address for peer `%s', plugin `%s', session %p slot %u\n", | 504 | "Adding address for peer `%s', plugin `%s', session %p slot %u\n", |
@@ -514,11 +506,7 @@ send_add_address_message (struct GNUNET_ATS_SchedulingHandle *sh, | |||
514 | ar->address->transport_name, | 506 | ar->address->transport_name, |
515 | ar->session, | 507 | ar->session, |
516 | ar->slot); | 508 | ar->slot); |
517 | am = (struct GNUNET_ATS_Information *) &m[1]; | 509 | pm = (char *) &m[1]; |
518 | memcpy (am, | ||
519 | ar->ats, | ||
520 | ar->ats_count * sizeof (struct GNUNET_ATS_Information)); | ||
521 | pm = (char *) &am[ar->ats_count]; | ||
522 | memcpy (pm, | 510 | memcpy (pm, |
523 | ar->address->address, | 511 | ar->address->address, |
524 | ar->address->address_length); | 512 | ar->address->address_length); |
@@ -675,8 +663,7 @@ GNUNET_ATS_session_known (struct GNUNET_ATS_SchedulingHandle *sh, | |||
675 | * @param sh handle | 663 | * @param sh handle |
676 | * @param address the address | 664 | * @param address the address |
677 | * @param session session handle, can be NULL | 665 | * @param session session handle, can be NULL |
678 | * @param ats performance data for the address | 666 | * @param prop performance data for the address |
679 | * @param ats_count number of performance records in @a ats | ||
680 | * @return handle to the address representation inside ATS, NULL | 667 | * @return handle to the address representation inside ATS, NULL |
681 | * on error (i.e. ATS knows this exact address already) | 668 | * on error (i.e. ATS knows this exact address already) |
682 | */ | 669 | */ |
@@ -684,8 +671,7 @@ struct GNUNET_ATS_AddressRecord * | |||
684 | GNUNET_ATS_address_add (struct GNUNET_ATS_SchedulingHandle *sh, | 671 | GNUNET_ATS_address_add (struct GNUNET_ATS_SchedulingHandle *sh, |
685 | const struct GNUNET_HELLO_Address *address, | 672 | const struct GNUNET_HELLO_Address *address, |
686 | struct Session *session, | 673 | struct Session *session, |
687 | const struct GNUNET_ATS_Information *ats, | 674 | const struct GNUNET_ATS_Properties *prop) |
688 | uint32_t ats_count) | ||
689 | { | 675 | { |
690 | struct GNUNET_ATS_AddressRecord *ar; | 676 | struct GNUNET_ATS_AddressRecord *ar; |
691 | size_t namelen; | 677 | size_t namelen; |
@@ -701,13 +687,10 @@ GNUNET_ATS_address_add (struct GNUNET_ATS_SchedulingHandle *sh, | |||
701 | namelen = (NULL == address->transport_name) | 687 | namelen = (NULL == address->transport_name) |
702 | ? 0 | 688 | ? 0 |
703 | : strlen (address->transport_name) + 1; | 689 | : strlen (address->transport_name) + 1; |
704 | msize = address->address_length + | 690 | msize = address->address_length + namelen; |
705 | ats_count * sizeof (struct GNUNET_ATS_Information) + namelen; | ||
706 | if ((msize + sizeof (struct AddressUpdateMessage) >= GNUNET_SERVER_MAX_MESSAGE_SIZE) || | 691 | if ((msize + sizeof (struct AddressUpdateMessage) >= GNUNET_SERVER_MAX_MESSAGE_SIZE) || |
707 | (address->address_length >= GNUNET_SERVER_MAX_MESSAGE_SIZE) || | 692 | (address->address_length >= GNUNET_SERVER_MAX_MESSAGE_SIZE) || |
708 | (namelen >= GNUNET_SERVER_MAX_MESSAGE_SIZE) || | 693 | (namelen >= GNUNET_SERVER_MAX_MESSAGE_SIZE) ) |
709 | (ats_count >= | ||
710 | GNUNET_SERVER_MAX_MESSAGE_SIZE / sizeof (struct GNUNET_ATS_Information))) | ||
711 | { | 694 | { |
712 | /* address too large for us, this should not happen */ | 695 | /* address too large for us, this should not happen */ |
713 | GNUNET_break (0); | 696 | GNUNET_break (0); |
@@ -729,12 +712,8 @@ GNUNET_ATS_address_add (struct GNUNET_ATS_SchedulingHandle *sh, | |||
729 | ar->slot = s; | 712 | ar->slot = s; |
730 | ar->session = session; | 713 | ar->session = session; |
731 | ar->address = GNUNET_HELLO_address_copy (address); | 714 | ar->address = GNUNET_HELLO_address_copy (address); |
732 | GNUNET_array_grow (ar->ats, | 715 | GNUNET_ATS_properties_hton (&ar->properties, |
733 | ar->ats_count, | 716 | prop); |
734 | ats_count); | ||
735 | memcpy (ar->ats, | ||
736 | ats, | ||
737 | ats_count * sizeof (struct GNUNET_ATS_Information)); | ||
738 | sh->session_array[s] = ar; | 717 | sh->session_array[s] = ar; |
739 | send_add_address_message (sh, ar); | 718 | send_add_address_message (sh, ar); |
740 | return ar; | 719 | return ar; |
@@ -793,19 +772,15 @@ GNUNET_ATS_address_del_session (struct GNUNET_ATS_AddressRecord *ar, | |||
793 | * for later use). Update bandwidth assignments. | 772 | * for later use). Update bandwidth assignments. |
794 | * | 773 | * |
795 | * @param ar address record to update information for | 774 | * @param ar address record to update information for |
796 | * @param ats performance data for the address | 775 | * @param prop performance data for the address |
797 | * @param ats_count number of performance records in @a ats | ||
798 | */ | 776 | */ |
799 | void | 777 | void |
800 | GNUNET_ATS_address_update (struct GNUNET_ATS_AddressRecord *ar, | 778 | GNUNET_ATS_address_update (struct GNUNET_ATS_AddressRecord *ar, |
801 | const struct GNUNET_ATS_Information *ats, | 779 | const struct GNUNET_ATS_Properties *prop) |
802 | uint32_t ats_count) | ||
803 | { | 780 | { |
804 | struct GNUNET_ATS_SchedulingHandle *sh = ar->sh; | 781 | struct GNUNET_ATS_SchedulingHandle *sh = ar->sh; |
805 | struct GNUNET_MQ_Envelope *ev; | 782 | struct GNUNET_MQ_Envelope *ev; |
806 | struct AddressUpdateMessage *m; | 783 | struct AddressUpdateMessage *m; |
807 | struct GNUNET_ATS_Information *am; | ||
808 | size_t msize; | ||
809 | 784 | ||
810 | LOG (GNUNET_ERROR_TYPE_DEBUG, | 785 | LOG (GNUNET_ERROR_TYPE_DEBUG, |
811 | "Updating address for peer `%s', plugin `%s', session %p slot %u\n", | 786 | "Updating address for peer `%s', plugin `%s', session %p slot %u\n", |
@@ -813,25 +788,16 @@ GNUNET_ATS_address_update (struct GNUNET_ATS_AddressRecord *ar, | |||
813 | ar->address->transport_name, | 788 | ar->address->transport_name, |
814 | ar->session, | 789 | ar->session, |
815 | ar->slot); | 790 | ar->slot); |
816 | GNUNET_array_grow (ar->ats, | 791 | GNUNET_ATS_properties_hton (&ar->properties, |
817 | ar->ats_count, | 792 | prop); |
818 | ats_count); | ||
819 | memcpy (ar->ats, | ||
820 | ats, | ||
821 | ats_count * sizeof (struct GNUNET_ATS_Information)); | ||
822 | |||
823 | if (NULL == sh->mq) | 793 | if (NULL == sh->mq) |
824 | return; /* disconnected, skip for now */ | 794 | return; /* disconnected, skip for now */ |
825 | msize = ar->ats_count * sizeof (struct GNUNET_ATS_Information); | 795 | ev = GNUNET_MQ_msg (m, GNUNET_MESSAGE_TYPE_ATS_ADDRESS_UPDATE); |
826 | ev = GNUNET_MQ_msg_extra (m, msize, GNUNET_MESSAGE_TYPE_ATS_ADDRESS_UPDATE); | ||
827 | m->ats_count = htonl (ar->ats_count); | ||
828 | m->peer = ar->address->peer; | ||
829 | m->session_id = htonl (ar->slot); | 796 | m->session_id = htonl (ar->slot); |
830 | am = (struct GNUNET_ATS_Information *) &m[1]; | 797 | m->peer = ar->address->peer; |
831 | memcpy (am, | 798 | m->properties = ar->properties; |
832 | ar->ats, | 799 | GNUNET_MQ_send (sh->mq, |
833 | ar->ats_count * sizeof (struct GNUNET_ATS_Information)); | 800 | ev); |
834 | GNUNET_MQ_send (sh->mq, ev); | ||
835 | } | 801 | } |
836 | 802 | ||
837 | 803 | ||
@@ -857,9 +823,6 @@ GNUNET_ATS_address_destroy (struct GNUNET_ATS_AddressRecord *ar) | |||
857 | GNUNET_break (NULL == ar->session); | 823 | GNUNET_break (NULL == ar->session); |
858 | ar->session = NULL; | 824 | ar->session = NULL; |
859 | ar->in_destroy = GNUNET_YES; | 825 | ar->in_destroy = GNUNET_YES; |
860 | GNUNET_array_grow (ar->ats, | ||
861 | ar->ats_count, | ||
862 | 0); | ||
863 | if (NULL == sh->mq) | 826 | if (NULL == sh->mq) |
864 | return; | 827 | return; |
865 | ev = GNUNET_MQ_msg (m, GNUNET_MESSAGE_TYPE_ATS_ADDRESS_DESTROYED); | 828 | ev = GNUNET_MQ_msg (m, GNUNET_MESSAGE_TYPE_ATS_ADDRESS_DESTROYED); |