]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
changes on test box
authorroot <root@nsg-media-test.sangoma.local>
Thu, 26 Jul 2012 16:30:33 +0000 (12:30 -0400)
committerroot <root@nsg-media-test.sangoma.local>
Thu, 26 Jul 2012 16:30:33 +0000 (12:30 -0400)
src/mod/endpoints/mod_media_gateway/media_gateway_cmd_handler.c
src/mod/endpoints/mod_media_gateway/media_gateway_stack.h
src/mod/endpoints/mod_media_gateway/media_gateway_utils.c
src/mod/endpoints/mod_media_gateway/mod_media_gateway.c
src/mod/endpoints/mod_media_gateway/mod_media_gateway.h
src/mod/endpoints/mod_sofia/rtp.c
src/switch_channel.c
src/switch_rtp.c

index e040340e2c690a7b08c6e43c603df2d9a529e55a..27fe1a4a4baa507ecd22b6dfe4690cf5942cb6f2 100644 (file)
@@ -301,6 +301,8 @@ switch_status_t mg_prc_descriptors(megaco_profile_t* mg_profile, MgMgcoCommand *
                                         }
                                     }
 
+                                   mgco_handle_sdp(&local->sdp, term, MG_SDP_LOCAL);
+
                                     break;
                                 }
 
@@ -311,6 +313,7 @@ switch_status_t mg_prc_descriptors(megaco_profile_t* mg_profile, MgMgcoCommand *
                                     remote = &mediaPar->u.remote;
                                     sdp = remote->sdp.info[0];
                                     /* for Matt - same like local descriptor */
+                                   mgco_handle_sdp(&remote->sdp, term, MG_SDP_REMOTE);
                                     break;
                                 }
 
