]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
suppliment to last commit
authorAnthony Minessale <anthony.minessale@gmail.com>
Mon, 1 Feb 2010 15:36:32 +0000 (15:36 +0000)
committerAnthony Minessale <anthony.minessale@gmail.com>
Mon, 1 Feb 2010 15:36:32 +0000 (15:36 +0000)
git-svn-id: http://svn.openzap.org/svn/openzap/trunk@1014 a93c3328-9c30-0410-af19-c9cd2b2d52af

libs/openzap/mod_openzap/mod_openzap.c

index ef6f183cf6d99fa184312e974e4aea10c81a5553..c74d8640bded029b01286f6b6897211bb0c61893 100644 (file)
@@ -385,6 +385,10 @@ static switch_status_t channel_on_init(switch_core_session_t *session)
        channel = switch_core_session_get_channel(session);
        assert(channel != NULL);
 
+       if (!tech_pvt->zchan) {
+               switch_channel_hangup(channel, SWITCH_CAUSE_LOSE_RACE);
+               return SWITCH_STATUS_SUCCESS;
+       } 
        
        /* Move channel's state machine to ROUTING */
        switch_channel_set_state(channel, CS_ROUTING);
@@ -569,6 +573,11 @@ static switch_status_t channel_send_dtmf(switch_core_session_t *session, const s
        tech_pvt = switch_core_session_get_private(session);
        assert(tech_pvt != NULL);
 
+       if (!tech_pvt->zchan) {
+               switch_channel_hangup(switch_core_session_get_channel(session), SWITCH_CAUSE_LOSE_RACE);
+               return SWITCH_STATUS_FALSE;
+       } 
+
        tmp[0] = dtmf->digit;
        zap_channel_command(tech_pvt->zchan, ZAP_COMMAND_SEND_DTMF, tmp);
                
@@ -594,7 +603,9 @@ 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);
 
-       assert(tech_pvt->zchan != NULL);
+       if (!tech_pvt->zchan) {
+               return SWITCH_STATUS_FALSE;
+       } 
 
        /* Digium Cards sometimes timeout several times in a row here. 
           Yes, we support digium cards, ain't we nice.......
@@ -703,7 +714,9 @@ static switch_status_t channel_write_frame(switch_core_session_t *session, switc
        tech_pvt = switch_core_session_get_private(session);
        assert(tech_pvt != NULL);
 
-       assert(tech_pvt->zchan != NULL);
+       if (!tech_pvt->zchan) {
+               return SWITCH_STATUS_FALSE;
+       } 
 
        if (switch_test_flag(tech_pvt, TFLAG_DEAD)) {
                return SWITCH_STATUS_FALSE;
@@ -763,6 +776,11 @@ static switch_status_t channel_receive_message_cas(switch_core_session_t *sessio
        tech_pvt = (private_t *) switch_core_session_get_private(session);
        assert(tech_pvt != NULL);
        
+       if (!tech_pvt->zchan) {
+        switch_channel_hangup(channel, SWITCH_CAUSE_LOSE_RACE);
+        return SWITCH_STATUS_FALSE;
+    }
+       
        zap_log(ZAP_LOG_DEBUG, "Got Freeswitch message in R2 channel %d [%d]\n", tech_pvt->zchan->physical_chan_id, 
             msg->message_id);
 
@@ -822,7 +840,11 @@ static switch_status_t channel_receive_message_b(switch_core_session_t *session,
                        
        tech_pvt = (private_t *) switch_core_session_get_private(session);
        assert(tech_pvt != NULL);
-       assert(tech_pvt->zchan != NULL);
+
+       if (!tech_pvt->zchan) {
+        switch_channel_hangup(channel, SWITCH_CAUSE_LOSE_RACE);
+        return SWITCH_STATUS_FALSE;
+    }
 
        zap_mutex_lock(tech_pvt->zchan->mutex); 
        if (tech_pvt->zchan->state == ZAP_CHANNEL_STATE_TERMINATING) {
@@ -895,6 +917,11 @@ static switch_status_t channel_receive_message_fxo(switch_core_session_t *sessio
        tech_pvt = (private_t *) switch_core_session_get_private(session);
        assert(tech_pvt != NULL);
 
+       if (!tech_pvt->zchan) {
+        switch_channel_hangup(channel, SWITCH_CAUSE_LOSE_RACE);
+        return SWITCH_STATUS_FALSE;
+    }
+       
        switch (msg->message_id) {
        case SWITCH_MESSAGE_INDICATE_PROGRESS:
        case SWITCH_MESSAGE_INDICATE_ANSWER:
@@ -924,6 +951,11 @@ static switch_status_t channel_receive_message_fxs(switch_core_session_t *sessio
        tech_pvt = (private_t *) switch_core_session_get_private(session);
        assert(tech_pvt != NULL);
 
+       if (!tech_pvt->zchan) {
+        switch_channel_hangup(channel, SWITCH_CAUSE_LOSE_RACE);
+        return SWITCH_STATUS_FALSE;
+    }
+       
        switch (msg->message_id) {
        case SWITCH_MESSAGE_INDICATE_PROGRESS:
        case SWITCH_MESSAGE_INDICATE_ANSWER:
@@ -2891,6 +2923,12 @@ SWITCH_STANDARD_APP(disable_ec_function)
        }
        
        tech_pvt = switch_core_session_get_private(session);
+
+       if (!tech_pvt->zchan) {
+        switch_channel_hangup(switch_core_session_get_channel(session), SWITCH_CAUSE_LOSE_RACE);
+        return;
+    }
+       
        zap_channel_command(tech_pvt->zchan, ZAP_COMMAND_DISABLE_ECHOCANCEL, &x);
        zap_channel_command(tech_pvt->zchan, ZAP_COMMAND_DISABLE_ECHOTRAIN, &x);
        zap_log(ZAP_LOG_INFO, "Echo Canceller Disabled\n");