]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
Taking a stab at MODEVENT-47
authorAndrew Thompson <andrew@hijacked.us>
Fri, 19 Jun 2009 00:51:53 +0000 (00:51 +0000)
committerAndrew Thompson <andrew@hijacked.us>
Fri, 19 Jun 2009 00:51:53 +0000 (00:51 +0000)
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@13856 d0543943-73ff-0310-b7d9-9358b9ac24b2

src/mod/event_handlers/mod_erlang_event/handle_msg.c
src/mod/event_handlers/mod_erlang_event/mod_erlang_event.c

index a8711a63871330e03a43f96245510942417566f3..0d8cac339c8957e3e5277817bbb502f203fe0149 100644 (file)
@@ -914,8 +914,9 @@ int handle_msg(listener_t *listener, erlang_msg *msg, ei_x_buff *buf, ei_x_buff
                                case ERL_REFERENCE_EXT :
                                case ERL_NEW_REFERENCE_EXT :
                                        ret = handle_ref_tuple(listener, msg, buf, rbuf);
+                                       break;
                                default :
-                                       switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "WEEEEEEEE %d\n", type);
+                                       switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "WEEEEEEEE %d %d\n", type, type2);
                                        /* some other kind of erlang term */
                                        ei_x_encode_tuple_header(rbuf, 2);
                                        ei_x_encode_atom(rbuf, "error");
index b494b591a588ce317d77094f4df4aa6783d40488..c243831b864affbcdf742906bdb686cbff9d489d 100644 (file)
@@ -476,8 +476,10 @@ static switch_status_t notify_new_session(listener_t *listener, session_elem_t *
                return SWITCH_STATUS_MEMERR;
        }
 
-       if (!(session = switch_core_session_locate(session_element->uuid_str)))
+       if (!(session = switch_core_session_locate(session_element->uuid_str))) {
+               switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "Can't locate session %s\n", session_element->uuid_str);
                return SWITCH_STATUS_FALSE;
+       }
 
        channel = switch_core_session_get_channel(session);
 
@@ -507,10 +509,9 @@ static switch_status_t notify_new_session(listener_t *listener, session_elem_t *
 
 static switch_status_t check_attached_sessions(listener_t *listener)
 {
-       session_elem_t *last,*sp;
+       session_elem_t *last,*sp, *removed;
        switch_status_t status = SWITCH_STATUS_SUCCESS;
        void *pop;
-       int removed = 0;
        /* check up on all the attached sessions -
           if they have not yet sent an initial call event to the associated erlang process then do so
           if they have pending events in their queues then send them
@@ -520,15 +521,17 @@ static switch_status_t check_attached_sessions(listener_t *listener)
        sp = listener->session_list;
        last = NULL;
        while(sp) {
-               removed = 0;
+               removed = NULL;
                if (switch_test_flag(sp, LFLAG_WAITING_FOR_PID)) {
                        break;
                }
 
                if (!switch_test_flag(sp, LFLAG_OUTBOUND_INIT)) {
                        status = notify_new_session(listener, sp);
-                       if (status != SWITCH_STATUS_SUCCESS)
+                       if (status != SWITCH_STATUS_SUCCESS) {
+                               switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Notifying new session failed\n");
                                break;
+                       }
                        switch_set_flag(sp, LFLAG_OUTBOUND_INIT);
                }
                /* check event queue for this session */
@@ -562,7 +565,7 @@ static switch_status_t check_attached_sessions(listener_t *listener)
 
                                /* this allows the application threads to exit */
                                switch_clear_flag_locked(sp, LFLAG_SESSION_ALIVE);
-                               removed = 1;
+                               removed = sp;
 
                                ei_x_new_with_version(&ebuf);
                                ei_x_encode_atom(&ebuf, "call_hangup");
@@ -578,9 +581,12 @@ static switch_status_t check_attached_sessions(listener_t *listener)
                        }
                        switch_event_destroy(&pevent);
                }
-               if (!removed)
-                       last = sp;
                sp = sp->next;
+               if (removed) {
+                       switch_safe_free(removed)
+               } else {
+                       last = sp;
+               }
        }
        switch_mutex_unlock(listener->session_mutex);
        return status;
@@ -741,6 +747,7 @@ static void listener_main_loop(listener_t *listener)
 #endif
 
                                                if (handle_msg(listener, &msg, &buf, &rbuf)) {
+                                                       switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "handle_msg requested exit\n");
                                                        return;
                                                }
                                                break;
@@ -755,6 +762,7 @@ static void listener_main_loop(listener_t *listener)
 #endif
 
                                                if (handle_msg(listener, &msg, &buf, &rbuf)) {
+                                                       switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "handle_msg requested exit\n");
                                                    return;
                                                }
                                                break;
@@ -789,6 +797,7 @@ static void listener_main_loop(listener_t *listener)
                check_log_queue(listener);
                check_event_queue(listener);
                if (check_attached_sessions(listener) != SWITCH_STATUS_SUCCESS) {
+                       switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "check_attached_sessions requested exit\n");
                        return;
                }
        }
@@ -1067,18 +1076,20 @@ static switch_status_t state_handler(switch_core_session_t *session)
 session_elem_t *session_elem_create(listener_t* listener, switch_core_session_t *session) 
 {
        /* create a session list element */
-       session_elem_t* session_element = switch_core_session_alloc(session, sizeof(*session_element));
-       switch_channel_t *channel = switch_core_session_get_channel(session);
+       session_elem_t* session_element = malloc(sizeof(*session_element));
+       /*switch_channel_t *channel = switch_core_session_get_channel(session);*/
+
+       bzero(session_element, sizeof(*session_element));
 
        memcpy(session_element->uuid_str, switch_core_session_get_uuid(session), SWITCH_UUID_FORMATTED_LENGTH);
        
        switch_queue_create(&session_element->event_queue, SWITCH_CORE_QUEUE_LEN, switch_core_session_get_pool(session));
        switch_mutex_init(&session_element->flag_mutex, SWITCH_MUTEX_NESTED, switch_core_session_get_pool(session));
        
-       switch_channel_set_private(channel, "_erlang_session_", session_element);
-       switch_channel_set_private(channel, "_erlang_listener_", listener);
+       /*switch_channel_set_private(channel, "_erlang_session_", session_element);*/
+       /*switch_channel_set_private(channel, "_erlang_listener_", listener);*/
        
-       switch_core_event_hook_add_state_change(session, state_handler);
+       /*switch_core_event_hook_add_state_change(session, state_handler);*/
        
        return session_element;
 }