@@ -403,12 +406,12 @@ switch_status_t mg_prc_descriptors(megaco_profile_t* mg_profile, MgMgcoCommand *
 
                                     if (mgStream->sl.remote.pres.pres) {
                                         switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Got remote stream media description:\n");
-                                        mgco_print_sdp(&mgStream->sl.remote.sdp);
+                                        mgco_handle_sdp(&mgStream->sl.remote.sdp, term, MG_SDP_LOCAL);
                                     }
 
                                     if (mgStream->sl.local.pres.pres) {
                                         switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Got local stream media description:\n");
-                                        mgco_print_sdp(&mgStream->sl.local.sdp);
+                                        mgco_handle_sdp(&mgStream->sl.local.sdp, term, MG_SDP_REMOTE);
                                     }
 
                                     break;
@@ -567,11 +570,8 @@ switch_status_t handle_mg_add_cmd(megaco_profile_t* mg_profile, MgMgcoCommand *i
 
         is_rtp = 0x01;
 
-        /* TODO - Matt */
-        /* allocate rtp term and associated the same to context */
-        /********************************************************************/
+    /********************************************************************/
     }else{  /* Physical termination */
-          printf("termId->name.lcl.val[%s]\n",termId->name.lcl.val);
            term = megaco_find_termination(mg_profile, (char*)termId->name.lcl.val);
 
            if(NULL == term){
@@ -581,9 +581,6 @@ switch_status_t handle_mg_add_cmd(megaco_profile_t* mg_profile, MgMgcoCommand *i
            }
 
            switch_log_printf(SWITCH_CHANNEL_LOG_CLEAN, SWITCH_LOG_INFO," Allocated Termination[%p] with term name[%s]\n", (void*)term, term->name);
-
-        
-        /* get physical termination */
     }
     /********************************************************************/
     /* associate physical termination to context  */
@@ -694,8 +691,6 @@ switch_status_t handle_mg_add_cmd(megaco_profile_t* mg_profile, MgMgcoCommand *i
 
                switch_split(dup,'.',ipAddress);
 
-               printf("ipAddress[0]=%s, ipAddress[1]=%s, ipAddress[2]=%s,ipAddress[3]=%s\n",ipAddress[0],ipAddress[1],ipAddress[2],ipAddress[3]);
-
                /* Most probably we need to add local descriptor */
 
                /* allocating mem for local descriptor */
@@ -918,8 +913,8 @@ switch_status_t handle_mg_modify_cmd(megaco_profile_t* mg_profile, MgMgcoCommand
        MgMgcoInd         *mgErr;
        MgMgcoTermId     *termId;
        MgMgcoTermIdLst*  termLst;
-    mg_termination_t* term = NULL;
-    switch_status_t  ret;
+       mg_termination_t* term = NULL;
+       switch_status_t  ret;
        int               err_code;
        /*MgMgcoAmmReq    *cmd = &inc_cmd->u.mgCmdInd[0]->cmd.u.mod;*/
        U32                txn_id = inc_cmd->transId.val;
@@ -1033,6 +1028,9 @@ switch_status_t handle_mg_modify_cmd(megaco_profile_t* mg_profile, MgMgcoCommand
 
         ret = mg_prc_descriptors(mg_profile, inc_cmd, term);
 
+       /* SDP updated to termination */
+       
+       megaco_activate_termination(term);
     }
 
        /********************************************************************/
index 8c429ef620ae136fc4e5cca4685cd08d46798e35..9401ce49ce918d0ead9730cacebc6940cb6b8f03 100644 (file)
 
 #define MG_INACTIVITY_TMR_RESOLUTION   100          /* mit in ito package is experessed in 10ms steps */
 
+typedef enum{
+       MG_SDP_NONE,
+       MG_SDP_LOCAL,
+       MG_SDP_REMOTE,
+}mgco_sdp_types_e;
+
+
 typedef enum{
         SNG_MG_TPT_NONE,
         SNG_MG_TPT_UDP,
@@ -151,7 +158,7 @@ int sng_mgco_mg_get_status(int elemId, MgMngmt* cfm, megaco_profile_t* mg_cfg, m
 
 switch_status_t mg_is_ito_pkg_req(megaco_profile_t* mg_profile, MgMgcoCommand *cmd);
 switch_status_t mg_send_end_of_axn(SuId suId, MgMgcoTransId* transId, MgMgcoContextId* ctxtId, TknU32* peerId);
-void mgco_print_sdp(CmSdpInfoSet *sdp);
+void mgco_handle_sdp(CmSdpInfoSet *sdp,mg_termination_t* term, mgco_sdp_types_e sdp_type);
 void mg_util_set_ctxt_string ( MgStr  *errTxt, MgMgcoContextId     *ctxtId);
 switch_status_t handle_mg_add_cmd(megaco_profile_t* mg_profile, MgMgcoCommand *inc_cmd, MgMgcoContextId* new_ctxtId);
 switch_status_t handle_mg_subtract_cmd(megaco_profile_t* mg_profile, MgMgcoCommand *inc_cmd);
index 4e4d34b73656e767e097e54b7d5e0dbc4eefbe16..56a1ffdc3a27486c1e52952575c32860623c488f 100644 (file)
@@ -740,8 +740,11 @@ void mgco_print_sdp_attr_set(CmSdpAttrSet *s)
 
 }
 
-void mgco_print_sdp_c_line(CmSdpConn *s)
+void mgco_handle_sdp_c_line(CmSdpConn *s, mg_termination_t* term, mgco_sdp_types_e sdp_type)
 {
+    char ipadd[12];
+    memset(ipadd, 0, 12);
+
     switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "********** SDP connection line ****** \n");
 
     switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "\t Net Type = %d \n", 
@@ -760,7 +763,21 @@ void mgco_print_sdp_c_line(CmSdpConn *s)
                     s->u.ip4.u.uniIp.b[1].val,
                     s->u.ip4.u.uniIp.b[2].val,
                     s->u.ip4.u.uniIp.b[3].val);
-        }
+
+           if(MG_SDP_REMOTE == sdp_type) {
+                   sprintf(ipadd,"%d.%d.%d.%d",
+                                   s->u.ip4.u.uniIp.b[0].val,
+                                   s->u.ip4.u.uniIp.b[1].val,
+                                   s->u.ip4.u.uniIp.b[2].val,
+                                   s->u.ip4.u.uniIp.b[3].val);
+               printf("Remote ip = %s \n", ipadd);
+                   /* update remote ip */
+                   if(MG_TERM_RTP == term->type){
+                           term->u.rtp.remote_addr = strdup(ipadd); 
+                           printf("Update remote ip to [%s]\n", term->u.rtp.remote_addr);
+                   }
+           }
+       }
     }
     switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "**************** \n");
 }
@@ -834,255 +851,263 @@ void mgco_print_sdp_media_param(CmSdpMedPar *s)
     switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "**************** \n");
 }
 
-void mgco_print_sdp(CmSdpInfoSet *sdp)
+void mgco_handle_sdp(CmSdpInfoSet *sdp, mg_termination_t* term, mgco_sdp_types_e sdp_type)
 {
-    int i;
+       int i;
 
+       if (sdp->numComp.pres == NOTPRSNT) {
+               switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, " No %s SDP present \n", (MG_SDP_LOCAL== sdp_type)?"MG_SDP_LOCAL":"MG_SDP_REMOTE");
+               return;
+       }
 
