[Freeswitch-dev] Issue while creating a session for an incoming call in managed application

Papineni, Suneel SPapineni at enghouse.com
Wed Jun 13 19:29:06 MSD 2012


Hi,

I am having a third party VoIP client which exposes API in .NET to communicate with my application. I want to use this client as an endpoint in Freeswitch (like how it is implemented in "mod_skypopen" module), so that calls coming to this client can be handled at Freeswitch and (if required) bridge calls to clients connected to Freeswitch.

To implement this, I have written a managed module in which "ILoadNotificationPlugin" is implemented where config (client's interface config) is loaded.

When there is an incoming call (ringing state) to the client, I get handle in managed module and trying to establish a session at freeswitch. While doing this I am getting exception as "Attempted to read or write protected memory. This is often an indication that other memory is corrupt."
Here is the code that I am using... Could someone guide me if I am doing this correctly.

Note: I am following "mod_skypopen" as an example...

public static int new_inbound_channel(private_object pobject)
    {
                                SWIGTYPE_p_switch_core_session session = null;
                                SWIGTYPE_p_switch_channel channel = null;
                                switch_endpoint_interface intf = new switch_endpoint_interface();
                                intf.interface_name = "NET_interface";
                                intf.io_routines = io_routines;
                                intf.state_handler = state_handlers;
                                freeswitch.switch_core_set_globals();
                                Api fsApi = new Api();
                                String uuid = fsApi.ExecuteString("create_uuid");
                                try
                                {
                                                session = freeswitch.switch_core_session_request_uuid(intf, switch_call_direction_t.SWITCH_CALL_DIRECTION_INBOUND, 0, null, uuid);  //I am getting the above issue here....
                                                if (session != null)
                                                {
                                                                freeswitch.switch_core_session_add_stream(session, null);
                                                                channel = freeswitch.switch_core_session_get_channel(session);
                                                                if (channel == null)
                                                                {
                                                                                freeswitch.switch_core_session_destroy_state(session);
                                                                                return 0;
                                                                }
                                                                freeswitch.switch_channel_set_variable_name_printf(channel, "waste", "false");

                                                                pobject.caller_profile = freeswitch.switch_caller_profile_new(freeswitch.switch_core_session_get_pool(session), "NETClient", "dialplan", "callid_name", "callid_number", null, null, null, null, "mod_netclient", "context", "destination");
                                                                if (pobject.caller_profile != null)
                                                                {
                                                                                freeswitch.switch_channel_set_name(channel, "name");
                                                                                freeswitch.switch_channel_set_caller_profile(channel, pobject.caller_profile);
                                                                }
                                                                freeswitch.switch_channel_set_state_flag(channel, switch_channel_flag_t.CF_GEN_RINGBACK);
                                                                switch_status_t session_status = freeswitch.switch_core_session_thread_launch(session);
                                                                if (session_status != switch_status_t.SWITCH_STATUS_SUCCESS)
                                                                {
                                                                                freeswitch.switch_core_session_destroy_state(session);
                                                                                return 0;
                                                                }
                                                }
                                }
                                catch (Exception exp)
                                {
                                                string expstring = exp.Message;
                                }
                                return 0;
                }

Thanks & Regards
Suneel
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.freeswitch.org/pipermail/freeswitch-dev/attachments/20120613/0157bac5/attachment.html 


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