diff options
author | Sree Harsha Totakura <totakura@in.tum.de> | 2013-04-02 13:31:20 +0000 |
---|---|---|
committer | Sree Harsha Totakura <totakura@in.tum.de> | 2013-04-02 13:31:20 +0000 |
commit | d723a288c2185671ef410a70d9113d1f19a5c36a (patch) | |
tree | 2aa1f4c7e0001bbe02d4e6fe465c4e12af060dd1 /src/testbed/testbed_api_peers.c | |
parent | a59b9fbcf5f6d05501b1d0b403abe41e7ac0e60e (diff) | |
download | gnunet-d723a288c2185671ef410a70d9113d1f19a5c36a.tar.gz gnunet-d723a288c2185671ef410a70d9113d1f19a5c36a.zip |
- manage services of peers (client API)
Diffstat (limited to 'src/testbed/testbed_api_peers.c')
-rw-r--r-- | src/testbed/testbed_api_peers.c | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/src/testbed/testbed_api_peers.c b/src/testbed/testbed_api_peers.c index 8944ec776..252131313 100644 --- a/src/testbed/testbed_api_peers.c +++ b/src/testbed/testbed_api_peers.c | |||
@@ -774,5 +774,93 @@ GNUNET_TESTBED_overlay_connect (void *op_cls, | |||
774 | } | 774 | } |
775 | 775 | ||
776 | 776 | ||
777 | static void | ||
778 | opstart_manage_service (void *cls) | ||
779 | { | ||
780 | struct OperationContext *opc = cls; | ||
781 | struct GNUNET_TESTBED_ManagePeerServiceMessage *msg; | ||
782 | struct ManageServiceData *data; | ||
783 | |||
784 | GNUNET_assert (NULL != (data = opc->data)); | ||
785 | msg = GNUNET_malloc (data->msize); | ||
786 | msg->header.size = htons (data->msize); | ||
787 | msg->header.type = htons (GNUNET_MESSAGE_TYPE_TESTBED_MANAGE_PEER_SERVICE); | ||
788 | msg->peer_id = htonl (data->peer->unique_id); | ||
789 | msg->operation_id = GNUNET_htonll (opc->id); | ||
790 | msg->start = (uint8_t) data->start; | ||
791 | (void) memcpy (&msg[1], data->service_name, data->msize | ||
792 | - sizeof (struct GNUNET_TESTBED_ManagePeerServiceMessage)); | ||
793 | GNUNET_free (data->service_name); | ||
794 | data->service_name = NULL; | ||
795 | opc->state = OPC_STATE_STARTED; | ||
796 | GNUNET_CONTAINER_DLL_insert_tail (opc->c->ocq_head, opc->c->ocq_tail, opc); | ||
797 | GNUNET_TESTBED_queue_message_ (opc->c, &msg->header); | ||
798 | } | ||
799 | |||
800 | |||
801 | static void | ||
802 | oprelease_manage_service (void *cls) | ||
803 | { | ||
804 | struct OperationContext *opc = cls; | ||
805 | struct ManageServiceData *data; | ||
806 | |||
807 | data = opc->data; | ||
808 | switch (opc->state) | ||
809 | { | ||
810 | case OPC_STATE_STARTED: | ||
811 | GNUNET_CONTAINER_DLL_remove (opc->c->ocq_head, opc->c->ocq_tail, opc); | ||
812 | break; | ||
813 | case OPC_STATE_INIT: | ||
814 | GNUNET_assert (NULL != data); | ||
815 | GNUNET_free (data->service_name); | ||
816 | break; | ||
817 | case OPC_STATE_FINISHED: | ||
818 | break; | ||
819 | } | ||
820 | GNUNET_free_non_null (data); | ||
821 | GNUNET_free (opc); | ||
822 | } | ||
823 | |||
824 | |||
825 | struct GNUNET_TESTBED_Operation * | ||
826 | GNUNET_TESTBED_peer_manage_service (void *op_cls, | ||
827 | struct GNUNET_TESTBED_Peer *peer, | ||
828 | const char *service_name, | ||
829 | GNUNET_TESTBED_OperationCompletionCallback cb, | ||
830 | void *cb_cls, | ||
831 | unsigned int start) | ||
832 | { | ||
833 | struct ManageServiceData *data; | ||
834 | struct OperationContext *opc; | ||
835 | size_t msize; | ||
836 | |||
837 | GNUNET_assert (PS_STARTED == peer->state); /* peer is not running? */ | ||
838 | msize = strlen (service_name) + 1; | ||
839 | msize += sizeof (struct GNUNET_TESTBED_ManagePeerServiceMessage); | ||
840 | if (GNUNET_SERVER_MAX_MESSAGE_SIZE < msize) | ||
841 | return NULL; | ||
842 | data = GNUNET_malloc (sizeof (struct ManageServiceData)); | ||
843 | data->cb = cb; | ||
844 | data->cb_cls = cb_cls; | ||
845 | data->peer = peer; | ||
846 | data->service_name = GNUNET_strdup (service_name); | ||
847 | data->start = start; | ||
848 | data->msize = (uint16_t) msize; | ||
849 | opc = GNUNET_malloc (sizeof (struct OperationContext)); | ||
850 | opc->data = data; | ||
851 | opc->c = peer->controller; | ||
852 | opc->id = GNUNET_TESTBED_get_next_op_id (opc->c); | ||
853 | opc->type = OP_MANAGE_SERVICE; | ||
854 | opc->op_cls = op_cls; | ||
855 | opc->op = | ||
856 | GNUNET_TESTBED_operation_create_ (opc, &opstart_manage_service, | ||
857 | &oprelease_manage_service); | ||
858 | GNUNET_TESTBED_operation_queue_insert_ (opc->c->opq_parallel_operations, | ||
859 | opc->op); | ||
860 | GNUNET_TESTBED_operation_begin_wait_ (opc->op); | ||
861 | return opc->op; | ||
862 | } | ||
863 | |||
864 | |||
777 | 865 | ||
778 | /* end of testbed_api_peers.c */ | 866 | /* end of testbed_api_peers.c */ |