-    if (sdp->numComp.pres == NOTPRSNT) {
-        return;
-    }
+       for (i = 0; i < sdp->numComp.val; i++) {
+               CmSdpInfo *s = sdp->info[i];
+               int mediaId;
 
-    for (i = 0; i < sdp->numComp.val; i++) {
-        CmSdpInfo *s = sdp->info[i];
-        int mediaId;
+               /************************************************************************************************************************/
+               /* info presence check */
+               if(NOTPRSNT == s->pres.pres) continue;
 
-        /************************************************************************************************************************/
-        /* info presence check */
-        if(NOTPRSNT == s->pres.pres) continue;
+               /************************************************************************************************************************/
+               /* Version */
+               if(NOTPRSNT != s->ver.pres) {
+                       switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, " SDP Version = %d \n", s->ver.val);
+               }
 
-        /************************************************************************************************************************/
-        /* Version */
-        if(NOTPRSNT != s->ver.pres) {
-            switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, " SDP Version = %d \n", s->ver.val);
-        }
+               /************************************************************************************************************************/
+               /* Orig */
+               if(NOTPRSNT != s->orig.pres.pres) {
+                       switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "********** SDP orig line ****** \n \t Type = %d \n", s->orig.type.val);
 
-        /************************************************************************************************************************/
-        /* Orig */
-        if(NOTPRSNT != s->orig.pres.pres) {
-            switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "********** SDP orig line ****** \n \t Type = %d \n", s->orig.type.val);
+                       if(NOTPRSNT != s->orig.orig.pres.pres) {
+                               switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "\t User Name = %s \n", 
+                                               (NOTPRSNT != s->orig.orig.usrName.pres)?(char*)s->orig.orig.usrName.val:"Not Present");
 
-            if(NOTPRSNT != s->orig.orig.pres.pres) {
-                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "\t User Name = %s \n", 
-                        (NOTPRSNT != s->orig.orig.usrName.pres)?(char*)s->orig.orig.usrName.val:"Not Present");
+                               switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "\t Session Id = %s \n", 
+                                               (NOTPRSNT != s->orig.orig.sessId.pres)?(char*)s->orig.orig.sessId.val:"Not Present");
 
-                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "\t Session Id = %s \n", 
-                        (NOTPRSNT != s->orig.orig.sessId.pres)?(char*)s->orig.orig.sessId.val:"Not Present");
+                               switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "\t Session Version = %s \n", 
+                                               (NOTPRSNT != s->orig.orig.sessVer.pres)?(char*)s->orig.orig.sessVer.val:"Not Present");
 
-                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "\t Session Version = %s \n", 
-                        (NOTPRSNT != s->orig.orig.sessVer.pres)?(char*)s->orig.orig.sessVer.val:"Not Present");
+                               /* sdpAddr */
+                               switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "\t Net Type = %d \n", 
+                                               (NOTPRSNT != s->orig.orig.sdpAddr.netType.type.pres)?s->orig.orig.sdpAddr.netType.type.val:-1);
 
-                /* sdpAddr */
-                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "\t Net Type = %d \n", 
-                        (NOTPRSNT != s->orig.orig.sdpAddr.netType.type.pres)?s->orig.orig.sdpAddr.netType.type.val:-1);
+                               switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "\t Address Type = %d \n", 
+                                               (NOTPRSNT != s->orig.orig.sdpAddr.addrType.pres)?s->orig.orig.sdpAddr.addrType.val:-1);
 
