[Freeswitch-branches] [commit] r2268 - in freeswitch/branches/james/src: dotnet dotnet/Marshaling dotnet/Marshaling/Types dotnet/Modules dotnet/Switch dotnet/Types mod/dotnet/Info mod/dotnet/Info/Properties mod/dotnet/Info/bin mod/dotnet/Info/bin/Debug mod/dotnet/Info/obj mod/dotnet/Info/obj/Debug mod/dotnet/Info/obj/Debug/Refactor mod/dotnet/Info/obj/Debug/TempPE mod/languages/mod_mono

Freeswitch SVN james at freeswitch.org
Sat Aug 12 00:43:22 EDT 2006


Author: james
Date: Sat Aug 12 00:43:19 2006
New Revision: 2268

Added:
   freeswitch/branches/james/src/dotnet/FreeSwitchDotNet.csproj   (contents, props changed)
   freeswitch/branches/james/src/dotnet/Marshaling/StreamHandleMarshaler.cs   (contents, props changed)
   freeswitch/branches/james/src/dotnet/Switch/StreamHandle.cs   (contents, props changed)
   freeswitch/branches/james/src/dotnet/Types/Module.cs   (contents, props changed)
   freeswitch/branches/james/src/dotnet/Types/ModuleInterfaces.cs   (contents, props changed)
   freeswitch/branches/james/src/dotnet/Types/StreamHandle.cs   (contents, props changed)
   freeswitch/branches/james/src/mod/dotnet/Info/
   freeswitch/branches/james/src/mod/dotnet/Info/Info.cs   (contents, props changed)
   freeswitch/branches/james/src/mod/dotnet/Info/Info.csproj   (contents, props changed)
   freeswitch/branches/james/src/mod/dotnet/Info/Info.dll   (contents, props changed)
   freeswitch/branches/james/src/mod/dotnet/Info/Info.suo   (contents, props changed)
   freeswitch/branches/james/src/mod/dotnet/Info/Makefile
   freeswitch/branches/james/src/mod/dotnet/Info/Properties/
   freeswitch/branches/james/src/mod/dotnet/Info/Properties/AssemblyInfo.cs   (contents, props changed)
   freeswitch/branches/james/src/mod/dotnet/Info/bin/
   freeswitch/branches/james/src/mod/dotnet/Info/bin/Debug/
   freeswitch/branches/james/src/mod/dotnet/Info/bin/Debug/Freeswitch.dll   (contents, props changed)
   freeswitch/branches/james/src/mod/dotnet/Info/bin/Debug/Freeswitch.pdb   (contents, props changed)
   freeswitch/branches/james/src/mod/dotnet/Info/bin/Debug/Info.dll   (contents, props changed)
   freeswitch/branches/james/src/mod/dotnet/Info/bin/Debug/Info.pdb   (contents, props changed)
   freeswitch/branches/james/src/mod/dotnet/Info/obj/
   freeswitch/branches/james/src/mod/dotnet/Info/obj/Debug/
   freeswitch/branches/james/src/mod/dotnet/Info/obj/Debug/Info.dll   (contents, props changed)
   freeswitch/branches/james/src/mod/dotnet/Info/obj/Debug/Refactor/
   freeswitch/branches/james/src/mod/dotnet/Info/obj/Debug/ResolveAssemblyReference.cache   (contents, props changed)
   freeswitch/branches/james/src/mod/dotnet/Info/obj/Debug/TempPE/
   freeswitch/branches/james/src/mod/dotnet/Info/obj/Info.csproj.FileList.txt   (contents, props changed)
Modified:
   freeswitch/branches/james/src/dotnet/Common.cs
   freeswitch/branches/james/src/dotnet/Core.cs
   freeswitch/branches/james/src/dotnet/Makefile
   freeswitch/branches/james/src/dotnet/Marshaling/Types/ApiInterfaceMarshal.cs
   freeswitch/branches/james/src/dotnet/Marshaling/Types/ApplicationInterfaceMarshal.cs
   freeswitch/branches/james/src/dotnet/Marshaling/Types/BufferMarshal.cs
   freeswitch/branches/james/src/dotnet/Marshaling/Types/CallerExtensionMarshal.cs
   freeswitch/branches/james/src/dotnet/Marshaling/Types/CallerProfileMarshal.cs
   freeswitch/branches/james/src/dotnet/Marshaling/Types/ChannelMarshal.cs
   freeswitch/branches/james/src/dotnet/Marshaling/Types/CodecInterfaceMarshal.cs
   freeswitch/branches/james/src/dotnet/Marshaling/Types/CoreSessionMarshal.cs
   freeswitch/branches/james/src/dotnet/Marshaling/Types/FrameMarshal.cs
   freeswitch/branches/james/src/dotnet/Marshaling/Types/IOEventHooksMarshal.cs
   freeswitch/branches/james/src/dotnet/Marshaling/Types/LoadableModuleInterfaceMarshal.cs
   freeswitch/branches/james/src/dotnet/Marshaling/Types/LoadableModuleMarshal.cs
   freeswitch/branches/james/src/dotnet/Module.cs
   freeswitch/branches/james/src/dotnet/Modules/Api.cs
   freeswitch/branches/james/src/dotnet/Modules/Application.cs
   freeswitch/branches/james/src/dotnet/Switch/CallerProfile.cs
   freeswitch/branches/james/src/dotnet/Switch/Channel.cs
   freeswitch/branches/james/src/dotnet/Switch/LoadableModule.cs
   freeswitch/branches/james/src/dotnet/Types/ApiFunction.cs
   freeswitch/branches/james/src/dotnet/Types/ApplicationFunction.cs
   freeswitch/branches/james/src/dotnet/Types/ApplicationInterface.cs
   freeswitch/branches/james/src/dotnet/Types/CallerExtension.cs
   freeswitch/branches/james/src/dotnet/Types/CallerProfile.cs
   freeswitch/branches/james/src/dotnet/Types/Channel.cs
   freeswitch/branches/james/src/dotnet/Types/CoreSession.cs
   freeswitch/branches/james/src/dotnet/Types/LoadableModuleInterface.cs
   freeswitch/branches/james/src/mod/languages/mod_mono/mod_mono.c

Log:
Codey Codey.


Modified: freeswitch/branches/james/src/dotnet/Common.cs
==============================================================================
--- freeswitch/branches/james/src/dotnet/Common.cs	(original)
+++ freeswitch/branches/james/src/dotnet/Common.cs	Sat Aug 12 00:43:19 2006
@@ -30,6 +30,7 @@
  *
  */
 using System;
+using System.Reflection;
 
 namespace Freeswitch
 {
@@ -40,6 +41,17 @@
             Console.WriteLine("DUMP-{0}:", label);
 
             DumpHex(pointer, length);
+        }
+
+        public static void DumpProperties(string label, object dumpObject)
+        {
+            Type type = dumpObject.GetType();
+            PropertyInfo[] properties = type.GetProperties();
+
+            foreach (PropertyInfo p in properties)
+            {
+                Console.WriteLine("%%% - {0}: {1}:{2}", label, p.Name, p.GetValue(dumpObject, null));
+            }
         }
 
         public static void DumpHex(IntPtr pointer, int length)

Modified: freeswitch/branches/james/src/dotnet/Core.cs
==============================================================================
--- freeswitch/branches/james/src/dotnet/Core.cs	(original)
+++ freeswitch/branches/james/src/dotnet/Core.cs	Sat Aug 12 00:43:19 2006
@@ -48,13 +48,11 @@
  	 */ 
 	public class Core
 	{	
-		private static readonly Core instance = new Core();
-
 		[DllImport("__Internal")]
 		public static extern void switch_console_printf(SwitchTextChannel channel, string file, string func, int line, string fmt, string msg);
 
 		/* Constructor */
-		public Core()
+/*		public Core()
 		{
 			if (instance == null)
 			{
@@ -68,7 +66,7 @@
                // switch_loadable_module_register(module);
 			}
 		}
-		
+*/		
 		public enum SwitchTextChannel
 		{
 		        SwitchChannelIdConsole,
@@ -77,13 +75,13 @@
 		}
 
 		/* Instance property to get singleton instance of FreeSwitch */ 
-		public static Core Instance
+/*		public static Core Instance
 		{
 			get { return instance; }
 		}
-        
-        public void Application(IntPtr session, IntPtr data)
-        {
-        }
+  */      
+//        public void Application(IntPtr session, IntPtr data)
+//        {
+//        }
 	}
 }

Added: freeswitch/branches/james/src/dotnet/FreeSwitchDotNet.csproj
==============================================================================
--- (empty file)
+++ freeswitch/branches/james/src/dotnet/FreeSwitchDotNet.csproj	Sat Aug 12 00:43:19 2006
@@ -0,0 +1,126 @@
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>8.0.50727</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{251CAABC-16C3-4593-A491-603B908094E0}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>Freeswitch</RootNamespace>
+    <AssemblyName>Freeswitch</AssemblyName>
+    <StartupObject>
+    </StartupObject>
+    <SignAssembly>true</SignAssembly>
+    <AssemblyOriginatorKeyFile>public.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Deployment" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Common.cs" />
+    <Compile Include="Core.cs" />
+    <Compile Include="Ivr.cs" />
+    <Compile Include="Marshaling\BufferMarshaler.cs" />
+    <Compile Include="Marshaling\CallerExtensionMarshaler.cs" />
+    <Compile Include="Marshaling\CallerProfileMarshaler.cs" />
+    <Compile Include="Marshaling\ChannelMarshaler.cs" />
+    <Compile Include="Marshaling\ChannelTimetableMarshaler.cs" />
+    <Compile Include="Marshaling\StreamHandleMarshaler.cs" />
+    <Compile Include="Marshaling\CoreSessionMarshaler.cs" />
+    <Compile Include="Marshaling\EventMarshaler.cs" />
+    <Compile Include="Marshaling\MemoryPoolMarshaler.cs" />
+    <Compile Include="Marshaling\Types\BufferMarshal.cs" />
+    <Compile Include="Marshaling\Types\CallerExtensionMarshal.cs" />
+    <Compile Include="Marshaling\Types\CallerProfileMarshal.cs" />
+    <Compile Include="Marshaling\FileHandleMarshaler.cs" />
+    <Compile Include="Marshaling\Types\ChannelFlagMarshal.cs" />
+    <Compile Include="Marshaling\Types\ChannelMarshal.cs" />
+    <Compile Include="Marshaling\Types\ChannelStateMarshal.cs" />
+    <Compile Include="Marshaling\Types\ChannelTimetableMarshal.cs" />
+    <Compile Include="Marshaling\Types\ApplicationInterfaceMarshal.cs" />
+    <Compile Include="Marshaling\Types\ApiInterfaceMarshal.cs" />
+    <Compile Include="Marshaling\Types\CodecImplementationMarshal.cs" />
+    <Compile Include="Marshaling\Types\CodecInterfaceMarshal.cs" />
+    <Compile Include="Marshaling\Types\CodecMarshal.cs" />
+    <Compile Include="Marshaling\Types\CodecTypeMarshal.cs" />
+    <Compile Include="Marshaling\Types\IMarshaledObject.cs" />
+    <Compile Include="Marshaling\Types\TypesMarshal.cs" />
+    <Compile Include="Marshaling\Types\FileHandleMarshal.cs" />
+    <Compile Include="Marshaling\Types\LoadableModuleInterfaceMarshal.cs" />
+    <Compile Include="Marshaling\Types\LoadableModuleMarshal.cs" />
+    <Compile Include="Marshaling\Types\CoreSessionMarshal.cs" />
+    <Compile Include="Marshaling\Types\EventMarshal.cs" />
+    <Compile Include="Marshaling\Types\FrameMarshal.cs" />
+    <Compile Include="Marshaling\Types\IOEventHooksMarshal.cs" />
+    <Compile Include="Module.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="Switch\CallerProfile.cs" />
+    <Compile Include="Switch\Channel.cs" />
+    <Compile Include="Switch\Console.cs" />
+    <Compile Include="Switch\StreamHandle.cs" />
+    <Compile Include="Switch\CoreSession.cs" />
+    <Compile Include="Switch\Ivr.cs" />
+    <Compile Include="Switch\LoadableModule.cs" />
+    <Compile Include="Modules\Api.cs" />
+    <Compile Include="Types\ApiFunction.cs" />
+    <Compile Include="Types\ApplicationInterface.cs" />
+    <Compile Include="Types\Buffer.cs" />
+    <Compile Include="Types\CallerExtension.cs" />
+    <Compile Include="Types\CallerProfile.cs" />
+    <Compile Include="Types\Channel.cs" />
+    <Compile Include="Types\ChannelFlag.cs" />
+    <Compile Include="Types\ChannelState.cs" />
+    <Compile Include="Types\ChannelTimetable.cs" />
+    <Compile Include="Modules\Application.cs" />
+    <Compile Include="Types\ApplicationFunction.cs" />
+    <Compile Include="Types\CallCause.cs" />
+    <Compile Include="Types\ModuleInterfaces.cs" />
+    <Compile Include="Types\StreamHandle.cs" />
+    <Compile Include="Types\Module.cs" />
+    <Compile Include="Types\DtmfCallbackFunction.cs" />
+    <Compile Include="Types\FileHandle.cs" />
+    <Compile Include="Types\MemoryPool.cs" />
+    <Compile Include="Types\LoadableModule.cs" />
+    <Compile Include="Types\LoadableModuleInterface.cs" />
+    <Compile Include="Types\TextChannel.cs" />
+    <Compile Include="Types\CoreSession.cs" />
+    <Compile Include="Types\Event.cs" />
+    <Compile Include="Types\Status.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Makefile" />
+    <None Include="public.snk" />
+  </ItemGroup>
+  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>
\ No newline at end of file

