Skip to content
Snippets Groups Projects
Commit 4f618d61 authored by Xenofon Foukas's avatar Xenofon Foukas
Browse files

Fixed some bugs that would lead to segfaults and modified to support changes in protocol

parent d5830ced
No related branches found
No related tags found
1 merge request!47Feature 68 enb agent
......@@ -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;
......
......@@ -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;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment