2 * @file frescan_negotiator_thread.c
4 * @brief FRESCAN negotiator thread
6 * This module contains the negotiator thread, with an operation to create it.
12 * @author Daniel Sangorrin <daniel.sangorrin@unican.es>
17 #include "frescan_negotiator_thread.h"
18 #include "fosa_threads_and_signals.h" // fosa_thread_attr_init...
19 #include "frescan_config.h"
20 #include "frescan_debug.h"
21 #include "frescan_data.h"
22 #include "frescan_requests_queue.h"
24 static void *frescan_neg_thread(void *arg);
27 * frescan_negotiator_thread_create()
30 int frescan_negotiator_thread_create(frescan_network_t net)
33 fosa_thread_attr_t attr;
35 ret = fosa_thread_attr_init(&attr);
37 ERROR("could not init thread attributes\n");
41 ret = fosa_thread_attr_set_prio(&attr, FRESCAN_NEG_THREAD_PRIO);
43 ERROR("could not set neg thread prio %d\n",
44 FRESCAN_NEG_THREAD_PRIO);
48 ret = fosa_thread_create(&the_networks[net].neg_thread_id,
51 (void *)(uint32_t)net);
54 ERROR("could not create the negotiator thread\n");
58 ret = fosa_thread_attr_destroy(&attr);
60 ERROR("could not destroy thread attributes\n");
68 * frescan_neg_thread - the thread that negotiates contracts
71 static void *frescan_neg_thread(void *arg)
74 frescan_request_id_t request;
75 frescan_req_type_t type;
76 frescan_robj_id_t reply;
77 frescan_contract_t *contract;
78 frescan_neg_return_info_t *neg_return_info;
80 DEBUG(FRESCAN_NEG_THREAD_ENABLE_DEBUG, "negotiator thread starts\n");
83 DEBUG(FRESCAN_NEG_THREAD_ENABLE_DEBUG, "wait for a request\n");
85 err = frescan_requestqueue_dequeue(&request);
88 err = frescan_request_get_type(request, &type);
92 case FRESCAN_NEGOTIATE:
93 DEBUG(FRESCAN_NEG_THREAD_ENABLE_DEBUG,
94 "FRESCAN_NEGOTIATE request\n");
95 err = frescan_request_get_contract(request, &contract);
97 err = frescan_request_get_reply(request, &reply);
99 err = frescan_request_get_return_info(request, (void *)&neg_return_info);
102 neg_return_info->error = 0;
103 neg_return_info->id = 78;
105 err = frescan_replyobject_signal(reply);
109 case FRESCAN_RENEGOTIATE:
110 DEBUG(FRESCAN_NEG_THREAD_ENABLE_DEBUG,
111 "FRESCAN_RENEGOTIATE request\n");
115 DEBUG(FRESCAN_NEG_THREAD_ENABLE_DEBUG,
116 "FRESCAN_CANCEL request\n");
120 ERROR("wrong request type %d\n", type);