Modified: freeswitch/branches/james/src/dotnet/Makefile
==============================================================================
--- freeswitch/branches/james/src/dotnet/Makefile	(original)
+++ freeswitch/branches/james/src/dotnet/Makefile	Sat Aug 12 00:43:19 2006
@@ -13,13 +13,17 @@
 	Marshaling/Types/ChannelMarshal.cs \
 	Marshaling/Types/ChannelStateMarshal.cs \
 	Marshaling/Types/ChannelTimetableMarshal.cs \
+	Marshaling/Types/CodecImplementationMarshal.cs \
+	Marshaling/Types/CodecInterfaceMarshal.cs \
+	Marshaling/Types/CodecMarshal.cs \
+	Marshaling/Types/CodecTypeMarshal.cs \
 	Marshaling/Types/CoreSessionMarshal.cs \
 	Marshaling/Types/EventMarshal.cs \
 	Marshaling/Types/FileHandleMarshal.cs \
 	Marshaling/Types/FrameMarshal.cs \
 	Marshaling/Types/IOEventHooksMarshal.cs \
-	Marshaling/Types/LoadableModuleMarshal.cs \
 	Marshaling/Types/LoadableModuleInterfaceMarshal.cs \
+	Marshaling/Types/LoadableModuleMarshal.cs \
 	Marshaling/Types/TypesMarshal.cs \
 	Marshaling/BufferMarshaler.cs \
 	Marshaling/CallerExtensionMarshaler.cs \
@@ -30,6 +34,7 @@
 	Marshaling/EventMarshaler.cs \
 	Marshaling/FileHandleMarshaler.cs \
 	Marshaling/MemoryPoolMarshaler.cs \
+	Marshaling/StreamHandleMarshaler.cs \
 	Modules/Api.cs \
 	Modules/Application.cs \
 	Switch/CallerProfile.cs \
@@ -38,8 +43,10 @@
 	Switch/CoreSession.cs \
 	Switch/Ivr.cs \
 	Switch/LoadableModule.cs \
+	Switch/StreamHandle.cs \
 	Types/ApiFunction.cs \
 	Types/ApplicationFunction.cs \
+	Types/ApplicationInterface.cs \
 	Types/Buffer.cs \
 	Types/CallCause.cs \
 	Types/CallerExtension.cs \
@@ -52,9 +59,13 @@
 	Types/DtmfCallbackFunction.cs \
 	Types/Event.cs \
 	Types/FileHandle.cs \
+	Types/LoadableModule.cs \
 	Types/LoadableModuleInterface.cs \
 	Types/MemoryPool.cs \
+	Types/Module.cs \
 	Types/Status.cs \
+	Types/StreamHandle.cs \
+	Types/TextChannel.cs \
 	Common.cs \
 	Core.cs \
 	Ivr.cs \
@@ -64,4 +75,4 @@
 	rm -fr *.dll
 
 install:
-	cp -f $(MODNAME).dll $(PREFIX)/mod/mono
+	cp -f Freeswitch.dll /usr/local/freeswitch/lib/

Added: freeswitch/branches/james/src/dotnet/Marshaling/StreamHandleMarshaler.cs
==============================================================================
--- (empty file)
+++ freeswitch/branches/james/src/dotnet/Marshaling/StreamHandleMarshaler.cs	Sat Aug 12 00:43:19 2006
@@ -0,0 +1,81 @@
+/* 
+ * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
+ * Copyright (C) 2006, James Martelletti <james at nerdc0re.com>
+ *
+ * Version: MPL 1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
+ *
+ * The Initial Developer of the Original Code is
+ * James Martelletti <james at nerdc0re.com>
+ * Portions created by the Initial Developer are Copyright (C)
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * 
+ * James Martelletti <james at nerdc0re.com>
+ *
+ *
+ * StreamHandleMarshaler.cs -- 
+ *
+ */
+using System;
+using System.Collections;
+using Freeswitch.Marshaling.Types;
+using Freeswitch.Types;
+using System.Runtime.InteropServices;
+
+namespace Freeswitch.Marshaling
+{
+    class StreamHandleMarshaler : ICustomMarshaler
+    {
+        private static StreamHandleMarshaler Instance = new StreamHandleMarshaler();
+
+        public static ICustomMarshaler GetInstance(string s)
+        {
+            return Instance;
+        }
+
+        public void CleanUpManagedData(object o)
+        {
+        }
+
+        public void CleanUpNativeData(IntPtr pNativeData)
+        {
+        }
+
+        public int GetNativeDataSize()
+        {
+            return IntPtr.Size;
+        }
+
+        public IntPtr MarshalManagedToNative(object obj)
+        {
+            StreamHandle streamHandleObj = (StreamHandle)obj;
+
+            return streamHandleObj.marshaledObject.Handle;
+        }
+
+        public object MarshalNativeToManaged(IntPtr streamHandlePtr)
+        {
+            StreamHandleMarshal streamHandleMarshal = new StreamHandleMarshal();
+            StreamHandle        streamHandleObj     = new StreamHandle();
+
+            Marshal.PtrToStructure(streamHandlePtr, streamHandleMarshal);
+
+            streamHandleObj.marshaledObject = new HandleRef(streamHandleMarshal, streamHandlePtr);
+
+            return streamHandleObj;
+        }
+    }
+}

Modified: freeswitch/branches/james/src/dotnet/Marshaling/Types/ApiInterfaceMarshal.cs
==============================================================================
--- freeswitch/branches/james/src/dotnet/Marshaling/Types/ApiInterfaceMarshal.cs	(original)
+++ freeswitch/branches/james/src/dotnet/Marshaling/Types/ApiInterfaceMarshal.cs	Sat Aug 12 00:43:19 2006
@@ -35,14 +35,14 @@
 
 namespace Freeswitch.Marshaling.Types
 {
-    internal delegate Status ApiFunctionMarshal(IntPtr text_in, IntPtr text_out, uint outlen);
-
     [StructLayout(LayoutKind.Sequential)]
     internal class ApiInterfaceMarshal
     {
-        internal IntPtr             interface_name;
-        internal IntPtr             desc;
-        internal ApiFunctionMarshal function;
-        internal IntPtr             next;
+        //[MarshalAs(UnmanagedType.LPStr)]
+        internal IntPtr      interface_name;
+        //[MarshalAs(UnmanagedType.LPStr)]
+        internal IntPtr      desc;
+        internal ApiFunction function;
+        internal IntPtr      next;
     }
 }

Modified: freeswitch/branches/james/src/dotnet/Marshaling/Types/ApplicationInterfaceMarshal.cs
==============================================================================
--- freeswitch/branches/james/src/dotnet/Marshaling/Types/ApplicationInterfaceMarshal.cs	(original)
+++ freeswitch/branches/james/src/dotnet/Marshaling/Types/ApplicationInterfaceMarshal.cs	Sat Aug 12 00:43:19 2006
@@ -32,24 +32,21 @@
 using System;
 using System.Runtime.InteropServices;
 using Freeswitch.Types;
-using Freeswitch.Marshaling;
 
 namespace Freeswitch.Marshaling.Types
 {
-    internal delegate void
-        ApplicationFunctionMarshal(
-            [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(CoreSessionMarshaler))]
-            CoreSession session,
-            IntPtr data);
-
     [StructLayout(LayoutKind.Sequential)]
     internal class ApplicationInterfaceMarshal
     {
-        internal IntPtr                     interface_name;
-        internal ApplicationFunctionMarshal application_function;
-        internal IntPtr                     long_desc;
-        internal IntPtr                     short_desc;
-        internal IntPtr                     syntax;
-        internal IntPtr                     next;
+     //   [MarshalAs(UnmanagedType.LPStr)]
+        internal IntPtr              interface_name;
+        internal ApplicationFunction application_function;
+     //   [MarshalAs(UnmanagedType.LPStr)]
+        internal IntPtr              long_desc;
+        //[MarshalAs(UnmanagedType.LPStr)]
+        internal IntPtr              short_desc;
+        //[MarshalAs(UnmanagedType.LPStr)]
+        internal IntPtr              syntax;
+        internal IntPtr              next;
     }
-}
+}
\ No newline at end of file

Modified: freeswitch/branches/james/src/dotnet/Marshaling/Types/BufferMarshal.cs
==============================================================================
--- freeswitch/branches/james/src/dotnet/Marshaling/Types/BufferMarshal.cs	(original)
+++ freeswitch/branches/james/src/dotnet/Marshaling/Types/BufferMarshal.cs	Sat Aug 12 00:43:19 2006
@@ -37,8 +37,10 @@
     [StructLayout(LayoutKind.Sequential)]
     internal class BufferMarshal
     {
+        [MarshalAs(UnmanagedType.LPStr)]
         internal string data;
         internal int    used;
         internal int    datalen;
+        internal UInt32 id;
     }
 }