-                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "\t Address Type = %d \n", 
-                        (NOTPRSNT != s->orig.orig.sdpAddr.addrType.pres)?s->orig.orig.sdpAddr.addrType.val:-1);
+                               /* print IPV4 address */
+                               if (s->orig.orig.sdpAddr.addrType.pres && s->orig.orig.sdpAddr.addrType.val == CM_SDP_ADDR_TYPE_IPV4 &&
+                                               s->orig.orig.sdpAddr.netType.type.val == CM_SDP_NET_TYPE_IN &&
+                                               s->orig.orig.sdpAddr.u.ip4.addrType.val == CM_SDP_IPV4_IP_UNI) {
 
-                /* print IPV4 address */
-                if (s->orig.orig.sdpAddr.addrType.pres && s->orig.orig.sdpAddr.addrType.val == CM_SDP_ADDR_TYPE_IPV4 &&
-                        s->orig.orig.sdpAddr.netType.type.val == CM_SDP_NET_TYPE_IN &&
-                        s->orig.orig.sdpAddr.u.ip4.addrType.val == CM_SDP_IPV4_IP_UNI) {
+                                       if (s->orig.orig.sdpAddr.u.ip4.addrType.pres) {
+                                               switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "Address: %d.%d.%d.%d\n",
+                                                               s->orig.orig.sdpAddr.u.ip4.u.ip.b[0].val,
+                                                               s->orig.orig.sdpAddr.u.ip4.u.ip.b[1].val,
+                                                               s->orig.orig.sdpAddr.u.ip4.u.ip.b[2].val,
+                                                               s->orig.orig.sdpAddr.u.ip4.u.ip.b[3].val);
+                                       }
 
-                    if (s->orig.orig.sdpAddr.u.ip4.addrType.pres) {
-                        switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "Address: %d.%d.%d.%d\n",
-                                s->orig.orig.sdpAddr.u.ip4.u.ip.b[0].val,
-                                s->orig.orig.sdpAddr.u.ip4.u.ip.b[1].val,
-                                s->orig.orig.sdpAddr.u.ip4.u.ip.b[2].val,
-                                s->orig.orig.sdpAddr.u.ip4.u.ip.b[3].val);
-                    }
+                               }else{
+                                       switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "\t O-line not present \n"); 
+                               }
+                               switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "********** ****** \n");
+                       }
+               } else{
+                       switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "\t O-line not present \n"); 
+               }
+               /************************************************************************************************************************/
+               /* Session Name (s = line) */
 
-                }else{
-                    switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "\t O-line not present \n"); 
-                }
-                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "********** ****** \n");
-            }
-        } else{
-            switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "\t O-line not present \n"); 
-        }
-        /************************************************************************************************************************/
-        /* Session Name (s = line) */
+               if(NOTPRSNT != s->sessName.pres) {
+                       switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "\t Session Name = %s \n", s->sessName.val); 
+               } else{
+                       switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "\t s-line not present \n"); 
+               }
 
-        if(NOTPRSNT != s->sessName.pres) {
-            switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "\t Session Name = %s \n", s->sessName.val); 
-        } else{
-            switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "\t s-line not present \n"); 
-        }
+               /************************************************************************************************************************/
+               /* Session Info(i= line) */
 
-        /************************************************************************************************************************/
-        /* Session Info(i= line) */
+               if(NOTPRSNT != s->info.pres) {
+                       switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "\t Session Info = %s \n", s->info.val); 
+               } else{
+                       switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "\t i-line not present \n"); 
+               }
 
-        if(NOTPRSNT != s->info.pres) {
-            switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "\t Session Info = %s \n", s->info.val); 
-        } else{
-            switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "\t i-line not present \n"); 
-        }
+               /************************************************************************************************************************/
+               /* Session Uri */
 
-        /************************************************************************************************************************/
-        /* Session Uri */
+               if(NOTPRSNT != s->uri.pres) {
+                       switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "\t Session Uri = %s \n", s->uri.val); 
+               } else{
+                       switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "\t uri not present \n"); 
+               }
 
-        if(NOTPRSNT != s->uri.pres) {
-            switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "\t Session Uri = %s \n", s->uri.val); 
-        } else{
-            switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "\t uri not present \n"); 
-        }
+               /************************************************************************************************************************/
+               /* E-Mail */
+               /* TODO */
 
-        /************************************************************************************************************************/
-        /* E-Mail */
-        /* TODO */
 
+               /************************************************************************************************************************/
+               /* Phone */
+               /* TODO */
 
-        /************************************************************************************************************************/
-        /* Phone */
-        /* TODO */
 
+               /************************************************************************************************************************/
+               /* connection line */
 
-        /************************************************************************************************************************/
-        /* connection line */
+               mgco_handle_sdp_c_line(&s->conn, term, sdp_type);
+               /************************************************************************************************************************/
+               /* Bandwidth */
+               /* TODO */
 
-        mgco_print_sdp_c_line(&s->conn);
-        /************************************************************************************************************************/
-        /* Bandwidth */
-        /* TODO */
+               /************************************************************************************************************************/
+               /* SDP Time (t= line)*/
 
