/**************************************************************************** Name : mqa_asapi_unregister Description : This routine registers with ASAPi library. Arguments : cb - MQA control block Return Values : NCSCC_RC_SUCCESS/NCSCC_RC_FAILURE Notes : None ******************************************************************************/ static void mqa_asapi_unregister(MQA_CB *cb) { ASAPi_OPR_INFO asapi_or; uns32 rc = NCSCC_RC_SUCCESS; /* Register with ASAPi library */ asapi_or.type = ASAPi_OPR_UNBIND; if ((rc = asapi_opr_hdlr(&asapi_or)) != NCSCC_RC_SUCCESS) { m_LOG_MQSV_A(MQA_ASAPi_UNREGISTER_FAILED, NCSFL_LC_MQSV_INIT, NCSFL_SEV_ERROR, rc, __FILE__, __LINE__); } return; }
/**************************************************************************** Name : mqa_asapi_unregister Description : This routine registers with ASAPi library. Arguments : cb - MQA control block Return Values : NCSCC_RC_SUCCESS/NCSCC_RC_FAILURE Notes : None ******************************************************************************/ static void mqa_asapi_unregister(MQA_CB *cb) { ASAPi_OPR_INFO asapi_or; uint32_t rc = NCSCC_RC_SUCCESS; TRACE_ENTER(); /* Register with ASAPi library */ asapi_or.type = ASAPi_OPR_UNBIND; if ((rc = asapi_opr_hdlr(&asapi_or)) != NCSCC_RC_SUCCESS) { TRACE_2("ASAPi Deregisteration Failed with returncode %d", rc); } TRACE_LEAVE(); return; }
/**************************************************************************** Name : mqa_asapi_register Description : This routine registers with ASAPi library. Arguments : cb - MQA control block Return Values : NCSCC_RC_SUCCESS/NCSCC_RC_FAILURE Notes : None ******************************************************************************/ static uns32 mqa_asapi_register(MQA_CB *cb) { ASAPi_OPR_INFO asapi_or; uns32 rc = NCSCC_RC_SUCCESS; /* Register with ASAPi library */ asapi_or.type = ASAPi_OPR_BIND; asapi_or.info.bind.i_indhdlr = mqa_asapi_msghandler; asapi_or.info.bind.i_mds_hdl = cb->mqa_mds_hdl; asapi_or.info.bind.i_mds_id = NCSMDS_SVC_ID_MQA; asapi_or.info.bind.i_my_id = NCS_SERVICE_ID_MQA; asapi_or.info.bind.i_mydest = cb->mqa_mds_dest; if ((rc = asapi_opr_hdlr(&asapi_or)) != NCSCC_RC_SUCCESS) { m_LOG_MQSV_A(MQA_ASAPi_REGISTER_FAILED, NCSFL_LC_MQSV_INIT, NCSFL_SEV_ERROR, rc, __FILE__, __LINE__); return NCSCC_RC_FAILURE; } return NCSCC_RC_SUCCESS; }
/**************************************************************************** Name : mqa_asapi_register Description : This routine registers with ASAPi library. Arguments : cb - MQA control block Return Values : NCSCC_RC_SUCCESS/NCSCC_RC_FAILURE Notes : None ******************************************************************************/ static uint32_t mqa_asapi_register(MQA_CB *cb) { ASAPi_OPR_INFO asapi_or; uint32_t rc = NCSCC_RC_SUCCESS; TRACE_ENTER(); /* Register with ASAPi library */ asapi_or.type = ASAPi_OPR_BIND; asapi_or.info.bind.i_indhdlr = mqa_asapi_msghandler; asapi_or.info.bind.i_mds_hdl = cb->mqa_mds_hdl; asapi_or.info.bind.i_mds_id = NCSMDS_SVC_ID_MQA; asapi_or.info.bind.i_my_id = NCS_SERVICE_ID_MQA; asapi_or.info.bind.i_mydest = cb->mqa_mds_dest; if ((rc = asapi_opr_hdlr(&asapi_or)) != NCSCC_RC_SUCCESS) { TRACE_2("FAILURE: ASAPi Bind Failed"); return NCSCC_RC_FAILURE; } TRACE_LEAVE(); return NCSCC_RC_SUCCESS; }
static uns32 mqa_mds_rcv(MQA_CB *cb, MDS_CALLBACK_RECEIVE_INFO *rcv_info) { uns32 rc = NCSCC_RC_SUCCESS; MQSV_EVT *evt = (MQSV_EVT *)rcv_info->i_msg; MQP_ASYNC_RSP_MSG *mqa_callbk_info; evt->sinfo.ctxt = rcv_info->i_msg_ctxt; evt->sinfo.dest = rcv_info->i_fr_dest; evt->sinfo.to_svc = rcv_info->i_fr_svc_id; if (rcv_info->i_rsp_reqd) { evt->sinfo.stype = MDS_SENDTYPE_RSP; } /* check the event type */ if (evt->type == MQSV_EVT_MQA_CALLBACK) { mqa_callbk_info = m_MMGR_ALLOC_MQP_ASYNC_RSP_MSG; if (!mqa_callbk_info) { m_LOG_MQSV_A(MQP_ASYNC_RSP_MSG_ALLOC_FAILED, NCSFL_LC_MQSV_INIT, NCSFL_SEV_ERROR, 2, __FILE__, __LINE__); return NCSCC_RC_FAILURE; } memcpy(mqa_callbk_info, &evt->msg.mqp_async_rsp, sizeof(MQP_ASYNC_RSP_MSG)); /* Stop the timer that was started for this request by matching the invocation * in the timer table. */ if ((rc = mqa_stop_and_delete_timer(mqa_callbk_info)) == NCSCC_RC_SUCCESS) { /* Put it in place it in the Queue */ rc = mqsv_mqa_callback_queue_write(cb, evt->msg.mqp_async_rsp.messageHandle, mqa_callbk_info); m_LOG_MQSV_A(MQA_STOP_DELETE_TMR_SUCCESS, NCSFL_LC_MQSV_INIT, NCSFL_SEV_INFO, rc, __FILE__, __LINE__); } else { m_LOG_MQSV_A(MQA_STOP_DELETE_TMR_FAILED, NCSFL_LC_MQSV_INIT, NCSFL_SEV_ERROR, rc, __FILE__, __LINE__); if (mqa_callbk_info) m_MMGR_FREE_MQP_ASYNC_RSP_MSG(mqa_callbk_info); } if (evt) m_MMGR_FREE_MQA_EVT(evt); return rc; } else if (evt->type == MQSV_EVT_ASAPI) { ASAPi_OPR_INFO opr; opr.type = ASAPi_OPR_MSG; opr.info.msg.opr = ASAPI_MSG_RECEIVE; opr.info.msg.resp = ((MQSV_EVT *)rcv_info->i_msg)->msg.asapi; rc = asapi_opr_hdlr(&opr); if (rc != NCSCC_RC_SUCCESS) m_LOG_MQSV_A(MQA_ASAPi_MSG_RECEIVE_FAILED, NCSFL_LC_MQSV_INIT, NCSFL_SEV_ERROR, rc, __FILE__, __LINE__); if (evt) m_MMGR_FREE_MQA_EVT(evt); return rc; } else if (evt->type == MQSV_EVT_MQP_REQ) { cb->clm_node_joined = evt->msg.mqp_req.info.clmNotify.node_joined; return rc; } if (evt) m_MMGR_FREE_MQA_EVT(evt); return NCSCC_RC_FAILURE; }