Modified: freeswitch/branches/james/src/dotnet/Marshaling/Types/CallerExtensionMarshal.cs
==============================================================================
--- freeswitch/branches/james/src/dotnet/Marshaling/Types/CallerExtensionMarshal.cs	(original)
+++ freeswitch/branches/james/src/dotnet/Marshaling/Types/CallerExtensionMarshal.cs	Sat Aug 12 00:43:19 2006
@@ -37,8 +37,8 @@
     [StructLayout(LayoutKind.Sequential)]
     internal class CallerExtensionMarshal
     {
-        internal string extension_name;
-        internal string extension_number;
+        internal IntPtr extension_name;
+        internal IntPtr extension_number;
         internal IntPtr current_application;
         internal IntPtr last_application;
         internal IntPtr applications;

Modified: freeswitch/branches/james/src/dotnet/Marshaling/Types/CallerProfileMarshal.cs
==============================================================================
--- freeswitch/branches/james/src/dotnet/Marshaling/Types/CallerProfileMarshal.cs	(original)
+++ freeswitch/branches/james/src/dotnet/Marshaling/Types/CallerProfileMarshal.cs	Sat Aug 12 00:43:19 2006
@@ -37,16 +37,32 @@
     [StructLayout(LayoutKind.Sequential)]
     internal class CallerProfileMarshal
     {
-        internal IntPtr dialplan;
-        internal IntPtr caller_id_name;
-        internal IntPtr caller_id_number;
-        internal IntPtr network_addr;
-        internal IntPtr ani;
-        internal IntPtr ani2;
-        internal IntPtr rdnis;
-        internal IntPtr destination_number;
-        internal IntPtr source;
-        internal IntPtr chan_name;
-        internal IntPtr uuid;
+        [MarshalAs(UnmanagedType.LPStr)]
+        internal string username;
+        [MarshalAs(UnmanagedType.LPStr)]
+        internal string dialplan;
+        [MarshalAs(UnmanagedType.LPStr)]
+        internal string caller_id_name;
+        [MarshalAs(UnmanagedType.LPStr)]
+        internal string caller_id_number;
+        [MarshalAs(UnmanagedType.LPStr)]
+        internal string network_addr;
+        [MarshalAs(UnmanagedType.LPStr)]
+        internal string ani;
+        [MarshalAs(UnmanagedType.LPStr)]
+        internal string ani2;
+        [MarshalAs(UnmanagedType.LPStr)]
+        internal string rdnis;
+        [MarshalAs(UnmanagedType.LPStr)]
+        internal string destination_number;
+        [MarshalAs(UnmanagedType.LPStr)]
+        internal string source;
+        [MarshalAs(UnmanagedType.LPStr)]
+        internal string chan_name;
+        [MarshalAs(UnmanagedType.LPStr)]
+        internal string uuid;
+        [MarshalAs(UnmanagedType.LPStr)]
+        internal string context;
+        internal IntPtr next;
     }
 }

Modified: freeswitch/branches/james/src/dotnet/Marshaling/Types/ChannelMarshal.cs
==============================================================================
--- freeswitch/branches/james/src/dotnet/Marshaling/Types/ChannelMarshal.cs	(original)
+++ freeswitch/branches/james/src/dotnet/Marshaling/Types/ChannelMarshal.cs	Sat Aug 12 00:43:19 2006
@@ -31,32 +31,36 @@
  */
 using System;
 using System.Runtime.InteropServices;
+using Freeswitch.Types;
 
 namespace Freeswitch.Marshaling.Types
 {
     [StructLayout(LayoutKind.Sequential)]
     internal class ChannelMarshal
     {
-        internal IntPtr                  name;
-        internal IntPtr                  dtmf_buffer;
-        internal IntPtr                  dtmf_mutex;
-        internal IntPtr                  session;
-        internal ChannelStateMarshal     state;
-        internal ChannelFlagMarshal      flags;
-        internal IntPtr                  caller_profile;
-        internal IntPtr                  originator_caller_profile;
-        internal IntPtr                  originatee_caller_profile;
-        internal IntPtr                  caller_extension;
-        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 120)]
-        internal byte[]                  state_handlers;
-        internal int                     state_handler_index;
-        internal IntPtr                  variables;
-        internal ChannelTimetableMarshal times;
-        internal IntPtr                  private_info;
-        internal int                     freq;
-        internal int                     bits;
-        internal int                     channels;
-        internal int                     ms;
-        internal int                     kbps;
+        internal IntPtr       name;
+        internal IntPtr       dtmf_buffer;
+        internal IntPtr       dtmf_mutex;
+        internal IntPtr       flag_mutex;
+        internal IntPtr       profile_mutex;
+        internal IntPtr       session;
+        internal ChannelState state;
+        internal UInt32       flags;
+        internal IntPtr       caller_profile;
+        internal IntPtr       originator_caller_profile;
+        internal IntPtr       originatee_caller_profile;
+        internal IntPtr       caller_extension;
+        [MarshalAs(UnmanagedType.ByValArray, SizeConst=120)]
+        internal byte[]       state_handlers;
+        internal int          state_handler_index;
+        internal IntPtr       variables;
+        internal IntPtr       times;
+        internal IntPtr       private_info;
+        internal IntPtr       hangup_cause;
+        internal int          freq;
+        internal int          bits;
+        internal int          channels;
+        internal int          ms;
+        internal int          kbps;
     }
 }

Modified: freeswitch/branches/james/src/dotnet/Marshaling/Types/CodecInterfaceMarshal.cs
==============================================================================
--- freeswitch/branches/james/src/dotnet/Marshaling/Types/CodecInterfaceMarshal.cs	(original)
+++ freeswitch/branches/james/src/dotnet/Marshaling/Types/CodecInterfaceMarshal.cs	Sat Aug 12 00:43:19 2006
@@ -35,4 +35,29 @@
 
 namespace Freeswitch.Marshaling.Types
 {
+    [StructLayout(LayoutKind.Sequential)]
+    internal class CodecInterfaceMarshal
+    {
+        [MarshalAs(UnmanagedType.LPStr)]
+        internal string interface_name;
+        /*
+        internal CodecImplementation application_function;
+        [MarshalAs(UnmanagedType.LPStr)]
+        internal string              long_desc;
+        [MarshalAs(UnmanagedType.LPStr)]
+        internal string              short_desc;
+        [MarshalAs(UnmanagedType.LPStr)]
+        internal string              syntax;
+        internal IntPtr              next;
 }
+
+
+struct switch_codec_interface {
+	! the name of the interface 
+	const char *interface_name;
+	! a list of codec implementations related to the codec 
+	const switch_codec_implementation_t *implementations;
+	const struct switch_codec_interface *next;
+};*/
+    }
+}
\ No newline at end of file

Modified: freeswitch/branches/james/src/dotnet/Marshaling/Types/CoreSessionMarshal.cs
==============================================================================
--- freeswitch/branches/james/src/dotnet/Marshaling/Types/CoreSessionMarshal.cs	(original)
+++ freeswitch/branches/james/src/dotnet/Marshaling/Types/CoreSessionMarshal.cs	Sat Aug 12 00:43:19 2006
@@ -35,11 +35,12 @@
 
 namespace Freeswitch.Marshaling.Types
 {
-    [StructLayout(LayoutKind.Sequential)]
+    [StructLayout(LayoutKind.Sequential, Pack=1)]
     internal class CoreSessionMarshal
     {
-        internal uint                id;
-        internal IntPtr              name;
+        internal UInt32              id;
+        [MarshalAs(UnmanagedType.ByValArray, SizeConst=80)]
+        internal byte[]              name; 
         internal int                 thread_running;
         internal IntPtr              pool;
         internal IntPtr              channel;
@@ -51,24 +52,29 @@
         internal IntPtr              raw_write_buffer;
         internal FrameMarshal        raw_write_frame;
         internal FrameMarshal        enc_write_frame;
-        /*
-switch_frame 	raw_write_frame
-switch_frame 	enc_write_frame
-unsigned char * 	raw_write_buf [SWITCH_RECCOMMENDED_BUFFER_SIZE]
-unsigned char * 	enc_write_buf [SWITCH_RECCOMMENDED_BUFFER_SIZE]
-switch_buffer * 	raw_read_buffer
-switch_frame 	raw_read_frame
-switch_frame 	enc_read_frame
-unsigned char * 	raw_read_buf [SWITCH_RECCOMMENDED_BUFFER_SIZE]
-unsigned char * 	enc_read_buf [SWITCH_RECCOMMENDED_BUFFER_SIZE]
-switch_audio_resampler * 	read_resampler
-switch_audio_resampler * 	write_resampler
-switch_mutex_t * 	mutex
-switch_thread_cond_t * 	cond
-void * 	streams [SWITCH_MAX_STREAMS]
-int 	stream_count
-char 	uuid_str [SWITCH_UUID_FORMATTED_LENGTH+1]
-void * 	private_info */
+        [MarshalAs(UnmanagedType.ByValArray, SizeConst=2048)]
+        internal byte[]              raw_write_buf;
+        [MarshalAs(UnmanagedType.ByValArray, SizeConst=2048)]
+        internal byte[]              enc_write_buf;
+        internal IntPtr              raw_read_buffer;
+        internal FrameMarshal        raw_read_frame;
+        internal FrameMarshal        enc_read_frame;
+        [MarshalAs(UnmanagedType.ByValArray, SizeConst=2048)]
+        internal byte[]              raw_read_buf;
+        [MarshalAs(UnmanagedType.ByValArray, SizeConst=2048)]
+        internal byte[]              enc_read_buf;
+        internal IntPtr              read_resampler;
+        internal IntPtr              write_resampler;
+        internal IntPtr              mutex;
+        internal IntPtr              cond;
+        internal IntPtr              rwlock;
+        [MarshalAs(UnmanagedType.ByValArray, SizeConst=128)]
+        internal IntPtr[]            streams;
+        internal int                 stream_count;
+        /* 36 + 1 char string, but need to grab 40 bytes */
+        [MarshalAs(UnmanagedType.ByValArray, SizeConst=40)]
+        internal byte[]              uuid_str;
+        internal IntPtr              private_info;
+        internal IntPtr              event_queue;
     }
-
 }

Modified: freeswitch/branches/james/src/dotnet/Marshaling/Types/FrameMarshal.cs
==============================================================================
--- freeswitch/branches/james/src/dotnet/Marshaling/Types/FrameMarshal.cs	(original)
+++ freeswitch/branches/james/src/dotnet/Marshaling/Types/FrameMarshal.cs	Sat Aug 12 00:43:19 2006
@@ -31,6 +31,7 @@
  */
 using System;
 using System.Runtime.InteropServices;
+using Freeswitch.Types;
 
 namespace Freeswitch.Marshaling.Types
 {
@@ -38,10 +39,16 @@
     internal class FrameMarshal
     {
         internal IntPtr codec;
+        internal IntPtr source;
+        internal IntPtr packet;
+        internal UInt32 packetlen;
         internal IntPtr data;
-        internal int    datalen;
-        internal int    buflen;
-        internal int    samples;
-        internal int    rate;
+        internal UInt32 datalen;
+        internal UInt32 buflen;
+        internal UInt32 samples;
+        internal UInt32 rate;
+        internal byte payload;
+        internal UInt32 timestamp;
+        internal byte flags;
     }
 }

Modified: freeswitch/branches/james/src/dotnet/Marshaling/Types/IOEventHooksMarshal.cs
==============================================================================
--- freeswitch/branches/james/src/dotnet/Marshaling/Types/IOEventHooksMarshal.cs	(original)
+++ freeswitch/branches/james/src/dotnet/Marshaling/Types/IOEventHooksMarshal.cs	Sat Aug 12 00:43:19 2006
@@ -40,6 +40,7 @@
         internal IntPtr outgoing_channel;
         internal IntPtr answer_channel;
         internal IntPtr receive_message;
+        internal IntPtr receive_event;
         internal IntPtr read_frame;
         internal IntPtr write_frame;
         internal IntPtr kill_channel;

Modified: freeswitch/branches/james/src/dotnet/Marshaling/Types/LoadableModuleInterfaceMarshal.cs
==============================================================================
--- freeswitch/branches/james/src/dotnet/Marshaling/Types/LoadableModuleInterfaceMarshal.cs	(original)
+++ freeswitch/branches/james/src/dotnet/Marshaling/Types/LoadableModuleInterfaceMarshal.cs	Sat Aug 12 00:43:19 2006
@@ -31,6 +31,7 @@
  */
 using System;
 using System.Runtime.InteropServices;
+using Freeswitch.Types;
 
 namespace Freeswitch.Marshaling.Types
 {
@@ -48,4 +49,17 @@
         internal IntPtr speech_interface;
         internal IntPtr directory_interface;
     }
+
+    
+    [StructLayout(LayoutKind.Sequential)]
+    internal class StreamHandleMarshal
+    {
+        internal IntPtr write_function;
+        internal IntPtr data;
+        internal IntPtr end;
+        internal int    data_size;
+        internal int    data_len;
+        internal IntPtr _event;
+    }
+
 }

