]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
adding mg stack add command code and sendign dummy rsp of add
authorkapil <kgupta@sangoma.com>
Tue, 26 Jun 2012 07:35:23 +0000 (13:05 +0530)
committerkapil <kgupta@sangoma.com>
Tue, 26 Jun 2012 07:35:23 +0000 (13:05 +0530)
src/mod/endpoints/mod_media_gateway/mod_media_gateway.c

index 56d40ec41d8ee4c2816be4617f6ef80481b84492..d24fa93008bfd09d10e6af846343b66f6be17c31 100644 (file)
@@ -19,6 +19,11 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_media_gateway_load);
 SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_media_gateway_shutdown);
 SWITCH_MODULE_DEFINITION(mod_media_gateway, mod_media_gateway_load, mod_media_gateway_shutdown, NULL);
 switch_status_t handle_mg_add_cmd(MgMgcoAmmReq *addReq);
+switch_status_t mg_stack_free_mem(MgMgcoMsg* msg);
+switch_status_t mg_stack_free_mem(MgMgcoMsg* msg);
+switch_status_t mg_stack_alloc_mem( Ptr* _memPtr, Size _memSize );
+switch_status_t mg_send_add_rsp(SuId suId, MgMgcoCommand *req);
+S16 mg_fill_mgco_termid ( MgMgcoTermId  *termId, CONSTANT U8   *str, CmMemListCp   *memCp);
 
 /**************************************************************************************************************/
 
@@ -434,6 +439,7 @@ void handle_mgco_cmd_ind(Pst *pst, SuId suId, MgMgcoCommand* cmd)
                                        case MGT_ADD:
                                                {
                                                        handle_mg_add_cmd(&cmd->u.mgCmdInd[0]->cmd.u.add);
+                                                       mg_send_add_rsp(suId, cmd);
                                                        break;
                                                }
 
@@ -493,6 +499,9 @@ void handle_mgco_txn_sta_ind(Pst *pst, SuId suId, MgMgcoInd* txn_sta_ind)
 {
        /*TODO*/
     switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "%s\n", __PRETTY_FUNCTION__);
+   
+    /*dump information*/
+    /*mgAccEvntPrntMgMgcoInd(txn_sta_ind, stdout);*/
 }
 
 /*****************************************************************************************************************************/
@@ -719,9 +728,180 @@ switch_status_t handle_mg_add_cmd(MgMgcoAmmReq *addReq)
                }
        }
 
+
        return SWITCH_STATUS_SUCCESS;   
 }
 
