/** * Function to process intranode poll rcv message common * * * */ uint32_t dtm_intranode_process_poll_rcv_msg_common(DTM_INTRANODE_PID_INFO *pid_node) { uint32_t identifier = 0; uint8_t version = 0 , *data = NULL; DTM_INTRANODE_RCV_MSG_TYPES msg_type = 0; pid_node->buffer[pid_node->buff_total_len + 2] = '\0'; data = &pid_node->buffer[2]; /* Decode the message */ identifier = ncs_decode_32bit(&data); version = ncs_decode_8bit(&data); if ((DTM_INTRANODE_RCV_MSG_IDENTIFIER != identifier) || (DTM_INTRANODE_RCV_MSG_VER != version)) { TRACE("DTM_INTRA: Malformed packet recd, Ident = %d, ver = %d",identifier, version); free(pid_node->buffer); return NCSCC_RC_FAILURE; } msg_type = ncs_decode_8bit(&data); if (DTM_INTRANODE_RCV_PID_TYPE == msg_type) { dtm_intranode_process_pid_msg(&pid_node->buffer[8], pid_node->accepted_fd); free(pid_node->buffer); } else if (DTM_INTRANODE_RCV_BIND_TYPE == msg_type) { dtm_intranode_process_bind_msg(&pid_node->buffer[8], pid_node->accepted_fd); free(pid_node->buffer); } else if (DTM_INTRANODE_RCV_UNBIND_TYPE == msg_type) { dtm_intranode_process_unbind_msg(&pid_node->buffer[8], pid_node->accepted_fd); free(pid_node->buffer); } else if (DTM_INTRANODE_RCV_SUBSCRIBE_TYPE == msg_type) { dtm_intranode_process_subscribe_msg(&pid_node->buffer[8], pid_node->accepted_fd); free(pid_node->buffer); } else if (DTM_INTRANODE_RCV_UNSUBSCRIBE_TYPE == msg_type) { dtm_intranode_process_unsubscribe_msg(&pid_node->buffer[8], pid_node->accepted_fd); free(pid_node->buffer); } else if (DTM_INTRANODE_RCV_NODE_SUBSCRIBE_TYPE == msg_type) { dtm_intranode_process_node_subscribe_msg(&pid_node->buffer[8], pid_node->accepted_fd); free(pid_node->buffer); } else if (DTM_INTRANODE_RCV_NODE_UNSUBSCRIBE_TYPE == msg_type) { dtm_intranode_process_node_unsubscribe_msg(&pid_node->buffer[8], pid_node->accepted_fd); free(pid_node->buffer); } else if (DTM_INTRANODE_RCV_MESSAGE_TYPE == msg_type) { /* Get the Destination Node ID */ NODE_ID dst_nodeid = 0; uint32_t dst_processid = 0; dst_nodeid = ncs_decode_32bit(&data); dst_processid = ncs_decode_32bit(&data); if (dtm_intranode_cb->nodeid == dst_nodeid) { /* local node message */ dtm_intranode_process_rcv_data_msg(pid_node->buffer, dst_processid, (pid_node->buff_total_len +2)); } else { /* remote node message */ dtm_add_to_msg_dist_list(pid_node->buffer, (pid_node->buff_total_len +2), dst_nodeid); } pid_node->bytes_tb_read = 0; pid_node->buff_total_len = 0; pid_node->num_by_read_for_len_buff = 0; return NCSCC_RC_SUCCESS; } else { /* msg_type not supported, log error */ TRACE("DTM_INTRA: Recd msg_type unknown, dropping the message"); } pid_node->bytes_tb_read = 0; pid_node->buff_total_len = 0; pid_node->num_by_read_for_len_buff = 0; pid_node->buffer = NULL; return NCSCC_RC_SUCCESS; }
/** * Function to scv intranode data messages * * @param buffer dst_pid len * * @return NCSCC_RC_SUCCESS * @return NCSCC_RC_FAILURE * */ uint32_t dtm_process_rcv_internode_data_msg(uint8_t *buffer, uint32_t dst_pid, uint16_t len) { return dtm_intranode_process_rcv_data_msg(buffer, dst_pid, len); }