Modified: freeswitch/branches/james/src/dotnet/Marshaling/Types/LoadableModuleMarshal.cs
==============================================================================
--- freeswitch/branches/james/src/dotnet/Marshaling/Types/LoadableModuleMarshal.cs	(original)
+++ freeswitch/branches/james/src/dotnet/Marshaling/Types/LoadableModuleMarshal.cs	Sat Aug 12 00:43:19 2006
@@ -35,26 +35,20 @@
 
 namespace Freeswitch.Marshaling.Types
 {
-    public delegate Status ModuleLoadMarshal(ref IntPtr loadable_module_interface, string blah);
-    public delegate Status ModuleReloadMarshal();
-    public delegate bool   ModulePauseMarshal();
-    public delegate bool   ModuleResumeMarshal();
-    public delegate bool   ModuleStatusMarshal();
-    public delegate Status ModuleRuntimeMarshal();
-    public delegate bool   ModuleShutdownMarshal();
 
+
     [StructLayout(LayoutKind.Sequential)]
     public class LoadableModuleMarshal
     {
-        public IntPtr                filename;
-        public IntPtr                module_interface;
-        public IntPtr                lib;
-        public ModuleLoadMarshal     module_load;
-        public ModuleReloadMarshal   module_reload;
-        public ModulePauseMarshal    module_pause;
-        public ModuleResumeMarshal   module_resume;
-        public ModuleStatusMarshal   module_status;
-        public ModuleRuntimeMarshal  module_runtime;
-        public ModuleShutdownMarshal module_shutdown;
+        public IntPtr         filename;
+        public IntPtr         module_interface;
+        public IntPtr         lib;
+        public ModuleLoad     module_load;
+        public ModuleReload   module_reload;
+        public ModulePause    module_pause;
+        public ModuleResume   module_resume;
+        public ModuleStatus   module_status;
+        public ModuleRuntime  module_runtime;
+        public ModuleShutdown module_shutdown;
     }
 }

Modified: freeswitch/branches/james/src/dotnet/Module.cs
==============================================================================
--- freeswitch/branches/james/src/dotnet/Module.cs	(original)
+++ freeswitch/branches/james/src/dotnet/Module.cs	Sat Aug 12 00:43:19 2006
@@ -31,6 +31,7 @@
  */
 using System;
 using System.Collections;
+using System.Reflection;
 using System.Runtime.InteropServices;
 using System.Text;
 using Freeswitch;
@@ -42,32 +43,38 @@
 {
 	public class Module
 	{
+         
+
+        ModuleLoad load;
+        
         private LoadableModuleInterfaceMarshal module_interface = new LoadableModuleInterfaceMarshal();
         private ArrayList apiInterfaces = new ArrayList();
         private ArrayList applicationInterfaces = new ArrayList();
-        protected ModuleLoad moduleLoad;
+        //protected ModuleLoad moduleLoad;
         private string name;
-
-        public string Name
-        {
-            set { name = value; }
-            get { return name; }
-        }
+        private string filename = Assembly.GetCallingAssembly().GetName().Name;
+        private LoadableModuleMarshal module = new LoadableModuleMarshal();
 
 		public Module()
 		{
-            Console.WriteLine("Running module .ctor");
+            Console.WriteLine("Running module .blehctor");
+
+            load = new ModuleLoad(Load);
 		}
 
+        /// <summary>
+        /// Implementation of ModuleLoad Delegate
+        /// </summary>
+        /// <param name="module"></param>
+        /// <param name="name"></param>
+        /// <returns></returns>
         public Status Load(ref IntPtr module, string name)
         {
-            if (moduleLoad != null)
-                moduleLoad();
-
             module = Marshal.AllocHGlobal(Marshal.SizeOf(module_interface));
             
-            module_interface.module_name = Marshal.StringToHGlobalAnsi(Name);
+            module_interface.module_name = Marshal.StringToHGlobalAnsi(filename);
 
+            /* For each API interface */
             if (apiInterfaces.Count > 0)
             {
                 foreach (Api api in apiInterfaces)
@@ -75,11 +82,9 @@
                     ApiInterfaceMarshal apiInterfaceMarshal = new ApiInterfaceMarshal();
                     IntPtr apiInterfacePtr = Marshal.AllocHGlobal(Marshal.SizeOf(apiInterfaceMarshal));
 
-                    Console.WriteLine(api.Name);
-
                     apiInterfaceMarshal.interface_name = Marshal.StringToHGlobalAnsi(api.Name);
                     apiInterfaceMarshal.desc           = Marshal.StringToHGlobalAnsi(api.Description);
-                    apiInterfaceMarshal.function       = new ApiFunctionMarshal(api.ApiFunctionWrapper);
+                    apiInterfaceMarshal.function       = new ApiFunction(api.ApiFunction);
 
                     api.handle = new HandleRef(apiInterfaceMarshal, apiInterfacePtr);
 
@@ -89,26 +94,25 @@
                 Api apiIndex = (Api) apiInterfaces[0];
                 module_interface.api_interface = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(ApiInterfaceMarshal)));
                 Marshal.StructureToPtr(apiIndex.handle.Wrapper, module_interface.api_interface, true);
-
-                /* APPLICATIONS */
+            }
+            /* For each Application interface */
+            if (applicationInterfaces.Count > 0)
+            {
                 foreach (Application application in applicationInterfaces)
                 {
                     ApplicationInterfaceMarshal applicationInterfaceMarshal = new ApplicationInterfaceMarshal();
                     IntPtr applicationInterfacePtr = Marshal.AllocHGlobal(Marshal.SizeOf(applicationInterfaceMarshal));
 
-                    Console.WriteLine("APPLICATION: {0}", application.Name);
-
                     applicationInterfaceMarshal.interface_name = Marshal.StringToHGlobalAnsi(application.Name);
                     applicationInterfaceMarshal.syntax         = Marshal.StringToHGlobalAnsi(application.Syntax);
                     applicationInterfaceMarshal.long_desc      = Marshal.StringToHGlobalAnsi(application.LongDescription);
                     applicationInterfaceMarshal.short_desc     = Marshal.StringToHGlobalAnsi(application.ShortDescription);
 
-                    applicationInterfaceMarshal.application_function = new ApplicationFunctionMarshal(application.ApplicationFunctionWrapper);
+                    applicationInterfaceMarshal.application_function = new ApplicationFunction(application.ApplicationFunction);
 
                     application.handle = new HandleRef(applicationInterfaceMarshal, applicationInterfacePtr);
 
                     Marshal.StructureToPtr(applicationInterfaceMarshal, application.handle.Handle, true);
-                    
                 }
                 
                 Application applicationIndex = (Application)applicationInterfaces[0];
@@ -133,13 +137,12 @@
 
         public void Register()
         {
-            LoadableModuleMarshal module = new LoadableModuleMarshal();
-
-            module.filename = Marshal.StringToHGlobalAnsi(Name);
-
-            module.module_load = new ModuleLoadMarshal(Load);
+            module.module_load = new ModuleLoad(Load);
 
-            Switch.switch_loadable_module_build_dynamic("filename", module.module_load, module.module_runtime, module.module_shutdown);
+            Switch.switch_loadable_module_build_dynamic(filename,
+                                                        module.module_load,
+                                                        module.module_runtime,
+                                                        module.module_shutdown);
         }
 
         

Modified: freeswitch/branches/james/src/dotnet/Modules/Api.cs
==============================================================================
--- freeswitch/branches/james/src/dotnet/Modules/Api.cs	(original)
+++ freeswitch/branches/james/src/dotnet/Modules/Api.cs	Sat Aug 12 00:43:19 2006
@@ -61,21 +61,5 @@
             set { apiFunction = value; }
             get { return apiFunction; }
         }
-
-        public Status ApiFunctionWrapper(IntPtr text_in, IntPtr text_out, uint outlen)
-        {
-            Encoding ansiEncoding = Encoding.GetEncoding(1252);
-            string command = Marshal.PtrToStringAnsi(text_in);
-            int outputLength = (int)outlen;
-
-            string output = ApiFunction(command);
-
-            if (output.Length < outputLength)
-                outputLength = output.Length;
-
-            Marshal.Copy(ansiEncoding.GetBytes(output.ToString()), 0, text_out, outputLength);
-
-            return Status.Success;
-        }
     }
 }
\ No newline at end of file

Modified: freeswitch/branches/james/src/dotnet/Modules/Application.cs
==============================================================================
--- freeswitch/branches/james/src/dotnet/Modules/Application.cs	(original)
+++ freeswitch/branches/james/src/dotnet/Modules/Application.cs	Sat Aug 12 00:43:19 2006
@@ -77,12 +77,5 @@
             set { applicationFunction = value; }
             get { return applicationFunction; }
         }
-
-        public void ApplicationFunctionWrapper(CoreSession session, IntPtr data)
-        {
-            string applicationData = Marshal.PtrToStringAnsi(data);
-
-            ApplicationFunction(session, applicationData);
-        }
     }
 }
\ No newline at end of file

Modified: freeswitch/branches/james/src/dotnet/Switch/CallerProfile.cs
==============================================================================
--- freeswitch/branches/james/src/dotnet/Switch/CallerProfile.cs	(original)
+++ freeswitch/branches/james/src/dotnet/Switch/CallerProfile.cs	Sat Aug 12 00:43:19 2006
@@ -34,18 +34,41 @@
 using System.Runtime.InteropServices;
 using Freeswitch.Types;
 using Freeswitch.Marshaling;
+using Freeswitch.Marshaling.Types;
 
 namespace Freeswitch
 {
     public partial class Switch
     {
+        /*
+         * TODO: Figure out how to stop mono from trying to free the returned string.
+         */
         [DllImport("freeswitch")]
-        [return: MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(CallerProfileMarshaler))]
+        //[return: MarshalAs(UnmanagedType.LPStr)]
         public extern static
+            IntPtr switch_caller_get_field_by_name(
+                [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(CallerProfileMarshaler))]
+                CallerProfile caller_profile,
+                [MarshalAs(UnmanagedType.LPStr)]
+                string name);
+        /*
+        [DllImport("freeswitch")]
+        [return: MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(CallerProfileMarshaler))]
+        public extern static
+            CallerProfile switch_caller_profile_clone(
+                [MarshalAs
+            switch_core_session_t *session, switch_caller_profile_t *tocopy)
+        */
+
+        [DllImport("freeswitch")]
+        [return: MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(CallerProfileMarshaler))]
+        public extern static
             CallerProfile switch_caller_profile_new(
-                [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(MemoryPoolMarshaler))]
+                [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(MemoryPoolMarshaler))]
                 MemoryPool pool,
                 [MarshalAs(UnmanagedType.LPStr)]
+                string username,
+                [MarshalAs(UnmanagedType.LPStr)]
                 string dialplan,
                 [MarshalAs(UnmanagedType.LPStr)]
                 string callerIdName,
@@ -61,6 +84,8 @@
                 string rdnis,
                 [MarshalAs(UnmanagedType.LPStr)]
                 string source,
+                [MarshalAs(UnmanagedType.LPStr)]
+                string context,
                 [MarshalAs(UnmanagedType.LPStr)]
                 string destinationNumber);  
     }

Modified: freeswitch/branches/james/src/dotnet/Switch/Channel.cs
==============================================================================
--- freeswitch/branches/james/src/dotnet/Switch/Channel.cs	(original)
+++ freeswitch/branches/james/src/dotnet/Switch/Channel.cs	Sat Aug 12 00:43:19 2006
@@ -40,42 +40,56 @@
     public partial class Switch
     {
         [DllImport("freeswitch")]
-        extern public static
+        public extern static
             ChannelState switch_channel_set_state(
                 [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(ChannelMarshaler))]
                 Channel channel,
                 ChannelState channelState);
 
         [DllImport("freeswitch")]
-        extern public static
+        public extern static
             ChannelState switch_channel_get_state(
                 [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(ChannelMarshaler))]
                 Channel channel);
 
         [DllImport("freeswitch")]
