[Freeswitch-users] Correct way to hangup a channel

Stephen Wilde wstephen80 at gmail.com
Fri Nov 11 00:17:11 MSK 2011


I have the necessity to hangup a channel inside a media bug callback in a
my custom module.

Currently, what I do is:

static switch_bool_t my_media_callback(switch_media_bug_t *bug, void
*user_data, switch_abc_type_t type)
{
    struct my_custom_helper * my_helper = (struct my_custom_helper *)
user_data;

    switch (type) {
    case SWITCH_ABC_TYPE_READ_REPLACE:
    case SWITCH_ABC_TYPE_WRITE_REPLACE:
        {
            switch_frame_t *frame;

            if (sth->read) {
                frame = switch_core_media_bug_get_read_replace_frame(bug);
            } else {
                frame = switch_core_media_bug_get_write_replace_frame(bug);
            }

            /*
            ....
            media analysis
            ....
            */

            if (to_hangup) {
                switch_channel_t *channel =
switch_core_session_get_channel(my_helper->session);

                if (channel) {
                    switch_channel_hangup(channel,
SWITCH_CAUSE_NORMAL_CLEARING);
                }
            }
        }

    return SWITCH_TRUE;
}


The dropped channel is a b-leg, previously bridged with an a-leg (incoming
call).

Probably in my code there is an error because the code works fine and the
channel is correctly dropped but inside Freeswitch remain some "zombies"
calls.
If I issue a fs_cli  "show channels" I see that there are some calls
dropped by my module showed in "ACTIVE" state.
What is wrong with my channel hangup?

Thanks in advance
Stephen
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.freeswitch.org/pipermail/freeswitch-users/attachments/20111110/b39c2a9d/attachment.html 


Join us at ClueCon 2011 Aug 9-11, 2011
More information about the FreeSWITCH-users mailing list