-        /************************************************************************************************************************/
-        /* SDP Time (t= line)*/
+               switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "*** t-line **************** \n");
+               if(NOTPRSNT != s->sdpTime.pres.pres) {
+                       if(NOTPRSNT != s->sdpTime.sdpOpTimeSet.numComp.pres) {
+                               int i = 0x00;
+                               switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "SDP op time present with total component[%d]\n", s->sdpTime.sdpOpTimeSet.numComp.val);
+                               for (i = 0;i<s->sdpTime.sdpOpTimeSet.numComp.val;i++){
+                                       CmSdpOpTime* t = s->sdpTime.sdpOpTimeSet.sdpOpTime[i];
+                                       if(NOTPRSNT == t->pres.pres) continue;
 
-        switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "*** t-line **************** \n");
-        if(NOTPRSNT != s->sdpTime.pres.pres) {
-            if(NOTPRSNT != s->sdpTime.sdpOpTimeSet.numComp.pres) {
-                int i = 0x00;
-                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "SDP op time present with total component[%d]\n", s->sdpTime.sdpOpTimeSet.numComp.val);
-                for (i = 0;i<s->sdpTime.sdpOpTimeSet.numComp.val;i++){
-                    CmSdpOpTime* t = s->sdpTime.sdpOpTimeSet.sdpOpTime[i];
-                    if(NOTPRSNT == t->pres.pres) continue;
+                                       switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "\t Start Time = %s \n", 
+                                                       (NOTPRSNT != t->startTime.pres)?(char*)t->startTime.val:"Not Present");
 
-                    switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "\t Start Time = %s \n", 
-                            (NOTPRSNT != t->startTime.pres)?(char*)t->startTime.val:"Not Present");
+                                       switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "\t Stop Time = %s \n", 
+                                                       (NOTPRSNT != t->stopTime.pres)?(char*)t->stopTime.val:"Not Present");
 
-                    switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "\t Stop Time = %s \n", 
-                            (NOTPRSNT != t->stopTime.pres)?(char*)t->stopTime.val:"Not Present");
+                                       /*repeat time repFieldSet */
 
-                    /*repeat time repFieldSet */
+                                       if(NOTPRSNT != t->repFieldSet.numComp.pres) {
+                                               switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "SDP repeat time present with total component[%d]\n", 
+                                                               t->repFieldSet.numComp.val);
 
-                    if(NOTPRSNT != t->repFieldSet.numComp.pres) {
-                        switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "SDP repeat time present with total component[%d]\n", 
-                                t->repFieldSet.numComp.val);
+                                               /*TODO - print repeat fields */
+                                       }else{
+                                               switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "SDP repeat time not present \n");
+                                       }
+                               } /* sdpOpTimeSet.numComp for loop -- end */
+                       }else{/*sdpOpTimeSet.numComp.pres if -- end */
+                               switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "SDP op time not present \n");
+                       }
 
-                        /*TODO - print repeat fields */
-                    }else{
-                        switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "SDP repeat time not present \n");
-                    }
-                } /* sdpOpTimeSet.numComp for loop -- end */
-            }else{/*sdpOpTimeSet.numComp.pres if -- end */
-                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "SDP op time not present \n");
-            }
+                       /*TODO - zoneAdjSet */
+               }else{
+                       switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "t-line not present \n");
+               }
+               switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "**************** \n");
 
-            /*TODO - zoneAdjSet */
-        }else{
-            switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "t-line not present \n");
-        }
-        switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "**************** \n");
 
+               /************************************************************************************************************************/
+               /* key type (k= line)*/
 
-        /************************************************************************************************************************/
-        /* key type (k= line)*/
+               if(NOTPRSNT != s->keyType.pres.pres) {
+                       switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "\t Key Type = %d \n", 
+                                       (NOTPRSNT != s->keyType.keyType.pres)?s->keyType.keyType.val:-1);
 
-        if(NOTPRSNT != s->keyType.pres.pres) {
-            switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "\t Key Type = %d \n", 
-                    (NOTPRSNT != s->keyType.keyType.pres)?s->keyType.keyType.val:-1);
+                       switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "\t Key Data = %s \n", 
+                                       (NOTPRSNT != s->keyType.key_data.pres)?(char*)s->keyType.key_data.val:"Not Present");
+               }else{
+                       switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "k-line not present \n");
+               }
 
-            switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "\t Key Data = %s \n", 
-                    (NOTPRSNT != s->keyType.key_data.pres)?(char*)s->keyType.key_data.val:"Not Present");
-        }else{
-            switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "k-line not present \n");
-        }
+               /************************************************************************************************************************/
+               /* Attribute Set */
 
