summaryrefslogtreecommitdiffstats
path: root/bindings/winrt
diff options
context:
space:
mode:
authorMamadou DIOP <bossiel@yahoo.fr>2015-08-17 01:56:35 +0200
committerMamadou DIOP <bossiel@yahoo.fr>2015-08-17 01:56:35 +0200
commit631fffee8a28b1bec5ed1f1d26a20e0135967f99 (patch)
tree74afe3bf3efe15aa82bcd0272b2b0f4d48c2d837 /bindings/winrt
parent7908865936604036e6f200f1b5e069f8752f3a3a (diff)
downloaddoubango-631fffee8a28b1bec5ed1f1d26a20e0135967f99.zip
doubango-631fffee8a28b1bec5ed1f1d26a20e0135967f99.tar.gz
-
Diffstat (limited to 'bindings/winrt')
-rw-r--r--bindings/winrt/HandleRef.cs55
-rw-r--r--bindings/winrt/doubango_rt/doubango_rt.vcxproj232
-rw-r--r--bindings/winrt/doubango_rt/doubango_rt.vcxproj.filters112
-rw-r--r--bindings/winrt/doubango_rt/include/rt_ActionConfig.h53
-rw-r--r--bindings/winrt/doubango_rt/include/rt_Config.h31
-rw-r--r--bindings/winrt/doubango_rt/include/rt_DDebug.h53
-rw-r--r--bindings/winrt/doubango_rt/include/rt_Enums.h333
-rw-r--r--bindings/winrt/doubango_rt/include/rt_MediaContent.h18
-rw-r--r--bindings/winrt/doubango_rt/include/rt_MediaSessionMgr.h130
-rw-r--r--bindings/winrt/doubango_rt/include/rt_Msrp.h109
-rw-r--r--bindings/winrt/doubango_rt/include/rt_SMSEncoder.h18
-rw-r--r--bindings/winrt/doubango_rt/include/rt_SipCallback.h70
-rw-r--r--bindings/winrt/doubango_rt/include/rt_SipEvent.h244
-rw-r--r--bindings/winrt/doubango_rt/include/rt_SipMessage.h78
-rw-r--r--bindings/winrt/doubango_rt/include/rt_SipSession.h510
-rw-r--r--bindings/winrt/doubango_rt/include/rt_SipStack.h120
-rw-r--r--bindings/winrt/doubango_rt/include/rt_SipUri.h60
-rw-r--r--bindings/winrt/doubango_rt/include/rt_String.h33
-rw-r--r--bindings/winrt/doubango_rt/include/rt_Xcap.h18
-rw-r--r--bindings/winrt/doubango_rt/src/rt_ActionConfig.cxx76
-rw-r--r--bindings/winrt/doubango_rt/src/rt_DDebug.cxx78
-rw-r--r--bindings/winrt/doubango_rt/src/rt_Enums.cxx17
-rw-r--r--bindings/winrt/doubango_rt/src/rt_MediaContent.cxx17
-rw-r--r--bindings/winrt/doubango_rt/src/rt_MediaSessionMgr.cxx374
-rw-r--r--bindings/winrt/doubango_rt/src/rt_Msrp.cxx194
-rw-r--r--bindings/winrt/doubango_rt/src/rt_SMSEncoder.cxx17
-rw-r--r--bindings/winrt/doubango_rt/src/rt_SipCallback.cxx135
-rw-r--r--bindings/winrt/doubango_rt/src/rt_SipEvent.cxx239
-rw-r--r--bindings/winrt/doubango_rt/src/rt_SipMessage.cxx171
-rw-r--r--bindings/winrt/doubango_rt/src/rt_SipSession.cxx662
-rw-r--r--bindings/winrt/doubango_rt/src/rt_SipStack.cxx390
-rw-r--r--bindings/winrt/doubango_rt/src/rt_SipUri.cxx103
-rw-r--r--bindings/winrt/doubango_rt/src/rt_String.cxx58
-rw-r--r--bindings/winrt/doubango_rt/src/rt_Xcap.cxx17
-rw-r--r--bindings/winrt/tinyWRAP.sln229
-rw-r--r--bindings/winrt/tinyWRAP.vcxproj204
-rw-r--r--bindings/winrt/tinyWRAP.vcxproj.filters139
37 files changed, 5397 insertions, 0 deletions
diff --git a/bindings/winrt/HandleRef.cs b/bindings/winrt/HandleRef.cs
new file mode 100644
index 0000000..649f125
--- /dev/null
+++ b/bindings/winrt/HandleRef.cs
@@ -0,0 +1,55 @@
+// ==++==
+//
+// Copyright (c) Microsoft Corporation. All rights reserved.
+//
+// ==--==
+namespace System.Runtime.InteropServices
+{
+
+ using System;
+
+ [System.Runtime.InteropServices.ComVisible(true)]
+ public struct HandleRef
+ {
+
+ // ! Do not add or rearrange fields as the EE depends on this layout.
+ //------------------------------------------------------------------
+ internal Object m_wrapper;
+ internal IntPtr m_handle;
+ //-----------------------------------------------------------------
+
+
+ public HandleRef(Object wrapper, IntPtr handle)
+ {
+ m_wrapper = wrapper;
+ m_handle = handle;
+ }
+
+ public Object Wrapper
+ {
+ get
+ {
+ return m_wrapper;
+ }
+ }
+
+ public IntPtr Handle
+ {
+ get
+ {
+ return m_handle;
+ }
+ }
+
+
+ public static explicit operator IntPtr(HandleRef value)
+ {
+ return value.m_handle;
+ }
+
+ public static IntPtr ToIntPtr(HandleRef value)
+ {
+ return value.m_handle;
+ }
+ }
+} \ No newline at end of file
diff --git a/bindings/winrt/doubango_rt/doubango_rt.vcxproj b/bindings/winrt/doubango_rt/doubango_rt.vcxproj
new file mode 100644
index 0000000..41b23c5
--- /dev/null
+++ b/bindings/winrt/doubango_rt/doubango_rt.vcxproj
@@ -0,0 +1,232 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|ARM">
+ <Configuration>Debug</Configuration>
+ <Platform>ARM</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|ARM">
+ <Configuration>Release</Configuration>
+ <Platform>ARM</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{9ef0fc75-baab-4f71-ac0c-dbd185463ff8}</ProjectGuid>
+ <RootNamespace>doubango_rt</RootNamespace>
+ <DefaultLanguage>en-US</DefaultLanguage>
+ <MinimumVisualStudioVersion>11.0</MinimumVisualStudioVersion>
+ <WinMDAssembly>true</WinMDAssembly>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <PlatformToolset>v110_wp80</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <PlatformToolset>v110_wp80</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <PlatformToolset>v110_wp80</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <PlatformToolset>v110_wp80</PlatformToolset>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <GenerateManifest>false</GenerateManifest>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">
+ <OutDir>$(SolutionDir)$(Configuration)\$(MSBuildProjectName)\</OutDir>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">
+ <OutDir>$(SolutionDir)$(Configuration)\$(MSBuildProjectName)\</OutDir>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <IntDir>$(Platform)\$(Configuration)\</IntDir>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <IntDir>$(Platform)\$(Configuration)\</IntDir>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <PreprocessorDefinitions>_WINRT_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PrecompiledHeader>NotUsing</PrecompiledHeader>
+ <PrecompiledHeaderFile>
+ </PrecompiledHeaderFile>
+ <AdditionalUsingDirectories>$(WindowsSDK_MetadataPath);$(AdditionalUsingDirectories)</AdditionalUsingDirectories>
+ <CompileAsWinRT>true</CompileAsWinRT>
+ <AdditionalIncludeDirectories>include;..\..\_common;..\..\.;..\..\..\thirdparties\winrt\include;..\..\..\tinySAK\src;..\..\..\tinyNET\src;..\..\..\tinyHTTP\include;..\..\..\tinySIP\include;..\..\..\tinyDAV\include;..\..\..\tinySDP\include;..\..\..\tinyMEDIA\include;..\..\..\tinyXCAP\include;..\..\..\tinySMS\include;..\..\..\tinyMSRP\include</AdditionalIncludeDirectories>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
+ <IgnoreSpecificDefaultLibraries>ole32.lib;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
+ <GenerateWindowsMetadata>true</GenerateWindowsMetadata>
+ <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <PreprocessorDefinitions>_WINRT_DLL;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PrecompiledHeader>NotUsing</PrecompiledHeader>
+ <PrecompiledHeaderFile>
+ </PrecompiledHeaderFile>
+ <AdditionalUsingDirectories>$(WindowsSDK_MetadataPath);$(AdditionalUsingDirectories)</AdditionalUsingDirectories>
+ <CompileAsWinRT>true</CompileAsWinRT>
+ <AdditionalIncludeDirectories>include;..\..\_common;..\..\.;..\..\..\thirdparties\winrt\include;..\..\..\tinySAK\src;..\..\..\tinyNET\src;..\..\..\tinyHTTP\include;..\..\..\tinySIP\include;..\..\..\tinyDAV\include;..\..\..\tinySDP\include;..\..\..\tinyMEDIA\include;..\..\..\tinyXCAP\include;..\..\..\tinySMS\include;..\..\..\tinyMSRP\include</AdditionalIncludeDirectories>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
+ <IgnoreSpecificDefaultLibraries>ole32.lib;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
+ <GenerateWindowsMetadata>true</GenerateWindowsMetadata>
+ <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">
+ <ClCompile>
+ <PreprocessorDefinitions>_WINRT_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PrecompiledHeader>NotUsing</PrecompiledHeader>
+ <PrecompiledHeaderFile>
+ </PrecompiledHeaderFile>
+ <AdditionalUsingDirectories>$(WindowsSDK_MetadataPath);$(AdditionalUsingDirectories)</AdditionalUsingDirectories>
+ <CompileAsWinRT>true</CompileAsWinRT>
+ <AdditionalIncludeDirectories>include;..\..\_common;..\..\.;..\..\..\thirdparties\winrt\include;..\..\..\tinySAK\src;..\..\..\tinyNET\src;..\..\..\tinyHTTP\include;..\..\..\tinySIP\include;..\..\..\tinyDAV\include;..\..\..\tinySDP\include;..\..\..\tinyMEDIA\include;..\..\..\tinyXCAP\include;..\..\..\tinySMS\include;..\..\..\tinyMSRP\include</AdditionalIncludeDirectories>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
+ <IgnoreSpecificDefaultLibraries>ole32.lib;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
+ <GenerateWindowsMetadata>true</GenerateWindowsMetadata>
+ <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">
+ <ClCompile>
+ <PreprocessorDefinitions>_WINRT_DLL;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PrecompiledHeader>NotUsing</PrecompiledHeader>
+ <PrecompiledHeaderFile>
+ </PrecompiledHeaderFile>
+ <AdditionalUsingDirectories>$(WindowsSDK_MetadataPath);$(AdditionalUsingDirectories)</AdditionalUsingDirectories>
+ <CompileAsWinRT>true</CompileAsWinRT>
+ <AdditionalIncludeDirectories>include;..\..\_common;..\..\.;..\..\..\thirdparties\winrt\include;..\..\..\tinySAK\src;..\..\..\tinyNET\src;..\..\..\tinyHTTP\include;..\..\..\tinySIP\include;..\..\..\tinyDAV\include;..\..\..\tinySDP\include;..\..\..\tinyMEDIA\include;..\..\..\tinyXCAP\include;..\..\..\tinySMS\include;..\..\..\tinyMSRP\include</AdditionalIncludeDirectories>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
+ <IgnoreSpecificDefaultLibraries>ole32.lib;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
+ <GenerateWindowsMetadata>true</GenerateWindowsMetadata>
+ <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <Reference Include="platform.winmd">
+ <IsWinMDFile>true</IsWinMDFile>
+ <Private>false</Private>
+ </Reference>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="include\rt_ActionConfig.h" />
+ <ClInclude Include="include\rt_Config.h" />
+ <ClInclude Include="include\rt_DDebug.h" />
+ <ClInclude Include="include\rt_Enums.h" />
+ <ClInclude Include="include\rt_MediaContent.h" />
+ <ClInclude Include="include\rt_MediaSessionMgr.h" />
+ <ClInclude Include="include\rt_Msrp.h" />
+ <ClInclude Include="include\rt_SipCallback.h" />
+ <ClInclude Include="include\rt_SipEvent.h" />
+ <ClInclude Include="include\rt_SipMessage.h" />
+ <ClInclude Include="include\rt_SipSession.h" />
+ <ClInclude Include="include\rt_SipStack.h" />
+ <ClInclude Include="include\rt_SipUri.h" />
+ <ClInclude Include="include\rt_SMSEncoder.h" />
+ <ClInclude Include="include\rt_String.h" />
+ <ClInclude Include="include\rt_Xcap.h" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="src\rt_ActionConfig.cxx" />
+ <ClCompile Include="src\rt_DDebug.cxx" />
+ <ClCompile Include="src\rt_Enums.cxx" />
+ <ClCompile Include="src\rt_MediaContent.cxx" />
+ <ClCompile Include="src\rt_MediaSessionMgr.cxx" />
+ <ClCompile Include="src\rt_Msrp.cxx" />
+ <ClCompile Include="src\rt_SipCallback.cxx" />
+ <ClCompile Include="src\rt_SipEvent.cxx" />
+ <ClCompile Include="src\rt_SipMessage.cxx" />
+ <ClCompile Include="src\rt_SipSession.cxx" />
+ <ClCompile Include="src\rt_SipStack.cxx" />
+ <ClCompile Include="src\rt_SipUri.cxx" />
+ <ClCompile Include="src\rt_SMSEncoder.cxx" />
+ <ClCompile Include="src\rt_String.cxx" />
+ <ClCompile Include="src\rt_Xcap.cxx" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\..\..\tinyDAV\winrt\tinyDAV.vcxproj">
+ <Project>{0f2c458a-1edb-4e09-9a22-c2209731cff2}</Project>
+ </ProjectReference>
+ <ProjectReference Include="..\..\..\tinyHTTP\winrt\tinyHTTP.vcxproj">
+ <Project>{1a27423c-6535-4a49-96ec-5d209fe125f2}</Project>
+ </ProjectReference>
+ <ProjectReference Include="..\..\..\tinyIPSec\winrt\tinyIPSec.vcxproj">
+ <Project>{0875a083-5118-40cc-941e-722b00295a5b}</Project>
+ </ProjectReference>
+ <ProjectReference Include="..\..\..\tinyMEDIA\winrt\tinyMEDIA.vcxproj">
+ <Project>{52e43eeb-a549-4159-b254-dca225d7638b}</Project>
+ </ProjectReference>
+ <ProjectReference Include="..\..\..\tinyMSRP\winrt\tinyMSRP.vcxproj">
+ <Project>{be41d117-1d61-4c12-ad9d-b20d02c79687}</Project>
+ </ProjectReference>
+ <ProjectReference Include="..\..\..\tinyNET\winrt\tinyNET.vcxproj">
+ <Project>{06e58f9d-28a1-4dd4-af11-2f5239222ccc}</Project>
+ </ProjectReference>
+ <ProjectReference Include="..\..\..\tinyRTP\winrt\tinyRTP.vcxproj">
+ <Project>{77a24977-079c-4e02-9717-8b2f684baa21}</Project>
+ </ProjectReference>
+ <ProjectReference Include="..\..\..\tinySAK\winrt\tinySAK.vcxproj">
+ <Project>{19279f5b-cdaf-4187-9f09-2a896a828b05}</Project>
+ </ProjectReference>
+ <ProjectReference Include="..\..\..\tinySDP\winrt\tinySDP.vcxproj">
+ <Project>{982d737a-0649-4c32-a00e-08992a0b7673}</Project>
+ </ProjectReference>
+ <ProjectReference Include="..\..\..\tinySIGCOMP\winrt\tinySIGCOMP.vcxproj">
+ <Project>{f623cbdb-707a-4fdc-ace0-3d616e239f16}</Project>
+ </ProjectReference>
+ <ProjectReference Include="..\..\..\tinySIP\winrt\tinySIP.vcxproj">
+ <Project>{1137a808-dac8-4af7-b8bb-aee8abff2f67}</Project>
+ </ProjectReference>
+ <ProjectReference Include="..\..\..\tinySMS\winrt\tinySMS.vcxproj">
+ <Project>{65cdf0ff-3b84-45f3-9bb6-468c79b8e0bc}</Project>
+ </ProjectReference>
+ <ProjectReference Include="..\..\..\tinyXCAP\winrt\tinyXCAP.vcxproj">
+ <Project>{49843b78-0ceb-445d-bacc-c5c5c2f6c26f}</Project>
+ </ProjectReference>
+ <ProjectReference Include="..\tinyWRAP.vcxproj">
+ <Project>{5004ba7e-950d-4d60-a030-29acd38dca08}</Project>
+ </ProjectReference>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <Import Project="$(MSBuildExtensionsPath)\Microsoft\WindowsPhone\v$(TargetPlatformVersion)\Microsoft.Cpp.WindowsPhone.$(TargetPlatformVersion).targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/bindings/winrt/doubango_rt/doubango_rt.vcxproj.filters b/bindings/winrt/doubango_rt/doubango_rt.vcxproj.filters
new file mode 100644
index 0000000..774b55d
--- /dev/null
+++ b/bindings/winrt/doubango_rt/doubango_rt.vcxproj.filters
@@ -0,0 +1,112 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Resources">
+ <UniqueIdentifier>5fd0e509-b6ae-4f29-bd2a-4d2cc10f3aa0</UniqueIdentifier>
+ <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
+ </Filter>
+ <Filter Include="include">
+ <UniqueIdentifier>{98c8b78c-011e-40c4-91a2-a9fcf6d9fa24}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="src">
+ <UniqueIdentifier>{a8badfe7-5114-4a27-bb07-76772da8a9d1}</UniqueIdentifier>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="src\rt_SipStack.cxx">
+ <Filter>src</Filter>
+ </ClCompile>
+ <ClCompile Include="src\rt_Enums.cxx">
+ <Filter>src</Filter>
+ </ClCompile>
+ <ClCompile Include="src\rt_ActionConfig.cxx">
+ <Filter>src</Filter>
+ </ClCompile>
+ <ClCompile Include="src\rt_DDebug.cxx">
+ <Filter>src</Filter>
+ </ClCompile>
+ <ClCompile Include="src\rt_MediaContent.cxx">
+ <Filter>src</Filter>
+ </ClCompile>
+ <ClCompile Include="src\rt_Msrp.cxx">
+ <Filter>src</Filter>
+ </ClCompile>
+ <ClCompile Include="src\rt_SipCallback.cxx">
+ <Filter>src</Filter>
+ </ClCompile>
+ <ClCompile Include="src\rt_SipMessage.cxx">
+ <Filter>src</Filter>
+ </ClCompile>
+ <ClCompile Include="src\rt_SipSession.cxx">
+ <Filter>src</Filter>
+ </ClCompile>
+ <ClCompile Include="src\rt_SipUri.cxx">
+ <Filter>src</Filter>
+ </ClCompile>
+ <ClCompile Include="src\rt_SMSEncoder.cxx">
+ <Filter>src</Filter>
+ </ClCompile>
+ <ClCompile Include="src\rt_Xcap.cxx">
+ <Filter>src</Filter>
+ </ClCompile>
+ <ClCompile Include="src\rt_String.cxx">
+ <Filter>src</Filter>
+ </ClCompile>
+ <ClCompile Include="src\rt_MediaSessionMgr.cxx">
+ <Filter>src</Filter>
+ </ClCompile>
+ <ClCompile Include="src\rt_SipEvent.cxx">
+ <Filter>src</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="include\rt_SipStack.h">
+ <Filter>include</Filter>
+ </ClInclude>
+ <ClInclude Include="include\rt_Enums.h">
+ <Filter>include</Filter>
+ </ClInclude>
+ <ClInclude Include="include\rt_ActionConfig.h">
+ <Filter>include</Filter>
+ </ClInclude>
+ <ClInclude Include="include\rt_DDebug.h">
+ <Filter>include</Filter>
+ </ClInclude>
+ <ClInclude Include="include\rt_MediaContent.h">
+ <Filter>include</Filter>
+ </ClInclude>
+ <ClInclude Include="include\rt_Msrp.h">
+ <Filter>include</Filter>
+ </ClInclude>
+ <ClInclude Include="include\rt_SipCallback.h">
+ <Filter>include</Filter>
+ </ClInclude>
+ <ClInclude Include="include\rt_SipEvent.h">
+ <Filter>include</Filter>
+ </ClInclude>
+ <ClInclude Include="include\rt_SipMessage.h">
+ <Filter>include</Filter>
+ </ClInclude>
+ <ClInclude Include="include\rt_SipSession.h">
+ <Filter>include</Filter>
+ </ClInclude>
+ <ClInclude Include="include\rt_SipUri.h">
+ <Filter>include</Filter>
+ </ClInclude>
+ <ClInclude Include="include\rt_SMSEncoder.h">
+ <Filter>include</Filter>
+ </ClInclude>
+ <ClInclude Include="include\rt_Xcap.h">
+ <Filter>include</Filter>
+ </ClInclude>
+ <ClInclude Include="include\rt_String.h">
+ <Filter>include</Filter>
+ </ClInclude>
+ <ClInclude Include="include\rt_MediaSessionMgr.h">
+ <Filter>include</Filter>
+ </ClInclude>
+ <ClInclude Include="include\rt_Config.h">
+ <Filter>include</Filter>
+ </ClInclude>
+ </ItemGroup>
+</Project> \ No newline at end of file
diff --git a/bindings/winrt/doubango_rt/include/rt_ActionConfig.h b/bindings/winrt/doubango_rt/include/rt_ActionConfig.h
new file mode 100644
index 0000000..abafc37
--- /dev/null
+++ b/bindings/winrt/doubango_rt/include/rt_ActionConfig.h
@@ -0,0 +1,53 @@
+/*Copyright (C) 2013 Doubango Telecom <http://www.doubango.org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*/
+#pragma once
+
+#include "rt_Enums.h"
+
+class ActionConfig;
+
+namespace doubango_rt
+{
+ namespace BackEnd
+ {
+ public ref class rtActionConfig sealed
+ {
+ public:
+ rtActionConfig();
+ virtual ~rtActionConfig();
+
+ bool addHeader(Platform::String^ name, Platform::String^ value);
+#if COM_VISIBLE
+ bool addPayload(Platform::String^ payload);
+#else
+ bool addPayload(Platform::IntPtr payload, unsigned len);
+#endif
+ bool setActiveMedia(rt_twrap_media_type_t type);
+
+ rtActionConfig^ setResponseLine(short code, Platform::String^ phrase);
+ rtActionConfig^ setMediaString(rt_twrap_media_type_t type, Platform::String^ key, Platform::String^ value);
+ rtActionConfig^ setMediaInt(rt_twrap_media_type_t type, Platform::String^ key, int value);
+
+ internal:
+ ActionConfig* getWrappedActionConfig(){ return m_pActionConfig; }
+
+ private:
+ ActionConfig* m_pActionConfig;
+ };
+ }
+} \ No newline at end of file
diff --git a/bindings/winrt/doubango_rt/include/rt_Config.h b/bindings/winrt/doubango_rt/include/rt_Config.h
new file mode 100644
index 0000000..e8d7dde
--- /dev/null
+++ b/bindings/winrt/doubango_rt/include/rt_Config.h
@@ -0,0 +1,31 @@
+/*Copyright (C) 2013 Doubango Telecom <http://www.doubango.org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*/
+#pragma once
+
+#define rtSafeDelete(ptr) if((ptr)) delete (ptr), (ptr) = nullptr;
+
+#if COM_VISIBLE
+# define OVERRIDE_FUNC(fun)
+# define VISIBLE_VOID_PTR Platform::String^
+# define VISIBLE_VOID_PTR_2_VOID_PTR(ptr) rtString::toUtf8((ptr)).data()
+#else
+# define OVERRIDE_FUNC(fun) fun
+# define VISIBLE_VOID_PTR Platform::IntPtr
+# define VISIBLE_VOID_PTR_2_VOID_PTR(ptr) (void*)((ptr))
+#endif
+ \ No newline at end of file
diff --git a/bindings/winrt/doubango_rt/include/rt_DDebug.h b/bindings/winrt/doubango_rt/include/rt_DDebug.h
new file mode 100644
index 0000000..e4300b5
--- /dev/null
+++ b/bindings/winrt/doubango_rt/include/rt_DDebug.h
@@ -0,0 +1,53 @@
+/*Copyright (C) 2013 Doubango Telecom <http://www.doubango.org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*/
+#pragma once
+
+#include "rt_Config.h"
+
+class DDebugCallback;
+class DDebugCallbackProxy;
+
+namespace doubango_rt
+{
+ namespace BackEnd
+ {
+ public interface class rtIDDebugCallback
+ {
+ virtual int OnDebugInfo(Platform::String^ message);
+ virtual int OnDebugWarn(Platform::String^ message);
+ virtual int OnDebugError(Platform::String^ message);
+ virtual int OnDebugFatal(Platform::String^ message);
+ };
+
+ public ref class rtDDebugCallback sealed
+ {
+ internal:
+ rtDDebugCallback(rtIDDebugCallback^ pI);
+ public:
+ virtual ~rtDDebugCallback();
+ friend class DDebugCallbackProxy;
+
+ internal:
+ const DDebugCallback* getWrappedCallback();
+
+ private:
+ rtIDDebugCallback^ m_pI;
+ DDebugCallbackProxy* m_pCallback;
+ };
+ }
+} \ No newline at end of file
diff --git a/bindings/winrt/doubango_rt/include/rt_Enums.h b/bindings/winrt/doubango_rt/include/rt_Enums.h
new file mode 100644
index 0000000..78e97bf
--- /dev/null
+++ b/bindings/winrt/doubango_rt/include/rt_Enums.h
@@ -0,0 +1,333 @@
+/*Copyright (C) 2013 Doubango Telecom <http://www.doubango.org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*/
+#pragma once
+
+#include "rt_config.h"
+
+#include "tinysip.h"
+#include "tinymsrp.h"
+#include "tinymedia.h"
+
+#include "Common.h"
+
+namespace doubango_rt
+{
+ namespace BackEnd
+ {
+ public enum class rtConstants
+ {
+ rt_tsip_event_code_dialog_transport_error = tsip_event_code_dialog_transport_error,
+ rt_tsip_event_code_dialog_global_error = tsip_event_code_dialog_global_error,
+ rt_tsip_event_code_dialog_message_error = tsip_event_code_dialog_message_error,
+
+ // 8xx ==> success
+ rt_tsip_event_code_dialog_request_incoming = tsip_event_code_dialog_request_incoming,
+ rt_tsip_event_code_dialog_request_outgoing = tsip_event_code_dialog_request_outgoing,
+ rt_tsip_event_code_dialog_request_cancelled = tsip_event_code_dialog_request_cancelled,
+ rt_tsip_event_code_dialog_request_sent = tsip_event_code_dialog_request_sent,
+
+ // 9xx ==> Informational
+ rt_tsip_event_code_dialog_connecting = tsip_event_code_dialog_connecting,
+ rt_tsip_event_code_dialog_connected = tsip_event_code_dialog_connected,
+ rt_tsip_event_code_dialog_terminating = tsip_event_code_dialog_terminating,
+ rt_tsip_event_code_dialog_terminated = tsip_event_code_dialog_terminated,
+ rt_tsip_event_code_stack_starting = tsip_event_code_stack_starting,
+ rt_tsip_event_code_stack_started = tsip_event_code_stack_started,
+ rt_tsip_event_code_stack_stopping = tsip_event_code_stack_stopping,
+ rt_tsip_event_code_stack_stopped = tsip_event_code_stack_stopped,
+ rt_tsip_event_code_stack_failed_to_start = tsip_event_code_stack_failed_to_start,
+ rt_tsip_event_code_stack_failed_to_stop = tsip_event_code_stack_failed_to_stop
+ };
+
+ public enum class rt_twrap_media_type_t
+ {
+ twrap_media_none = twrap_media_none,
+
+ twrap_media_audio = twrap_media_audio,
+ twrap_media_video = twrap_media_video,
+ twrap_media_msrp = twrap_media_msrp,
+ twrap_media_t140 = twrap_media_t140,
+ twrap_media_bfcp = twrap_media_bfcp,
+ twrap_media_bfcp_audio = twrap_media_bfcp_audio,
+ twrap_media_bfcp_video = twrap_media_bfcp_video,
+
+ twrap_media_audiovideo = twrap_media_audiovideo, /* @deprecated */
+ twrap_media_audio_video = twrap_media_audio_video,
+ };
+
+ public enum class rt_tmedia_bandwidth_level_t
+ {
+ tmedia_bl_low = tmedia_bl_low,
+ tmedia_bl_medium = tmedia_bl_medium,
+ tmedia_bl_hight = tmedia_bl_hight,
+ tmedia_bl_unrestricted = tmedia_bl_unrestricted
+ };
+
+ public enum class rt_tmedia_pref_video_size_t
+ {/* must be sorted like this */
+ tmedia_pref_video_size_sqcif = tmedia_pref_video_size_sqcif, // 128 x 98
+ tmedia_pref_video_size_qcif = tmedia_pref_video_size_qcif, // 176 x 144
+ tmedia_pref_video_size_qvga = tmedia_pref_video_size_qvga, // 320 x 240
+ tmedia_pref_video_size_cif = tmedia_pref_video_size_cif, // 352 x 288
+ tmedia_pref_video_size_hvga = tmedia_pref_video_size_hvga, // 480 x 320
+ tmedia_pref_video_size_vga = tmedia_pref_video_size_vga, // 640 x 480
+ tmedia_pref_video_size_4cif = tmedia_pref_video_size_4cif, // 704 x 576
+ tmedia_pref_video_size_wvga = tmedia_pref_video_size_wvga, // 800 x 480
+ tmedia_pref_video_size_svga = tmedia_pref_video_size_svga, // 800 x 600
+ tmedia_pref_video_size_480p = tmedia_pref_video_size_480p, // 852 x 480
+ tmedia_pref_video_size_xga = tmedia_pref_video_size_xga, // 1024 x 768
+ tmedia_pref_video_size_720p = tmedia_pref_video_size_720p, // 1280 x 720
+ tmedia_pref_video_size_16cif = tmedia_pref_video_size_16cif, // 1408 x 1152
+ tmedia_pref_video_size_1080p = tmedia_pref_video_size_1080p, // 1920 x 1080
+ };
+
+ public enum class rt_tmedia_profile_t
+ {
+ tmedia_profile_default = tmedia_profile_default,
+ tmedia_profile_rtcweb = tmedia_profile_rtcweb
+ };
+
+ public enum class rt_tmedia_qos_strength_t
+ {
+ tmedia_qos_strength_none = tmedia_qos_strength_none,
+ tmedia_qos_strength_failure = tmedia_qos_strength_failure,
+ tmedia_qos_strength_unknown = tmedia_qos_strength_unknown,
+ tmedia_qos_strength_optional = tmedia_qos_strength_optional,
+ tmedia_qos_strength_mandatory = tmedia_qos_strength_mandatory
+ };
+
+ public enum class rt_tmedia_qos_stype_t
+ {
+ tmedia_qos_stype_none = tmedia_qos_stype_none,
+
+ tmedia_qos_stype_segmented = tmedia_qos_stype_segmented,
+ tmedia_qos_stype_e2e = tmedia_qos_stype_e2e,
+ };
+
+ public enum class rt_tmedia_srtp_mode_t
+ {
+ tmedia_srtp_mode_none = tmedia_srtp_mode_none,
+ tmedia_srtp_mode_optional = tmedia_srtp_mode_optional,
+ tmedia_srtp_mode_mandatory = tmedia_srtp_mode_mandatory
+ };
+
+ public enum class rt_tmedia_srtp_type_t
+ {
+ tmedia_srtp_type_none = tmedia_srtp_type_none,
+ tmedia_srtp_type_sdes = tmedia_srtp_type_sdes,
+ tmedia_srtp_type_dtls = tmedia_srtp_type_dtls,
+ tmedia_srtp_type_sdes_dtls = tmedia_srtp_type_sdes_dtls
+ };
+
+ public enum class rt_tmedia_t140_data_type_t
+ {
+ tmedia_t140_data_type_utf8 = tmedia_t140_data_type_utf8,
+ tmedia_t140_data_type_zero_width_no_break_space = tmedia_t140_data_type_zero_width_no_break_space,
+ tmedia_t140_data_type_backspace = tmedia_t140_data_type_backspace,
+ tmedia_t140_data_type_esc = tmedia_t140_data_type_esc,
+ tmedia_t140_data_type_cr = tmedia_t140_data_type_cr,
+ tmedia_t140_data_type_lf = tmedia_t140_data_type_lf,
+ tmedia_t140_data_type_cr_lf = tmedia_t140_data_type_cr_lf,
+ tmedia_t140_data_type_bell = tmedia_t140_data_type_bell,
+ tmedia_t140_data_type_sos = tmedia_t140_data_type_sos,
+ tmedia_t140_data_type_string_term = tmedia_t140_data_type_string_term,
+ tmedia_t140_data_type_graphic_start = tmedia_t140_data_type_graphic_start,
+ tmedia_t140_data_type_graphic_end = tmedia_t140_data_type_graphic_end,
+ tmedia_t140_data_type_loss_char_char = tmedia_t140_data_type_loss_char_char,
+ tmedia_t140_data_type_loss_utf8 = tmedia_t140_data_type_loss_utf8,
+ };
+
+ public enum class rt_tmedia_type_t
+ {
+ tmedia_none = tmedia_none,
+ tmedia_ghost = tmedia_ghost,
+
+ tmedia_audio = tmedia_audio,
+ tmedia_video = tmedia_video,
+ tmedia_chat = tmedia_chat,
+ tmedia_file = tmedia_file,
+ tmedia_t38 = tmedia_t38,
+ tmedia_t140 = tmedia_t140,
+
+ tmedia_msrp = tmedia_msrp,
+ tmedia_audiovideo = tmedia_audiovideo,
+
+ tmedia_all = tmedia_all
+ };
+
+ public enum class rt_tmsrp_event_type_t
+ {
+ tmsrp_event_type_none = tmsrp_event_type_none,
+ tmsrp_event_type_connected = tmsrp_event_type_connected,
+ tmsrp_event_type_disconnected = tmsrp_event_type_disconnected,
+ tmsrp_event_type_message = tmsrp_event_type_message,
+ };
+
+ public enum class rt_tmsrp_request_type_t
+ {
+ tmsrp_NONE = tmsrp_NONE,
+
+ tmsrp_SEND = tmsrp_SEND,
+ tmsrp_REPORT = tmsrp_REPORT,
+ tmsrp_AUTH = tmsrp_AUTH
+ };
+
+ public enum class rt_tsip_info_event_type_t
+ {
+ tsip_i_info = tsip_i_info,
+ tsip_ao_info = tsip_ao_info,
+ };
+
+ public enum class rt_tsip_invite_event_type_t
+ {
+ tsip_i_newcall = tsip_i_newcall,
+
+ tsip_i_request = tsip_i_request,
+ tsip_ao_request = tsip_ao_request,
+
+ tsip_o_ect_trying = tsip_o_ect_trying,
+ tsip_o_ect_accepted = tsip_o_ect_accepted,
+ tsip_o_ect_completed = tsip_o_ect_completed,
+ tsip_o_ect_failed = tsip_o_ect_failed,
+ tsip_o_ect_notify = tsip_o_ect_notify,
+ tsip_i_ect_requested = tsip_i_ect_requested,
+ tsip_i_ect_newcall = tsip_i_ect_newcall,
+ tsip_i_ect_completed = tsip_i_ect_completed,
+ tsip_i_ect_failed = tsip_i_ect_failed,
+ tsip_i_ect_notify = tsip_i_ect_notify,
+
+ tsip_m_early_media = tsip_m_early_media,
+ tsip_m_updating = tsip_m_updating,
+ tsip_m_updated = tsip_m_updated,
+
+ tsip_m_local_hold_ok = tsip_m_local_hold_ok,
+ tsip_m_local_hold_nok = tsip_m_local_hold_nok,
+ tsip_m_local_resume_ok = tsip_m_local_resume_ok,
+ tsip_m_local_resume_nok = tsip_m_local_resume_nok,
+ tsip_m_remote_hold = tsip_m_remote_hold,
+ tsip_m_remote_resume = tsip_m_remote_resume,
+ };
+
+ public enum class rt_tsip_message_event_type_t
+ {
+ tsip_i_message = tsip_i_message,
+ tsip_ao_message = tsip_ao_message,
+ };
+
+ public enum class rt_tsip_options_event_type_t
+ {
+ tsip_i_options = tsip_i_options,
+ tsip_ao_options = tsip_ao_options,
+ };
+
+ public enum class rt_tsip_publish_event_type_t
+ {
+ tsip_i_publish = tsip_i_publish,
+ tsip_ao_publish = tsip_ao_publish,
+
+ tsip_i_unpublish = tsip_i_unpublish,
+ tsip_ao_unpublish = tsip_ao_unpublish
+ };
+
+ public enum class rt_tsip_register_event_type_t
+ {
+ tsip_i_newreg = tsip_i_newreg,
+
+ tsip_i_register = tsip_i_register,
+ tsip_ao_register = tsip_ao_register,
+
+ tsip_i_unregister = tsip_i_unregister,
+ tsip_ao_unregister = tsip_ao_unregister,
+ };
+
+ public enum class rt_tsip_request_type_t
+ {
+ tsip_NONE = tsip_NONE,
+
+ tsip_ACK = tsip_ACK,
+ tsip_BYE = tsip_BYE,
+ tsip_CANCEL = tsip_CANCEL,
+ tsip_INVITE = tsip_INVITE,
+ tsip_OPTIONS = tsip_OPTIONS,
+ tsip_REGISTER = tsip_REGISTER,
+ tsip_SUBSCRIBE = tsip_SUBSCRIBE,
+ tsip_NOTIFY = tsip_NOTIFY,
+ tsip_REFER = tsip_REFER,
+ tsip_INFO = tsip_INFO,
+ tsip_UPDATE = tsip_UPDATE,
+ tsip_MESSAGE = tsip_MESSAGE,
+ tsip_PUBLISH = tsip_PUBLISH,
+ tsip_PRACK = tsip_PRACK
+ };
+
+ public enum class rt_tsip_subscribe_event_type_t
+ {
+ tsip_i_subscribe = tsip_i_subscribe,
+ tsip_ao_subscribe = tsip_ao_subscribe,
+
+ tsip_i_unsubscribe = tsip_i_unsubscribe,
+ tsip_ao_unsubscribe = tsip_ao_unsubscribe,
+
+ tsip_i_notify = tsip_i_notify,
+ tsip_ao_notify = tsip_ao_notify
+ };
+
+ public enum class rt_tdav_codec_id_t
+ {
+ tdav_codec_id_none = tmedia_codec_id_none,
+
+ tdav_codec_id_amr_nb_oa = tmedia_codec_id_amr_nb_oa,
+ tdav_codec_id_amr_nb_be = tmedia_codec_id_amr_nb_be,
+ tdav_codec_id_amr_wb_oa = tmedia_codec_id_amr_wb_oa,
+ tdav_codec_id_amr_wb_be = tmedia_codec_id_amr_wb_be,
+ tdav_codec_id_gsm = tmedia_codec_id_gsm,
+ tdav_codec_id_pcma = tmedia_codec_id_pcma,
+ tdav_codec_id_pcmu = tmedia_codec_id_pcmu,
+ tdav_codec_id_ilbc = tmedia_codec_id_ilbc,
+ tdav_codec_id_speex_nb = tmedia_codec_id_speex_nb,
+ tdav_codec_id_speex_wb = tmedia_codec_id_speex_wb,
+ tdav_codec_id_speex_uwb = tmedia_codec_id_speex_uwb,
+ tdav_codec_id_bv16 = tmedia_codec_id_bv16,
+ tdav_codec_id_bv32 = tmedia_codec_id_bv32,
+ tdav_codec_id_opus = tmedia_codec_id_opus,
+ tdav_codec_id_g729ab = tmedia_codec_id_g729ab,
+ tdav_codec_id_g722 = tmedia_codec_id_g722,
+
+ tdav_codec_id_h261 = tmedia_codec_id_h261,
+ tdav_codec_id_h263 = tmedia_codec_id_h263,
+ tdav_codec_id_h263p = tmedia_codec_id_h263p,
+ tdav_codec_id_h263pp = tmedia_codec_id_h263pp,
+ tdav_codec_id_h264_bp = tmedia_codec_id_h264_bp,
+ tdav_codec_id_h264_mp = tmedia_codec_id_h264_mp,
+ tdav_codec_id_h264_hp = tmedia_codec_id_h264_hp,
+ tdav_codec_id_h264_bp10 = tmedia_codec_id_h264_bp, // @deprecated
+ tdav_codec_id_h264_bp20 = tmedia_codec_id_h264_bp, // @deprecated
+ tdav_codec_id_h264_bp30 = tmedia_codec_id_h264_bp, // @deprecated
+ tdav_codec_id_h264_svc = tmedia_codec_id_h264_svc,
+ tdav_codec_id_theora = tmedia_codec_id_theora,
+ tdav_codec_id_mp4ves_es = tmedia_codec_id_mp4ves_es,
+ tdav_codec_id_vp8 = tmedia_codec_id_vp8,
+
+ tdav_codec_id_t140 = tmedia_codec_id_t140,
+#if !COM_VISIBLE
+ tdav_codec_id_red = tmedia_codec_id_red,
+#endif
+ tdav_codec_id_all = tmedia_codec_id_all,
+ };
+ }
+}
diff --git a/bindings/winrt/doubango_rt/include/rt_MediaContent.h b/bindings/winrt/doubango_rt/include/rt_MediaContent.h
new file mode 100644
index 0000000..9385aed
--- /dev/null
+++ b/bindings/winrt/doubango_rt/include/rt_MediaContent.h
@@ -0,0 +1,18 @@
+/*Copyright (C) 2013 Doubango Telecom <http://www.doubango.org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*/
+#pragma once \ No newline at end of file
diff --git a/bindings/winrt/doubango_rt/include/rt_MediaSessionMgr.h b/bindings/winrt/doubango_rt/include/rt_MediaSessionMgr.h
new file mode 100644
index 0000000..3878667
--- /dev/null
+++ b/bindings/winrt/doubango_rt/include/rt_MediaSessionMgr.h
@@ -0,0 +1,130 @@
+/*Copyright (C) 2013 Doubango Telecom <http://www.doubango.org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*/
+#pragma once
+
+class MediaSessionMgr;
+class Codec;
+
+struct tmedia_codec_s;
+struct tmedia_session_mgr_s;
+
+namespace doubango_rt
+{
+ namespace BackEnd
+ {
+ enum class rt_twrap_media_type_t;
+ enum class rt_tmedia_profile_t;
+ enum class rt_tmedia_srtp_mode_t;
+ enum class rt_tmedia_srtp_type_t;
+ enum class rt_tmedia_profile_t;
+ enum class rt_tmedia_pref_video_size_t;
+
+ public ref class rtCodec sealed
+ {
+ internal:
+ rtCodec(struct tmedia_codec_s* pCodec);
+ public:
+ virtual ~rtCodec();
+ enum class rt_twrap_media_type_t getMediaType();
+ Platform::String^ getName();
+ Platform::String^ getDescription();
+ Platform::String^ getNegFormat();
+ int getAudioSamplingRate();
+ int getAudioChannels();
+ int getAudioPTime();
+
+ private:
+ Codec* m_pCodec;
+ };
+
+ public ref class rtMediaSessionMgr sealed
+ {
+ internal:
+ rtMediaSessionMgr(struct tmedia_session_mgr_s* pWrappedMgr);
+
+ public:
+ virtual ~rtMediaSessionMgr();
+ bool sessionSetInt32(rt_twrap_media_type_t media, Platform::String^ key, int32 value);
+ int32 sessionGetInt32(rt_twrap_media_type_t media, Platform::String^ key);
+
+ bool consumerSetInt32(rt_twrap_media_type_t media, Platform::String^ key, int32 value);
+ bool consumerSetInt64(rt_twrap_media_type_t media, Platform::String^ key, int64 value);
+
+ bool producerSetInt32(rt_twrap_media_type_t media, Platform::String^ key, int32 value);
+ bool producerSetInt64(rt_twrap_media_type_t media, Platform::String^ key, int64 value);
+ rtCodec^ producerGetCodec(rt_twrap_media_type_t media);
+
+ static unsigned int registerAudioPluginFromFile(Platform::String^ path);
+
+ uint64 getSessionId(rt_twrap_media_type_t media);
+
+ internal: // Must be from SIP service to share same global memory space
+ static bool defaultsSetProfile(rt_tmedia_profile_t profile);
+ static rt_tmedia_profile_t defaultsGetProfile();
+ static bool defaultsSetPrefVideoSize(enum class rt_tmedia_pref_video_size_t pref_video_size);
+ static bool defaultsSetJbMargin(uint32 jb_margin_ms);
+ static bool defaultsSetJbMaxLateRate(uint32 jb_late_rate_percent);
+ static bool defaultsSetEchoTail(uint32 echo_tail);
+ static uint32 defaultsGetEchoTail();
+ static bool defaultsSetEchoSkew(uint32 echo_skew);
+ static bool defaultsSetEchoSuppEnabled(bool echo_supp_enabled);
+ static bool defaultsGetEchoSuppEnabled();
+ static bool defaultsSetAgcEnabled(bool agc_enabled);
+ static bool defaultsGetAgcEnabled();
+ static bool defaultsSetAgcLevel(float agc_level);
+ static float defaultsGetAgcLevel();
+ static bool defaultsSetVadEnabled(bool vad_enabled);
+ static bool defaultsGetGetVadEnabled();
+ static bool defaultsSetNoiseSuppEnabled(bool noise_supp_enabled);
+ static bool defaultsGetNoiseSuppEnabled();
+ static bool defaultsSetNoiseSuppLevel(int32 noise_supp_level);
+ static int32 defaultsGetNoiseSuppLevel();
+ static bool defaultsSet100relEnabled(bool _100rel_enabled);
+ static bool defaultsGet100relEnabled();
+ static bool defaultsSetScreenSize(int32 sx, int32 sy);
+ static bool defaultsSetAudioGain(int32 producer_gain, int32 consumer_gain);
+ static bool defaultsSetRtpPortRange(uint16 range_start, uint16 range_stop);
+ static bool defaultsSetRtpSymetricEnabled(bool enabled);
+ static bool defaultsSetMediaType(enum class rt_twrap_media_type_t media_type);
+ static bool defaultsSetVolume(int32 volume);
+ static int32 defaultsGetVolume();
+ static bool defaultsSetInviteSessionTimers(int32 timeout, Platform::String^ refresher);
+ static bool defaultsSetSRtpMode(enum class rt_tmedia_srtp_mode_t mode);
+ static enum class rt_tmedia_srtp_mode_t defaultsGetSRtpMode();
+ static bool defaultsSetSRtpType(enum class rt_tmedia_srtp_type_t srtp_type);
+ static enum class rt_tmedia_srtp_type_t defaultsGetSRtpType();
+ static bool defaultsSetRtcpEnabled(bool enabled);
+ static bool defaultsGetRtcpEnabled();
+ static bool defaultsSetRtcpMuxEnabled(bool enabled);
+ static bool defaultsGetRtcpMuxEnabled();
+ static bool defaultsSetIceEnabled(bool ice_enabled);
+ static bool defaultsSetByPassEncoding(bool enabled);
+ static bool defaultsGetByPassEncoding();
+ static bool defaultsSetByPassDecoding(bool enabled);
+ static bool defaultsGetByPassDecoding();
+ static bool defaultsSetVideoJbEnabled(bool enabled);
+ static bool defaultsGetVideoJbEnabled();
+ static bool defaultsSetRtpBuffSize(unsigned buffSize);
+ static unsigned defaultsGetRtpBuffSize();
+ static bool defaultsSetAvpfTail(unsigned tail_min, unsigned tail_max);
+
+ private:
+ MediaSessionMgr* m_pMediaSessionMgr;
+ };
+ }
+} \ No newline at end of file
diff --git a/bindings/winrt/doubango_rt/include/rt_Msrp.h b/bindings/winrt/doubango_rt/include/rt_Msrp.h
new file mode 100644
index 0000000..b0fbe26
--- /dev/null
+++ b/bindings/winrt/doubango_rt/include/rt_Msrp.h
@@ -0,0 +1,109 @@
+/*Copyright (C) 2013 Doubango Telecom <http://www.doubango.org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*/
+#pragma once
+
+#include "rt_Enums.h"
+
+class MsrpCallback;
+class MsrpMessage;
+class MsrpEvent;
+
+namespace doubango_rt
+{
+ namespace BackEnd
+ {
+ ref class rtMsrpSession;
+
+ public ref class rtMsrpByteRange sealed
+ {
+ internal:
+ rtMsrpByteRange(int64 start, int64 end, int64 total):_start(start),_end(end),_total(total){}
+ public:
+ property int64 Start{ int64 get() { return _start; }; }
+ property int64 End{ int64 get() { return _end; }; }
+ property int64 Total{ int64 get() { return _total; }; }
+ private:
+ int64 _start, _end, _total;
+ };
+
+ public ref class rtMsrpMessage sealed
+ {
+ public:
+ virtual ~rtMsrpMessage();
+ internal:
+ rtMsrpMessage(struct tmsrp_message_s *message);
+
+ public:
+ bool isRequest();
+ short getCode();
+ Platform::String^ getPhrase();
+ rt_tmsrp_request_type_t getRequestType();
+#if COM_VISIBLE
+ rtMsrpByteRange^ getByteRange();
+#else
+ void getByteRange(Platform::IntPtr start, Platform::IntPtr end, Platform::IntPtr total);
+#endif
+ bool isLastChunck();
+ bool isFirstChunck();
+ bool isSuccessReport();
+ Platform::String^ getMsrpHeaderValue(Platform::String^ name);
+ Platform::String^ getMsrpHeaderParamValue(Platform::String^ name, Platform::String^ param);
+ unsigned getMsrpContentLength();
+#if COM_VISIBLE
+ Platform::String^ getMsrpContent(unsigned maxsize);
+#else
+ unsigned getMsrpContent(Platform::IntPtr output, unsigned maxsize);
+#endif
+
+ private:
+ MsrpMessage* m_pMsrpMessage;
+ };
+
+ public ref class rtMsrpEvent sealed
+ {
+ internal:
+ rtMsrpEvent(const struct tmsrp_event_s *event);
+ public:
+ virtual ~rtMsrpEvent();
+
+ rt_tmsrp_event_type_t getType();
+ rtMsrpSession^ getSipSession();
+ rtMsrpMessage^ getMessage();
+
+ private:
+ MsrpEvent* m_pMsrpEvent;
+ };
+
+ public interface class rtIMsrpCallback
+ {
+ virtual int OnEvent(rtMsrpEvent^ pEvent);
+ };
+ public ref class rtMsrpCallback sealed
+ {
+ internal:
+ rtMsrpCallback(rtIMsrpCallback^ pI);
+ const MsrpCallback* getWrappedCallback(){ return m_pCallback; }
+ public:
+ virtual ~rtMsrpCallback();
+
+ private:
+ MsrpCallback* m_pCallback;
+ rtIMsrpCallback^ m_pI;
+ };
+ }
+} \ No newline at end of file
diff --git a/bindings/winrt/doubango_rt/include/rt_SMSEncoder.h b/bindings/winrt/doubango_rt/include/rt_SMSEncoder.h
new file mode 100644
index 0000000..9385aed
--- /dev/null
+++ b/bindings/winrt/doubango_rt/include/rt_SMSEncoder.h
@@ -0,0 +1,18 @@
+/*Copyright (C) 2013 Doubango Telecom <http://www.doubango.org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*/
+#pragma once \ No newline at end of file
diff --git a/bindings/winrt/doubango_rt/include/rt_SipCallback.h b/bindings/winrt/doubango_rt/include/rt_SipCallback.h
new file mode 100644
index 0000000..1f0a9e0
--- /dev/null
+++ b/bindings/winrt/doubango_rt/include/rt_SipCallback.h
@@ -0,0 +1,70 @@
+/*Copyright (C) 2013 Doubango Telecom <http://www.doubango.org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*/
+#pragma once
+
+class SipCallback;
+class SipCallbackProxy;
+
+namespace doubango_rt
+{
+ namespace BackEnd
+ {
+ ref class rtDialogEvent;
+ ref class rtStackEvent;
+
+ ref class rtInviteEvent;
+ ref class rtMessagingEvent;
+ ref class rtInfoEvent;
+ ref class rtOptionsEvent;
+ ref class rtPublicationEvent;
+ ref class rtRegistrationEvent;
+ ref class rtSubscriptionEvent;
+
+ public interface class rtISipCallback
+ {
+ virtual int OnDialogEvent(rtDialogEvent^ e);
+ virtual int OnStackEvent(rtStackEvent^ e);
+
+ virtual int OnInviteEvent(rtInviteEvent^ e);
+ virtual int OnMessagingEvent(rtMessagingEvent^ e);
+ virtual int OnInfoEvent(rtInfoEvent^ e);
+ virtual int OnOptionsEvent(rtOptionsEvent^ e);
+ virtual int OnPublicationEvent(rtPublicationEvent^ e);
+ virtual int OnRegistrationEvent(rtRegistrationEvent^ e);
+ virtual int OnSubscriptionEvent(rtSubscriptionEvent^ e);
+ };
+
+ public ref class rtSipCallback sealed
+ {
+ internal:
+ rtSipCallback(rtISipCallback^ pI);
+ public:
+ virtual ~rtSipCallback();
+ friend class SipCallbackProxy;
+
+ internal:
+ const SipCallback* getWrappedCallback();
+
+ private:
+ rtISipCallback^ m_pI;
+ SipCallbackProxy* m_pCallback;
+ };
+ }
+}
+
+
diff --git a/bindings/winrt/doubango_rt/include/rt_SipEvent.h b/bindings/winrt/doubango_rt/include/rt_SipEvent.h
new file mode 100644
index 0000000..e615bde
--- /dev/null
+++ b/bindings/winrt/doubango_rt/include/rt_SipEvent.h
@@ -0,0 +1,244 @@
+/*Copyright (C) 2013 Doubango Telecom <http://www.doubango.org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*/
+#pragma once
+
+#include "rt_Config.h"
+#include "rt_Enums.h"
+
+struct tsip_event_s;
+
+class SipEvent;
+class DialogEvent;
+class StackEvent;
+class InviteEvent;
+class MessagingEvent;
+class InfoEvent;
+class OptionsEvent;
+class PublicationEvent;
+class RegistrationEvent;
+class SubscriptionEvent;
+
+
+#define rtISipEvent_Declare() \
+ virtual short getCode(); \
+ virtual Platform::String^ getPhrase(); \
+ virtual rtISipSession^ getBaseSession(); \
+ virtual rtSipMessage^ getSipMessage(); \
+
+#define rtISipEvent_Implement(cls) \
+short cls##::getCode(){ \
+ return m_pEvent->getCode(); \
+} \
+Platform::String^ cls##::getPhrase(){ \
+ return rtString::toString(m_pEvent->getPhrase()); \
+} \
+rtISipSession^ cls##::getBaseSession(){ \
+ return ref new rtSipSession(const_cast<SipStack*>(m_pEvent->getStack()), const_cast<tsip_ssession_handle_t*>(m_pEvent->getWrappedEvent()->ss)); \
+} \
+rtSipMessage^ cls##::getSipMessage(){ \
+ return ref new rtSipMessage(const_cast<struct tsip_message_s*>(const_cast<SipMessage*>(m_pEvent->getSipMessage())->getWrappedSipMessage())); \
+} \
+
+
+namespace doubango_rt
+{
+ namespace BackEnd
+ {
+ interface class rtISipSession;
+ ref class rtSipMessage;
+ ref class rtInviteSession;
+ ref class rtMsrpSession;
+ ref class rtCallSession;
+ ref class rtMessagingSession;
+ ref class rtInfoSession;
+ ref class rtOptionsSession;
+ ref class rtPublicationSession;
+ ref class rtRegistrationSession;
+ ref class rtSubscriptionSession;
+
+
+ /* ======================== rtISipEvent ========================*/
+ public interface class rtISipEvent
+ {
+ short getCode();
+ Platform::String^ getPhrase();
+ rtISipSession^ getBaseSession();
+ rtSipMessage^ getSipMessage();
+ };
+
+
+ /* ======================== rtDialogEvent ========================*/
+ public ref class rtDialogEvent sealed : rtISipEvent
+ {
+ internal:
+ rtDialogEvent(const struct tsip_event_s *e);
+
+ public:
+ virtual ~rtDialogEvent();
+ rtISipEvent_Declare();
+
+ private:
+ DialogEvent* m_pEvent;
+ };
+
+ /* ======================== rtStackEvent ========================*/
+ public ref class rtStackEvent sealed : rtISipEvent
+ {
+ internal:
+ rtStackEvent(const struct tsip_event_s *e);
+
+ public:
+ virtual ~rtStackEvent();
+ rtISipEvent_Declare();
+
+ private:
+ StackEvent* m_pEvent;
+ };
+
+
+ /* ======================== rtInviteEvent ========================*/
+ public ref class rtInviteEvent sealed : rtISipEvent
+ {
+ internal:
+ rtInviteEvent(const struct tsip_event_s *e);
+
+ public:
+ virtual ~rtInviteEvent();
+ rtISipEvent_Declare();
+
+ rt_tsip_invite_event_type_t getType();
+ rt_twrap_media_type_t getMediaType();
+ rtInviteSession^ getSession();
+ rtCallSession^ takeCallSessionOwnership();
+ rtMsrpSession^ takeMsrpSessionOwnership();
+
+ private:
+ InviteEvent* m_pEvent;
+ };
+
+ /* ======================== rtMessagingEvent ========================*/
+ public ref class rtMessagingEvent sealed : rtISipEvent
+ {
+ internal:
+ rtMessagingEvent(const struct tsip_event_s *e);
+
+ public:
+ virtual ~rtMessagingEvent();
+ rtISipEvent_Declare();
+
+ rt_tsip_message_event_type_t getType();
+ rtMessagingSession^ getSession();
+ rtMessagingSession^ takeSessionOwnership();
+
+ private:
+ MessagingEvent* m_pEvent;
+ };
+
+
+ /* ======================== rtInfoEvent ========================*/
+ public ref class rtInfoEvent sealed : rtISipEvent
+ {
+ internal:
+ rtInfoEvent(const struct tsip_event_s *e);
+
+ public:
+ virtual ~rtInfoEvent();
+ rtISipEvent_Declare();
+
+ rt_tsip_info_event_type_t getType();
+ rtInfoSession^ getSession();
+ rtInfoSession^ takeSessionOwnership();
+
+ private:
+ InfoEvent* m_pEvent;
+ };
+
+
+ /* ======================== rtOptionsEvent ========================*/
+ public ref class rtOptionsEvent sealed : rtISipEvent
+ {
+ internal:
+ rtOptionsEvent(const struct tsip_event_s *e);
+
+ public:
+ virtual ~rtOptionsEvent();
+ rtISipEvent_Declare();
+
+ rt_tsip_options_event_type_t getType();
+ rtOptionsSession^ getSession();
+ rtOptionsSession^ takeSessionOwnership();
+
+ private:
+ OptionsEvent* m_pEvent;
+ };
+
+ /* ======================== rtPublicationEvent ========================*/
+ public ref class rtPublicationEvent sealed : rtISipEvent
+ {
+ internal:
+ rtPublicationEvent(const struct tsip_event_s *e);
+
+ public:
+ virtual ~rtPublicationEvent();
+ rtISipEvent_Declare();
+
+ rt_tsip_publish_event_type_t getType();
+ rtPublicationSession^ getSession();
+ rtPublicationSession^ takeSessionOwnership();
+
+ private:
+ PublicationEvent* m_pEvent;
+ };
+
+ /* ======================== rtRegistrationEvent ========================*/
+ public ref class rtRegistrationEvent sealed : rtISipEvent
+ {
+ internal:
+ rtRegistrationEvent(const struct tsip_event_s *e);
+
+ public:
+ virtual ~rtRegistrationEvent();
+ rtISipEvent_Declare();
+
+ rt_tsip_register_event_type_t getType();
+ rtRegistrationSession^ getSession();
+ rtRegistrationSession^ takeSessionOwnership();
+
+ private:
+ RegistrationEvent* m_pEvent;
+ };
+
+ /* ======================== rtSubscriptionEvent ========================*/
+ public ref class rtSubscriptionEvent sealed : rtISipEvent
+ {
+ internal:
+ rtSubscriptionEvent(const struct tsip_event_s *e);
+
+ public:
+ virtual ~rtSubscriptionEvent();
+ rtISipEvent_Declare();
+
+ rt_tsip_subscribe_event_type_t getType();
+ rtSubscriptionSession^ getSession();
+ rtSubscriptionSession^ takeSessionOwnership();
+
+ private:
+ SubscriptionEvent* m_pEvent;
+ };
+ }
+} \ No newline at end of file
diff --git a/bindings/winrt/doubango_rt/include/rt_SipMessage.h b/bindings/winrt/doubango_rt/include/rt_SipMessage.h
new file mode 100644
index 0000000..a61c1c3
--- /dev/null
+++ b/bindings/winrt/doubango_rt/include/rt_SipMessage.h
@@ -0,0 +1,78 @@
+/*Copyright (C) 2013 Doubango Telecom <http://www.doubango.org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*/
+#pragma once
+
+#include "rt_Enums.h"
+
+class SdpMessage;
+class SipMessage;
+
+struct tsdp_message_s;
+struct tsip_message_s;
+
+namespace doubango_rt
+{
+ namespace BackEnd
+ {
+ public ref class rtSdpMessage sealed
+ {
+ internal:
+ rtSdpMessage();
+ rtSdpMessage(struct tsdp_message_s *message);
+ public:
+ virtual ~rtSdpMessage();
+
+ public:
+ Platform::String^ getSdpHeaderValue(Platform::String^ media, Platform::String^ name, unsigned index);
+ Platform::String^ getSdpHeaderValue(Platform::String^ media, Platform::String^ name);
+ Platform::String^ getSdpHeaderAValue(Platform::String^ media, Platform::String^ attributeName);
+
+ private:
+ SdpMessage* m_pSdpMessage;
+ };
+
+ public ref class rtSipMessage sealed
+ {
+ internal:
+ rtSipMessage();
+ rtSipMessage(struct tsip_message_s* message);
+ public:
+ virtual ~rtSipMessage();
+
+ public:
+ bool isResponse();
+ rt_tsip_request_type_t getRequestType();
+ short getResponseCode();
+ Platform::String^ getResponsePhrase();
+ Platform::String^ getSipHeaderValue(Platform::String^ name, unsigned index);
+ Platform::String^ getSipHeaderValue(Platform::String^ name);
+ Platform::String^ getSipHeaderParamValue(Platform::String^ name, Platform::String^ param, unsigned index);
+ Platform::String^ getSipHeaderParamValue(Platform::String^ name, Platform::String^ param);
+ unsigned getSipContentLength();
+#if COM_VISIBLE
+ Platform::String^ getSipContent();
+#else
+ unsigned getSipContent(Platform::IntPtr output, unsigned maxsize);
+#endif
+ rtSdpMessage^ getSdpMessage();
+
+ private:
+ SipMessage* m_pSipMessage;
+ };
+ }
+}
diff --git a/bindings/winrt/doubango_rt/include/rt_SipSession.h b/bindings/winrt/doubango_rt/include/rt_SipSession.h
new file mode 100644
index 0000000..bf52ba5
--- /dev/null
+++ b/bindings/winrt/doubango_rt/include/rt_SipSession.h
@@ -0,0 +1,510 @@
+/*Copyright (C) 2013 Doubango Telecom <http://www.doubango.org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*/
+#pragma once
+
+#include "rt_Config.h"
+#include "rt_SipStack.h"
+#include "rt_SipUri.h"
+#include "rt_String.h"
+#include "rt_ActionConfig.h"
+#include "rt_MediaSessionMgr.h"
+
+#include "tinysip.h"
+
+class SipSession;
+class InviteSession;
+class CallSession;
+class MsrpSession;
+class MessagingSession;
+class InfoSession;
+class OptionsSession;
+class PublicationSession;
+class RegistrationSession;
+class SubscriptionSession;
+class SipStack;
+
+class T140CallbackData;
+class T140Callback;
+
+// error C4585: 'doubango_rt::rtSipSession' : A WinRT 'public ref class' must either be sealed or derive from an existing unsealed class
+#define rtISession_Declare() \
+ virtual unsigned getId(); \
+ virtual bool haveOwnership(); \
+ virtual bool addHeader(Platform::String^ name, Platform::String^ value); \
+ virtual bool removeHeader(Platform::String^ name); \
+ [Windows::Foundation::Metadata::DefaultOverload] \
+ virtual bool addCaps(Platform::String^ name, Platform::String^ value); \
+ OVERRIDE_FUNC(virtual bool addCaps(Platform::String^ name);) \
+ virtual bool removeCaps(Platform::String^ name); \
+ virtual bool setExpires(unsigned expires); \
+ OVERRIDE_FUNC(virtual bool setFromUri(Platform::String^ fromUriString);) \
+ [Windows::Foundation::Metadata::DefaultOverload] \
+ virtual bool setFromUri(rtSipUri^ fromUri); \
+ OVERRIDE_FUNC(virtual bool setToUri(Platform::String^ toUriString);) \
+ [Windows::Foundation::Metadata::DefaultOverload] \
+ virtual bool setToUri(rtSipUri^ toUri); \
+ virtual bool setSilentHangup(bool silent); \
+ virtual bool addSigCompCompartment(Platform::String^ compId); \
+ virtual bool removeSigCompCompartment(); \
+
+#define rtISession_Implement(cls) \
+ unsigned cls##::getId(){ \
+ return m_pSipSession->getId(); \
+} \
+ bool cls##::haveOwnership(){ \
+ return m_pSipSession->haveOwnership(); \
+} \
+ bool cls##::addHeader(Platform::String^ name, Platform::String^ value){ \
+ return m_pSipSession->addHeader(rtString::toUtf8(name).data(), rtString::toUtf8(value).data()); \
+} \
+ bool cls##::removeHeader(Platform::String^ name){ \
+ return m_pSipSession->removeHeader(rtString::toUtf8(name).data()); \
+} \
+ bool cls##::addCaps(Platform::String^ name, Platform::String^ value){ \
+ return m_pSipSession->addCaps(rtString::toUtf8(name).data(), rtString::toUtf8(value).data()); \
+} \
+OVERRIDE_FUNC(bool cls##::addCaps(Platform::String^ name){ \
+ return addCaps(name, nullptr); \
+}) \
+ bool cls##::removeCaps(Platform::String^ name){ \
+ return m_pSipSession->removeCaps(rtString::toUtf8(name).data()); \
+} \
+ bool cls##::setExpires(unsigned expires){ \
+ return m_pSipSession->setExpires(expires); \
+} \
+OVERRIDE_FUNC(bool cls##::setFromUri(Platform::String^ fromUriString){ \
+ return m_pSipSession->setFromUri(rtString::toUtf8(fromUriString).data()); \
+}) \
+ bool cls##::setFromUri(rtSipUri^ fromUri){ \
+ return m_pSipSession->setFromUri(fromUri->getWrappedUri()); \
+} \
+OVERRIDE_FUNC(bool cls##::setToUri(Platform::String^ toUriString){ \
+ return m_pSipSession->setToUri(rtString::toUtf8(toUriString).data()); \
+}) \
+ bool cls##::setToUri(rtSipUri^ toUri){ \
+ return m_pSipSession->setToUri(toUri->getWrappedUri()); \
+} \
+ bool cls##::setSilentHangup(bool silent){ \
+ return m_pSipSession->setSilentHangup(silent); \
+} \
+ bool cls##::addSigCompCompartment(Platform::String^ compId){ \
+ return m_pSipSession->addSigCompCompartment(rtString::toUtf8(compId).data()); \
+} \
+ bool cls##::removeSigCompCompartment(){ \
+ return m_pSipSession->removeSigCompCompartment(); \
+}\
+
+
+#define rtIInviteSession_Declare() \
+ [Windows::Foundation::Metadata::DefaultOverload] \
+ virtual bool accept(rtActionConfig^ config); \
+ OVERRIDE_FUNC(virtual bool accept();) \
+ [Windows::Foundation::Metadata::DefaultOverload] \
+ virtual bool hangup(rtActionConfig^ config); \
+ OVERRIDE_FUNC(virtual bool hangup();) \
+ [Windows::Foundation::Metadata::DefaultOverload] \
+ virtual bool reject(rtActionConfig^ config); \
+ OVERRIDE_FUNC(virtual bool reject();) \
+ [Windows::Foundation::Metadata::DefaultOverload] \
+ virtual bool sendInfo(VISIBLE_VOID_PTR payload, unsigned len, rtActionConfig^ config); \
+ OVERRIDE_FUNC(virtual bool sendInfo(VISIBLE_VOID_PTR payload, unsigned len);) \
+ virtual rtMediaSessionMgr^ getMediaMgr(); \
+
+#define rtIInviteSession_Implement(cls) \
+bool cls##::accept(rtActionConfig^ config){ \
+ return m_pSipSession->accept(config ? config->getWrappedActionConfig() : tsk_null); \
+} \
+OVERRIDE_FUNC(bool cls##::accept(){ \
+ return accept(nullptr); \
+}) \
+bool cls##::hangup(rtActionConfig^ config){ \
+ return m_pSipSession->hangup(config ? config->getWrappedActionConfig() : tsk_null); \
+} \
+OVERRIDE_FUNC(bool cls##::hangup(){ \
+ return hangup(nullptr); \
+}) \
+bool cls##::reject(rtActionConfig^ config){ \
+ return m_pSipSession->reject(config ? config->getWrappedActionConfig() : tsk_null); \
+} \
+OVERRIDE_FUNC(bool cls##::reject(){ \
+ return reject(nullptr); \
+}) \
+bool cls##::sendInfo(VISIBLE_VOID_PTR payload, unsigned len, rtActionConfig^ config){ \
+ return m_pSipSession->sendInfo(VISIBLE_VOID_PTR_2_VOID_PTR(payload), len, config ? config->getWrappedActionConfig() : tsk_null); \
+} \
+OVERRIDE_FUNC(bool cls##::sendInfo(VISIBLE_VOID_PTR payload, unsigned len){ \
+ return sendInfo(payload, len, nullptr); \
+}) \
+rtMediaSessionMgr^ cls##::getMediaMgr(){ \
+ if(m_pSipSession->getMediaMgr()){ \
+ return ref new rtMediaSessionMgr(const_cast<struct tmedia_session_mgr_s*>(m_pSipSession->getMediaMgr()->getWrappedMgr())); \
+ } \
+ return nullptr; \
+} \
+
+namespace doubango_rt
+{
+ namespace BackEnd
+ {
+ ref class rtMsrpCallback;
+ interface class rtIMsrpCallback;
+
+
+ /* ======================== rtT140CallbackData ========================*/
+ public ref class rtT140CallbackData sealed
+ {
+ internal:
+ rtT140CallbackData(enum tmedia_t140_data_type_e data_type, const void* data_ptr, unsigned data_size);
+ public:
+ virtual ~rtT140CallbackData();
+
+ private:
+ T140CallbackData* m_pData;
+ };
+
+ /* ======================== rtT140Callback ========================*/
+ public interface class rtIT140Callback
+ {
+ virtual int ondata(rtT140CallbackData^ pData);
+ };
+ public ref class rtT140Callback sealed
+ {
+ internal:
+ rtT140Callback();
+ const T140Callback* getWrappedCallback(){ return m_pCallback; }
+
+ public:
+ rtT140Callback(rtIT140Callback^ pI)
+ {
+ m_pI = pI;
+ }
+ virtual ~rtT140Callback();
+
+ protected:
+ virtual int ondata(rtT140CallbackData^ pData){
+ if(m_pI)
+ {
+ return m_pI->ondata(pData);
+ }
+ return 0;
+ }
+
+ private:
+ T140Callback* m_pCallback;
+ rtIT140Callback^ m_pI;
+ };
+
+
+ /* ======================== rtISipSession ========================*/
+ public interface class rtISipSession
+ {
+ rtISession_Declare();
+ };
+
+
+ /* ======================== rtIInviteSession ========================*/
+ public interface class rtIInviteSession : rtISipSession
+ {
+ rtIInviteSession_Declare();
+ };
+
+ /* ======================== rtSipSession ========================*/
+ public ref class rtSipSession sealed: rtISipSession
+ {
+ public:
+ rtSipSession(rtSipStack^ pStack);
+ virtual ~rtSipSession();
+ internal:
+ rtSipSession(SipStack* pStack, tsip_ssession_handle_t* pHandle);
+ SipSession* getWrappedSession(){ return m_pSipSession; }
+
+ public:
+ rtISession_Declare();
+
+ private:
+ SipSession* m_pSipSession;
+ };
+
+ /* ======================== rtInviteSession ========================*/
+ public ref class rtInviteSession sealed: rtIInviteSession
+ {
+ public:
+ rtInviteSession(rtSipStack^ pStack);
+ virtual ~rtInviteSession();
+ internal:
+ rtInviteSession(SipStack* pStack, tsip_ssession_handle_t* pHandle);
+ InviteSession* getWrappedSession(){ return m_pSipSession; }
+
+ public:
+ rtISession_Declare();
+ rtIInviteSession_Declare();
+
+ private:
+ InviteSession* m_pSipSession;
+ };
+
+ /* ======================== CallSession ========================*/
+ public ref class rtCallSession sealed : rtIInviteSession
+ {
+ public:
+ rtCallSession(rtSipStack^ pStack);
+ virtual ~rtCallSession();
+ internal:
+ rtCallSession(SipStack* pStack, tsip_ssession_handle_t* pHandle);
+ CallSession* getWrappedSession(){ return m_pSipSession; }
+
+ public:
+ rtISession_Declare();
+ rtIInviteSession_Declare();
+
+ [Windows::Foundation::Metadata::DefaultOverload]
+ bool call(Platform::String^ remoteUriString, rt_twrap_media_type_t media, rtActionConfig^ config);
+ [Windows::Foundation::Metadata::DefaultOverload]
+ bool call(Platform::String^ remoteUriString, rt_twrap_media_type_t media);
+ bool call(rtSipUri^ remoteUri, rt_twrap_media_type_t media, rtActionConfig^ config);
+ bool call(rtSipUri^ remoteUri, rt_twrap_media_type_t media);
+
+ bool setSessionTimer(unsigned timeout, Platform::String^ refresher);
+ bool set100rel(bool enabled);
+ bool setRtcp(bool enabled);
+ bool setRtcpMux(bool enabled);
+ bool setICE(bool enabled);
+ bool setQoS(rt_tmedia_qos_stype_t type, rt_tmedia_qos_strength_t strength);
+ bool setVideoFps(int32_t fps);
+ bool setVideoBandwidthUploadMax(int32_t max);
+ bool setVideoBandwidthDownloadMax(int32_t max);
+ bool setVideoPrefSize(rt_tmedia_pref_video_size_t pref_video_size);
+ bool hold(rtActionConfig^ config);
+ bool hold();
+ bool resume(rtActionConfig^ config);
+ bool resume();
+ bool transfer(Platform::String^ referToUriString, rtActionConfig^ config);
+ bool transfer(Platform::String^ referToUriString);
+ bool acceptTransfer(rtActionConfig^ config);
+ bool acceptTransfer();
+ bool rejectTransfer(rtActionConfig^ config);
+ bool rejectTransfer();
+ bool sendDTMF(int number);
+ unsigned getSessionTransferId();
+#if COM_VISIBLE
+ bool sendT140Data(rt_tmedia_t140_data_type_t data_type, Platform::String^ data);
+#else
+ bool sendT140Data(rt_tmedia_t140_data_type_t data_type, Platform::IntPtr data_ptr, unsigned data_size);
+#endif
+ bool sendT140Data(rt_tmedia_t140_data_type_t data_type);
+ bool setT140Callback(rtT140Callback^ pT140Callback);
+
+ private:
+ CallSession* m_pSipSession;
+ };
+
+
+ /* ======================== rtMsrpSession ========================*/
+ public ref class rtMsrpSession sealed : rtIInviteSession
+ {
+ public:
+ rtMsrpSession(rtSipStack^ pStack, rtIMsrpCallback^ pCallback);
+ virtual ~rtMsrpSession();
+
+ internal:
+ rtMsrpSession(SipStack* pStack, tsip_ssession_handle_t* pHandle);
+ MsrpSession* getWrappedSession(){ return m_pSipSession; }
+
+ public:
+ rtISession_Declare();
+ rtIInviteSession_Declare();
+
+ bool setCallback(rtIMsrpCallback^ pCallback);
+ [Windows::Foundation::Metadata::DefaultOverload]
+ bool callMsrp(Platform::String^ remoteUriString, rtActionConfig^ config);
+ [Windows::Foundation::Metadata::DefaultOverload]
+ bool callMsrp(Platform::String^ remoteUriString);
+ bool callMsrp(rtSipUri^ remoteUri, rtActionConfig^ config);
+ bool callMsrp(rtSipUri^ remoteUri);
+#if COM_VISIBLE
+ bool sendMessage(Platform::String^ payload, rtActionConfig^ config);
+ bool sendMessage(Platform::String^ payload);
+#else
+ bool sendMessage(Platform::IntPtr payload, unsigned len, rtActionConfig^ config);
+ bool sendMessage(Platform::IntPtr payload, unsigned len);
+#endif
+
+ private:
+ MsrpSession* m_pSipSession;
+ rtMsrpCallback^ m_pCallback;
+ };
+
+ /* ======================== rtMessagingSession ========================*/
+ public ref class rtMessagingSession sealed : rtISipSession
+ {
+ internal:
+ rtMessagingSession(SipStack* pStack, tsip_ssession_handle_t* pHandle);
+ public:
+ rtMessagingSession(rtSipStack^ pStack);
+ virtual ~rtMessagingSession();
+
+ rtISession_Declare();
+
+#if COM_VISIBLE
+ bool send(Platform::String^ payload, rtActionConfig^ config);
+ bool send(Platform::String^ payload);
+#else
+ [Windows::Foundation::Metadata::DefaultOverload]
+ bool send(Platform::IntPtr payload, unsigned len, rtActionConfig^ config);
+ bool send(Platform::IntPtr payload, unsigned len);
+#endif
+ [Windows::Foundation::Metadata::DefaultOverload]
+ bool accept(rtActionConfig^ config);
+ bool accept();
+ [Windows::Foundation::Metadata::DefaultOverload]
+ bool reject(rtActionConfig^ config);
+ bool reject();
+
+ private:
+ MessagingSession* m_pSipSession;
+ };
+
+
+ /* ======================== rtInfoSession ========================*/
+ public ref class rtInfoSession sealed : rtISipSession
+ {
+ internal:
+ rtInfoSession(SipStack* pStack, tsip_ssession_handle_t* pHandle);
+ public:
+ rtInfoSession(rtSipStack^ pStack);
+ virtual ~rtInfoSession();
+
+ rtISession_Declare();
+
+#if COM_VISIBLE
+ bool send(Platform::String^ payload, rtActionConfig^ config);
+ bool send(Platform::String^ payload);
+#else
+ [Windows::Foundation::Metadata::DefaultOverload]
+ bool send(Platform::IntPtr payload, unsigned len, rtActionConfig^ config);
+ bool send(Platform::IntPtr payload, unsigned len);
+#endif
+ [Windows::Foundation::Metadata::DefaultOverload]
+ bool accept(rtActionConfig^ config);
+ bool accept();
+ [Windows::Foundation::Metadata::DefaultOverload]
+ bool reject(rtActionConfig^ config);
+ bool reject();
+
+ private:
+ InfoSession* m_pSipSession;
+ };
+
+
+ /* ======================== rtOptionsSession ========================*/
+ public ref class rtOptionsSession sealed : rtISipSession
+ {
+ internal:
+ rtOptionsSession(SipStack* pStack, tsip_ssession_handle_t* pHandle);
+ public:
+ rtOptionsSession(rtSipStack^ pStack);
+ virtual ~rtOptionsSession();
+
+ rtISession_Declare();
+
+ [Windows::Foundation::Metadata::DefaultOverload]
+ bool send(rtActionConfig^ config);
+ bool send();
+ [Windows::Foundation::Metadata::DefaultOverload]
+ bool accept(rtActionConfig^ config);
+ bool accept();
+ [Windows::Foundation::Metadata::DefaultOverload]
+ bool reject(rtActionConfig^ config);
+ bool reject();
+
+ private:
+ OptionsSession* m_pSipSession;
+ };
+
+
+ /* ======================== rtPublicationSession ========================*/
+ public ref class rtPublicationSession sealed : rtISipSession
+ {
+ internal:
+ rtPublicationSession(SipStack* pStack, tsip_ssession_handle_t* pHandle);
+ public:
+ rtPublicationSession(rtSipStack^ pStack);
+ virtual ~rtPublicationSession();
+
+ rtISession_Declare();
+
+#if COM_VISIBLE
+ bool publish(Platform::String^ payload, rtActionConfig^ config);
+ bool publish(Platform::String^ payload);
+#else
+ [Windows::Foundation::Metadata::DefaultOverload]
+ bool publish(Platform::IntPtr payload, unsigned len, rtActionConfig^ config);
+ bool publish(Platform::IntPtr payload, unsigned len);
+#endif
+ [Windows::Foundation::Metadata::DefaultOverload]
+ bool unPublish(rtActionConfig^ config);
+ bool unPublish();
+
+ private:
+ PublicationSession* m_pSipSession;
+ };
+
+
+ /* ======================== rtRegistrationSession ========================*/
+ public ref class rtRegistrationSession sealed : rtISipSession
+ {
+ internal:
+ rtRegistrationSession(SipStack* pStack, tsip_ssession_handle_t* pHandle);
+ public:
+ rtRegistrationSession(rtSipStack^ pStack);
+ virtual ~rtRegistrationSession();
+
+ rtISession_Declare();
+
+ bool register_(rtActionConfig^ config);
+ bool register_();
+ bool unRegister(rtActionConfig^ config);
+ bool unRegister();
+ bool accept(rtActionConfig^ config);
+ bool accept();
+ bool reject(rtActionConfig^ config);
+ bool reject();
+
+ private:
+ RegistrationSession* m_pSipSession;
+ };
+
+ /* ======================== rtSubscriptionSession ========================*/
+ public ref class rtSubscriptionSession sealed : rtISipSession
+ {
+ internal:
+ rtSubscriptionSession(SipStack* pStack, tsip_ssession_handle_t* pHandle);
+ public:
+ rtSubscriptionSession(rtSipStack^ pStack);
+ virtual ~rtSubscriptionSession();
+
+ rtISession_Declare();
+
+ bool subscribe();
+ bool unSubscribe();
+
+ private:
+ SubscriptionSession* m_pSipSession;
+ };
+ }
+}
diff --git a/bindings/winrt/doubango_rt/include/rt_SipStack.h b/bindings/winrt/doubango_rt/include/rt_SipStack.h
new file mode 100644
index 0000000..b55c5ae
--- /dev/null
+++ b/bindings/winrt/doubango_rt/include/rt_SipStack.h
@@ -0,0 +1,120 @@
+/*Copyright (C) 2013 Doubango Telecom <http://www.doubango.org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*/
+#pragma once
+
+#include <mutex>
+
+class SipStack;
+
+namespace doubango_rt
+{
+ namespace BackEnd
+ {
+ ref class rtSipCallback;
+ interface class rtISipCallback;
+ ref class rtDDebugCallback;
+ interface class rtIDDebugCallback;
+
+ enum class rt_tdav_codec_id_t;
+
+ public ref class rtDnsResult sealed
+ {
+ internal:
+ rtDnsResult(uint16 port, Platform::String^ address):_port(port), _address(address){}
+ public:
+ property uint16 Port{ uint16 get() { return _port; }; }
+ property Platform::String^ Address{ Platform::String^ get() { return _address; }; }
+ private:
+ uint16 _port;
+ Platform::String^ _address;
+ };
+
+ public ref class rtSipStack sealed
+ {
+ public:
+ virtual ~rtSipStack();
+
+ internal:
+ rtSipStack(rtISipCallback^ callback, Platform::String^ realmUri, Platform::String^ impiString, Platform::String^ impuUri);
+ const SipStack* getWrappedStack() { return m_pSipStack; }
+
+ public:
+ bool start();
+ bool setDebugCallback(rtIDDebugCallback^ pCallback);
+ bool setDisplayName(Platform::String^ display_name);
+ bool setRealm(Platform::String^ realm_uri);
+ bool setIMPI(Platform::String^ impi);
+ bool setIMPU(Platform::String^ impu_uri);
+ bool setPassword(Platform::String^ password);
+ bool setAMF(Platform::String^ amf);
+ bool setOperatorId(Platform::String^ opid);
+ bool setProxyCSCF(Platform::String^ fqdn, unsigned short port, Platform::String^ transport, Platform::String^ ipversion);
+ bool setLocalIP(Platform::String^ ip, Platform::String^ transport);
+ bool setLocalIP(Platform::String^ ip);
+ bool setLocalPort(unsigned short port, Platform::String^ transport);
+ bool setLocalPort(unsigned short port);
+ bool setEarlyIMS(bool enabled);
+ bool addHeader(Platform::String^ name, Platform::String^ value);
+ bool removeHeader(Platform::String^ name);
+ bool addDnsServer(Platform::String^ ip);
+ bool setDnsDiscovery(bool enabled);
+ bool setAoR(Platform::String^ ip, int port);
+ bool setSigCompParams(unsigned dms, unsigned sms, unsigned cpb, bool enablePresDict);
+ bool addSigCompCompartment(Platform::String^ compId);
+ bool removeSigCompCompartment(Platform::String^ compId);
+
+ bool setSTUNServer(Platform::String^ ip, unsigned short port);
+ bool setSTUNCred(Platform::String^ login, Platform::String^ password);
+
+ bool setTLSSecAgree(bool enabled);
+ bool setSSLCertificates(Platform::String^ privKey, Platform::String^ pubKey, Platform::String^ caKey, bool verify);
+ bool setSSLCertificates(Platform::String^ privKey, Platform::String^ pubKey, Platform::String^ caKey);
+ bool setIPSecSecAgree(bool enabled);
+ bool setIPSecParameters(Platform::String^ algo, Platform::String^ ealgo, Platform::String^ mode, Platform::String^ proto);
+
+ Platform::String^ dnsENUM(Platform::String^ service, Platform::String^ e164num, Platform::String^ domain);
+#if COM_VISIBLE
+ rtDnsResult^ dnsNaptrSrv(Platform::String^ domain, Platform::String^ service);
+ rtDnsResult^ dnsSrv(Platform::String^ service);
+ Platform::String^ getLocalIP(Platform::String^ protocol);
+ uint16 getLocalPort(Platform::String^ protocol);
+#else
+ Platform::String^ dnsNaptrSrv(Platform::String^ domain, Platform::String^ service, Platform::IntPtr port);
+ Platform::String^ dnsSrv(Platform::String^ service, Platform::IntPtr port);
+ Platform::String^ getLocalIPnPort(Platform::String^ protocol, Platform::IntPtr port);
+#endif
+
+ Platform::String^ getPreferredIdentity();
+
+ bool isValid();
+ bool stop();
+
+ static bool initialize();
+ static bool deInitialize();
+ static void setCodecs(enum class rt_tdav_codec_id_t codecs);
+ static bool setCodecPriority(enum class rt_tdav_codec_id_t codec_id, int priority);
+ static bool isCodecSupported(enum class rt_tdav_codec_id_t codec_id);
+
+ private:
+ SipStack* m_pSipStack;
+ rtSipCallback^ m_pSipCallback;
+ rtDDebugCallback^ m_pDebugCallback;
+ std::recursive_mutex mLock;
+ };
+ }
+} \ No newline at end of file
diff --git a/bindings/winrt/doubango_rt/include/rt_SipUri.h b/bindings/winrt/doubango_rt/include/rt_SipUri.h
new file mode 100644
index 0000000..3917f87
--- /dev/null
+++ b/bindings/winrt/doubango_rt/include/rt_SipUri.h
@@ -0,0 +1,60 @@
+/*Copyright (C) 2013 Doubango Telecom <http://www.doubango.org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*/
+#pragma once
+
+#include "rt_Config.h"
+
+class SipUri;
+
+namespace doubango_rt
+{
+ namespace BackEnd
+ {
+ public ref class rtSipUri sealed
+ {
+ public:
+ virtual ~rtSipUri();
+ rtSipUri(Platform::String^ uriString, Platform::String^ displayName);
+ rtSipUri(Platform::String^ uriString);
+
+
+ public:
+ static bool isValid(Platform::String^ uri);
+
+#if COM_VISIBLE
+ bool isValid_();
+#else
+ bool isValid();
+#endif
+ Platform::String^ getScheme();
+ Platform::String^ getHost();
+ unsigned short getPort();
+ Platform::String^ getUserName();
+ Platform::String^ getPassword();
+ Platform::String^ getDisplayName();
+ Platform::String^ getParamValue(Platform::String^ name);
+ void setDisplayName(Platform::String^ displayName);
+
+ internal:
+ const SipUri* getWrappedUri(){ return m_pSipUri; }
+
+ private:
+ SipUri* m_pSipUri;
+ };
+ }
+} \ No newline at end of file
diff --git a/bindings/winrt/doubango_rt/include/rt_String.h b/bindings/winrt/doubango_rt/include/rt_String.h
new file mode 100644
index 0000000..5562b5d
--- /dev/null
+++ b/bindings/winrt/doubango_rt/include/rt_String.h
@@ -0,0 +1,33 @@
+/*Copyright (C) 2013 Doubango Telecom <http://www.doubango.org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*/
+#pragma once
+
+#include <vector>
+
+namespace doubango_rt
+{
+ namespace BackEnd
+ {
+ ref class rtString sealed
+ {
+ internal:
+ static std::vector<char> toUtf8(Platform::String^ str);
+ static Platform::String^ toString(char const* str);
+ };
+ }
+} \ No newline at end of file
diff --git a/bindings/winrt/doubango_rt/include/rt_Xcap.h b/bindings/winrt/doubango_rt/include/rt_Xcap.h
new file mode 100644
index 0000000..9385aed
--- /dev/null
+++ b/bindings/winrt/doubango_rt/include/rt_Xcap.h
@@ -0,0 +1,18 @@
+/*Copyright (C) 2013 Doubango Telecom <http://www.doubango.org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*/
+#pragma once \ No newline at end of file
diff --git a/bindings/winrt/doubango_rt/src/rt_ActionConfig.cxx b/bindings/winrt/doubango_rt/src/rt_ActionConfig.cxx
new file mode 100644
index 0000000..02f713e
--- /dev/null
+++ b/bindings/winrt/doubango_rt/src/rt_ActionConfig.cxx
@@ -0,0 +1,76 @@
+/*Copyright (C) 2013 Doubango Telecom <http://www.doubango.org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*/
+#include "rt_ActionConfig.h"
+#include "rt_String.h"
+
+#include "ActionConfig.h"
+
+using namespace doubango_rt::BackEnd;
+using namespace Platform;
+using namespace std;
+
+rtActionConfig::rtActionConfig()
+{
+ m_pActionConfig = new ActionConfig();
+}
+
+rtActionConfig::~rtActionConfig()
+{
+ rtSafeDelete(m_pActionConfig);
+}
+
+bool rtActionConfig::addHeader(String^ name, String^ value)
+{
+ return m_pActionConfig->addHeader(rtString::toUtf8(name).data(), rtString::toUtf8(value).data());
+}
+
+bool rtActionConfig::setActiveMedia(rt_twrap_media_type_t type)
+{
+ return m_pActionConfig->setActiveMedia((twrap_media_type_t)type);
+}
+
+#if COM_VISIBLE
+bool rtActionConfig::addPayload(Platform::String^ payload)
+{
+ static std::vector<char> _payload = rtString::toUtf8(payload);
+ return m_pActionConfig->addPayload(_payload.data(), _payload.size());
+}
+#else
+bool rtActionConfig::addPayload(IntPtr payload, unsigned len)
+{
+ return m_pActionConfig->addPayload((const void*)payload, len);
+}
+#endif /* COM_VISIBLE */
+
+rtActionConfig^ rtActionConfig::setResponseLine(short code, String^ phrase)
+{
+ m_pActionConfig->setResponseLine(code, rtString::toUtf8(phrase).data());
+ return this;
+}
+
+rtActionConfig^ rtActionConfig::setMediaString(rt_twrap_media_type_t type, String^ key, String^ value)
+{
+ m_pActionConfig->setMediaString((twrap_media_type_t)type, rtString::toUtf8(key).data(), rtString::toUtf8(value).data());
+ return this;
+}
+
+rtActionConfig^ rtActionConfig::setMediaInt(rt_twrap_media_type_t type, String^ key, int value)
+{
+ m_pActionConfig->setMediaInt((twrap_media_type_t)type, rtString::toUtf8(key).data(), value);
+ return this;
+} \ No newline at end of file
diff --git a/bindings/winrt/doubango_rt/src/rt_DDebug.cxx b/bindings/winrt/doubango_rt/src/rt_DDebug.cxx
new file mode 100644
index 0000000..a03300c
--- /dev/null
+++ b/bindings/winrt/doubango_rt/src/rt_DDebug.cxx
@@ -0,0 +1,78 @@
+/*Copyright (C) 2013 Doubango Telecom <http://www.doubango.org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*/
+#include "rt_DDebug.h"
+#include "rt_String.h"
+
+#include "DDebug.h"
+
+using namespace doubango_rt::BackEnd;
+using namespace Platform;
+using namespace std;
+
+class DDebugCallbackProxy : public DDebugCallback
+{
+public:
+ DDebugCallbackProxy(rtDDebugCallback^ pCallback)
+ {
+ m_pCallback = pCallback;
+ }
+
+ ~DDebugCallbackProxy()
+ {
+
+ }
+
+ virtual int OnDebugInfo(const char* message)
+ {
+ return m_pCallback->m_pI->OnDebugInfo(rtString::toString(message));
+ }
+
+ virtual int OnDebugWarn(const char* message)
+ {
+ return m_pCallback->m_pI->OnDebugWarn(rtString::toString(message));
+ }
+
+ virtual int OnDebugError(const char* message)
+ {
+ return m_pCallback->m_pI->OnDebugError(rtString::toString(message));
+ }
+
+ virtual int OnDebugFatal(const char* message)
+ {
+ return m_pCallback->m_pI->OnDebugFatal(rtString::toString(message));
+ }
+
+private:
+ rtDDebugCallback^ m_pCallback;
+};
+
+rtDDebugCallback::rtDDebugCallback(rtIDDebugCallback^ pI)
+{
+ m_pI = pI;
+ m_pCallback = new DDebugCallbackProxy(this);
+}
+
+rtDDebugCallback::~rtDDebugCallback()
+{
+ rtSafeDelete(m_pCallback);
+}
+
+const DDebugCallback* rtDDebugCallback::getWrappedCallback()
+{
+ return dynamic_cast<const DDebugCallback*>(m_pCallback);
+} \ No newline at end of file
diff --git a/bindings/winrt/doubango_rt/src/rt_Enums.cxx b/bindings/winrt/doubango_rt/src/rt_Enums.cxx
new file mode 100644
index 0000000..fa2645c
--- /dev/null
+++ b/bindings/winrt/doubango_rt/src/rt_Enums.cxx
@@ -0,0 +1,17 @@
+/*Copyright (C) 2013 Doubango Telecom <http://www.doubango.org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*/#include "rt_enums.h" \ No newline at end of file
diff --git a/bindings/winrt/doubango_rt/src/rt_MediaContent.cxx b/bindings/winrt/doubango_rt/src/rt_MediaContent.cxx
new file mode 100644
index 0000000..623cb1f
--- /dev/null
+++ b/bindings/winrt/doubango_rt/src/rt_MediaContent.cxx
@@ -0,0 +1,17 @@
+/*Copyright (C) 2013 Doubango Telecom <http://www.doubango.org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*/ \ No newline at end of file
diff --git a/bindings/winrt/doubango_rt/src/rt_MediaSessionMgr.cxx b/bindings/winrt/doubango_rt/src/rt_MediaSessionMgr.cxx
new file mode 100644
index 0000000..7d2c6f0
--- /dev/null
+++ b/bindings/winrt/doubango_rt/src/rt_MediaSessionMgr.cxx
@@ -0,0 +1,374 @@
+/*Copyright (C) 2013 Doubango Telecom <http://www.doubango.org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*/
+#include "rt_MediaSessionMgr.h"
+#include "rt_Enums.h"
+#include "rt_String.h"
+
+#include "MediaSessionMgr.h"
+
+using namespace doubango_rt::BackEnd;
+using namespace Platform;
+using namespace std;
+
+rtCodec::rtCodec(struct tmedia_codec_s* pCodec)
+{
+ m_pCodec = new Codec(pCodec);
+}
+
+rtCodec::~rtCodec()
+{
+ rtSafeDelete(m_pCodec);
+}
+
+enum class rt_twrap_media_type_t rtCodec::getMediaType()
+{
+ return (rt_twrap_media_type_t)m_pCodec->getMediaType();
+}
+
+Platform::String^ rtCodec::getName()
+{
+ return rtString::toString(m_pCodec->getName());
+}
+
+Platform::String^ rtCodec::getDescription()
+{
+ return rtString::toString(m_pCodec->getDescription());
+}
+
+Platform::String^ rtCodec::getNegFormat()
+{
+ return rtString::toString(m_pCodec->getNegFormat());
+}
+
+int rtCodec::getAudioSamplingRate()
+{
+ return m_pCodec->getAudioSamplingRate();
+}
+
+int rtCodec::getAudioChannels()
+{
+ return m_pCodec->getAudioChannels();
+}
+
+int rtCodec::getAudioPTime()
+{
+ return m_pCodec->getAudioPTime();
+}
+
+
+rtMediaSessionMgr::rtMediaSessionMgr(struct tmedia_session_mgr_s* pWrappedMgr)
+{
+ m_pMediaSessionMgr = new MediaSessionMgr(pWrappedMgr);
+}
+
+rtMediaSessionMgr::~rtMediaSessionMgr()
+{
+ rtSafeDelete(m_pMediaSessionMgr);
+}
+
+bool rtMediaSessionMgr::sessionSetInt32(rt_twrap_media_type_t media, Platform::String^ key, int32 value)
+{
+ return m_pMediaSessionMgr->sessionSetInt32((twrap_media_type_t)media, rtString::toUtf8(key).data(), value);
+}
+
+int32 rtMediaSessionMgr::sessionGetInt32(rt_twrap_media_type_t media, Platform::String^ key)
+{
+ return m_pMediaSessionMgr->sessionGetInt32((twrap_media_type_t)media, rtString::toUtf8(key).data());
+}
+
+bool rtMediaSessionMgr::consumerSetInt32(rt_twrap_media_type_t media, Platform::String^ key, int32 value)
+{
+ return m_pMediaSessionMgr->consumerSetInt32((twrap_media_type_t)media, rtString::toUtf8(key).data(), value);
+}
+
+bool rtMediaSessionMgr::consumerSetInt64(rt_twrap_media_type_t media, Platform::String^ key, int64 value)
+{
+ return m_pMediaSessionMgr->consumerSetInt64((twrap_media_type_t)media, rtString::toUtf8(key).data(), value);
+}
+
+bool rtMediaSessionMgr::producerSetInt32(rt_twrap_media_type_t media, Platform::String^ key, int32 value)
+{
+ return m_pMediaSessionMgr->producerSetInt32((twrap_media_type_t)media, rtString::toUtf8(key).data(), value);
+}
+
+bool rtMediaSessionMgr::producerSetInt64(rt_twrap_media_type_t media, Platform::String^ key, int64 value)
+{
+ return m_pMediaSessionMgr->producerSetInt64((twrap_media_type_t)media, rtString::toUtf8(key).data(), value);
+}
+
+rtCodec^ rtMediaSessionMgr::producerGetCodec(rt_twrap_media_type_t media)
+{
+ Codec* c = m_pMediaSessionMgr->producerGetCodec((twrap_media_type_t)media);
+ if(c)
+ {
+ rtCodec^ codec = ref new rtCodec(const_cast<struct tmedia_codec_s*>(c->getWrappedCodec()));
+ rtSafeDelete(c);
+ return codec;
+ }
+ return nullptr;
+}
+
+unsigned int rtMediaSessionMgr::registerAudioPluginFromFile(Platform::String^ path)
+{
+ return MediaSessionMgr::registerAudioPluginFromFile(rtString::toUtf8(path).data());
+}
+
+uint64 rtMediaSessionMgr::getSessionId(rt_twrap_media_type_t media)
+{
+ return m_pMediaSessionMgr->getSessionId((twrap_media_type_t)media);
+}
+
+bool rtMediaSessionMgr::defaultsSetProfile(rt_tmedia_profile_t profile)
+{
+ return MediaSessionMgr::defaultsSetProfile((tmedia_profile_t) profile);
+}
+
+rt_tmedia_profile_t rtMediaSessionMgr::defaultsGetProfile()
+{
+ return (rt_tmedia_profile_t)MediaSessionMgr::defaultsGetProfile();
+}
+
+bool rtMediaSessionMgr::defaultsSetPrefVideoSize(enum class rt_tmedia_pref_video_size_t pref_video_size)
+{
+ return MediaSessionMgr::defaultsSetPrefVideoSize((tmedia_pref_video_size_t) pref_video_size);
+}
+
+bool rtMediaSessionMgr::defaultsSetJbMargin(uint32 jb_margin_ms)
+{
+ return MediaSessionMgr::defaultsSetJbMargin(jb_margin_ms);
+}
+
+bool rtMediaSessionMgr::defaultsSetJbMaxLateRate(uint32 jb_late_rate_percent)
+{
+ return MediaSessionMgr::defaultsSetJbMaxLateRate(jb_late_rate_percent);
+}
+
+bool rtMediaSessionMgr::defaultsSetEchoTail(uint32 echo_tail)
+{
+ return MediaSessionMgr::defaultsSetEchoTail(echo_tail);
+}
+
+uint32 rtMediaSessionMgr::defaultsGetEchoTail()
+{
+ return MediaSessionMgr::defaultsGetEchoTail();
+}
+
+bool rtMediaSessionMgr::defaultsSetEchoSkew(uint32 echo_skew)
+{
+ return MediaSessionMgr::defaultsSetEchoSkew(echo_skew);
+}
+
+bool rtMediaSessionMgr::defaultsSetEchoSuppEnabled(bool echo_supp_enabled)
+{
+ return MediaSessionMgr::defaultsSetEchoSuppEnabled(echo_supp_enabled);
+}
+
+bool rtMediaSessionMgr::defaultsGetEchoSuppEnabled()
+{
+ return MediaSessionMgr::defaultsGetEchoSuppEnabled();
+}
+
+bool rtMediaSessionMgr::defaultsSetAgcEnabled(bool agc_enabled)
+{
+ return MediaSessionMgr::defaultsSetAgcEnabled(agc_enabled);
+}
+
+bool rtMediaSessionMgr::defaultsGetAgcEnabled()
+{
+ return MediaSessionMgr::defaultsGetAgcEnabled();
+}
+
+bool rtMediaSessionMgr::defaultsSetAgcLevel(float agc_level)
+{
+ return MediaSessionMgr::defaultsSetAgcLevel(agc_level);
+}
+
+float rtMediaSessionMgr::defaultsGetAgcLevel()
+{
+ return MediaSessionMgr::defaultsGetAgcLevel();
+}
+
+bool rtMediaSessionMgr::defaultsSetVadEnabled(bool vad_enabled)
+{
+ return MediaSessionMgr::defaultsSetVadEnabled(vad_enabled);
+}
+
+bool rtMediaSessionMgr::defaultsGetGetVadEnabled()
+{
+ return MediaSessionMgr::defaultsGetGetVadEnabled();
+}
+
+bool rtMediaSessionMgr::defaultsSetNoiseSuppEnabled(bool noise_supp_enabled)
+{
+ return MediaSessionMgr::defaultsSetNoiseSuppEnabled(noise_supp_enabled);
+}
+
+bool rtMediaSessionMgr::defaultsGetNoiseSuppEnabled()
+{
+ return MediaSessionMgr::defaultsGetNoiseSuppEnabled();
+}
+
+bool rtMediaSessionMgr::defaultsSetNoiseSuppLevel(int32 noise_supp_level)
+{
+ return MediaSessionMgr::defaultsSetNoiseSuppLevel(noise_supp_level);
+}
+
+int32 rtMediaSessionMgr::defaultsGetNoiseSuppLevel()
+{
+ return MediaSessionMgr::defaultsGetNoiseSuppLevel();
+}
+
+bool rtMediaSessionMgr::defaultsSet100relEnabled(bool _100rel_enabled)
+{
+ return MediaSessionMgr::defaultsSet100relEnabled(_100rel_enabled);
+}
+
+bool rtMediaSessionMgr::defaultsGet100relEnabled()
+{
+ return MediaSessionMgr::defaultsGet100relEnabled();
+}
+
+bool rtMediaSessionMgr::defaultsSetScreenSize(int32 sx, int32 sy)
+{
+ return MediaSessionMgr::defaultsSetScreenSize(sx, sy);
+}
+
+bool rtMediaSessionMgr::defaultsSetAudioGain(int32 producer_gain, int32 consumer_gain)
+{
+ return MediaSessionMgr::defaultsSetAudioGain(producer_gain, consumer_gain);
+}
+
+bool rtMediaSessionMgr::defaultsSetRtpPortRange(uint16 range_start, uint16 range_stop)
+{
+ return MediaSessionMgr::defaultsSetRtpPortRange(range_start, range_stop);
+}
+
+bool rtMediaSessionMgr::defaultsSetRtpSymetricEnabled(bool enabled)
+{
+ return MediaSessionMgr::defaultsSetRtpSymetricEnabled(enabled);
+}
+
+bool rtMediaSessionMgr::defaultsSetMediaType(enum class rt_twrap_media_type_t media_type)
+{
+ return MediaSessionMgr::defaultsSetMediaType((twrap_media_type_t) media_type);
+}
+
+bool rtMediaSessionMgr::defaultsSetVolume(int32 volume)
+{
+ return MediaSessionMgr::defaultsSetVolume(volume);
+}
+
+int32 rtMediaSessionMgr::defaultsGetVolume()
+{
+ return MediaSessionMgr::defaultsGetVolume();
+}
+
+bool rtMediaSessionMgr::defaultsSetInviteSessionTimers(int32 timeout, Platform::String^ refresher)
+{
+ return MediaSessionMgr::defaultsSetInviteSessionTimers(timeout, rtString::toUtf8(refresher).data());
+}
+
+bool rtMediaSessionMgr::defaultsSetSRtpMode(enum class rt_tmedia_srtp_mode_t mode)
+{
+ return MediaSessionMgr::defaultsSetSRtpMode((tmedia_srtp_mode_t) mode);
+}
+
+enum class rt_tmedia_srtp_mode_t rtMediaSessionMgr::defaultsGetSRtpMode()
+{
+ return (rt_tmedia_srtp_mode_t)MediaSessionMgr::defaultsGetSRtpMode();
+}
+
+bool rtMediaSessionMgr::defaultsSetSRtpType(enum class rt_tmedia_srtp_type_t srtp_type)
+{
+ return MediaSessionMgr::defaultsSetSRtpType((tmedia_srtp_type_t) srtp_type);
+}
+
+enum class rt_tmedia_srtp_type_t rtMediaSessionMgr::defaultsGetSRtpType()
+{
+ return (rt_tmedia_srtp_type_t)MediaSessionMgr::defaultsGetSRtpType();
+}
+
+bool rtMediaSessionMgr::defaultsSetRtcpEnabled(bool enabled)
+{
+ return MediaSessionMgr::defaultsSetRtcpEnabled(enabled);
+}
+
+bool rtMediaSessionMgr::defaultsGetRtcpEnabled()
+{
+ return MediaSessionMgr::defaultsGetRtcpEnabled();
+}
+
+bool rtMediaSessionMgr::defaultsSetRtcpMuxEnabled(bool enabled)
+{
+ return MediaSessionMgr::defaultsSetRtcpMuxEnabled(enabled);
+}
+
+bool rtMediaSessionMgr::defaultsGetRtcpMuxEnabled()
+{
+ return MediaSessionMgr::defaultsGetRtcpMuxEnabled();
+}
+
+bool rtMediaSessionMgr::defaultsSetIceEnabled(bool ice_enabled)
+{
+ return MediaSessionMgr::defaultsSetIceEnabled(ice_enabled);
+}
+
+bool rtMediaSessionMgr::defaultsSetByPassEncoding(bool enabled)
+{
+ return MediaSessionMgr::defaultsSetByPassEncoding(enabled);
+}
+
+bool rtMediaSessionMgr::defaultsGetByPassEncoding()
+{
+ return MediaSessionMgr::defaultsGetByPassEncoding();
+}
+
+bool rtMediaSessionMgr::defaultsSetByPassDecoding(bool enabled)
+{
+ return MediaSessionMgr::defaultsSetByPassDecoding(enabled);
+}
+
+bool rtMediaSessionMgr::defaultsGetByPassDecoding()
+{
+ return MediaSessionMgr::defaultsGetByPassDecoding();
+}
+
+bool rtMediaSessionMgr::defaultsSetVideoJbEnabled(bool enabled)
+{
+ return MediaSessionMgr::defaultsSetVideoJbEnabled(enabled);
+}
+
+bool rtMediaSessionMgr::defaultsGetVideoJbEnabled()
+{
+ return MediaSessionMgr::defaultsGetVideoJbEnabled();
+}
+
+bool rtMediaSessionMgr::defaultsSetRtpBuffSize(unsigned buffSize)
+{
+ return MediaSessionMgr::defaultsSetRtpBuffSize(buffSize);
+}
+
+unsigned rtMediaSessionMgr::defaultsGetRtpBuffSize()
+{
+ return MediaSessionMgr::defaultsGetRtpBuffSize();
+}
+
+bool rtMediaSessionMgr::defaultsSetAvpfTail(unsigned tail_min, unsigned tail_max)
+{
+ return MediaSessionMgr::defaultsSetAvpfTail(tail_min, tail_max);
+}
diff --git a/bindings/winrt/doubango_rt/src/rt_Msrp.cxx b/bindings/winrt/doubango_rt/src/rt_Msrp.cxx
new file mode 100644
index 0000000..1d09f06
--- /dev/null
+++ b/bindings/winrt/doubango_rt/src/rt_Msrp.cxx
@@ -0,0 +1,194 @@
+/*Copyright (C) 2013 Doubango Telecom <http://www.doubango.org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*/
+#include "rt_Msrp.h"
+#include "rt_String.h"
+#include "rt_SipSession.h"
+
+#include "SipSession.h"
+#include "Msrp.h"
+
+#include <assert.h>
+
+using namespace doubango_rt::BackEnd;
+using namespace Platform;
+using namespace std;
+
+
+//
+// rtMsrpMessage
+//
+
+rtMsrpMessage::rtMsrpMessage(struct tmsrp_message_s *message)
+{
+ m_pMsrpMessage= new MsrpMessage(message);
+}
+
+rtMsrpMessage::~rtMsrpMessage()
+{
+ rtSafeDelete(m_pMsrpMessage);
+}
+
+bool rtMsrpMessage::isRequest()
+{
+ return m_pMsrpMessage->isRequest();
+}
+
+short rtMsrpMessage::getCode()
+{
+ return m_pMsrpMessage->getCode();
+}
+
+String^ rtMsrpMessage::getPhrase()
+{
+ return rtString::toString(m_pMsrpMessage->getPhrase());
+}
+
+rt_tmsrp_request_type_t rtMsrpMessage::getRequestType()
+{
+ return (rt_tmsrp_request_type_t)m_pMsrpMessage->getRequestType();
+}
+
+#if COM_VISIBLE
+rtMsrpByteRange^ rtMsrpMessage::getByteRange()
+{
+ int64_t _start = -1, _end = -1, _total = -1;
+ m_pMsrpMessage->getByteRange(&_start, &_end, &_total);
+ return ref new rtMsrpByteRange(_start, _end, _total);
+}
+#else
+void rtMsrpMessage::getByteRange(IntPtr start, IntPtr end, IntPtr total)
+{
+ int64_t _start = -1, _end = -1, _total = -1;
+ m_pMsrpMessage->getByteRange(&_start, &_end, &_total);
+ // IntPtr is 32bit or 64bit -> 32 to be sure not memory errors will raise
+ *((int32_t*)(void*)start) = (int32_t)_start;
+ *((int32_t*)(void*)end) = (int32_t)_end;
+ *((int32_t*)(void*)total) = (int32_t)_total;
+}
+#endif /* COM_VISIBLE */
+
+bool rtMsrpMessage::isLastChunck()
+{
+ return m_pMsrpMessage->isLastChunck();
+}
+
+bool rtMsrpMessage::isFirstChunck()
+{
+ return m_pMsrpMessage->isFirstChunck();
+}
+
+bool rtMsrpMessage::isSuccessReport()
+{
+ return m_pMsrpMessage->isSuccessReport();
+}
+
+String^ rtMsrpMessage::getMsrpHeaderValue(String^ name)
+{
+ return rtString::toString(m_pMsrpMessage->getMsrpHeaderValue(rtString::toUtf8(name).data()));
+}
+
+String^ rtMsrpMessage::getMsrpHeaderParamValue(String^ name, String^ param)
+{
+ return rtString::toString(m_pMsrpMessage->getMsrpHeaderParamValue(rtString::toUtf8(name).data(), rtString::toUtf8(param).data()));
+}
+
+unsigned rtMsrpMessage::getMsrpContentLength()
+{
+ return m_pMsrpMessage->getMsrpContentLength();
+}
+
+#if COM_VISIBLE
+String^ rtMsrpMessage::getMsrpContent(unsigned maxsize)
+{
+ if(maxsize)
+ {
+ void* _s = calloc(maxsize + 1, 1);
+ if(_s)
+ {
+ unsigned len = m_pMsrpMessage->getMsrpContent(_s, maxsize);
+ String^ s = rtString::toString((const char*)_s);
+ free(_s);
+ return s;
+ }
+ }
+ return nullptr;
+}
+#else
+unsigned rtMsrpMessage::getMsrpContent(IntPtr output, unsigned maxsize)
+{
+ return m_pMsrpMessage->getMsrpContent((void*)output, maxsize);
+}
+#endif /* COM_VISIBLE */
+
+
+//
+// rtMsrpEvent
+//
+
+rtMsrpEvent::rtMsrpEvent(const struct tmsrp_event_s *event)
+{
+ m_pMsrpEvent = new MsrpEvent(event);
+}
+
+rtMsrpEvent::~rtMsrpEvent()
+{
+ rtSafeDelete(m_pMsrpEvent);
+}
+
+rt_tmsrp_event_type_t rtMsrpEvent::getType()
+{
+ return (rt_tmsrp_event_type_t)m_pMsrpEvent->getType();
+}
+
+rtMsrpSession^ rtMsrpEvent::getSipSession()
+{
+ if(m_pMsrpEvent->getSipSession())
+ {
+ assert(0); // FIXME: Not implemented
+ return nullptr;
+ // return ref new rtMsrpSession(m_pMsrpEvent->getSipSession()->getWrappedSession());
+ }
+ return nullptr;
+}
+
+rtMsrpMessage^ rtMsrpEvent::getMessage()
+{
+ if(m_pMsrpEvent->getMessage())
+ {
+ return ref new rtMsrpMessage(const_cast<struct tmsrp_message_s *>(const_cast<MsrpMessage*>(m_pMsrpEvent->getMessage())->getWrappedMsrpMessage()));
+ }
+ return nullptr;
+}
+
+//
+// rtMsrpCallback
+//
+
+rtMsrpCallback::rtMsrpCallback(rtIMsrpCallback^ pI)
+{
+ m_pI = pI;
+ m_pCallback = new MsrpCallback();
+}
+
+rtMsrpCallback::~rtMsrpCallback()
+{
+ rtSafeDelete(m_pCallback);
+}
+
+
+ \ No newline at end of file
diff --git a/bindings/winrt/doubango_rt/src/rt_SMSEncoder.cxx b/bindings/winrt/doubango_rt/src/rt_SMSEncoder.cxx
new file mode 100644
index 0000000..623cb1f
--- /dev/null
+++ b/bindings/winrt/doubango_rt/src/rt_SMSEncoder.cxx
@@ -0,0 +1,17 @@
+/*Copyright (C) 2013 Doubango Telecom <http://www.doubango.org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*/ \ No newline at end of file
diff --git a/bindings/winrt/doubango_rt/src/rt_SipCallback.cxx b/bindings/winrt/doubango_rt/src/rt_SipCallback.cxx
new file mode 100644
index 0000000..68c6299
--- /dev/null
+++ b/bindings/winrt/doubango_rt/src/rt_SipCallback.cxx
@@ -0,0 +1,135 @@
+/*Copyright (C) 2013 Doubango Telecom <http://www.doubango.org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*/
+#include "rt_SipCallback.h"
+#include "rt_SipEvent.h"
+
+#include "SipEvent.h"
+#include "SipCallback.h"
+
+using namespace doubango_rt::BackEnd;
+using namespace Platform;
+using namespace std;
+
+class SipCallbackProxy : public SipCallback
+{
+public:
+ SipCallbackProxy(rtSipCallback^ rtCallback)
+ {
+ m_pCallback = rtCallback;
+ }
+
+ virtual int OnDialogEvent(const DialogEvent* e) override
+ {
+ if(e && m_pCallback && m_pCallback->m_pI)
+ {
+ return m_pCallback->m_pI->OnDialogEvent(ref new rtDialogEvent(const_cast<tsip_event_t*>(const_cast<DialogEvent*>(e)->getWrappedEvent())));
+ }
+ return 0;
+ }
+
+ virtual int OnStackEvent(const StackEvent* e) override
+ {
+ if(e && m_pCallback && m_pCallback->m_pI)
+ {
+ return m_pCallback->m_pI->OnStackEvent(ref new rtStackEvent(const_cast<tsip_event_t*>(const_cast<StackEvent*>(e)->getWrappedEvent())));
+ }
+ return 0;
+ }
+
+ virtual int OnInviteEvent(const InviteEvent* e) override
+ {
+ if(e && m_pCallback && m_pCallback->m_pI)
+ {
+ return m_pCallback->m_pI->OnInviteEvent(ref new rtInviteEvent(const_cast<tsip_event_t*>(const_cast<InviteEvent*>(e)->getWrappedEvent())));
+ }
+ return 0;
+ }
+
+ virtual int OnMessagingEvent(const MessagingEvent* e) override
+ {
+ if(e && m_pCallback && m_pCallback->m_pI)
+ {
+ return m_pCallback->m_pI->OnMessagingEvent(ref new rtMessagingEvent(const_cast<tsip_event_t*>(const_cast<MessagingEvent*>(e)->getWrappedEvent())));
+ }
+ return 0;
+ }
+
+ virtual int OnInfoEvent(const InfoEvent* e) override
+ {
+ if(m_pCallback && m_pCallback->m_pI)
+ {
+ return m_pCallback->m_pI->OnInfoEvent(ref new rtInfoEvent(const_cast<tsip_event_t*>(const_cast<InfoEvent*>(e)->getWrappedEvent())));
+ }
+ return 0;
+ }
+
+ virtual int OnOptionsEvent(const OptionsEvent* e) override
+ {
+ if(e && m_pCallback && m_pCallback->m_pI)
+ {
+ return m_pCallback->m_pI->OnOptionsEvent(ref new rtOptionsEvent(const_cast<tsip_event_t*>(const_cast<OptionsEvent*>(e)->getWrappedEvent())));
+ }
+ return 0;
+ }
+
+ virtual int OnPublicationEvent(const PublicationEvent* e) override
+ {
+ if(e && m_pCallback && m_pCallback->m_pI)
+ {
+ return m_pCallback->m_pI->OnPublicationEvent(ref new rtPublicationEvent(const_cast<tsip_event_t*>(const_cast<PublicationEvent*>(e)->getWrappedEvent())));
+ }
+ return 0;
+ }
+
+ virtual int OnRegistrationEvent(const RegistrationEvent* e) override
+ {
+ if(m_pCallback && m_pCallback->m_pI)
+ {
+ return m_pCallback->m_pI->OnRegistrationEvent(ref new rtRegistrationEvent(const_cast<tsip_event_t*>(const_cast<RegistrationEvent*>(e)->getWrappedEvent())));
+ }
+ return 0;
+ }
+
+ virtual int OnSubscriptionEvent(const SubscriptionEvent* e) override
+ {
+ if(e && m_pCallback && m_pCallback->m_pI)
+ {
+ return m_pCallback->m_pI->OnSubscriptionEvent(ref new rtSubscriptionEvent(const_cast<tsip_event_t*>(const_cast<SubscriptionEvent*>(e)->getWrappedEvent())));
+ }
+ return 0;
+ }
+
+private:
+ rtSipCallback^ m_pCallback;
+};
+
+rtSipCallback::rtSipCallback(rtISipCallback^ pI)
+{
+ m_pI = pI;
+ m_pCallback = new SipCallbackProxy(this);
+}
+
+rtSipCallback::~rtSipCallback()
+{
+ rtSafeDelete(m_pCallback);
+}
+
+const SipCallback* rtSipCallback::getWrappedCallback()
+{
+ return dynamic_cast<const SipCallback*>(m_pCallback);
+} \ No newline at end of file
diff --git a/bindings/winrt/doubango_rt/src/rt_SipEvent.cxx b/bindings/winrt/doubango_rt/src/rt_SipEvent.cxx
new file mode 100644
index 0000000..1bd414e
--- /dev/null
+++ b/bindings/winrt/doubango_rt/src/rt_SipEvent.cxx
@@ -0,0 +1,239 @@
+/*Copyright (C) 2013 Doubango Telecom <http://www.doubango.org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*/
+#include "rt_SipEvent.h"
+#include "rt_String.h"
+#include "rt_SipMessage.h"
+#include "rt_SipSession.h"
+
+#include "tinysip/tsip_event.h"
+
+#include "SipMessage.h"
+#include "SipSession.h"
+#include "SipEvent.h"
+
+using namespace doubango_rt::BackEnd;
+using namespace Platform;
+using namespace std;
+
+#define rt_getSession_Implement(cls) \
+rt##cls##Session^ rt##cls##Event::getSession(){ \
+ const cls##Session* s = m_pEvent->getSession(); \
+ if(s){ \
+ return ref new rt##cls##Session(const_cast<SipStack*>(const_cast<##cls##Session*>(s)->getStack()), const_cast<tsip_ssession_handle_t*>(const_cast<##cls##Session*>(s)->getWrappedSession())); \
+ } \
+ return nullptr; \
+} \
+
+#define rt_takeOwnership_Implement(cls, name, session) \
+rt##name##Session^ rt##cls##Event::take##session##Ownership(){ \
+ name##Session* s = m_pEvent->take##session##Ownership(); \
+ if(s){ \
+ rt##name##Session^ _s = ref new rt##name##Session(const_cast<SipStack*>(s->getStack()), const_cast<tsip_ssession_handle_t*>(s->getWrappedSession())); \
+ rtSafeDelete(s); \
+ return _s; \
+ } \
+ return nullptr; \
+} \
+
+/* ======================== rtDialogEvent ========================*/
+rtISipEvent_Implement(rtDialogEvent);
+
+rtDialogEvent::rtDialogEvent(const struct tsip_event_s *e)
+{
+ m_pEvent = new DialogEvent(e);
+}
+
+rtDialogEvent::~rtDialogEvent()
+{
+ rtSafeDelete(m_pEvent);
+}
+
+
+/* ======================== rtStackEvent ========================*/
+rtISipEvent_Implement(rtStackEvent);
+
+rtStackEvent::rtStackEvent(const struct tsip_event_s *e)
+{
+ m_pEvent = new StackEvent(e);
+}
+
+rtStackEvent::~rtStackEvent()
+{
+ rtSafeDelete(m_pEvent);
+}
+
+
+ /* ======================== rtInviteEvent ========================*/
+rtISipEvent_Implement(rtInviteEvent);
+
+rtInviteEvent::rtInviteEvent(const struct tsip_event_s *e)
+{
+ m_pEvent = new InviteEvent(e);
+}
+
+rtInviteEvent::~rtInviteEvent()
+{
+ rtSafeDelete(m_pEvent);
+}
+
+rt_tsip_invite_event_type_t rtInviteEvent::getType()
+{
+ return (rt_tsip_invite_event_type_t)m_pEvent->getType();
+}
+
+rt_twrap_media_type_t rtInviteEvent::getMediaType()
+{
+ return (rt_twrap_media_type_t)m_pEvent->getMediaType();
+}
+
+rt_getSession_Implement(Invite);
+rt_takeOwnership_Implement(Invite, Call, CallSession);
+rt_takeOwnership_Implement(Invite, Msrp, MsrpSession);
+
+/* ======================== rtMessagingEvent ========================*/
+rtISipEvent_Implement(rtMessagingEvent);
+
+rtMessagingEvent::rtMessagingEvent(const struct tsip_event_s *e)
+{
+ m_pEvent = new MessagingEvent(e);
+}
+
+
+rtMessagingEvent::~rtMessagingEvent()
+{
+ rtSafeDelete(m_pEvent);
+}
+
+rt_tsip_message_event_type_t rtMessagingEvent::getType()
+{
+ return (rt_tsip_message_event_type_t)m_pEvent->getType();
+}
+
+rt_getSession_Implement(Messaging);
+rt_takeOwnership_Implement(Messaging, Messaging, Session);
+
+
+/* ======================== rtInfoEvent ========================*/
+rtISipEvent_Implement(rtInfoEvent);
+
+rtInfoEvent::rtInfoEvent(const struct tsip_event_s *e)
+{
+ m_pEvent = new InfoEvent(e);
+}
+
+rtInfoEvent::~rtInfoEvent()
+{
+ rtSafeDelete(m_pEvent);
+}
+
+rt_tsip_info_event_type_t rtInfoEvent::getType()
+{
+ return (rt_tsip_info_event_type_t)m_pEvent->getType();
+}
+
+rt_getSession_Implement(Info);
+rt_takeOwnership_Implement(Info, Info, Session);
+
+
+/* ======================== rtOptionsEvent ========================*/
+rtISipEvent_Implement(rtOptionsEvent);
+
+rtOptionsEvent::rtOptionsEvent(const struct tsip_event_s *e)
+{
+ m_pEvent = new OptionsEvent(e);
+}
+
+rtOptionsEvent::~rtOptionsEvent()
+{
+ rtSafeDelete(m_pEvent);
+}
+
+rt_tsip_options_event_type_t rtOptionsEvent::getType()
+{
+ return (rt_tsip_options_event_type_t)m_pEvent->getType();
+}
+
+rt_getSession_Implement(Options);
+rt_takeOwnership_Implement(Options, Options, Session);
+
+
+/* ======================== rtPublicationEvent ========================*/
+rtISipEvent_Implement(rtPublicationEvent);
+
+rtPublicationEvent::rtPublicationEvent(const struct tsip_event_s *e)
+{
+ m_pEvent = new PublicationEvent(e);
+}
+
+rtPublicationEvent::~rtPublicationEvent()
+{
+ rtSafeDelete(m_pEvent);
+}
+
+rt_tsip_publish_event_type_t rtPublicationEvent::getType()
+{
+ return (rt_tsip_publish_event_type_t)m_pEvent->getType();
+}
+
+rt_getSession_Implement(Publication);
+rt_takeOwnership_Implement(Publication, Publication, Session);
+
+
+
+/* ======================== rtRegistrationEvent ========================*/
+rtISipEvent_Implement(rtRegistrationEvent);
+
+rtRegistrationEvent::rtRegistrationEvent(const struct tsip_event_s *e)
+{
+ m_pEvent = new RegistrationEvent(e);
+}
+
+rtRegistrationEvent::~rtRegistrationEvent()
+{
+ rtSafeDelete(m_pEvent);
+}
+
+rt_tsip_register_event_type_t rtRegistrationEvent::getType()
+{
+ return (rt_tsip_register_event_type_t)m_pEvent->getType();
+}
+
+rt_getSession_Implement(Registration);
+rt_takeOwnership_Implement(Registration, Registration, Session);
+
+
+/* ======================== rtSubscriptionEvent ========================*/
+rtISipEvent_Implement(rtSubscriptionEvent);
+
+rtSubscriptionEvent::rtSubscriptionEvent(const struct tsip_event_s *e)
+{
+ m_pEvent = new SubscriptionEvent(e);
+}
+
+rtSubscriptionEvent::~rtSubscriptionEvent()
+{
+ rtSafeDelete(m_pEvent);
+}
+
+rt_tsip_subscribe_event_type_t rtSubscriptionEvent::getType()
+{
+ return (rt_tsip_subscribe_event_type_t)m_pEvent->getType();
+}
+
+rt_getSession_Implement(Subscription);
+rt_takeOwnership_Implement(Subscription, Subscription, Session); \ No newline at end of file
diff --git a/bindings/winrt/doubango_rt/src/rt_SipMessage.cxx b/bindings/winrt/doubango_rt/src/rt_SipMessage.cxx
new file mode 100644
index 0000000..55e05d9
--- /dev/null
+++ b/bindings/winrt/doubango_rt/src/rt_SipMessage.cxx
@@ -0,0 +1,171 @@
+/*Copyright (C) 2013 Doubango Telecom <http://www.doubango.org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*/
+#include "rt_SipMessage.h"
+#include "rt_String.h"
+
+#include "SipMessage.h"
+
+using namespace doubango_rt::BackEnd;
+using namespace Platform;
+using namespace std;
+
+//
+// rtSdpMessage
+//
+
+rtSdpMessage::rtSdpMessage()
+ :m_pSdpMessage(NULL)
+{
+}
+
+rtSdpMessage::rtSdpMessage(struct tsdp_message_s *message)
+{
+ m_pSdpMessage = new SdpMessage(message);
+}
+
+rtSdpMessage::~rtSdpMessage()
+{
+ rtSafeDelete(m_pSdpMessage);
+}
+
+String^ rtSdpMessage::getSdpHeaderValue(String^ media, String^ name, unsigned index)
+{
+ if(m_pSdpMessage)
+ {
+ char * _str = m_pSdpMessage->getSdpHeaderValue
+ (rtString::toUtf8(media).data(),
+ rtString::toUtf8(media).data()[0],
+ index);
+ String^ str = rtString::toString(_str);
+ TSK_FREE(str);
+ return str;
+ }
+ return nullptr;
+}
+
+String^ rtSdpMessage::getSdpHeaderValue(String^ media, String^ name)
+{
+ return getSdpHeaderValue(media, name, 0);
+}
+
+String^ rtSdpMessage::getSdpHeaderAValue(String^ media, String^ attributeName)
+{
+ if(m_pSdpMessage)
+ {
+ char * _str = m_pSdpMessage->getSdpHeaderAValue
+ (rtString::toUtf8(media).data(),
+ rtString::toUtf8(attributeName).data());
+ String^ str = rtString::toString(_str);
+ TSK_FREE(str);
+ return str;
+ }
+ return nullptr;
+}
+
+//
+// rtSipMessage
+//
+
+rtSipMessage::rtSipMessage()
+ :m_pSipMessage(NULL)
+{
+}
+
+rtSipMessage::rtSipMessage(struct tsip_message_s* message)
+{
+ m_pSipMessage = new SipMessage(message);
+}
+
+rtSipMessage::~rtSipMessage()
+{
+ rtSafeDelete(m_pSipMessage);
+}
+
+bool rtSipMessage::isResponse()
+{
+ return m_pSipMessage ? m_pSipMessage->isResponse() : false;
+}
+
+rt_tsip_request_type_t rtSipMessage::getRequestType()
+{
+ return (rt_tsip_request_type_t)(m_pSipMessage ? m_pSipMessage->getRequestType() : 0);
+}
+
+short rtSipMessage::getResponseCode()
+{
+ return m_pSipMessage ? m_pSipMessage->getResponseCode() : 0;
+}
+
+String^ rtSipMessage::getResponsePhrase()
+{
+ return m_pSipMessage ? rtString::toString(m_pSipMessage->getResponsePhrase()) : nullptr;
+}
+
+String^ rtSipMessage::getSipHeaderValue(String^ name, unsigned index)
+{
+ return m_pSipMessage ? rtString::toString(m_pSipMessage->getSipHeaderValue(rtString::toUtf8(name).data(), index)) : nullptr;
+}
+
+String^ rtSipMessage::getSipHeaderValue(String^ name)
+{
+ return getSipHeaderValue(name, 0);
+}
+
+String^ rtSipMessage::getSipHeaderParamValue(String^ name, String^ param, unsigned index)
+{
+ return m_pSipMessage ? rtString::toString(m_pSipMessage->getSipHeaderParamValue(rtString::toUtf8(name).data(), rtString::toUtf8(param).data(), index)) : nullptr;
+}
+
+String^ rtSipMessage::getSipHeaderParamValue(String^ name, String^ param)
+{
+ return getSipHeaderParamValue(name, param, 0);
+}
+
+unsigned rtSipMessage::getSipContentLength()
+{
+ return m_pSipMessage ? m_pSipMessage->getSipContentLength() : 0;
+}
+
+#if COM_VISIBLE
+String^ rtSipMessage::getSipContent()
+{
+ unsigned len = getSipContentLength();
+ if(len > 0)
+ {
+ void* data_ptr = calloc(len, 1);
+ if(data_ptr)
+ {
+ m_pSipMessage->getSipContent(data_ptr, len);
+ String^ s = rtString::toString((const char*)data_ptr);
+ free(data_ptr);
+ return s;
+ }
+ }
+ return nullptr;
+}
+#else
+unsigned rtSipMessage::getSipContent(IntPtr output, unsigned maxsize)
+{
+ return m_pSipMessage ? m_pSipMessage->getSipContent((void*)output, maxsize) : 0;
+}
+#endif
+
+rtSdpMessage^ rtSipMessage::getSdpMessage()
+{
+ return m_pSipMessage ? ref new rtSdpMessage(const_cast<struct tsdp_message_s *>(const_cast<SdpMessage*>(m_pSipMessage->getSdpMessage())->getWrappedSdpMessage())) : nullptr;
+} \ No newline at end of file
diff --git a/bindings/winrt/doubango_rt/src/rt_SipSession.cxx b/bindings/winrt/doubango_rt/src/rt_SipSession.cxx
new file mode 100644
index 0000000..872a2e2
--- /dev/null
+++ b/bindings/winrt/doubango_rt/src/rt_SipSession.cxx
@@ -0,0 +1,662 @@
+/*Copyright (C) 2013 Doubango Telecom <http://www.doubango.org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*/
+#include "rt_SipSession.h"
+#include "rt_String.h"
+#include "rt_SipStack.h"
+#include "rt_SipUri.h"
+#include "rt_Msrp.h"
+
+#include "SipSession.h"
+#include "MediaSessionMgr.h"
+
+using namespace doubango_rt::BackEnd;
+using namespace Platform;
+using namespace std;
+
+/* ======================== T140Callback ========================*/
+rtT140CallbackData::rtT140CallbackData(enum tmedia_t140_data_type_e data_type, const void* data_ptr, unsigned data_size)
+{
+ m_pData = new T140CallbackData(data_type, data_ptr, data_size);
+}
+
+rtT140CallbackData::~rtT140CallbackData()
+{
+ rtSafeDelete(m_pData);
+}
+
+/* ======================== rtT140Callback ========================*/
+
+rtT140Callback::rtT140Callback()
+{
+ m_pCallback = new T140Callback();
+}
+
+rtT140Callback::~rtT140Callback()
+{
+ rtSafeDelete(m_pCallback);
+}
+
+/* ======================== rtSipSession ========================*/
+rtISession_Implement(rtSipSession);
+
+rtSipSession::rtSipSession(rtSipStack^ pStack)
+{
+ m_pSipSession = new SipSession(const_cast<SipStack*>(pStack->getWrappedStack()));
+}
+
+rtSipSession::rtSipSession(SipStack* pStack, tsip_ssession_handle_t* pHandle)
+{
+ m_pSipSession = new SipSession(pStack, pHandle);
+}
+
+rtSipSession::~rtSipSession()
+{
+ rtSafeDelete(m_pSipSession);
+}
+
+
+/* ======================== rtInviteSession ========================*/
+rtISession_Implement(rtInviteSession);
+rtIInviteSession_Implement(rtInviteSession);
+
+rtInviteSession::rtInviteSession(rtSipStack^ pStack)
+{
+ m_pSipSession = new InviteSession(const_cast<SipStack*>(pStack->getWrappedStack()));
+}
+
+rtInviteSession::rtInviteSession(SipStack* pStack, tsip_ssession_handle_t* pHandle)
+{
+ m_pSipSession = new InviteSession(pStack, pHandle);
+}
+
+rtInviteSession::~rtInviteSession()
+{
+ rtSafeDelete(m_pSipSession);
+}
+
+
+/* ======================== rtCallSession ========================*/
+rtISession_Implement(rtCallSession);
+rtIInviteSession_Implement(rtCallSession);
+
+rtCallSession::rtCallSession(rtSipStack^ pStack)
+{
+ m_pSipSession = new CallSession(const_cast<SipStack*>(pStack->getWrappedStack()));
+}
+
+rtCallSession::rtCallSession(SipStack* pStack, tsip_ssession_handle_t* pHandle)
+{
+ m_pSipSession = new CallSession(pStack, pHandle);
+}
+
+rtCallSession::~rtCallSession()
+{
+ rtSafeDelete(m_pSipSession);
+}
+
+
+bool rtCallSession::call(String^ remoteUriString, rt_twrap_media_type_t media, rtActionConfig^ config)
+{
+ return m_pSipSession->call(rtString::toUtf8(remoteUriString).data(), (twrap_media_type_t)media, config ? config->getWrappedActionConfig() : tsk_null);
+
+}
+
+bool rtCallSession::call(String^ remoteUriString, rt_twrap_media_type_t media)
+{
+ return call(remoteUriString, media, nullptr);
+}
+
+bool rtCallSession::call(rtSipUri^ remoteUri, rt_twrap_media_type_t media, rtActionConfig^ config)
+{
+ return m_pSipSession->call(remoteUri->getWrappedUri(), (twrap_media_type_t)media, config ? config->getWrappedActionConfig() : tsk_null);
+}
+
+bool rtCallSession::call(rtSipUri^ remoteUri, rt_twrap_media_type_t media)
+{
+ return call(remoteUri, media, nullptr);
+}
+
+bool rtCallSession::setSessionTimer(unsigned timeout, String^ refresher)
+{
+ return m_pSipSession->setSessionTimer(timeout, rtString::toUtf8(refresher).data());
+}
+
+bool rtCallSession::set100rel(bool enabled)
+{
+ return m_pSipSession->set100rel(enabled);
+}
+
+bool rtCallSession::setRtcp(bool enabled)
+{
+ return m_pSipSession->setRtcp(enabled);
+}
+
+bool rtCallSession::setRtcpMux(bool enabled)
+{
+ return m_pSipSession->setRtcpMux(enabled);
+}
+
+bool rtCallSession::setICE(bool enabled)
+{
+ return m_pSipSession->setICE(enabled);
+}
+
+bool rtCallSession::setQoS(rt_tmedia_qos_stype_t type, rt_tmedia_qos_strength_t strength)
+{
+ return m_pSipSession->setQoS((tmedia_qos_stype_t) type, (tmedia_qos_strength_t) strength);
+}
+
+bool rtCallSession::setVideoFps(int32_t fps)
+{
+ return m_pSipSession->setVideoFps(fps);
+}
+
+bool rtCallSession::setVideoBandwidthUploadMax(int32_t max)
+{
+ return m_pSipSession->setVideoBandwidthUploadMax(max);
+}
+
+bool rtCallSession::setVideoBandwidthDownloadMax(int32_t max)
+{
+ return m_pSipSession->setVideoBandwidthDownloadMax(max);
+}
+
+bool rtCallSession::setVideoPrefSize(rt_tmedia_pref_video_size_t pref_video_size)
+{
+ return m_pSipSession->setVideoPrefSize((tmedia_pref_video_size_t)pref_video_size);
+}
+
+bool rtCallSession::hold(rtActionConfig^ config)
+{
+ return m_pSipSession->hold(config ? config->getWrappedActionConfig() : tsk_null);
+}
+
+bool rtCallSession::hold()
+{
+ return hold(nullptr);
+}
+
+bool rtCallSession::resume(rtActionConfig^ config)
+{
+ return m_pSipSession->resume(config ? config->getWrappedActionConfig() : tsk_null);
+}
+
+bool rtCallSession::resume()
+{
+ return resume(nullptr);
+}
+
+bool rtCallSession::transfer(String^ referToUriString, rtActionConfig^ config)
+{
+ return m_pSipSession->transfer(rtString::toUtf8(referToUriString).data(), config ? config->getWrappedActionConfig() : tsk_null);
+}
+
+bool rtCallSession::transfer(String^ referToUriString)
+{
+ return transfer(referToUriString, nullptr);
+}
+
+bool rtCallSession::acceptTransfer(rtActionConfig^ config)
+{
+ return m_pSipSession->acceptTransfer(config ? config->getWrappedActionConfig() : tsk_null);
+}
+
+bool rtCallSession::acceptTransfer()
+{
+ return acceptTransfer(nullptr);
+}
+
+bool rtCallSession::rejectTransfer(rtActionConfig^ config)
+{
+ return m_pSipSession->rejectTransfer(config ? config->getWrappedActionConfig() : tsk_null);
+}
+
+bool rtCallSession::rejectTransfer()
+{
+ return rejectTransfer(nullptr);
+}
+
+bool rtCallSession::sendDTMF(int number)
+{
+ return m_pSipSession->sendDTMF(number);
+}
+
+unsigned rtCallSession::getSessionTransferId()
+{
+ return m_pSipSession->getSessionTransferId();
+}
+
+#if COM_VISIBLE
+bool rtCallSession::sendT140Data(rt_tmedia_t140_data_type_t data_type, String^ data)
+{
+ std::vector<char> _data = rtString::toUtf8(data);
+ return m_pSipSession->sendT140Data((tmedia_t140_data_type_t) data_type, (const void*)_data.data(), _data.size());
+}
+#else
+bool rtCallSession::sendT140Data(rt_tmedia_t140_data_type_t data_type, IntPtr data_ptr, unsigned data_size)
+{
+ return m_pSipSession->sendT140Data((tmedia_t140_data_type_t) data_type, (const void*)data_ptr, data_size);
+}
+
+#endif
+
+bool rtCallSession::sendT140Data(rt_tmedia_t140_data_type_t data_type)
+{
+ return sendT140Data(data_type, nullptr
+#if !COM_VISIBLE
+ , 0
+#endif
+ );
+}
+
+bool rtCallSession::setT140Callback(rtT140Callback^ pT140Callback)
+{
+ return m_pSipSession->setT140Callback(const_cast<T140Callback*>(pT140Callback->getWrappedCallback()));
+}
+
+
+/* ======================== rtMsrpSession ========================*/
+rtISession_Implement(rtMsrpSession);
+rtIInviteSession_Implement(rtMsrpSession);
+
+rtMsrpSession::rtMsrpSession(rtSipStack^ pStack, rtIMsrpCallback^ pCallback)
+{
+ m_pCallback = ref new rtMsrpCallback(pCallback);
+ m_pSipSession = new MsrpSession(const_cast<SipStack*>(pStack->getWrappedStack()), const_cast<MsrpCallback*>(m_pCallback->getWrappedCallback()));
+}
+
+rtMsrpSession::rtMsrpSession(SipStack* pStack, tsip_ssession_handle_t* pHandle)
+{
+ m_pSipSession = new MsrpSession(pStack, pHandle);
+}
+
+rtMsrpSession::~rtMsrpSession()
+{
+ rtSafeDelete(m_pSipSession);
+ rtSafeDelete(m_pCallback);
+}
+
+bool rtMsrpSession::setCallback(rtIMsrpCallback^ pCallback)
+{
+ rtSafeDelete(m_pCallback);
+ if(!pCallback)
+ {
+ return m_pSipSession->setCallback(tsk_null);
+ return true;
+ }
+ m_pCallback = ref new rtMsrpCallback(pCallback);
+ return m_pSipSession->setCallback(const_cast<MsrpCallback*>(m_pCallback->getWrappedCallback()));
+}
+
+bool rtMsrpSession::callMsrp(Platform::String^ remoteUriString, rtActionConfig^ config)
+{
+ return m_pSipSession->callMsrp(rtString::toUtf8(remoteUriString).data(), config ? config->getWrappedActionConfig() : tsk_null);
+}
+
+bool rtMsrpSession::callMsrp(Platform::String^ remoteUriString)
+{
+ return callMsrp(remoteUriString, nullptr);
+}
+
+bool rtMsrpSession::callMsrp(rtSipUri^ remoteUri, rtActionConfig^ config)
+{
+ return m_pSipSession->callMsrp(remoteUri->getWrappedUri(), config ? config->getWrappedActionConfig() : tsk_null);
+}
+
+bool rtMsrpSession::callMsrp(rtSipUri^ remoteUri)
+{
+ return callMsrp(remoteUri, nullptr);
+}
+
+#if COM_VISIBLE
+bool rtMsrpSession::sendMessage(String^ payload, rtActionConfig^ config)
+{
+ std::vector<char> _payload = rtString::toUtf8(payload);
+ return m_pSipSession->sendMessage((const void*)_payload.data(), _payload.size(), config ? config->getWrappedActionConfig() : tsk_null);
+}
+
+bool rtMsrpSession::sendMessage(Platform::String^ payload)
+{
+ return sendMessage(payload, nullptr);
+}
+
+#else
+bool rtMsrpSession::sendMessage(Platform::IntPtr payload, unsigned len, rtActionConfig^ config)
+{
+ return m_pSipSession->sendMessage((const void*)payload, len, config ? config->getWrappedActionConfig() : tsk_null);
+}
+
+bool rtMsrpSession::sendMessage(Platform::IntPtr payload, unsigned len)
+{
+ return sendMessage(payload, len, nullptr);
+}
+#endif /* COM_VISIBLE */
+
+
+/* ======================== rtMessagingSession ========================*/
+rtISession_Implement(rtMessagingSession);
+
+rtMessagingSession::rtMessagingSession(SipStack* pStack, tsip_ssession_handle_t* pHandle)
+{
+ m_pSipSession = new MessagingSession(pStack, pHandle);
+}
+
+rtMessagingSession::rtMessagingSession(rtSipStack^ pStack)
+{
+ m_pSipSession = new MessagingSession(const_cast<SipStack*>(pStack->getWrappedStack()));
+}
+
+rtMessagingSession::~rtMessagingSession()
+{
+ rtSafeDelete(m_pSipSession);
+}
+
+#if COM_VISIBLE
+bool rtMessagingSession::send(String^ payload, rtActionConfig^ config)
+{
+ std::vector<char>_payload = rtString::toUtf8(payload);
+ return m_pSipSession->send((const void*)_payload.data(), _payload.size(), config ? config->getWrappedActionConfig() : tsk_null);
+}
+
+bool rtMessagingSession::send(Platform::String^ payload)
+{
+ return send(payload, nullptr);
+}
+
+#else
+bool rtMessagingSession::send(IntPtr payload, unsigned len, rtActionConfig^ config)
+{
+ return m_pSipSession->send((const void*)payload, len, config ? config->getWrappedActionConfig() : tsk_null);
+}
+
+bool rtMessagingSession::send(IntPtr payload, unsigned len)
+{
+ return send(payload, len, nullptr);
+}
+#endif
+
+bool rtMessagingSession::accept(rtActionConfig^ config)
+{
+ return m_pSipSession->accept(config ? config->getWrappedActionConfig() : tsk_null);
+}
+
+bool rtMessagingSession::accept()
+{
+ return accept(nullptr);
+}
+
+bool rtMessagingSession::reject(rtActionConfig^ config)
+{
+ return m_pSipSession->reject(config ? config->getWrappedActionConfig() : tsk_null);
+}
+
+bool rtMessagingSession::reject()
+{
+ return reject(nullptr);
+}
+
+/* ======================== rtInfoSession ========================*/
+rtISession_Implement(rtInfoSession);
+
+rtInfoSession::rtInfoSession(SipStack* pStack, tsip_ssession_handle_t* pHandle)
+{
+ m_pSipSession = new InfoSession(pStack, pHandle);
+}
+
+rtInfoSession::rtInfoSession(rtSipStack^ pStack)
+{
+ m_pSipSession = new InfoSession(const_cast<SipStack*>(pStack->getWrappedStack()));
+}
+
+rtInfoSession::~rtInfoSession()
+{
+ rtSafeDelete(m_pSipSession);
+}
+
+#if COM_VISIBLE
+bool rtInfoSession::send(Platform::String^ payload, rtActionConfig^ config)
+{
+ std::vector<char>_payload = rtString::toUtf8(payload);
+ return m_pSipSession->send((const void*)_payload.data(), _payload.size(), config ? config->getWrappedActionConfig() : tsk_null);
+}
+
+bool rtInfoSession::send(Platform::String^ payload)
+{
+ return send(payload, nullptr);
+}
+#else
+bool rtInfoSession::send(IntPtr payload, unsigned len, rtActionConfig^ config)
+{
+ return m_pSipSession->send((const void*)payload, len, config ? config->getWrappedActionConfig() : tsk_null);
+}
+
+bool rtInfoSession::send(IntPtr payload, unsigned len)
+{
+ return send(payload, len, nullptr);
+}
+#endif
+
+bool rtInfoSession::accept(rtActionConfig^ config)
+{
+ return m_pSipSession->accept(config ? config->getWrappedActionConfig() : tsk_null);
+}
+
+bool rtInfoSession::accept()
+{
+ return accept(nullptr);
+}
+
+bool rtInfoSession::reject(rtActionConfig^ config)
+{
+ return m_pSipSession->reject(config ? config->getWrappedActionConfig() : tsk_null);
+}
+
+bool rtInfoSession::reject()
+{
+ return reject(nullptr);
+}
+
+
+
+/* ======================== rtOptionsSession ========================*/
+rtISession_Implement(rtOptionsSession);
+
+rtOptionsSession::rtOptionsSession(SipStack* pStack, tsip_ssession_handle_t* pHandle)
+{
+ m_pSipSession = new OptionsSession(pStack, pHandle);
+}
+
+rtOptionsSession::rtOptionsSession(rtSipStack^ pStack)
+{
+ m_pSipSession = new OptionsSession(const_cast<SipStack*>(pStack->getWrappedStack()));
+}
+
+rtOptionsSession::~rtOptionsSession()
+{
+ rtSafeDelete(m_pSipSession);
+}
+
+bool rtOptionsSession::send(rtActionConfig^ config)
+{
+ return m_pSipSession->send(config ? config->getWrappedActionConfig() : tsk_null);
+}
+
+bool rtOptionsSession::send()
+{
+ return send(nullptr);
+}
+
+bool rtOptionsSession::accept(rtActionConfig^ config)
+{
+ return m_pSipSession->accept(config ? config->getWrappedActionConfig() : tsk_null);
+}
+
+bool rtOptionsSession::accept()
+{
+ return accept(nullptr);
+}
+
+bool rtOptionsSession::reject(rtActionConfig^ config)
+{
+ return m_pSipSession->reject(config ? config->getWrappedActionConfig() : tsk_null);
+}
+
+bool rtOptionsSession::reject()
+{
+ return reject(nullptr);
+}
+
+
+
+/* ======================== rtPublicationSession ========================*/
+rtISession_Implement(rtPublicationSession);
+
+rtPublicationSession::rtPublicationSession(rtSipStack^ pStack)
+{
+ m_pSipSession = new PublicationSession(const_cast<SipStack*>(pStack->getWrappedStack()));
+}
+
+rtPublicationSession::rtPublicationSession(SipStack* pStack, tsip_ssession_handle_t* pHandle)
+{
+ m_pSipSession = new PublicationSession(pStack, pHandle);
+}
+
+rtPublicationSession::~rtPublicationSession()
+{
+ rtSafeDelete(m_pSipSession);
+}
+
+#if COM_VISIBLE
+bool rtPublicationSession::publish(String^ payload, rtActionConfig^ config)
+{
+ std::vector<char>_payload = rtString::toUtf8(payload);
+ return m_pSipSession->publish((const void*)_payload.data(), _payload.size(), config ? config->getWrappedActionConfig() : tsk_null);
+}
+bool rtPublicationSession::publish(Platform::String^ payload)
+{
+ return publish(payload, nullptr);
+}
+#else
+bool rtPublicationSession::publish(Platform::IntPtr payload, unsigned len, rtActionConfig^ config)
+{
+ return m_pSipSession->publish((const void*)payload, len, config ? config->getWrappedActionConfig() : tsk_null);
+}
+
+bool rtPublicationSession::publish(Platform::IntPtr payload, unsigned len)
+{
+ return publish(payload, len, nullptr);
+}
+#endif
+
+bool rtPublicationSession::unPublish(rtActionConfig^ config)
+{
+ return m_pSipSession->unPublish(config ? config->getWrappedActionConfig() : tsk_null);
+}
+
+bool rtPublicationSession::unPublish()
+{
+ return unPublish(nullptr);
+}
+
+
+/* ======================== rtRegistrationSession ========================*/
+rtISession_Implement(rtRegistrationSession);
+
+rtRegistrationSession::rtRegistrationSession(SipStack* pStack, tsip_ssession_handle_t* pHandle)
+{
+ m_pSipSession = new RegistrationSession(pStack, pHandle);
+}
+
+rtRegistrationSession::rtRegistrationSession(rtSipStack^ pStack)
+{
+ m_pSipSession = new RegistrationSession(const_cast<SipStack*>(pStack->getWrappedStack()));
+}
+
+rtRegistrationSession::~rtRegistrationSession()
+{
+ rtSafeDelete(m_pSipSession);
+}
+
+bool rtRegistrationSession::register_(rtActionConfig^ config)
+{
+ return m_pSipSession->register_(config ? config->getWrappedActionConfig() : tsk_null);
+}
+
+bool rtRegistrationSession::register_()
+{
+ return register_(nullptr);
+}
+
+bool rtRegistrationSession::unRegister(rtActionConfig^ config)
+{
+ return m_pSipSession->unRegister(config ? config->getWrappedActionConfig() : tsk_null);
+}
+
+bool rtRegistrationSession::unRegister()
+{
+ return unRegister(nullptr);
+}
+
+bool rtRegistrationSession::accept(rtActionConfig^ config)
+{
+ return m_pSipSession->accept(config ? config->getWrappedActionConfig() : tsk_null);
+}
+
+bool rtRegistrationSession::accept()
+{
+ return accept(nullptr);
+}
+
+bool rtRegistrationSession::reject(rtActionConfig^ config)
+{
+ return m_pSipSession->reject(config ? config->getWrappedActionConfig() : tsk_null);
+}
+
+bool rtRegistrationSession::reject()
+{
+ return reject(nullptr);
+}
+
+
+/* ======================== rtSubscriptionSession ========================*/
+rtISession_Implement(rtSubscriptionSession);
+
+rtSubscriptionSession::rtSubscriptionSession(rtSipStack^ pStack)
+{
+ m_pSipSession = new SubscriptionSession(const_cast<SipStack*>(pStack->getWrappedStack()));
+}
+
+rtSubscriptionSession::rtSubscriptionSession(SipStack* pStack, tsip_ssession_handle_t* pHandle)
+{
+ m_pSipSession = new SubscriptionSession(pStack, pHandle);
+}
+
+rtSubscriptionSession::~rtSubscriptionSession()
+{
+ rtSafeDelete(m_pSipSession);
+}
+
+bool rtSubscriptionSession::subscribe()
+{
+ return m_pSipSession->subscribe();
+}
+
+bool rtSubscriptionSession::unSubscribe()
+{
+ return m_pSipSession->unSubscribe();
+} \ No newline at end of file
diff --git a/bindings/winrt/doubango_rt/src/rt_SipStack.cxx b/bindings/winrt/doubango_rt/src/rt_SipStack.cxx
new file mode 100644
index 0000000..753a881
--- /dev/null
+++ b/bindings/winrt/doubango_rt/src/rt_SipStack.cxx
@@ -0,0 +1,390 @@
+/*Copyright (C) 2013 Doubango Telecom <http://www.doubango.org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*/
+#include "rt_SipStack.h"
+#include "rt_SipCallback.h"
+#include "rt_DDebug.h"
+#include "rt_String.h"
+#include "rt_Enums.h"
+
+#include "SipStack.h"
+
+
+using namespace doubango_rt::BackEnd;
+using namespace Platform;
+using namespace std;
+
+rtSipStack::rtSipStack(rtISipCallback^ callback, Platform::String^ realmUri, Platform::String^ impiString, Platform::String^ impuUri)
+{
+ m_pSipCallback = ref new rtSipCallback(callback);
+ m_pSipStack = new SipStack(
+ const_cast<SipCallback*>(m_pSipCallback->getWrappedCallback()),
+ rtString::toUtf8(realmUri).data(),
+ rtString::toUtf8(impiString).data(),
+ rtString::toUtf8(impuUri).data()
+ );
+}
+
+rtSipStack::~rtSipStack()
+{
+ std::lock_guard<std::recursive_mutex> lock(mLock);
+
+ rtSafeDelete(m_pSipStack);
+ rtSafeDelete(m_pSipCallback);
+ rtSafeDelete(m_pDebugCallback);
+}
+
+bool rtSipStack::start()
+{
+ std::lock_guard<std::recursive_mutex> lock(mLock);
+
+ return m_pSipStack->start();
+}
+
+bool rtSipStack::setDebugCallback(rtIDDebugCallback^ pCallback)
+{
+ std::lock_guard<std::recursive_mutex> lock(mLock);
+
+ m_pSipStack->setDebugCallback(tsk_null);
+ rtSafeDelete(m_pDebugCallback);
+ if(!pCallback)
+ {
+ return true;
+ }
+
+ m_pDebugCallback = ref new rtDDebugCallback(pCallback);
+ return m_pSipStack->setDebugCallback(const_cast<DDebugCallback*>(m_pDebugCallback->getWrappedCallback()));
+}
+
+bool rtSipStack::setDisplayName(Platform::String^ display_name)
+{
+ std::lock_guard<std::recursive_mutex> lock(mLock);
+
+ return m_pSipStack->setDisplayName(rtString::toUtf8(display_name).data());
+}
+
+bool rtSipStack::setRealm(Platform::String^ realm_uri)
+{
+ std::lock_guard<std::recursive_mutex> lock(mLock);
+
+ return m_pSipStack->setRealm(rtString::toUtf8(realm_uri).data());
+}
+
+bool rtSipStack::setIMPI(Platform::String^ impi)
+{
+ std::lock_guard<std::recursive_mutex> lock(mLock);
+
+ return m_pSipStack->setIMPI(rtString::toUtf8(impi).data());
+}
+
+bool rtSipStack::setIMPU(Platform::String^ impu_uri)
+{
+ std::lock_guard<std::recursive_mutex> lock(mLock);
+
+ return m_pSipStack->setIMPU(rtString::toUtf8(impu_uri).data());
+}
+
+bool rtSipStack::setPassword(Platform::String^ password)
+{
+ std::lock_guard<std::recursive_mutex> lock(mLock);
+
+ return m_pSipStack->setPassword(rtString::toUtf8(password).data());
+}
+
+bool rtSipStack::setAMF(Platform::String^ amf)
+{
+ std::lock_guard<std::recursive_mutex> lock(mLock);
+
+ return m_pSipStack->setAMF(rtString::toUtf8(amf).data());
+}
+
+bool rtSipStack::setOperatorId(Platform::String^ opid)
+{
+ std::lock_guard<std::recursive_mutex> lock(mLock);
+
+ return m_pSipStack->setOperatorId(rtString::toUtf8(opid).data());
+}
+
+
+bool rtSipStack::setProxyCSCF(Platform::String^ fqdn, unsigned short port, Platform::String^ transport, Platform::String^ ipversion)
+{
+ std::lock_guard<std::recursive_mutex> lock(mLock);
+
+ return m_pSipStack->setProxyCSCF(
+ rtString::toUtf8(fqdn).data(),
+ port,
+ rtString::toUtf8(transport).data(),
+ rtString::toUtf8(ipversion).data()
+ );
+}
+bool rtSipStack::setLocalIP(Platform::String^ ip, Platform::String^ transport)
+{
+ std::lock_guard<std::recursive_mutex> lock(mLock);
+
+ return m_pSipStack->setLocalIP(rtString::toUtf8(ip).data(), rtString::toUtf8(transport).data());
+}
+
+bool rtSipStack::setLocalIP(Platform::String^ ip)
+{
+ std::lock_guard<std::recursive_mutex> lock(mLock);
+
+ return m_pSipStack->setLocalIP(rtString::toUtf8(ip).data());
+}
+
+bool rtSipStack::setLocalPort(unsigned short port, Platform::String^ transport)
+{
+ return m_pSipStack->setLocalPort(port, rtString::toUtf8(transport).data());
+}
+
+bool rtSipStack::setLocalPort(unsigned short port)
+{
+ std::lock_guard<std::recursive_mutex> lock(mLock);
+
+ return m_pSipStack->setLocalPort(port);
+}
+
+bool rtSipStack::setEarlyIMS(bool enabled)
+{
+ std::lock_guard<std::recursive_mutex> lock(mLock);
+
+ return m_pSipStack->setEarlyIMS(enabled);
+}
+
+bool rtSipStack::addHeader(Platform::String^ name, Platform::String^ value)
+{
+ std::lock_guard<std::recursive_mutex> lock(mLock);
+
+ return m_pSipStack->addHeader(rtString::toUtf8(name).data(), rtString::toUtf8(value).data());
+}
+
+bool rtSipStack::removeHeader(Platform::String^ name)
+{
+ std::lock_guard<std::recursive_mutex> lock(mLock);
+
+ return m_pSipStack->removeHeader(rtString::toUtf8(name).data());
+}
+
+bool rtSipStack::addDnsServer(Platform::String^ ip)
+{
+ std::lock_guard<std::recursive_mutex> lock(mLock);
+
+ return m_pSipStack->removeHeader(rtString::toUtf8(ip).data());
+}
+
+bool rtSipStack::setDnsDiscovery(bool enabled)
+{
+ std::lock_guard<std::recursive_mutex> lock(mLock);
+
+ return m_pSipStack->setDnsDiscovery(enabled);
+}
+
+bool rtSipStack::setAoR(Platform::String^ ip, int port)
+{
+ std::lock_guard<std::recursive_mutex> lock(mLock);
+
+ return m_pSipStack->setAoR(rtString::toUtf8(ip).data(), port);
+}
+
+bool rtSipStack::setSigCompParams(unsigned dms, unsigned sms, unsigned cpb, bool enablePresDict)
+{
+ std::lock_guard<std::recursive_mutex> lock(mLock);
+
+ return m_pSipStack->setSigCompParams(dms, sms, cpb, enablePresDict);
+}
+
+bool rtSipStack::addSigCompCompartment(Platform::String^ compId)
+{
+ std::lock_guard<std::recursive_mutex> lock(mLock);
+
+ return m_pSipStack->addSigCompCompartment(rtString::toUtf8(compId).data());
+}
+
+bool rtSipStack::removeSigCompCompartment(Platform::String^ compId)
+{
+ std::lock_guard<std::recursive_mutex> lock(mLock);
+
+ return m_pSipStack->removeSigCompCompartment(rtString::toUtf8(compId).data());
+}
+
+bool rtSipStack::setSTUNServer(Platform::String^ ip, unsigned short port)
+{
+ std::lock_guard<std::recursive_mutex> lock(mLock);
+
+ return m_pSipStack->setSTUNServer(rtString::toUtf8(ip).data(), port);
+}
+
+bool rtSipStack::setSTUNCred(Platform::String^ login, Platform::String^ password)
+{
+ std::lock_guard<std::recursive_mutex> lock(mLock);
+
+ return m_pSipStack->setSTUNCred(rtString::toUtf8(login).data(), rtString::toUtf8(password).data());
+}
+
+bool rtSipStack::setTLSSecAgree(bool enabled)
+{
+ std::lock_guard<std::recursive_mutex> lock(mLock);
+
+ return m_pSipStack->setTLSSecAgree(enabled);
+}
+
+bool rtSipStack::setSSLCertificates(Platform::String^ privKey, Platform::String^ pubKey, Platform::String^ caKey, bool verify)
+{
+ std::lock_guard<std::recursive_mutex> lock(mLock);
+
+ return m_pSipStack->setSSLCertificates(rtString::toUtf8(privKey).data(), rtString::toUtf8(pubKey).data(), rtString::toUtf8(caKey).data(), verify);
+}
+
+bool rtSipStack::setSSLCertificates(Platform::String^ privKey, Platform::String^ pubKey, Platform::String^ caKey)
+{
+ std::lock_guard<std::recursive_mutex> lock(mLock);
+
+ return setSSLCertificates(privKey, pubKey, caKey, false);
+}
+
+bool rtSipStack::setIPSecSecAgree(bool enabled)
+{
+ std::lock_guard<std::recursive_mutex> lock(mLock);
+
+ return m_pSipStack->setIPSecSecAgree(enabled);
+}
+
+bool rtSipStack::setIPSecParameters(Platform::String^ algo, Platform::String^ ealgo, Platform::String^ mode, Platform::String^ proto)
+{
+ std::lock_guard<std::recursive_mutex> lock(mLock);
+
+ return m_pSipStack->setIPSecParameters(rtString::toUtf8(algo).data(), rtString::toUtf8(ealgo).data(), rtString::toUtf8(mode).data(), rtString::toUtf8(proto).data());
+}
+
+Platform::String^ rtSipStack::dnsENUM(Platform::String^ service, Platform::String^ e164num, Platform::String^ domain)
+{
+ std::lock_guard<std::recursive_mutex> lock(mLock);
+
+ return rtString::toString(m_pSipStack->dnsENUM(rtString::toUtf8(service).data(), rtString::toUtf8(e164num).data(), rtString::toUtf8(domain).data()));
+}
+
+#if COM_VISIBLE
+rtDnsResult^ rtSipStack::dnsNaptrSrv(String^ domain, String^ service)
+{
+ std::lock_guard<std::recursive_mutex> lock(mLock);
+
+ unsigned short _port = 0;
+ String^ address = rtString::toString(m_pSipStack->dnsNaptrSrv(rtString::toUtf8(domain).data(), rtString::toUtf8(service).data(), &_port));
+ return ref new rtDnsResult(_port, address);
+}
+
+rtDnsResult^ rtSipStack::dnsSrv(String^ service)
+{
+ std::lock_guard<std::recursive_mutex> lock(mLock);
+
+ unsigned short _port = 0;
+ String^ address = rtString::toString(m_pSipStack->dnsSrv(rtString::toUtf8(service).data(), &_port));
+ return ref new rtDnsResult(_port, address);
+}
+
+String^ rtSipStack::getLocalIP(String^ protocol)
+{
+ std::lock_guard<std::recursive_mutex> lock(mLock);
+
+ char* _ip = m_pSipStack->getLocalIPnPort(rtString::toUtf8(protocol).data(), tsk_null);
+ String^ ip = rtString::toString(_ip);
+ TSK_FREE(_ip);
+ return ip;
+}
+
+uint16 rtSipStack::getLocalPort(String^ protocol)
+{
+ std::lock_guard<std::recursive_mutex> lock(mLock);
+
+ uint16 port = 0;
+ char* _ip = m_pSipStack->getLocalIPnPort(rtString::toUtf8(protocol).data(), &port);
+ TSK_FREE(_ip);
+ return port;
+}
+#else
+String^ rtSipStack::dnsNaptrSrv(String^ domain, String^ service, IntPtr port)
+{
+ std::lock_guard<std::recursive_mutex> lock(mLock);
+
+ return rtString::toString(m_pSipStack->dnsNaptrSrv(rtString::toUtf8(domain).data(), rtString::toUtf8(service).data(), ((unsigned short*)(void*)port)));
+}
+
+String^ rtSipStack::dnsSrv(String^ service, IntPtr port)
+{
+ std::lock_guard<std::recursive_mutex> lock(mLock);
+
+ return rtString::toString(m_pSipStack->dnsSrv(rtString::toUtf8(service).data(), ((unsigned short*)(void*)port)));
+}
+
+Platform::String^ rtSipStack::getLocalIPnPort(String^ protocol, IntPtr port)
+{
+ std::lock_guard<std::recursive_mutex> lock(mLock);
+
+ char* _ip = m_pSipStack->getLocalIPnPort(rtString::toUtf8(protocol).data(), ((unsigned short*)(void*)port));
+ String^ ip = rtString::toString();
+ TSK_FREE(_ip);
+ return ip;
+}
+#endif /* COM_VISIBLE */
+
+Platform::String^ rtSipStack::getPreferredIdentity()
+{
+ std::lock_guard<std::recursive_mutex> lock(mLock);
+
+ return rtString::toString(m_pSipStack->getPreferredIdentity());
+}
+
+bool rtSipStack::isValid()
+{
+ std::lock_guard<std::recursive_mutex> lock(mLock);
+
+ return m_pSipStack->isValid();
+}
+
+bool rtSipStack::stop()
+{
+ std::lock_guard<std::recursive_mutex> lock(mLock);
+
+ return m_pSipStack->stop();
+}
+
+bool rtSipStack::initialize()
+{
+ return SipStack::initialize();
+}
+
+bool rtSipStack::deInitialize()
+{
+ return SipStack::deInitialize();
+}
+
+void rtSipStack::setCodecs(enum class rt_tdav_codec_id_t codecs)
+{
+ return SipStack::setCodecs((tdav_codec_id_t) codecs);
+}
+
+bool rtSipStack::setCodecPriority(enum class rt_tdav_codec_id_t codec_id, int priority)
+{
+ return SipStack::setCodecPriority((tdav_codec_id_t)codec_id, priority);
+}
+
+bool rtSipStack::isCodecSupported(enum class rt_tdav_codec_id_t codec_id)
+{
+ return SipStack::isCodecSupported((tdav_codec_id_t) codec_id);
+}
+
+
+
diff --git a/bindings/winrt/doubango_rt/src/rt_SipUri.cxx b/bindings/winrt/doubango_rt/src/rt_SipUri.cxx
new file mode 100644
index 0000000..1398325
--- /dev/null
+++ b/bindings/winrt/doubango_rt/src/rt_SipUri.cxx
@@ -0,0 +1,103 @@
+/*Copyright (C) 2013 Doubango Telecom <http://www.doubango.org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*/
+#include "rt_SipUri.h"
+#include "rt_String.h"
+
+#include "SipUri.h"
+
+using namespace doubango_rt::BackEnd;
+using namespace Platform;
+using namespace std;
+
+
+rtSipUri::rtSipUri(Platform::String^ uriString, Platform::String^ displayName)
+{
+ m_pSipUri = new SipUri(
+ rtString::toUtf8(uriString).data(),
+ rtString::toUtf8(displayName).data());
+}
+
+rtSipUri::rtSipUri(Platform::String^ uriString)
+{
+ m_pSipUri = new SipUri(rtString::toUtf8(uriString).data());
+}
+
+rtSipUri::~rtSipUri()
+{
+ rtSafeDelete(m_pSipUri);
+}
+
+bool rtSipUri::isValid(Platform::String^ uri)
+{
+ return SipUri::isValid(rtString::toUtf8(uri).data());
+}
+
+// MIDL4069: Static members and instance members cannot have the same name on a runtime class. isValid
+
+#if COM_VISIBLE
+bool rtSipUri::isValid_()
+#else
+bool rtSipUri::isValid()
+#endif
+{
+ return (m_pSipUri && m_pSipUri->isValid());
+}
+
+Platform::String^ rtSipUri::getScheme()
+{
+ return m_pSipUri ? rtString::toString(m_pSipUri->getScheme()) : nullptr;
+}
+
+Platform::String^ rtSipUri::getHost()
+{
+ return m_pSipUri ? rtString::toString(m_pSipUri->getHost()) : nullptr;
+}
+
+unsigned short rtSipUri::getPort()
+{
+ return m_pSipUri ? m_pSipUri->getPort() : 0;
+}
+
+Platform::String^ rtSipUri::getUserName()
+{
+ return m_pSipUri ? rtString::toString(m_pSipUri->getUserName()) : nullptr;
+}
+
+Platform::String^ rtSipUri::getPassword()
+{
+ return m_pSipUri ? rtString::toString(m_pSipUri->getPassword()) : nullptr;
+}
+
+Platform::String^ rtSipUri::getDisplayName()
+{
+ return m_pSipUri ? rtString::toString(m_pSipUri->getDisplayName()) : nullptr;
+}
+
+Platform::String^ rtSipUri::getParamValue(Platform::String^ name)
+{
+ return m_pSipUri ? rtString::toString(m_pSipUri->getParamValue(rtString::toUtf8(name).data())) : nullptr;
+}
+
+void rtSipUri::setDisplayName(Platform::String^ displayName)
+{
+ if(m_pSipUri)
+ {
+ m_pSipUri->setDisplayName(rtString::toUtf8(displayName).data());
+ }
+}
+
diff --git a/bindings/winrt/doubango_rt/src/rt_String.cxx b/bindings/winrt/doubango_rt/src/rt_String.cxx
new file mode 100644
index 0000000..7d17f03
--- /dev/null
+++ b/bindings/winrt/doubango_rt/src/rt_String.cxx
@@ -0,0 +1,58 @@
+/*Copyright (C) 2013 Doubango Telecom <http://www.doubango.org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*/
+#include "rt_String.h"
+
+#include <Windows.h>
+
+using namespace doubango_rt::BackEnd;
+using namespace Platform;
+using namespace std;
+
+vector<char> rtString::toUtf8(String^ str)
+{
+ if(str != nullptr && !str->IsEmpty())
+ {
+ int len = WideCharToMultiByte(CP_UTF8, WC_ERR_INVALID_CHARS, str->Data(), str->Length(), nullptr, 0, nullptr, nullptr);
+ if (len > 0)
+ {
+ vector<char> vec(len + 1);
+ if (WideCharToMultiByte(CP_UTF8, WC_ERR_INVALID_CHARS, str->Data(), str->Length(), vec.data(), len, nullptr, nullptr) == len)
+ {
+ return std::move(vec);
+ }
+ }
+ }
+ return std::move(vector<char>(0));
+}
+
+String^ rtString::toString(char const* str)
+{
+ if(str)
+ {
+ int len = MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, str, -1, nullptr, 0);
+ if (len > 0)
+ {
+ vector<wchar_t> vec(len);
+ if (MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, str, -1, vec.data(), len) == len)
+ {
+ return ref new String(vec.data());
+ }
+ }
+ }
+ return nullptr;
+} \ No newline at end of file
diff --git a/bindings/winrt/doubango_rt/src/rt_Xcap.cxx b/bindings/winrt/doubango_rt/src/rt_Xcap.cxx
new file mode 100644
index 0000000..623cb1f
--- /dev/null
+++ b/bindings/winrt/doubango_rt/src/rt_Xcap.cxx
@@ -0,0 +1,17 @@
+/*Copyright (C) 2013 Doubango Telecom <http://www.doubango.org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*/ \ No newline at end of file
diff --git a/bindings/winrt/tinyWRAP.sln b/bindings/winrt/tinyWRAP.sln
new file mode 100644
index 0000000..26d35ab
--- /dev/null
+++ b/bindings/winrt/tinyWRAP.sln
@@ -0,0 +1,229 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Express 2012 for Windows Phone
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tinyWRAP", "tinyWRAP.vcxproj", "{5004BA7E-950D-4D60-A030-29ACD38DCA08}"
+ ProjectSection(ProjectDependencies) = postProject
+ {1137A808-DAC8-4AF7-B8BB-AEE8ABFF2F67} = {1137A808-DAC8-4AF7-B8BB-AEE8ABFF2F67}
+ {BE41D117-1D61-4C12-AD9D-B20D02C79687} = {BE41D117-1D61-4C12-AD9D-B20D02C79687}
+ {1A27423C-6535-4A49-96EC-5D209FE125F2} = {1A27423C-6535-4A49-96EC-5D209FE125F2}
+ {19279F5B-CDAF-4187-9F09-2A896A828B05} = {19279F5B-CDAF-4187-9F09-2A896A828B05}
+ {77A24977-079C-4E02-9717-8B2F684BAA21} = {77A24977-079C-4E02-9717-8B2F684BAA21}
+ {49843B78-0CEB-445D-BACC-C5C5C2F6C26F} = {49843B78-0CEB-445D-BACC-C5C5C2F6C26F}
+ {982D737A-0649-4C32-A00E-08992A0B7673} = {982D737A-0649-4C32-A00E-08992A0B7673}
+ {0875A083-5118-40CC-941E-722B00295A5B} = {0875A083-5118-40CC-941E-722B00295A5B}
+ {0F2C458A-1EDB-4E09-9A22-C2209731CFF2} = {0F2C458A-1EDB-4E09-9A22-C2209731CFF2}
+ {06E58F9D-28A1-4DD4-AF11-2F5239222CCC} = {06E58F9D-28A1-4DD4-AF11-2F5239222CCC}
+ {F623CBDB-707A-4FDC-ACE0-3D616E239F16} = {F623CBDB-707A-4FDC-ACE0-3D616E239F16}
+ {52E43EEB-A549-4159-B254-DCA225D7638B} = {52E43EEB-A549-4159-B254-DCA225D7638B}
+ {65CDF0FF-3B84-45F3-9BB6-468C79B8E0BC} = {65CDF0FF-3B84-45F3-9BB6-468C79B8E0BC}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tinyDAV", "..\..\tinyDAV\winrt\tinyDAV.vcxproj", "{0F2C458A-1EDB-4E09-9A22-C2209731CFF2}"
+ ProjectSection(ProjectDependencies) = postProject
+ {BE41D117-1D61-4C12-AD9D-B20D02C79687} = {BE41D117-1D61-4C12-AD9D-B20D02C79687}
+ {19279F5B-CDAF-4187-9F09-2A896A828B05} = {19279F5B-CDAF-4187-9F09-2A896A828B05}
+ {77A24977-079C-4E02-9717-8B2F684BAA21} = {77A24977-079C-4E02-9717-8B2F684BAA21}
+ {982D737A-0649-4C32-A00E-08992A0B7673} = {982D737A-0649-4C32-A00E-08992A0B7673}
+ {06E58F9D-28A1-4DD4-AF11-2F5239222CCC} = {06E58F9D-28A1-4DD4-AF11-2F5239222CCC}
+ {52E43EEB-A549-4159-B254-DCA225D7638B} = {52E43EEB-A549-4159-B254-DCA225D7638B}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tinyHTTP", "..\..\tinyHTTP\winrt\tinyHTTP.vcxproj", "{1A27423C-6535-4A49-96EC-5D209FE125F2}"
+ ProjectSection(ProjectDependencies) = postProject
+ {19279F5B-CDAF-4187-9F09-2A896A828B05} = {19279F5B-CDAF-4187-9F09-2A896A828B05}
+ {06E58F9D-28A1-4DD4-AF11-2F5239222CCC} = {06E58F9D-28A1-4DD4-AF11-2F5239222CCC}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tinyIPSec", "..\..\tinyIPSec\winrt\tinyIPSec.vcxproj", "{0875A083-5118-40CC-941E-722B00295A5B}"
+ ProjectSection(ProjectDependencies) = postProject
+ {19279F5B-CDAF-4187-9F09-2A896A828B05} = {19279F5B-CDAF-4187-9F09-2A896A828B05}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tinyMEDIA", "..\..\tinyMEDIA\winrt\tinyMEDIA.vcxproj", "{52E43EEB-A549-4159-B254-DCA225D7638B}"
+ ProjectSection(ProjectDependencies) = postProject
+ {BE41D117-1D61-4C12-AD9D-B20D02C79687} = {BE41D117-1D61-4C12-AD9D-B20D02C79687}
+ {19279F5B-CDAF-4187-9F09-2A896A828B05} = {19279F5B-CDAF-4187-9F09-2A896A828B05}
+ {982D737A-0649-4C32-A00E-08992A0B7673} = {982D737A-0649-4C32-A00E-08992A0B7673}
+ {06E58F9D-28A1-4DD4-AF11-2F5239222CCC} = {06E58F9D-28A1-4DD4-AF11-2F5239222CCC}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tinyMSRP", "..\..\tinyMSRP\winrt\tinyMSRP.vcxproj", "{BE41D117-1D61-4C12-AD9D-B20D02C79687}"
+ ProjectSection(ProjectDependencies) = postProject
+ {19279F5B-CDAF-4187-9F09-2A896A828B05} = {19279F5B-CDAF-4187-9F09-2A896A828B05}
+ {06E58F9D-28A1-4DD4-AF11-2F5239222CCC} = {06E58F9D-28A1-4DD4-AF11-2F5239222CCC}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tinyNET", "..\..\tinyNET\winrt\tinyNET.vcxproj", "{06E58F9D-28A1-4DD4-AF11-2F5239222CCC}"
+ ProjectSection(ProjectDependencies) = postProject
+ {19279F5B-CDAF-4187-9F09-2A896A828B05} = {19279F5B-CDAF-4187-9F09-2A896A828B05}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tinyRTP", "..\..\tinyRTP\winrt\tinyRTP.vcxproj", "{77A24977-079C-4E02-9717-8B2F684BAA21}"
+ ProjectSection(ProjectDependencies) = postProject
+ {19279F5B-CDAF-4187-9F09-2A896A828B05} = {19279F5B-CDAF-4187-9F09-2A896A828B05}
+ {06E58F9D-28A1-4DD4-AF11-2F5239222CCC} = {06E58F9D-28A1-4DD4-AF11-2F5239222CCC}
+ {52E43EEB-A549-4159-B254-DCA225D7638B} = {52E43EEB-A549-4159-B254-DCA225D7638B}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tinySAK", "..\..\tinySAK\winrt\tinySAK.vcxproj", "{19279F5B-CDAF-4187-9F09-2A896A828B05}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tinySDP", "..\..\tinySDP\winrt\tinySDP.vcxproj", "{982D737A-0649-4C32-A00E-08992A0B7673}"
+ ProjectSection(ProjectDependencies) = postProject
+ {19279F5B-CDAF-4187-9F09-2A896A828B05} = {19279F5B-CDAF-4187-9F09-2A896A828B05}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tinySIGCOMP", "..\..\tinySIGCOMP\winrt\tinySIGCOMP.vcxproj", "{F623CBDB-707A-4FDC-ACE0-3D616E239F16}"
+ ProjectSection(ProjectDependencies) = postProject
+ {19279F5B-CDAF-4187-9F09-2A896A828B05} = {19279F5B-CDAF-4187-9F09-2A896A828B05}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tinySIP", "..\..\tinySIP\winrt\tinySIP.vcxproj", "{1137A808-DAC8-4AF7-B8BB-AEE8ABFF2F67}"
+ ProjectSection(ProjectDependencies) = postProject
+ {BE41D117-1D61-4C12-AD9D-B20D02C79687} = {BE41D117-1D61-4C12-AD9D-B20D02C79687}
+ {1A27423C-6535-4A49-96EC-5D209FE125F2} = {1A27423C-6535-4A49-96EC-5D209FE125F2}
+ {19279F5B-CDAF-4187-9F09-2A896A828B05} = {19279F5B-CDAF-4187-9F09-2A896A828B05}
+ {982D737A-0649-4C32-A00E-08992A0B7673} = {982D737A-0649-4C32-A00E-08992A0B7673}
+ {0875A083-5118-40CC-941E-722B00295A5B} = {0875A083-5118-40CC-941E-722B00295A5B}
+ {06E58F9D-28A1-4DD4-AF11-2F5239222CCC} = {06E58F9D-28A1-4DD4-AF11-2F5239222CCC}
+ {F623CBDB-707A-4FDC-ACE0-3D616E239F16} = {F623CBDB-707A-4FDC-ACE0-3D616E239F16}
+ {52E43EEB-A549-4159-B254-DCA225D7638B} = {52E43EEB-A549-4159-B254-DCA225D7638B}
+ {65CDF0FF-3B84-45F3-9BB6-468C79B8E0BC} = {65CDF0FF-3B84-45F3-9BB6-468C79B8E0BC}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tinySMS", "..\..\tinySMS\winrt\tinySMS.vcxproj", "{65CDF0FF-3B84-45F3-9BB6-468C79B8E0BC}"
+ ProjectSection(ProjectDependencies) = postProject
+ {19279F5B-CDAF-4187-9F09-2A896A828B05} = {19279F5B-CDAF-4187-9F09-2A896A828B05}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tinyXCAP", "..\..\tinyXCAP\winrt\tinyXCAP.vcxproj", "{49843B78-0CEB-445D-BACC-C5C5C2F6C26F}"
+ ProjectSection(ProjectDependencies) = postProject
+ {1A27423C-6535-4A49-96EC-5D209FE125F2} = {1A27423C-6535-4A49-96EC-5D209FE125F2}
+ {19279F5B-CDAF-4187-9F09-2A896A828B05} = {19279F5B-CDAF-4187-9F09-2A896A828B05}
+ {06E58F9D-28A1-4DD4-AF11-2F5239222CCC} = {06E58F9D-28A1-4DD4-AF11-2F5239222CCC}
+ EndProjectSection
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|ARM = Debug|ARM
+ Debug|Win32 = Debug|Win32
+ Release|ARM = Release|ARM
+ Release|Win32 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {5004BA7E-950D-4D60-A030-29ACD38DCA08}.Debug|ARM.ActiveCfg = Debug|ARM
+ {5004BA7E-950D-4D60-A030-29ACD38DCA08}.Debug|ARM.Build.0 = Debug|ARM
+ {5004BA7E-950D-4D60-A030-29ACD38DCA08}.Debug|Win32.ActiveCfg = Debug|Win32
+ {5004BA7E-950D-4D60-A030-29ACD38DCA08}.Debug|Win32.Build.0 = Debug|Win32
+ {5004BA7E-950D-4D60-A030-29ACD38DCA08}.Release|ARM.ActiveCfg = Release|ARM
+ {5004BA7E-950D-4D60-A030-29ACD38DCA08}.Release|ARM.Build.0 = Release|ARM
+ {5004BA7E-950D-4D60-A030-29ACD38DCA08}.Release|Win32.ActiveCfg = Release|Win32
+ {5004BA7E-950D-4D60-A030-29ACD38DCA08}.Release|Win32.Build.0 = Release|Win32
+ {0F2C458A-1EDB-4E09-9A22-C2209731CFF2}.Debug|ARM.ActiveCfg = Debug|ARM
+ {0F2C458A-1EDB-4E09-9A22-C2209731CFF2}.Debug|ARM.Build.0 = Debug|ARM
+ {0F2C458A-1EDB-4E09-9A22-C2209731CFF2}.Debug|Win32.ActiveCfg = Debug|Win32
+ {0F2C458A-1EDB-4E09-9A22-C2209731CFF2}.Debug|Win32.Build.0 = Debug|Win32
+ {0F2C458A-1EDB-4E09-9A22-C2209731CFF2}.Release|ARM.ActiveCfg = Release|ARM
+ {0F2C458A-1EDB-4E09-9A22-C2209731CFF2}.Release|ARM.Build.0 = Release|ARM
+ {0F2C458A-1EDB-4E09-9A22-C2209731CFF2}.Release|Win32.ActiveCfg = Release|Win32
+ {0F2C458A-1EDB-4E09-9A22-C2209731CFF2}.Release|Win32.Build.0 = Release|Win32
+ {1A27423C-6535-4A49-96EC-5D209FE125F2}.Debug|ARM.ActiveCfg = Debug|ARM
+ {1A27423C-6535-4A49-96EC-5D209FE125F2}.Debug|ARM.Build.0 = Debug|ARM
+ {1A27423C-6535-4A49-96EC-5D209FE125F2}.Debug|Win32.ActiveCfg = Debug|Win32
+ {1A27423C-6535-4A49-96EC-5D209FE125F2}.Debug|Win32.Build.0 = Debug|Win32
+ {1A27423C-6535-4A49-96EC-5D209FE125F2}.Release|ARM.ActiveCfg = Release|ARM
+ {1A27423C-6535-4A49-96EC-5D209FE125F2}.Release|ARM.Build.0 = Release|ARM
+ {1A27423C-6535-4A49-96EC-5D209FE125F2}.Release|Win32.ActiveCfg = Release|Win32
+ {1A27423C-6535-4A49-96EC-5D209FE125F2}.Release|Win32.Build.0 = Release|Win32
+ {0875A083-5118-40CC-941E-722B00295A5B}.Debug|ARM.ActiveCfg = Debug|ARM
+ {0875A083-5118-40CC-941E-722B00295A5B}.Debug|ARM.Build.0 = Debug|ARM
+ {0875A083-5118-40CC-941E-722B00295A5B}.Debug|Win32.ActiveCfg = Debug|Win32
+ {0875A083-5118-40CC-941E-722B00295A5B}.Debug|Win32.Build.0 = Debug|Win32
+ {0875A083-5118-40CC-941E-722B00295A5B}.Release|ARM.ActiveCfg = Release|ARM
+ {0875A083-5118-40CC-941E-722B00295A5B}.Release|ARM.Build.0 = Release|ARM
+ {0875A083-5118-40CC-941E-722B00295A5B}.Release|Win32.ActiveCfg = Release|Win32
+ {0875A083-5118-40CC-941E-722B00295A5B}.Release|Win32.Build.0 = Release|Win32
+ {52E43EEB-A549-4159-B254-DCA225D7638B}.Debug|ARM.ActiveCfg = Debug|ARM
+ {52E43EEB-A549-4159-B254-DCA225D7638B}.Debug|ARM.Build.0 = Debug|ARM
+ {52E43EEB-A549-4159-B254-DCA225D7638B}.Debug|Win32.ActiveCfg = Debug|Win32
+ {52E43EEB-A549-4159-B254-DCA225D7638B}.Debug|Win32.Build.0 = Debug|Win32
+ {52E43EEB-A549-4159-B254-DCA225D7638B}.Release|ARM.ActiveCfg = Release|ARM
+ {52E43EEB-A549-4159-B254-DCA225D7638B}.Release|ARM.Build.0 = Release|ARM
+ {52E43EEB-A549-4159-B254-DCA225D7638B}.Release|Win32.ActiveCfg = Release|Win32
+ {52E43EEB-A549-4159-B254-DCA225D7638B}.Release|Win32.Build.0 = Release|Win32
+ {BE41D117-1D61-4C12-AD9D-B20D02C79687}.Debug|ARM.ActiveCfg = Debug|ARM
+ {BE41D117-1D61-4C12-AD9D-B20D02C79687}.Debug|ARM.Build.0 = Debug|ARM
+ {BE41D117-1D61-4C12-AD9D-B20D02C79687}.Debug|Win32.ActiveCfg = Debug|Win32
+ {BE41D117-1D61-4C12-AD9D-B20D02C79687}.Debug|Win32.Build.0 = Debug|Win32
+ {BE41D117-1D61-4C12-AD9D-B20D02C79687}.Release|ARM.ActiveCfg = Release|ARM
+ {BE41D117-1D61-4C12-AD9D-B20D02C79687}.Release|ARM.Build.0 = Release|ARM
+ {BE41D117-1D61-4C12-AD9D-B20D02C79687}.Release|Win32.ActiveCfg = Release|Win32
+ {BE41D117-1D61-4C12-AD9D-B20D02C79687}.Release|Win32.Build.0 = Release|Win32
+ {06E58F9D-28A1-4DD4-AF11-2F5239222CCC}.Debug|ARM.ActiveCfg = Debug|ARM
+ {06E58F9D-28A1-4DD4-AF11-2F5239222CCC}.Debug|ARM.Build.0 = Debug|ARM
+ {06E58F9D-28A1-4DD4-AF11-2F5239222CCC}.Debug|Win32.ActiveCfg = Debug|Win32
+ {06E58F9D-28A1-4DD4-AF11-2F5239222CCC}.Debug|Win32.Build.0 = Debug|Win32
+ {06E58F9D-28A1-4DD4-AF11-2F5239222CCC}.Release|ARM.ActiveCfg = Release|ARM
+ {06E58F9D-28A1-4DD4-AF11-2F5239222CCC}.Release|ARM.Build.0 = Release|ARM
+ {06E58F9D-28A1-4DD4-AF11-2F5239222CCC}.Release|Win32.ActiveCfg = Release|Win32
+ {06E58F9D-28A1-4DD4-AF11-2F5239222CCC}.Release|Win32.Build.0 = Release|Win32
+ {77A24977-079C-4E02-9717-8B2F684BAA21}.Debug|ARM.ActiveCfg = Debug|ARM
+ {77A24977-079C-4E02-9717-8B2F684BAA21}.Debug|ARM.Build.0 = Debug|ARM
+ {77A24977-079C-4E02-9717-8B2F684BAA21}.Debug|Win32.ActiveCfg = Debug|Win32
+ {77A24977-079C-4E02-9717-8B2F684BAA21}.Debug|Win32.Build.0 = Debug|Win32
+ {77A24977-079C-4E02-9717-8B2F684BAA21}.Release|ARM.ActiveCfg = Release|ARM
+ {77A24977-079C-4E02-9717-8B2F684BAA21}.Release|ARM.Build.0 = Release|ARM
+ {77A24977-079C-4E02-9717-8B2F684BAA21}.Release|Win32.ActiveCfg = Release|Win32
+ {77A24977-079C-4E02-9717-8B2F684BAA21}.Release|Win32.Build.0 = Release|Win32
+ {19279F5B-CDAF-4187-9F09-2A896A828B05}.Debug|ARM.ActiveCfg = Debug|ARM
+ {19279F5B-CDAF-4187-9F09-2A896A828B05}.Debug|ARM.Build.0 = Debug|ARM
+ {19279F5B-CDAF-4187-9F09-2A896A828B05}.Debug|Win32.ActiveCfg = Debug|Win32
+ {19279F5B-CDAF-4187-9F09-2A896A828B05}.Debug|Win32.Build.0 = Debug|Win32
+ {19279F5B-CDAF-4187-9F09-2A896A828B05}.Release|ARM.ActiveCfg = Release|ARM
+ {19279F5B-CDAF-4187-9F09-2A896A828B05}.Release|ARM.Build.0 = Release|ARM
+ {19279F5B-CDAF-4187-9F09-2A896A828B05}.Release|Win32.ActiveCfg = Release|Win32
+ {19279F5B-CDAF-4187-9F09-2A896A828B05}.Release|Win32.Build.0 = Release|Win32
+ {982D737A-0649-4C32-A00E-08992A0B7673}.Debug|ARM.ActiveCfg = Debug|ARM
+ {982D737A-0649-4C32-A00E-08992A0B7673}.Debug|ARM.Build.0 = Debug|ARM
+ {982D737A-0649-4C32-A00E-08992A0B7673}.Debug|Win32.ActiveCfg = Debug|Win32
+ {982D737A-0649-4C32-A00E-08992A0B7673}.Debug|Win32.Build.0 = Debug|Win32
+ {982D737A-0649-4C32-A00E-08992A0B7673}.Release|ARM.ActiveCfg = Release|ARM
+ {982D737A-0649-4C32-A00E-08992A0B7673}.Release|ARM.Build.0 = Release|ARM
+ {982D737A-0649-4C32-A00E-08992A0B7673}.Release|Win32.ActiveCfg = Release|Win32
+ {982D737A-0649-4C32-A00E-08992A0B7673}.Release|Win32.Build.0 = Release|Win32
+ {F623CBDB-707A-4FDC-ACE0-3D616E239F16}.Debug|ARM.ActiveCfg = Debug|ARM
+ {F623CBDB-707A-4FDC-ACE0-3D616E239F16}.Debug|ARM.Build.0 = Debug|ARM
+ {F623CBDB-707A-4FDC-ACE0-3D616E239F16}.Debug|Win32.ActiveCfg = Debug|Win32
+ {F623CBDB-707A-4FDC-ACE0-3D616E239F16}.Debug|Win32.Build.0 = Debug|Win32
+ {F623CBDB-707A-4FDC-ACE0-3D616E239F16}.Release|ARM.ActiveCfg = Release|ARM
+ {F623CBDB-707A-4FDC-ACE0-3D616E239F16}.Release|ARM.Build.0 = Release|ARM
+ {F623CBDB-707A-4FDC-ACE0-3D616E239F16}.Release|Win32.ActiveCfg = Release|Win32
+ {F623CBDB-707A-4FDC-ACE0-3D616E239F16}.Release|Win32.Build.0 = Release|Win32
+ {1137A808-DAC8-4AF7-B8BB-AEE8ABFF2F67}.Debug|ARM.ActiveCfg = Debug|ARM
+ {1137A808-DAC8-4AF7-B8BB-AEE8ABFF2F67}.Debug|ARM.Build.0 = Debug|ARM
+ {1137A808-DAC8-4AF7-B8BB-AEE8ABFF2F67}.Debug|Win32.ActiveCfg = Debug|Win32
+ {1137A808-DAC8-4AF7-B8BB-AEE8ABFF2F67}.Debug|Win32.Build.0 = Debug|Win32
+ {1137A808-DAC8-4AF7-B8BB-AEE8ABFF2F67}.Release|ARM.ActiveCfg = Release|ARM
+ {1137A808-DAC8-4AF7-B8BB-AEE8ABFF2F67}.Release|ARM.Build.0 = Release|ARM
+ {1137A808-DAC8-4AF7-B8BB-AEE8ABFF2F67}.Release|Win32.ActiveCfg = Release|Win32
+ {1137A808-DAC8-4AF7-B8BB-AEE8ABFF2F67}.Release|Win32.Build.0 = Release|Win32
+ {65CDF0FF-3B84-45F3-9BB6-468C79B8E0BC}.Debug|ARM.ActiveCfg = Debug|ARM
+ {65CDF0FF-3B84-45F3-9BB6-468C79B8E0BC}.Debug|ARM.Build.0 = Debug|ARM
+ {65CDF0FF-3B84-45F3-9BB6-468C79B8E0BC}.Debug|Win32.ActiveCfg = Debug|Win32
+ {65CDF0FF-3B84-45F3-9BB6-468C79B8E0BC}.Debug|Win32.Build.0 = Debug|Win32
+ {65CDF0FF-3B84-45F3-9BB6-468C79B8E0BC}.Release|ARM.ActiveCfg = Release|ARM
+ {65CDF0FF-3B84-45F3-9BB6-468C79B8E0BC}.Release|ARM.Build.0 = Release|ARM
+ {65CDF0FF-3B84-45F3-9BB6-468C79B8E0BC}.Release|Win32.ActiveCfg = Release|Win32
+ {65CDF0FF-3B84-45F3-9BB6-468C79B8E0BC}.Release|Win32.Build.0 = Release|Win32
+ {49843B78-0CEB-445D-BACC-C5C5C2F6C26F}.Debug|ARM.ActiveCfg = Debug|ARM
+ {49843B78-0CEB-445D-BACC-C5C5C2F6C26F}.Debug|ARM.Build.0 = Debug|ARM
+ {49843B78-0CEB-445D-BACC-C5C5C2F6C26F}.Debug|Win32.ActiveCfg = Debug|Win32
+ {49843B78-0CEB-445D-BACC-C5C5C2F6C26F}.Debug|Win32.Build.0 = Debug|Win32
+ {49843B78-0CEB-445D-BACC-C5C5C2F6C26F}.Release|ARM.ActiveCfg = Release|ARM
+ {49843B78-0CEB-445D-BACC-C5C5C2F6C26F}.Release|ARM.Build.0 = Release|ARM
+ {49843B78-0CEB-445D-BACC-C5C5C2F6C26F}.Release|Win32.ActiveCfg = Release|Win32
+ {49843B78-0CEB-445D-BACC-C5C5C2F6C26F}.Release|Win32.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/bindings/winrt/tinyWRAP.vcxproj b/bindings/winrt/tinyWRAP.vcxproj
new file mode 100644
index 0000000..161f6ac
--- /dev/null
+++ b/bindings/winrt/tinyWRAP.vcxproj
@@ -0,0 +1,204 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|ARM">
+ <Configuration>Debug</Configuration>
+ <Platform>ARM</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|ARM">
+ <Configuration>Release</Configuration>
+ <Platform>ARM</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{5004ba7e-950d-4d60-a030-29acd38dca08}</ProjectGuid>
+ <RootNamespace>tinyWRAP</RootNamespace>
+ <DefaultLanguage>en-US</DefaultLanguage>
+ <MinimumVisualStudioVersion>11.0</MinimumVisualStudioVersion>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <PlatformToolset>v110_wp80</PlatformToolset>
+ <IgnoreImportLibrary>false</IgnoreImportLibrary>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <PlatformToolset>v110_wp80</PlatformToolset>
+ <IgnoreImportLibrary>false</IgnoreImportLibrary>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <PlatformToolset>v110_wp80</PlatformToolset>
+ <IgnoreImportLibrary>false</IgnoreImportLibrary>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <PlatformToolset>v110_wp80</PlatformToolset>
+ <IgnoreImportLibrary>false</IgnoreImportLibrary>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <GenerateManifest>false</GenerateManifest>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <OutDir>$(SolutionDir)$(Configuration)\$(MSBuildProjectName)\</OutDir>
+ <IntDir>$(Platform)\$(Configuration)\</IntDir>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <OutDir>$(SolutionDir)$(Configuration)\$(MSBuildProjectName)\</OutDir>
+ <IntDir>$(Platform)\$(Configuration)\</IntDir>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">
+ <OutDir>$(SolutionDir)$(Configuration)\$(MSBuildProjectName)\</OutDir>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">
+ <OutDir>$(SolutionDir)$(Configuration)\$(MSBuildProjectName)\</OutDir>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <PreprocessorDefinitions>_USRDLL;TINYWRAP_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PrecompiledHeader>NotUsing</PrecompiledHeader>
+ <PrecompiledHeaderFile>
+ </PrecompiledHeaderFile>
+ <CompileAsWinRT>false</CompileAsWinRT>
+ <AdditionalUsingDirectories>$(WindowsSDK_MetadataPath);$(AdditionalUsingDirectories)</AdditionalUsingDirectories>
+ <AdditionalIncludeDirectories>..\_common;..\.;..\..\thirdparties\winrt\include;..\..\tinySAK\src;..\..\tinyNET\src;..\..\tinyHTTP\include;..\..\tinySIP\include;..\..\tinyDAV\include;..\..\tinySDP\include;..\..\tinyMEDIA\include;..\..\tinyXCAP\include;..\..\tinySMS\include;..\..\tinyMSRP\include</AdditionalIncludeDirectories>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
+ <GenerateWindowsMetadata>false</GenerateWindowsMetadata>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <AdditionalDependencies>"$(SolutionDir)$(Configuration)\tinySAK\tinySAK.lib";"$(SolutionDir)$(Configuration)\tinySIP\tinySIP.lib";"$(SolutionDir)$(Configuration)\tinyNET\tinyNET.lib";"$(SolutionDir)$(Configuration)\tinyDAV\tinyDAV.lib";"$(SolutionDir)$(Configuration)\tinyMEDIA\tinyMEDIA.lib";"$(SolutionDir)$(Configuration)\tinyHTTP\tinyHTTP.lib";"$(SolutionDir)$(Configuration)\tinyXCAP\tinyXCAP.lib";"$(SolutionDir)$(Configuration)\tinySMS\tinySMS.lib";"$(SolutionDir)$(Configuration)\tinyMSRP\tinyMSRP.lib";"$(SolutionDir)$(Configuration)\tinySDP\tinySDP.lib"</AdditionalDependencies>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <PreprocessorDefinitions>_USRDLL;TINYWRAP_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PrecompiledHeader>NotUsing</PrecompiledHeader>
+ <PrecompiledHeaderFile>
+ </PrecompiledHeaderFile>
+ <CompileAsWinRT>false</CompileAsWinRT>
+ <AdditionalUsingDirectories>$(WindowsSDK_MetadataPath);$(AdditionalUsingDirectories)</AdditionalUsingDirectories>
+ <AdditionalIncludeDirectories>..\_common;..\.;..\..\thirdparties\winrt\include;..\..\tinySAK\src;..\..\tinyNET\src;..\..\tinyHTTP\include;..\..\tinySIP\include;..\..\tinyDAV\include;..\..\tinySDP\include;..\..\tinyMEDIA\include;..\..\tinyXCAP\include;..\..\tinySMS\include;..\..\tinyMSRP\include</AdditionalIncludeDirectories>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
+ <GenerateWindowsMetadata>false</GenerateWindowsMetadata>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <AdditionalDependencies>"$(SolutionDir)$(Configuration)\tinySAK\tinySAK.lib";"$(SolutionDir)$(Configuration)\tinySIP\tinySIP.lib";"$(SolutionDir)$(Configuration)\tinyNET\tinyNET.lib";"$(SolutionDir)$(Configuration)\tinyDAV\tinyDAV.lib";"$(SolutionDir)$(Configuration)\tinyMEDIA\tinyMEDIA.lib";"$(SolutionDir)$(Configuration)\tinyHTTP\tinyHTTP.lib";"$(SolutionDir)$(Configuration)\tinyXCAP\tinyXCAP.lib";"$(SolutionDir)$(Configuration)\tinySMS\tinySMS.lib";"$(SolutionDir)$(Configuration)\tinyMSRP\tinyMSRP.lib";"$(SolutionDir)$(Configuration)\tinySDP\tinySDP.lib"</AdditionalDependencies>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">
+ <ClCompile>
+ <PreprocessorDefinitions>_USRDLL;TINYWRAP_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PrecompiledHeader>NotUsing</PrecompiledHeader>
+ <PrecompiledHeaderFile>
+ </PrecompiledHeaderFile>
+ <CompileAsWinRT>false</CompileAsWinRT>
+ <AdditionalUsingDirectories>$(WindowsSDK_MetadataPath);$(AdditionalUsingDirectories)</AdditionalUsingDirectories>
+ <AdditionalIncludeDirectories>..\_common;..\.;..\..\thirdparties\winrt\include;..\..\tinySAK\src;..\..\tinyNET\src;..\..\tinyHTTP\include;..\..\tinySIP\include;..\..\tinyDAV\include;..\..\tinySDP\include;..\..\tinyMEDIA\include;..\..\tinyXCAP\include;..\..\tinySMS\include;..\..\tinyMSRP\include</AdditionalIncludeDirectories>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
+ <GenerateWindowsMetadata>false</GenerateWindowsMetadata>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <AdditionalDependencies>"$(SolutionDir)$(Configuration)\tinySAK\tinySAK.lib";"$(SolutionDir)$(Configuration)\tinySIP\tinySIP.lib";"$(SolutionDir)$(Configuration)\tinyNET\tinyNET.lib";"$(SolutionDir)$(Configuration)\tinyDAV\tinyDAV.lib";"$(SolutionDir)$(Configuration)\tinyMEDIA\tinyMEDIA.lib";"$(SolutionDir)$(Configuration)\tinyHTTP\tinyHTTP.lib";"$(SolutionDir)$(Configuration)\tinyXCAP\tinyXCAP.lib";"$(SolutionDir)$(Configuration)\tinySMS\tinySMS.lib";"$(SolutionDir)$(Configuration)\tinyMSRP\tinyMSRP.lib";"$(SolutionDir)$(Configuration)\tinySDP\tinySDP.lib"</AdditionalDependencies>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">
+ <ClCompile>
+ <PreprocessorDefinitions>_USRDLL;TINYWRAP_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PrecompiledHeader>NotUsing</PrecompiledHeader>
+ <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
+ <CompileAsWinRT>false</CompileAsWinRT>
+ <AdditionalUsingDirectories>$(WindowsSDK_MetadataPath);$(AdditionalUsingDirectories)</AdditionalUsingDirectories>
+ <AdditionalIncludeDirectories>..\_common;..\.;..\..\thirdparties\winrt\include;..\..\tinySAK\src;..\..\tinyNET\src;..\..\tinyHTTP\include;..\..\tinySIP\include;..\..\tinyDAV\include;..\..\tinySDP\include;..\..\tinyMEDIA\include;..\..\tinyXCAP\include;..\..\tinySMS\include;..\..\tinyMSRP\include</AdditionalIncludeDirectories>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
+ <GenerateWindowsMetadata>false</GenerateWindowsMetadata>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <AdditionalDependencies>"$(SolutionDir)$(Configuration)\tinySAK\tinySAK.lib";"$(SolutionDir)$(Configuration)\tinySIP\tinySIP.lib";"$(SolutionDir)$(Configuration)\tinyNET\tinyNET.lib";"$(SolutionDir)$(Configuration)\tinyDAV\tinyDAV.lib";"$(SolutionDir)$(Configuration)\tinyMEDIA\tinyMEDIA.lib";"$(SolutionDir)$(Configuration)\tinyHTTP\tinyHTTP.lib";"$(SolutionDir)$(Configuration)\tinyXCAP\tinyXCAP.lib";"$(SolutionDir)$(Configuration)\tinySMS\tinySMS.lib";"$(SolutionDir)$(Configuration)\tinyMSRP\tinyMSRP.lib";"$(SolutionDir)$(Configuration)\tinySDP\tinySDP.lib"</AdditionalDependencies>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <Reference Include="Windows">
+ <IsWinMDFile>true</IsWinMDFile>
+ </Reference>
+ <Reference Include="platform.winmd">
+ <IsWinMDFile>true</IsWinMDFile>
+ <Private>false</Private>
+ </Reference>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="..\csharp\tinyWRAP_wrap.h" />
+ <ClInclude Include="..\_common\ActionConfig.h" />
+ <ClInclude Include="..\_common\AudioResampler.h" />
+ <ClInclude Include="..\_common\Common.h" />
+ <ClInclude Include="..\_common\DDebug.h" />
+ <ClInclude Include="..\_common\MediaContent.h" />
+ <ClInclude Include="..\_common\MediaSessionMgr.h" />
+ <ClInclude Include="..\_common\Msrp.h" />
+ <ClInclude Include="..\_common\ProxyConsumer.h" />
+ <ClInclude Include="..\_common\ProxyPluginMgr.h" />
+ <ClInclude Include="..\_common\ProxyProducer.h" />
+ <ClInclude Include="..\_common\SafeObject.h" />
+ <ClInclude Include="..\_common\SipCallback.h" />
+ <ClInclude Include="..\_common\SipEvent.h" />
+ <ClInclude Include="..\_common\SipMessage.h" />
+ <ClInclude Include="..\_common\SipSession.h" />
+ <ClInclude Include="..\_common\SipStack.h" />
+ <ClInclude Include="..\_common\SipUri.h" />
+ <ClInclude Include="..\_common\SMSEncoder.h" />
+ <ClInclude Include="..\_common\tinyWRAP_config.h" />
+ <ClInclude Include="..\_common\Xcap.h" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="..\csharp\tinyWRAP_wrap.cxx" />
+ <ClCompile Include="..\_common\ActionConfig.cxx" />
+ <ClCompile Include="..\_common\AudioResampler.cxx" />
+ <ClCompile Include="..\_common\DDebug.cxx" />
+ <ClCompile Include="..\_common\MediaContent.cxx" />
+ <ClCompile Include="..\_common\MediaSessionMgr.cxx" />
+ <ClCompile Include="..\_common\Msrp.cxx" />
+ <ClCompile Include="..\_common\ProxyConsumer.cxx" />
+ <ClCompile Include="..\_common\ProxyPluginMgr.cxx" />
+ <ClCompile Include="..\_common\ProxyProducer.cxx" />
+ <ClCompile Include="..\_common\SafeObject.cxx" />
+ <ClCompile Include="..\_common\SipCallback.cxx" />
+ <ClCompile Include="..\_common\SipEvent.cxx" />
+ <ClCompile Include="..\_common\SipMessage.cxx" />
+ <ClCompile Include="..\_common\SipSession.cxx" />
+ <ClCompile Include="..\_common\SipStack.cxx" />
+ <ClCompile Include="..\_common\SipUri.cxx" />
+ <ClCompile Include="..\_common\SMSEncoder.cxx" />
+ <ClCompile Include="..\_common\Xcap.cxx" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <Import Project="$(MSBuildExtensionsPath)\Microsoft\WindowsPhone\v$(TargetPlatformVersion)\Microsoft.Cpp.WindowsPhone.$(TargetPlatformVersion).targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/bindings/winrt/tinyWRAP.vcxproj.filters b/bindings/winrt/tinyWRAP.vcxproj.filters
new file mode 100644
index 0000000..a3be7bb
--- /dev/null
+++ b/bindings/winrt/tinyWRAP.vcxproj.filters
@@ -0,0 +1,139 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Resource Files">
+ <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
+ <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
+ </Filter>
+ <Filter Include="include">
+ <UniqueIdentifier>{a58a2275-bd4d-4d21-98b1-e3729f6e71ef}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="src">
+ <UniqueIdentifier>{1c6acf3c-a6a2-4eea-9828-1b02bf401bb7}</UniqueIdentifier>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="..\_common\ActionConfig.h">
+ <Filter>include</Filter>
+ </ClInclude>
+ <ClInclude Include="..\_common\AudioResampler.h">
+ <Filter>include</Filter>
+ </ClInclude>
+ <ClInclude Include="..\_common\Common.h">
+ <Filter>include</Filter>
+ </ClInclude>
+ <ClInclude Include="..\_common\DDebug.h">
+ <Filter>include</Filter>
+ </ClInclude>
+ <ClInclude Include="..\_common\MediaContent.h">
+ <Filter>include</Filter>
+ </ClInclude>
+ <ClInclude Include="..\_common\MediaSessionMgr.h">
+ <Filter>include</Filter>
+ </ClInclude>
+ <ClInclude Include="..\_common\Msrp.h">
+ <Filter>include</Filter>
+ </ClInclude>
+ <ClInclude Include="..\_common\ProxyConsumer.h">
+ <Filter>include</Filter>
+ </ClInclude>
+ <ClInclude Include="..\_common\ProxyPluginMgr.h">
+ <Filter>include</Filter>
+ </ClInclude>
+ <ClInclude Include="..\_common\ProxyProducer.h">
+ <Filter>include</Filter>
+ </ClInclude>
+ <ClInclude Include="..\_common\SafeObject.h">
+ <Filter>include</Filter>
+ </ClInclude>
+ <ClInclude Include="..\_common\SipCallback.h">
+ <Filter>include</Filter>
+ </ClInclude>
+ <ClInclude Include="..\_common\SipEvent.h">
+ <Filter>include</Filter>
+ </ClInclude>
+ <ClInclude Include="..\_common\SipMessage.h">
+ <Filter>include</Filter>
+ </ClInclude>
+ <ClInclude Include="..\_common\SipSession.h">
+ <Filter>include</Filter>
+ </ClInclude>
+ <ClInclude Include="..\_common\SipStack.h">
+ <Filter>include</Filter>
+ </ClInclude>
+ <ClInclude Include="..\_common\SipUri.h">
+ <Filter>include</Filter>
+ </ClInclude>
+ <ClInclude Include="..\_common\SMSEncoder.h">
+ <Filter>include</Filter>
+ </ClInclude>
+ <ClInclude Include="..\_common\tinyWRAP_config.h">
+ <Filter>include</Filter>
+ </ClInclude>
+ <ClInclude Include="..\_common\Xcap.h">
+ <Filter>include</Filter>
+ </ClInclude>
+ <ClInclude Include="..\csharp\tinyWRAP_wrap.h">
+ <Filter>include</Filter>
+ </ClInclude>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="..\_common\ActionConfig.cxx">
+ <Filter>src</Filter>
+ </ClCompile>
+ <ClCompile Include="..\_common\AudioResampler.cxx">
+ <Filter>src</Filter>
+ </ClCompile>
+ <ClCompile Include="..\_common\DDebug.cxx">
+ <Filter>src</Filter>
+ </ClCompile>
+ <ClCompile Include="..\_common\MediaContent.cxx">
+ <Filter>src</Filter>
+ </ClCompile>
+ <ClCompile Include="..\_common\MediaSessionMgr.cxx">
+ <Filter>src</Filter>
+ </ClCompile>
+ <ClCompile Include="..\_common\Msrp.cxx">
+ <Filter>src</Filter>
+ </ClCompile>
+ <ClCompile Include="..\_common\ProxyConsumer.cxx">
+ <Filter>src</Filter>
+ </ClCompile>
+ <ClCompile Include="..\_common\ProxyPluginMgr.cxx">
+ <Filter>src</Filter>
+ </ClCompile>
+ <ClCompile Include="..\_common\ProxyProducer.cxx">
+ <Filter>src</Filter>
+ </ClCompile>
+ <ClCompile Include="..\_common\SafeObject.cxx">
+ <Filter>src</Filter>
+ </ClCompile>
+ <ClCompile Include="..\_common\SipCallback.cxx">
+ <Filter>src</Filter>
+ </ClCompile>
+ <ClCompile Include="..\_common\SipEvent.cxx">
+ <Filter>src</Filter>
+ </ClCompile>
+ <ClCompile Include="..\_common\SipMessage.cxx">
+ <Filter>src</Filter>
+ </ClCompile>
+ <ClCompile Include="..\_common\SipSession.cxx">
+ <Filter>src</Filter>
+ </ClCompile>
+ <ClCompile Include="..\_common\SipStack.cxx">
+ <Filter>src</Filter>
+ </ClCompile>
+ <ClCompile Include="..\_common\SipUri.cxx">
+ <Filter>src</Filter>
+ </ClCompile>
+ <ClCompile Include="..\_common\SMSEncoder.cxx">
+ <Filter>src</Filter>
+ </ClCompile>
+ <ClCompile Include="..\_common\Xcap.cxx">
+ <Filter>src</Filter>
+ </ClCompile>
+ <ClCompile Include="..\csharp\tinyWRAP_wrap.cxx">
+ <Filter>src</Filter>
+ </ClCompile>
+ </ItemGroup>
+</Project> \ No newline at end of file
OpenPOWER on IntegriCloud