diff --git a/src/mod/languages/mod_managed/managed/ManagedSession.cs b/src/mod/languages/mod_managed/managed/ManagedSession.cs index bed7a03878..84718df60f 100644 --- a/src/mod/languages/mod_managed/managed/ManagedSession.cs +++ b/src/mod/languages/mod_managed/managed/ManagedSession.cs @@ -149,6 +149,23 @@ namespace FreeSWITCH.Native }; return del; } + + /// Wraps a nice handler into a delegate suitable for reverse P/Invoke. For native api using + public static switch_state_handler_t_delegate CreateStateHandlerDelegate(Action handler) + { + // We create a ManagedSession on top of the session so callbacks can use it "nicely" + // Then we sort of dispose it. + switch_state_handler_t_delegate del = ptr => + { + using (var sess = new ManagedSession(new SWIGTYPE_p_switch_core_session(ptr, false))) + { + handler(sess); + return switch_status_t.SWITCH_STATUS_SUCCESS; + } + }; + return del; + } + public static SWIGTYPE_p_f_p_switch_core_session__switch_status_t WrapStateHandlerDelegate(switch_state_handler_t_delegate del) { return new SWIGTYPE_p_f_p_switch_core_session__switch_status_t(Marshal.GetFunctionPointerForDelegate(del), false); }