mirror of
https://gitlab.linphone.org/BC/public/linphone-iphone.git
synced 2026-05-07 05:53:06 +00:00
first belle_sip implementation
This commit is contained in:
parent
47999d7b40
commit
9e6f05e470
12 changed files with 1094 additions and 255 deletions
401
.cproject
401
.cproject
|
|
@ -3,253 +3,202 @@
|
|||
|
||||
<cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
|
||||
<storageModule moduleId="org.eclipse.cdt.core.settings">
|
||||
<cconfiguration id="0.2079208171">
|
||||
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="0.2079208171" moduleId="org.eclipse.cdt.core.settings" name="Default">
|
||||
<cconfiguration id="0.2131511368">
|
||||
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="0.2131511368" moduleId="org.eclipse.cdt.core.settings" name="Default">
|
||||
<externalSettings/>
|
||||
<extensions>
|
||||
<extension id="org.eclipse.cdt.core.MachO64" point="org.eclipse.cdt.core.BinaryParser"/>
|
||||
<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
|
||||
<extension id="org.eclipse.cdt.core.VCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||
<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||
<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||
<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||
<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||
<extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||
<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||
<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||
<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||
</extensions>
|
||||
</storageModule>
|
||||
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
|
||||
<configuration artifactName="linphone" buildProperties="" description="" id="0.2079208171" name="Default" parent="org.eclipse.cdt.build.core.prefbase.cfg">
|
||||
<folderInfo id="0.2079208171." name="/" resourcePath="">
|
||||
<toolChain id="org.eclipse.cdt.build.core.prefbase.toolchain.2084203071" name="No ToolChain" resourceTypeBasedDiscovery="false" superClass="org.eclipse.cdt.build.core.prefbase.toolchain">
|
||||
<targetPlatform binaryParser="org.eclipse.cdt.core.MachO64;org.eclipse.cdt.core.ELF" id="org.eclipse.cdt.build.core.prefbase.toolchain.2084203071.81924294" name=""/>
|
||||
<builder arguments="CFLAGS="-g -Werror -Wall"" command="make" id="org.eclipse.cdt.build.core.settings.default.builder.731584538" keepEnvironmentInBuildfile="false" managedBuildOn="false" name="Gnu Make Builder" superClass="org.eclipse.cdt.build.core.settings.default.builder"/>
|
||||
<tool id="org.eclipse.cdt.build.core.settings.holder.libs.1252970003" name="holder for library settings" superClass="org.eclipse.cdt.build.core.settings.holder.libs"/>
|
||||
<tool id="org.eclipse.cdt.build.core.settings.holder.1371414073" name="GNU C++" superClass="org.eclipse.cdt.build.core.settings.holder">
|
||||
<inputType id="org.eclipse.cdt.build.core.settings.holder.inType.306286573" languageId="org.eclipse.cdt.core.g++" languageName="GNU C++" sourceContentType="org.eclipse.cdt.core.cxxSource,org.eclipse.cdt.core.cxxHeader" superClass="org.eclipse.cdt.build.core.settings.holder.inType"/>
|
||||
<configuration artifactName="linphone-private" buildProperties="" description="" id="0.2131511368" name="Default" parent="org.eclipse.cdt.build.core.prefbase.cfg">
|
||||
<folderInfo id="0.2131511368." name="/" resourcePath="">
|
||||
<toolChain id="org.eclipse.cdt.build.core.prefbase.toolchain.1521961344" name="No ToolChain" resourceTypeBasedDiscovery="false" superClass="org.eclipse.cdt.build.core.prefbase.toolchain">
|
||||
<targetPlatform binaryParser="org.eclipse.cdt.core.MachO64" id="org.eclipse.cdt.build.core.prefbase.toolchain.1521961344.1164784940" name=""/>
|
||||
<builder id="org.eclipse.cdt.build.core.settings.default.builder.760634908" keepEnvironmentInBuildfile="false" managedBuildOn="false" name="Gnu Make Builder" superClass="org.eclipse.cdt.build.core.settings.default.builder"/>
|
||||
<tool id="org.eclipse.cdt.build.core.settings.holder.libs.733819718" name="holder for library settings" superClass="org.eclipse.cdt.build.core.settings.holder.libs"/>
|
||||
<tool id="org.eclipse.cdt.build.core.settings.holder.855204815" name="Assembly" superClass="org.eclipse.cdt.build.core.settings.holder">
|
||||
<inputType id="org.eclipse.cdt.build.core.settings.holder.inType.180698630" languageId="org.eclipse.cdt.core.assembly" languageName="Assembly" sourceContentType="org.eclipse.cdt.core.asmSource" superClass="org.eclipse.cdt.build.core.settings.holder.inType"/>
|
||||
</tool>
|
||||
<tool id="org.eclipse.cdt.build.core.settings.holder.391709798" name="GNU C" superClass="org.eclipse.cdt.build.core.settings.holder">
|
||||
<inputType id="org.eclipse.cdt.build.core.settings.holder.inType.1702094818" languageId="org.eclipse.cdt.core.gcc" languageName="GNU C" sourceContentType="org.eclipse.cdt.core.cSource,org.eclipse.cdt.core.cHeader" superClass="org.eclipse.cdt.build.core.settings.holder.inType"/>
|
||||
<tool id="org.eclipse.cdt.build.core.settings.holder.700732108" name="GNU C++" superClass="org.eclipse.cdt.build.core.settings.holder">
|
||||
<inputType id="org.eclipse.cdt.build.core.settings.holder.inType.313206468" languageId="org.eclipse.cdt.core.g++" languageName="GNU C++" sourceContentType="org.eclipse.cdt.core.cxxSource,org.eclipse.cdt.core.cxxHeader" superClass="org.eclipse.cdt.build.core.settings.holder.inType"/>
|
||||
</tool>
|
||||
<tool id="org.eclipse.cdt.build.core.settings.holder.754828354" name="Assembly" superClass="org.eclipse.cdt.build.core.settings.holder">
|
||||
<inputType id="org.eclipse.cdt.build.core.settings.holder.inType.585510934" languageId="org.eclipse.cdt.core.assembly" languageName="Assembly" sourceContentType="org.eclipse.cdt.core.asmSource" superClass="org.eclipse.cdt.build.core.settings.holder.inType"/>
|
||||
<tool id="org.eclipse.cdt.build.core.settings.holder.1875794262" name="GNU C" superClass="org.eclipse.cdt.build.core.settings.holder">
|
||||
<inputType id="org.eclipse.cdt.build.core.settings.holder.inType.1686102409" languageId="org.eclipse.cdt.core.gcc" languageName="GNU C" sourceContentType="org.eclipse.cdt.core.cSource,org.eclipse.cdt.core.cHeader" superClass="org.eclipse.cdt.build.core.settings.holder.inType"/>
|
||||
</tool>
|
||||
</toolChain>
|
||||
</folderInfo>
|
||||
</configuration>
|
||||
</storageModule>
|
||||
<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
|
||||
<storageModule moduleId="org.eclipse.cdt.internal.ui.text.commentOwnerProjectMappings"/>
|
||||
<storageModule moduleId="org.eclipse.cdt.core.language.mapping"/>
|
||||
<storageModule moduleId="scannerConfiguration">
|
||||
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
|
||||
<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="specsFile">
|
||||
<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="makefileGenerator">
|
||||
<runAction arguments="-f ${project_name}_scd.mk" command="make" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="specsFile">
|
||||
<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="specsFile">
|
||||
<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="specsFile">
|
||||
<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="specsFile">
|
||||
<runAction arguments="-c 'gcc -E -P -v -dD "${plugin_state_location}/${specs_file}"'" command="sh" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="specsFile">
|
||||
<runAction arguments="-c 'g++ -E -P -v -dD "${plugin_state_location}/specs.cpp"'" command="sh" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="specsFile">
|
||||
<runAction arguments="-c 'gcc -E -P -v -dD "${plugin_state_location}/specs.c"'" command="sh" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
<scannerConfigBuildInfo instanceId="0.2079208171">
|
||||
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile"/>
|
||||
<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="specsFile">
|
||||
<runAction arguments="discovery" command="make discovery" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="makefileGenerator">
|
||||
<runAction arguments="-f ${project_name}_scd.mk" command="make" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="specsFile">
|
||||
<runAction arguments="-s -C src discovery" command="make" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="specsFile">
|
||||
<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="specsFile">
|
||||
<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="specsFile">
|
||||
<runAction arguments="-c 'gcc -E -P -v -dD "${plugin_state_location}/${specs_file}"'" command="sh" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="specsFile">
|
||||
<runAction arguments="-c 'g++ -E -P -v -dD "${plugin_state_location}/specs.cpp"'" command="sh" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="specsFile">
|
||||
<runAction arguments="-c 'gcc -E -P -v -dD "${plugin_state_location}/specs.c"'" command="sh" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
</scannerConfigBuildInfo>
|
||||
</cconfiguration>
|
||||
<cconfiguration id="0.2131511368.593515799">
|
||||
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="0.2131511368.593515799" moduleId="org.eclipse.cdt.core.settings" name="debug">
|
||||
<externalSettings/>
|
||||
<extensions>
|
||||
<extension id="org.eclipse.cdt.core.MachO64" point="org.eclipse.cdt.core.BinaryParser"/>
|
||||
<extension id="org.eclipse.cdt.core.VCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||
<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||
<extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||
<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||
<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||
<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||
</extensions>
|
||||
</storageModule>
|
||||
<storageModule moduleId="org.eclipse.cdt.make.core.buildtargets">
|
||||
<buildTargets>
|
||||
<target name="test" path="mediastreamer2/tests" targetID="org.eclipse.cdt.build.MakeTargetBuilder">
|
||||
<buildCommand>make</buildCommand>
|
||||
<buildTarget>all</buildTarget>
|
||||
<stopOnError>true</stopOnError>
|
||||
<useDefaultCommand>true</useDefaultCommand>
|
||||
<runAllBuilders>true</runAllBuilders>
|
||||
</target>
|
||||
<target name="all" path="" targetID="org.eclipse.cdt.build.MakeTargetBuilder">
|
||||
<buildCommand>make</buildCommand>
|
||||
<buildArguments>CFLAGS="-g"</buildArguments>
|
||||
<buildTarget>install</buildTarget>
|
||||
<stopOnError>true</stopOnError>
|
||||
<useDefaultCommand>true</useDefaultCommand>
|
||||
<runAllBuilders>true</runAllBuilders>
|
||||
</target>
|
||||
<target name="install" path="" targetID="org.eclipse.cdt.build.MakeTargetBuilder">
|
||||
<buildCommand>make</buildCommand>
|
||||
<buildArguments>CFLAGS="-g"</buildArguments>
|
||||
<buildTarget>install</buildTarget>
|
||||
<stopOnError>true</stopOnError>
|
||||
<useDefaultCommand>true</useDefaultCommand>
|
||||
<runAllBuilders>true</runAllBuilders>
|
||||
</target>
|
||||
<target name="doc" path="coreapi/help" targetID="org.eclipse.cdt.build.MakeTargetBuilder">
|
||||
<buildCommand>make</buildCommand>
|
||||
<buildTarget>all</buildTarget>
|
||||
<stopOnError>true</stopOnError>
|
||||
<useDefaultCommand>true</useDefaultCommand>
|
||||
<runAllBuilders>true</runAllBuilders>
|
||||
</target>
|
||||
<target name="doc" path="mediastreamer2/help" targetID="org.eclipse.cdt.build.MakeTargetBuilder">
|
||||
<buildCommand>make</buildCommand>
|
||||
<buildTarget>all</buildTarget>
|
||||
<stopOnError>true</stopOnError>
|
||||
<useDefaultCommand>true</useDefaultCommand>
|
||||
<runAllBuilders>true</runAllBuilders>
|
||||
</target>
|
||||
</buildTargets>
|
||||
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
|
||||
<configuration artifactName="linphone-private" buildProperties="" description="debug" id="0.2131511368.593515799" name="debug" parent="org.eclipse.cdt.build.core.prefbase.cfg">
|
||||
<folderInfo id="0.2131511368.593515799." name="/" resourcePath="">
|
||||
<toolChain id="org.eclipse.cdt.build.core.prefbase.toolchain.1930099439" name="No ToolChain" resourceTypeBasedDiscovery="false" superClass="org.eclipse.cdt.build.core.prefbase.toolchain">
|
||||
<targetPlatform binaryParser="org.eclipse.cdt.core.MachO64" id="org.eclipse.cdt.build.core.prefbase.toolchain.1930099439.714963030" name=""/>
|
||||
<builder arguments="CFLAGS="-g -Wall -Werror"" command="make" id="org.eclipse.cdt.build.core.settings.default.builder.896899734" keepEnvironmentInBuildfile="false" managedBuildOn="false" name="Gnu Make Builder" superClass="org.eclipse.cdt.build.core.settings.default.builder"/>
|
||||
<tool id="org.eclipse.cdt.build.core.settings.holder.libs.1682581923" name="holder for library settings" superClass="org.eclipse.cdt.build.core.settings.holder.libs"/>
|
||||
<tool id="org.eclipse.cdt.build.core.settings.holder.730520342" name="Assembly" superClass="org.eclipse.cdt.build.core.settings.holder">
|
||||
<inputType id="org.eclipse.cdt.build.core.settings.holder.inType.552841386" languageId="org.eclipse.cdt.core.assembly" languageName="Assembly" sourceContentType="org.eclipse.cdt.core.asmSource" superClass="org.eclipse.cdt.build.core.settings.holder.inType"/>
|
||||
</tool>
|
||||
<tool id="org.eclipse.cdt.build.core.settings.holder.1390526543" name="GNU C++" superClass="org.eclipse.cdt.build.core.settings.holder">
|
||||
<inputType id="org.eclipse.cdt.build.core.settings.holder.inType.559579929" languageId="org.eclipse.cdt.core.g++" languageName="GNU C++" sourceContentType="org.eclipse.cdt.core.cxxSource,org.eclipse.cdt.core.cxxHeader" superClass="org.eclipse.cdt.build.core.settings.holder.inType"/>
|
||||
</tool>
|
||||
<tool id="org.eclipse.cdt.build.core.settings.holder.1823518174" name="GNU C" superClass="org.eclipse.cdt.build.core.settings.holder">
|
||||
<inputType id="org.eclipse.cdt.build.core.settings.holder.inType.1618204218" languageId="org.eclipse.cdt.core.gcc" languageName="GNU C" sourceContentType="org.eclipse.cdt.core.cSource,org.eclipse.cdt.core.cHeader" superClass="org.eclipse.cdt.build.core.settings.holder.inType"/>
|
||||
</tool>
|
||||
</toolChain>
|
||||
</folderInfo>
|
||||
</configuration>
|
||||
</storageModule>
|
||||
<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
|
||||
</cconfiguration>
|
||||
</storageModule>
|
||||
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
|
||||
<project id="linphone.null.1149313048" name="linphone"/>
|
||||
<project id="linphone-private.null.17244867" name="linphone-private"/>
|
||||
</storageModule>
|
||||
<storageModule moduleId="refreshScope" versionNumber="1">
|
||||
<resource resourceType="PROJECT" workspacePath="/linphone-private"/>
|
||||
</storageModule>
|
||||
<storageModule moduleId="org.eclipse.cdt.make.core.buildtargets"/>
|
||||
<storageModule moduleId="scannerConfiguration">
|
||||
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
|
||||
<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="specsFile">
|
||||
<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="makefileGenerator">
|
||||
<runAction arguments="-f ${project_name}_scd.mk" command="make" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="specsFile">
|
||||
<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="specsFile">
|
||||
<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="specsFile">
|
||||
<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
<scannerConfigBuildInfo instanceId="0.2079208171">
|
||||
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile"/>
|
||||
<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="specsFile">
|
||||
<runAction arguments="-s -C src discovery" command="make" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="makefileGenerator">
|
||||
<runAction arguments="-f ${project_name}_scd.mk" command="make" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="specsFile">
|
||||
<runAction arguments="-s -C src discovery" command="make" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="specsFile">
|
||||
<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="specsFile">
|
||||
<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
</scannerConfigBuildInfo>
|
||||
<scannerConfigBuildInfo instanceId="0.2131511368">
|
||||
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile"/>
|
||||
<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="specsFile">
|
||||
<runAction arguments="-s discovery" command="make" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
</scannerConfigBuildInfo>
|
||||
</storageModule>
|
||||
<storageModule moduleId="org.eclipse.cdt.internal.ui.text.commentOwnerProjectMappings"/>
|
||||
</cproject>
|
||||
|
|
|
|||
2
.project
2
.project
|
|
@ -23,7 +23,7 @@
|
|||
</dictionary>
|
||||
<dictionary>
|
||||
<key>org.eclipse.cdt.make.core.buildArguments</key>
|
||||
<value>CFLAGS="-g -Werror -Wall"</value>
|
||||
<value>CFLAGS="-g -Wall -Werror"</value>
|
||||
</dictionary>
|
||||
<dictionary>
|
||||
<key>org.eclipse.cdt.make.core.buildCommand</key>
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
ACLOCAL_AMFLAGS = -I m4 $(ACLOCAL_MACOS_FLAGS)
|
||||
|
||||
SUBDIRS = build m4 pixmaps po @ORTP_DIR@ @MS2_DIR@ \
|
||||
coreapi console gtk share scripts
|
||||
coreapi console gtk share scripts tester
|
||||
|
||||
|
||||
|
||||
|
|
@ -229,4 +229,4 @@ clean-local:
|
|||
rm -rf $(BUNDLEDIR)
|
||||
discovery:
|
||||
touch specs.cpp
|
||||
$(CC) $(CFLAGS) $(MEDIASTREAMER2_CFLAGS) $(ORTP_CFLAGS) -E -P -v -dD specs.cpp
|
||||
$(CC) $(CFLAGS) -include $(top_builddir)/config.h $(MEDIASTREAMER2_CFLAGS) $(ORTP_CFLAGS) $(SIPSTACK_CFLAGS) $(CUNIT_CFLAGS)-E -P -v -dD specs.cpp
|
||||
|
|
|
|||
60
configure.ac
60
configure.ac
|
|
@ -511,14 +511,28 @@ if test x$enable_tunnel = xtrue; then
|
|||
AC_SUBST(TUNNEL_LIBS)
|
||||
fi
|
||||
|
||||
SIPSTACK_CFLAGS=
|
||||
SIPSTACK_LIBS=
|
||||
|
||||
AC_ARG_ENABLE([bellesip],
|
||||
AS_HELP_STRING([--enable-bellesip], [Build with bellesip]))
|
||||
|
||||
PKG_CHECK_MODULES(BELLESIP, [belle-sip],[bellesip_found=yes],foo=bar)
|
||||
|
||||
AM_CONDITIONAL([USE_BELLESIP], [test "x$enable_bellesip" != "xno" && test "x$bellesip_found" == "xyes"])
|
||||
|
||||
|
||||
if test $USE_BELLESIP_TRUE !='#' ; then
|
||||
SIPSTACK_CFLAGS=$BELLESIP_CFLAGS
|
||||
SIPSTACK_LIBS=$BELLESIP_LIBS
|
||||
AC_DEFINE(USE_BELLESIP,1,[Defined when bellesip is used])
|
||||
else
|
||||
SIPSTACK_CFLAGS=$EXOSIP_CFLAGS $OSIP_CFLAGS
|
||||
SIPSTACK_LIBS=$EXOSIP_LIBS $OSIP_LIBS
|
||||
fi
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
AC_SUBST(SIPSTACK_CFLAGS)
|
||||
AC_SUBST(SIPSTACK_LIBS)
|
||||
|
||||
dnl check for db2html (docbook) to generate html user manual
|
||||
AC_CHECK_PROG(have_sgmltools,sgmltools, yes, no)
|
||||
|
|
@ -568,14 +582,28 @@ AC_SUBST(ORTP_LIBS)
|
|||
AC_SUBST([ORTP_VERSION])
|
||||
AC_SUBST([ORTP_DIR])
|
||||
|
||||
AC_ARG_ENABLE(tests_enabled,
|
||||
[ --disable-tests Disable compilation of tests],
|
||||
[case "${enableval}" in
|
||||
yes) tests_enabled=true ;;
|
||||
no) tests_enabled=false ;;
|
||||
*) AC_MSG_ERROR(bad value ${enableval} for --disable-tests) ;;
|
||||
esac],[tests_enabled=false])
|
||||
AM_CONDITIONAL(ENABLE_TESTS, test x$tests_enabled = xyes)
|
||||
AC_ARG_ENABLE([tests],
|
||||
AS_HELP_STRING([--disable-tests], [Disable the tests]))
|
||||
AM_CONDITIONAL([ENABLE_TESTS], [test "x$enable_tests" != "xno"])
|
||||
|
||||
PKG_CHECK_MODULES(CUNIT, cunit, [found_cunit=yes],[found_cunit=no])
|
||||
|
||||
if test "$found_cunit" = "no" ; then
|
||||
AC_CHECK_HEADERS(CUnit/CUnit.h,
|
||||
[
|
||||
found_cunit=yes
|
||||
CUNIT_LIBS="-lcunit"
|
||||
])
|
||||
fi
|
||||
|
||||
|
||||
case "$target_os" in
|
||||
*darwin*)
|
||||
#hack for macport
|
||||
CUNIT_LIBS+=" -lncurses"
|
||||
;;
|
||||
esac
|
||||
AM_CONDITIONAL([BUILD_CUNIT_TESTS], [test x$found_cunit = xyes && test x$enable_tests != xno])
|
||||
|
||||
|
||||
|
||||
|
|
@ -596,6 +624,7 @@ m4/Makefile
|
|||
po/Makefile.in
|
||||
pixmaps/Makefile
|
||||
coreapi/Makefile
|
||||
tester/Makefile
|
||||
coreapi/help/Makefile
|
||||
coreapi/help/Doxyfile
|
||||
gtk/Makefile
|
||||
|
|
@ -626,6 +655,11 @@ printf "* zRTP encryption (GPLv3)\t%s\n" $zrtp
|
|||
if test "$enable_tunnel" = "true" ; then
|
||||
printf "* Tunnel support\t\ttrue\n"
|
||||
fi
|
||||
if test $USE_BELLESIP_TRUE !='#' ; then
|
||||
printf "* bellesip stack\t\ttrue\n"
|
||||
else
|
||||
printf "* eXosip stack\t\ttrue\n"
|
||||
fi
|
||||
|
||||
echo "Now type 'make' to compile, and then 'make install' as root to install it."
|
||||
|
||||
|
|
|
|||
|
|
@ -22,9 +22,6 @@ liblinphone_la_SOURCES=\
|
|||
linphonecore.c linphonecore.h private.h\
|
||||
offeranswer.c offeranswer.h\
|
||||
sal.c sal.h \
|
||||
sal_eXosip2.c sal_eXosip2.h\
|
||||
sal_eXosip2_sdp.c \
|
||||
sal_eXosip2_presence.c \
|
||||
callbacks.c \
|
||||
misc.c \
|
||||
address.c \
|
||||
|
|
@ -42,7 +39,13 @@ liblinphone_la_SOURCES=\
|
|||
ec-calibrator.c \
|
||||
conference.c \
|
||||
linphone_tunnel.cc
|
||||
|
||||
if USE_BELLESIP
|
||||
liblinphone_la_SOURCES+= sal_bellesip.c
|
||||
else
|
||||
liblinphone_la_SOURCES+= sal_eXosip2.c sal_eXosip2.h\
|
||||
sal_eXosip2_sdp.c \
|
||||
sal_eXosip2_presence.c
|
||||
endif
|
||||
if BUILD_WIZARD
|
||||
liblinphone_la_SOURCES+=sipwizard.c
|
||||
endif
|
||||
|
|
@ -56,7 +59,7 @@ endif
|
|||
liblinphone_la_LDFLAGS= -version-info $(LIBLINPHONE_SO_VERSION) -no-undefined
|
||||
|
||||
liblinphone_la_LIBADD= \
|
||||
$(EXOSIP_LIBS) \
|
||||
$(SIPSTACK_LIBS) \
|
||||
$(MEDIASTREAMER_LIBS) \
|
||||
$(ORTP_LIBS) $(OPENSSL_LIBS) \
|
||||
$(TUNNEL_LIBS) \
|
||||
|
|
@ -78,8 +81,7 @@ endif
|
|||
AM_CFLAGS=$(STRICT_OPTIONS) -DIN_LINPHONE \
|
||||
$(ORTP_CFLAGS) \
|
||||
$(MEDIASTREAMER_CFLAGS) \
|
||||
$(OSIP_CFLAGS) \
|
||||
$(EXOSIP_CFLAGS) \
|
||||
$(SIPSTACK_CFLAGS) \
|
||||
$(LIBSOUP_CFLAGS) \
|
||||
-DENABLE_TRACE \
|
||||
-DLOG_DOMAIN=\"LinphoneCore\" \
|
||||
|
|
|
|||
|
|
@ -306,6 +306,7 @@ void linphone_core_enable_logs(FILE *file){
|
|||
if (file==NULL) file=stdout;
|
||||
ortp_set_log_file(file);
|
||||
ortp_set_log_level_mask(ORTP_MESSAGE|ORTP_WARNING|ORTP_ERROR|ORTP_FATAL);
|
||||
sal_enable_logs();
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -320,6 +321,7 @@ void linphone_core_enable_logs(FILE *file){
|
|||
void linphone_core_enable_logs_with_cb(OrtpLogFunc logfunc){
|
||||
ortp_set_log_level_mask(ORTP_MESSAGE|ORTP_WARNING|ORTP_ERROR|ORTP_FATAL);
|
||||
ortp_set_log_handler(logfunc);
|
||||
sal_enable_logs();
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -329,6 +331,7 @@ void linphone_core_enable_logs_with_cb(OrtpLogFunc logfunc){
|
|||
**/
|
||||
void linphone_core_disable_logs(){
|
||||
ortp_set_log_level_mask(ORTP_ERROR|ORTP_FATAL);
|
||||
sal_disable_logs();
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -1462,14 +1465,14 @@ int linphone_core_get_sip_port(LinphoneCore *lc)
|
|||
static char _ua_name[64]="Linphone";
|
||||
static char _ua_version[64]=LINPHONE_VERSION;
|
||||
|
||||
#ifdef HAVE_EXOSIP_GET_VERSION
|
||||
#if HAVE_EXOSIP_GET_VERSION && !USE_BELLESIP
|
||||
extern const char *eXosip_get_version();
|
||||
#endif
|
||||
|
||||
static void apply_user_agent(LinphoneCore *lc){
|
||||
char ua_string[256];
|
||||
snprintf(ua_string,sizeof(ua_string)-1,"%s/%s (eXosip2/%s)",_ua_name,_ua_version,
|
||||
#ifdef HAVE_EXOSIP_GET_VERSION
|
||||
#if HAVE_EXOSIP_GET_VERSION && !USE_BELLESIP
|
||||
eXosip_get_version()
|
||||
#else
|
||||
"unknown"
|
||||
|
|
|
|||
|
|
@ -38,6 +38,7 @@ const char* sal_transport_to_string(SalTransport transport) {
|
|||
}
|
||||
|
||||
SalTransport sal_transport_parse(const char* param) {
|
||||
if (!param) return SalTransportUDP;
|
||||
if (strcasecmp("udp",param)==0) return SalTransportUDP;
|
||||
if (strcasecmp("tcp",param)==0) return SalTransportTCP;
|
||||
if (strcasecmp("tls",param)==0) return SalTransportTLS;
|
||||
|
|
|
|||
|
|
@ -60,7 +60,7 @@ SalAddress * sal_address_new(const char *uri);
|
|||
SalAddress * sal_address_clone(const SalAddress *addr);
|
||||
const char *sal_address_get_scheme(const SalAddress *addr);
|
||||
const char *sal_address_get_display_name(const SalAddress* addr);
|
||||
char *sal_address_get_display_name_unquoted(const SalAddress *addr);
|
||||
const char *sal_address_get_display_name_unquoted(const SalAddress *addr);
|
||||
const char *sal_address_get_username(const SalAddress *addr);
|
||||
const char *sal_address_get_domain(const SalAddress *addr);
|
||||
const char * sal_address_get_port(const SalAddress *addr);
|
||||
|
|
@ -371,6 +371,8 @@ int sal_ping(SalOp *op, const char *from, const char *to);
|
|||
/*misc*/
|
||||
void sal_get_default_local_ip(Sal *sal, int address_family, char *ip, size_t iplen);
|
||||
|
||||
void sal_enable_logs();
|
||||
void sal_disable_logs();
|
||||
|
||||
/*internal API */
|
||||
void __sal_op_init(SalOp *b, Sal *sal);
|
||||
|
|
|
|||
661
coreapi/sal_bellesip.c
Normal file
661
coreapi/sal_bellesip.c
Normal file
|
|
@ -0,0 +1,661 @@
|
|||
/*
|
||||
linphone
|
||||
Copyright (C) 2012 Belledonne Communications, Grenoble, France
|
||||
|
||||
This program 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 2
|
||||
of the License, or (at your option) any later version.
|
||||
|
||||
This program 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 this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
#include "sal.h"
|
||||
#include "belle-sip/belle-sip.h"
|
||||
/**/
|
||||
|
||||
|
||||
/* Address manipulation API*/
|
||||
SalAddress * sal_address_new(const char *uri){
|
||||
belle_sip_header_address_t* result;
|
||||
if (uri) {
|
||||
return (SalAddress *)belle_sip_header_address_parse (uri);
|
||||
} else {
|
||||
result = belle_sip_header_address_new();
|
||||
belle_sip_header_address_set_uri(result,belle_sip_uri_new());
|
||||
return (SalAddress *)result;
|
||||
}
|
||||
}
|
||||
SalAddress * sal_address_clone(const SalAddress *addr){
|
||||
return (SalAddress *) belle_sip_object_clone(BELLE_SIP_OBJECT(addr));
|
||||
}
|
||||
const char *sal_address_get_scheme(const SalAddress *addr){
|
||||
belle_sip_header_address_t* header_addr = BELLE_SIP_HEADER_ADDRESS(addr);
|
||||
belle_sip_uri_t* uri = belle_sip_header_address_get_uri(header_addr);
|
||||
if (uri) {
|
||||
if (belle_sip_uri_is_secure(uri)) return "sips";
|
||||
else return "sip";
|
||||
} else
|
||||
return NULL;
|
||||
}
|
||||
const char *sal_address_get_display_name(const SalAddress* addr){
|
||||
belle_sip_header_address_t* header_addr = BELLE_SIP_HEADER_ADDRESS(addr);
|
||||
return belle_sip_header_address_get_displayname(header_addr);
|
||||
|
||||
}
|
||||
const char *sal_address_get_display_name_unquoted(const SalAddress *addr){
|
||||
return sal_address_get_display_name(addr);
|
||||
}
|
||||
#define SAL_ADDRESS_GET(addr,param) \
|
||||
belle_sip_header_address_t* header_addr = BELLE_SIP_HEADER_ADDRESS(addr);\
|
||||
belle_sip_uri_t* uri = belle_sip_header_address_get_uri(header_addr);\
|
||||
if (uri) {\
|
||||
return belle_sip_uri_get_##param(uri);\
|
||||
} else\
|
||||
return NULL;
|
||||
|
||||
#define SAL_ADDRESS_SET(addr,param,value) \
|
||||
belle_sip_header_address_t* header_addr = BELLE_SIP_HEADER_ADDRESS(addr);\
|
||||
belle_sip_uri_t* uri = belle_sip_header_address_get_uri(header_addr);\
|
||||
belle_sip_uri_set_##param(uri,value);
|
||||
|
||||
const char *sal_address_get_username(const SalAddress *addr){
|
||||
SAL_ADDRESS_GET(addr,user)
|
||||
}
|
||||
const char *sal_address_get_domain(const SalAddress *addr){
|
||||
SAL_ADDRESS_GET(addr,host)
|
||||
}
|
||||
const char * sal_address_get_port(const SalAddress *addr){
|
||||
ms_fatal("sal_address_get_port not implemented yet");
|
||||
return NULL;
|
||||
}
|
||||
int sal_address_get_port_int(const SalAddress *addr){
|
||||
belle_sip_header_address_t* header_addr = BELLE_SIP_HEADER_ADDRESS(addr);
|
||||
belle_sip_uri_t* uri = belle_sip_header_address_get_uri(header_addr);
|
||||
if (uri) {
|
||||
return belle_sip_uri_get_port(uri);
|
||||
} else
|
||||
return -1;
|
||||
}
|
||||
SalTransport sal_address_get_transport(const SalAddress* addr){
|
||||
belle_sip_header_address_t* header_addr = BELLE_SIP_HEADER_ADDRESS(addr);
|
||||
belle_sip_uri_t* uri = belle_sip_header_address_get_uri(header_addr);
|
||||
if (uri) {
|
||||
return sal_transport_parse(belle_sip_uri_get_transport_param(uri));
|
||||
} else
|
||||
return SalTransportUDP;
|
||||
};
|
||||
|
||||
void sal_address_set_display_name(SalAddress *addr, const char *display_name){
|
||||
belle_sip_header_address_t* header_addr = BELLE_SIP_HEADER_ADDRESS(addr);
|
||||
belle_sip_header_address_set_displayname(header_addr,display_name);
|
||||
}
|
||||
void sal_address_set_username(SalAddress *addr, const char *username){
|
||||
SAL_ADDRESS_SET(addr,user,username);
|
||||
}
|
||||
void sal_address_set_domain(SalAddress *addr, const char *host){
|
||||
SAL_ADDRESS_SET(addr,host,host);
|
||||
}
|
||||
void sal_address_set_port(SalAddress *addr, const char *port){
|
||||
SAL_ADDRESS_SET(addr,port,atoi(port));
|
||||
}
|
||||
void sal_address_set_port_int(SalAddress *addr, int port){
|
||||
SAL_ADDRESS_SET(addr,port,port);
|
||||
}
|
||||
void sal_address_clean(SalAddress *addr){
|
||||
belle_sip_header_address_t* header_addr = BELLE_SIP_HEADER_ADDRESS(addr);
|
||||
belle_sip_header_address_set_displayname(header_addr,NULL);
|
||||
belle_sip_object_unref(belle_sip_header_address_get_uri(header_addr));
|
||||
belle_sip_header_address_set_uri(header_addr,belle_sip_uri_new());
|
||||
return ;
|
||||
}
|
||||
char *sal_address_as_string(const SalAddress *addr){
|
||||
return belle_sip_object_to_string(BELLE_SIP_OBJECT(addr));
|
||||
}
|
||||
char *sal_address_as_string_uri_only(const SalAddress *addr){
|
||||
belle_sip_header_address_t* header_addr = BELLE_SIP_HEADER_ADDRESS(addr);
|
||||
belle_sip_uri_t* uri = belle_sip_header_address_get_uri(header_addr);
|
||||
return belle_sip_object_to_string(BELLE_SIP_OBJECT(uri));
|
||||
}
|
||||
void sal_address_destroy(SalAddress *addr){
|
||||
belle_sip_header_address_t* header_addr = BELLE_SIP_HEADER_ADDRESS(addr);
|
||||
belle_sip_object_unref(header_addr);
|
||||
return ;
|
||||
}
|
||||
void sal_address_set_param(SalAddress *addr,const char* name,const char* value){
|
||||
belle_sip_parameters_t* parameters = BELLE_SIP_PARAMETERS(addr);
|
||||
belle_sip_parameters_set_parameter(parameters,name,value);
|
||||
return ;
|
||||
}
|
||||
void sal_address_set_transport(SalAddress* addr,SalTransport transport){
|
||||
SAL_ADDRESS_SET(addr,transport_param,sal_transport_to_string(transport));
|
||||
}
|
||||
|
||||
|
||||
struct Sal{
|
||||
SalCallbacks callbacks;
|
||||
belle_sip_listener_callbacks_t listener_callbacks;
|
||||
belle_sip_stack_t* stack;
|
||||
belle_sip_provider_t *prov;
|
||||
void *up; /*user pointer*/
|
||||
};
|
||||
|
||||
|
||||
struct SalOp{
|
||||
SalOpBase base;
|
||||
belle_sip_listener_callbacks_t callbacks;
|
||||
belle_sip_request_t* register_request;
|
||||
unsigned long int registration_refresh_timer;
|
||||
};
|
||||
|
||||
void sal_enable_logs(){
|
||||
belle_sip_set_log_level(BELLE_SIP_LOG_MESSAGE);
|
||||
}
|
||||
void sal_disable_logs() {
|
||||
belle_sip_set_log_level(BELLE_SIP_LOG_ERROR);
|
||||
}
|
||||
static void process_dialog_terminated(void *user_ctx, const belle_sip_dialog_terminated_event_t *event){
|
||||
ms_error("process_dialog_terminated not implemented yet");
|
||||
}
|
||||
static void process_io_error(void *user_ctx, const belle_sip_io_error_event_t *event){
|
||||
ms_error("process_io_error not implemented yet");
|
||||
}
|
||||
static void process_request_event(void *user_ctx, const belle_sip_request_event_t *event) {
|
||||
ms_error("process_request_event not implemented yet");
|
||||
}
|
||||
static void process_response_event(void *user_ctx, const belle_sip_response_event_t *event){
|
||||
belle_sip_client_transaction_t* client_transaction = belle_sip_response_event_get_client_transaction(event);
|
||||
SalOp* op = (SalOp*)belle_sip_transaction_get_application_data(BELLE_SIP_TRANSACTION(client_transaction));
|
||||
if (op->callbacks.process_response_event) {
|
||||
op->callbacks.process_response_event(op,event);
|
||||
} else {
|
||||
ms_error("Unhandled event response [%p]",event);
|
||||
}
|
||||
|
||||
}
|
||||
static void process_timeout(void *user_ctx, const belle_sip_timeout_event_t *event) {
|
||||
/* belle_sip_client_transaction_t* client_transaction = belle_sip_timeout_event_get_client_transaction(event);
|
||||
SalOp* op = (SalOp*)belle_sip_transaction_get_application_data(BELLE_SIP_TRANSACTION(client_transaction));
|
||||
if (op->callbacks.process_timeout) {
|
||||
op->callbacks.process_timeout(op,event);
|
||||
} else*/ {
|
||||
ms_error("Unhandled event timeout [%p]",event);
|
||||
}
|
||||
}
|
||||
static void process_transaction_terminated(void *user_ctx, const belle_sip_transaction_terminated_event_t *event) {
|
||||
/* belle_sip_client_transaction_t* client_transaction = belle_sip_transaction_terminated_event_get_client_transaction(event);
|
||||
SalOp* op = (SalOp*)belle_sip_transaction_get_application_data(client_transaction);
|
||||
if (op->calbacks.process_transaction_terminated) {
|
||||
op->calbacks.process_transaction_terminated(op,event);
|
||||
} else */{
|
||||
ms_error("Unhandled transaction terminated [%p]",event);
|
||||
}
|
||||
}
|
||||
|
||||
Sal * sal_init(){
|
||||
Sal * sal=ms_new0(Sal,1);
|
||||
sal->stack = belle_sip_stack_new(NULL);
|
||||
sal->prov = belle_sip_stack_create_provider(sal->stack,NULL);
|
||||
sal->listener_callbacks.process_dialog_terminated=process_dialog_terminated;
|
||||
sal->listener_callbacks.process_io_error=process_io_error;
|
||||
sal->listener_callbacks.process_request_event=process_request_event;
|
||||
sal->listener_callbacks.process_response_event=process_response_event;
|
||||
sal->listener_callbacks.process_timeout=process_timeout;
|
||||
sal->listener_callbacks.process_transaction_terminated=process_transaction_terminated;
|
||||
belle_sip_provider_add_sip_listener(sal->prov,belle_sip_listener_create_from_callbacks(&sal->listener_callbacks,sal));
|
||||
return sal;
|
||||
}
|
||||
void sal_set_user_pointer(Sal *sal, void *user_data){
|
||||
sal->up=user_data;
|
||||
}
|
||||
|
||||
void *sal_get_user_pointer(const Sal *sal){
|
||||
return sal->up;
|
||||
}
|
||||
|
||||
static void unimplemented_stub(){
|
||||
ms_warning("Unimplemented SAL callback");
|
||||
}
|
||||
|
||||
void sal_set_callbacks(Sal *ctx, const SalCallbacks *cbs){
|
||||
memcpy(&ctx->callbacks,cbs,sizeof(*cbs));
|
||||
if (ctx->callbacks.call_received==NULL)
|
||||
ctx->callbacks.call_received=(SalOnCallReceived)unimplemented_stub;
|
||||
if (ctx->callbacks.call_ringing==NULL)
|
||||
ctx->callbacks.call_ringing=(SalOnCallRinging)unimplemented_stub;
|
||||
if (ctx->callbacks.call_accepted==NULL)
|
||||
ctx->callbacks.call_accepted=(SalOnCallAccepted)unimplemented_stub;
|
||||
if (ctx->callbacks.call_failure==NULL)
|
||||
ctx->callbacks.call_failure=(SalOnCallFailure)unimplemented_stub;
|
||||
if (ctx->callbacks.call_terminated==NULL)
|
||||
ctx->callbacks.call_terminated=(SalOnCallTerminated)unimplemented_stub;
|
||||
if (ctx->callbacks.call_released==NULL)
|
||||
ctx->callbacks.call_released=(SalOnCallReleased)unimplemented_stub;
|
||||
if (ctx->callbacks.call_updating==NULL)
|
||||
ctx->callbacks.call_updating=(SalOnCallUpdating)unimplemented_stub;
|
||||
if (ctx->callbacks.auth_requested==NULL)
|
||||
ctx->callbacks.auth_requested=(SalOnAuthRequested)unimplemented_stub;
|
||||
if (ctx->callbacks.auth_success==NULL)
|
||||
ctx->callbacks.auth_success=(SalOnAuthSuccess)unimplemented_stub;
|
||||
if (ctx->callbacks.register_success==NULL)
|
||||
ctx->callbacks.register_success=(SalOnRegisterSuccess)unimplemented_stub;
|
||||
if (ctx->callbacks.register_failure==NULL)
|
||||
ctx->callbacks.register_failure=(SalOnRegisterFailure)unimplemented_stub;
|
||||
if (ctx->callbacks.dtmf_received==NULL)
|
||||
ctx->callbacks.dtmf_received=(SalOnDtmfReceived)unimplemented_stub;
|
||||
if (ctx->callbacks.notify==NULL)
|
||||
ctx->callbacks.notify=(SalOnNotify)unimplemented_stub;
|
||||
if (ctx->callbacks.notify_presence==NULL)
|
||||
ctx->callbacks.notify_presence=(SalOnNotifyPresence)unimplemented_stub;
|
||||
if (ctx->callbacks.subscribe_received==NULL)
|
||||
ctx->callbacks.subscribe_received=(SalOnSubscribeReceived)unimplemented_stub;
|
||||
if (ctx->callbacks.text_received==NULL)
|
||||
ctx->callbacks.text_received=(SalOnTextReceived)unimplemented_stub;
|
||||
if (ctx->callbacks.ping_reply==NULL)
|
||||
ctx->callbacks.ping_reply=(SalOnPingReply)unimplemented_stub;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void sal_uninit(Sal* sal){
|
||||
belle_sip_object_unref(sal->prov);
|
||||
belle_sip_object_unref(sal->stack);
|
||||
ms_free(sal);
|
||||
return ;
|
||||
};
|
||||
|
||||
int sal_listen_port(Sal *ctx, const char *addr, int port, SalTransport tr, int is_secure){
|
||||
int result;
|
||||
belle_sip_listening_point_t* lp = belle_sip_stack_create_listening_point(ctx->stack,addr,port,sal_transport_to_string(tr));
|
||||
if (lp) {
|
||||
result = belle_sip_provider_add_listening_point(ctx->prov,lp);
|
||||
belle_sip_object_unref(lp);
|
||||
} else {
|
||||
return -1;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
static void remove_listening_point(belle_sip_listening_point_t* lp,belle_sip_provider_t* prov) {
|
||||
belle_sip_provider_remove_listening_point(prov,lp);
|
||||
}
|
||||
int sal_unlisten_ports(Sal *ctx){
|
||||
const belle_sip_list_t * lps = belle_sip_provider_get_listening_points(ctx->prov);
|
||||
belle_sip_list_t * tmp_list = belle_sip_list_copy(lps);
|
||||
belle_sip_list_for_each2 (tmp_list,(void (*)(void*,void*))remove_listening_point,ctx->prov);
|
||||
belle_sip_list_free(tmp_list);
|
||||
|
||||
ms_message("sal_unlisten_ports done");
|
||||
return 0;
|
||||
}
|
||||
ortp_socket_t sal_get_socket(Sal *ctx){
|
||||
ms_fatal("sal_get_socket not implemented yet");
|
||||
return -1;
|
||||
}
|
||||
void sal_set_user_agent(Sal *ctx, const char *user_agent){
|
||||
ms_error("sal_set_user_agent not implemented yet");
|
||||
return ;
|
||||
}
|
||||
/*keepalive period in ms*/
|
||||
void sal_set_keepalive_period(Sal *ctx,unsigned int value){
|
||||
ms_error("sal_set_keepalive_period not implemented yet");
|
||||
return ;
|
||||
}
|
||||
/**
|
||||
* returns keepalive period in ms
|
||||
* 0 desactiaved
|
||||
* */
|
||||
unsigned int sal_get_keepalive_period(Sal *ctx){
|
||||
ms_fatal("sal_get_keepalive_period not implemented yet");
|
||||
return -1;
|
||||
}
|
||||
void sal_use_session_timers(Sal *ctx, int expires){
|
||||
ms_error("sal_use_session_timers not implemented yet");
|
||||
return ;
|
||||
}
|
||||
void sal_use_double_registrations(Sal *ctx, bool_t enabled){
|
||||
ms_error("sal_use_double_registrations not implemented yet");
|
||||
return ;
|
||||
}
|
||||
void sal_reuse_authorization(Sal *ctx, bool_t enabled){
|
||||
ms_error("sal_reuse_authorization not implemented yet");
|
||||
return ;
|
||||
}
|
||||
void sal_use_one_matching_codec_policy(Sal *ctx, bool_t one_matching_codec){
|
||||
ms_error("sal_use_one_matching_codec_policy not implemented yet");
|
||||
return ;
|
||||
}
|
||||
void sal_use_rport(Sal *ctx, bool_t use_rports){
|
||||
ms_error("sal_use_rport not implemented yet");
|
||||
return ;
|
||||
}
|
||||
void sal_use_101(Sal *ctx, bool_t use_101){
|
||||
ms_error("sal_use_101 not implemented yet");
|
||||
return ;
|
||||
}
|
||||
void sal_set_root_ca(Sal* ctx, const char* rootCa){
|
||||
ms_error("sal_set_root_ca not implemented yet");
|
||||
return ;
|
||||
}
|
||||
void sal_verify_server_certificates(Sal *ctx, bool_t verify){
|
||||
ms_error("sal_verify_server_certificates not implemented yet");
|
||||
return ;
|
||||
}
|
||||
|
||||
int sal_iterate(Sal *sal){
|
||||
/*FIXME should be zero*/
|
||||
belle_sip_stack_sleep(sal->stack,1);
|
||||
return 0;
|
||||
}
|
||||
MSList * sal_get_pending_auths(Sal *sal){
|
||||
ms_fatal("sal_get_pending_auths not implemented yet");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/*create an operation */
|
||||
SalOp * sal_op_new(Sal *sal){
|
||||
SalOp *op=ms_new0(SalOp,1);
|
||||
__sal_op_init(op,sal);
|
||||
return op;
|
||||
}
|
||||
|
||||
void sal_op_release(SalOp *op){
|
||||
__sal_op_free(op);
|
||||
if (op->register_request) belle_sip_object_unref(op->register_request);
|
||||
if (op->registration_refresh_timer>0) {
|
||||
belle_sip_main_loop_cancel_source(belle_sip_stack_get_main_loop(op->base.root->stack),op->registration_refresh_timer);
|
||||
}
|
||||
return ;
|
||||
}
|
||||
void sal_op_authenticate(SalOp *h, const SalAuthInfo *info){
|
||||
ms_fatal("sal_op_authenticate not implemented yet");
|
||||
return ;
|
||||
}
|
||||
void sal_op_cancel_authentication(SalOp *h){
|
||||
ms_fatal("sal_op_cancel_authentication not implemented yet");
|
||||
return ;
|
||||
}
|
||||
|
||||
int sal_op_get_auth_requested(SalOp *h, const char **realm, const char **username){
|
||||
ms_fatal("sal_op_get_auth_requested not implemented yet");
|
||||
return -1;
|
||||
}
|
||||
/*Call API*/
|
||||
int sal_call_set_local_media_description(SalOp *h, SalMediaDescription *desc){
|
||||
ms_fatal("sal_call_set_local_media_description not implemented yet");
|
||||
return -1;
|
||||
}
|
||||
int sal_call(SalOp *h, const char *from, const char *to){
|
||||
ms_fatal("sal_call not implemented yet");
|
||||
return -1;
|
||||
}
|
||||
int sal_call_notify_ringing(SalOp *h, bool_t early_media){
|
||||
ms_fatal("sal_call_notify_ringing not implemented yet");
|
||||
return -1;
|
||||
}
|
||||
/*accept an incoming call or, during a call accept a reINVITE*/
|
||||
int sal_call_accept(SalOp*h){
|
||||
ms_fatal("sal_call_accept not implemented yet");
|
||||
return -1;
|
||||
}
|
||||
int sal_call_decline(SalOp *h, SalReason reason, const char *redirection /*optional*/){
|
||||
ms_fatal("sal_call_decline not implemented yet");
|
||||
return -1;
|
||||
}
|
||||
int sal_call_update(SalOp *h, const char *subject){
|
||||
ms_fatal("sal_call_update not implemented yet");
|
||||
return -1;
|
||||
}
|
||||
SalMediaDescription * sal_call_get_remote_media_description(SalOp *h){
|
||||
ms_fatal("sal_call_get_remote_media_description not implemented yet");
|
||||
return NULL;
|
||||
}
|
||||
SalMediaDescription * sal_call_get_final_media_description(SalOp *h){
|
||||
ms_fatal("sal_call_get_final_media_description not implemented yet");
|
||||
return NULL;
|
||||
}
|
||||
int sal_call_refer(SalOp *h, const char *refer_to){
|
||||
ms_fatal("sal_call_refer not implemented yet");
|
||||
return -1;
|
||||
}
|
||||
int sal_call_refer_with_replaces(SalOp *h, SalOp *other_call_h){
|
||||
ms_fatal("sal_call_refer_with_replaces not implemented yet");
|
||||
return -1;
|
||||
}
|
||||
int sal_call_accept_refer(SalOp *h){
|
||||
ms_fatal("sal_call_accept_refer not implemented yet");
|
||||
return -1;
|
||||
}
|
||||
/*informs this call is consecutive to an incoming refer */
|
||||
int sal_call_set_referer(SalOp *h, SalOp *refered_call){
|
||||
ms_fatal("sal_call_set_referer not implemented yet");
|
||||
return -1;
|
||||
}
|
||||
/* returns the SalOp of a call that should be replaced by h, if any */
|
||||
SalOp *sal_call_get_replaces(SalOp *h){
|
||||
ms_fatal("sal_call_get_replaces not implemented yet");
|
||||
return NULL;
|
||||
}
|
||||
int sal_call_send_dtmf(SalOp *h, char dtmf){
|
||||
ms_fatal("sal_call_send_dtmf not implemented yet");
|
||||
return -1;
|
||||
}
|
||||
int sal_call_terminate(SalOp *h){
|
||||
ms_fatal("sal_call_terminate not implemented yet");
|
||||
return -1;
|
||||
}
|
||||
bool_t sal_call_autoanswer_asked(SalOp *op){
|
||||
ms_fatal("sal_call_autoanswer_asked not implemented yet");
|
||||
return -1;
|
||||
}
|
||||
void sal_call_send_vfu_request(SalOp *h){
|
||||
ms_fatal("sal_call_send_vfu_request not implemented yet");
|
||||
return ;
|
||||
}
|
||||
int sal_call_is_offerer(const SalOp *h){
|
||||
ms_fatal("sal_call_is_offerer not implemented yet");
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
/**************************REGISTRATION***************************///////////
|
||||
static void send_register_request(SalOp* op, belle_sip_request_t* request);
|
||||
|
||||
static void register_process_io_error(void *user_ctx, const belle_sip_io_error_event_t *event){
|
||||
ms_error("process_io_error not implemented yet");
|
||||
}
|
||||
|
||||
static void register_refresh(SalOp* op) {
|
||||
op->registration_refresh_timer=0;
|
||||
belle_sip_header_cseq_t* cseq=(belle_sip_header_cseq_t*)belle_sip_message_get_header(BELLE_SIP_MESSAGE(op->register_request),BELLE_SIP_CSEQ);
|
||||
belle_sip_header_cseq_set_seq_number(cseq,belle_sip_header_cseq_get_seq_number(cseq)+1);
|
||||
send_register_request(op,op->register_request);
|
||||
}
|
||||
static void register_response_event(void *user_ctx, const belle_sip_response_event_t *event){
|
||||
belle_sip_client_transaction_t* client_transaction = belle_sip_response_event_get_client_transaction(event);
|
||||
SalOp* op = (SalOp*)belle_sip_transaction_get_application_data(BELLE_SIP_TRANSACTION(client_transaction));
|
||||
belle_sip_response_t* response = belle_sip_response_event_get_response(event);
|
||||
belle_sip_header_expires_t* expires_header;
|
||||
belle_sip_request_t* old_register_request;
|
||||
int response_code = belle_sip_response_get_status_code(response);
|
||||
if (response_code<200) return;/*nothing to do*/
|
||||
switch (response_code) {
|
||||
case 200: {
|
||||
expires_header=(belle_sip_header_expires_t*)belle_sip_message_get_header(BELLE_SIP_MESSAGE(response),BELLE_SIP_EXPIRES);
|
||||
op->base.root->callbacks.register_success(op,expires_header&&belle_sip_header_expires_get_expires(expires_header)>0);
|
||||
old_register_request=op->register_request;
|
||||
op->register_request=belle_sip_transaction_get_request(BELLE_SIP_TRANSACTION(client_transaction));
|
||||
belle_sip_object_ref(op->register_request);
|
||||
if (old_register_request) belle_sip_object_unref(old_register_request);
|
||||
/*FIXME schedule refresh cb*/
|
||||
if (belle_sip_header_expires_get_expires(expires_header)>0) {
|
||||
if (op->registration_refresh_timer>0) {
|
||||
belle_sip_main_loop_cancel_source(belle_sip_stack_get_main_loop(op->base.root->stack),op->registration_refresh_timer);
|
||||
}
|
||||
op->registration_refresh_timer = belle_sip_main_loop_add_timeout(belle_sip_stack_get_main_loop(op->base.root->stack),(belle_sip_source_func_t)register_refresh,op,belle_sip_header_expires_get_expires(expires_header)*1000);
|
||||
}
|
||||
break;
|
||||
}
|
||||
default:{
|
||||
ms_error("Unexpected answer [%s] for registration request bound to [%s]",belle_sip_response_get_reason_phrase(response),op->base.from);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
static void register_process_timeout(void *user_ctx, const belle_sip_timeout_event_t *event) {
|
||||
ms_error("process_timeout not implemented yet");
|
||||
}
|
||||
static void register_process_transaction_terminated(void *user_ctx, const belle_sip_transaction_terminated_event_t *event) {
|
||||
ms_error("process_transaction_terminated not implemented yet");
|
||||
}
|
||||
|
||||
|
||||
|
||||
static void send_register_request(SalOp* op, belle_sip_request_t* request) {
|
||||
belle_sip_client_transaction_t* client_transaction;
|
||||
belle_sip_provider_t* prov=op->base.root->prov;
|
||||
op->callbacks.process_io_error=register_process_io_error;
|
||||
op->callbacks.process_response_event=register_response_event;
|
||||
op->callbacks.process_timeout=register_process_timeout;
|
||||
op->callbacks.process_transaction_terminated=register_process_transaction_terminated;
|
||||
client_transaction = belle_sip_provider_create_client_transaction(prov,request);
|
||||
belle_sip_transaction_set_application_data(BELLE_SIP_TRANSACTION(client_transaction),op);
|
||||
belle_sip_client_transaction_send_request(client_transaction);
|
||||
|
||||
}
|
||||
static void send_register_request_with_expires(SalOp* op, belle_sip_request_t* request,int expires) {
|
||||
belle_sip_header_expires_t* expires_header=(belle_sip_header_expires_t*)belle_sip_message_get_header(BELLE_SIP_MESSAGE(request),BELLE_SIP_EXPIRES);
|
||||
|
||||
if (!expires_header) {
|
||||
belle_sip_message_add_header(BELLE_SIP_MESSAGE(request),BELLE_SIP_HEADER(expires_header=belle_sip_header_expires_new()));
|
||||
}
|
||||
belle_sip_header_expires_set_expires(expires_header,expires);
|
||||
send_register_request(op,request);
|
||||
}
|
||||
|
||||
int sal_register(SalOp *op, const char *proxy, const char *from, int expires){
|
||||
belle_sip_request_t *req;
|
||||
belle_sip_provider_t* prov=op->base.root->prov;
|
||||
belle_sip_header_contact_t* contact_header =belle_sip_header_contact_new();
|
||||
belle_sip_header_from_t* from_header;
|
||||
belle_sip_header_to_t* to_header;
|
||||
belle_sip_uri_t* req_uri;
|
||||
belle_sip_uri_t* contact_uri;
|
||||
|
||||
char token[10];
|
||||
if (expires<0) goto error;
|
||||
from_header = belle_sip_header_from_create(from,belle_sip_random_token(token,sizeof(token)));
|
||||
if (!from_header) goto error;
|
||||
to_header=belle_sip_header_to_create(from,NULL);
|
||||
req_uri = (belle_sip_uri_t*)belle_sip_object_clone((belle_sip_object_t*)belle_sip_header_address_get_uri((belle_sip_header_address_t*)to_header));
|
||||
belle_sip_uri_set_user(req_uri,NULL);
|
||||
|
||||
if (sal_op_get_contact(op))
|
||||
contact_uri= belle_sip_uri_parse(sal_op_get_contact(op));
|
||||
else
|
||||
contact_uri=belle_sip_uri_new();
|
||||
|
||||
if (!contact_uri) goto error;
|
||||
belle_sip_header_address_set_uri((belle_sip_header_address_t*)contact_header,contact_uri);
|
||||
sal_op_set_route(op,proxy);
|
||||
/*FIXME use route info if needed*/
|
||||
|
||||
|
||||
req=belle_sip_request_create(
|
||||
req_uri,
|
||||
"REGISTER",
|
||||
belle_sip_provider_create_call_id(prov),
|
||||
belle_sip_header_cseq_create(20,"REGISTER"),
|
||||
from_header,
|
||||
to_header,
|
||||
belle_sip_header_via_new(),
|
||||
70);
|
||||
|
||||
|
||||
belle_sip_message_add_header(BELLE_SIP_MESSAGE(req),BELLE_SIP_HEADER(contact_header));
|
||||
send_register_request_with_expires(op,req,expires);
|
||||
|
||||
return 0;
|
||||
error:
|
||||
ms_error("Cannot initiate register to [%s] for [%s], expire [%i]",proxy,from,expires);
|
||||
if (contact_header) belle_sip_object_unref(contact_header);
|
||||
if (from_header) belle_sip_object_unref(from_header);
|
||||
if (to_header) belle_sip_object_unref(to_header);
|
||||
return -1;
|
||||
}
|
||||
int sal_register_refresh(SalOp *op, int expires){
|
||||
belle_sip_header_cseq_t* cseq=(belle_sip_header_cseq_t*)belle_sip_message_get_header(BELLE_SIP_MESSAGE(op->register_request),BELLE_SIP_CSEQ);
|
||||
belle_sip_header_cseq_set_seq_number(cseq,belle_sip_header_cseq_get_seq_number(cseq)+1);
|
||||
send_register_request_with_expires(op,op->register_request,expires);
|
||||
return 0;
|
||||
}
|
||||
int sal_unregister(SalOp *op){
|
||||
belle_sip_header_cseq_t* cseq=(belle_sip_header_cseq_t*)belle_sip_message_get_header(BELLE_SIP_MESSAGE(op->register_request),BELLE_SIP_CSEQ);
|
||||
belle_sip_header_cseq_set_seq_number(cseq,belle_sip_header_cseq_get_seq_number(cseq)+1);
|
||||
send_register_request_with_expires(op,op->register_request,0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*Messaging */
|
||||
int sal_text_send(SalOp *op, const char *from, const char *to, const char *text){
|
||||
ms_fatal("sal_text_send not implemented yet");
|
||||
return -1;
|
||||
}
|
||||
|
||||
/*presence Subscribe/notify*/
|
||||
int sal_subscribe_presence(SalOp *op, const char *from, const char *to){
|
||||
ms_fatal("sal_subscribe_presence not implemented yet");
|
||||
return -1;
|
||||
}
|
||||
int sal_unsubscribe(SalOp *op){
|
||||
ms_fatal("sal_unsubscribe not implemented yet");
|
||||
return -1;
|
||||
}
|
||||
int sal_subscribe_accept(SalOp *op){
|
||||
ms_fatal("sal_subscribe_accept not implemented yet");
|
||||
return -1;
|
||||
}
|
||||
int sal_subscribe_decline(SalOp *op){
|
||||
ms_fatal("sal_subscribe_decline not implemented yet");
|
||||
return -1;
|
||||
}
|
||||
int sal_notify_presence(SalOp *op, SalPresenceStatus status, const char *status_message){
|
||||
ms_fatal("sal_notify_presence not implemented yet");
|
||||
return -1;
|
||||
}
|
||||
int sal_notify_close(SalOp *op){
|
||||
ms_fatal("sal_notify_close not implemented yet");
|
||||
return -1;
|
||||
}
|
||||
|
||||
/*presence publish */
|
||||
int sal_publish(SalOp *op, const char *from, const char *to, SalPresenceStatus status){
|
||||
ms_fatal("sal_publish not implemented yet");
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
/*ping: main purpose is to obtain its own contact address behind firewalls*/
|
||||
int sal_ping(SalOp *op, const char *from, const char *to){
|
||||
ms_fatal("sal_ping not implemented yet");
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
|
||||
#define payload_type_set_number(pt,n) (pt)->user_data=(void*)((long)n);
|
||||
#define payload_type_get_number(pt) ((int)(long)(pt)->user_data)
|
||||
|
||||
/*misc*/
|
||||
void sal_get_default_local_ip(Sal *sal, int address_family, char *ip, size_t iplen){
|
||||
ms_fatal("sal_get_default_local_ip not implemented yet");
|
||||
return ;
|
||||
}
|
||||
|
|
@ -23,7 +23,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|||
|
||||
#include <wininet.h>
|
||||
|
||||
static int linphone_gtk_get_new_version(const char *version_url, char *version, size_t size){
|
||||
static int linphone_gtk_create_version(const char *version_url, char *version, size_t size){
|
||||
DWORD dwDownloaded = 0;
|
||||
HINTERNET hSession = NULL, hConnect = NULL;
|
||||
int ret=-1;
|
||||
|
|
@ -55,7 +55,7 @@ static int linphone_gtk_get_new_version(const char *version_url, char *version,
|
|||
|
||||
#else
|
||||
|
||||
static int linphone_gtk_get_new_version(const char *url, char *version, size_t size){
|
||||
static int linphone_gtk_create_version(const char *url, char *version, size_t size){
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
|
@ -121,7 +121,7 @@ static int version_compare(const char *v1, const char *v2){
|
|||
static void *check_for_new_version(void *d){
|
||||
const char *version_url=(const char *)d;
|
||||
char version[256];
|
||||
if (linphone_gtk_get_new_version(version_url,version,sizeof(version))==0){
|
||||
if (linphone_gtk_create_version(version_url,version,sizeof(version))==0){
|
||||
if (version_compare(version,LINPHONE_VERSION)>0){
|
||||
const char *download_site=linphone_gtk_get_ui_config("download_site",NULL);
|
||||
if (download_site) {
|
||||
|
|
|
|||
23
tester/Makefile.am
Normal file
23
tester/Makefile.am
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
|
||||
if BUILD_CUNIT_TESTS
|
||||
|
||||
noinst_PROGRAMS=liblinphone_tester
|
||||
TESTS=$(noinst_PROGRAMS)
|
||||
|
||||
liblinphone_tester_SOURCES= liblinphone_tester.c
|
||||
|
||||
|
||||
#liblinphone_tester_CFLAGS=$(CUNIT_CFLAGS)
|
||||
|
||||
#liblinphone_tester_LDFLAGS=$(CUNIT_LIBS)
|
||||
|
||||
|
||||
INCLUDES=-I$(top_srcdir)/include -I$(top_srcdir)/coreapi
|
||||
|
||||
LDADD=$(top_builddir)/coreapi/liblinphone.la
|
||||
|
||||
AM_LDFLAGS=$(CUNIT_LIBS)
|
||||
|
||||
AM_CFLAGS=$(STRICT_OPTIONS) -DIN_LINPHONE $(ORTP_CFLAGS) $(MEDIASTREAMER_CFLAGS) $(CUNIT_CFLAGS)
|
||||
|
||||
endif
|
||||
164
tester/liblinphone_tester.c
Normal file
164
tester/liblinphone_tester.c
Normal file
|
|
@ -0,0 +1,164 @@
|
|||
/*
|
||||
belle-sip - SIP (RFC3261) library.
|
||||
Copyright (C) 2010 Belledonne Communications SARL
|
||||
|
||||
This program 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.
|
||||
|
||||
This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#include <stdio.h>
|
||||
#include "CUnit/Basic.h"
|
||||
#include "linphonecore.h"
|
||||
|
||||
const char *test_domain="localhost";
|
||||
|
||||
|
||||
static int init(void) {
|
||||
return 0;
|
||||
}
|
||||
static int uninit(void) {
|
||||
return 0;
|
||||
}
|
||||
static void core_init_test(void) {
|
||||
LinphoneCoreVTable v_table;
|
||||
memset (&v_table,0,sizeof(v_table));
|
||||
LinphoneCore* lc = linphone_core_new(&v_table,NULL,NULL,NULL);
|
||||
CU_ASSERT_PTR_NOT_NULL_FATAL(lc);
|
||||
linphone_core_destroy(lc);
|
||||
}
|
||||
|
||||
static LinphoneAddress * create_linphone_address(void) {
|
||||
LinphoneAddress *addr = linphone_address_new(NULL);
|
||||
CU_ASSERT_PTR_NOT_NULL_FATAL(addr);
|
||||
linphone_address_set_username(addr,"tester");
|
||||
CU_ASSERT_STRING_EQUAL("tester",linphone_address_get_username(addr));
|
||||
linphone_address_set_domain(addr,test_domain);
|
||||
CU_ASSERT_STRING_EQUAL(test_domain,linphone_address_get_domain(addr));
|
||||
linphone_address_set_display_name(addr, NULL);
|
||||
linphone_address_set_display_name(addr, "Mr Tester");
|
||||
CU_ASSERT_STRING_EQUAL("Mr Tester",linphone_address_get_display_name(addr));
|
||||
return addr;
|
||||
}
|
||||
static void linphone_address_test(void) {
|
||||
ms_free(create_linphone_address());
|
||||
}
|
||||
|
||||
static int number_of_LinphoneRegistrationNone=0;
|
||||
static int number_of_LinphoneRegistrationProgress =0;
|
||||
static int number_of_LinphoneRegistrationOk =0;
|
||||
static int number_of_LinphoneRegistrationCleared =0;
|
||||
static int number_of_LinphoneRegistrationFailed =0;
|
||||
|
||||
|
||||
static void registration_state_changed(struct _LinphoneCore *lc, LinphoneProxyConfig *cfg, LinphoneRegistrationState cstate, const char *message){
|
||||
ms_message("New registration state %s for user id [%s] at proxy [%s]\n"
|
||||
,linphone_registration_state_to_string(cstate)
|
||||
,linphone_proxy_config_get_identity(cfg)
|
||||
,linphone_proxy_config_get_addr(cfg));
|
||||
switch (cstate) {
|
||||
case LinphoneRegistrationNone:number_of_LinphoneRegistrationNone++;break;
|
||||
case LinphoneRegistrationProgress:number_of_LinphoneRegistrationProgress++;break;
|
||||
case LinphoneRegistrationOk:number_of_LinphoneRegistrationOk++;break;
|
||||
case LinphoneRegistrationCleared:number_of_LinphoneRegistrationCleared++;break;
|
||||
case LinphoneRegistrationFailed:number_of_LinphoneRegistrationFailed++;break;
|
||||
default:
|
||||
CU_FAIL("unexpected event");break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
static void simple_register(void) {
|
||||
LinphoneCoreVTable v_table;
|
||||
int retry=0;
|
||||
LCSipTransports transport = {5070,5070,0,5071};
|
||||
memset (&v_table,0,sizeof(v_table));
|
||||
v_table.registration_state_changed=registration_state_changed;
|
||||
LinphoneCore* lc = linphone_core_new(&v_table,NULL,NULL,NULL);
|
||||
CU_ASSERT_PTR_NOT_NULL_FATAL(lc);
|
||||
linphone_core_set_sip_transports(lc,&transport);
|
||||
LinphoneProxyConfig* proxy_cfg;
|
||||
|
||||
proxy_cfg = linphone_proxy_config_new();
|
||||
|
||||
LinphoneAddress *from = create_linphone_address();
|
||||
|
||||
linphone_proxy_config_set_identity(proxy_cfg,linphone_address_as_string(from));
|
||||
const char* server_addr = linphone_address_get_domain(from);
|
||||
linphone_proxy_config_set_server_addr(proxy_cfg,server_addr);
|
||||
linphone_proxy_config_enable_register(proxy_cfg,TRUE);
|
||||
linphone_proxy_config_expires(proxy_cfg,1);
|
||||
linphone_address_destroy(from);
|
||||
|
||||
linphone_core_add_proxy_config(lc,proxy_cfg);
|
||||
linphone_core_set_default_proxy(lc,proxy_cfg);
|
||||
|
||||
while (number_of_LinphoneRegistrationOk<1 && retry++ <20) {
|
||||
linphone_core_iterate(lc);
|
||||
ms_usleep(100000);
|
||||
}
|
||||
CU_ASSERT_TRUE(linphone_proxy_config_is_registered(proxy_cfg));
|
||||
/*wait until refresh*/
|
||||
while (number_of_LinphoneRegistrationOk<2 && retry++ <20) {
|
||||
linphone_core_iterate(lc);
|
||||
ms_usleep(100000);
|
||||
}
|
||||
|
||||
linphone_core_destroy(lc);
|
||||
CU_ASSERT_EQUAL(number_of_LinphoneRegistrationNone,0);
|
||||
CU_ASSERT_EQUAL(number_of_LinphoneRegistrationProgress,2);
|
||||
CU_ASSERT_EQUAL(number_of_LinphoneRegistrationOk,2);
|
||||
CU_ASSERT_EQUAL(number_of_LinphoneRegistrationCleared,1);
|
||||
CU_ASSERT_EQUAL(number_of_LinphoneRegistrationFailed,0);
|
||||
|
||||
}
|
||||
|
||||
int init_test_suite () {
|
||||
|
||||
CU_pSuite pSuite = CU_add_suite("liblinphone init test suite", init, uninit);
|
||||
|
||||
if (NULL == CU_add_test(pSuite, "linphone address tester", linphone_address_test)) {
|
||||
return CU_get_error();
|
||||
}
|
||||
if (NULL == CU_add_test(pSuite, "linphone core init/uninit tester", core_init_test)) {
|
||||
return CU_get_error();
|
||||
}
|
||||
if (NULL == CU_add_test(pSuite, "simple register tester", simple_register)) {
|
||||
return CU_get_error();
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
int main (int argc, char *argv[]) {
|
||||
int i;
|
||||
for(i=1;i<argc;++i){
|
||||
if (strcmp(argv[i],"--help")==0){
|
||||
fprintf(stderr,"%s \t--help\n\t\t\t--verbose",argv[0]);
|
||||
return 0;
|
||||
}else if (strcmp(argv[i],"--verbose")==0){
|
||||
linphone_core_enable_logs(NULL);
|
||||
}else if (strcmp(argv[i],"--domain")==0){
|
||||
i++;
|
||||
test_domain=argv[i];
|
||||
}
|
||||
}
|
||||
|
||||
/* initialize the CUnit test registry */
|
||||
if (CUE_SUCCESS != CU_initialize_registry())
|
||||
return CU_get_error();
|
||||
|
||||
init_test_suite();
|
||||
/* Run all tests using the CUnit Basic interface */
|
||||
CU_basic_set_mode(CU_BRM_VERBOSE);
|
||||
CU_basic_run_tests();
|
||||
CU_cleanup_registry();
|
||||
return CU_get_error();
|
||||
|
||||
}
|
||||
Loading…
Add table
Reference in a new issue