-        extern public static
+        public extern static
             Status switch_channel_answer(
                 [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(ChannelMarshaler))]
                 Channel channel);
 
         [DllImport("freeswitch")]
-        extern public static
+        public extern static
             Status switch_channel_hangup(
                 [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(ChannelMarshaler))]
                 Channel channel);
 
         [DllImport("freeswitch")]
         [return: MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(CallerExtensionMarshaler))]
-        extern public static
+        public extern static
             CallerExtension switch_channel_get_caller_extension(
                 [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(ChannelMarshaler))]
                 Channel channel);
 
         [DllImport("freeswitch")]
-        [return: MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(CallerProfileMarshaler))]
+        [return: MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(CallerProfileMarshaler))]
         public extern static
             CallerProfile switch_channel_get_caller_profile(
+                [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(ChannelMarshaler))]
+                Channel channel);
+
+        [DllImport("freeswitch")]
+        [return: MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(CallerProfileMarshaler))]
+        public extern static
+            CallerProfile switch_channel_get_originator_caller_profile(
                 [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(ChannelMarshaler))]
+                Channel channel);
+
+        [DllImport("freeswitch")]
+        [return: MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(CallerProfileMarshaler))]
+        public extern static
+            CallerProfile switch_channel_get_originatee_caller_profile(
+                [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(ChannelMarshaler))]
                 Channel channel);
 
         [DllImport("freeswitch")]

Modified: freeswitch/branches/james/src/dotnet/Switch/LoadableModule.cs
==============================================================================
--- freeswitch/branches/james/src/dotnet/Switch/LoadableModule.cs	(original)
+++ freeswitch/branches/james/src/dotnet/Switch/LoadableModule.cs	Sat Aug 12 00:43:19 2006
@@ -61,8 +61,11 @@
             Status
                 switch_loadable_module_build_dynamic(
                     string filename,
-                    ModuleLoadMarshal switch_module_load,
-                    ModuleRuntimeMarshal switch_module_runtime,
-                    ModuleShutdownMarshal switch_module_shutdown);
+                    [MarshalAs(UnmanagedType.FunctionPtr)]
+                    ModuleLoad switch_module_load,
+                    [MarshalAs(UnmanagedType.FunctionPtr)]
+                    ModuleRuntime switch_module_runtime,
+                    [MarshalAs(UnmanagedType.FunctionPtr)]
+                    ModuleShutdown switch_module_shutdown);
     }
 }

Added: freeswitch/branches/james/src/dotnet/Switch/StreamHandle.cs
==============================================================================
--- (empty file)
+++ freeswitch/branches/james/src/dotnet/Switch/StreamHandle.cs	Sat Aug 12 00:43:19 2006
@@ -0,0 +1,61 @@
+/* 
+ * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
+ * Copyright (C) 2006, James Martelletti <james at nerdc0re.com>
+ *
+ * Version: MPL 1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
+ *
+ * The Initial Developer of the Original Code is
+ * James Martelletti <james at nerdc0re.com>
+ * Portions created by the Initial Developer are Copyright (C)
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * 
+ * James Martelletti <james at nerdc0re.com>
+ *
+ *
+ * LoadableModule.cs -- 
+ *
+ */
+using System;
+using System.Runtime.InteropServices;
+using Freeswitch.Types;
+using Freeswitch.Marshaling.Types;
+
+namespace Freeswitch
+{
+    /*
+     * SWITCH_DECLARE(switch_status_t) switch_loadable_module_load_module(char *dir, char *fname)
+     * SWITCH_DECLARE(switch_status_t) switch_loadable_module_build_dynamic(char *filename,
+     * SWITCH_DECLARE(switch_status_t) switch_loadable_module_init()
+     * SWITCH_DECLARE(void) switch_loadable_module_shutdown(void)
+     * SWITCH_DECLARE(switch_endpoint_interface_t *) switch_loadable_module_get_endpoint_interface(char *name)
+     * SWITCH_DECLARE(switch_codec_interface_t *) switch_loadable_module_get_codec_interface(char *name)
+     * SWITCH_DECLARE(switch_dialplan_interface_t *) switch_loadable_module_get_dialplan_interface(char *name)
+     * SWITCH_DECLARE(switch_timer_interface_t *) switch_loadable_module_get_timer_interface(char *name)
+     * SWITCH_DECLARE(switch_application_interface_t *) switch_loadable_module_get_application_interface(char *name)
+     * SWITCH_DECLARE(switch_api_interface_t *) switch_loadable_module_get_api_interface(char *name)
+     * SWITCH_DECLARE(switch_file_interface_t *) switch_loadable_module_get_file_interface(char *name)
+     * SWITCH_DECLARE(switch_speech_interface_t *) switch_loadable_module_get_speech_interface(char *name)
+     * SWITCH_DECLARE(switch_directory_interface_t *) switch_loadable_module_get_directory_interface(char *name)
+     * SWITCH_DECLARE(int) switch_loadable_module_get_codecs(switch_memory_pool_t *pool, switch_codec_interface_t **array,
+     * SWITCH_DECLARE(int) switch_loadable_module_get_codecs_sorted(switch_codec_interface_t **array,
+     * SWITCH_DECLARE(switch_status_t) switch_api_execute(char *cmd, char *arg, char *retbuf, switch_size_t len)
+     */
+    public partial class Switch
+    {
+
+    }
+}

Modified: freeswitch/branches/james/src/dotnet/Types/ApiFunction.cs
==============================================================================
--- freeswitch/branches/james/src/dotnet/Types/ApiFunction.cs	(original)
+++ freeswitch/branches/james/src/dotnet/Types/ApiFunction.cs	Sat Aug 12 00:43:19 2006
@@ -28,10 +28,4 @@
  *
  * ApiFunction.cs -- 
  *
- */
-using System;
-
-namespace Freeswitch.Types
-{
-    public delegate string ApiFunction(string command);
-}
+ */
\ No newline at end of file

Modified: freeswitch/branches/james/src/dotnet/Types/ApplicationFunction.cs
==============================================================================
--- freeswitch/branches/james/src/dotnet/Types/ApplicationFunction.cs	(original)
+++ freeswitch/branches/james/src/dotnet/Types/ApplicationFunction.cs	Sat Aug 12 00:43:19 2006
@@ -33,5 +33,5 @@
 
 namespace Freeswitch.Types
 {
-    public delegate void ApplicationFunction(CoreSession coreSession, string data);
+    
 }

Modified: freeswitch/branches/james/src/dotnet/Types/ApplicationInterface.cs
==============================================================================
--- freeswitch/branches/james/src/dotnet/Types/ApplicationInterface.cs	(original)
+++ freeswitch/branches/james/src/dotnet/Types/ApplicationInterface.cs	Sat Aug 12 00:43:19 2006
@@ -36,6 +36,7 @@
 
 namespace Freeswitch.Types
 {
+    /*
     public class ApplicationInterface
     {
 	    private string interface_name;
@@ -45,4 +46,5 @@
 	    private	string syntax;
 	    //const struct switch_application_interface *next;
     }
+     * */
 }

Modified: freeswitch/branches/james/src/dotnet/Types/CallerExtension.cs
==============================================================================
--- freeswitch/branches/james/src/dotnet/Types/CallerExtension.cs	(original)
+++ freeswitch/branches/james/src/dotnet/Types/CallerExtension.cs	Sat Aug 12 00:43:19 2006
@@ -31,6 +31,7 @@
  */
 using System;
 using System.Runtime.InteropServices;
+using Freeswitch.Marshaling.Types;
 
 namespace Freeswitch.Types
 {
@@ -40,12 +41,22 @@
 
         public string ExtensionName
         {
-            get { throw new NotImplementedException(); }
+            get
+            {
+                CallerExtensionMarshal callerExtension = (CallerExtensionMarshal)marshaledObject.Wrapper;
+
+                return Marshal.PtrToStringAnsi(callerExtension.extension_name);
+            }
         }
 
         public string ExtensionNumber
         {
-            get { throw new NotImplementedException(); }
+            get
+            {
+                CallerExtensionMarshal callerExtension = (CallerExtensionMarshal)marshaledObject.Wrapper;
+
+                return Marshal.PtrToStringAnsi(callerExtension.extension_number);
+            }
         }
     }
 }

Modified: freeswitch/branches/james/src/dotnet/Types/CallerProfile.cs
==============================================================================
--- freeswitch/branches/james/src/dotnet/Types/CallerProfile.cs	(original)
+++ freeswitch/branches/james/src/dotnet/Types/CallerProfile.cs	Sat Aug 12 00:43:19 2006
@@ -39,11 +39,8 @@
     {
         internal HandleRef marshaledObject;
 
-        public CallerProfile()
-        {
-        }
-
-        public CallerProfile(CoreSession session,
+        public static CallerProfile New(MemoryPool pool,
+                             string username,
                              string dialplan,
                              string callerIdName,
                              string callerIdNumber,
@@ -52,105 +49,91 @@
                              string ani2,
                              string rdnis,
                              string source,
+                             string context,
                              string destinationNumber)
         {
-            MemoryPool pool = session.Pool;
+            return Switch.switch_caller_profile_new(pool, username, dialplan, callerIdName, callerIdNumber, networkAddress, ani, ani2, rdnis, source, context, destinationNumber);
+        }
+
+        public string GetFieldByName(string field)
+        {
+            IntPtr ptr;
             
-            CallerProfile profile = Switch.switch_caller_profile_new(pool, dialplan, callerIdName, callerIdNumber, networkAddress, ani, ani2, rdnis, source, destinationNumber);
+            ptr = Switch.switch_caller_get_field_by_name(this, field);
 
-            marshaledObject = profile.marshaledObject;
+            if (ptr != IntPtr.Zero)
+                return Marshal.PtrToStringAnsi(ptr);
+            else
+                return "";
         }
 
-		
+
+		/*
+         * Properties
+         */
         public string Dialplan
         {
-            set { throw new NotImplementedException(); }
-            get
-            {
-                CallerProfileMarshal profile = (CallerProfileMarshal)marshaledObject.Wrapper;
-
-                return Marshal.PtrToStringAnsi(profile.dialplan);
-            }
+            get { return GetFieldByName("dialplan"); }
         }
 
         public string CallerIdName
         {
-            set
-            {
-                throw new NotImplementedException();
-            }
-            get
-            {
-                CallerProfileMarshal profile = (CallerProfileMarshal)marshaledObject.Wrapper;
-
-                return Marshal.PtrToStringAnsi(profile.caller_id_name);
-            }
+            get { return GetFieldByName("caller_id_name"); }
         }
 
         public string CallerIdNumber
         {
-            set
-            {
-                throw new NotImplementedException();
-            }
-            get
-            {
-                CallerProfileMarshal profile = (CallerProfileMarshal)marshaledObject.Wrapper;
-
-                return Marshal.PtrToStringAnsi(profile.caller_id_number);
-            }
+            get { return GetFieldByName("caller_id_number"); }
         }
 
         public string NetworkAddress
         {
-            set { throw new NotImplementedException(); }
-            get
-            {
-                CallerProfileMarshal profile = (CallerProfileMarshal)marshaledObject.Wrapper;
-
-                return Marshal.PtrToStringAnsi(profile.network_addr);
-            }
+            get { return GetFieldByName("network_addr"); }
         }
 
         public string Ani
         {
-            set { throw new NotImplementedException(); }
-            get { throw new NotImplementedException(); }
+            get { return GetFieldByName("ani"); }
         }
 
         public string Ani2
         {
-            set { throw new NotImplementedException(); }
-            get { throw new NotImplementedException(); }
+            get { return GetFieldByName("ani2"); }
         }
 
         public string Rdnis
         {
-            set { throw new NotImplementedException(); }
-            get
-            {
-                CallerProfileMarshal profile = (CallerProfileMarshal)marshaledObject.Wrapper;
+            get { return GetFieldByName("rdnis"); }
+        }
 
-                return Marshal.PtrToStringAnsi(profile.rdnis);
-            }
+        public string Source
+        {
+            get { return GetFieldByName("source"); }
         }
 
+        public string Context
+        {
+            get { return GetFieldByName("context"); }
+        }
+
         public string DestinationNumber
         {
-            set { throw new NotImplementedException(); }
-            get { throw new NotImplementedException(); }
+            get { return GetFieldByName("destination_number"); }
         }
 
         public string ChannelName
         {
-            set { throw new NotImplementedException(); }
-            get { throw new NotImplementedException(); }
+            get { return GetFieldByName("chan_name"); }
         }
 
         public string Uuid
         {
-            set { throw new NotImplementedException(); }
-            get { throw new NotImplementedException(); }
+            get{ return GetFieldByName("uuid"); }
+        }
+
+        public string Username
+        {
+            get { return GetFieldByName("username"); }
         }
     }
 }

