summaryrefslogtreecommitdiffstats
path: root/tinyXCAP/test
diff options
context:
space:
mode:
Diffstat (limited to 'tinyXCAP/test')
-rw-r--r--tinyXCAP/test/droid-makefile28
-rw-r--r--tinyXCAP/test/stdafx.c26
-rw-r--r--tinyXCAP/test/stdafx.h38
-rw-r--r--tinyXCAP/test/targetver.h18
-rw-r--r--tinyXCAP/test/test.c79
-rw-r--r--tinyXCAP/test/test.vcproj387
-rw-r--r--tinyXCAP/test/test_selector.h155
-rw-r--r--tinyXCAP/test/test_stack.h323
8 files changed, 1054 insertions, 0 deletions
diff --git a/tinyXCAP/test/droid-makefile b/tinyXCAP/test/droid-makefile
new file mode 100644
index 0000000..8857f6d
--- /dev/null
+++ b/tinyXCAP/test/droid-makefile
@@ -0,0 +1,28 @@
+APP := test
+
+CFLAGS := $(CFLAGS_COMMON) -I../include -I../../tinySAK/src -I../../tinyNET/src -I../../tinyHTTP/include
+LDFLAGS := $(LDFLAGS_COMMON) -Wl,-Bsymbolic,--whole-archive -l$(PROJECT) -ltinySAK -ltinyNET -ltinyHTTP -Wl,--entry=main
+
+all: $(APP)
+
+OBJS += $(APP).o
+
+$(APP): $(OBJS)
+ $(CC) $(LDFLAGS) -o $@ $^
+
+%.o: %.c
+ $(CC) -c $(INCLUDE) $(CFLAGS) $< -o $@
+
+install: $(APP)
+ $(ANDROID_SDK_ROOT)/tools/adb push $(APP) $(EXEC_DIR)/$(APP)
+ $(ANDROID_SDK_ROOT)/tools/adb shell chmod 777 $(EXEC_DIR)/$(APP)
+
+run:
+ $(ANDROID_SDK_ROOT)/tools/adb shell $(EXEC_DIR)/$(APP)
+
+#dbg:
+# $(MAKE) $(MAKEFILE) DEBUG="-g -DDEBUG"
+# $(MAKE) $(MAKEFILE) install
+
+clean:
+ @rm -f $(OBJS) $(APP) \ No newline at end of file
diff --git a/tinyXCAP/test/stdafx.c b/tinyXCAP/test/stdafx.c
new file mode 100644
index 0000000..df71e1b
--- /dev/null
+++ b/tinyXCAP/test/stdafx.c
@@ -0,0 +1,26 @@
+/*
+* Copyright (C) 2009 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango.org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+
+#include "stdafx.h"
+
+// TODO: reference any additional headers you need in STDAFX.H
+// and not in this file
diff --git a/tinyXCAP/test/stdafx.h b/tinyXCAP/test/stdafx.h
new file mode 100644
index 0000000..b73850f
--- /dev/null
+++ b/tinyXCAP/test/stdafx.h
@@ -0,0 +1,38 @@
+/*
+* Copyright (C) 2009 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango.org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+#ifndef TEST_TINYXCAP_STDAFX_H
+#define TEST_TINYXCAP_STDAFX_H
+
+#ifdef WIN32
+#include "targetver.h"
+#endif
+
+#include <stdio.h>
+//#if (defined(_WIN32) || defined(WIN32) || defined(_WIN32_WCE)) && !defined(__SYMBIAN32__)
+//#include <tchar.h>
+//#endif
+
+
+
+// TODO: reference additional headers your program requires here
+
+#endif /* TEST_TINYXCAP_STDAFX_H */
diff --git a/tinyXCAP/test/targetver.h b/tinyXCAP/test/targetver.h
new file mode 100644
index 0000000..574245d
--- /dev/null
+++ b/tinyXCAP/test/targetver.h
@@ -0,0 +1,18 @@
+#ifndef _TEST_TINYXCAP_VER
+#define _TEST_TINYXCAP_VER
+
+#if (defined(_WIN32) || defined(WIN32) || defined(_WIN32_WCE)) && !defined(__SYMBIAN32__)
+// The following macros define the minimum required platform. The minimum required platform
+// is the earliest version of Windows, Internet Explorer etc. that has the necessary features to run
+// your application. The macros work by enabling all features available on platform versions up to and
+// including the version specified.
+
+// Modify the following defines if you have to target a platform prior to the ones specified below.
+// Refer to MSDN for the latest info on corresponding values for different platforms.
+#ifndef _WIN32_WINNT // Specifies that the minimum required platform is Windows Vista.
+#define _WIN32_WINNT 0x0600 // Change this to the appropriate value to target other versions of Windows.
+#endif
+
+#endif
+
+#endif /*_TEST_TINYXCAP_VER*/
diff --git a/tinyXCAP/test/test.c b/tinyXCAP/test/test.c
new file mode 100644
index 0000000..8735a29
--- /dev/null
+++ b/tinyXCAP/test/test.c
@@ -0,0 +1,79 @@
+/*
+* Copyright (C) 2009 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango.org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+#include "stdafx.h"
+
+#include "tinyxcap.h"
+
+#define LOOP 1
+
+#define RUN_TEST_ALL 0
+#define RUN_TEST_SELECTOR 0
+#define RUN_TEST_STACK 1
+
+
+#define XUI "sip:mamadou@micromethod.com"
+#define PASSWORD "mysecret"
+#define XCAP_ROOT "http://192.168.0.10:8080/services"
+
+
+#if RUN_TEST_SELECTOR || RUN_TEST_ALL
+#include "test_selector.h"
+#endif
+
+#if RUN_TEST_STACK || RUN_TEST_ALL
+#include "test_stack.h"
+#endif
+
+
+#ifdef _WIN32_WCE
+int _tmain(int argc, _TCHAR* argv[])
+#else
+int main()
+#endif
+{
+ tnet_startup();
+
+ /* Print copyright information */
+ printf("Doubango Project\nCopyright (C) 2009 Mamadou Diop \n\n");
+
+#if LOOP
+ while(1)
+#endif
+ {
+ /* XCAP document/node selector */
+#if RUN_TEST_SELECTOR || RUN_TEST_ALL
+ test_selector();
+#endif
+
+ /* XCAP stack */
+#if RUN_TEST_STACK || RUN_TEST_ALL
+ test_stack();
+#endif
+
+
+ }
+
+ tnet_cleanup();
+
+ return 0;
+}
+
diff --git a/tinyXCAP/test/test.vcproj b/tinyXCAP/test/test.vcproj
new file mode 100644
index 0000000..ff447c6
--- /dev/null
+++ b/tinyXCAP/test/test.vcproj
@@ -0,0 +1,387 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="test"
+ ProjectGUID="{2A476CAA-BA45-4379-AFEC-088645840527}"
+ RootNamespace="test"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\thirdparties\win32\include;..\..\tinyHTTP\include;..\..\tinyXCAP\include;..\..\tinyNET\src;..\..\tinySAK\src;..\..\thirdparties\win32\include\smc"
+ PreprocessorDefinitions="DEBUG_LEVEL=DEBUG_LEVEL_INFO;WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ WarnAsError="true"
+ DebugInformationFormat="4"
+ CompileAs="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="$(OutDir)\tinyXCAP.lib $(OutDir)\tinyHTTP.lib $(OutDir)\tinySAK.lib $(OutDir)\tinyNET.lib"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ OutputDirectory="&quot;$(SolutionDir)$(ConfigurationName)\wce&quot;"
+ IntermediateDirectory="&quot;$(SolutionDir)$(ConfigurationName)&quot;"
+ ConfigurationType="1"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="1"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ ExecutionBucket="7"
+ AdditionalIncludeDirectories="&quot;$(DOUBANGO_HOME)\thirdparties\wince\include&quot;;&quot;$(DOUBANGO_HOME)\tinyXCAP\src&quot;;&quot;$(DOUBANGO_HOME)\tinySAK\src&quot;;&quot;$(DOUBANGO_HOME)\thirdparties\wince\include\smc&quot;;&quot;$(DOUBANGO_HOME)\thirdparties\wince\include\wcecompat&quot;"
+ PreprocessorDefinitions="DEBUG_LEVEL=DEBUG_LEVEL_INFO;_CONSOLE;_DEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES);WINCE;DEBUG;_WINDOWS;_USRDLL;$(ARCHFAM);$(_ARCHFAM_)"
+ MinimalRebuild="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ WarnAsError="true"
+ DebugInformationFormat="3"
+ CompileAs="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="$(OutDir)\tinyXCAP.lib $(OutDir)\tinySAK.lib"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ SubSystem="8"
+ EntryPointSymbol="mainWCRTStartup"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="0"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCCodeSignTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ <DeploymentTool
+ ForceDirty="-1"
+ RemoteDirectory=""
+ RegisterOutput="0"
+ AdditionalFiles=""
+ />
+ <DebuggerTool
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ EnableIntrinsicFunctions="true"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ EnableFunctionLevelLinking="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ OutputDirectory="&quot;$(SolutionDir)$(ConfigurationName)\wce&quot;"
+ IntermediateDirectory="&quot;$(SolutionDir)$(ConfigurationName)&quot;"
+ ConfigurationType="1"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="1"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ ExecutionBucket="7"
+ Optimization="2"
+ EnableIntrinsicFunctions="true"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ EnableFunctionLevelLinking="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ CompileAs="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="8"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="0"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCCodeSignTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ <DeploymentTool
+ ForceDirty="-1"
+ RemoteDirectory=""
+ RegisterOutput="0"
+ AdditionalFiles=""
+ />
+ <DebuggerTool
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+ >
+ <File
+ RelativePath=".\stdafx.c"
+ >
+ </File>
+ <File
+ RelativePath=".\test.c"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+ >
+ <File
+ RelativePath=".\stdafx.h"
+ >
+ </File>
+ <File
+ RelativePath=".\targetver.h"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="tests"
+ >
+ <File
+ RelativePath=".\test_selector.h"
+ >
+ </File>
+ <File
+ RelativePath=".\test_stack.h"
+ >
+ </File>
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/tinyXCAP/test/test_selector.h b/tinyXCAP/test/test_selector.h
new file mode 100644
index 0000000..74f4774
--- /dev/null
+++ b/tinyXCAP/test/test_selector.h
@@ -0,0 +1,155 @@
+/*
+* Copyright (C) 2009 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango.org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+#ifndef _TEST_SELECTOR_H
+#define _TEST_SELECTOR_H
+
+void test_selector()
+{
+ txcap_stack_handle_t* stack = tsk_null;
+ char* urlstring;
+
+ stack = txcap_stack_create(tsk_null, XUI, PASSWORD, XCAP_ROOT,
+ TXCAP_STACK_SET_NULL());
+
+ /* add user auids */
+ txcap_stack_set(stack,
+ TXCAP_STACK_SET_AUID("xcap-caps2", "application/xcap-caps2+xml", "urn:ietf:params:xml:ns:xcap-caps2", "index2", tsk_true),
+ TXCAP_STACK_SET_AUID("resource-lists2", "application/resource-lists+xml2", "urn:ietf:params:xml:ns:resource-lists2", "index2", tsk_false),
+
+ TXCAP_STACK_SET_NULL()); /* mandatory */
+
+ /* IETF server capabilities */
+ urlstring = txcap_selector_get_url(stack, "xcap-caps",
+ TXCAP_SELECTOR_NODE_SET_NULL());
+ TSK_DEBUG_INFO("Document('xcap-caps') = %s\n", urlstring);
+ TSK_FREE(urlstring);
+
+ /* My custom xcap-caps */
+ urlstring = txcap_selector_get_url(stack, "xcap-caps2",
+ TXCAP_SELECTOR_NODE_SET_NULL());
+ TSK_DEBUG_INFO("Document('xcap-caps2') = %s\n", urlstring);
+ TSK_FREE(urlstring);
+
+ /* IETF resource-lists */
+ urlstring = txcap_selector_get_url(stack, "resource-lists",
+ TXCAP_SELECTOR_NODE_SET_NULL());
+ TSK_DEBUG_INFO("Document('resource-lists') = %s\n", urlstring);
+ TSK_FREE(urlstring);
+
+ /* My custom resource-lists */
+ urlstring = txcap_selector_get_url(stack, "resource-lists2",
+ TXCAP_SELECTOR_NODE_SET_NULL());
+ TSK_DEBUG_INFO("Document('resource-lists2') = %s\n", urlstring);
+ TSK_FREE(urlstring);
+
+ /* Full custom resource-lists */
+ urlstring = txcap_selector_get_document_2(XCAP_ROOT, "resource-lists3", XUI, "index3");
+ TSK_DEBUG_INFO("Document('resource-lists2') = %s\n", urlstring);
+ TSK_FREE(urlstring);
+
+ /* Retrieve 'rcs' list
+ * Expected node: /resource-lists/list[@name="rcs"]
+ */
+ urlstring = txcap_selector_get_url(stack, "resource-lists",
+ TXCAP_SELECTOR_NODE_SET_ATTRIBUTE("list", "name", "rcs"),
+ TXCAP_SELECTOR_NODE_SET_NULL());
+ TSK_DEBUG_INFO("'rcs' list = %s\n", urlstring);
+ TSK_FREE(urlstring);
+
+ /* Retrieve the 2nd list
+ * Expected node: /resource-lists/list[2]
+ */
+ urlstring = txcap_selector_get_url(stack, "resource-lists",
+ TXCAP_SELECTOR_NODE_SET_POS("list", 2),
+ TXCAP_SELECTOR_NODE_SET_NULL());
+ TSK_DEBUG_INFO("2nd list = %s\n", urlstring);
+ TSK_FREE(urlstring);
+
+ /* Retrieve the 4th list (wildcard)
+ * Expected node: /resource-lists/*[4]
+ */
+ urlstring = txcap_selector_get_url(stack, "resource-lists",
+ TXCAP_SELECTOR_NODE_SET_POS("*", 4),
+ TXCAP_SELECTOR_NODE_SET_NULL());
+ TSK_DEBUG_INFO("4th list (wildcard) = %s\n", urlstring);
+ TSK_FREE(urlstring);
+
+ /* Retrieve the entry with: uri='sip:bob@example.com' and list='rcs'
+ * Expected node: /resource-lists/list[@name="rcs"]/entry[@uri="sip:bob@example.com"]
+ */
+ urlstring = txcap_selector_get_url(stack, "resource-lists",
+ TXCAP_SELECTOR_NODE_SET_ATTRIBUTE("list", "name", "rcs"),
+ TXCAP_SELECTOR_NODE_SET_ATTRIBUTE("entry", "uri", XUI),
+ TXCAP_SELECTOR_NODE_SET_NULL());
+ TSK_DEBUG_INFO("By uri and list = %s\n", urlstring);
+ TSK_FREE(urlstring);
+
+ /* Retrieve bob's display-name
+ * Expected node: /resource-lists/list[@name="rcs"]/entry[@uri="sip:bob@example.com"]/display-name
+ */
+ urlstring = txcap_selector_get_url(stack, "resource-lists",
+ TXCAP_SELECTOR_NODE_SET_ATTRIBUTE("list", "name", "rcs"),
+ TXCAP_SELECTOR_NODE_SET_ATTRIBUTE("entry", "uri", XUI),
+ TXCAP_SELECTOR_NODE_SET_NAME("display-name"),
+ TXCAP_SELECTOR_NODE_SET_NULL());
+ TSK_DEBUG_INFO("bob's display-name = %s\n", urlstring);
+ TSK_FREE(urlstring);
+
+ /* Retrieve the display-name of the fisrt entry from the 'rcs' list
+ * Expected node: /resource-lists/list[@name="rcs"]/entry[1]/display-name
+ */
+ urlstring = txcap_selector_get_url(stack, "resource-lists",
+ TXCAP_SELECTOR_NODE_SET_ATTRIBUTE("list", "name", "rcs"),
+ TXCAP_SELECTOR_NODE_SET_POS("entry", 1),
+ TXCAP_SELECTOR_NODE_SET_NAME("display-name"),
+ TXCAP_SELECTOR_NODE_SET_NULL());
+ TSK_DEBUG_INFO("display-name of 1st entry = %s\n", urlstring);
+ TSK_FREE(urlstring);
+
+ /* Retrieve the entry with: uri='sip:bob@example.com' from position 23 from 'rcs' list
+ * Expected node: /resource-lists/list[@name="rcs"]/entry[23][@uri="sip:bob@example.com"]
+ */
+ urlstring = txcap_selector_get_url(stack, "resource-lists",
+ TXCAP_SELECTOR_NODE_SET_ATTRIBUTE("list", "name", "rcs"),
+ TXCAP_SELECTOR_NODE_SET_POS_ATTRIBUTE("entry", 23, "uri", XUI),
+ TXCAP_SELECTOR_NODE_SET_NULL());
+ TSK_DEBUG_INFO("bob at pos 23 from 'rcs' = %s\n", urlstring);
+ TSK_FREE(urlstring);
+
+ /* Namespace test
+ * Expected node: /foo/a:bar/b:baz?xmlns(a=urn:test:namespace1-uri)xmlns(b=urn:test:namespace2-uri)
+ */
+ urlstring = txcap_selector_get_url(stack, "resource-lists",
+ TXCAP_SELECTOR_NODE_SET_NAME("foo"),
+ TXCAP_SELECTOR_NODE_SET_NAME("a:bar"),
+ TXCAP_SELECTOR_NODE_SET_NAME("b:baz"),
+ TXCAP_SELECTOR_NODE_SET_NAMESPACE("a", "urn:namespace1-uri"),
+ TXCAP_SELECTOR_NODE_SET_NAMESPACE("b", "urn:namespace2-uri"),
+ TXCAP_SELECTOR_NODE_SET_NULL());
+ TSK_DEBUG_INFO("Namespace test = %s\n", urlstring);
+ TSK_FREE(urlstring);
+
+
+ TSK_OBJECT_SAFE_FREE(stack);
+}
+
+#endif /* _TEST_SELECTOR_H */
diff --git a/tinyXCAP/test/test_stack.h b/tinyXCAP/test/test_stack.h
new file mode 100644
index 0000000..5d4eb1f
--- /dev/null
+++ b/tinyXCAP/test/test_stack.h
@@ -0,0 +1,323 @@
+/*
+* Copyright (C) 2009 Mamadou Diop.
+*
+* Contact: Mamadou Diop <diopmamadou(at)doubango.org>
+*
+* This file is part of Open Source Doubango Framework.
+*
+* DOUBANGO is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* DOUBANGO is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with DOUBANGO.
+*
+*/
+#ifndef _TEST_STACK_H
+#define _TEST_STACK_H
+
+#define PAYLOAD_LIST "<list name=\"newlist\" xmlns=\"urn:ietf:params:xml:ns:resource-lists\">" \
+ "<display-name>newlist</display-name>" \
+ "</list>"
+#define PAYLOAD_ENTRY "<entry uri=\""XUI"\" xmlns=\"urn:ietf:params:xml:ns:resource-lists\">" \
+ "<display-name>"XUI"</display-name>" \
+ "</entry>"
+
+int test_stack_callback(const thttp_event_t *httpevent)
+{
+ switch(httpevent->type){
+ case thttp_event_message: /* New HTTP message */
+ {
+ if(THTTP_MESSAGE_IS_RESPONSE(httpevent->message)){
+ const thttp_header_ETag_t* etag;
+ TSK_DEBUG_INFO("=== %d ==> %s", THTTP_RESPONSE_CODE(httpevent->message), THTTP_MESSAGE_CONTENT(httpevent->message));
+ // You can use
+ if((etag = (const thttp_header_ETag_t*)thttp_message_get_header(httpevent->message, thttp_htype_ETag))){
+ TSK_DEBUG_INFO("Etag=%s", etag->value);
+ }
+ }
+ else{
+
+ }
+ break;
+ }
+
+ case thttp_event_auth_failed:
+ {
+ TSK_DEBUG_INFO("=== auth failed.");
+ break;
+ }
+
+ case thttp_event_closed: /* HTTP connection closed (informational) */
+ {
+ TSK_DEBUG_INFO("=== closed.");
+ break;
+ }
+
+ default:
+ {
+ break;
+ }
+ }
+ return 0;
+}
+
+void test_stack()
+{
+ txcap_stack_handle_t* stack = tsk_null;
+ int ret;
+
+ stack = txcap_stack_create(test_stack_callback, XUI, PASSWORD, XCAP_ROOT,
+#if defined(ANDROID)
+ TXCAP_STACK_SET_OPTION(TXCAP_STACK_OPTION_LOCAL_IP, "10.0.2.15"),
+#endif
+
+ // stack-level options
+ TXCAP_STACK_SET_OPTION(TXCAP_STACK_OPTION_TIMEOUT, "6000"),
+
+ // stack-level headers
+ TXCAP_STACK_SET_HEADER("Connection", "Keep-Alive"),
+ TXCAP_STACK_SET_HEADER("User-Agent", "XDM-client/OMA1.1"),
+ TXCAP_STACK_SET_HEADER("X-3GPP-Intended-Identity", XUI),
+
+ TXCAP_STACK_SET_NULL());
+
+ if((ret = txcap_stack_start(stack))){
+ goto bail;
+ }
+
+ /* add user auids */
+ txcap_stack_set(stack,
+ // add new AUIDs
+ TXCAP_STACK_SET_AUID("xcap-caps2", "application/xcap-caps2+xml", "urn:ietf:params:xml:ns:xcap-caps2", "index2", tsk_true),
+ TXCAP_STACK_SET_AUID("resource-lists2", "application/resource-lists+xml2", "urn:ietf:params:xml:ns:resource-lists2", "index2", tsk_false),
+
+ TXCAP_STACK_SET_NULL()); /* mandatory */
+
+ //== get xcap-caps document
+ ret = txcap_action_fetch_document(stack,
+ // action-level options
+ TXCAP_ACTION_SET_OPTION(TXCAP_ACTION_OPTION_TIMEOUT, "6000"),
+ // action-level headers
+ TXCAP_ACTION_SET_HEADER("Pragma", "No-Cache"),
+ // selector
+ TXCAP_ACTION_SET_SELECTOR("xcap-caps",
+ TXCAP_SELECTOR_NODE_SET_NULL()),
+ // ends parameters
+ TXCAP_ACTION_SET_NULL()
+ );
+
+ getchar();
+/*
+ //== get resource-lists document
+ ret = txcap_action_fetch_document(stack,
+ // action-level options
+ TXCAP_ACTION_SET_OPTION(TXCAP_ACTION_OPTION_TIMEOUT, "6000"),
+ //action-level headers
+ TXCAP_ACTION_SET_HEADER("Pragma", "No-Cache"),
+ // selector
+ TXCAP_ACTION_SET_SELECTOR("resource-lists",
+ TXCAP_SELECTOR_NODE_SET_NULL()),
+ // ends parameters
+ TXCAP_ACTION_SET_NULL()
+ );
+
+ getchar();
+
+ //== get 'rcs' list
+ ret = txcap_action_fetch_element(stack,
+ // action-level options
+ TXCAP_ACTION_SET_OPTION(TXCAP_ACTION_OPTION_TIMEOUT, "6000"),
+ // action-level headers
+ TXCAP_ACTION_SET_HEADER("Pragma", "No-Cache"),
+ // selector
+ TXCAP_ACTION_SET_SELECTOR("resource-lists",
+ TXCAP_SELECTOR_NODE_SET_ATTRIBUTE("list", "name", "rcs"),
+ TXCAP_SELECTOR_NODE_SET_NULL()),
+ // ends parameters
+ TXCAP_ACTION_SET_NULL()
+ );
+
+ getchar();
+
+ //== Retrieve the 2nd list
+ ret = txcap_action_fetch_element(stack,
+ // action-level options
+ TXCAP_ACTION_SET_OPTION(TXCAP_ACTION_OPTION_TIMEOUT, "6000"),
+ // headers
+ TXCAP_ACTION_SET_HEADER("Pragma", "No-Cache"),
+ // action-level selector
+ TXCAP_ACTION_SET_SELECTOR("resource-lists",
+ TXCAP_SELECTOR_NODE_SET_POS("list", 2),
+ TXCAP_SELECTOR_NODE_SET_NULL()),
+ // ends parameters
+ TXCAP_ACTION_SET_NULL()
+ );
+
+ getchar();
+
+ //== Retrieve the 4th list (wildcard)
+ ret = txcap_action_fetch_element(stack,
+ // action-level options
+ TXCAP_ACTION_SET_OPTION(TXCAP_ACTION_OPTION_TIMEOUT, "6000"),
+ // headers
+ TXCAP_ACTION_SET_HEADER("Pragma", "No-Cache"),
+ // action-level selector
+ TXCAP_ACTION_SET_SELECTOR("resource-lists",
+ TXCAP_SELECTOR_NODE_SET_POS("*", 4),
+ TXCAP_SELECTOR_NODE_SET_NULL()),
+ // ends parameters
+ TXCAP_ACTION_SET_NULL()
+ );
+
+ getchar();
+
+ //== Retrieve the entry with: uri=XUI and list='rcs'
+ ret = txcap_action_fetch_element(stack,
+ // action-level options
+ TXCAP_ACTION_SET_OPTION(TXCAP_ACTION_OPTION_TIMEOUT, "6000"),
+ // headers
+ TXCAP_ACTION_SET_HEADER("Pragma", "No-Cache"),
+ // action-level selector
+ TXCAP_ACTION_SET_SELECTOR("resource-lists",
+ TXCAP_SELECTOR_NODE_SET_ATTRIBUTE("list", "name", "rcs"),
+ TXCAP_SELECTOR_NODE_SET_ATTRIBUTE("entry", "uri", XUI),
+ TXCAP_SELECTOR_NODE_SET_NULL()),
+ // ends parameters
+ TXCAP_ACTION_SET_NULL()
+ );
+
+ getchar();
+
+ //== Retrieve XUI's display-name ==> 404
+ ret = txcap_action_fetch_attribute(stack,
+ // action-level options
+ TXCAP_ACTION_SET_OPTION(TXCAP_ACTION_OPTION_TIMEOUT, "6000"),
+ // headers
+ TXCAP_ACTION_SET_HEADER("Pragma", "No-Cache"),
+ // action-level selector
+ TXCAP_ACTION_SET_SELECTOR("resource-lists",
+ TXCAP_SELECTOR_NODE_SET_ATTRIBUTE("list", "name", "rcs"),
+ TXCAP_SELECTOR_NODE_SET_ATTRIBUTE("entry", "uri", XUI),
+ TXCAP_SELECTOR_NODE_SET_NAME("display-name"),
+ TXCAP_SELECTOR_NODE_SET_NULL()),
+ // ends parameters
+ TXCAP_ACTION_SET_NULL()
+ );
+
+ getchar();
+
+ //== Retrieve the display-name of the fisrt entry from the 'rcs' list ==> 404
+ ret = txcap_action_fetch_attribute(stack,
+ // action-level options
+ TXCAP_ACTION_SET_OPTION(TXCAP_ACTION_OPTION_TIMEOUT, "6000"),
+ // headers
+ TXCAP_ACTION_SET_HEADER("Pragma", "No-Cache"),
+ // action-level selector
+ TXCAP_ACTION_SET_SELECTOR("resource-lists",
+ TXCAP_SELECTOR_NODE_SET_ATTRIBUTE("list", "name", "rcs"),
+ TXCAP_SELECTOR_NODE_SET_POS("entry", 1),
+ TXCAP_SELECTOR_NODE_SET_NAME("display-name"),
+ TXCAP_SELECTOR_NODE_SET_NULL()),
+ // ends parameters
+ TXCAP_ACTION_SET_NULL()
+ );
+
+ getchar();
+
+ //== Retrieve the entry with: uri='XUI' from position 1 from 'rcs' list
+ ret = txcap_action_fetch_element(stack,
+ // action-level options
+ TXCAP_ACTION_SET_OPTION(TXCAP_ACTION_OPTION_TIMEOUT, "6000"),
+ // headers
+ TXCAP_ACTION_SET_HEADER("Pragma", "No-Cache"),
+ // action-level selector
+ TXCAP_ACTION_SET_SELECTOR("resource-lists",
+ TXCAP_SELECTOR_NODE_SET_ATTRIBUTE("list", "name", "rcs"),
+ TXCAP_SELECTOR_NODE_SET_POS_ATTRIBUTE("entry", 1, "uri", XUI),
+ TXCAP_SELECTOR_NODE_SET_NULL()),
+ // ends parameters
+ TXCAP_ACTION_SET_NULL()
+ );
+
+ getchar();
+
+ //== Add newlist
+ ret = txcap_action_create_element(stack,
+ // selector
+ TXCAP_ACTION_SET_SELECTOR("resource-lists",
+ TXCAP_SELECTOR_NODE_SET_ATTRIBUTE("list", "name", "newlist"),
+ TXCAP_SELECTOR_NODE_SET_NULL()),
+ // payload
+ TXCAP_ACTION_SET_PAYLOAD(PAYLOAD_LIST, strlen(PAYLOAD_LIST)),
+ // ends parameters
+ TXCAP_ACTION_SET_NULL()
+ );
+ getchar();
+
+ //== Add entry
+ ret = txcap_action_create_element(stack,
+ // selector
+ TXCAP_ACTION_SET_SELECTOR("resource-lists",
+ TXCAP_SELECTOR_NODE_SET_ATTRIBUTE("list", "name", "newlist"),
+ TXCAP_SELECTOR_NODE_SET_ATTRIBUTE("entry", "uri", XUI),
+ TXCAP_SELECTOR_NODE_SET_NULL()),
+ // payload
+ TXCAP_ACTION_SET_PAYLOAD(PAYLOAD_ENTRY, strlen(PAYLOAD_ENTRY)),
+ // ends parameters
+ TXCAP_ACTION_SET_NULL()
+ );
+ getchar();
+
+ //== Add entry using dummy URI
+ ret = txcap_action_create_element(stack,
+ // dummy uri
+ TXCAP_ACTION_SET_REQUEST_URI("http://doubango.org/services/dummy/"XUI),
+ // payload
+ TXCAP_ACTION_SET_PAYLOAD(PAYLOAD_ENTRY, strlen(PAYLOAD_ENTRY)),
+ // ends parameters
+ TXCAP_ACTION_SET_NULL()
+ );
+ getchar();
+
+ //== Delete entry
+ ret = txcap_action_delete_element(stack,
+ // selector
+ TXCAP_ACTION_SET_SELECTOR("resource-lists",
+ TXCAP_SELECTOR_NODE_SET_ATTRIBUTE("list", "name", "newlist"),
+ TXCAP_SELECTOR_NODE_SET_ATTRIBUTE("entry", "uri", XUI),
+ TXCAP_SELECTOR_NODE_SET_NULL()),
+ // ends parameters
+ TXCAP_ACTION_SET_NULL()
+ );
+ getchar();
+
+
+
+
+ ret = txcap_action_fetch_document(stack,
+ // action-level options
+ TXCAP_ACTION_SET_OPTION(TXCAP_ACTION_OPTION_TIMEOUT, "6000"),
+ //action-level headers
+ TXCAP_ACTION_SET_HEADER("Pragma", "No-Cache"),
+ // selector
+ TXCAP_ACTION_SET_SELECTOR("org.openmobilealliance.pres-content",
+ TXCAP_SELECTOR_NODE_SET_NULL()),
+ // ends parameters
+ TXCAP_ACTION_SET_NULL()
+ );
+ */
+bail:
+ getchar();
+
+
+ TSK_OBJECT_SAFE_FREE(stack);
+}
+
+#endif /* _TEST_STACK_H */
OpenPOWER on IntegriCloud