}
/*****************************************************************************************************************************/
+/*****************************************************************************************************************************/
+switch_status_t mg_send_subtract_rsp(SuId suId, MgMgcoCommand *req)
+{
+ MgMgcoCommand cmd;
+ int ret = 0x00;
+ MgMgcoTermId *termId;
+ MgMgcoCtxt ctxt;
+
+ memset(&cmd,0, sizeof(cmd));
+
+ /*copy transaction-id*/
+ memcpy(&cmd.transId, &req->transId,sizeof(MgMgcoTransId));
+
+ /*copy context-id*/ /*TODO - in case of $ context should be generated by app, we should not simply copy incoming structure */
+ memcpy(&cmd.contextId, &req->contextId,sizeof(MgMgcoContextId));
+
+ /*copy peer identifier */
+ memcpy(&cmd.peerId, &req->peerId,sizeof(TknU32));
+
+ /*fill response structue */
+ if(SWITCH_STATUS_FALSE == (ret = mg_stack_alloc_mem((Ptr*)&cmd.u.mgCmdRsp[0],sizeof(MgMgcoCmdReply)))){
+ return ret;
+ }
+
+ cmd.u.mgCmdRsp[0]->pres.pres = PRSNT_NODEF;
+ cmd.u.mgCmdRsp[0]->type.pres = PRSNT_NODEF;
+ cmd.u.mgCmdRsp[0]->type.val = MGT_SUB;
+ cmd.u.mgCmdRsp[0]->u.sub.pres.pres = PRSNT_NODEF;
+ cmd.u.mgCmdRsp[0]->u.sub.termIdLst.num.pres = PRSNT_NODEF;
+ cmd.u.mgCmdRsp[0]->u.sub.termIdLst.num.val = 1;
+
+ mgUtlAllocMgMgcoTermIdLst(&cmd.u.mgCmdRsp[0]->u.sub.termIdLst, &req->u.mgCmdReq[0]->cmd.u.sub.termIdLst);
+
+#ifdef GCP_VER_2_1
+ termId = cmd.u.mgCmdRsp[0]->u.sub.termIdLst.terms[0];
+#else
+ termId = &(cmd.u.mgCmdRsp[0]->u.sub.termId);
+#endif
+ mg_fill_mgco_termid(termId, (CONSTANT U8*)"term1",&req->u.mgCmdRsp[0]->memCp);
+
+ /* We will always send one command at a time..*/
+ cmd.cmdStatus.pres = PRSNT_NODEF;
+ cmd.cmdStatus.val = CH_CMD_STATUS_END_OF_CMD;
+
+ cmd.cmdType.pres = PRSNT_NODEF;
+ cmd.cmdType.val = CH_CMD_TYPE_RSP;
+
+
+ ret = sng_mgco_send_cmd(suId, &cmd);
+
+ memcpy(&ctxt.transId,&req->transId,sizeof(MgMgcoTransId));
+ memcpy(&ctxt.cntxtId, &req->contextId,sizeof(MgMgcoContextId));
+ memcpy(&ctxt.peerId, &req->peerId,sizeof(TknU32));
+ ctxt.cmdStatus.pres = PRSNT_NODEF;
+ ctxt.cmdStatus.val = CH_CMD_STATUS_END_OF_AXN;
+ ret = sng_mgco_send_axn_req(suId, &ctxt);
+
+ return ret;
+}
case MGT_TXNREQ:
{
MgMgcoTxnReq* txnReq;
- MgMgcoTransId transId; /* XXX */
+ /*MgMgcoTransId transId; *//* XXX */
int axnIter;
txnReq = &(msg->body.u.tl.txns[txnIter]->u.req);
MgMgcoCommand mgCmd;
memset(&mgCmd, 0, sizeof(mgCmd));
mgCmd.peerId = msg->lcl.id;
- mgCmd.transId = transId;
mgCmd.u.mgCmdInd[0] = cmdReq;
/* XXX Handle choose context before this */
mgCmd.contextId = ctxId;
- mgCmd.transId = transId;
+ /*mgCmd.transId = transId;*/
mgCmd.cmdStatus.pres = PRSNT_NODEF;
/*****************************************************************************************************************************/
void handle_mgco_cmd_ind(Pst *pst, SuId suId, MgMgcoCommand* cmd)
{
- uint32_t txn_id = 0x00;
+ U32 txn_id = 0x00;
MgMgcoInd *mgErr;
MgStr errTxt;
MgMgcoContextId ctxtId;
ctxtId.type.pres = NOTPRSNT;
ctxtId.val.pres = NOTPRSNT;
- mg_util_set_txn_string(&errTxt, (U32*)&txn_id);
+ mg_util_set_txn_string(&errTxt, &txn_id);
if (SWITCH_STATUS_SUCCESS == mg_build_mgco_err_request(&mgErr, txn_id, &ctxtId,
MGT_MGCO_RSP_CODE_INVLD_IDENTIFIER, &errTxt)) {
case MGT_SUB:
{
/*MgMgcoSubAudReq *addReq = &cmdReq->cmd.u.sub;*/
+ mg_send_subtract_rsp(suId, cmd);
+ break;
}
case MGT_SVCCHG:
{