Modified: freeswitch/branches/james/src/dotnet/Types/Channel.cs
==============================================================================
--- freeswitch/branches/james/src/dotnet/Types/Channel.cs	(original)
+++ freeswitch/branches/james/src/dotnet/Types/Channel.cs	Sat Aug 12 00:43:19 2006
@@ -35,6 +35,31 @@
 
 namespace Freeswitch.Types
 {
+    /*
+     * 	char *name;
+	switch_buffer_t *dtmf_buffer;
+	switch_mutex_t *dtmf_mutex;
+	switch_mutex_t *flag_mutex;
+	switch_mutex_t *profile_mutex;
+	switch_core_session_t *session;
+	switch_channel_state_t state;
+	uint32_t flags;
+	switch_caller_profile_t *caller_profile;
+	switch_caller_profile_t *originator_caller_profile;
+	switch_caller_profile_t *originatee_caller_profile;
+	switch_caller_extension_t *caller_extension;
+	const switch_state_handler_table_t *state_handlers[SWITCH_MAX_STATE_HANDLERS];
+	int state_handler_index;
+	switch_hash_t *variables;
+	switch_channel_timetable_t *times;
+	void *private_info;
+	switch_call_cause_t hangup_cause;
+	int freq;
+	int bits;
+	int channels;
+	int ms;
+	int kbps;
+     */
     public class Channel
     {
         internal HandleRef marshaledObject;
@@ -43,7 +68,7 @@
         {
             get
             {
-                ChannelMarshal channel = (ChannelMarshal)marshaledObject.Wrapper;
+                ChannelMarshal channel = (ChannelMarshal) marshaledObject.Wrapper;
 
                 return Marshal.PtrToStringAnsi(channel.name);
             }
@@ -51,7 +76,12 @@
 
         public Buffer DtmfBuffer
         {
-            get { throw new NotImplementedException(); }
+            get
+            {
+                Console.WriteLine("Buffer");
+                return new Buffer();
+                //throw new NotImplementedException();
+            }
         }
 
         public ChannelState State
@@ -81,7 +111,12 @@
 
         public ChannelFlag Flags
         {
-            get { throw new NotImplementedException(); }
+            get
+            {
+                Console.WriteLine("ChannelFlag");
+                return new ChannelFlag();
+                //throw new NotImplementedException();
+            }
         }
 
         public CallerProfile CallerProfile
@@ -94,48 +129,82 @@
 
         public CallerProfile OriginatorCallerProfile
         {
-            get { throw new NotImplementedException(); }
+            get
+            {
+                return Switch.switch_channel_get_originator_caller_profile(this);
+            }
         }
 
         public CallerProfile OriginateeCallerProfile
         {
-            get { throw new NotImplementedException(); }
+            get
+            {
+                return Switch.switch_channel_get_originatee_caller_profile(this);
+            }
         }
 
         public CallerExtension CallerExtension
         {
-            get { throw new NotImplementedException(); }
+            get
+            {
+                return Switch.switch_channel_get_caller_extension(this);
+            }
         }
 
         public ChannelTimetable Times
         {
-            get { throw new NotImplementedException(); }
+            get
+            {
+                Console.WriteLine("Channel Timetable");
+                return new ChannelTimetable();
+              //  throw new NotImplementedException();
+            }
         }
 
         public int Freq
         {
-            get { throw new NotImplementedException(); }
+            get
+            {
+                ChannelMarshal channel = (ChannelMarshal) marshaledObject.Wrapper;
+
+                return channel.freq;
+            }
         }
 
         public int Bits
         {
-            get { throw new NotImplementedException(); }
+            get
+            {
+                ChannelMarshal channel = (ChannelMarshal) marshaledObject.Wrapper;
+
+                return channel.bits;
+            }
         }
 
         public int Channels
         {
-            get { throw new NotImplementedException(); }
+            get
+            {
+                ChannelMarshal channel = (ChannelMarshal) marshaledObject.Wrapper;
+
+                return channel.channels;
+            }
         }
 
         public int Ms
         {
-            get { throw new NotImplementedException(); }
+            get
+            {
+                ChannelMarshal channel = (ChannelMarshal) marshaledObject.Wrapper;
+
+                return channel.ms;
+            }
         }
 
         public int Kbps
         {
             get {
-                ChannelMarshal channel = (ChannelMarshal)marshaledObject.Wrapper;
+                ChannelMarshal channel = (ChannelMarshal) marshaledObject.Wrapper;
 
                 return channel.kbps;
             }

Modified: freeswitch/branches/james/src/dotnet/Types/CoreSession.cs
==============================================================================
--- freeswitch/branches/james/src/dotnet/Types/CoreSession.cs	(original)
+++ freeswitch/branches/james/src/dotnet/Types/CoreSession.cs	Sat Aug 12 00:43:19 2006
@@ -37,25 +37,95 @@
 
 namespace Freeswitch.Types
 {
+    /*
+     * 	uint32_t id;
+	char name[80];
+	int thread_running;
+	switch_memory_pool_t *pool;
+	switch_channel_t *channel;
+	switch_thread_t *thread;
+	const switch_endpoint_interface_t *endpoint_interface;
+	switch_io_event_hooks_t event_hooks;
+	switch_codec_t *read_codec;
+	switch_codec_t *write_codec;
+
+	switch_buffer_t *raw_write_buffer;
+	switch_frame_t raw_write_frame;
+	switch_frame_t enc_write_frame;
+	uint8_t raw_write_buf[SWITCH_RECCOMMENDED_BUFFER_SIZE];
+	uint8_t enc_write_buf[SWITCH_RECCOMMENDED_BUFFER_SIZE];
+
+	switch_buffer_t *raw_read_buffer;
+	switch_frame_t raw_read_frame;
+	switch_frame_t enc_read_frame;
+	uint8_t raw_read_buf[SWITCH_RECCOMMENDED_BUFFER_SIZE];
+	uint8_t enc_read_buf[SWITCH_RECCOMMENDED_BUFFER_SIZE];
+
+
+	switch_audio_resampler_t *read_resampler;
+	switch_audio_resampler_t *write_resampler;
+
+	switch_mutex_t *mutex;
+	switch_thread_cond_t *cond;
+
+	switch_thread_rwlock_t *rwlock;
+
+	void *streams[SWITCH_MAX_STREAMS];
+	int stream_count;
+
+	char uuid_str[SWITCH_UUID_FORMATTED_LENGTH + 1];
+	void *private_info;
+	switch_queue_t *event_queue;
+     */
     public class CoreSession
     {
         public HandleRef marshaledObject;
 
-        public ulong Id
+        /*
+         * Properties
+         */
+        public UInt32 Id
         {
-            get { throw new NotImplementedException(); }
+            get
+            {
+                CoreSessionMarshal coreSessionMarshal = (CoreSessionMarshal)marshaledObject.Wrapper;
+
+                return coreSessionMarshal.id;
+            }
         }
 
         public string Name
         {
-            get { throw new NotImplementedException(); }
+            get
+            {
+                CoreSessionMarshal coreSessionMarshal = (CoreSessionMarshal) marshaledObject.Wrapper;
+
+                return Encoding.ASCII.GetString(coreSessionMarshal.name);
+            }
         }
 
-        public int IsThreadRunning
+        public bool IsThreadRunning
         {
-            get { throw new NotImplementedException(); ; }
+            get
+            {
+                CoreSessionMarshal coreSessionMarshal = (CoreSessionMarshal)marshaledObject.Wrapper;
+
+                if (coreSessionMarshal.thread_running <= 0)
+                    return false;
+                else
+                    return true;
+            }
         }
 
+        public MemoryPool Pool
+        {
+            get
+            {
+                return Switch.switch_core_session_get_pool(this);
+            }
+        }
+
+
         public Channel Channel
         {
             get
@@ -64,13 +134,16 @@
             }
         }
 
-        public MemoryPool Pool
+        public string Uuid
         {
             get
             {
-                return Switch.switch_core_session_get_pool(this);
+                CoreSessionMarshal coreSessionMarshal = (CoreSessionMarshal)marshaledObject.Wrapper;
+
+                return Encoding.ASCII.GetString(coreSessionMarshal.uuid_str);
             }
         }
+
 
         public CoreSession OutgoingChannel(string endpointName, CallerProfile callerProfile)
         {

Modified: freeswitch/branches/james/src/dotnet/Types/LoadableModuleInterface.cs
==============================================================================
--- freeswitch/branches/james/src/dotnet/Types/LoadableModuleInterface.cs	(original)
+++ freeswitch/branches/james/src/dotnet/Types/LoadableModuleInterface.cs	Sat Aug 12 00:43:19 2006
@@ -33,10 +33,17 @@
 using System.Collections;
 using System.Runtime.InteropServices;
 using System.Text;
+using Freeswitch.Marshaling;
 
 namespace Freeswitch.Types
 {
-    public delegate void ModuleLoad();
+    public delegate Status WriteFunction(
+        [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(StreamHandleMarshaler))]
+        StreamHandle streamHandle,
+        [MarshalAs(UnmanagedType.LPStr)]
+        string fmt);
+
+    //public delegate void ModuleLoad();
 
     public class LoadableModuleInterface
     {

Added: freeswitch/branches/james/src/dotnet/Types/Module.cs
==============================================================================
--- (empty file)
+++ freeswitch/branches/james/src/dotnet/Types/Module.cs	Sat Aug 12 00:43:19 2006
@@ -0,0 +1,59 @@
+/* 
+ * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
+ * Copyright (C) 2006, James Martelletti <james at nerdc0re.com>
+ *
+ * Version: MPL 1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
+ *
+ * The Initial Developer of the Original Code is
+ * James Martelletti <james at nerdc0re.com>
+ * Portions created by the Initial Developer are Copyright (C)
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * 
+ * James Martelletti <james at nerdc0re.com>
+ *
+ *
+ * Module.cs -- 
+ *
+ */
+using System;
+using System.Runtime.InteropServices;
+using Freeswitch.Marshaling;
+
+namespace Freeswitch.Types
+{
+    public delegate Status ModuleReload();
+    public delegate bool ModulePause();
+    public delegate bool ModuleResume();
+    public delegate bool ModuleStatus();
+    public delegate Status ModuleRuntime();
+    public delegate bool ModuleShutdown();
+    public delegate Status ModuleLoad(ref IntPtr module, string name);
+
+    public delegate void
+        ApplicationFunction(
+            [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(CoreSessionMarshaler))]
+            CoreSession session,
+            [MarshalAs(UnmanagedType.LPStr)]
+            string data);
+
+    public delegate Status
+        ApiFunction(
+            [MarshalAs(UnmanagedType.LPStr)]
+            string command,
+            [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(StreamHandleMarshaler))]
+            StreamHandle streamHandle);
+}

Added: freeswitch/branches/james/src/dotnet/Types/ModuleInterfaces.cs
==============================================================================
--- (empty file)
+++ freeswitch/branches/james/src/dotnet/Types/ModuleInterfaces.cs	Sat Aug 12 00:43:19 2006
@@ -0,0 +1,69 @@
+/* 
+ * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
+ * Copyright (C) 2006, James Martelletti <james at nerdc0re.com>
+ *
+ * Version: MPL 1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
+ *
+ * The Initial Developer of the Original Code is
+ * James Martelletti <james at nerdc0re.com>
+ * Portions created by the Initial Developer are Copyright (C)
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * 
+ * James Martelletti <james at nerdc0re.com>
+ *
+ *
+ * ApplicationInterface.cs -- 
+ *
+ */
+using System;
+using System.Collections;
+using System.Runtime.InteropServices;
+using System.Text;
+
+namespace Freeswitch.Types
+{
+    /*
+    public class ApplicationInterface
+    {
+	    private string interface_name;
+	    private ApplicationFunction application_function;
+	    private string long_desc;
+	    private string short_desc;
+	    private	string syntax;
+	    //const struct switch_application_interface *next;
+
+        public string InterfaceName
+        {
+            get { return interface_name; }
+        }
+
+        public ApplicationFunction ApplicationFunction
+        {
+            get { return application_function; }
+        }
+
+        public string LongDesc
+        {
+            get { return long_desc; }
+        }
+
+        public string ShortDesc
+        {
+            get { return short_desc; }
+        }
+    }*/
+}

Added: freeswitch/branches/james/src/dotnet/Types/StreamHandle.cs
==============================================================================
--- (empty file)
+++ freeswitch/branches/james/src/dotnet/Types/StreamHandle.cs	Sat Aug 12 00:43:19 2006
@@ -0,0 +1,59 @@
+/* 
+ * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
+ * Copyright (C) 2006, James Martelletti <james at nerdc0re.com>
+ *
+ * Version: MPL 1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
+ *
+ * The Initial Developer of the Original Code is
+ * James Martelletti <james at nerdc0re.com>
+ * Portions created by the Initial Developer are Copyright (C)
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * 
+ * James Martelletti <james at nerdc0re.com>
+ *
+ *
+ * StreamHandle.cs -- 
+ *
+ */
+using System;
+using System.Runtime.InteropServices;
+using Freeswitch.Marshaling.Types;
+
+namespace Freeswitch.Types
+{
+    public class StreamHandle
+    {
+        internal HandleRef marshaledObject;
+        internal WriteFunction writeFunction;
+        //internal  WriteFunctions; //switch_stream_handle_write_function_t write_function;
+        /*
+         * internal 
+        void *data;
+        void *end;
+        switch_size_t data_size;
+        switch_size_t data_len;
+        switch_event_t *event;
+        */
+        public void Write(string data)
+        {
+            StreamHandleMarshal streamHandleMarshal = (StreamHandleMarshal) marshaledObject.Wrapper;
+            WriteFunction       writeFunction       = (WriteFunction) Marshal.GetDelegateForFunctionPointer(streamHandleMarshal.write_function, typeof(WriteFunction));
+
+            writeFunction(this, data);
+        }
+    }
+}

Added: freeswitch/branches/james/src/mod/dotnet/Info/Info.cs
==============================================================================
--- (empty file)
+++ freeswitch/branches/james/src/mod/dotnet/Info/Info.cs	Sat Aug 12 00:43:19 2006
@@ -0,0 +1,124 @@
+using System;
+using System.Text;
+using Freeswitch;
+using Freeswitch.Modules;
+using Freeswitch.Types;
+
+namespace Info
+{
+    public class Info : Module
+    {
+        public Info()
+        {
+            Console.WriteLine("Running INFO ctor");
+
+            AddApiInterface(new InfoApi());
+            AddApplicationInterface(new InfoApplication());
+                        
+            Register();
+        }
+        
+    }
+
+    public class InfoApplication : Application
+    {
+        public InfoApplication()
+        {
+            Name                = "dotnetbridge";
+            Syntax              = "record /file/name";
+            ShortDescription    = "short description";
+            LongDescription     = "long description, long description, long description";
+            ApplicationFunction = new ApplicationFunction(BridgeApplicationFunction);
+        }
+
+        public Status OnDtmf(CoreSession session, string dtmf)
+        {
+
+            Console.WriteLine("Digits: {0}", dtmf);
+
+            return Status.Success;
+        }
+
+        public void BridgeApplicationFunction(CoreSession coreSession, string data)
+        {
+            Console.WriteLine("%%% Processing new call");
+            Console.WriteLine("%%% Data: {0}", data);
+            Common.DumpProperties("coreSession", coreSession);
+            Common.DumpProperties("coreSession.Channel", coreSession.Channel);
+
+            Common.DumpProperties("coreSession.Channel.CallerExtension", coreSession.Channel.CallerExtension);
+            Common.DumpProperties("coreSession.Channel.CallerProfile", coreSession.Channel.CallerProfile);
+            //Console.WriteLine("%%%    Name: {0}", coreSession.Name);
+            //Console.WriteLine("%%%    Name: {0}", coreSession.Name);
+            //Console.WriteLine("%%%    Name: {0}", coreSession.Name);
+            //Console.WriteLine("%%%    Name: {0}", coreSession.Name);
+
+
+            CoreSession   peerSession;
+            Channel       callerChannel = coreSession.Channel;
+
+            CallerProfile callerProfile;
+            CallerProfile callerCallerProfile = callerChannel.CallerProfile;
+            
+            string chanType = "exosip";
+            string chanData = "666 at 10.0.0.60";
+            uint   timelimit = 60;
+
+            Console.WriteLine(callerCallerProfile.Dialplan);
+            Console.WriteLine(callerCallerProfile.CallerIdName);
+            Console.WriteLine(callerCallerProfile.CallerIdNumber);
+            Console.WriteLine(callerCallerProfile.NetworkAddress);
+
+            try
+            {
+                callerProfile = CallerProfile.New(coreSession.Pool,
+                                                  callerCallerProfile.Username,
+                                                  callerCallerProfile.Dialplan,
+                                                  callerCallerProfile.CallerIdName,
+                                                  callerCallerProfile.CallerIdNumber,
+                                                  callerCallerProfile.NetworkAddress,
+                                                  "ani",
+                                                  "ani2",
+                                                  callerCallerProfile.Rdnis,
+                                                  callerCallerProfile.Source,
+                                                  callerCallerProfile.Context,
+                                                  chanData);
+
+                Console.WriteLine(callerProfile.Dialplan);
+                Console.WriteLine(callerProfile.CallerIdName);
+                Console.WriteLine(callerProfile.CallerIdNumber);
+                Console.WriteLine(callerProfile.NetworkAddress);
+
+                peerSession = coreSession.OutgoingChannel(chanType, callerProfile);
+
+                Console.WriteLine("Peer Channel Name: " + peerSession.Channel.Name);
+
+            }
+            catch (Exception e)
+            {
+                callerChannel.Hangup();
+                return;
+            }
+
+            Ivr.MultiThreadedBridge(coreSession, peerSession, timelimit);
+            
+        }
+    }
+
+    public class InfoApi : Api
+    {
+        public InfoApi()
+        {
+            Name        = "info";
+            Description = "blah blah blah";
+            ApiFunction = new ApiFunction(InfoApiFunction);
+        }
+
+        public Status InfoApiFunction(string command, StreamHandle streamHandle)
+        {
+            streamHandle.Write("It is " + DateTime.Now.ToLongTimeString());
+
+            return Status.Success;
+        }
+    }
+}

Added: freeswitch/branches/james/src/mod/dotnet/Info/Info.csproj
==============================================================================
--- (empty file)
+++ freeswitch/branches/james/src/mod/dotnet/Info/Info.csproj	Sat Aug 12 00:43:19 2006
@@ -0,0 +1,53 @@
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>8.0.50727</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{B8A7E58B-2480-4A56-B39B-5FF9698A7124}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>Info</RootNamespace>
+    <AssemblyName>Info</AssemblyName>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Info.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\..\dotnet\FreeSwitchDotNet.csproj">
+      <Project>{251CAABC-16C3-4593-A491-603B908094E0}</Project>
+      <Name>FreeSwitch</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>
\ No newline at end of file

Added: freeswitch/branches/james/src/mod/dotnet/Info/Info.dll
==============================================================================
Binary file. No diff available.

Added: freeswitch/branches/james/src/mod/dotnet/Info/Info.suo
==============================================================================
Binary file. No diff available.

Added: freeswitch/branches/james/src/mod/dotnet/Info/Makefile
==============================================================================
--- (empty file)
+++ freeswitch/branches/james/src/mod/dotnet/Info/Makefile	Sat Aug 12 00:43:19 2006
@@ -0,0 +1,10 @@
+all: Info.so 
+
+Info.so:
+	gmcs -t:library -r:../../../dotnet/Freeswitch.dll -out:Info.dll Properties/AssemblyInfo.cs Info.cs
+	
+clean:
+	rm -fr *.dll
+
+install:
+	cp -f Info.dll /usr/local/freeswitch/mod/mono

Added: freeswitch/branches/james/src/mod/dotnet/Info/Properties/AssemblyInfo.cs
==============================================================================
--- (empty file)
+++ freeswitch/branches/james/src/mod/dotnet/Info/Properties/AssemblyInfo.cs	Sat Aug 12 00:43:19 2006
@@ -0,0 +1,35 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("Info")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("Info")]
+[assembly: AssemblyCopyright("Copyright ©  2006")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("92e4523b-8d54-4152-bb7b-fedb39ea4a5a")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Revision and Build Numbers 
+// by using the '*' as shown below:
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]

Added: freeswitch/branches/james/src/mod/dotnet/Info/bin/Debug/Freeswitch.dll
==============================================================================
Binary file. No diff available.

Added: freeswitch/branches/james/src/mod/dotnet/Info/bin/Debug/Freeswitch.pdb
==============================================================================
Binary file. No diff available.

Added: freeswitch/branches/james/src/mod/dotnet/Info/bin/Debug/Info.dll
==============================================================================
Binary file. No diff available.

Added: freeswitch/branches/james/src/mod/dotnet/Info/bin/Debug/Info.pdb
==============================================================================
Binary file. No diff available.

Added: freeswitch/branches/james/src/mod/dotnet/Info/obj/Debug/Info.dll
==============================================================================
Binary file. No diff available.

Added: freeswitch/branches/james/src/mod/dotnet/Info/obj/Debug/ResolveAssemblyReference.cache
==============================================================================
Binary file. No diff available.

Added: freeswitch/branches/james/src/mod/dotnet/Info/obj/Info.csproj.FileList.txt
==============================================================================
--- (empty file)
+++ freeswitch/branches/james/src/mod/dotnet/Info/obj/Info.csproj.FileList.txt	Sat Aug 12 00:43:19 2006
@@ -0,0 +1,7 @@
+obj\Debug\ResolveAssemblyReference.cache
+bin\Debug\Info.dll
+bin\Debug\Info.pdb
+bin\Debug\FreeSwitch.dll
+bin\Debug\FreeSwitch.pdb
+obj\Debug\Info.dll
+obj\Debug\Info.pdb

Modified: freeswitch/branches/james/src/mod/languages/mod_mono/mod_mono.c
==============================================================================
--- freeswitch/branches/james/src/mod/languages/mod_mono/mod_mono.c	(original)
+++ freeswitch/branches/james/src/mod/languages/mod_mono/mod_mono.c	Sat Aug 12 00:43:19 2006
@@ -42,37 +42,10 @@
 #define SWITCH_MONO_MODULES    "/usr/local/freeswitch/mod/mono"
 #define SWITCH_MONO_ASSEMBLY   "Freeswitch.dll"
 
-/*
-typedef switch_status (*switch_module_load_t) (switch_loadable_module_interface **, char *);
-typedef switch_status (*switch_module_reload_t) (void);
-typedef switch_status (*switch_module_pause_t) (void);
-typedef switch_status (*switch_module_resume_t) (void);
-typedef switch_status (*switch_module_status_t) (void);
-typedef switch_status (*switch_module_runtime_t) (void);
-typedef switch_status (*switch_module_shutdown_t) (void);
-*/
-
-SWITCH_MOD_DECLARE(switch_status_t) switch_module_shutdown(void);
-switch_status_t mod_mono_check_api(MonoImage *image);
-switch_status_t mod_mono_load_managed();
 switch_status_t mod_mono_load_plugins();
-//SWITCH_MOD_DECLARE(switch_status_t) mod_mono_api_function(char *in, char *out, size_t outlen);
 void mono_switch_console_printf(switch_text_channel_t channel, char *file, const char *func, int line, char *fmt, char *msg);
-SWITCH_DECLARE(void) event_handler(switch_event_t *event);
 MonoClass* find_assembly_class(MonoImage *image);
-static void mod_mono_application_function(switch_core_session_t *session, char *data);
-/*
-const char *mod_mono_public_key = "\x00\x24\x00\x00\x04\x80\x00\x00\x94\x00\x00\x00\x06\x02\x00\x00"
-                                  "\x00\x24\x00\x00\x52\x53\x41\x31\x00\x04\x00\x00\x11\x00\x00\x00"
-                                  "\x25\x45\x19\xB7\xFF\xB9\x3A\x67\xDD\x9E\x39\x0D\x29\xEF\x31\xAD"
-                                  "\x30\x77\xE3\x01\xAF\x28\x2C\xAC\x7A\x09\x34\xDF\x39\x4C\x9A\x26"
-                                  "\xF8\x5A\x84\xF8\x88\x53\x00\x5A\x94\xC9\x65\x82\x2A\xF3\x40\x4B"
-                                  "\x0F\x82\xA1\xB9\x61\x52\xFE\x23\x2E\xAC\xE9\x71\x97\xC4\xFE\xA7"
-                                  "\x11\x17\xCE\x69\x05\xB1\xB7\xD0\xE2\xAE\x8A\xAF\x96\x1A\x58\x91"
-                                  "\x84\x1D\x7C\x2F\x26\x6E\x31\x84\x38\xD8\xC8\xD5\xE9\xE5\x4A\xC0"
-                                  "\x0F\x6B\x4A\x57\x4F\xA2\xFC\x13\x7A\x8E\xB6\x3A\xA4\xC1\xE5\xC2"
-                                  "\xAD\x17\xA5\xFF\xBC\xE1\x35\x4F\x7F\x83\x48\x2A\x2E\x15\x83\xB3";
-*/
+
 static const char modname[] = "mod_mono";
 
 switch_memory_pool_t *mono_pool;
@@ -94,18 +67,9 @@
 	MonoClass *class;
 	MonoObject *object;	
 } mono_plugin;
-static const switch_application_interface_t mono_application_interface = {
-	/*.interface_name */ "mod_mono",
-	/*.application_function */ mod_mono_application_function
-};
 
 static switch_loadable_module_interface_t mono_module_interface = {
 	/*.module_name */ modname,
-	/*.endpoint_interface */ NULL,
-	/*.timer_interface */ NULL,
-	/*.dialplan_interface */ NULL,
-	/*.codec_interface */ NULL,
-	/*.application_interface */ &mono_application_interface,
 };
 
 void mono_switch_console_printf(switch_text_channel_t channel, char *file, const char *func, int line, char *fmt, char *msg)
@@ -113,47 +77,7 @@
 	switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, msg);
 }
 
-static void mod_mono_application_function(switch_core_session_t *session, char *data)
-{
-	MonoObject *exception;
-	MonoString *string;
-	void *params[2];
-
-	mono_thread_attach(globals.domain);
-	
-	params[0] = &session;
-	params[1] = &data;
-	string = (MonoString *)mono_runtime_invoke(globals.application, globals.object, params, &exception); 
-
-	if (exception)
-		mono_print_unhandled_exception(exception);
-}
 /*
-SWITCH_MOD_DECLARE(switch_status_t) mod_mono_api_function(char *in, char *out, size_t outlen)
-{
-	MonoObject *exception;
-	MonoString *string;
-	void *params[3];
-
-	mono_thread_attach(globals.domain);
-	
-	params[0] = &in;
-	params[1] = &out;
-	params[2] = &outlen;
-	string = (MonoString *)mono_runtime_invoke(globals.api, globals.object, params, &exception); 
-
-	if (exception)
-	{
-		mono_print_unhandled_exception(exception);
-		return SWITCH_STATUS_FALSE;
-	}
-
-	switch_copy_string(out, mono_string_to_utf8(string), outlen);
-
-	return SWITCH_STATUS_SUCCESS;
-}
-*/
-/*
  * Load mod_mono module and initialise domain
  *
  * This function will initialise the memory pool and plugin hash for this module,
@@ -184,12 +108,6 @@
 	}
 	
 	switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Initialised mono runtime.\n");
-
-	/* Load our core assembly */
-	if (mod_mono_load_managed() != SWITCH_STATUS_SUCCESS) {
-		switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Error loading our core assembly.\n");
-		return SWITCH_STATUS_FALSE;
-	}
 	
 	/* Load our plugins */
 	if (mod_mono_load_plugins() != SWITCH_STATUS_SUCCESS) {
@@ -197,9 +115,6 @@
 		return SWITCH_STATUS_FALSE;
 	}
 
-	/* Start our core assembly */
-	//mono_runtime_object_init(globals.object);
-
 	for (plugin = switch_hash_first(mono_pool, mono_plugins); plugin; plugin = switch_hash_next(plugin)) {
 		mono_plugin *p = (mono_plugin *)switch_core_alloc(mono_pool, sizeof(*p));
 		apr_ssize_t *key_length = NULL;
@@ -233,86 +148,6 @@
 /*
  * This function will load the managed portion of mod_mono.
  */ 
-switch_status_t mod_mono_load_managed()
-{
-//	MonoAssembly *assembly;
-//	MonoImage *image;
-//	MonoMethod *method;
-//	gpointer iter = NULL;
-//	int len;
-//	char *file;
-	
-	/* Construct the file path and name for FreeSwitch.dll  */
-//	len = strlen(SWITCH_MONO_MODULES) + strlen(SWITCH_MONO_ASSEMBLY) + 2;
-//	file = (char *)switch_core_alloc(mono_pool, len);
-//	snprintf(file, len, "%s/%s", SWITCH_MONO_MODULES, SWITCH_MONO_ASSEMBLY);
-	
-	/* Attempt to open FreeSwitch.dll */
-//	assembly = mono_domain_assembly_open(globals.domain, file);
-
-//	if (!assembly) {
-//		switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Could not locate managed library (Freeswitch.dll)\n");
-//		return SWITCH_STATUS_FALSE;
-//	}
-
-	/* Get the image for our core assembly */ 
-//	image = mono_assembly_get_image(assembly);
-
-	/* Check that the assembly is our core */
-//	if (mod_mono_check_api(image) != SWITCH_STATUS_SUCCESS)
-//	{
-//		switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Freeswitch.dll is an invalid assembly.\n");
-//		return SWITCH_STATUS_FALSE;
-//	}
-
-//	globals.assembly = assembly;
-//	globals.image = image;
-			
-//	globals.class = mono_class_from_name(globals.image, "Freeswitch", "Core");
-//	if (!globals.class)
-//		switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Could not create object from class.\n");
-
-//	globals.object = mono_object_new(globals.domain, globals.class);
-//	mono_runtime_object_init(globals.object);
-
-//	while ((method = mono_class_get_methods(globals.class, &iter))) {
-//		if (!strcmp(mono_method_get_name(method), "Event")) {
-//			globals.event = method;
-
-//			if (switch_event_bind((char *) modname, SWITCH_EVENT_ALL, SWITCH_EVENT_SUBCLASS_ANY, event_handler, NULL) != SWITCH_STATUS_SUCCESS) {
-//				switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Could not bind events.\n");
-//				return SWITCH_STATUS_FALSE;
-//			}
-//		}	
-//		if (!strcmp(mono_method_get_name(method), "Api")) {
-//			globals.api = method;
-//		}	
-//		if (!strcmp(mono_method_get_name(method), "Application")) {
-//			globals.application = method;
-//		}
-//	}
-	return SWITCH_STATUS_SUCCESS;
-}
-
-/*
-SWITCH_DECLARE(void) event_handler(switch_event_t *event)
-{
-	MonoObject *exception;
-	void *params[1];
-
-	mono_thread_attach(globals.domain);
-	
-	params[0] = &event;
-	mono_runtime_invoke(globals.event, globals.object, params, &exception); 
-*/	
-	/* Catch any exceptions */
-/*	if (exception)
-		mono_print_unhandled_exception(exception);
-}
-*/
-/*
- * This function will load the managed portion of mod_mono.
- */ 
 switch_status_t mod_mono_load_plugins()
 {
 	char *file;
@@ -336,10 +171,9 @@
 
 	/* Read the modules directory */
 	while (apr_dir_read(&finfo, finfo_flags, module_dir_handle) == APR_SUCCESS)
-       	{
+	{
 		assembly = (MonoAssembly *)switch_core_alloc(mono_pool, sizeof(assembly));
 		image = (MonoImage *)switch_core_alloc(mono_pool, sizeof(image));
-		//*image = NULL;
 		const char *fname = finfo.fname;
 
 		if (finfo.filetype != APR_REG)
@@ -368,52 +202,24 @@
 
 		/* Get the image from assembly */	
 		image = mono_assembly_get_image(assembly);
+	
+		plugin = (mono_plugin *)switch_core_alloc(mono_pool, sizeof(*plugin));
 
-		/* Check that the laoded assembly is not our core assembly */	
-		//if (mod_mono_check_api(image) == SWITCH_STATUS_SUCCESS)
-		//	continue;
-		//else {	
-			plugin = (mono_plugin *)switch_core_alloc(mono_pool, sizeof(*plugin));
+		plugin->assembly = assembly;
+		plugin->class    = find_assembly_class(mono_assembly_get_image(plugin->assembly));
 
-			plugin->assembly = assembly;
-			
-			plugin->class = find_assembly_class(mono_assembly_get_image(plugin->assembly));
-			if (!plugin->class) {
-				switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "No plugin class ;(\n");
-			}	
+		if (!plugin->class)
+			switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "No plugin class\n");
 
-			plugin->object = mono_object_new(globals.domain, plugin->class);
-			//mono_runtime_object_init(plugin->object);
+		plugin->object = mono_object_new(globals.domain, plugin->class);
 
-			switch_core_hash_insert(mono_plugins, (char *)mono_image_get_name(mono_assembly_get_image(assembly)), plugin);
+		switch_core_hash_insert(mono_plugins, (char *) mono_image_get_name(mono_assembly_get_image(assembly)), plugin);
 
-				//switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Loaded %s [0x%x]I - A:0x%x, C:0x%x, O:0x%x\n",
-				//	      (char *)mono_image_get_name(mono_assembly_get_image(assembly)),
-				//	      plugin, plugin->assembly, plugin->class, plugin->object);
-			plugin = NULL;
-		//}
+		plugin = NULL;
 	}	
 	return SWITCH_STATUS_SUCCESS;
 }
 
-/*
- * This function will retrieve the public key from the assembly and check
- * it against the public key defined in this file to ensure that we are
- * loading the correct assembly.
- */ 
-/*
-switch_status_t mod_mono_check_api(MonoImage *image)
-{
-	unsigned int size = 0;
-	const char *public_key = mono_image_get_public_key(image, &size);
-
-	if (size > 0)
-		if (memcmp(public_key, mod_mono_public_key, size) == 0)
-			return SWITCH_STATUS_SUCCESS;
-
-	return SWITCH_STATUS_FALSE;	
-}
-*/
 MonoClass* find_assembly_class(MonoImage *image)
 {
 	MonoClass *class, *parent_class = NULL;



More information about the Freeswitch-branches mailing list