-        /************************************************************************************************************************/
-        /* Attribute Set */
-
-        mgco_print_sdp_attr_set(&s->attrSet);
-        
-        /************************************************************************************************************************/
-        /* Media Descriptor Set */
-
-        if (s->mediaDescSet.numComp.pres) {
-            switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "****** Media Descriptor Set present with numComp[%d]\n", s->mediaDescSet.numComp.val);
-            for (mediaId = 0; mediaId < s->mediaDescSet.numComp.val; mediaId++) {
-                CmSdpMediaDesc *desc = s->mediaDescSet.mediaDesc[mediaId];
-
-                if(NOTPRSNT == desc->pres.pres) continue;
-
-                /* Media Field */
-                {
-                    CmSdpMediaField* f = &desc->field; 
-                    switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "\t Media Type = %d \n",(NOTPRSNT == f->mediaType.pres)?f->mediaType.val:-1);
-                    switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "\t Media  = %s \n",(NOTPRSNT == f->media.pres)?(char*)f->media.val:"Not Present");
-                    /* Channel ID */
-                    if(NOTPRSNT != f->id.type.pres){
-                        switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "\t VcId Type = %d \n", f->id.type.val);
-                        switch(f->id.type.val){
-                            case CM_SDP_VCID_PORT:
-                                {
-                                    CmSdpPort         *p = &f->id.u.port;
-                                    switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "CM_SDP_VCID_PORT:\n");
-                                    switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "\t SDP port type = %d \n", (NOTPRSNT == p->type.pres)?p->type.val:-1);
-                                    switch(p->type.val)
-                                    {
-                                        case CM_SDP_PORT_INT:
-                                            {
-                                                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "\t CM_SDP_PORT_INT: SDP port = %d  type = %d \n", p->u.portInt.port.val.val, p->u.portInt.port.type.val);
-                                                break;
-                                            }
-                                        case CM_SDP_PORT_VPCID:
-                                            {
-                                                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "\t CM_SDP_PORT_VPCID: \n"); 
-                                                break;
-                                            }
-                                        default:
-                                            break;
-                                    }
-                                    break;
-                                }
-                            default:
-                                break;
-                        }
-                    }
-                    mgco_print_sdp_media_param(&f->par);
-                }
-
-                /*info */
-                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "\t Info  = %s \n",(NOTPRSNT == desc->info.pres)?(char*)desc->info.val:"Not Present");
-
-                /*connection set */
-                {
-                    int cnt=0x00;
-                    if(NOTPRSNT != desc->connSet.numComp.pres){
-                        switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "\t Number of Connection component[%d]\n",desc->connSet.numComp.val); 
-                        for(cnt=0;cnt<desc->connSet.numComp.val;cnt++){
-                            switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "************************\n");
-                            mgco_print_sdp_c_line(desc->connSet.connSet[cnt]);
-                            switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "************************\n");
-                        }
-                    }
-                }
+               mgco_print_sdp_attr_set(&s->attrSet);
 
-                /* attribute set */
-                mgco_print_sdp_attr_set(&desc->attrSet);
+               /************************************************************************************************************************/
+               /* Media Descriptor Set */
 
+               if (s->mediaDescSet.numComp.pres) {
+                       switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "****** Media Descriptor Set present with numComp[%d]\n", s->mediaDescSet.numComp.val);
+                       for (mediaId = 0; mediaId < s->mediaDescSet.numComp.val; mediaId++) {
+                               CmSdpMediaDesc *desc = s->mediaDescSet.mediaDesc[mediaId];
 
-                if (desc->field.mediaType.val == CM_SDP_MEDIA_AUDIO &&
-                        desc->field.id.type.val ==  CM_SDP_VCID_PORT &&
-                        desc->field.id.u.port.type.val == CM_SDP_PORT_INT &&
-                        desc->field.id.u.port.u.portInt.port.type.val == CM_SDP_SPEC) {
-                    int port = desc->field.id.u.port.u.portInt.port.val.val;
+                               if(NOTPRSNT == desc->pres.pres) continue;
 
-                    switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "Port: %d\n", port);
+                               /* Media Field */
+                               {
+                                       CmSdpMediaField* f = &desc->field; 
+                                       switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "\t Media Type = %d \n",(NOTPRSNT == f->mediaType.pres)?f->mediaType.val:-1);
+                                       switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "\t Media  = %s \n",(NOTPRSNT == f->media.pres)?(char*)f->media.val:"Not Present");
+                                       /* Channel ID */
+                                       if(NOTPRSNT != f->id.type.pres){
+                                               switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "\t VcId Type = %d \n", f->id.type.val);
+                                               switch(f->id.type.val){
+                                                       case CM_SDP_VCID_PORT:
+                                                               {
+                                                                       CmSdpPort         *p = &f->id.u.port;
+                                                                       switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "CM_SDP_VCID_PORT:\n");
+                                                                       switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "\t SDP port type = %d \n", (NOTPRSNT == p->type.pres)?p->type.val:-1);
+                                                                       switch(p->type.val)
+                                                                       {
+                                                                               case CM_SDP_PORT_INT:
+                                                                                       {
+                                                                                               switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE,
+                                                                                                                 "\t CM_SDP_PORT_INT: SDP port = %d  type = %d \n", 
+                                                                                                                p->u.portInt.port.val.val, p->u.portInt.port.type.val);
+                                                                                               if(MG_SDP_REMOTE == sdp_type) {
+                                                                                               /* update remote information */
+                                                                                                       if(MG_TERM_RTP == term->type){
+                                                                                                               term->u.rtp.remote_port = p->u.portInt.port.val.val;
+                                                                                                               printf("Update remote port to [%d]\n", term->u.rtp.remote_port);
+                                                                                                       }
+                                                                                               }
+                                                                                               break;
+                                                                                       }
+                                                                               case CM_SDP_PORT_VPCID:
+                                                                                       {
+                                                                                               switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "\t CM_SDP_PORT_VPCID: \n"); 
+                                                                                               break;
+                                                                                       }
+                                                                               default:
+                                                                                       break;
+                                                                       }
+                                                                       break;
+                                                               }
+                                                       default:
+                                                               break;
+                                               }
+                                       }
+                                       mgco_print_sdp_media_param(&f->par);
+                               }
 