+
+/*****************************************************************************************************************************/
+switch_status_t mg_send_add_rsp(SuId suId, MgMgcoCommand *req)
+{
+       MgMgcoCommand  cmd;
+       int ret = 0x00;
+       MgMgcoTermId  *termId;
+
+       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_ADD;
+       cmd.u.mgCmdRsp[0]->u.add.pres.pres = PRSNT_NODEF;
+
+
+       cmd.u.mgCmdRsp[0]->u.add.termIdLst.num.pres = PRSNT_NODEF;
+       cmd.u.mgCmdRsp[0]->u.add.termIdLst.num.val  = 1;
+
+       mgUtlAllocMgMgcoTermIdLst(&cmd.u.mgCmdRsp[0]->u.add.termIdLst, &req->u.mgCmdReq[0]->cmd.u.add.termIdLst);
+
+#ifdef GCP_VER_2_1
+       termId = cmd.u.mgCmdRsp[0]->u.add.termIdLst.terms[0];
+#else
+       termId = &(cmd.u.mgCmdRsp[0]->u.add.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);
+
+
+       return ret;
+}
+
+/*****************************************************************************************************************************/
+switch_status_t mg_stack_alloc_mem( Ptr* _memPtr, Size _memSize )
+{
+       Mem sMem;
+
+       sMem.region = 0;
+       sMem.pool = 0;
+
+       if ( _memSize <= 0 )
+       {
+               switch_log_printf(SWITCH_CHANNEL_LOG_CLEAN, SWITCH_LOG_ERROR, " Failed mg_stack_alloc_mem: invalid size\n"); 
+               return SWITCH_STATUS_FALSE;
+       }
+
+       if ( ROK != cmAllocEvnt( _memSize, MG_MAXBLKSIZE, &sMem, _memPtr ) )
+       {
+               switch_log_printf(SWITCH_CHANNEL_LOG_CLEAN, SWITCH_LOG_ERROR, " Failed mg_stack_alloc_mem: cmAllocEvnt return failure for _memSize=%d\n",_memSize); 
+               return SWITCH_STATUS_FALSE;
+       }
+
+       // Note: memset done inside stack api
+
+       return SWITCH_STATUS_SUCCESS;
+}
+
+switch_status_t mg_stack_get_mem(MgMgcoMsg* msg, Ptr* _memPtr, Size _memSize )
+{
+        if ( _memSize <= 0 )
+        {
+               switch_log_printf(SWITCH_CHANNEL_LOG_CLEAN, SWITCH_LOG_ERROR, " Failed mg_stack_get_mem: invalid size\n"); 
+               return SWITCH_STATUS_FALSE;
+        }
+
+        if ( !msg )
+        {
+               switch_log_printf(SWITCH_CHANNEL_LOG_CLEAN, SWITCH_LOG_ERROR, " Failed mg_stack_get_mem: invalid message\n"); 
+               return SWITCH_STATUS_FALSE;
+        }
+
+        if ( cmGetMem( (Ptr)msg, _memSize, (Ptr*)_memPtr ) != ROK )
+        {
+               switch_log_printf(SWITCH_CHANNEL_LOG_CLEAN, SWITCH_LOG_ERROR, " Failed alloc_mg_stack_mem: get memory failed _memSize=%d\n", _memSize );
+               return SWITCH_STATUS_FALSE;
+        }
+
+        // Note: memset done inside stack api
+
+       return SWITCH_STATUS_SUCCESS;
+}
+
+
+switch_status_t mg_stack_free_mem(MgMgcoMsg* msg)
+{
+        if ( !msg )
+        {
+               switch_log_printf(SWITCH_CHANNEL_LOG_CLEAN, SWITCH_LOG_ERROR, " Failed mg_stack_get_mem: invalid message\n"); 
+               return SWITCH_STATUS_FALSE;
+        }
+
+        cmFreeMem( (Ptr)msg );
+
+        return SWITCH_STATUS_SUCCESS;
+}
+
+#define MG_ACC_GETMEM(_ptr,_len,_memCp,_ret)                              \
+{                                                                         \
+        ret = cmGetMem((_memCp), (_len), (Ptr *)&(_ptr));                 \
+        if( ret == ROK)                                                   \
+          cmMemset((U8 *)(_ptr), (U8)0,  (PTR)(_len));                    \
+}
+
+
+S16 mg_fill_mgco_termid ( MgMgcoTermId  *termId, CONSTANT U8   *str, CmMemListCp   *memCp)
+{
+#ifdef GCP_ASN       
+   Size              size;
+#endif
+   S16               ret = ROK;
+
+   termId->name.pres.pres = PRSNT_NODEF;
+   /* mg011.105: Bug fixes */
+   termId->name.lcl.pres = PRSNT_NODEF;
+   termId->name.lcl.len = cmStrlen((CONSTANT U8*)str);
+   MG_ACC_GETMEM((termId->name.lcl.val), termId->name.lcl.len, memCp, ret);
+   if( ret != ROK)
+      RETVALUE(ret);          
+
+   cmMemcpy((U8*)(termId->name.lcl.val), (CONSTANT U8*)str,termId->name.lcl.len);
+
+#ifdef GCP_ASN          
+   /* Remove comment to fill other term ID 
+   termId->wildcard.num.pres = NOTPRSNT; */
+   /* Remove comment to fill wilcard term ID */
+   termId->wildcard.num.pres = PRSNT_NODEF;    
+   termId->wildcard.num.val = 1;
+   size = ((sizeof(MgMgcoWildcardField*)));
+   MG_ACC_GETMEM((termId->wildcard.wildcard),size,memCp, ret);
+   if( ret != ROK)
+      RETVALUE(ret);
+
+   MG_ACC_GETMEM( ((termId->wildcard.wildcard)[0]),sizeof(MgMgcoWildcardField),
+                  memCp, ret);
+   if( ret != ROK)
+      RETVALUE(ret);
+
+   termId->wildcard.wildcard[0]->pres = PRSNT_NODEF;
+   termId->wildcard.wildcard[0]->len = 1;
+   termId->wildcard.wildcard[0]->val[0] = 0x55;
+#endif /* GCP_ASN */
+
+   RETVALUE(ROK);
+}
+
+
 /*****************************************************************************************************************************/
 
 /* For Emacs: