]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
adding "peer_active" flag to check before send any message to megaco stack
authorKapil Gupta <kgupta@sangoma.com>
Thu, 23 Aug 2012 22:15:07 +0000 (18:15 -0400)
committerKapil Gupta <kgupta@sangoma.com>
Thu, 23 Aug 2012 22:15:07 +0000 (18:15 -0400)
src/mod/endpoints/mod_media_gateway/media_gateway.c
src/mod/endpoints/mod_media_gateway/media_gateway_cmd_handler.c
src/mod/endpoints/mod_media_gateway/mod_media_gateway.h

index 54a8fbe3fb693b9b8c3f9cbeeb611cab469a0212..8105b8b158635cb9e88bd851695d18fdbb88d2dc 100644 (file)
@@ -637,6 +637,7 @@ switch_status_t megaco_profile_start(const char *profilename)
        profile->name = switch_core_strdup(pool, profilename);
        profile->next_context_id++;
        profile->inact_tmr = 0x00;
+       profile->peer_active = 0x00;
        profile->inact_tmr_task_id = 0x00;
        
        switch_thread_rwlock_create(&profile->rwlock, pool);
@@ -708,6 +709,8 @@ switch_status_t mgco_init_ins_service_change(SuId suId)
         return SWITCH_STATUS_FALSE;
     }
 
+    profile->peer_active = 0x01;
+
     switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO,
             "mgco_init_ins_service_change : Initiating terminations service change for profile: %s\n", profile->name);
 
index e45fc1cda8a2bd79f46b33805a2d5f38bfab808f..9c078bec5a4d7cd6dde5e3baf25d0f502cf46d59 100644 (file)
@@ -2479,6 +2479,14 @@ U32 get_txn_id(){
        return outgoing_txn_id;
 }
 /*****************************************************************************************************************************/
+switch_status_t mg_is_peer_active(megaco_profile_t* profile)
+{
+       if((profile) && (0x01 == profile->peer_active)){
+               return SWITCH_STATUS_SUCCESS;
+       }
+       return SWITCH_STATUS_FALSE;
+}
+/*****************************************************************************************************************************/
 switch_status_t mg_send_term_service_change(char *span_name, char *chan_number, mg_term_states_e term_state)
 {
        mg_termination_t* term = NULL;
@@ -2493,6 +2501,12 @@ switch_status_t mg_send_term_service_change(char *span_name, char *chan_number,
                return SWITCH_STATUS_FALSE;
        }
 
+    if(SWITCH_STATUS_FALSE == mg_is_peer_active(term->profile))
+    {
+               switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "profile: %s peer not yet enabled..\n", term->profile->name);
+               return SWITCH_STATUS_FALSE;
+       }
+
        switch(term_state)
        {
                case MG_TERM_SERVICE_STATE_IN_SERVICE:
index a3d8c2fc046e9599669e33ce2908685c8bd75f80..ce44617e28393746f233dfafcd0a8477978b02cb 100644 (file)
@@ -205,6 +205,7 @@ struct megaco_profile_s {
        char*                   peer_list[MG_MAX_PEERS];     /* MGC Peer ID LIST */
     char*                   codec_prefs;
        int                                             inact_tmr;                   /* inactivity timer value */
+       int                                             peer_active;                   /* inactivity timer value */
     uint32_t                inact_tmr_task_id;                 /* FS timer scheduler task-id */
     
     switch_thread_rwlock_t  *contexts_rwlock;
@@ -221,6 +222,8 @@ struct megaco_profile_s {
     switch_thread_rwlock_t *terminations_rwlock;
 };
 
+
+
 static inline const char *megaco_codec_str(megaco_codec_t codec)
 {
     switch (codec) {