Merge branch 'master' of git.sangoma.com:smg_freeswitch

This commit is contained in:
Moises Silva 2011-01-14 18:45:03 -05:00
commit f06298f163
28 changed files with 955 additions and 364 deletions

View File

@ -0,0 +1,195 @@
<?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|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectName>ESL</ProjectName>
<ProjectGuid>{FEA2D0AE-6713-4E41-A473-A143849BC7FF}</ProjectGuid>
<RootNamespace>ESL</RootNamespace>
<Keyword>ManagedCProj</Keyword>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<CharacterSet>Unicode</CharacterSet>
<CLRSupport>true</CLRSupport>
<WholeProgramOptimization>true</WholeProgramOptimization>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
<CLRSupport>true</CLRSupport>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<CharacterSet>Unicode</CharacterSet>
<CLRSupport>true</CLRSupport>
<WholeProgramOptimization>true</WholeProgramOptimization>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
<CLRSupport>true</CLRSupport>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" 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>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)$(Configuration)\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Configuration)\</IntDir>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)$(Configuration)\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Configuration)\</IntDir>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\</IntDir>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\</IntDir>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>..\src\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level4</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
</ClCompile>
<Link>
<AdditionalDependencies>esl.lib;Ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>..\..\..\libs\esl\src\$(Platform)\$(Configuration)\;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AssemblyDebug>true</AssemblyDebug>
<TargetMachine>NotSet</TargetMachine>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<AdditionalIncludeDirectories>..\src\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
</ClCompile>
<Link>
<AdditionalDependencies>esl.lib;Ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>..\..\..\libs\esl\src\$(Platform)\$(Configuration)\;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation>
<TargetMachine>MachineX86</TargetMachine>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<Midl>
<TargetEnvironment>X64</TargetEnvironment>
</Midl>
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>..\src\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level4</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
</ClCompile>
<Link>
<AdditionalDependencies>esl.lib;Ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>..\..\..\libs\esl\src\$(Platform)\$(Configuration)\;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AssemblyDebug>true</AssemblyDebug>
<TargetMachine>MachineX64</TargetMachine>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<Midl>
<TargetEnvironment>X64</TargetEnvironment>
</Midl>
<ClCompile>
<AdditionalIncludeDirectories>..\src\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
</ClCompile>
<Link>
<AdditionalDependencies>esl.lib;Ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>..\..\..\libs\esl\src\$(Platform)\$(Configuration)\;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation>
<TargetMachine>MachineX64</TargetMachine>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<Reference Include="System">
<CopyLocalSatelliteAssemblies>true</CopyLocalSatelliteAssemblies>
<ReferenceOutputAssembly>true</ReferenceOutputAssembly>
</Reference>
<Reference Include="System.Data">
<CopyLocalSatelliteAssemblies>true</CopyLocalSatelliteAssemblies>
<ReferenceOutputAssembly>true</ReferenceOutputAssembly>
</Reference>
<Reference Include="System.Xml">
<CopyLocalSatelliteAssemblies>true</CopyLocalSatelliteAssemblies>
<ReferenceOutputAssembly>true</ReferenceOutputAssembly>
</Reference>
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\src\esl_oop.cpp" />
<ClCompile Include="esl_wrap.cpp" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\src\include\esl_oop.h" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>

View File

@ -0,0 +1,30 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
<Filter Include="Header Files">
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
</Filter>
<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</Extensions>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\src\esl_oop.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="esl_wrap.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\src\include\esl_oop.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
</Project>

View File

@ -0,0 +1,93 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>9.0.30729</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{DEE5837B-E01D-4223-B351-EDF9418F3F8E}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>ManagedEsl</RootNamespace>
<AssemblyName>ManagedEsl</AssemblyName>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<FileUpgradeFlags>
</FileUpgradeFlags>
<OldToolsVersion>3.5</OldToolsVersion>
<UpgradeBackupLocation />
<PublishUrl>publish\</PublishUrl>
<Install>true</Install>
<InstallFrom>Disk</InstallFrom>
<UpdateEnabled>false</UpdateEnabled>
<UpdateMode>Foreground</UpdateMode>
<UpdateInterval>7</UpdateInterval>
<UpdateIntervalUnits>Days</UpdateIntervalUnits>
<UpdatePeriodically>false</UpdatePeriodically>
<UpdateRequired>false</UpdateRequired>
<MapFileExtensions>true</MapFileExtensions>
<ApplicationRevision>0</ApplicationRevision>
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
<IsWebBootstrapper>false</IsWebBootstrapper>
<UseApplicationTrust>false</UseApplicationTrust>
<BootstrapperEnabled>true</BootstrapperEnabled>
<TargetFrameworkProfile />
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="ESL.cs" />
<Compile Include="ESLconnection.cs" />
<Compile Include="ESLevent.cs" />
<Compile Include="ESLPINVOKE.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="SWIGTYPE_p_esl_event_t.cs" />
<Compile Include="SWIGTYPE_p_esl_priority_t.cs" />
</ItemGroup>
<ItemGroup>
<BootstrapperPackage Include="Microsoft.Net.Client.3.5">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
<Install>false</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1</ProductName>
<Install>true</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
<Visible>False</Visible>
<ProductName>Windows Installer 3.1</ProductName>
<Install>true</Install>
</BootstrapperPackage>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

View File

@ -0,0 +1,98 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>9.0.30729</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{2321D01A-D64B-4461-9837-FACF38652212}</ProjectGuid>
<OutputType>Exe</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>ManagedEslTest</RootNamespace>
<AssemblyName>ManagedEslTest</AssemblyName>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<FileUpgradeFlags>
</FileUpgradeFlags>
<OldToolsVersion>3.5</OldToolsVersion>
<UpgradeBackupLocation />
<PublishUrl>publish\</PublishUrl>
<Install>true</Install>
<InstallFrom>Disk</InstallFrom>
<UpdateEnabled>false</UpdateEnabled>
<UpdateMode>Foreground</UpdateMode>
<UpdateInterval>7</UpdateInterval>
<UpdateIntervalUnits>Days</UpdateIntervalUnits>
<UpdatePeriodically>false</UpdatePeriodically>
<UpdateRequired>false</UpdateRequired>
<MapFileExtensions>true</MapFileExtensions>
<ApplicationRevision>0</ApplicationRevision>
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
<IsWebBootstrapper>false</IsWebBootstrapper>
<UseApplicationTrust>false</UseApplicationTrust>
<BootstrapperEnabled>true</BootstrapperEnabled>
<TargetFrameworkProfile />
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>..\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>..\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\ManagedEsl.csproj">
<Project>{DEE5837B-E01D-4223-B351-EDF9418F3F8E}</Project>
<Name>ManagedEsl</Name>
<Private>True</Private>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<BootstrapperPackage Include="Microsoft.Net.Client.3.5">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
<Install>false</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1</ProductName>
<Install>true</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
<Visible>False</Visible>
<ProductName>Windows Installer 3.1</ProductName>
<Install>true</Install>
</BootstrapperPackage>
</ItemGroup>
<ItemGroup>
<None Include="app.config" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

View File

@ -0,0 +1,74 @@

Microsoft Visual Studio Solution File, Format Version 11.00
# Visual Studio 2010
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ESL", "ESL.2010.vcxproj", "{FEA2D0AE-6713-4E41-A473-A143849BC7FF}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ManagedEsl.2010", "ManagedEsl.2010.csproj", "{DEE5837B-E01D-4223-B351-EDF9418F3F8E}"
ProjectSection(ProjectDependencies) = postProject
{FEA2D0AE-6713-4E41-A473-A143849BC7FF} = {FEA2D0AE-6713-4E41-A473-A143849BC7FF}
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ManagedEslTest.2010", "ManagedEslTest\ManagedEslTest.2010.csproj", "{2321D01A-D64B-4461-9837-FACF38652212}"
ProjectSection(ProjectDependencies) = postProject
{FEA2D0AE-6713-4E41-A473-A143849BC7FF} = {FEA2D0AE-6713-4E41-A473-A143849BC7FF}
EndProjectSection
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Debug|Mixed Platforms = Debug|Mixed Platforms
Debug|Win32 = Debug|Win32
Debug|x64 = Debug|x64
Release|Any CPU = Release|Any CPU
Release|Mixed Platforms = Release|Mixed Platforms
Release|Win32 = Release|Win32
Release|x64 = Release|x64
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{FEA2D0AE-6713-4E41-A473-A143849BC7FF}.Debug|Any CPU.ActiveCfg = Debug|Win32
{FEA2D0AE-6713-4E41-A473-A143849BC7FF}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
{FEA2D0AE-6713-4E41-A473-A143849BC7FF}.Debug|Mixed Platforms.Build.0 = Debug|Win32
{FEA2D0AE-6713-4E41-A473-A143849BC7FF}.Debug|Win32.ActiveCfg = Debug|Win32
{FEA2D0AE-6713-4E41-A473-A143849BC7FF}.Debug|Win32.Build.0 = Debug|Win32
{FEA2D0AE-6713-4E41-A473-A143849BC7FF}.Debug|x64.ActiveCfg = Debug|x64
{FEA2D0AE-6713-4E41-A473-A143849BC7FF}.Debug|x64.Build.0 = Debug|x64
{FEA2D0AE-6713-4E41-A473-A143849BC7FF}.Release|Any CPU.ActiveCfg = Release|Win32
{FEA2D0AE-6713-4E41-A473-A143849BC7FF}.Release|Mixed Platforms.ActiveCfg = Release|Win32
{FEA2D0AE-6713-4E41-A473-A143849BC7FF}.Release|Mixed Platforms.Build.0 = Release|Win32
{FEA2D0AE-6713-4E41-A473-A143849BC7FF}.Release|Win32.ActiveCfg = Release|Win32
{FEA2D0AE-6713-4E41-A473-A143849BC7FF}.Release|Win32.Build.0 = Release|Win32
{FEA2D0AE-6713-4E41-A473-A143849BC7FF}.Release|x64.ActiveCfg = Release|x64
{FEA2D0AE-6713-4E41-A473-A143849BC7FF}.Release|x64.Build.0 = Release|x64
{DEE5837B-E01D-4223-B351-EDF9418F3F8E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{DEE5837B-E01D-4223-B351-EDF9418F3F8E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{DEE5837B-E01D-4223-B351-EDF9418F3F8E}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{DEE5837B-E01D-4223-B351-EDF9418F3F8E}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{DEE5837B-E01D-4223-B351-EDF9418F3F8E}.Debug|Win32.ActiveCfg = Debug|Any CPU
{DEE5837B-E01D-4223-B351-EDF9418F3F8E}.Debug|x64.ActiveCfg = Debug|Any CPU
{DEE5837B-E01D-4223-B351-EDF9418F3F8E}.Debug|x64.Build.0 = Debug|Any CPU
{DEE5837B-E01D-4223-B351-EDF9418F3F8E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{DEE5837B-E01D-4223-B351-EDF9418F3F8E}.Release|Any CPU.Build.0 = Release|Any CPU
{DEE5837B-E01D-4223-B351-EDF9418F3F8E}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{DEE5837B-E01D-4223-B351-EDF9418F3F8E}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{DEE5837B-E01D-4223-B351-EDF9418F3F8E}.Release|Win32.ActiveCfg = Release|Any CPU
{DEE5837B-E01D-4223-B351-EDF9418F3F8E}.Release|x64.ActiveCfg = Release|Any CPU
{DEE5837B-E01D-4223-B351-EDF9418F3F8E}.Release|x64.Build.0 = Release|Any CPU
{2321D01A-D64B-4461-9837-FACF38652212}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{2321D01A-D64B-4461-9837-FACF38652212}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2321D01A-D64B-4461-9837-FACF38652212}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{2321D01A-D64B-4461-9837-FACF38652212}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{2321D01A-D64B-4461-9837-FACF38652212}.Debug|Win32.ActiveCfg = Debug|Any CPU
{2321D01A-D64B-4461-9837-FACF38652212}.Debug|x64.ActiveCfg = Debug|Any CPU
{2321D01A-D64B-4461-9837-FACF38652212}.Debug|x64.Build.0 = Debug|Any CPU
{2321D01A-D64B-4461-9837-FACF38652212}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2321D01A-D64B-4461-9837-FACF38652212}.Release|Any CPU.Build.0 = Release|Any CPU
{2321D01A-D64B-4461-9837-FACF38652212}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{2321D01A-D64B-4461-9837-FACF38652212}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{2321D01A-D64B-4461-9837-FACF38652212}.Release|Win32.ActiveCfg = Release|Any CPU
{2321D01A-D64B-4461-9837-FACF38652212}.Release|x64.ActiveCfg = Release|Any CPU
{2321D01A-D64B-4461-9837-FACF38652212}.Release|x64.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal

View File

@ -1094,9 +1094,9 @@ ESL_DECLARE(esl_status_t) esl_recv_event(esl_handle_t *handle, int check_q, esl_
esl_log(ESL_LOG_DEBUG, "RECV INNER HEADER [%s] = [%s]\n", hname, hval); esl_log(ESL_LOG_DEBUG, "RECV INNER HEADER [%s] = [%s]\n", hname, hval);
if (!strcasecmp(hname, "event-name")) { if (!strcasecmp(hname, "event-name")) {
esl_event_del_header(handle->last_ievent, "event-name"); esl_event_del_header(handle->last_ievent, "event-name");
esl_name_event(hval, &handle->last_ievent->event_id);
} }
esl_event_add_header_string(handle->last_ievent, ESL_STACK_BOTTOM, hname, hval); esl_event_add_header_string(handle->last_ievent, ESL_STACK_BOTTOM, hname, hval);
esl_name_event(hval, &handle->last_ievent->event_id);
} }
beg = c + 1; beg = c + 1;