-                }
-            }
-        }
-    }
+                               /*info */
+                               switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "\t Info  = %s \n",(NOTPRSNT == desc->info.pres)?(char*)desc->info.val:"Not Present");
+
+                               /*connection set */
+                               {
+                                       int cnt=0x00;
+                                       if(NOTPRSNT != desc->connSet.numComp.pres){
+                                               switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "\t Number of Connection component[%d]\n",desc->connSet.numComp.val); 
+                                               for(cnt=0;cnt<desc->connSet.numComp.val;cnt++){
+                                                       switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "************************\n");
+                                                       mgco_handle_sdp_c_line(desc->connSet.connSet[cnt], term, sdp_type);
+                                                       switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "************************\n");
+                                               }
+                                       }
+                               }
+
+                               /* attribute set */
+                               mgco_print_sdp_attr_set(&desc->attrSet);
+
+
+                               if (desc->field.mediaType.val == CM_SDP_MEDIA_AUDIO &&
+                                               desc->field.id.type.val ==  CM_SDP_VCID_PORT &&
+                                               desc->field.id.u.port.type.val == CM_SDP_PORT_INT &&
+                                               desc->field.id.u.port.u.portInt.port.type.val == CM_SDP_SPEC) {
+                                       int port = desc->field.id.u.port.u.portInt.port.val.val;
+
+                                       switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "Port: %d\n", port);
+                               }
+                       }
+               }
+       }
 }
 
 /*****************************************************************************************************************************/
index 1533ca7d155f7cfbfed19eaf0c3e0b1e7bc6cf3b..de315d7ae9b6a14a9c044f61f83d625c4c152de7 100644 (file)
@@ -639,7 +639,7 @@ void handle_mgco_cmd_ind(Pst *pst, SuId suId, MgMgcoCommand* cmd)
                             MgMgcoNtfyReply*  ntfy = &cmd->u.mgCmdCfm[0]->u.ntfy;
                             MgMgcoTermId*     term = NULL;
                             char              term_name[32]; 
-                            memset(&term_name[0], 32, 0x00);
+                            memset(&term_name[0], 0x00,32);
 
                             strcpy(&term_name[0], "Invalid");
 
@@ -685,7 +685,7 @@ void handle_mgco_cmd_ind(Pst *pst, SuId suId, MgMgcoCommand* cmd)
                             MgMgcoSvcChgReply*  svc = &cmd->u.mgCmdCfm[0]->u.svc;
                             MgMgcoTermId*     term = NULL;
                             char              term_name[32]; 
-                            memset(&term_name[0], 32, 0x00);
+                            memset(&term_name[0], 0x00, 32);
 
                             strcpy(&term_name[0], "Invalid");
 
index c1960877bd1d402d7be47ae86e09db61d776a655..bf2fda7a05b86a74fb839d724ea75da9467d86cf 100644 (file)
@@ -231,6 +231,7 @@ mg_context_t *megaco_choose_context(megaco_profile_t *profile);
 void megaco_release_context(mg_context_t *ctx);
 switch_status_t megaco_context_sub_termination(mg_context_t *ctx, mg_termination_t *term);
 switch_status_t megaco_context_sub_all_termination(mg_context_t *ctx);
+switch_status_t megaco_activate_termination(mg_termination_t *term);
 
 mg_termination_t *megaco_choose_termination(megaco_profile_t *profile, const char *prefix);
 mg_termination_t *megaco_find_termination(megaco_profile_t *profile, const char *name);
