]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
update
authorAnthony Minessale <anthony.minessale@gmail.com>
Wed, 26 Apr 2006 20:15:16 +0000 (20:15 +0000)
committerAnthony Minessale <anthony.minessale@gmail.com>
Wed, 26 Apr 2006 20:15:16 +0000 (20:15 +0000)
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@1266 d0543943-73ff-0310-b7d9-9358b9ac24b2

src/include/switch_channel.h
src/switch_channel.c
src/switch_core.c
src/switch_ivr.c

index f65defe1794b119e234973afe0053c73f778cc09..acbaa92bee68dec0dfbb93b02bb9c77831abce53 100644 (file)
@@ -85,7 +85,7 @@ SWITCH_DECLARE(switch_channel_state) switch_channel_set_state(switch_channel *ch
   \param str the string to check
   \return the code
 */
-SWITCH_DECLARE(switch_call_cause_t) switch_channel_cause2str(char *str);
+SWITCH_DECLARE(switch_call_cause_t) switch_channel_str2cause(char *str);
 
 /*!
   \brief return the cause code for a given channel
@@ -99,7 +99,7 @@ SWITCH_DECLARE(switch_call_cause_t) switch_channel_get_cause(switch_channel *cha
   \param cause the code to check
   \return the string
 */
-SWITCH_DECLARE(char *) switch_channel_str2cause(switch_call_cause_t cause);
+SWITCH_DECLARE(char *) switch_channel_cause2str(switch_call_cause_t cause);
 
 /*!
   \brief View the timetable of a channel
index c5c65af6c571de7502460ddfe99bc920823fe366..9a622f3af68f67dc02b05781047f11f4489f689f 100644 (file)
@@ -109,7 +109,7 @@ struct switch_channel {
 };
 
 
-SWITCH_DECLARE(char *) switch_channel_str2cause(switch_call_cause_t cause)
+SWITCH_DECLARE(char *) switch_channel_cause2str(switch_call_cause_t cause)
 {
        uint8_t x;
        char *str = "UNALLOCATED";
@@ -123,7 +123,7 @@ SWITCH_DECLARE(char *) switch_channel_str2cause(switch_call_cause_t cause)
        return str;
 }
 
-SWITCH_DECLARE(switch_call_cause_t) switch_channel_cause2str(char *str)
+SWITCH_DECLARE(switch_call_cause_t) switch_channel_str2cause(char *str)
 {
        uint8_t x;
        switch_call_cause_t cause = SWITCH_CAUSE_UNALLOCATED;
@@ -412,7 +412,6 @@ SWITCH_DECLARE(switch_channel_state) switch_channel_set_state(switch_channel *ch
                case CS_TRANSMIT:
                case CS_RING:
                case CS_EXECUTE:
-               case CS_HANGUP:
                        ok++;
                default:
                        break;
@@ -424,7 +423,6 @@ SWITCH_DECLARE(switch_channel_state) switch_channel_set_state(switch_channel *ch
                case CS_TRANSMIT:
                case CS_RING:
                case CS_EXECUTE:
-               case CS_HANGUP:
                        ok++;
                default:
                        break;
@@ -436,7 +434,6 @@ SWITCH_DECLARE(switch_channel_state) switch_channel_set_state(switch_channel *ch
                case CS_LOOPBACK:
                case CS_RING:
                case CS_EXECUTE:
-               case CS_HANGUP:
                        ok++;
                default:
                        break;
@@ -447,7 +444,6 @@ SWITCH_DECLARE(switch_channel_state) switch_channel_set_state(switch_channel *ch
                switch (state) {
                case CS_LOOPBACK:
                case CS_EXECUTE:
-               case CS_HANGUP:
                case CS_TRANSMIT:
                        ok++;
                default:
@@ -460,7 +456,6 @@ SWITCH_DECLARE(switch_channel_state) switch_channel_set_state(switch_channel *ch
                case CS_LOOPBACK:
                case CS_TRANSMIT:
                case CS_RING:
-               case CS_HANGUP:
                        ok++;
                default:
                        break;
@@ -483,7 +478,6 @@ SWITCH_DECLARE(switch_channel_state) switch_channel_set_state(switch_channel *ch
 
 
        if (ok) {
-               switch_event *event;
                
                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "%s State Change %s -> %s\n", channel->name,
                                                          state_names[last_state], state_names[state]);
@@ -492,10 +486,12 @@ SWITCH_DECLARE(switch_channel_state) switch_channel_set_state(switch_channel *ch
                if (state == CS_HANGUP && channel->hangup_cause == SWITCH_CAUSE_UNALLOCATED) {
                        channel->hangup_cause = SWITCH_CAUSE_NORMAL_CLEARING;
                }
-
-               if (switch_event_create(&event, SWITCH_EVENT_CHANNEL_STATE) == SWITCH_STATUS_SUCCESS) {
-                       switch_channel_event_set_data(channel, event);
-                       switch_event_fire(&event);
+               if (state < CS_HANGUP) {
+                       switch_event *event;
+                       if (switch_event_create(&event, SWITCH_EVENT_CHANNEL_STATE) == SWITCH_STATUS_SUCCESS) {
+                               switch_channel_event_set_data(channel, event);
+                               switch_event_fire(&event);
+                       }
                }
                
                if (state < CS_DONE) {
@@ -700,9 +696,12 @@ SWITCH_DECLARE(switch_channel_state) switch_channel_hangup(switch_channel *chann
 
        if (channel->state < CS_HANGUP) {
                switch_event *event;
+               switch_channel_state last_state = channel->state;
 
                channel->state = CS_HANGUP;
                channel->hangup_cause = hangup_cause;
+               switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Hangup %s [%s] [%s]\n", channel->name,
+                                                 state_names[last_state], switch_channel_cause2str(channel->hangup_cause));
                if (switch_event_create(&event, SWITCH_EVENT_CHANNEL_STATE) == SWITCH_STATUS_SUCCESS) {
                        switch_channel_event_set_data(channel, event);
                        switch_event_fire(&event);
index dc25e69f3fa5fa4b1f9a2158dca317551df6e4aa..5b2b96a28981d9877903c2ab7a39f8554e1181a9 100644 (file)
@@ -1704,7 +1704,7 @@ static void switch_core_standard_on_ring(switch_core_session *session)
 
        if ((caller_profile = switch_channel_get_caller_profile(session->channel)) == 0) {
                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Can't get profile!\n");
-               switch_channel_set_state(session->channel, CS_HANGUP);
+               switch_channel_hangup(session->channel, SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER);
        } else {
                if (!switch_strlen_zero(caller_profile->dialplan)) {
                        dialplan_interface = switch_loadable_module_get_dialplan_interface(caller_profile->dialplan);
@@ -1734,7 +1734,7 @@ static void switch_core_standard_on_execute(switch_core_session *session)
        switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Standard EXECUTE\n");
        if ((extension = switch_channel_get_caller_extension(session->channel)) == 0) {
                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "No Extension!\n");
-               switch_channel_set_state(session->channel, CS_HANGUP);
+               switch_channel_hangup(session->channel, SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER);
                return;
        }
 
@@ -1747,14 +1747,14 @@ static void switch_core_standard_on_execute(switch_core_session *session)
                         switch_loadable_module_get_application_interface(extension->current_application->application_name)) == 0) {
                        switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Invalid Application %s\n",
                                                                  extension->current_application->application_name);
-                       switch_channel_set_state(session->channel, CS_HANGUP);
+                       switch_channel_hangup(session->channel, SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER);
                        return;
                }
 
                if (!application_interface->application_function) {
                        switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "No Function for %s\n",
                                                                  extension->current_application->application_name);
-                       switch_channel_set_state(session->channel, CS_HANGUP);
+                       switch_channel_hangup(session->channel, SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER);
                        return;
                }
                
@@ -1767,9 +1767,9 @@ static void switch_core_standard_on_execute(switch_core_session *session)
                application_interface->application_function(session, extension->current_application->application_data);
                extension->current_application = extension->current_application->next;
        }
-
+       
        if (switch_channel_get_state(session->channel) == CS_EXECUTE) {
-               switch_channel_set_state(session->channel, CS_HANGUP);
+               switch_channel_hangup(session->channel, SWITCH_CAUSE_NORMAL_CLEARING);
        }
 }
 
index a4b9f74e5287eb9e56acab1b1a6840a99f78b8d8..59d8f062beb1510ddf0eab854a233b9e44c2eb77 100644 (file)
@@ -780,6 +780,7 @@ static void *audio_bridge_thread(switch_thread *thread, void *obj)
        switch_core_session_receive_message(session_a, &msg);
 
        data->running = 0;
+       switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "BRIDGE THREAD DONE [%s]\n", switch_channel_get_name(chan_a));
 
        if (switch_channel_test_flag(chan_a, CF_ORIGINATOR)) {
                if (switch_channel_test_flag(chan_b, CF_TRANSFER)) {
@@ -793,16 +794,10 @@ static void *audio_bridge_thread(switch_thread *thread, void *obj)
                        switch_channel_hangup(chan_b, SWITCH_CAUSE_NORMAL_CLEARING);
                }
                switch_channel_clear_flag(chan_a, CF_ORIGINATOR);
-       } 
        
-       while (his_thread->running > 0) {
-               his_thread->running = -1;
-               /* wait for the other audio thread */
-               while (his_thread->running == -1) {
-                       switch_yield(1000);
-               }
        }
 
+       
        data->running = 0;              
        return NULL;
 }