aboutsummaryrefslogtreecommitdiff
path: root/src/ats/ats_api_scheduling.c
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2015-02-10 23:24:01 +0000
committerChristian Grothoff <christian@grothoff.org>2015-02-10 23:24:01 +0000
commit1c323bd4cbb388a9e7515a1f733a3062bf093aee (patch)
tree7cc525d79149d44840b9f7a0040aaf3e69ecd665 /src/ats/ats_api_scheduling.c
parentaedaaed687db1ff20b447378f01ad7306921450c (diff)
downloadgnunet-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.c77
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 *
684GNUNET_ATS_address_add (struct GNUNET_ATS_SchedulingHandle *sh, 671GNUNET_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 */
799void 777void
800GNUNET_ATS_address_update (struct GNUNET_ATS_AddressRecord *ar, 778GNUNET_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);