View File

@ -120,7 +120,7 @@ ftdm_state_map_t sangoma_isdn_state_map = {
ZSD_INBOUND, ZSD_INBOUND,
ZSM_UNACCEPTABLE, ZSM_UNACCEPTABLE,
{FTDM_CHANNEL_STATE_RING, FTDM_END}, {FTDM_CHANNEL_STATE_RING, FTDM_END},
{FTDM_CHANNEL_STATE_TERMINATING, FTDM_CHANNEL_STATE_HANGUP, FTDM_CHANNEL_STATE_PROCEED, FTDM_CHANNEL_STATE_RINGING, FTDM_CHANNEL_STATE_PROGRESS, FTDM_END} {FTDM_CHANNEL_STATE_TERMINATING, FTDM_CHANNEL_STATE_HANGUP, FTDM_CHANNEL_STATE_PROCEED, FTDM_CHANNEL_STATE_RINGING, FTDM_CHANNEL_STATE_PROGRESS, FTDM_CHANNEL_STATE_PROGRESS_MEDIA, FTDM_END}
}, },
{ {
ZSD_INBOUND, ZSD_INBOUND,

View File

@ -38,6 +38,7 @@ static ftdm_status_t parse_switchtype(const char* switch_name, ftdm_span_t *span
static ftdm_status_t parse_signalling(const char* signalling, ftdm_span_t *span); static ftdm_status_t parse_signalling(const char* signalling, ftdm_span_t *span);
static ftdm_status_t add_local_number(const char* val, ftdm_span_t *span); static ftdm_status_t add_local_number(const char* val, ftdm_span_t *span);
static ftdm_status_t parse_yesno(const char* var, const char* val, uint8_t *target); static ftdm_status_t parse_yesno(const char* var, const char* val, uint8_t *target);
static ftdm_status_t set_switchtype_defaults(ftdm_span_t *span);
extern ftdm_sngisdn_data_t g_sngisdn_data; extern ftdm_sngisdn_data_t g_sngisdn_data;
@ -149,7 +150,7 @@ static ftdm_status_t parse_switchtype(const char* switch_name, ftdm_span_t *span
g_sngisdn_data.spans[signal_data->link_id] = signal_data; g_sngisdn_data.spans[signal_data->link_id] = signal_data;
ftdm_log(FTDM_LOG_DEBUG, "%s: cc_id:%d dchan_id:%d span_id:%d\n", span->name, signal_data->cc_id, signal_data->dchan_id, signal_data->span_id); ftdm_log(FTDM_LOG_DEBUG, "%s: cc_id:%d dchan_id:%d span_id:%d link_id:%d\n", span->name, signal_data->cc_id, signal_data->dchan_id, signal_data->span_id, signal_data->link_id);
chaniter = ftdm_span_get_chan_iterator(span, NULL); chaniter = ftdm_span_get_chan_iterator(span, NULL);
@ -191,6 +192,63 @@ static ftdm_status_t parse_signalling(const char* signalling, ftdm_span_t *span)
return FTDM_SUCCESS; return FTDM_SUCCESS;
} }
static ftdm_status_t set_switchtype_defaults(ftdm_span_t *span)
{
sngisdn_span_data_t *signal_data = (sngisdn_span_data_t*) span->signal_data;
switch(signal_data->switchtype) {
case SNGISDN_SWITCH_NI2:
case SNGISDN_SWITCH_5ESS:
case SNGISDN_SWITCH_4ESS:
case SNGISDN_SWITCH_DMS100:
if (span->default_caller_data.dnis.plan >= FTDM_NPI_INVALID) {
ftdm_set_npi("isdn", &span->default_caller_data.dnis.plan);
}
if (span->default_caller_data.dnis.type >= FTDM_TON_INVALID) {
ftdm_set_ton("national", &span->default_caller_data.dnis.type);
}
if (span->default_caller_data.cid_num.plan >= FTDM_NPI_INVALID) {
ftdm_set_npi("isdn", &span->default_caller_data.cid_num.plan);
}
if (span->default_caller_data.cid_num.type >= FTDM_TON_INVALID) {
ftdm_set_ton("national", &span->default_caller_data.cid_num.type);
}
if (span->default_caller_data.rdnis.plan >= FTDM_NPI_INVALID) {
ftdm_set_npi("isdn", &span->default_caller_data.rdnis.plan);
}
if (span->default_caller_data.rdnis.type >= FTDM_TON_INVALID) {
ftdm_set_ton("national", &span->default_caller_data.rdnis.type);
}
break;
case SNGISDN_SWITCH_EUROISDN:
case SNGISDN_SWITCH_QSIG:
case SNGISDN_SWITCH_INSNET:
if (span->default_caller_data.dnis.plan >= FTDM_NPI_INVALID) {
ftdm_set_npi("unknown", &span->default_caller_data.dnis.plan);
}
if (span->default_caller_data.dnis.type >= FTDM_TON_INVALID) {
ftdm_set_ton("unknown", &span->default_caller_data.dnis.type);
}
if (span->default_caller_data.cid_num.plan >= FTDM_NPI_INVALID) {
ftdm_set_npi("unknown", &span->default_caller_data.cid_num.plan);
}
if (span->default_caller_data.cid_num.type >= FTDM_TON_INVALID) {
ftdm_set_ton("unknown", &span->default_caller_data.cid_num.type);
}
if (span->default_caller_data.rdnis.plan >= FTDM_NPI_INVALID) {
ftdm_set_npi("unknown", &span->default_caller_data.rdnis.plan);
}
if (span->default_caller_data.rdnis.type >= FTDM_TON_INVALID) {
ftdm_set_ton("unknown", &span->default_caller_data.rdnis.type);
}
break;
case SNGISDN_SWITCH_INVALID:
default:
ftdm_log(FTDM_LOG_ERROR, "Unsupported switchtype[%d]\n", signal_data->switchtype);
return FTDM_FAIL;
}
return FTDM_SUCCESS;
}
ftdm_status_t ftmod_isdn_parse_cfg(ftdm_conf_parameter_t *ftdm_parameters, ftdm_span_t *span) ftdm_status_t ftmod_isdn_parse_cfg(ftdm_conf_parameter_t *ftdm_parameters, ftdm_span_t *span)
{ {
unsigned paramindex; unsigned paramindex;
@ -205,31 +263,19 @@ ftdm_status_t ftmod_isdn_parse_cfg(ftdm_conf_parameter_t *ftdm_parameters, ftdm_
signal_data->ignore_cause_value = SNGISDN_OPT_DEFAULT; signal_data->ignore_cause_value = SNGISDN_OPT_DEFAULT;
signal_data->timer_t3 = 8; signal_data->timer_t3 = 8;
signal_data->restart_opt = SNGISDN_OPT_DEFAULT; signal_data->restart_opt = SNGISDN_OPT_DEFAULT;
signal_data->link_id = span->span_id; signal_data->link_id = span->span_id;
span->default_caller_data.bearer_capability = IN_ITC_SPEECH;
span->default_caller_data.dnis.plan = FTDM_NPI_INVALID;
span->default_caller_data.dnis.type = FTDM_TON_INVALID;
span->default_caller_data.cid_num.plan = FTDM_NPI_INVALID;
span->default_caller_data.cid_num.type = FTDM_TON_INVALID;
span->default_caller_data.rdnis.plan = FTDM_NPI_INVALID;
span->default_caller_data.rdnis.type = FTDM_TON_INVALID;
span->default_caller_data.bearer_capability = IN_ITC_SPEECH;
/* Cannot set default bearer_layer1 yet, as we do not know the switchtype */ /* Cannot set default bearer_layer1 yet, as we do not know the switchtype */
span->default_caller_data.bearer_layer1 = FTDM_INVALID_INT_PARM; span->default_caller_data.bearer_layer1 = FTDM_INVALID_INT_PARM;
if (span->trunk_type == FTDM_TRUNK_BRI ||
span->trunk_type == FTDM_TRUNK_BRI_PTMP) {
ftdm_set_npi("unknown", &span->default_caller_data.dnis.plan);
ftdm_set_ton("unknown", &span->default_caller_data.dnis.type);
ftdm_set_npi("unknown", &span->default_caller_data.cid_num.plan);
ftdm_set_ton("unknown", &span->default_caller_data.cid_num.type);
ftdm_set_npi("unknown", &span->default_caller_data.rdnis.plan);
ftdm_set_ton("unknown", &span->default_caller_data.rdnis.type);
} else {
ftdm_set_npi("isdn", &span->default_caller_data.dnis.plan);
ftdm_set_ton("national", &span->default_caller_data.dnis.type);
ftdm_set_npi("isdn", &span->default_caller_data.cid_num.plan);
ftdm_set_ton("national", &span->default_caller_data.cid_num.type);
ftdm_set_npi("isdn", &span->default_caller_data.rdnis.plan);
ftdm_set_ton("national", &span->default_caller_data.rdnis.type);
}
for (paramindex = 0; ftdm_parameters[paramindex].var; paramindex++) { for (paramindex = 0; ftdm_parameters[paramindex].var; paramindex++) {
ftdm_log(FTDM_LOG_DEBUG, "Sangoma ISDN key=value, %s=%s\n", ftdm_parameters[paramindex].var, ftdm_parameters[paramindex].val); ftdm_log(FTDM_LOG_DEBUG, "Sangoma ISDN key=value, %s=%s\n", ftdm_parameters[paramindex].var, ftdm_parameters[paramindex].val);
var = ftdm_parameters[paramindex].var; var = ftdm_parameters[paramindex].var;
@ -239,6 +285,9 @@ ftdm_status_t ftmod_isdn_parse_cfg(ftdm_conf_parameter_t *ftdm_parameters, ftdm_
if (parse_switchtype(val, span) != FTDM_SUCCESS) { if (parse_switchtype(val, span) != FTDM_SUCCESS) {
return FTDM_FAIL; return FTDM_FAIL;
} }
if (set_switchtype_defaults(span) != FTDM_SUCCESS) {
return FTDM_FAIL;
}
} else if (!strcasecmp(var, "signalling") || } else if (!strcasecmp(var, "signalling") ||
!strcasecmp(var, "interface")) { !strcasecmp(var, "interface")) {
if (parse_signalling(val, span) != FTDM_SUCCESS) { if (parse_signalling(val, span) != FTDM_SUCCESS) {

View File

@ -216,7 +216,7 @@ ftdm_status_t sngisdn_stack_cfg_phy_psap(ftdm_span_t *span)
cfg.hdr.entId.inst = S_INST; cfg.hdr.entId.inst = S_INST;
cfg.hdr.elmId.elmnt = STPSAP; cfg.hdr.elmId.elmnt = STPSAP;
cfg.hdr.elmId.elmntInst1 = signal_data->link_id; cfg.hdr.elmId.elmntInst1 = signal_data->dchan_id;
if (!signal_data->dchan) { if (!signal_data->dchan) {
ftdm_log(FTDM_LOG_ERROR, "%s:No d-channels specified\n", span->name); ftdm_log(FTDM_LOG_ERROR, "%s:No d-channels specified\n", span->name);
@ -241,7 +241,8 @@ ftdm_status_t sngisdn_stack_cfg_phy_psap(ftdm_span_t *span)
ftdm_log(FTDM_LOG_ERROR, "%s:Unsupported trunk type %d\n", span->name, span->trunk_type); ftdm_log(FTDM_LOG_ERROR, "%s:Unsupported trunk type %d\n", span->name, span->trunk_type);
return FTDM_FAIL; return FTDM_FAIL;
} }
cfg.t.cfg.s.l1PSAP.spId = signal_data->link_id;
cfg.t.cfg.s.l1PSAP.spId = signal_data->dchan_id;
if (sng_isdn_phy_config(&pst, &cfg)) { if (sng_isdn_phy_config(&pst, &cfg)) {
return FTDM_FAIL; return FTDM_FAIL;
@ -315,7 +316,7 @@ ftdm_status_t sngisdn_stack_cfg_q921_msap(ftdm_span_t *span)
cfg.hdr.entId.inst = S_INST; cfg.hdr.entId.inst = S_INST;
cfg.hdr.elmId.elmnt = STMSAP; cfg.hdr.elmId.elmnt = STMSAP;
cfg.t.cfg.s.bdMSAP.lnkNmb = signal_data->link_id; cfg.t.cfg.s.bdMSAP.lnkNmb = signal_data->dchan_id;
cfg.t.cfg.s.bdMSAP.maxOutsFrms = 24; /* MAC window */ cfg.t.cfg.s.bdMSAP.maxOutsFrms = 24; /* MAC window */
cfg.t.cfg.s.bdMSAP.tQUpperTrs = 32; /* Tx Queue Upper Threshold */ cfg.t.cfg.s.bdMSAP.tQUpperTrs = 32; /* Tx Queue Upper Threshold */
@ -408,7 +409,7 @@ ftdm_status_t sngisdn_stack_cfg_q921_dlsap(ftdm_span_t *span, uint8_t management
cfg.hdr.entId.inst = S_INST; cfg.hdr.entId.inst = S_INST;
cfg.hdr.elmId.elmnt = STDLSAP; cfg.hdr.elmId.elmnt = STDLSAP;
cfg.t.cfg.s.bdDLSAP.lnkNmb = signal_data->link_id; cfg.t.cfg.s.bdDLSAP.lnkNmb = signal_data->dchan_id;
cfg.t.cfg.s.bdDLSAP.n201 = 1028; /* n201 */ cfg.t.cfg.s.bdDLSAP.n201 = 1028; /* n201 */
if (span->trunk_type == FTDM_TRUNK_BRI_PTMP || if (span->trunk_type == FTDM_TRUNK_BRI_PTMP ||
@ -613,9 +614,9 @@ ftdm_status_t sngisdn_stack_cfg_q931_dlsap(ftdm_span_t *span)
cfg.hdr.response.selector=0; cfg.hdr.response.selector=0;
cfg.t.cfg.s.inDLSAP.sapId = signal_data->dchan_id;
cfg.t.cfg.s.inDLSAP.spId = signal_data->dchan_id;
cfg.t.cfg.s.inDLSAP.sapId = signal_data->link_id;
cfg.t.cfg.s.inDLSAP.spId = signal_data->link_id;
cfg.t.cfg.s.inDLSAP.swtch = sng_isdn_stack_switchtype(signal_data->switchtype); cfg.t.cfg.s.inDLSAP.swtch = sng_isdn_stack_switchtype(signal_data->switchtype);
cfg.t.cfg.s.inDLSAP.n201 = 1024; cfg.t.cfg.s.inDLSAP.n201 = 1024;
@ -876,8 +877,7 @@ ftdm_status_t sngisdn_stack_cfg_q931_lce(ftdm_span_t *span)
cfg.hdr.response.selector=0; cfg.hdr.response.selector=0;
cfg.t.cfg.s.inLCe.sapId = signal_data->link_id; cfg.t.cfg.s.inLCe.sapId = signal_data->dchan_id;
cfg.t.cfg.s.inLCe.lnkUpDwnInd = TRUE; cfg.t.cfg.s.inLCe.lnkUpDwnInd = TRUE;
cfg.t.cfg.s.inLCe.tCon.enb = TRUE; cfg.t.cfg.s.inLCe.tCon.enb = TRUE;

View File

@ -146,7 +146,8 @@ ftdm_status_t sngisdn_deactivate_phy(ftdm_span_t *span)
cntrl.t.cntrl.action = AUBND_DIS; cntrl.t.cntrl.action = AUBND_DIS;
cntrl.t.cntrl.subAction = SAELMNT; cntrl.t.cntrl.subAction = SAELMNT;
cntrl.t.cntrl.sapId = signal_data->link_id;
cntrl.t.cntrl.sapId = signal_data->dchan_id;
if (sng_isdn_phy_cntrl(&pst, &cntrl)) { if (sng_isdn_phy_cntrl(&pst, &cntrl)) {
return FTDM_FAIL; return FTDM_FAIL;
@ -180,7 +181,8 @@ ftdm_status_t sngisdn_wake_up_phy(ftdm_span_t *span)
cntrl.t.cntrl.action = AENA; cntrl.t.cntrl.action = AENA;
cntrl.t.cntrl.subAction = SAELMNT; cntrl.t.cntrl.subAction = SAELMNT;
cntrl.t.cntrl.sapId = signal_data->link_id;
cntrl.t.cntrl.sapId = signal_data->dchan_id;
if (sng_isdn_phy_cntrl(&pst, &cntrl)) { if (sng_isdn_phy_cntrl(&pst, &cntrl)) {
return FTDM_FAIL; return FTDM_FAIL;
@ -298,7 +300,8 @@ ftdm_status_t sngisdn_cntrl_q931(ftdm_span_t *span, uint8_t action, uint8_t suba
if (action == AENA && subaction == SATRC) { if (action == AENA && subaction == SATRC) {
cntrl.t.cntrl.trcLen = -1; /* Trace the entire message buffer */ cntrl.t.cntrl.trcLen = -1; /* Trace the entire message buffer */
} }
cntrl.t.cntrl.sapId = signal_data->link_id;
cntrl.t.cntrl.sapId = signal_data->dchan_id;
cntrl.t.cntrl.ces = 0; cntrl.t.cntrl.ces = 0;
if(sng_isdn_q931_cntrl(&pst, &cntrl)) { if(sng_isdn_q931_cntrl(&pst, &cntrl)) {
@ -339,11 +342,11 @@ ftdm_status_t sngisdn_cntrl_q921(ftdm_span_t *span, uint8_t action, uint8_t suba
cntrl.t.cntrl.subAction = subaction; cntrl.t.cntrl.subAction = subaction;
#if (SMBD_LMINT3 || BD_LMINT3) #if (SMBD_LMINT3 || BD_LMINT3)
cntrl.t.cntrl.lnkNmb = signal_data->link_id; cntrl.t.cntrl.lnkNmb = signal_data->dchan_id;
cntrl.t.cntrl.sapi = NOTUSED; cntrl.t.cntrl.sapi = NOTUSED;
cntrl.t.cntrl.tei = NOTUSED; cntrl.t.cntrl.tei = NOTUSED;
#else /* _LMINT3 */ #else /* _LMINT3 */
cntrl.hdr.elmId.elmntInst1 = signal_data->link_id; cntrl.hdr.elmId.elmntInst1 = signal_data->dchan_id;
cntrl.hdr.elmId.elmntInst2 = NOTUSED; cntrl.hdr.elmId.elmntInst2 = NOTUSED;
cntrl.hdr.elmId.elmntInst3 = NOTUSED; cntrl.hdr.elmId.elmntInst3 = NOTUSED;
#endif /* _LMINT3 */ #endif /* _LMINT3 */

View File

@ -491,8 +491,8 @@ void sngisdn_snd_data(ftdm_channel_t *dchan, uint8_t *data, ftdm_size_t len)
/* Should we trigger congestion here? */ /* Should we trigger congestion here? */
l1_frame.flags |= SNG_L1FRAME_QUEUE_FULL; l1_frame.flags |= SNG_L1FRAME_QUEUE_FULL;
} }
sng_isdn_data_ind(signal_data->link_id, &l1_frame); sng_isdn_data_ind(signal_data->dchan_id, &l1_frame);
} }
void sngisdn_snd_event(ftdm_channel_t *dchan, ftdm_oob_event_t event) void sngisdn_snd_event(ftdm_channel_t *dchan, ftdm_oob_event_t event)
@ -506,11 +506,11 @@ void sngisdn_snd_event(ftdm_channel_t *dchan, ftdm_oob_event_t event)
switch(event) { switch(event) {
case FTDM_OOB_ALARM_CLEAR: case FTDM_OOB_ALARM_CLEAR:
l1_event.type = SNG_L1EVENT_ALARM_OFF; l1_event.type = SNG_L1EVENT_ALARM_OFF;
sng_isdn_event_ind(signal_data->link_id, &l1_event); sng_isdn_event_ind(signal_data->dchan_id, &l1_event);
break; break;
case FTDM_OOB_ALARM_TRAP: case FTDM_OOB_ALARM_TRAP:
l1_event.type = SNG_L1EVENT_ALARM_ON; l1_event.type = SNG_L1EVENT_ALARM_ON;
sng_isdn_event_ind(signal_data->link_id, &l1_event); sng_isdn_event_ind(signal_data->dchan_id, &l1_event);
break; break;
default: default:
/* We do not care about the other OOB events for now */ /* We do not care about the other OOB events for now */

View File

@ -662,7 +662,9 @@ void sngisdn_rcv_phy_ind(SuId suId, Reason reason)
void sngisdn_rcv_q921_ind(BdMngmt *status) void sngisdn_rcv_q921_ind(BdMngmt *status)
{ {
ftdm_span_t *ftdmspan; ftdm_span_t *ftdmspan;
sngisdn_span_data_t *signal_data = g_sngisdn_data.spans[status->t.usta.lnkNmb];
sngisdn_span_data_t *signal_data = g_sngisdn_data.dchans[status->t.usta.lnkNmb].spans[1];
if (!signal_data) { if (!signal_data) {
ftdm_log(FTDM_LOG_INFO, "Received q921 status on unconfigured span (lnkNmb:%d)\n", status->t.usta.lnkNmb); ftdm_log(FTDM_LOG_INFO, "Received q921 status on unconfigured span (lnkNmb:%d)\n", status->t.usta.lnkNmb);
return; return;
@ -715,7 +717,7 @@ void sngisdn_rcv_q931_ind(InMngmt *status)
case LCM_EVENT_DOWN: case LCM_EVENT_DOWN:
{ {
ftdm_span_t *ftdmspan; ftdm_span_t *ftdmspan;
sngisdn_span_data_t *signal_data = g_sngisdn_data.spans[status->t.usta.suId]; sngisdn_span_data_t *signal_data = g_sngisdn_data.dchans[status->t.usta.suId].spans[1];
if (!signal_data) { if (!signal_data) {
ftdm_log(FTDM_LOG_INFO, "Received q931 status on unconfigured span (lnkNmb:%d)\n", status->t.usta.suId); ftdm_log(FTDM_LOG_INFO, "Received q931 status on unconfigured span (lnkNmb:%d)\n", status->t.usta.suId);
return; return;
@ -784,7 +786,8 @@ void sngisdn_rcv_q931_trace(InMngmt *trc, Buffer *mBuf)
uint8_t data; uint8_t data;
ftdm_trace_dir_t dir; ftdm_trace_dir_t dir;
uint8_t tdata[1000]; uint8_t tdata[1000];
sngisdn_span_data_t *signal_data = g_sngisdn_data.spans[trc->t.trc.suId];
sngisdn_span_data_t *signal_data = g_sngisdn_data.dchans[trc->t.trc.suId].spans[1];
ftdm_assert(mBuf != NULLP, "Received a Q931 trace with no buffer"); ftdm_assert(mBuf != NULLP, "Received a Q931 trace with no buffer");
mlen = ((SsMsgInfo*)(mBuf->b_rptr))->len; mlen = ((SsMsgInfo*)(mBuf->b_rptr))->len;
@ -830,7 +833,8 @@ void sngisdn_rcv_q921_trace(BdMngmt *trc, Buffer *mBuf)
uint8_t data; uint8_t data;
ftdm_trace_dir_t dir; ftdm_trace_dir_t dir;
uint8_t tdata[1000]; uint8_t tdata[1000];
sngisdn_span_data_t *signal_data = g_sngisdn_data.spans[trc->t.trc.lnkNmb];
sngisdn_span_data_t *signal_data = g_sngisdn_data.dchans[trc->t.trc.lnkNmb].spans[1];
if (trc->t.trc.evnt == TL2TMR) { if (trc->t.trc.evnt == TL2TMR) {
return; return;
@ -879,7 +883,7 @@ int16_t sngisdn_rcv_l1_data_req(uint16_t spId, sng_l1_frame_t *l1_frame)
{ {
ftdm_status_t status; ftdm_status_t status;
ftdm_wait_flag_t flags = FTDM_WRITE; ftdm_wait_flag_t flags = FTDM_WRITE;
sngisdn_span_data_t *signal_data = g_sngisdn_data.spans[spId]; sngisdn_span_data_t *signal_data = g_sngisdn_data.dchans[spId].spans[1];
ftdm_size_t length = l1_frame->len; ftdm_size_t length = l1_frame->len;
ftdm_assert(signal_data, "Received Data request on unconfigured span\n"); ftdm_assert(signal_data, "Received Data request on unconfigured span\n");
@ -912,8 +916,8 @@ int16_t sngisdn_rcv_l1_data_req(uint16_t spId, sng_l1_frame_t *l1_frame)
} }
int16_t sngisdn_rcv_l1_cmd_req(uint16_t spId, sng_l1_cmd_t *l1_cmd) int16_t sngisdn_rcv_l1_cmd_req(uint16_t spId, sng_l1_cmd_t *l1_cmd)
{ {
sngisdn_span_data_t *signal_data = g_sngisdn_data.spans[spId]; sngisdn_span_data_t *signal_data = g_sngisdn_data.dchans[spId].spans[1];
ftdm_assert(signal_data, "Received Data request on unconfigured span\n"); ftdm_assert(signal_data, "Received Data request on unconfigured span\n");
switch(l1_cmd->type) { switch(l1_cmd->type) {

View File

@ -401,7 +401,6 @@ typedef enum {
FTDM_SIGEVENT_ADD_CALL, /*!< New call should be added to the channel */ FTDM_SIGEVENT_ADD_CALL, /*!< New call should be added to the channel */
FTDM_SIGEVENT_RESTART, /*!< Restart has been requested. Typically you hangup your call resources here */ FTDM_SIGEVENT_RESTART, /*!< Restart has been requested. Typically you hangup your call resources here */
FTDM_SIGEVENT_SIGSTATUS_CHANGED, /*!< Signaling protocol status changed (ie: D-chan up), see new status in raw_data ftdm_sigmsg_t member */ FTDM_SIGEVENT_SIGSTATUS_CHANGED, /*!< Signaling protocol status changed (ie: D-chan up), see new status in raw_data ftdm_sigmsg_t member */
FTDM_SIGEVENT_COLLISION, /*!< Outgoing call was dropped because an incoming call arrived at the same time */
FTDM_SIGEVENT_FACILITY, /*!< In call facility event */ FTDM_SIGEVENT_FACILITY, /*!< In call facility event */
FTDM_SIGEVENT_TRACE, /*!<Interpreted trace event */ FTDM_SIGEVENT_TRACE, /*!<Interpreted trace event */
FTDM_SIGEVENT_TRACE_RAW, /*!<Raw trace event */ FTDM_SIGEVENT_TRACE_RAW, /*!<Raw trace event */

View File

@ -1,42 +1,42 @@
/ -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- // -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
/ //
/ The contents of this file are subject to the Mozilla Public // The contents of this file are subject to the Mozilla Public
/ License Version 1.1 (the "License"); you may not use this file // License Version 1.1 (the "License"); you may not use this file
/ except in compliance with the License. You may obtain a copy of // except in compliance with the License. You may obtain a copy of
/ the License at http://www.mozilla.org/MPL/ // the License at http://www.mozilla.org/MPL/
/ //
/ Software distributed under the License is distributed on an "AS // Software distributed under the License is distributed on an "AS
/ IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or // IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
/ implied. See the License for the specific language governing // implied. See the License for the specific language governing
/ rights and limitations under the License. // rights and limitations under the License.
/ //
/ The Original Code is the Netscape Portable Runtime (NSPR). // The Original Code is the Netscape Portable Runtime (NSPR).
/ //
/ The Initial Developer of the Original Code is Netscape // The Initial Developer of the Original Code is Netscape
/ Communications Corporation. Portions created by Netscape are // Communications Corporation. Portions created by Netscape are
/ Copyright (C) 2000 Netscape Communications Corporation. All // Copyright (C) 2000 Netscape Communications Corporation. All
/ Rights Reserved. // Rights Reserved.
/ //
/ Contributor(s): // Contributor(s):
/ //
/ Alternatively, the contents of this file may be used under the // Alternatively, the contents of this file may be used under the
/ terms of the GNU General Public License Version 2 or later (the // terms of the GNU General Public License Version 2 or later (the
/ "GPL"), in which case the provisions of the GPL are applicable // "GPL"), in which case the provisions of the GPL are applicable
/ instead of those above. If you wish to allow use of your // instead of those above. If you wish to allow use of your
/ version of this file only under the terms of the GPL and not to // version of this file only under the terms of the GPL and not to
/ allow others to use your version of this file under the MPL, // allow others to use your version of this file under the MPL,
/ indicate your decision by deleting the provisions above and // indicate your decision by deleting the provisions above and
/ replace them with the notice and other provisions required by // replace them with the notice and other provisions required by
/ the GPL. If you do not delete the provisions above, a recipient // the GPL. If you do not delete the provisions above, a recipient
/ may use your version of this file under either the MPL or the // may use your version of this file under either the MPL or the
/ GPL. // GPL.
/ //
/ PRInt32 _PR_x86_AtomicIncrement(PRInt32 *val) // PRInt32 _PR_x86_AtomicIncrement(PRInt32 *val)
/ //
/ Atomically increment the integer pointed to by 'val' and return // Atomically increment the integer pointed to by 'val' and return
/ the result of the increment. // the result of the increment.
/ //
.text .text
.globl _PR_x86_AtomicIncrement .globl _PR_x86_AtomicIncrement
.align 4 .align 4
@ -48,11 +48,11 @@ _PR_x86_AtomicIncrement:
incl %eax incl %eax
ret ret
/ PRInt32 _PR_x86_AtomicDecrement(PRInt32 *val) // PRInt32 _PR_x86_AtomicDecrement(PRInt32 *val)
/ //
/ Atomically decrement the integer pointed to by 'val' and return // Atomically decrement the integer pointed to by 'val' and return
/ the result of the decrement. // the result of the decrement.
/ //
.text .text
.globl _PR_x86_AtomicDecrement .globl _PR_x86_AtomicDecrement
.align 4 .align 4
@ -64,25 +64,25 @@ _PR_x86_AtomicDecrement:
decl %eax decl %eax
ret ret
/ PRInt32 _PR_x86_AtomicSet(PRInt32 *val, PRInt32 newval) // PRInt32 _PR_x86_AtomicSet(PRInt32 *val, PRInt32 newval)
/ //
/ Atomically set the integer pointed to by 'val' to the new // Atomically set the integer pointed to by 'val' to the new
/ value 'newval' and return the old value. // value 'newval' and return the old value.
/ //
/ An alternative implementation: // An alternative implementation:
/ .text // .text
/ .globl _PR_x86_AtomicSet // .globl _PR_x86_AtomicSet
/ .align 4 // .align 4
/_PR_x86_AtomicSet: //_PR_x86_AtomicSet:
/ movl 4(%esp), %ecx // movl 4(%esp), %ecx
/ movl 8(%esp), %edx // movl 8(%esp), %edx
/ movl (%ecx), %eax // movl (%ecx), %eax
/retry: //retry:
/ lock // lock
/ cmpxchgl %edx, (%ecx) // cmpxchgl %edx, (%ecx)
/ jne retry // jne retry
/ ret // ret
/ //
.text .text
.globl _PR_x86_AtomicSet .globl _PR_x86_AtomicSet
.align 4 .align 4
@ -92,11 +92,11 @@ _PR_x86_AtomicSet:
xchgl %eax, (%ecx) xchgl %eax, (%ecx)
ret ret
/ PRInt32 _PR_x86_AtomicAdd(PRInt32 *ptr, PRInt32 val) // PRInt32 _PR_x86_AtomicAdd(PRInt32 *ptr, PRInt32 val)
/ //
/ Atomically add 'val' to the integer pointed to by 'ptr' // Atomically add 'val' to the integer pointed to by 'ptr'
/ and return the result of the addition. // and return the result of the addition.
/ //
.text .text
.globl _PR_x86_AtomicAdd .globl _PR_x86_AtomicAdd
.align 4 .align 4
@ -109,5 +109,5 @@ _PR_x86_AtomicAdd:
addl %edx, %eax addl %edx, %eax
ret ret
/ Magic indicating no need for an executable stack // Magic indicating no need for an executable stack
.section .note.GNU-stack, "", @progbits ; .previous .section .note.GNU-stack, "", @progbits ; .previous

View File

@ -1,42 +1,42 @@
/ -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- // -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
/ //
/ The contents of this file are subject to the Mozilla Public // The contents of this file are subject to the Mozilla Public
/ License Version 1.1 (the "License"); you may not use this file // License Version 1.1 (the "License"); you may not use this file
/ except in compliance with the License. You may obtain a copy of // except in compliance with the License. You may obtain a copy of
/ the License at http://www.mozilla.org/MPL/ // the License at http://www.mozilla.org/MPL/
/ //
/ Software distributed under the License is distributed on an "AS // Software distributed under the License is distributed on an "AS
/ IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or // IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
/ implied. See the License for the specific language governing // implied. See the License for the specific language governing
/ rights and limitations under the License. // rights and limitations under the License.
/ //
/ The Original Code is the Netscape Portable Runtime (NSPR). // The Original Code is the Netscape Portable Runtime (NSPR).
/ //
/ The Initial Developer of the Original Code is Netscape // The Initial Developer of the Original Code is Netscape
/ Communications Corporation. Portions created by Netscape are // Communications Corporation. Portions created by Netscape are
/ Copyright (C) 2004 Netscape Communications Corporation. All // Copyright (C) 2004 Netscape Communications Corporation. All
/ Rights Reserved. // Rights Reserved.
/ //
/ Contributor(s): // Contributor(s):
/ //
/ Alternatively, the contents of this file may be used under the // Alternatively, the contents of this file may be used under the
/ terms of the GNU General Public License Version 2 or later (the // terms of the GNU General Public License Version 2 or later (the
/ "GPL"), in which case the provisions of the GPL are applicable // "GPL"), in which case the provisions of the GPL are applicable
/ instead of those above. If you wish to allow use of your // instead of those above. If you wish to allow use of your
/ version of this file only under the terms of the GPL and not to // version of this file only under the terms of the GPL and not to
/ allow others to use your version of this file under the MPL, // allow others to use your version of this file under the MPL,
/ indicate your decision by deleting the provisions above and // indicate your decision by deleting the provisions above and
/ replace them with the notice and other provisions required by // replace them with the notice and other provisions required by
/ the GPL. If you do not delete the provisions above, a recipient // the GPL. If you do not delete the provisions above, a recipient
/ may use your version of this file under either the MPL or the // may use your version of this file under either the MPL or the
/ GPL. // GPL.
/ //
/ PRInt32 _PR_x86_64_AtomicIncrement(PRInt32 *val) // PRInt32 _PR_x86_64_AtomicIncrement(PRInt32 *val)
/ //
/ Atomically increment the integer pointed to by 'val' and return // Atomically increment the integer pointed to by 'val' and return
/ the result of the increment. // the result of the increment.
/ //
.text .text
.globl _PR_x86_64_AtomicIncrement .globl _PR_x86_64_AtomicIncrement
.align 4 .align 4
@ -47,11 +47,11 @@ _PR_x86_64_AtomicIncrement:
incl %eax incl %eax
ret ret
/ PRInt32 _PR_x86_64_AtomicDecrement(PRInt32 *val) // PRInt32 _PR_x86_64_AtomicDecrement(PRInt32 *val)
/ //
/ Atomically decrement the integer pointed to by 'val' and return // Atomically decrement the integer pointed to by 'val' and return
/ the result of the decrement. // the result of the decrement.
/ //
.text .text
.globl _PR_x86_64_AtomicDecrement .globl _PR_x86_64_AtomicDecrement
.align 4 .align 4
@ -62,11 +62,11 @@ _PR_x86_64_AtomicDecrement:
decl %eax decl %eax
ret ret
/ PRInt32 _PR_x86_64_AtomicSet(PRInt32 *val, PRInt32 newval) // PRInt32 _PR_x86_64_AtomicSet(PRInt32 *val, PRInt32 newval)
/ //
/ Atomically set the integer pointed to by 'val' to the new // Atomically set the integer pointed to by 'val' to the new
/ value 'newval' and return the old value. // value 'newval' and return the old value.
/ //
.text .text
.globl _PR_x86_64_AtomicSet .globl _PR_x86_64_AtomicSet
.align 4 .align 4
@ -75,11 +75,11 @@ _PR_x86_64_AtomicSet:
xchgl %eax, (%rdi) xchgl %eax, (%rdi)
ret ret
/ PRInt32 _PR_x86_64_AtomicAdd(PRInt32 *ptr, PRInt32 val) // PRInt32 _PR_x86_64_AtomicAdd(PRInt32 *ptr, PRInt32 val)
/ //
/ Atomically add 'val' to the integer pointed to by 'ptr' // Atomically add 'val' to the integer pointed to by 'ptr'
/ and return the result of the addition. // and return the result of the addition.
/ //
.text .text
.globl _PR_x86_64_AtomicAdd .globl _PR_x86_64_AtomicAdd
.align 4 .align 4
@ -90,5 +90,5 @@ _PR_x86_64_AtomicAdd:
addl %esi, %eax addl %esi, %eax
ret ret
/ Magic indicating no need for an executable stack // Magic indicating no need for an executable stack
/.section .note.GNU-stack, "", @progbits ; .previous //.section .note.GNU-stack, "", @progbits ; .previous

View File

@ -1,36 +1,36 @@
/ -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- // -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
/ //
/ The contents of this file are subject to the Mozilla Public // The contents of this file are subject to the Mozilla Public
/ License Version 1.1 (the "License"); you may not use this file // License Version 1.1 (the "License"); you may not use this file
/ except in compliance with the License. You may obtain a copy of // except in compliance with the License. You may obtain a copy of
/ the License at http://www.mozilla.org/MPL/ // the License at http://www.mozilla.org/MPL/
/ //
/ Software distributed under the License is distributed on an "AS // Software distributed under the License is distributed on an "AS
/ IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or // IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
/ implied. See the License for the specific language governing // implied. See the License for the specific language governing
/ rights and limitations under the License. // rights and limitations under the License.
/ //
/ The Original Code is the Netscape Portable Runtime (NSPR). // The Original Code is the Netscape Portable Runtime (NSPR).
/ //
/ The Initial Developer of the Original Code is Netscape // The Initial Developer of the Original Code is Netscape
/ Communications Corporation. Portions created by Netscape are // Communications Corporation. Portions created by Netscape are
/ Copyright (C) 1998-2000 Netscape Communications Corporation. All // Copyright (C) 1998-2000 Netscape Communications Corporation. All
/ Rights Reserved. // Rights Reserved.
/ //
/ Contributor(s): // Contributor(s):
/ //
/ Alternatively, the contents of this file may be used under the // Alternatively, the contents of this file may be used under the
/ terms of the GNU General Public License Version 2 or later (the // terms of the GNU General Public License Version 2 or later (the
/ "GPL"), in which case the provisions of the GPL are applicable // "GPL"), in which case the provisions of the GPL are applicable
/ instead of those above. If you wish to allow use of your // instead of those above. If you wish to allow use of your
/ version of this file only under the terms of the GPL and not to // version of this file only under the terms of the GPL and not to
/ allow others to use your version of this file under the MPL, // allow others to use your version of this file under the MPL,
/ indicate your decision by deleting the provisions above and // indicate your decision by deleting the provisions above and
/ replace them with the notice and other provisions required by // replace them with the notice and other provisions required by
/ the GPL. If you do not delete the provisions above, a recipient // the GPL. If you do not delete the provisions above, a recipient
/ may use your version of this file under either the MPL or the // may use your version of this file under either the MPL or the
/ GPL. // GPL.
/ //
.text .text
@ -56,31 +56,31 @@ _MD_FlushRegisterWindows:
ret ret
/ //
/ sol_getsp() // sol_getsp()
/ //
/ Return the current sp (for debugging) // Return the current sp (for debugging)
/ //
.globl sol_getsp .globl sol_getsp
sol_getsp: sol_getsp:
movl %esp, %eax movl %esp, %eax
ret ret
/ //
/ sol_curthread() // sol_curthread()
/ //
/ Return a unique identifier for the currently active thread. // Return a unique identifier for the currently active thread.
/ //
.globl sol_curthread .globl sol_curthread
sol_curthread: sol_curthread:
movl %ecx, %eax movl %ecx, %eax
ret ret
/ PRInt32 _MD_AtomicIncrement(PRInt32 *val) // PRInt32 _MD_AtomicIncrement(PRInt32 *val)
/ //
/ Atomically increment the integer pointed to by 'val' and return // Atomically increment the integer pointed to by 'val' and return
/ the result of the increment. // the result of the increment.
/ //
.text .text
.globl _MD_AtomicIncrement .globl _MD_AtomicIncrement
.align 4 .align 4
@ -92,11 +92,11 @@ _MD_AtomicIncrement:
incl %eax incl %eax
ret ret
/ PRInt32 _MD_AtomicDecrement(PRInt32 *val) // PRInt32 _MD_AtomicDecrement(PRInt32 *val)
/ //
/ Atomically decrement the integer pointed to by 'val' and return // Atomically decrement the integer pointed to by 'val' and return
/ the result of the decrement. // the result of the decrement.
/ //
.text .text
.globl _MD_AtomicDecrement .globl _MD_AtomicDecrement
.align 4 .align 4
@ -108,25 +108,25 @@ _MD_AtomicDecrement:
decl %eax decl %eax
ret ret
/ PRInt32 _MD_AtomicSet(PRInt32 *val, PRInt32 newval) // PRInt32 _MD_AtomicSet(PRInt32 *val, PRInt32 newval)
/ //
/ Atomically set the integer pointed to by 'val' to the new // Atomically set the integer pointed to by 'val' to the new
/ value 'newval' and return the old value. // value 'newval' and return the old value.
/ //
/ An alternative implementation: // An alternative implementation:
/ .text // .text
/ .globl _MD_AtomicSet // .globl _MD_AtomicSet
/ .align 4 // .align 4
/_MD_AtomicSet: //_MD_AtomicSet:
/ movl 4(%esp), %ecx // movl 4(%esp), %ecx
/ movl 8(%esp), %edx // movl 8(%esp), %edx
/ movl (%ecx), %eax // movl (%ecx), %eax
/retry: //retry:
/ lock // lock
/ cmpxchgl %edx, (%ecx) // cmpxchgl %edx, (%ecx)
/ jne retry // jne retry
/ ret // ret
/ //
.text .text
.globl _MD_AtomicSet .globl _MD_AtomicSet
.align 4 .align 4
@ -136,11 +136,11 @@ _MD_AtomicSet:
xchgl %eax, (%ecx) xchgl %eax, (%ecx)
ret ret
/ PRInt32 _MD_AtomicAdd(PRInt32 *ptr, PRInt32 val) // PRInt32 _MD_AtomicAdd(PRInt32 *ptr, PRInt32 val)
/ //
/ Atomically add 'val' to the integer pointed to by 'ptr' // Atomically add 'val' to the integer pointed to by 'ptr'
/ and return the result of the addition. // and return the result of the addition.
/ //
.text .text
.globl _MD_AtomicAdd .globl _MD_AtomicAdd
.align 4 .align 4

View File

@ -1,42 +1,42 @@
/ -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- // -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
/ //
/ The contents of this file are subject to the Mozilla Public // The contents of this file are subject to the Mozilla Public
/ License Version 1.1 (the "License"); you may not use this file // License Version 1.1 (the "License"); you may not use this file
/ except in compliance with the License. You may obtain a copy of // except in compliance with the License. You may obtain a copy of
/ the License at http://www.mozilla.org/MPL/ // the License at http://www.mozilla.org/MPL/
/ //
/ Software distributed under the License is distributed on an "AS // Software distributed under the License is distributed on an "AS
/ IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or // IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
/ implied. See the License for the specific language governing // implied. See the License for the specific language governing
/ rights and limitations under the License. // rights and limitations under the License.
/ //
/ The Original Code is the Netscape Portable Runtime (NSPR). // The Original Code is the Netscape Portable Runtime (NSPR).
/ //
/ The Initial Developer of the Original Code is Netscape // The Initial Developer of the Original Code is Netscape
/ Communications Corporation. Portions created by Netscape are // Communications Corporation. Portions created by Netscape are
/ Copyright (C) 2004 Netscape Communications Corporation. All // Copyright (C) 2004 Netscape Communications Corporation. All
/ Rights Reserved. // Rights Reserved.
/ //
/ Contributor(s): // Contributor(s):
/ //
/ Alternatively, the contents of this file may be used under the // Alternatively, the contents of this file may be used under the
/ terms of the GNU General Public License Version 2 or later (the // terms of the GNU General Public License Version 2 or later (the
/ "GPL"), in which case the provisions of the GPL are applicable // "GPL"), in which case the provisions of the GPL are applicable
/ instead of those above. If you wish to allow use of your // instead of those above. If you wish to allow use of your
/ version of this file only under the terms of the GPL and not to // version of this file only under the terms of the GPL and not to
/ allow others to use your version of this file under the MPL, // allow others to use your version of this file under the MPL,
/ indicate your decision by deleting the provisions above and // indicate your decision by deleting the provisions above and
/ replace them with the notice and other provisions required by // replace them with the notice and other provisions required by
/ the GPL. If you do not delete the provisions above, a recipient // the GPL. If you do not delete the provisions above, a recipient
/ may use your version of this file under either the MPL or the // may use your version of this file under either the MPL or the
/ GPL. // GPL.
/ //
/ PRInt32 _MD_AtomicIncrement(PRInt32 *val) // PRInt32 _MD_AtomicIncrement(PRInt32 *val)
/ //
/ Atomically increment the integer pointed to by 'val' and return // Atomically increment the integer pointed to by 'val' and return
/ the result of the increment. // the result of the increment.
/ //
.text .text
.globl _MD_AtomicIncrement .globl _MD_AtomicIncrement
.align 4 .align 4
@ -47,11 +47,11 @@ _MD_AtomicIncrement:
incl %eax incl %eax
ret ret
/ PRInt32 _MD_AtomicDecrement(PRInt32 *val) // PRInt32 _MD_AtomicDecrement(PRInt32 *val)
/ //
/ Atomically decrement the integer pointed to by 'val' and return // Atomically decrement the integer pointed to by 'val' and return
/ the result of the decrement. // the result of the decrement.
/ //
.text .text
.globl _MD_AtomicDecrement .globl _MD_AtomicDecrement
.align 4 .align 4
@ -62,11 +62,11 @@ _MD_AtomicDecrement:
decl %eax decl %eax
ret ret
/ PRInt32 _MD_AtomicSet(PRInt32 *val, PRInt32 newval) // PRInt32 _MD_AtomicSet(PRInt32 *val, PRInt32 newval)
/ //
/ Atomically set the integer pointed to by 'val' to the new // Atomically set the integer pointed to by 'val' to the new
/ value 'newval' and return the old value. // value 'newval' and return the old value.
/ //
.text .text
.globl _MD_AtomicSet .globl _MD_AtomicSet
.align 4 .align 4
@ -75,11 +75,11 @@ _MD_AtomicSet:
xchgl %eax, (%rdi) xchgl %eax, (%rdi)
ret ret
/ PRInt32 _MD_AtomicAdd(PRInt32 *ptr, PRInt32 val) // PRInt32 _MD_AtomicAdd(PRInt32 *ptr, PRInt32 val)
/ //
/ Atomically add 'val' to the integer pointed to by 'ptr' // Atomically add 'val' to the integer pointed to by 'ptr'
/ and return the result of the addition. // and return the result of the addition.
/ //
.text .text
.globl _MD_AtomicAdd .globl _MD_AtomicAdd
.align 4 .align 4

View File

@ -859,7 +859,7 @@ typedef enum {
SWITCH_STATUS_FALSE, SWITCH_STATUS_FALSE,
SWITCH_STATUS_TIMEOUT, SWITCH_STATUS_TIMEOUT,
SWITCH_STATUS_RESTART, SWITCH_STATUS_RESTART,
SWITCH_STATUS_TERM, SWITCH_STATUS_INTR,
SWITCH_STATUS_NOTIMPL, SWITCH_STATUS_NOTIMPL,
SWITCH_STATUS_MEMERR, SWITCH_STATUS_MEMERR,
SWITCH_STATUS_NOOP, SWITCH_STATUS_NOOP,
@ -876,6 +876,7 @@ typedef enum {
SWITCH_STATUS_TOO_SMALL, SWITCH_STATUS_TOO_SMALL,
SWITCH_STATUS_FOUND, SWITCH_STATUS_FOUND,
SWITCH_STATUS_CONTINUE, SWITCH_STATUS_CONTINUE,
SWITCH_STATUS_TERM,
SWITCH_STATUS_NOT_INITALIZED SWITCH_STATUS_NOT_INITALIZED
} switch_status_t; } switch_status_t;

View File

@ -327,7 +327,7 @@ SWITCH_DECLARE(unsigned short) get_port(struct sockaddr *sa);
*/ */
SWITCH_DECLARE(int) switch_build_uri(char *uri, switch_size_t size, const char *scheme, const char *user, const switch_sockaddr_t *sa, int flags); SWITCH_DECLARE(int) switch_build_uri(char *uri, switch_size_t size, const char *scheme, const char *user, const switch_sockaddr_t *sa, int flags);
#define SWITCH_STATUS_IS_BREAK(x) (x == SWITCH_STATUS_BREAK || x == 730035 || x == 35) #define SWITCH_STATUS_IS_BREAK(x) (x == SWITCH_STATUS_BREAK || x == 730035 || x == 35 || x == SWITCH_STATUS_INTR)
/*! /*!
\brief Return a printable name of a switch_priority_t \brief Return a printable name of a switch_priority_t

View File

@ -5046,7 +5046,7 @@ static switch_status_t conference_local_play_file(conference_obj_t *conference,
goto done; goto done;
} }
if (conference->sound_prefix) { if (!switch_is_file_path(path) && conference->sound_prefix) {
if (!(dpath = switch_mprintf("%s%s%s", conference->sound_prefix, SWITCH_PATH_SEPARATOR, path))) { if (!(dpath = switch_mprintf("%s%s%s", conference->sound_prefix, SWITCH_PATH_SEPARATOR, path))) {
status = SWITCH_STATUS_MEMERR; status = SWITCH_STATUS_MEMERR;
goto done; goto done;
@ -5827,7 +5827,7 @@ SWITCH_STANDARD_APP(conference_function)
toplay = conference->kicked_sound; toplay = conference->kicked_sound;
} }
if (conference->sound_prefix) { if (!switch_is_file_path(toplay) && conference->sound_prefix) {
dfile = switch_mprintf("%s%s%s", conference->sound_prefix, SWITCH_PATH_SEPARATOR, toplay); dfile = switch_mprintf("%s%s%s", conference->sound_prefix, SWITCH_PATH_SEPARATOR, toplay);
switch_assert(dfile); switch_assert(dfile);
toplay = dfile; toplay = dfile;
@ -5845,6 +5845,8 @@ SWITCH_STANDARD_APP(conference_function)
if (rl) { if (rl) {
switch_thread_rwlock_unlock(conference->rwlock); switch_thread_rwlock_unlock(conference->rwlock);
} }
switch_channel_set_variable(channel, "last_transfered_conference", NULL);
} }
/* Create a thread for the conference and launch it */ /* Create a thread for the conference and launch it */

View File

@ -263,10 +263,14 @@ SWITCH_HASH_DELETE_FUNC(limit_hash_remote_cleanup_callback)
SWITCH_STANDARD_SCHED_FUNC(limit_hash_cleanup_callback) SWITCH_STANDARD_SCHED_FUNC(limit_hash_cleanup_callback)
{ {
switch_thread_rwlock_wrlock(globals.limit_hash_rwlock); switch_thread_rwlock_wrlock(globals.limit_hash_rwlock);
switch_core_hash_delete_multi(globals.limit_hash, limit_hash_cleanup_delete_callback, NULL); if (globals.limit_hash) {
switch_core_hash_delete_multi(globals.limit_hash, limit_hash_cleanup_delete_callback, NULL);
}
switch_thread_rwlock_unlock(globals.limit_hash_rwlock); switch_thread_rwlock_unlock(globals.limit_hash_rwlock);
task->runtime = switch_epoch_time_now(NULL) + LIMIT_HASH_CLEANUP_INTERVAL; if (globals.limit_hash) {
task->runtime = switch_epoch_time_now(NULL) + LIMIT_HASH_CLEANUP_INTERVAL;
}
} }
/* !\brief Releases usage of a limit_hash-controlled ressource */ /* !\brief Releases usage of a limit_hash-controlled ressource */
@ -991,7 +995,9 @@ SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_hash_shutdown)
free(val); free(val);
switch_core_hash_delete(globals.db_hash, key); switch_core_hash_delete(globals.db_hash, key);
} }
switch_core_hash_destroy(&globals.limit_hash);
switch_core_hash_destroy(&globals.db_hash);
switch_thread_rwlock_unlock(globals.limit_hash_rwlock); switch_thread_rwlock_unlock(globals.limit_hash_rwlock);
switch_thread_rwlock_unlock(globals.db_hash_rwlock); switch_thread_rwlock_unlock(globals.db_hash_rwlock);
@ -999,8 +1005,6 @@ SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_hash_shutdown)
switch_thread_rwlock_destroy(globals.db_hash_rwlock); switch_thread_rwlock_destroy(globals.db_hash_rwlock);
switch_thread_rwlock_destroy(globals.limit_hash_rwlock); switch_thread_rwlock_destroy(globals.limit_hash_rwlock);
switch_core_hash_destroy(&globals.limit_hash);
switch_core_hash_destroy(&globals.db_hash);
return SWITCH_STATUS_SUCCESS; return SWITCH_STATUS_SUCCESS;
} }

View File

@ -43,8 +43,6 @@ SWITCH_MODULE_DEFINITION(mod_sofia, mod_sofia_load, mod_sofia_shutdown, NULL);
struct mod_sofia_globals mod_sofia_globals; struct mod_sofia_globals mod_sofia_globals;
switch_endpoint_interface_t *sofia_endpoint_interface; switch_endpoint_interface_t *sofia_endpoint_interface;
static switch_frame_t silence_frame = { 0 };
static char silence_data[13] = "";
#define STRLEN 15 #define STRLEN 15
@ -1094,8 +1092,10 @@ static switch_status_t sofia_read_frame(switch_core_session_t *session, switch_f
sofia_glue_do_invite(session); sofia_glue_do_invite(session);
} }
#endif #endif
*frame = &tech_pvt->read_frame;
*frame = &silence_frame; switch_set_flag((*frame), SFF_CNG);
(*frame)->datalen = tech_pvt->read_impl.encoded_bytes_per_packet;
memset((*frame)->data, 0, (*frame)->datalen);
return SWITCH_STATUS_SUCCESS; return SWITCH_STATUS_SUCCESS;
} }
@ -4718,11 +4718,6 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_sofia_load)
switch_management_interface_t *management_interface; switch_management_interface_t *management_interface;
struct in_addr in; struct in_addr in;
silence_frame.data = silence_data;
silence_frame.datalen = sizeof(silence_data);
silence_frame.buflen = sizeof(silence_data);
silence_frame.flags = SFF_CNG;
memset(&mod_sofia_globals, 0, sizeof(mod_sofia_globals)); memset(&mod_sofia_globals, 0, sizeof(mod_sofia_globals));
mod_sofia_globals.destroy_private.destroy_nh = 1; mod_sofia_globals.destroy_private.destroy_nh = 1;
mod_sofia_globals.destroy_private.is_static = 1; mod_sofia_globals.destroy_private.is_static = 1;

View File

@ -1477,8 +1477,6 @@ void *SWITCH_THREAD_FUNC sofia_profile_thread_run(switch_thread_t *thread, void
TPTAG_TLS_VERIFY_POLICY(0)), TPTAG_TLS_VERIFY_POLICY(0)),
TAG_IF(sofia_test_pflag(profile, PFLAG_TLS), TAG_IF(sofia_test_pflag(profile, PFLAG_TLS),
TPTAG_TLS_VERSION(profile->tls_version)), TPTAG_TLS_VERSION(profile->tls_version)),
TAG_IF(sofia_test_pflag(profile, PFLAG_TLS),
TPTAG_KEEPALIVE(20000)),
TAG_IF(!strchr(profile->sipip, ':'), TAG_IF(!strchr(profile->sipip, ':'),
NTATAG_UDP_MTU(65535)), NTATAG_UDP_MTU(65535)),
TAG_IF(sofia_test_pflag(profile, PFLAG_DISABLE_SRV), TAG_IF(sofia_test_pflag(profile, PFLAG_DISABLE_SRV),
@ -7137,6 +7135,9 @@ void sofia_handle_sip_i_invite(nua_t *nua, sofia_profile_t *profile, nua_handle_
switch_channel_set_variable(channel, "sip_history_info", un->un_value); switch_channel_set_variable(channel, "sip_history_info", un->un_value);
} }
} }
} else if (!strcasecmp(un->un_name, "X-FS-Channel-Name") && !zstr(un->un_value)) {
switch_channel_set_name(channel, un->un_value);
switch_channel_set_variable(channel, "push_channel_name", "true");
} else if (!strcasecmp(un->un_name, "X-FS-Support")) { } else if (!strcasecmp(un->un_name, "X-FS-Support")) {
tech_pvt->x_freeswitch_support_remote = switch_core_session_strdup(session, un->un_value); tech_pvt->x_freeswitch_support_remote = switch_core_session_strdup(session, un->un_value);
} else if (!strncasecmp(un->un_name, "X-", 2) || !strncasecmp(un->un_name, "P-", 2)) { } else if (!strncasecmp(un->un_name, "X-", 2) || !strncasecmp(un->un_name, "P-", 2)) {

View File

@ -1548,7 +1548,7 @@ static switch_status_t parse_command(listener_t *listener, switch_event_t **even
char api_reply[512] = "Allowed-API: all\n"; char api_reply[512] = "Allowed-API: all\n";
char log_reply[512] = ""; char log_reply[512] = "";
int allowed_log = 1; int allowed_log = 1;
char *tmp;
switch_clear_flag(listener, LFLAG_ALLOW_LOG); switch_clear_flag(listener, LFLAG_ALLOW_LOG);
@ -1564,8 +1564,9 @@ static switch_status_t parse_command(listener_t *listener, switch_event_t **even
*pass++ = '\0'; *pass++ = '\0';
} }
if ((pass = strchr(user, ':'))) { if ((tmp = strchr(user, ':'))) {
*pass++ = '\0'; *tmp++ = '\0';
pass = tmp;
} }
if (zstr(user) || zstr(domain_name)) { if (zstr(user) || zstr(domain_name)) {

View File

@ -744,7 +744,7 @@ SWITCH_DECLARE(switch_status_t) switch_event_del_header_val(switch_event_t *even
tp = tp->next; tp = tp->next;
x++; x++;
switch_assert(x < 1000); switch_assert(x < 1000000);
hash = switch_ci_hashfunc_default(header_name, &hlen); hash = switch_ci_hashfunc_default(header_name, &hlen);
if ((!hp->hash || hash == hp->hash) && !strcasecmp(header_name, hp->name) && (zstr(val) || !strcmp(hp->value, val))) { if ((!hp->hash || hash == hp->hash) && !strcasecmp(header_name, hp->name) && (zstr(val) || !strcmp(hp->value, val))) {

View File

@ -2602,6 +2602,13 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_originate(switch_core_session_t *sess
} }
} }
if (caller_channel && switch_true(switch_channel_get_variable(caller_channel, "push_channel_name"))) {
char *new_name = switch_core_session_sprintf(session, "%s__B", switch_channel_get_name(caller_channel));
switch_event_add_header_string(var_event, SWITCH_STACK_BOTTOM, "origination_channel_name", new_name);
new_name = switch_core_session_sprintf(session, "_%s", switch_channel_get_name(caller_channel));
switch_event_add_header_string(var_event, SWITCH_STACK_BOTTOM, "sip_h_X-FS-Channel-Name", new_name);
}
/* make a special var event with mixture of the {} and the [] vars to pass down as global vars to the outgoing channel /* make a special var event with mixture of the {} and the [] vars to pass down as global vars to the outgoing channel
so if something like the user channel does another originate our options will be passed down properly so if something like the user channel does another originate our options will be passed down properly
*/ */
@ -2690,6 +2697,10 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_originate(switch_core_session_t *sess
if (switch_true(switch_channel_get_variable(originate_status[i].peer_channel, "leg_required"))) { if (switch_true(switch_channel_get_variable(originate_status[i].peer_channel, "leg_required"))) {
originate_status[i].tagged = 1; originate_status[i].tagged = 1;
} }
if ((vvar = switch_channel_get_variable(originate_status[i].peer_channel, "origination_channel_name"))) {
switch_channel_set_name(originate_status[i].peer_channel, vvar);
}
if ((vvar = switch_channel_get_variable(originate_status[i].peer_channel, "origination_callee_id_name"))) { if ((vvar = switch_channel_get_variable(originate_status[i].peer_channel, "origination_callee_id_name"))) {
switch_channel_set_profile_var(originate_status[i].peer_channel, "callee_id_name", vvar); switch_channel_set_profile_var(originate_status[i].peer_channel, "callee_id_name", vvar);

View File

@ -2440,6 +2440,7 @@ static int rtp_common_read(switch_rtp_t *rtp_session, switch_payload_t *payload_
recvfrom: recvfrom:
bytes = 0; bytes = 0;
read_loops++; read_loops++;
poll_loop = 0;
if (!switch_rtp_ready(rtp_session)) { if (!switch_rtp_ready(rtp_session)) {
break; break;
@ -2466,27 +2467,41 @@ static int rtp_common_read(switch_rtp_t *rtp_session, switch_payload_t *payload_
status = read_rtp_packet(rtp_session, &bytes, flags); status = read_rtp_packet(rtp_session, &bytes, flags);
} else { } else {
if (!SWITCH_STATUS_IS_BREAK(poll_status) && poll_status != SWITCH_STATUS_TIMEOUT) { if (!SWITCH_STATUS_IS_BREAK(poll_status) && poll_status != SWITCH_STATUS_TIMEOUT) {
char tmp[128] = "";
strerror_r(poll_status, tmp, sizeof(tmp));
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Poll failed with error: %d [%s]\n", poll_status, tmp);
ret = -1; ret = -1;
goto end; goto end;
} }
poll_loop = 1; poll_loop = 1;
rtp_session->missed_count += (poll_sec * 1000) / (rtp_session->ms_per_packet ? rtp_session->ms_per_packet / 1000 : 20);
bytes = 0;
if (rtp_session->max_missed_packets) { if (!switch_test_flag(rtp_session, SWITCH_RTP_FLAG_UDPTL)) {
if (rtp_session->missed_count >= rtp_session->max_missed_packets) { rtp_session->missed_count += (poll_sec * 1000) / (rtp_session->ms_per_packet ? rtp_session->ms_per_packet / 1000 : 20);
ret = -2; bytes = 0;
goto end;
if (rtp_session->max_missed_packets) {
if (rtp_session->missed_count >= rtp_session->max_missed_packets) {
ret = -2;
goto end;
}
} }
} }
if ((!(io_flags & SWITCH_IO_FLAG_NOBLOCK)) && if ((!(io_flags & SWITCH_IO_FLAG_NOBLOCK)) &&
(rtp_session->dtmf_data.out_digit_dur == 0 || switch_test_flag(rtp_session, SWITCH_RTP_FLAG_VIDEO))) { (rtp_session->dtmf_data.out_digit_dur == 0 || switch_test_flag(rtp_session, SWITCH_RTP_FLAG_VIDEO))) {
return_cng_frame(); return_cng_frame();
} }
} }
if (rtp_session->recv_msg.header.pt != 13 &&
rtp_session->recv_msg.header.pt != rtp_session->recv_te &&
(!rtp_session->cng_pt || rtp_session->recv_msg.header.pt != rtp_session->cng_pt) &&
rtp_session->recv_msg.header.pt != rtp_session->payload) {
/* drop frames of incorrect payload number and return CNG frame instead */
return_cng_frame();
}
if (switch_test_flag(rtp_session, SWITCH_RTP_FLAG_ENABLE_RTCP) && rtp_session->rtcp_read_pollfd) { if (switch_test_flag(rtp_session, SWITCH_RTP_FLAG_ENABLE_RTCP) && rtp_session->rtcp_read_pollfd) {
rtcp_poll_status = switch_poll(rtp_session->rtcp_read_pollfd, 1, &rtcp_fdr, 0); rtcp_poll_status = switch_poll(rtp_session->rtcp_read_pollfd, 1, &rtcp_fdr, 0);
@ -3254,21 +3269,25 @@ SWITCH_DECLARE(switch_status_t) switch_rtp_zerocopy_read_frame(switch_rtp_t *rtp
switch_rtp_t *other_rtp_session = switch_channel_get_private(other_channel, "__zrtp_audio_rtp_session"); switch_rtp_t *other_rtp_session = switch_channel_get_private(other_channel, "__zrtp_audio_rtp_session");
if (other_rtp_session) { if (other_rtp_session) {
if (zrtp_status_ok == zrtp_session_get(other_rtp_session->zrtp_session, &zrtp_session_info)) { if (switch_channel_direction(channel) == SWITCH_CALL_DIRECTION_INBOUND) {
if (rtp_session->zrtp_mitm_tries > ZRTP_MITM_TRIES) { switch_mutex_lock(other_rtp_session->read_mutex);
switch_clear_flag(other_rtp_session, SWITCH_ZRTP_FLAG_SECURE_MITM_RECV); if (zrtp_status_ok == zrtp_session_get(other_rtp_session->zrtp_session, &zrtp_session_info)) {
switch_clear_flag(other_rtp_session, SWITCH_ZRTP_FLAG_SECURE_MITM_SEND); if (rtp_session->zrtp_mitm_tries > ZRTP_MITM_TRIES) {
switch_clear_flag(rtp_session, SWITCH_ZRTP_FLAG_SECURE_MITM_RECV); switch_clear_flag(other_rtp_session, SWITCH_ZRTP_FLAG_SECURE_MITM_RECV);
switch_clear_flag(rtp_session, SWITCH_ZRTP_FLAG_SECURE_MITM_SEND); switch_clear_flag(other_rtp_session, SWITCH_ZRTP_FLAG_SECURE_MITM_SEND);
} else if (zrtp_status_ok == zrtp_resolve_mitm_call(other_rtp_session->zrtp_stream, rtp_session->zrtp_stream)) { switch_clear_flag(rtp_session, SWITCH_ZRTP_FLAG_SECURE_MITM_RECV);
switch_clear_flag(rtp_session, SWITCH_ZRTP_FLAG_SECURE_MITM_RECV); switch_clear_flag(rtp_session, SWITCH_ZRTP_FLAG_SECURE_MITM_SEND);
switch_clear_flag(rtp_session, SWITCH_ZRTP_FLAG_SECURE_MITM_SEND); } else if (zrtp_status_ok == zrtp_resolve_mitm_call(other_rtp_session->zrtp_stream, rtp_session->zrtp_stream)) {
switch_clear_flag(other_rtp_session, SWITCH_ZRTP_FLAG_SECURE_MITM_RECV); switch_clear_flag(rtp_session, SWITCH_ZRTP_FLAG_SECURE_MITM_RECV);
switch_clear_flag(other_rtp_session, SWITCH_ZRTP_FLAG_SECURE_MITM_SEND); switch_clear_flag(rtp_session, SWITCH_ZRTP_FLAG_SECURE_MITM_SEND);
zrtp_verified_set(zrtp_global, &rtp_session->zrtp_session->zid, switch_clear_flag(other_rtp_session, SWITCH_ZRTP_FLAG_SECURE_MITM_RECV);
&rtp_session->zrtp_session->peer_zid, zrtp_session_info.sas_is_verified ^ 1); switch_clear_flag(other_rtp_session, SWITCH_ZRTP_FLAG_SECURE_MITM_SEND);
rtp_session->zrtp_mitm_tries++; zrtp_verified_set(zrtp_global, &rtp_session->zrtp_session->zid,
&rtp_session->zrtp_session->peer_zid, zrtp_session_info.sas_is_verified ^ 1);
rtp_session->zrtp_mitm_tries++;
}
} }
switch_mutex_unlock(other_rtp_session->read_mutex);
} }
} }

View File

@ -372,7 +372,7 @@ SWITCH_DECLARE(char *) switch_find_end_paren(const char *s, char open, char clos
if (s && *s == open) { if (s && *s == open) {
depth++; depth++;
for (e = s + 1; e && *e; e++) { for (e = s + 1; e && *e; e++) {
if (*e == open) { if (*e == open && open != close) {
depth++; depth++;
} else if (*e == close) { } else if (*e == close) {
depth--; depth--;
@ -809,23 +809,29 @@ SWITCH_DECLARE(char *) switch_strip_whitespace(const char *str)
{ {
const char *sp = str; const char *sp = str;
char *p, *s = NULL; char *p, *s = NULL;
size_t len;
if (!sp) if (zstr(sp)) {
return NULL; return (char *) sp;
}
while ((*sp == 13 ) || (*sp == 10 ) || (*sp == 9 ) || (*sp == 32) || (*sp == 11) ) { while ((*sp == 13 ) || (*sp == 10 ) || (*sp == 9 ) || (*sp == 32) || (*sp == 11) ) {
sp++; sp++;
} }
if (zstr(sp)) {
return (char *) sp;
}
s = strdup(sp); s = strdup(sp);
switch_assert(s);
if (!s) if ((len = strlen(s)) > 0) {
return NULL; p = s + (len - 1);
p = s + (strlen(s) - 1); while (p > s && ((*p == 13 ) || (*p == 10 ) || (*p == 9 ) || (*p == 32) || (*p == 11))) {
*p-- = '\0';
while ((*p == 13 ) || (*p == 10 ) || (*p == 9 ) || (*p == 32) || (*p == 11) ) { }
*p-- = '\0';
} }
return s; return s;
@ -835,9 +841,11 @@ SWITCH_DECLARE(char *) switch_strip_spaces(char *str, switch_bool_t dup)
{ {
char *sp = str; char *sp = str;
char *p, *s = NULL; char *p, *s = NULL;
size_t len;
if (!sp) if (zstr(sp)) {
return NULL; return sp;
}
while (*sp == ' ') { while (*sp == ' ') {
sp++; sp++;
@ -845,17 +853,21 @@ SWITCH_DECLARE(char *) switch_strip_spaces(char *str, switch_bool_t dup)
if (dup) { if (dup) {
s = strdup(sp); s = strdup(sp);
switch_assert(s);
} else { } else {
s = sp; s = sp;
} }
if (!s) if (zstr(s)) {
return NULL; return s;
}
p = s + (strlen(s) - 1); if ((len = strlen(s)) > 0) {
p = s + (len - 1);
while (*p == ' ') { while (p && *p && p > s && *p == ' ') {
*p-- = '\0'; *p-- = '\0';
}
} }
return s; return s;