diff --git a/openair2/ENB_APP/enb_agent_common.c b/openair2/ENB_APP/enb_agent_common.c index d71a5a6accae7c478a58a170d1f8f84403b1b1f6..132044cf1ffd171e9af6daf48e8c3e608810f6bb 100644 --- a/openair2/ENB_APP/enb_agent_common.c +++ b/openair2/ENB_APP/enb_agent_common.c @@ -64,7 +64,7 @@ int enb_agent_deserialize_message(void *data, int size, Protocol__ProgranMessage *msg = protocol__progran_message__unpack(NULL, size, data); if (*msg == NULL) goto error; - + return 0; error: @@ -118,6 +118,7 @@ int enb_agent_hello(uint32_t xid, Protocol__ProgranMessage **msg) { protocol__progran_message__init(*msg); (*msg)->msg_case = PROTOCOL__PROGRAN_MESSAGE__MSG_HELLO_MSG; (*msg)->msg_dir = PROTOCOL__PROGRAN_DIRECTION__INITIATING_MESSAGE; + (*msg)->has_msg_dir = 1; (*msg)->hello_msg = hello_msg; return 0; @@ -216,6 +217,7 @@ int enb_agent_echo_reply(uint32_t xid, Protocol__ProgranMessage **msg) { protocol__progran_message__init(*msg); (*msg)->msg_case = PROTOCOL__PROGRAN_MESSAGE__MSG_ECHO_REPLY_MSG; (*msg)->msg_dir = PROTOCOL__PROGRAN_DIRECTION__SUCCESSFUL_OUTCOME; + (*msg)->has_msg_dir = 1; (*msg)->echo_reply_msg = echo_reply_msg; return 0; diff --git a/openair2/ENB_APP/enb_agent_handler.c b/openair2/ENB_APP/enb_agent_handler.c index 2b9509f48efcb3119eedeb2dee6e632425325d08..2457ddbfdc1ecfc4b66f0f41f262a75eec32bc38 100644 --- a/openair2/ENB_APP/enb_agent_handler.c +++ b/openair2/ENB_APP/enb_agent_handler.c @@ -42,10 +42,11 @@ #include "assertions.h" enb_agent_message_decoded_callback messages_callback[][3] = { - {enb_agent_hello, enb_agent_hello,0}, /*PROTOCOL__PROGRAN_MESSAGE__MSG_HELLO_MSG*/ - {enb_agent_echo_request, enb_agent_echo_reply,0}, /**/ - {0, enb_agent_mac_reply,0}, /*stats*/ - {0,0,0}, + {enb_agent_hello, 0, 0}, /*PROTOCOL__PROGRAN_MESSAGE__MSG_HELLO_MSG*/ + {enb_agent_echo_reply, 0, 0}, /*PROTOCOL__PROGRAN_MESSAGE__MSG_ECHO_REQUEST_MSG*/ + {0, 0, 0}, /*PROTOCOL__PROGRAN_MESSAGE__MSG_ECHO_REPLY_MSG*/ //Must add handler when receiving echo reply + {enb_agent_mac_reply, 0, 0}, /*PROTOCOL__PROGRAN_MESSAGE__MSG_STATS_REQUEST_MSG*/ + {0,0,0}, /*PROTOCOL__PROGRAN_MESSAGE__MSG_STATS_REPLY_MSG*/ }; @@ -61,33 +62,35 @@ Protocol__ProgranMessage* enb_agent_handle_message (uint32_t xid, uint8_t *data, uint32_t size){ - Protocol__ProgranMessage *message; + Protocol__ProgranMessage *decoded_message, *reply_message; err_code_t err_code; DevAssert(data != NULL); - if (enb_agent_deserialize_message(data, size, &message) < 0) { + if (enb_agent_deserialize_message(data, size, &decoded_message) < 0) { err_code= PROTOCOL__PROGRAN_ERR__MSG_DECODING; goto error; } - if ((message->msg_case > sizeof(messages_callback) / (3*sizeof(enb_agent_message_decoded_callback))) || - (message->msg_dir > PROTOCOL__PROGRAN_DIRECTION__UNSUCCESSFUL_OUTCOME)){ + if ((decoded_message->msg_case > sizeof(messages_callback) / (3*sizeof(enb_agent_message_decoded_callback))) || + (decoded_message->msg_dir > PROTOCOL__PROGRAN_DIRECTION__UNSUCCESSFUL_OUTCOME)){ err_code= PROTOCOL__PROGRAN_ERR__MSG_NOT_HANDLED; goto error; } - if (messages_callback[message->msg_case][message->msg_dir] == NULL) { + if (messages_callback[decoded_message->msg_case-1][decoded_message->msg_dir-1] == NULL) { err_code= PROTOCOL__PROGRAN_ERR__MSG_NOT_SUPPORTED; goto error; } - err_code= ((*messages_callback[message->msg_case-1][message->msg_dir-1])(xid, &message)); + err_code= ((*messages_callback[decoded_message->msg_case-1][decoded_message->msg_dir-1])(xid, &reply_message)); if ( err_code < 0 ){ goto error; } - return message; + protocol__progran_message__free_unpacked(decoded_message, NULL); + + return reply_message; error: LOG_E(ENB_APP,"errno %d occured\n",err_code); @@ -110,11 +113,12 @@ void * enb_agent_send_message(uint32_t xid, } // free the msg --> later keep this in the data struct and just update the values - enb_agent_mac_destroy_stats_reply(msg); + //TODO call proper destroy function + // enb_agent_mac_destroy_stats_reply(msg); DevAssert(buffer !=NULL); - LOG_D(ENB_APP,"Serilized the enb mac stats reply (size %d)\n", size); + LOG_D(ENB_APP,"Serilized the enb mac stats reply (size %d)\n", *size); return buffer;