index d56ca14a1ff33427281e461b32e0d3b7d9eb5f20..04feb55a8a654de144b310ccb87f476bc2204aa8 100644 (file)
@@ -315,7 +315,8 @@ static switch_status_t channel_read_frame(switch_core_session_t *session, switch
        tech_pvt = switch_core_session_get_private(session);
        assert(tech_pvt != NULL);
     
-    if (!tech_pvt->rtp_session || tech_pvt->mode == RTP_RECVONLY) {
+    if (!tech_pvt->rtp_session || tech_pvt->mode == RTP_SENDONLY) {
+       switch_yield(20000); /* replace by local timer XXX */
         goto cng;
     }
         
@@ -338,6 +339,7 @@ static switch_status_t channel_read_frame(switch_core_session_t *session, switch
     
 cng:
     *frame = &tech_pvt->read_frame;
+    tech_pvt->read_frame.codec = &tech_pvt->read_codec;
     tech_pvt->read_frame.flags |= SFF_CNG;
     tech_pvt->read_frame.datalen = 0;
     
@@ -370,8 +372,11 @@ static switch_status_t channel_write_frame(switch_core_session_t *session, switc
     
     tech_pvt->timestamp_send += samples;
 #endif
-    
-       switch_rtp_write_frame(tech_pvt->rtp_session, frame);
+    if (tech_pvt->mode == RTP_RECVONLY) {
+       return SWITCH_STATUS_SUCCESS;
+    }
+
+    switch_rtp_write_frame(tech_pvt->rtp_session, frame);
 
     return SWITCH_STATUS_SUCCESS;
 }
@@ -403,7 +408,11 @@ static switch_bool_t compare_var(switch_event_t *event, switch_channel_t *channe
 {
     const char *chan_val = switch_channel_get_variable_dup(channel, varname, SWITCH_FALSE, -1);
     const char *event_val = switch_event_get_header(event, varname);
-    
+
+    if (zstr(chan_val) || zstr(event_val)) {
+       return 1;
+    }    
+
     return strcasecmp(chan_val, event_val);
 }
 
@@ -418,7 +427,7 @@ static switch_status_t channel_receive_event(switch_core_session_t *session, swi
         if (compare_var(event, channel, kREMOTEADDR) ||
             compare_var(event, channel, kREMOTEPORT)) {
             char *remote_addr = switch_event_get_header(event, kREMOTEADDR);
-            char *szremote_port = switch_event_get_header(event, kREMOTEADDR);
+            char *szremote_port = switch_event_get_header(event, kREMOTEPORT);
             switch_port_t remote_port = !zstr(szremote_port) ? atoi(szremote_port) : 0;
             const char *err;
 
index 138123f3eb20118a3da677b35144294817990d59..a563a67b1a0ebec1f16e60a32160913181828247 100644 (file)
@@ -4154,8 +4154,8 @@ SWITCH_DECLARE(const char *) switch_channel_get_partner_uuid(switch_channel_t *c
 {
        const char *uuid = NULL;
 
-       if (!(uuid = switch_channel_get_variable(channel, SWITCH_SIGNAL_BOND_VARIABLE))) {
-               uuid = switch_channel_get_variable(channel, SWITCH_ORIGINATE_SIGNAL_BOND_VARIABLE);
+       if (!(uuid = switch_channel_get_variable_dup(channel, SWITCH_SIGNAL_BOND_VARIABLE, SWITCH_FALSE, -1))) {
+               uuid = switch_channel_get_variable_dup(channel, SWITCH_ORIGINATE_SIGNAL_BOND_VARIABLE, SWITCH_FALSE, -1);
        }
 
        return uuid;
index 16e473e30fe66b618bcbb8c3f7226c406fef05cb..f3234a21b28625dba73c33702361a64891712318 100644 (file)
@@ -2165,7 +2165,7 @@ SWITCH_DECLARE(uint8_t) switch_rtp_ready(switch_rtp_t *rtp_session)
        }
 
        switch_mutex_lock(rtp_session->flag_mutex);
-       ret = (switch_test_flag(rtp_session, SWITCH_RTP_FLAG_IO) && rtp_session->sock_input && rtp_session->sock_output && rtp_session->remote_addr
+       ret = (switch_test_flag(rtp_session, SWITCH_RTP_FLAG_IO) && rtp_session->sock_input /* && rtp_session->sock_output && rtp_session->remote_addr */
                   && rtp_session->ready == 2) ? 1 : 0;
        switch_mutex_unlock(rtp_session->flag_mutex);