diff --git a/src/mod/languages/mod_managed/managed/Util.cs b/src/mod/languages/mod_managed/managed/Util.cs index 18c2d89369..7fd5194770 100644 --- a/src/mod/languages/mod_managed/managed/Util.cs +++ b/src/mod/languages/mod_managed/managed/Util.cs @@ -46,5 +46,31 @@ namespace FreeSWITCH { if (cons == null) throw new ArgumentException(ty.Name + " constructor not found."); return (T)cons.Invoke(new object[] { cPtr, false }); } + + /// + /// Getting IntPtr from wrapper + /// + /// swig generated class + /// instance + /// Original pointer + public static IntPtr GetPtr(T obj) + { + // internal static HandleRef getCPtr(CoreSession obj) + var ty = typeof(T); + var bflags = BindingFlags.Static | BindingFlags.NonPublic; + var getCPtr = ty.GetMethod("getCPtr", bflags, null, new[] { typeof(T) }, null); + + if (getCPtr != null) + { + var handleRef = getCPtr.Invoke(null, new object[] { obj }); + + if (handleRef is HandleRef) + { + return ((HandleRef)handleRef).Handle; + } + } + + return IntPtr.Zero; + } } }