]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
mod_managed: Added GetPtr to Util class for internal pointers extraction (very useful...
authorArtur Kraev <ravenox@gmail.com>
Sun, 2 Nov 2014 21:43:59 +0000 (00:43 +0300)
committerArtur Kraev <ravenox@gmail.com>
Sun, 2 Nov 2014 21:43:59 +0000 (00:43 +0300)
src/mod/languages/mod_managed/managed/Util.cs

index 18c2d893698f28e0996f138dfe2fd88d50e9d204..7fd51947702c3d5c0db619dd30b0e4bfa31466ea 100644 (file)
@@ -46,5 +46,31 @@ namespace FreeSWITCH {
             if (cons == null) throw new ArgumentException(ty.Name + " constructor not found.");\r
             return (T)cons.Invoke(new object[] { cPtr, false });\r
         }\r
+\r
+        /// <summary>\r
+        /// Getting IntPtr from wrapper\r
+        /// </summary>\r
+        /// <typeparam name="T">swig generated class</typeparam>\r
+        /// <param name="obj">instance</param>\r
+        /// <returns>Original pointer</returns>\r
+        public static IntPtr GetPtr<T>(T obj)\r
+        {\r
+            // internal static HandleRef getCPtr(CoreSession obj)\r
+            var ty = typeof(T);\r
+            var bflags = BindingFlags.Static | BindingFlags.NonPublic;\r
+            var getCPtr = ty.GetMethod("getCPtr", bflags, null, new[] { typeof(T) }, null);\r
+\r
+            if (getCPtr != null)\r
+            {\r
+                var handleRef = getCPtr.Invoke(null, new object[] { obj });\r
+\r
+                if (handleRef is HandleRef)\r
+                {\r
+                    return ((HandleRef)handleRef).Handle;\r
+                }\r
+            }\r
+\r
+            return IntPtr.Zero;\r
+        }\r
     }\r
 }\r