Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorerititan2018-02-15 14:41:06 +0000
committererititan2018-02-15 14:41:06 +0000
commit142885bf83460903ebcba12cb25187accca22567 (patch)
treec8a08ec346b6dc25ab32187601f93b94f54569e7
parentd07184bdcbc1a27c9736e63a2d0ecac21fa22889 (diff)
downloadtitan.ApplicationLibraries.HTTP-142885bf83460903ebcba12cb25187accca22567.tar.gz
titan.ApplicationLibraries.HTTP-142885bf83460903ebcba12cb25187accca22567.tar.xz
titan.ApplicationLibraries.HTTP-142885bf83460903ebcba12cb25187accca22567.zip
Initial code commit
-rwxr-xr-xEPTF_Applib_HTTP_CNL113618.tpd56
-rw-r--r--demo/EPTF_HTTP_Demo.cfg207
-rw-r--r--demo/EPTF_HTTP_Demo.prj156
-rw-r--r--demo/EPTF_HTTP_Demo.ttcn1011
-rwxr-xr-xdemo/EPTF_HTTP_Demo_Makepatch.sh22
-rw-r--r--demo/EPTF_HTTP_Demo_Responder.ttcn229
-rw-r--r--doc/EPTF AppLib HTTP for TitanSim, Function Specification.docbin0 -> 245248 bytes
-rw-r--r--doc/EPTF Applib HTTP for TitanSim, User Guide.docbin0 -> 220160 bytes
-rw-r--r--doc/EPTF_Applib_HTTP_CNL113618_PRI.docbin0 -> 87040 bytes
-rw-r--r--src/EPTF_HTTP_All.grp27
-rw-r--r--src/LoadGen/EPTF_HTTP_Definitions.ttcn3057
-rw-r--r--src/LoadGen/EPTF_HTTP_Functions.ttcn7012
-rw-r--r--src/LoadGen/EPTF_HTTP_LoadGen.grp25
-rw-r--r--src/Logger/EPTF_HTTP_Logger.grp25
-rw-r--r--src/Logger/EPTF_HTTP_Logger_Definitions.ttcn118
-rw-r--r--src/Logger/EPTF_HTTP_Logger_Functions.ttcn180
-rw-r--r--src/Transport/EPTF_HTTP_Transport.grp25
-rw-r--r--src/Transport/EPTF_HTTP_Transport_Definitions.ttcn2092
-rw-r--r--src/Transport/EPTF_HTTP_Transport_Functions.ttcn6482
-rwxr-xr-xtest/EPTF_AppLib_HTTP_Test_Makepatch.sh22
-rw-r--r--test/EPTF_Applib_HTTP_CNL113618_TD.docbin0 -> 168960 bytes
-rw-r--r--test/EPTF_Applib_HTTP_CNL113618_TR.docbin0 -> 115712 bytes
-rwxr-xr-xtest/EPTF_Applib_HTTP_NaturalDocs_Generator/Languages.txt138
-rwxr-xr-xtest/EPTF_Applib_HTTP_NaturalDocs_Generator/Menu.txt47
-rwxr-xr-xtest/EPTF_Applib_HTTP_NaturalDocs_Generator/Topics.txt182
-rwxr-xr-xtest/EPTF_Applib_HTTP_NaturalDocs_Generator/generate.sh85
-rwxr-xr-xtest/EPTF_Applib_HTTP_NaturalDocs_Generator/load.css45
-rwxr-xr-xtest/EPTF_Applib_HTTP_NaturalDocs_Generator/repairunnaturalhtml.pl99
-rw-r--r--test/EPTF_Applib_HTTP_Test.cfg41
-rw-r--r--test/EPTF_Applib_HTTP_Test.prj127
-rw-r--r--test/EPTF_Applib_HTTP_Test.tpd35
-rw-r--r--test/EPTF_Applib_HTTP_Test_Application1_Definitions.ttcn178
-rw-r--r--test/EPTF_Applib_HTTP_Test_Application1_Functions.ttcn1675
-rw-r--r--test/EPTF_Applib_HTTP_Test_Definitions.ttcn105
-rw-r--r--test/EPTF_Applib_HTTP_Test_Functions.ttcn422
-rw-r--r--test/EPTF_Applib_HTTP_Test_Responder.ttcn230
-rw-r--r--test/EPTF_Applib_HTTP_Test_Templates.ttcn42
-rw-r--r--test/EPTF_Applib_HTTP_Test_Testcases.ttcn2233
38 files changed, 26430 insertions, 0 deletions
diff --git a/EPTF_Applib_HTTP_CNL113618.tpd b/EPTF_Applib_HTTP_CNL113618.tpd
new file mode 100755
index 0000000..199c7aa
--- /dev/null
+++ b/EPTF_Applib_HTTP_CNL113618.tpd
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright (c) 2000-2018 Ericsson Telecom AB
+
+ All rights reserved. This program and the accompanying materials
+ are made available under the terms of the Eclipse Public License v1.0
+ which accompanies this distribution, and is available at
+ http://www.eclipse.org/legal/epl-v10.html
+
+ File: EPTF_Applib_HTTP_CNL113618.tpd
+ Description: tpd project file
+ Rev: <RnXnn>
+ Prodnr: CNL 113 618
+ Updated: 2018-02-13
+ Contact: http://ttcn.ericsson.se
+-->
+<TITAN_Project_File_Information version="1.0">
+ <ProjectName>EPTF_Applib_HTTP_CNL113618</ProjectName>
+ <ReferencedProjects>
+ <ReferencedProject name="EPTF_CLL_Common" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Common/EPTF_CLL_Common.tpd"/>
+ <ReferencedProject name="EPTF_CLL_LGenBase" projectLocationURI="../EPTF_Core_Library_CNL113512/src/LGenBase/EPTF_CLL_LGenBase.tpd"/>
+ <ReferencedProject name="EPTF_CLL_Logging" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Logging/EPTF_CLL_Logging.tpd"/>
+ <ReferencedProject name="EPTF_CLL_RedBlackTree" projectLocationURI="../EPTF_Core_Library_CNL113512/src/RedBlackTree/EPTF_CLL_RedBlackTree.tpd"/>
+ <ReferencedProject name="EPTF_CLL_Scheduler" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Scheduler/EPTF_CLL_Scheduler.tpd"/>
+ <ReferencedProject name="EPTF_CLL_Transport_CommPortIPL4" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Transport/EPTF_CLL_Transport_CommPortIPL4.tpd"/>
+ <ReferencedProject name="EPTF_CLL_Transport_MessageBufferManager" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Transport/EPTF_CLL_Transport_MessageBufferManager.tpd"/>
+ <ReferencedProject name="EPTF_CLL_TransportRouting" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Transport/EPTF_CLL_TransportRouting.tpd"/>
+ <ReferencedProject name="EPTF_CLL_Variable" projectLocationURI="../EPTF_Core_Library_CNL113512/src/Variable/EPTF_CLL_Variable.tpd"/>
+ <ReferencedProject name="HTTPmsg_CNL113312" projectLocationURI="../../TestPorts/HTTPmsg_CNL113312/HTTPmsg_CNL113312.tpd"/>
+ <ReferencedProject name="IPL4asp_CNL113531" projectLocationURI="../../TestPorts/IPL4asp_CNL113531/IPL4asp_CNL113531.tpd"/>
+ <ReferencedProject name="TCCUsefulFunctions_CNL113472_Security" projectLocationURI="../TCCUsefulFunctions_CNL113472/TCCUsefulFunctions_CNL113472_Security.tpd"/>
+ </ReferencedProjects>
+ <Files>
+ <FileResource projectRelativePath="EPTF_HTTP_Definitions.ttcn" relativeURI="src/LoadGen/EPTF_HTTP_Definitions.ttcn"/>
+ <FileResource projectRelativePath="EPTF_HTTP_Functions.ttcn" relativeURI="src/LoadGen/EPTF_HTTP_Functions.ttcn"/>
+ <FileResource projectRelativePath="EPTF_HTTP_Transport_Definitions.ttcn" relativeURI="src/Transport/EPTF_HTTP_Transport_Definitions.ttcn"/>
+ <FileResource projectRelativePath="EPTF_HTTP_Transport_Functions.ttcn" relativeURI="src/Transport/EPTF_HTTP_Transport_Functions.ttcn"/>
+ </Files>
+ <ActiveConfiguration>Default</ActiveConfiguration>
+ <Configurations>
+ <Configuration name="Default">
+ <ProjectProperties>
+ <MakefileSettings>
+ <generateInternalMakefile>true</generateInternalMakefile>
+ <GNUMake>true</GNUMake>
+ <incrementalDependencyRefresh>true</incrementalDependencyRefresh>
+ <targetExecutable>bin/EPTF_Applib_HTTP_CNL113618</targetExecutable>
+ <buildLevel>Level 3 - Creating object files with dependency update</buildLevel>
+ </MakefileSettings>
+ <LocalBuildSettings>
+ <workingDirectory>bin</workingDirectory>
+ </LocalBuildSettings>
+ </ProjectProperties>
+ </Configuration>
+ </Configurations>
+</TITAN_Project_File_Information>
diff --git a/demo/EPTF_HTTP_Demo.cfg b/demo/EPTF_HTTP_Demo.cfg
new file mode 100644
index 0000000..191cacf
--- /dev/null
+++ b/demo/EPTF_HTTP_Demo.cfg
@@ -0,0 +1,207 @@
+[EXECUTE]
+//EPTF_HTTP_Demo.control
+
+EPTF_HTTP_Demo.tc_localTransportClientServer
+
+[LOGGING]
+FileMask := TTCN_ERROR | TTCN_WARNING | TTCN_USER | TTCN_VERDICTOP |
+TTCN_TESTCASE |TTCN_STATISTICS |TTCN_PARALLEL | TTCN_MATCHING | TTCN_PORTEVENT | TTCN_DEBUG
+ConsoleMask := TTCN_ERROR | TTCN_WARNING | TTCN_VERDICTOP | TTCN_TESTCASE |TTCN_STATISTICS
+LogEventTypes := Yes
+SourceInfoFormat := Stack #Single
+LogEntityName := Yes
+#MatchingHints := Detailed
+
+[MODULE_PARAMETERS]
+tsp_EPTF_HTTP_Transport_loggingEnable := true;
+tsp_EPTF_HTTP_loggingEnable := true;
+tsp_EPTF_HTTP_maxNumberOfEntities := 100;
+
+tsp_EPTF_HTTP_dispatchLevel := Detailed;
+
+tsp_EPTF_LGenBaseDebug := false;
+tsp_EPTF_LGenBaseDebugTraffic := false;
+
+tsp_EPTF_HTTP_userNumber := 10;
+tsp_EPTF_HTTP_headerTemplatePath := "./";
+tsp_EPTF_HTTP_headerTemplateName := "";
+tsp_EPTF_HTTP_bodyTemplatePath := "./";
+tsp_EPTF_HTTP_bodyTemplateName := "";
+
+tsp_EPTF_HTTP_Demo_LocalAddress := "159.107.193.33"
+tsp_EPTF_HTTP_Demo_LocalPort := 3000
+tsp_EPTF_HTTP_Demo_RemoteAddress := "159.107.193.33"
+tsp_EPTF_HTTP_Demo_RemotePort := 4000
+
+tsp_EPTF_HTTP_Demo_FSMs :=
+{
+ { name := "EPTF HTTP: Basic Call",
+ stateList := { "idle", "wait" },
+ timerList := { { name := "TIMEOUT", startValue := 1.0 } },
+ table := {
+ // TC tarted event
+ {
+ eventToListen := { bName := "EPTF_CLL_LGenBase", iName := "LGenBase: Traffic_case_started.", eventType := fsm },
+ cellRow := {
+ // state == idle
+ { actionList := omit,
+ nextStateCalculation := omit,
+ nextState := omit
+ },
+ // state == wait
+ { actionList := omit,
+ nextStateCalculation := omit,
+ nextState := omit
+ }
+ }
+ },
+
+ // start TC event
+ {
+ eventToListen := { bName := "EPTF_CLL_LGenBase", iName := "LGenBase: Start_the_traffic_case!", eventType := fsm },
+ cellRow := {
+ // state == idle
+ { actionList := {
+ { stepOrFunctionName := "EPTF HTTP: Sends HTTP Request", contextArgs := { stepContextArgs := {} } },
+ { stepOrFunctionName := "LGenBase: StepFunction_timerStart", contextArgs := { timerName := "TIMEOUT"} }
+ },
+ nextStateCalculation := omit,
+ nextState := "wait"
+ },
+ // state == wait
+ { actionList := omit,
+ nextStateCalculation := omit,
+ nextState := omit
+ }
+ }
+ },
+
+ // answer OK event
+ {
+ eventToListen := { bName := "HTTP Behavior", iName := "HTTP CHAR Response Message Received", eventType := fsm },
+ cellRow := {
+ // state == idle
+ { actionList := omit,
+ nextStateCalculation := omit,
+ nextState := omit
+ },
+ // state == wait
+ { actionList := {
+ { stepOrFunctionName := "EPTF HTTP: Response message received", contextArgs := { stepContextArgs := {} } },
+ { stepOrFunctionName := "LGenBase: StepFunction_timerCancel", contextArgs := { timerName := "TIMEOUT" } },
+ { stepOrFunctionName := "LGenBase: StepFunction_trafficSuccess",contextArgs := { stepContextArgs := {} } }
+ },
+ nextStateCalculation := omit,
+ nextState := "idle"
+ }
+ }
+ },
+
+ // timeout event
+ {
+ eventToListen := { bName := "Special behavior for timeout reporting", iName := "TIMEOUT", eventType := fsm },
+ cellRow := {
+ // state == idle
+ { actionList := omit,
+ nextStateCalculation := omit,
+ nextState := omit
+ },
+ // state == wait
+ { actionList := {
+ { stepOrFunctionName := "EPTF HTTP: Timeout handler", contextArgs := { stepContextArgs := {} } },
+ { stepOrFunctionName := "EPTF HTTP: Closes port of user", contextArgs := { stepContextArgs := {} } },
+ { stepOrFunctionName := "LGenBase: StepFunction_trafficFailed", contextArgs := { stepContextArgs := {} } }
+ },
+ nextStateCalculation := omit,
+ nextState := "idle"
+ }
+ }
+ },
+
+ // connection closed event
+ {
+ eventToListen := { bName := "HTTP Behavior", iName := "HTTP Connection Closed ", eventType := fsm },
+ cellRow := {
+ // state == idle
+ { actionList := omit,
+ nextStateCalculation := omit,
+ nextState := omit
+ },
+ // state == wait
+ { actionList := omit,
+ nextStateCalculation := omit,
+ nextState := omit
+ }
+ }
+ },
+
+ // connection opened event
+ {
+ eventToListen := { bName := "HTTP Behavior", iName := "HTTP Connection Opened ", eventType := fsm },
+ cellRow := {
+ // state == idle
+ { actionList := omit,
+ nextStateCalculation := omit,
+ nextState := omit
+ },
+ // state == wait
+ { actionList := omit,
+ nextStateCalculation := omit,
+ nextState := omit
+ }
+ }
+ },
+
+ // stop TC event
+ {
+ eventToListen := { bName := "EPTF_CLL_LGenBase", iName := "LGenBase: Stop_the_traffic_case!", eventType := fsm },
+ cellRow := {
+ // state == idle
+ { actionList := {
+ { stepOrFunctionName := "LGenBase: StepFunction_entityStopped", contextArgs := { stepContextArgs := { } } }
+ },
+ nextStateCalculation := omit,
+ nextState := "idle"
+ },
+ // state == wait
+ { actionList := {
+ { stepOrFunctionName := "LGenBase: StepFunction_entityStopped", contextArgs := { stepContextArgs := { } } }
+ },
+ nextStateCalculation := omit,
+ nextState := "idle"
+ }
+ }
+ }
+ }
+ },
+ { name := "EPTF HTTP: Server",
+ stateList := { "idle"},
+ timerList := {},
+ table := {
+ {
+ eventToListen := { bName := "HTTP Behavior", iName := "HTTP CHAR Request Message Received", eventType := entity },
+ cellRow := {
+ // state == idle
+ { actionList := {
+ { stepOrFunctionName := "LGenBase: StepFunction_recordEntityStart",contextArgs := { stepContextArgs := {} } },
+ { stepOrFunctionName := "EPTF HTTP: Handle Request", contextArgs := { stepContextArgs := {} } },
+ { stepOrFunctionName := "EPTF HTTP: Send Response", contextArgs := { stepContextArgs := {} } },
+ { stepOrFunctionName := "LGenBase: StepFunction_trafficSuccess",contextArgs := { stepContextArgs := {} } }
+ },
+ nextStateCalculation := omit,
+ nextState := "idle"
+ }
+ }
+ }
+ }
+ }
+}
+
+[TESTPORT_PARAMETERS]
+#*.IPL4_PCO.debug := "YES"
+#*.v_IPL4_PCO.debug := "YES"
+
+[MAIN_CONTROLLER]
+#TCPPort := 1025
+#NumHCs := 1
+#KillTimer := 11
diff --git a/demo/EPTF_HTTP_Demo.prj b/demo/EPTF_HTTP_Demo.prj
new file mode 100644
index 0000000..c54b727
--- /dev/null
+++ b/demo/EPTF_HTTP_Demo.prj
@@ -0,0 +1,156 @@
+<!DOCTYPE TITAN_GUI_project_file>
+<Project TITAN_version="1.8.pl7" >
+ <General>
+ <Project_Name>HTTPDemo</Project_Name>
+ <Executable_Path>bin/HTTPDemo</Executable_Path>
+ <Working_Dir>bin</Working_Dir>
+ <Build_Host>alpha</Build_Host>
+ <Execution_Mode>Parallel</Execution_Mode>
+ <Code_Splitting_Mode>None</Code_Splitting_Mode>
+ <ScriptFile_AfterMake>EPTF_HTTP_Demo_Makepatch.sh</ScriptFile_AfterMake>
+ <Log_Format>yes</Log_Format>
+ <Update_Symlinks>yes</Update_Symlinks>
+ <Create_Absolute_Symlinks>no</Create_Absolute_Symlinks>
+ <Update_Makefile>yes</Update_Makefile>
+ <Localhost_Execute>yes</Localhost_Execute>
+ <Execute_Command>rsh %host &quot;cd %project_working_dir ; &quot;%executable&quot; %localhost %mctr_port&quot;</Execute_Command>
+ <Execute_Hosts>alfa, beta, gamma</Execute_Hosts>
+ <UnUsed_List>../../TCCUsefulFunctions_CNL113472/src/TCCAssertion.cc,../../TCCUsefulFunctions_CNL113472/src/TCCAssertion_Functions.ttcn,../../TCCUsefulFunctions_CNL113472/src/TCCEncoding.cc,../../TCCUsefulFunctions_CNL113472/src/TCCEncoding_Functions.ttcn,../../TCCUsefulFunctions_CNL113472/src/TCCIPsec.cc,../../TCCUsefulFunctions_CNL113472/src/TCCIPsec_Definitions.ttcn,../../TCCUsefulFunctions_CNL113472/src/TCCIPsec_Functions.ttcn,../../TCCUsefulFunctions_CNL113472/src/TCCTitanMetadata.cc,../../TCCUsefulFunctions_CNL113472/src/TCCTitanMetadata_Functions.ttcn,../../TCCUsefulFunctions_CNL113472/src/TCCXPathSupport.cc,../../TCCUsefulFunctions_CNL113472/src/TCCXPathSupport_Functions.ttcn,../../EPTF_Core_Library_CNL113512/src/Common/EPTF_CLL_Common_RndDefinitions.ttcn,../../EPTF_Core_Library_CNL113512/src/Common/EPTF_CLL_Common_RndFunctions.ttcn,../../EPTF_Core_Library_CNL113512/src/LGenBase/EPTF_CLL_LGenBaseStatsUI_Definitions.ttcn,../../EPTF_Core_Library_CNL113512/src/LGenBase/EPTF_CLL_LGenBaseStatsUI_Functions.ttcn,../../EPTF_Core_Library_CNL113512/src/UIHandler/EPTF_CLL_UIHandlerCLI_Definitions.ttcn,../../EPTF_Core_Library_CNL113512/src/UIHandler/EPTF_CLL_UIHandlerCLI_Functions.ttcn,../../../TestPorts/IPL4asp_CNL113531/src/IPL4asp_User_CtrlFunct.ttcn,../../../TestPorts/IPL4asp_CNL113531/src/IPL4asp_User_CtrlFunctDef.cc</UnUsed_List>
+ </General>
+ <Configs>
+ <Config>EPTF_HTTP_Demo.cfg</Config>
+ </Configs>
+ <Test_Cases>
+ <Test_Case>EPTF_HTTP_Demo.control</Test_Case>
+ <Test_Case>EPTF_HTTP_Demo.tc_localTransport</Test_Case>
+ <Test_Case>EPTF_HTTP_Demo.tc_remoteTransport</Test_Case>
+ </Test_Cases>
+ <Others>
+ <Other>EPTF_HTTP_Demo.prj</Other>
+ <Other>EPTF_HTTP_Demo_Makepatch.sh</Other>
+ </Others>
+ <File_Group name="MainFileGroup" >
+ <File_Groups>
+ <File_Group name="HTTP_Applib" >
+ <File_Groups>
+ <File_Group name="LoadGen" >
+ <File path="../src/LoadGen/EPTF_HTTP_Definitions.ttcn" />
+ <File path="../src/LoadGen/EPTF_HTTP_Functions.ttcn" />
+ </File_Group>
+ <File_Group name="Logger" >
+ <File path="../src/Logger/EPTF_HTTP_Logger_Definitions.ttcn" />
+ <File path="../src/Logger/EPTF_HTTP_Logger_Functions.ttcn" />
+ </File_Group>
+ <File_Group name="Transport" >
+ <File path="../src/Transport/EPTF_HTTP_Transport_Definitions.ttcn" />
+ <File path="../src/Transport/EPTF_HTTP_Transport_Functions.ttcn" />
+ </File_Group>
+ </File_Groups>
+ </File_Group>
+ <File_Group name="Demo" >
+ <File path="EPTF_HTTP_Demo.ttcn" />
+ <File path="EPTF_HTTP_Demo_Responder.ttcn" />
+ </File_Group>
+ <File_Group name="TITANSimR3" >
+ <File_Groups>
+ <File_Group path="../../EPTF_Core_Library_CNL113512/src/Base/EPTF_CLL_Base.grp" />
+ <File_Group path="../../EPTF_Core_Library_CNL113512/src/Common/EPTF_CLL_Common.grp" />
+ <File_Group path="../../EPTF_Core_Library_CNL113512/src/FreeBusyQueue/EPTF_CLL_FreeBusyQueue.grp" />
+ <File_Group path="../../EPTF_Core_Library_CNL113512/src/HashMap/EPTF_CLL_HashMap.grp" />
+ <File_Group path="../../EPTF_Core_Library_CNL113512/src/LGenBase/EPTF_CLL_LGenBase_All.grp" />
+ <File_Group path="../../EPTF_Core_Library_CNL113512/src/Logging/EPTF_CLL_Logging.grp" />
+ <File_Group path="../../EPTF_Core_Library_CNL113512/src/Logging/EPTF_CLL_LoggingUI.grp" />
+ <File_Group path="../../EPTF_Core_Library_CNL113512/src/RedBlackTree/EPTF_CLL_RBtree.grp" />
+ <File_Group path="../../EPTF_Core_Library_CNL113512/src/Scheduler/EPTF_CLL_Scheduler.grp" />
+ <File_Group path="../../EPTF_Core_Library_CNL113512/src/Semaphore/EPTF_CLL_Semaphore.grp" />
+ <File_Group path="../../EPTF_Core_Library_CNL113512/src/StatHandler/EPTF_CLL_StatHandler.grp" />
+ <File_Group path="../../EPTF_Core_Library_CNL113512/src/StatHandler/EPTF_CLL_StatHandlerUI.grp" />
+ <File_Group path="../../EPTF_Core_Library_CNL113512/src/Transport/EPTF_CLL_TransportCommPortIPL4.grp" />
+ <File_Group path="../../EPTF_Core_Library_CNL113512/src/Transport/EPTF_CLL_TransportMessageBufferManager.grp" />
+ <File_Group path="../../EPTF_Core_Library_CNL113512/src/Transport/EPTF_CLL_TransportRouting.grp" />
+ <File_Group path="../../EPTF_Core_Library_CNL113512/src/UIHandler/EPTF_CLL_UIHandler.grp" />
+ <File_Group path="../../EPTF_Core_Library_CNL113512/src/Variable/EPTF_CLL_Variable.grp" />
+ <File_Group path="../../EPTF_Core_Library_CNL113512/src/StatMeasure/EPTF_CLL_StatMeasure.grp" />
+ <File_Group path="../../EPTF_Core_Library_CNL113512/src/RandomNArray/EPTF_CLL_RNA.grp" />
+ </File_Groups>
+ </File_Group>
+ <File_Group name="TCCCommon" >
+ <File path="../../TCCUsefulFunctions_CNL113472/src/TCCFileIO.cc" />
+ <File path="../../TCCUsefulFunctions_CNL113472/src/TCCFileIO_Functions.ttcn" />
+ <File path="../../TCCUsefulFunctions_CNL113472/src/TCCInterface.cc" />
+ <File path="../../TCCUsefulFunctions_CNL113472/src/TCCInterface_Functions.ttcn" />
+ <File path="../../TCCUsefulFunctions_CNL113472/src/TCCInterface_ip.h" />
+ <File path="../../TCCUsefulFunctions_CNL113472/src/TCCSecurity.cc" />
+ <File path="../../TCCUsefulFunctions_CNL113472/src/TCCSecurity_Functions.ttcn" />
+ <File path="../../TCCUsefulFunctions_CNL113472/src/aka_algorythm_set.c" />
+ <File path="../../TCCUsefulFunctions_CNL113472/src/aka_algorythm_set.h" />
+ <File path="../../TCCUsefulFunctions_CNL113472/src/digcalc.c" />
+ <File path="../../TCCUsefulFunctions_CNL113472/src/digcalc.h" />
+ <File path="../../TCCUsefulFunctions_CNL113472/src/TCCAssertion.cc" />
+ <File path="../../TCCUsefulFunctions_CNL113472/src/TCCAssertion_Functions.ttcn" />
+ <File path="../../TCCUsefulFunctions_CNL113472/src/TCCConversion.cc" />
+ <File path="../../TCCUsefulFunctions_CNL113472/src/TCCConversion_Functions.ttcn" />
+ <File path="../../TCCUsefulFunctions_CNL113472/src/TCCDateTime.cc" />
+ <File path="../../TCCUsefulFunctions_CNL113472/src/TCCDateTime_Functions.ttcn" />
+ <File path="../../TCCUsefulFunctions_CNL113472/src/TCCEncoding.cc" />
+ <File path="../../TCCUsefulFunctions_CNL113472/src/TCCEncoding_Functions.ttcn" />
+ <File path="../../TCCUsefulFunctions_CNL113472/src/TCCEnv.cc" />
+ <File path="../../TCCUsefulFunctions_CNL113472/src/TCCEnv_Functions.ttcn" />
+ <File path="../../TCCUsefulFunctions_CNL113472/src/TCCIPsec.cc" />
+ <File path="../../TCCUsefulFunctions_CNL113472/src/TCCIPsec_Definitions.ttcn" />
+ <File path="../../TCCUsefulFunctions_CNL113472/src/TCCIPsec_Functions.ttcn" />
+ <File path="../../TCCUsefulFunctions_CNL113472/src/TCCMaths.cc" />
+ <File path="../../TCCUsefulFunctions_CNL113472/src/TCCMaths_Functions.ttcn" />
+ <File path="../../TCCUsefulFunctions_CNL113472/src/TCCMaths_GenericTypes.ttcn" />
+ <File path="../../TCCUsefulFunctions_CNL113472/src/TCCTemplate_Functions.ttcn" />
+ <File path="../../TCCUsefulFunctions_CNL113472/src/TCCTitanMetadata.cc" />
+ <File path="../../TCCUsefulFunctions_CNL113472/src/TCCTitanMetadata_Functions.ttcn" />
+ <File path="../../TCCUsefulFunctions_CNL113472/src/TCCXPathSupport.cc" />
+ <File path="../../TCCUsefulFunctions_CNL113472/src/TCCXPathSupport_Functions.ttcn" />
+ <File path="../../TCCUsefulFunctions_CNL113472/src/TCCMessageHandling.cc" />
+ <File path="../../TCCUsefulFunctions_CNL113472/src/TCCMessageHandling_Functions.ttcn" />
+ </File_Group>
+ <File_Group name="TestPorts" >
+ <File_Groups>
+ <File_Group path="../../../TestPorts/IPL4asp_CNL113531/src/IPL4.grp" />
+ <File_Group name="IPL4 User Ctrl Functions" >
+ <File path="../../../TestPorts/IPL4asp_CNL113531/src/IPL4asp_User_CtrlFunct.ttcn" />
+ <File path="../../../TestPorts/IPL4asp_CNL113531/src/IPL4asp_User_CtrlFunctDef.cc" />
+ </File_Group>
+ <File_Group name="HTTP_TP" >
+ <File path="../../../TestPorts/HTTPmsg_CNL113312/src/HTTPmsg_PT.cc" />
+ <File path="../../../TestPorts/HTTPmsg_CNL113312/src/HTTPmsg_PT.hh" />
+ <File path="../../../TestPorts/HTTPmsg_CNL113312/src/HTTPmsg_PortType.ttcn" />
+ <File path="../../../TestPorts/HTTPmsg_CNL113312/src/HTTPmsg_Types.ttcn" />
+ </File_Group>
+ <File_Group name="XTDP" >
+ <File path="../../../TestPorts/XTDPasp_CNL113494/src/XTDP-EXER-EncDec.cc" />
+ <File path="../../../TestPorts/XTDPasp_CNL113494/src/XTDP_Images.ttcn" />
+ <File path="../../../TestPorts/XTDPasp_CNL113494/src/XTDP_PDU_Defs.asn" />
+ <File path="../../../TestPorts/XTDPasp_CNL113494/src/XTDPasp_PT.cc" />
+ <File path="../../../TestPorts/XTDPasp_CNL113494/src/XTDPasp_PT.hh" />
+ <File path="../../../TestPorts/XTDPasp_CNL113494/src/XTDPasp_PortType.ttcn" />
+ <File path="../../../TestPorts/XTDPasp_CNL113494/src/XTDPasp_Types.ttcn" />
+ <File path="../../../TestPorts/XTDPasp_CNL113494/src/XUL_XTDL.asn" />
+ <File path="../../../TestPorts/XTDPasp_CNL113494/src/lex.xtdp.c" />
+ </File_Group>
+ <File_Group name="UDP" >
+ <File path="../../../TestPorts/UDPasp_CNL113346/src/UDPasp_PT.cc" />
+ <File path="../../../TestPorts/UDPasp_CNL113346/src/UDPasp_PT.hh" />
+ <File path="../../../TestPorts/UDPasp_CNL113346/src/UDPasp_PortType.ttcn" />
+ <File path="../../../TestPorts/UDPasp_CNL113346/src/UDPasp_Types.ttcn" />
+ </File_Group>
+ <File_Group name="AS" >
+ <File path="../../../TestPorts/Common_Components/Abstract_Socket_CNL113384/src/Abstract_Socket.cc" />
+ <File path="../../../TestPorts/Common_Components/Abstract_Socket_CNL113384/src/Abstract_Socket.hh" />
+ </File_Group>
+ <File_Group name="TELNET_TP" >
+ <File path="../../../TestPorts/TELNETasp_CNL113320/src/TELNETasp_PT.cc" />
+ <File path="../../../TestPorts/TELNETasp_CNL113320/src/TELNETasp_PT.hh" />
+ <File path="../../../TestPorts/TELNETasp_CNL113320/src/TELNETasp_PortType.ttcn" />
+ </File_Group>
+ </File_Groups>
+ </File_Group>
+ </File_Groups>
+ </File_Group>
+</Project>
diff --git a/demo/EPTF_HTTP_Demo.ttcn b/demo/EPTF_HTTP_Demo.ttcn
new file mode 100644
index 0000000..708deb4
--- /dev/null
+++ b/demo/EPTF_HTTP_Demo.ttcn
@@ -0,0 +1,1011 @@
+///////////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2000-2018 Ericsson Telecom AB
+//
+// All rights reserved. This program and the accompanying materials
+// are made available under the terms of the Eclipse Public License v1.0
+// which accompanies this distribution, and is available at
+// http://www.eclipse.org/legal/epl-v10.html
+///////////////////////////////////////////////////////////////////////////////
+//
+// File: EPTF_HTTP_Demo.ttcn
+// Rev: <RnXnn>
+// Prodnr: CNL 113 618
+// Updated: 2009-08-10
+// Contact: http://ttcn.ericsson.se
+///////////////////////////////////////////////////////////////////////////////
+
+///////////////////////////////////////////////////////////////////////////////
+// Module: EPTF_HTTP_Demo
+//
+// Purpose:
+// This module contains the Demo module of the HTTP Application Library.
+//
+// Module Parameters:
+// -
+//
+// Module depends on:
+// <IPL4asp_Types>
+//
+// <IPL4asp_PortType>
+//
+// <HTTPmsg_Types>
+//
+// <EPTF_HTTP_Demo_Responder>
+//
+// <EPTF_HTTP_Transport_Definitions>
+//
+// <EPTF_HTTP_Transport_Functions>
+//
+// <EPTF_HTTP_Logger_Definitions>
+//
+// <EPTF_HTTP_Logger_Functions>
+//
+// <EPTF_HTTP_Functions>
+//
+// <XTDP_PDU_Defs language "ASN.1:2002">
+//
+// <EPTF_CLL_Base_Functions>
+//
+// <EPTF_CLL_HashMapInt2Int_Functions>
+//
+// <EPTF_CLL_UIHandler_WidgetFunctions>
+//
+// <EPTF_CLL_LoggingUI_Functions>
+//
+// <EPTF_CLL_LoggingUI_Definitions>
+//
+// <EPTF_CLL_Variable_Functions>
+//
+// <EPTF_CLL_UIHandlerClient_Functions>
+//
+// <EPTF_CLL_UIHandler_Definitions>
+//
+// <EPTF_CLL_UIHandler_PrivateFunctions>
+//
+// <EPTF_CLL_Common_Definitions>
+//
+// <EPTF_CLL_Logging_Functions>
+//
+// <EPTF_CLL_LGenBase_ConfigFunctions>
+//
+// <EPTF_CLL_LGenBase_ConfigDefinitions>
+//
+// <EPTF_CLL_LGenBase_TrafficFunctions>
+//
+// <EPTF_CLL_LGenBase_EventHandlingFunctions>
+//
+// Current owner:
+// EAKOPER
+//
+// Last Review Date:
+// 2009-08-10
+//
+///////////////////////////////////////////////////////////////////////////////
+module EPTF_HTTP_Demo
+{
+
+//=============================================================================
+// Import part
+//=============================================================================
+import from IPL4asp_Types all;
+import from IPL4asp_PortType all;
+import from HTTPmsg_Types all;
+
+import from EPTF_HTTP_Demo_Responder all;
+import from EPTF_HTTP_Transport_Definitions all;
+import from EPTF_HTTP_Transport_Functions all;
+import from EPTF_HTTP_Logger_Definitions all;
+import from EPTF_HTTP_Logger_Functions all;
+import from EPTF_HTTP_Definitions all;
+import from EPTF_HTTP_Functions all;
+
+import from XTDP_PDU_Defs language "ASN.1:2002" all;
+
+import from EPTF_CLL_Base_Functions all;
+import from EPTF_CLL_HashMapInt2Int_Functions all;
+import from EPTF_CLL_UIHandler_WidgetFunctions all;
+import from EPTF_CLL_LoggingUI_Functions all;
+import from EPTF_CLL_LoggingUI_Definitions all;
+import from EPTF_CLL_LGenBase_Definitions all;
+import from EPTF_CLL_LGenBase_Functions all;
+import from EPTF_CLL_RBTScheduler_Functions all;
+import from EPTF_CLL_Variable_Functions all;
+import from EPTF_CLL_UIHandlerClient_Functions all;
+import from EPTF_CLL_UIHandler_Definitions all;
+import from EPTF_CLL_UIHandler_PrivateFunctions all;
+import from EPTF_CLL_Common_Definitions all;
+import from EPTF_CLL_Logging_Functions all;
+import from EPTF_CLL_LGenBase_ConfigFunctions all;
+import from EPTF_CLL_LGenBase_ConfigDefinitions all;
+import from EPTF_CLL_LGenBase_TrafficFunctions all;
+import from EPTF_CLL_LGenBase_EventHandlingFunctions all;
+
+//=============================================================================
+// Module parameters
+//=============================================================================
+modulepar
+{
+ integer tsp_EPTF_HTTP_userNumber := 1;
+ integer tsp_EPTF_HTTP_portNumber := 1;
+ integer tsp_EPTF_HTTP_serverUserNumber := 1;
+ charstring tsp_EPTF_HTTP_headerTemplatePath := "./";
+ charstring tsp_EPTF_HTTP_headerTemplateName := "";
+ charstring tsp_EPTF_HTTP_bodyTemplatePath := "./";
+ charstring tsp_EPTF_HTTP_bodyTemplateName := "";
+
+ charstring tsp_EPTF_HTTP_Demo_LocalAddress := "159.107.193.33";
+ integer tsp_EPTF_HTTP_Demo_LocalPort := 3000;
+ charstring tsp_EPTF_HTTP_Demo_RemoteAddress := "159.107.193.33";
+ integer tsp_EPTF_HTTP_Demo_RemotePort := 4000;
+
+ EPTF_LGenBase_TcMgmt_CompactFsmTableDeclaratorList tsp_EPTF_HTTP_Demo_FSMs := {};
+
+ float tsp_runningTime := 30.0;
+}
+
+type enumerated HTTP_Demo_controlMessage {READY};
+
+type port HTTP_Demo_control message
+{
+ inout HTTP_Demo_controlMessage;
+} with {extension "internal"}
+
+//=============================================================================
+// Component types
+//=============================================================================
+type component MyLogger_CT
+extends EPTF_HTTP_LocalTransport_CT, EPTF_UIHandler_CT, EPTF_LoggingUI_CT
+{
+ var integer v_MyLogger_loggerEnabled;
+}
+
+type component MyLGen_CT
+ extends EPTF_HTTP_LGen_CT
+{
+ var integer v_myBIdx;
+ port EPTF_HTTP_Demo_CM_PT v_CM_PCO;
+ port HTTP_Demo_control v_ctrl_PCO;
+}
+
+type component My_Local_LGen_CT
+extends MyLGen_CT, EPTF_HTTP_LocalTransport_CT
+{
+}
+
+type component My_Remote_LGen_CT
+extends MyLGen_CT, EPTF_HTTP_RemoteTransport_CT
+{
+}
+
+type component My_Mapper_CT
+ extends EPTF_HTTP_Mapper_CT, My_Local_LGen_CT
+{
+}
+
+//=============================================================================
+// Functions
+//=============================================================================
+
+function f_HTTP_CreateResponder(
+ in integer pl_tcIndex)
+runs on My_Local_LGen_CT
+{
+ var EPTF_HTTP_Demo_Responder_CT v_HTTP_Responder_comp;
+
+ v_HTTP_Responder_comp := EPTF_HTTP_Demo_Responder_CT.create("HTTP_Responder");
+ connect(self:v_CM_PCO, v_HTTP_Responder_comp:v_CM_PCO);
+ v_HTTP_Responder_comp.start(f_EPTF_HTTP_Demo_Responder_behavior(
+ pl_tcIndex, tsp_runningTime + 2.0));
+
+ timer tl_guard;
+ tl_guard.start(5.0);
+ alt {
+ [] v_CM_PCO.receive {tl_guard.stop}
+ [] tl_guard.timeout {f_EPTF_Base_stopAll()}
+ }
+}
+
+function f_HTTP_LocalLGenBehaviorClient() runs on My_Local_LGen_CT
+{
+ var integer dummy, nof_entity := tsp_EPTF_HTTP_userNumber;
+
+ f_EPTF_HTTP_init("HTTP", 0, "Demo Entity#");
+
+ dummy := f_EPTF_HTTP_LocalTransport_init_CT("HTTP",
+ refers(f_EPTF_HTTP_messageReceived),
+ refers(f_EPTF_HTTP_eventReceived));
+
+ f_EPTF_HTTP_setSendRequestFunction(refers(f_EPTF_HTTP_LocalTransport_sendMessage));
+ f_EPTF_HTTP_setConnectionCloseFunction(refers(f_EPTF_HTTP_LocalTransport_connectionClose));
+ f_EPTF_HTTP_setConnectionOpenFunction(refers(f_EPTF_HTTP_LocalTransport_connectionOpen));
+ f_EPTF_HTTP_setConnectionHalfCloseFunction(refers(f_EPTF_HTTP_LocalTransport_connectionHalfClose));
+ f_EPTF_HTTP_setClosePortOfUserFunction(refers(f_EPTF_HTTP_LocalTransport_closePortOfUser));
+ f_EPTF_HTTP_setFreePortOfUserFunction(refers(f_EPTF_HTTP_LocalTransport_freePortOfUser));
+
+ var EPTF_IntegerList vl_EPTF_HTTP_fsmIdx_basicCall := f_EPTF_LGenBase_TcMgmt_declareCompactFsmTables(
+ tsp_EPTF_HTTP_Demo_FSMs); //f_EPTF_HTTP_return_CompactFsm_basicCall());
+
+ dummy := f_EPTF_LGenBase_declareEntityType("HTTPEntityType", { c_EPTF_HTTP_myBName });
+
+ dummy := f_EPTF_LGenBase_createEntityGroup(
+ { name := "HTTPEntityGroup", eType := "HTTPEntityType", eCount := nof_entity});
+
+ //adding the behaviour
+ var integer groupIdx:=f_EPTF_LGenBase_entityGrpNameIndex("HTTPEntityGroup");
+ var integer groupBaseOffsetIdx:= f_EPTF_LGenBase_getEGrpBaseOffset(groupIdx);
+ log ("groupIdx: ",groupIdx," groupBaseOffsetIdx: ",groupBaseOffsetIdx);
+
+ var integer vl_connHandle := f_EPTF_HTTP_LocalTransport_newPortGroup({
+ name := "MyPortGroup",
+ localHostInformation := { tsp_EPTF_HTTP_Demo_LocalAddress, tsp_EPTF_HTTP_Demo_LocalPort},
+ remoteHostInformation := { tsp_EPTF_HTTP_Demo_RemoteAddress, tsp_EPTF_HTTP_Demo_RemotePort},
+ numberOfPorts := tsp_EPTF_HTTP_portNumber,
+ localportStep := 1,
+ remoteportStep := 0,
+ instantConnOpen := false,
+ instantConnClose := false,
+ useSSL := false,
+ userFunctions := omit});
+
+
+ if (vl_connHandle < 0) { f_EPTF_Base_stopAll(); }
+
+ log("Port database: ", v_EPTF_HTTP_Transport_portDB);
+ log("Function database: ", v_EPTF_HTTP_Transport_functionDB);
+
+ var charstring vl_body;
+ for (var integer i:= groupBaseOffsetIdx; i<groupBaseOffsetIdx+nof_entity; i:=i+1)
+ {
+ vl_body := "<HTML>Request." & int2str(i) & "</HTML>"
+
+ f_EPTF_HTTP_setEntityContext (i,
+ "POST", "/HTTP-ap-service/resource-lists/users/friends.xml" & "_" & int2str(i),
+ 1, 1,
+ f_EPTF_HTTP_createContextLengthHeaderLine(vl_body),
+ vl_connHandle, -,
+ { charVal := vl_body });
+ }
+
+ f_declareScenario("HTTPScenario");
+
+ f_EPTF_LGenBase_createScenario2EntityGroup(
+ { eGrpName := "HTTPEntityGroup", scenarioName :="HTTPScenario" });
+
+ timer t_wait := tsp_runningTime;
+ t_wait.start;
+
+ alt {
+ [] t_wait.timeout {}
+ }
+
+ f_EPTF_HTTP_printStats();
+ log("v_EPTF_HTTP_contexts:", v_EPTF_HTTP_contexts);
+
+ f_EPTF_LGenBase_stopTrafficCase("HTTPEntityGroup", "HTTPScenario", "EPTF_HTTP_DemoTrafficCase");
+
+ f_EPTF_Base_cleanup_CT();
+}
+
+const charstring c_EPTF_HTTP_fsmName_server := "EPTF HTTP: Server";
+
+function f_HTTP_LocalLGenBehaviorServer() runs on My_Local_LGen_CT
+{
+ var integer dummy, nof_entity := tsp_EPTF_HTTP_serverUserNumber;
+
+ f_EPTF_HTTP_init("HTTP", 0, "Demo Entity#");
+
+ dummy := f_EPTF_HTTP_LocalTransport_init_CT("HTTP",
+ refers(f_EPTF_HTTP_messageReceivedServer)/*,
+ refers(f_EPTF_HTTP_eventReceivedServer),
+ refers(f_EPTF_HTTP_socketErrorReceivedServer)*/);
+
+ f_EPTF_HTTP_setSendResponseFunction(refers(f_EPTF_HTTP_LocalTransport_sendResponse));
+ f_EPTF_HTTP_setListenFunction(refers(f_EPTF_HTTP_LocalTransport_listen));
+ f_EPTF_HTTP_setClosePortFunction(refers(f_EPTF_HTTP_LocalTransport_closePort));
+
+ f_EPTF_HTTP_setSearchContextFunction(refers(f_HTTP_searchServerContext));
+
+ var EPTF_IntegerList vl_EPTF_HTTP_fsmIds:= f_EPTF_LGenBase_TcMgmt_declareCompactFsmTables(
+ tsp_EPTF_HTTP_Demo_FSMs);
+
+ dummy := f_EPTF_LGenBase_declareEntityType("HTTPEntityType", { c_EPTF_HTTP_myBName });
+
+ dummy := f_EPTF_LGenBase_createEntityGroup(
+ { name := "HTTPEntityGroup", eType := "HTTPEntityType", eCount := nof_entity});
+
+ //adding the behaviour
+ var integer groupIdx:=f_EPTF_LGenBase_entityGrpNameIndex("HTTPEntityGroup");
+ var integer groupBaseOffsetIdx:= f_EPTF_LGenBase_getEGrpBaseOffset(groupIdx);
+ log ("groupIdx: ",groupIdx," groupBaseOffsetIdx: ",groupBaseOffsetIdx);
+
+ var EPTF_HTTP_Transport_ServerPortMode vl_portMode := c_EPTF_HTTP_initServerPortMode;
+
+ vl_portMode.name := "ServerPort";
+ vl_portMode.localHostInformation := { tsp_EPTF_HTTP_Demo_RemoteAddress, tsp_EPTF_HTTP_Demo_RemotePort};
+ vl_portMode.instantConnClose := false;
+ vl_portMode.userFunctions := omit;
+ vl_portMode.buffer := true;
+
+ var integer vl_connHandle := f_EPTF_HTTP_LocalTransport_newServerPort(vl_portMode);
+
+ if (vl_connHandle < 0) { f_EPTF_Base_stopAll(); }
+
+ var integer vl_listenPortId := f_EPTF_HTTP_listen(vl_connHandle);
+
+ if (-1 == vl_listenPortId){ f_EPTF_Base_stopAll(); }
+
+ log("Port database: ", v_EPTF_HTTP_Transport_portDB);
+ log("Function database: ", v_EPTF_HTTP_Transport_functionDB);
+
+ var charstring vl_body;
+ for (var integer i:= groupBaseOffsetIdx; i<groupBaseOffsetIdx+nof_entity; i:=i+1)
+ {
+ vl_body := "<HTML>Response " & int2str(i) & "." & "</HTML>"
+
+ f_EPTF_HTTP_setEntityContextServer(
+ i,
+ 200,
+ "OK",
+ 1,
+ 1,
+ f_EPTF_HTTP_createContextLengthHeaderLine(vl_body),
+ { charVal := vl_body });
+ }
+
+ f_HTTP_declareServerScenario("HTTPEntityType", "HTTPEntityGroup", "HTTPScenario", "HTTPTrafficCase");
+
+ v_ctrl_PCO.send(READY);
+
+ timer t_wait := tsp_runningTime + 1.0;
+ t_wait.start;
+
+ alt {
+ [] t_wait.timeout {}
+ }
+
+ f_EPTF_HTTP_printStats();
+ log("v_EPTF_HTTP_contexts:", v_EPTF_HTTP_contexts);
+
+ f_EPTF_LGenBase_stopTrafficCase("HTTPEntityGroup","HTTPScenario","HTTPTrafficCase");
+
+ f_EPTF_HTTP_closePort(vl_connHandle, vl_listenPortId);
+
+ f_EPTF_Base_cleanup_CT();
+}
+
+function f_HTTP_RemoteLGenBehaviorClient(
+ in integer pl_LGenNumber)
+runs on My_Remote_LGen_CT
+{
+ var integer dummy, nof_entity := tsp_EPTF_HTTP_userNumber;
+
+ f_EPTF_HTTP_init("HTTP", pl_LGenNumber, "Demo Entity#");
+
+ var EPTF_IntegerList vl_EPTF_HTTP_fsmIdx_basicCall := f_EPTF_LGenBase_TcMgmt_declareCompactFsmTables(
+ tsp_EPTF_HTTP_Demo_FSMs); //f_EPTF_HTTP_return_CompactFsm_basicCall());
+
+ dummy := f_EPTF_LGenBase_declareEntityType("HTTPEntityType", { c_EPTF_HTTP_myBName });
+
+ dummy := f_EPTF_LGenBase_createEntityGroup(
+ { name := "HTTPEntityGroup", eType := "HTTPEntityType", eCount := nof_entity });
+
+ //adding the behaviour
+ var integer groupIdx:=f_EPTF_LGenBase_entityGrpNameIndex("HTTPEntityGroup");
+ var integer groupBaseOffsetIdx:= f_EPTF_LGenBase_getEGrpBaseOffset(groupIdx);
+ log ("groupIdx: ",groupIdx," groupBaseOffsetIdx: ",groupBaseOffsetIdx);
+
+ dummy := f_EPTF_HTTP_RemoteTransport_init_CT("HTTP",
+ refers(f_EPTF_HTTP_messageReceived),
+ refers(f_EPTF_HTTP_eventReceived),
+ refers(f_EPTF_HTTP_socketErrorReceived));
+
+ f_EPTF_HTTP_setSendRequestFunction(refers(f_EPTF_HTTP_RemoteTransport_sendMessage));
+ f_EPTF_HTTP_setConnectionCloseFunction(refers(f_EPTF_HTTP_RemoteTransport_connectionClose));
+ f_EPTF_HTTP_setConnectionOpenFunction(refers(f_EPTF_HTTP_RemoteTransport_connectionOpen));
+ f_EPTF_HTTP_setConnectionHalfCloseFunction(refers(f_EPTF_HTTP_RemoteTransport_connectionHalfClose));
+ f_EPTF_HTTP_setClosePortOfUserFunction(refers(f_EPTF_HTTP_RemoteTransport_closePortOfUser));
+ f_EPTF_HTTP_setFreePortOfUserFunction(refers(f_EPTF_HTTP_RemoteTransport_freePortOfUser));
+
+ var integer vl_connHandle := f_EPTF_HTTP_RemoteTransport_newPortGroup({
+ name := "MyPortGroup." & int2str(pl_LGenNumber),
+ localHostInformation := { tsp_EPTF_HTTP_Demo_LocalAddress, tsp_EPTF_HTTP_Demo_LocalPort + pl_LGenNumber * 10 + 10},
+ remoteHostInformation := { tsp_EPTF_HTTP_Demo_RemoteAddress, tsp_EPTF_HTTP_Demo_RemotePort},
+ numberOfPorts := tsp_EPTF_HTTP_portNumber,
+ localportStep := 1,
+ remoteportStep := 0,
+ instantConnOpen := false,
+ instantConnClose := false,
+ useSSL := false,
+ userFunctions := omit});
+
+ if (vl_connHandle < 0) { f_EPTF_Base_stopAll(); }
+
+ var charstring vl_body;
+ for (var integer i:= 0; i < nof_entity; i:=i+1)
+ {
+ vl_body := "<HTML>Request." & int2str(pl_LGenNumber) & "." & int2str(i) & "</HTML>";
+
+ f_EPTF_HTTP_setEntityContext (i,
+ "POST", "/HTTP-ap-service/resource-lists/users/friends.xml" & "_" & int2str(i),
+ 1, 1,
+ f_EPTF_HTTP_createContextLengthHeaderLine(vl_body),
+ vl_connHandle, -,
+ { charVal := vl_body });
+ }
+
+ f_declareScenario("HTTPScenario");
+
+ f_EPTF_LGenBase_createScenario2EntityGroup(
+ { eGrpName := "HTTPEntityGroup", scenarioName := "HTTPScenario" });
+
+ timer t_wait := tsp_runningTime;
+ t_wait.start;
+
+ alt {
+ [] t_wait.timeout {}
+ }
+
+ f_EPTF_HTTP_printStats();
+ log("v_EPTF_HTTP_contexts:", v_EPTF_HTTP_contexts);
+
+ f_EPTF_LGenBase_stopTrafficCase("HTTPEntityGroup","HTTPScenario","EPTF_HTTP_DemoTrafficCase");
+
+ f_EPTF_Base_cleanup_CT();
+}
+
+function f_HTTP_RemoteLGenBehaviorServer(
+ in integer pl_LGenNumber)
+runs on My_Remote_LGen_CT
+{
+ var integer dummy, nof_entity := tsp_EPTF_HTTP_userNumber;
+
+ f_EPTF_HTTP_init("HTTP", pl_LGenNumber, "Demo Entity#");
+
+ var EPTF_IntegerList vl_EPTF_HTTP_fsmIds:= f_EPTF_LGenBase_TcMgmt_declareCompactFsmTables(
+ tsp_EPTF_HTTP_Demo_FSMs);
+
+ dummy := f_EPTF_LGenBase_declareEntityType("HTTPEntityType", { c_EPTF_HTTP_myBName });
+
+ dummy := f_EPTF_LGenBase_createEntityGroup(
+ { name := "HTTPEntityGroup", eType := "HTTPEntityType", eCount := nof_entity });
+
+ //adding the behaviour
+ var integer groupIdx:=f_EPTF_LGenBase_entityGrpNameIndex("HTTPEntityGroup");
+ var integer groupBaseOffsetIdx:= f_EPTF_LGenBase_getEGrpBaseOffset(groupIdx);
+ log ("groupIdx: ",groupIdx," groupBaseOffsetIdx: ",groupBaseOffsetIdx);
+
+ dummy := f_EPTF_HTTP_RemoteTransport_init_CT("HTTP",
+ refers(f_EPTF_HTTP_messageReceivedServer),
+ refers(f_EPTF_HTTP_eventReceivedServer),
+ refers(f_EPTF_HTTP_socketErrorReceivedServer));
+
+ f_EPTF_HTTP_setSendResponseFunction(refers(f_EPTF_HTTP_RemoteTransport_sendResponse));
+ f_EPTF_HTTP_setListenFunction(refers(f_EPTF_HTTP_RemoteTransport_listen));
+ f_EPTF_HTTP_setClosePortFunction(refers(f_EPTF_HTTP_RemoteTransport_closePort));
+
+ f_EPTF_HTTP_setSearchContextFunction(refers(f_HTTP_searchServerContext));
+
+ var EPTF_HTTP_Transport_ServerPortMode vl_portMode := c_EPTF_HTTP_initServerPortMode;
+
+ vl_portMode.name := "ServerPort";
+ vl_portMode.localHostInformation := { tsp_EPTF_HTTP_Demo_RemoteAddress, tsp_EPTF_HTTP_Demo_RemotePort};
+ vl_portMode.instantConnClose := false;
+ vl_portMode.userFunctions := omit;
+ vl_portMode.buffer := true;
+
+ var integer vl_connHandle := f_EPTF_HTTP_RemoteTransport_newServerPort(vl_portMode);
+
+ if (vl_connHandle < 0) { f_EPTF_Base_stopAll(); }
+
+ var integer vl_listenPortId := f_EPTF_HTTP_listen(vl_connHandle);
+
+ if (-1 == vl_listenPortId){ f_EPTF_Base_stopAll(); }
+
+ var charstring vl_body;
+ for (var integer i:= 0; i < nof_entity; i:=i+1)
+ {
+ vl_body := "<HTML>Request." & int2str(pl_LGenNumber) & "." & int2str(i) & "</HTML>";
+
+ f_EPTF_HTTP_setEntityContextServer(
+ i,
+ 200,
+ "OK",
+ 1,
+ 1,
+ f_EPTF_HTTP_createContextLengthHeaderLine(vl_body),
+ { charVal := vl_body });
+ }
+
+ f_HTTP_declareServerScenario("HTTPEntityType", "HTTPEntityGroup", "HTTPScenario", "HTTPTrafficCase");
+
+ v_ctrl_PCO.send(READY);
+
+ timer t_wait := tsp_runningTime + 1.0;
+ t_wait.start;
+
+ alt {
+ [] t_wait.timeout {}
+ }
+
+ f_EPTF_HTTP_printStats();
+ log("v_EPTF_HTTP_contexts:", v_EPTF_HTTP_contexts);
+
+ f_EPTF_LGenBase_stopTrafficCase("HTTPEntityGroup","HTTPScenario","HTTPTrafficCase");
+
+ f_EPTF_HTTP_closePort(vl_connHandle, vl_listenPortId);
+
+ f_EPTF_Base_cleanup_CT();
+}
+
+function f_mapperBehavior () runs on My_Mapper_CT {
+ timer t_wait := tsp_runningTime + 1.0;
+ t_wait.start;
+
+ var integer dummy := f_EPTF_HTTP_Mapper_init_CT();
+
+ alt {
+ [] t_wait.timeout {
+ log("The mapper component is shutting down!");
+ }
+ }
+
+ f_EPTF_Base_stopRemote(mtc);
+}
+
+function f_loggerSend(in octetstring pl_message) runs on MyLogger_CT
+{
+ if (f_EPTF_Var_getBoolValue(v_MyLogger_loggerEnabled)) {
+ HTTP_LoggerClient_PCO.send(pl_message);
+ }
+ else {
+ log("The logging mechanism is not enabled");
+ }
+}
+
+function f_declareScenario(
+ in charstring pl_name)
+runs on EPTF_HTTP_LGen_CT
+{
+ var integer dummy, vl_tcconn := f_EPTF_LGenBase_declareTcType2({
+ name := "EPTF_HTTP_DemoTrafficCase",
+ fsmName := c_EPTF_HTTP_fsmName_basicCall,
+ entityType := "HTTPEntityType",
+ customEntitySucc := ""
+ });
+
+ dummy := f_EPTF_LGenBase_declareScenarioType2({
+ name := pl_name,
+ tcList := {
+ {
+ tcName := "EPTF_HTTP_DemoTrafficCase",
+ startDelay := 0.0,
+ cpsToReach := 1.0,
+ enableEntities := true,
+ enable := true,
+ ranges := {},
+ params :=
+ {
+ /*
+ {"HTTP",c_EPTF_HTTP_externalHeaderTemplatePath,tsp_EPTF_HTTP_headerTemplatePath},
+ {"HTTP",c_EPTF_HTTP_externalHeaderTemplateName,tsp_EPTF_HTTP_headerTemplateName},
+ {"HTTP",c_EPTF_HTTP_externalBodyTemplatePath,tsp_EPTF_HTTP_bodyTemplatePath},
+ {"HTTP",c_EPTF_HTTP_externalBodyTemplateName,tsp_EPTF_HTTP_bodyTemplateName}
+ */
+ },
+ groupFinishConditions :=
+ {
+ nrOfExecStart := omit,
+ nrOfSuccesses := omit,
+ nrOfFails := omit,
+ nrOfGrpLoop := omit,
+ nrOfRangeLoop := omit,
+ execTime := omit,
+ entitiesFinished := omit,
+ customFinishCondition := omit
+ },
+ entityFinishConditions := {
+ nrOfExecStart := omit,
+ nrOfSuccesses := omit,
+ nrOfFails := omit,
+ customFinishCondition := omit
+ },
+ entityFinishActions := {
+ },
+ tcFinishActions := omit
+ }
+ }
+ });
+}
+
+function f_HTTP_declareServerScenario(
+ in charstring pl_entityType,
+ in charstring pl_entityGroup,
+ in charstring pl_scenario,
+ in charstring pl_tc)
+runs on EPTF_HTTP_LGen_CT
+{
+ var integer dummy := -1;
+
+ dummy := f_EPTF_LGenBase_declareTcType2({
+ name := pl_tc,
+ fsmName := c_EPTF_HTTP_fsmName_server,
+ entityType := pl_entityType,
+ customEntitySucc := ""
+ });
+
+ dummy := f_EPTF_LGenBase_declareScenarioType3({
+ name := pl_scenario,
+ tcList := {
+ {
+ tcName := pl_tc,
+ tcParamsList := {
+ { startDelay := 0.0},
+ {target := {cpsToReach := 0.0}},
+ {scheduler := { preDefinedName := orig }},
+ {enableEntitiesAtStart := true},
+ {enabledAtStart := true}
+ }
+ }
+ },
+ scParamsList := {
+ {enabled :=true}
+ }
+ });
+
+ f_EPTF_LGenBase_createScenario2EntityGroup(
+ { eGrpName := pl_entityGroup, scenarioName :=pl_scenario });
+
+}
+
+function f_HTTP_searchServerContext(
+ inout integer pl_eIdx,
+ inout integer pl_fsmCtx)
+runs on MyLGen_CT
+{
+ pl_eIdx := 0;
+}
+
+function f_EPTF_HTTP_printStats()
+runs on MyLGen_CT
+{
+ action("Statistics:",
+ " outgoing POST number: ", f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.outgoing.method.post_k),
+ ", incoming 200OK number: ", f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.incoming.status.code200_k),
+ ", incoming POST number: ", f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.incoming.method.post_k),
+ ", outgoing 200OK number: ", f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.outgoing.status.code200_k),
+ " outgoing request number: ", f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.outgoing.requests_k),
+ ", incoming response number: ", f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.incoming.responses_k),
+ ", incoming request number: ", f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.incoming.requests_k),
+ ", outgoing response number: ", f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.outgoing.responses_k));
+
+}
+
+/*
+function f_EPTF_HTTP_return_CompactFsm_basicCall()
+runs on EPTF_HTTP_LGen_CT
+return EPTF_LGenBase_TcMgmt_CompactFsmTableDeclaratorList
+{
+ return {
+ { name := c_EPTF_HTTP_fsmName_basicCall,
+ stateList := { "idle", "wait" },
+ timerList := { { name := "TIMEOUT", startValue := 1.0 } },
+ table := {
+ // TC tarted event
+ {
+ eventToListen := { c_EPTF_LGenBase_behavior, c_EPTF_LGenBase_inputName_testMgmt_trafficCaseStarted, fsm },
+ cellRow := {
+ // state == idle
+ { omit, omit, omit },
+ // state == wait
+ { omit, omit, omit }
+ }
+ },
+
+ // start TC event
+ {
+ eventToListen := { c_EPTF_LGenBase_behavior, c_EPTF_LGenBase_inputName_testMgmt_startTC, fsm },
+ cellRow := {
+ // state == idle
+ { {
+ { c_EPTF_HTTP_stepName_sendRequest, { stepContextArgs := {} } }//,
+ }, omit, "wait" },
+ // state == wait
+ { omit, omit, omit }
+ }
+ },
+
+ // answer OK event
+ {
+ eventToListen := { c_EPTF_HTTP_myBName, c_EPTF_HTTP_inputName_messageReceived, fsm },
+ cellRow := {
+ // state == idle
+ { omit, omit, omit },
+ // state == wait
+ { {
+ { c_EPTF_HTTP_stepName_messageReceived, { stepContextArgs := {} } },
+ { c_EPTF_LGenBase_StepFunction_trafficSuccess, { stepContextArgs := {} } }
+ }, omit, "idle" }
+ }
+ },
+
+ // timeout event
+ {
+ eventToListen := { c_EPTF_LGenBase_specialBName_timerTimeout, "TIMEOUT", fsm },
+ cellRow := {
+ // state == idle
+ { omit, omit, omit },
+ // state == wait
+ { {
+ { c_EPTF_HTTP_stepName_handleTimeout, { stepContextArgs := {} } },
+ { c_EPTF_LGenBase_StepFunction_trafficFailed, { stepContextArgs := {} } }
+ }, omit, "idle" }
+ }
+ },
+
+ // connection closed event
+ {
+ eventToListen := { c_EPTF_HTTP_myBName, c_EPTF_HTTP_inputName_connectionClosed, fsm },
+ cellRow := {
+ // state == idle
+ { omit, omit, omit },
+ // state == wait
+ { omit, omit, omit }
+ }
+ },
+
+ // connection opened event
+ {
+ eventToListen := { c_EPTF_HTTP_myBName, c_EPTF_HTTP_inputName_connectionOpened, fsm },
+ cellRow := {
+ // state == idle
+ { omit, omit, omit },
+ // state == wait
+ { omit, omit, omit }
+ }
+ },
+
+ // stop TC event
+ {
+ eventToListen := { c_EPTF_LGenBase_behavior, c_EPTF_LGenBase_inputName_testMgmt_stopTC, fsm },
+ cellRow := {
+ // state == idle
+ { {
+ { c_EPTF_LGenBase_StepFunction_entityStopped, { stepContextArgs := { } } }
+ }, omit, "idle" },
+ // state == wait
+ { {
+ { c_EPTF_LGenBase_StepFunction_entityStopped, { stepContextArgs := { } } }
+ }, omit, "idle" }
+ }
+ }
+ }
+ }
+ }
+}
+*/
+
+function f_demo_HTTP_sampleContentMaker(in EPTF_CharstringList pl_params)
+return charstring
+{
+ return "Has "&int2str(sizeof(pl_params))&" elements";
+}
+
+function f_HTTP_wait4ready(in integer pl_nofReady, in float pl_watchdog)
+runs on My_Local_LGen_CT
+return boolean
+{
+ timer Tw := pl_watchdog;
+ var integer vl_nofInitReady := 0;
+
+ Tw.start;
+ alt{
+ []v_ctrl_PCO.receive(HTTP_Demo_controlMessage:READY);
+ {
+ vl_nofInitReady := vl_nofInitReady + 1;
+ if (vl_nofInitReady == pl_nofReady)
+ {
+ return true;
+ }else{
+ repeat;
+ }
+ }
+ []Tw.timeout{
+ return false;
+ }
+ []v_ctrl_PCO.receive{repeat;}
+ }
+
+ return false;
+}
+
+function f_HTTP_Server()
+runs on My_Local_LGen_CT
+{
+ f_HTTP_LocalLGenBehaviorServer();
+}
+
+function f_HTTP_ServerRemote()
+runs on My_Mapper_CT
+{
+ var My_Remote_LGen_CT vc_remoteLGenFirst;
+ var My_Remote_LGen_CT vc_remoteLGenSecond;
+
+ var integer vl_dummy := f_EPTF_HTTP_Mapper_init_CT(-, -, 1);
+
+ vc_remoteLGenFirst := My_Remote_LGen_CT.create;
+ vc_remoteLGenSecond := My_Remote_LGen_CT.create;
+ //vc_mapperComponent := Mapper_HTTP_Demo_CT.create;
+
+ connect(vc_remoteLGenFirst:v_EPTF_HTTP_RemoteTransport_commPort,
+ self:v_EPTF_HTTP_Mapper_commPort);
+ connect(vc_remoteLGenFirst:v_ctrl_PCO, self:v_ctrl_PCO);
+
+ connect(vc_remoteLGenSecond:v_EPTF_HTTP_RemoteTransport_commPort,
+ self:v_EPTF_HTTP_Mapper_commPort);
+ connect(vc_remoteLGenSecond:v_ctrl_PCO, self:v_ctrl_PCO);
+
+ vc_remoteLGenFirst.start(f_HTTP_RemoteLGenBehaviorServer(1));
+ vc_remoteLGenSecond.start(f_HTTP_RemoteLGenBehaviorServer(2));
+
+ if (not f_HTTP_wait4ready(2, 10.0)){vc_remoteLGenFirst.kill; vc_remoteLGenSecond.kill; return;}
+
+ v_ctrl_PCO.send(READY) to mtc;
+
+ vc_remoteLGenFirst.done;
+ vc_remoteLGenSecond.done;
+
+ f_EPTF_Base_cleanup_CT();
+
+ disconnect(vc_remoteLGenFirst:v_EPTF_HTTP_RemoteTransport_commPort,
+ self:v_EPTF_HTTP_Mapper_commPort);
+ disconnect(vc_remoteLGenSecond:v_EPTF_HTTP_RemoteTransport_commPort,
+ self:v_EPTF_HTTP_Mapper_commPort);
+
+
+ setverdict(pass);
+
+}
+
+function f_HTTP_Client()
+runs on My_Local_LGen_CT
+{
+ f_HTTP_LocalLGenBehaviorClient();
+}
+
+function f_HTTP_ClientRemote()
+runs on My_Mapper_CT
+{
+ var My_Remote_LGen_CT vc_remoteLGenFirst;
+ var My_Remote_LGen_CT vc_remoteLGenSecond;
+
+ var integer vl_dummy := f_EPTF_HTTP_Mapper_init_CT();
+
+ vc_remoteLGenFirst := My_Remote_LGen_CT.create;
+ vc_remoteLGenSecond := My_Remote_LGen_CT.create;
+ //vc_mapperComponent := Mapper_HTTP_Demo_CT.create;
+
+ connect(vc_remoteLGenFirst:v_EPTF_HTTP_RemoteTransport_commPort,
+ self:v_EPTF_HTTP_Mapper_commPort);
+ connect(vc_remoteLGenSecond:v_EPTF_HTTP_RemoteTransport_commPort,
+ self:v_EPTF_HTTP_Mapper_commPort);
+
+ vc_remoteLGenFirst.start(f_HTTP_RemoteLGenBehaviorClient(1));
+ vc_remoteLGenSecond.start(f_HTTP_RemoteLGenBehaviorClient(2));
+
+ vc_remoteLGenFirst.done;
+ vc_remoteLGenSecond.done;
+
+ f_EPTF_Base_cleanup_CT()
+
+ disconnect(vc_remoteLGenFirst:v_EPTF_HTTP_RemoteTransport_commPort,
+ self:v_EPTF_HTTP_Mapper_commPort);
+ disconnect(vc_remoteLGenSecond:v_EPTF_HTTP_RemoteTransport_commPort,
+ self:v_EPTF_HTTP_Mapper_commPort);
+
+
+ setverdict(pass);
+
+}
+//=============================================================================
+// Test cases
+//=============================================================================
+testcase tc_localTransport()
+runs on My_Local_LGen_CT
+{
+ f_EPTF_Base_init_CT("MTC");
+
+ var My_Local_LGen_CT vl_server := My_Local_LGen_CT.create;
+ connect(vl_server:v_ctrl_PCO, self:v_ctrl_PCO);
+ vl_server.start(f_HTTP_Server());
+
+ if (not f_HTTP_wait4ready(1, 10.0)){all component.kill; stop;}
+
+ var My_Local_LGen_CT vl_client := My_Local_LGen_CT.create;
+ vl_client.start(f_HTTP_Client());
+
+ vl_client.done;
+ vl_server.done;
+
+ f_EPTF_Base_cleanup_CT();
+
+ setverdict(pass);
+}
+
+testcase tc_remoteTransport ()
+runs on My_Mapper_CT
+{
+ f_EPTF_Base_init_CT("MTC");
+
+ var My_Mapper_CT vl_server := My_Mapper_CT.create;
+ connect(vl_server:v_ctrl_PCO, self:v_ctrl_PCO);
+ vl_server.start(f_HTTP_ServerRemote());
+
+ v_ctrl_PCO.receive(HTTP_Demo_controlMessage:READY);
+
+ var My_Mapper_CT vl_client := My_Mapper_CT.create;
+ vl_client.start(f_HTTP_ClientRemote());
+
+ vl_client.done;
+ vl_server.done;
+
+ f_EPTF_Base_cleanup_CT();
+
+ setverdict(pass);
+}
+
+/*
+testcase tc_graphicalLogger() runs on MyLogger_CT
+{ timer t_wait := 8.0;
+ var integer i := 0;
+
+
+ var XTDP_XML_Tag pl_xul;
+ var boolean vl_exist;
+
+ f_EPTF_UIHandler_init_CT("LoggingUIHandler");
+
+ f_EPTF_UIHandler_clearGUI();
+ f_EPTF_UIHandler_addWindow();
+ f_EPTF_LoggingUI_createTabBox("EPTF_Main_tabbox",pl_xul);
+ f_EPTF_UIHandler_addElementToGui(pl_xul,"EPTF_Main_Window",vl_exist);
+
+ f_EPTF_LoggingUI_init_CT("LoggingUIHandler",self,"EPTF_Main_tabbox");
+
+ f_EPTF_HTTP_LocalTransport_init_CT(null,self,self,"EPTF_LoggingUI_tabbox");
+
+ log("Init sikeres");
+
+ t_wait.start;
+
+ alt{
+ [] t_wait.timeout {
+ vf_EPTF_HTTP_LoggerClient_sendFunction.apply(char2oct("HEHE"));
+ if (i != 10 ) {
+
+ t_wait.start;
+ i := i + 1;
+ repeat;
+
+ }
+ }
+
+ }
+
+ f_EPTF_LoggingUI_cleanup_CT();
+ f_EPTF_UIHandler_cleanup_CT();
+ f_EPTF_HTTP_LocalTransport_cleanup_CT();
+ setverdict(pass);
+}
+*/
+
+//=============================================================================
+// Control part
+//=============================================================================
+/*control {
+ execute(tc_localTransport());
+ execute(tc_remoteTransport ());
+ //execute(tc_graphicalLogger());
+}*/
+
+}
diff --git a/demo/EPTF_HTTP_Demo_Makepatch.sh b/demo/EPTF_HTTP_Demo_Makepatch.sh
new file mode 100755
index 0000000..efeb561
--- /dev/null
+++ b/demo/EPTF_HTTP_Demo_Makepatch.sh
@@ -0,0 +1,22 @@
+#!/bin/sh
+
+sed -e '
+
+s/CPPFLAGS = -D$(PLATFORM) -I$(TTCN3_DIR)\/include/CPPFLAGS = -D$(PLATFORM) -I$(OPENSSL_DIR)\/include -I$(TTCN3_DIR)\/include -DNO_IPV6/g
+
+s/OPENSSL_DIR = $(TTCN3_DIR)/\OPENSSL_DIR = \/mnt\/TTCN\/Tools\/openssl-0.9.8e/g
+
+#s/CXX = g++/CXX = \/usr\/sfw\/bin\/g++/g
+#s/CPP = cpp/CPP = \/usr\/sfw\/bin\/cpp/g
+
+#s/-L$(OPENSSL_DIR)\/lib -lcrypto $($(PLATFORM)_LIBS)/-L$(OPENSSL_DIR)\/lib -lcrypto $($(PLATFORM)_LIBS)/g
+
+s/SOLARIS_LIBS = -lsocket -lnsl/SOLARIS_LIBS = -lsocket -lnsl -lresolv -lxnet/g
+
+s/SOLARIS8_LIBS = -lsocket -lnsl/SOLARIS8_LIBS = -lsocket -lnsl -lresolv -lxnet/g
+
+s/CXXFLAGS = -Wall/CXXFLAGS = -Wall -g/g
+
+s/LDFLAGS =/LDFLAGS = -g/g
+
+' <$1 >$2
diff --git a/demo/EPTF_HTTP_Demo_Responder.ttcn b/demo/EPTF_HTTP_Demo_Responder.ttcn
new file mode 100644
index 0000000..e21ed6e
--- /dev/null
+++ b/demo/EPTF_HTTP_Demo_Responder.ttcn
@@ -0,0 +1,229 @@
+///////////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2000-2018 Ericsson Telecom AB
+//
+// All rights reserved. This program and the accompanying materials
+// are made available under the terms of the Eclipse Public License v1.0
+// which accompanies this distribution, and is available at
+// http://www.eclipse.org/legal/epl-v10.html
+///////////////////////////////////////////////////////////////////////////////
+//
+// File: EPTF_HTTP_Demo_Responder.ttcn
+// Rev: <RnXnn>
+// Prodnr: CNL 113 618
+// Updated: 2008-01-08
+// Contact: http://ttcn.ericsson.se
+///////////////////////////////////////////////////////////////////////////////
+
+///////////////////////////////////////////////////////////
+// Module: EPTF_HTTP_Demo_Responder
+//
+// Purpose:
+// This module contains the functions to simulate a HTTP
+// responder node for tests
+//
+// Module Parameters:
+// -
+//
+// Module depends on:
+// <HTTPmsg_Types>
+//
+// <IPL4asp_Types>
+//
+// <IPL4asp_PortType>
+//
+// <EPTF_CLL_Common_Definitions>
+//
+// Current Owner:
+// EAKOPER
+//
+// Last Review Date:
+// 2008-01-09
+//
+// Detailed Comments:
+// -
+//
+///////////////////////////////////////////////////////////
+
+module EPTF_HTTP_Demo_Responder {
+
+//=========================================================================
+// Import Part
+//=========================================================================
+import from HTTPmsg_Types all;
+import from IPL4asp_Types all;
+import from IPL4asp_PortType all;
+import from EPTF_CLL_Common_Definitions all;
+
+//=========================================================================
+// Module parameters
+//=========================================================================
+modulepar charstring tsp_EPTF_HTTP_Demo_RemoteAddress := "159.107.193.33";
+modulepar integer tsp_EPTF_HTTP_Demo_RemotePort := 4000;
+
+//=========================================================================
+// Component types
+//=========================================================================
+type component EPTF_HTTP_Demo_Responder_CT {
+ port IPL4asp_PT v_IPL4_PCO;
+ port EPTF_HTTP_Demo_CM_PT v_CM_PCO;
+
+ var EPTF_HTTP_Demo_Responder_HostInformationList v_hostDatabase := {};
+ var EPTF_IntegerList v_connIds := {};
+
+ var ASP_RecvFrom v_ASP_RecvFrom;
+ var ASP_Event v_ASP_Event;
+
+ var HTTPMessage v_HTTP_msg;
+
+ var integer v_intNoWarn;
+}
+
+//=========================================================================
+// Types
+//=========================================================================
+
+type port EPTF_HTTP_Demo_CM_PT message {
+ inout charstring
+} with {extension "internal"}
+
+type record EPTF_HTTP_Demo_Responder_HostInformation {
+ charstring hostIPAddress ,
+ integer hostPort
+}
+
+type record of EPTF_HTTP_Demo_Responder_HostInformation EPTF_HTTP_Demo_Responder_HostInformationList;
+
+//=========================================================================
+// Functions
+//=========================================================================
+function f_EPTF_HTTP_Demo_Responder_init(
+ in EPTF_HTTP_Demo_Responder_HostInformationList pl_hosts)
+runs on EPTF_HTTP_Demo_Responder_CT return boolean
+{
+ var Result vl_result;
+ var integer i;
+
+ map(self:v_IPL4_PCO, system:v_IPL4_PCO);
+
+ v_hostDatabase := pl_hosts;
+
+ for (i := 0; i < sizeof(v_hostDatabase); i := i + 1)
+ {
+ vl_result := f_IPL4_listen(v_IPL4_PCO,
+ v_hostDatabase[i].hostIPAddress, v_hostDatabase[i].hostPort, { tcp := {} });
+
+ if (vl_result.errorCode == omit) {
+ log("Listening successful on: ", v_hostDatabase[i], " (", vl_result.connId, ")");
+ v_connIds[i] := vl_result.connId;
+ v_CM_PCO.send("Hello, I'm ready! :-)")
+ } else {
+ log("Listening failed on: ", v_hostDatabase[i], " (", vl_result, ")");
+ return false;
+ }
+ }
+
+ return true;
+}
+
+function f_EPTF_HTTP_Demo_Responder_uninit()
+runs on EPTF_HTTP_Demo_Responder_CT
+{
+ var Result vl_result;
+ var integer i;
+
+ for (i := 0; i < sizeof(v_connIds); i := i + 1)
+ {
+ vl_result := f_IPL4_close(v_IPL4_PCO, v_connIds[i], { tcp := {} });
+ }
+
+ v_hostDatabase := {};
+ v_connIds := {};
+
+ unmap(self:v_IPL4_PCO, system:v_IPL4_PCO);
+}
+
+function f_EPTF_HTTP_Demo_dummyHTTPResponse(
+ in charstring pl_body)
+return octetstring
+{
+ var HTTPMessage vl_outgoingMessage := {
+ response := {
+ client_id := omit,
+ version_major := 1,
+ version_minor := 1,
+ statuscode := 200,
+ statustext := "OK",
+ header:= {{"Content-Length", int2str(lengthof(pl_body)) }},
+ body:= pl_body
+ }
+ }
+
+ log("HTTP message: ", vl_outgoingMessage);
+
+ return enc_HTTPMessage(vl_outgoingMessage);
+}
+
+function f_EPTF_HTTP_Demo_Responder_behavior(
+ in integer pl_tcId,
+ in float pl_runningTime)
+runs on EPTF_HTTP_Demo_Responder_CT
+{
+ log("<< Starting HTTP responder! >>");
+
+ timer t_guard := pl_runningTime;
+
+ var EPTF_HTTP_Demo_Responder_HostInformationList vl_hList;
+ var ASP_Send vl_send;
+
+ // provide initial data according to TC
+ vl_hList := { { tsp_EPTF_HTTP_Demo_RemoteAddress, tsp_EPTF_HTTP_Demo_RemotePort + pl_tcId } };
+
+ // initialize component
+ if (not f_EPTF_HTTP_Demo_Responder_init(vl_hList)) {
+ log("HTTP responder failed during initialization!");
+
+ f_EPTF_HTTP_Demo_Responder_uninit();
+ setverdict(fail);
+ return
+ }
+
+ t_guard.start;
+ alt {
+ [] v_IPL4_PCO.receive(ASP_RecvFrom:?) -> value v_ASP_RecvFrom {
+ log("ASP receive from: ", v_ASP_RecvFrom);
+
+ v_intNoWarn := dec_HTTPMessage(v_ASP_RecvFrom.msg, v_HTTP_msg, false);
+ log("HTTP payload: ", v_HTTP_msg);
+
+ vl_send := {
+ v_ASP_RecvFrom.connId, {tcp := {}},
+ f_EPTF_HTTP_Demo_dummyHTTPResponse(v_HTTP_msg.request.body)
+ };
+
+ v_IPL4_PCO.send(vl_send);
+
+ repeat;
+ }
+ [] v_IPL4_PCO.receive(ASP_Event:?) -> value v_ASP_Event {
+ log("ASP event: ", v_ASP_Event);
+ log(v_IPL4_PCO);
+ repeat;
+ }
+ [] v_IPL4_PCO.receive {
+ log("Invalid message received!");
+ repeat;
+ }
+ [] t_guard.timeout {
+ log("Timer timed out!");
+ }
+ }
+
+ f_EPTF_HTTP_Demo_Responder_uninit();
+
+ log("<< Stopping HTTP responder! >>");
+
+ setverdict(pass);
+}
+
+} \ No newline at end of file
diff --git a/doc/EPTF AppLib HTTP for TitanSim, Function Specification.doc b/doc/EPTF AppLib HTTP for TitanSim, Function Specification.doc
new file mode 100644
index 0000000..96cbee0
--- /dev/null
+++ b/doc/EPTF AppLib HTTP for TitanSim, Function Specification.doc
Binary files differ
diff --git a/doc/EPTF Applib HTTP for TitanSim, User Guide.doc b/doc/EPTF Applib HTTP for TitanSim, User Guide.doc
new file mode 100644
index 0000000..6dac220
--- /dev/null
+++ b/doc/EPTF Applib HTTP for TitanSim, User Guide.doc
Binary files differ
diff --git a/doc/EPTF_Applib_HTTP_CNL113618_PRI.doc b/doc/EPTF_Applib_HTTP_CNL113618_PRI.doc
new file mode 100644
index 0000000..56312fb
--- /dev/null
+++ b/doc/EPTF_Applib_HTTP_CNL113618_PRI.doc
Binary files differ
diff --git a/src/EPTF_HTTP_All.grp b/src/EPTF_HTTP_All.grp
new file mode 100644
index 0000000..aa99e65
--- /dev/null
+++ b/src/EPTF_HTTP_All.grp
@@ -0,0 +1,27 @@
+<!--
+///////////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2000-2018 Ericsson Telecom AB
+//
+// All rights reserved. This program and the accompanying materials
+// are made available under the terms of the Eclipse Public License v1.0
+// which accompanies this distribution, and is available at
+// http://www.eclipse.org/legal/epl-v10.html
+///////////////////////////////////////////////////////////////////////////////
+//
+// File: EPTF_HTTP_All.grp
+// Description: FileGroup file for EPTF Applib HTTP
+// Rev: <RnXnn>
+// Prodnr: CNL 113 618
+// Updated: 2009-03-11
+// Contact: http://ttcn.ericsson.se
+//
+
+-->
+<!DOCTYPE TITAN_GUI_FileGroup_file>
+<File_Group name="EPTF_HTTP_All" >
+ <File_Groups>
+ <File_Group path="LoadGen/EPTF_HTTP_LoadGen.grp" />
+ <File_Group path="Transport/EPTF_HTTP_Transport.grp" />
+ </File_Groups>
+</File_Group>
diff --git a/src/LoadGen/EPTF_HTTP_Definitions.ttcn b/src/LoadGen/EPTF_HTTP_Definitions.ttcn
new file mode 100644
index 0000000..a9f0d9f
--- /dev/null
+++ b/src/LoadGen/EPTF_HTTP_Definitions.ttcn
@@ -0,0 +1,3057 @@
+///////////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2000-2018 Ericsson Telecom AB
+//
+// All rights reserved. This program and the accompanying materials
+// are made available under the terms of the Eclipse Public License v1.0
+// which accompanies this distribution, and is available at
+// http://www.eclipse.org/legal/epl-v10.html
+///////////////////////////////////////////////////////////////////////////////
+//
+// File: EPTF_HTTP_Definitions.ttcn
+// Rev: <RnXnn>
+// Prodnr: CNL 113 618
+// Updated: 2014-05-20
+// Contact: http://ttcn.ericsson.se
+///////////////////////////////////////////////////////////////////////////////
+
+///////////////////////////////////////////////////////////////////////////////
+// Module: EPTF_HTTP_Definitions
+//
+// Purpose:
+// This module contains the definitions for EPTF HTTP application library
+//
+//
+// Module Parameters:
+// tsp_EPTF_HTTP_latency - *float* - latency
+// tsp_EPTF_HTTP_logEnabled - *boolean* - logging of messages enabled/disabled
+// tsp_EPTF_HTTP_loggingComponentMask - *charstring* - logging component mask name
+// tsp_EPTF_HTTP_loggingEnable - *boolean* - logging of LGen component enable/disable
+// tsp_EPTF_HTTP_maxNumberOfEntities - *integer* - max number of entities
+//
+// Module depends on:
+// <HTTPmsg_Types>
+//
+// <IPL4asp_Types>
+//
+// <EPTF_CLL_LGenBase_Definitions>
+//
+// <EPTF_CLL_LGenBase_Functions>
+//
+// <EPTF_CLL_Scheduler_Definitions>
+//
+// <EPTF_CLL_RBTScheduler_Definitions>
+//
+// <EPTF_CLL_Variable_Definitions>
+//
+// <EPTF_CLL_Logging_Definitions>
+//
+// <EPTF_CLL_Common_Definitions>
+//
+// Current Owner:
+// EAKOPER
+//
+// Last Review Date:
+// 2009-08-10
+//
+///////////////////////////////////////////////////////////////////////////////
+module EPTF_HTTP_Definitions {
+
+//=============================================================================
+// Import Part
+//=============================================================================
+import from HTTPmsg_Types all;
+import from IPL4asp_Types all;
+import from EPTF_CLL_LGenBase_Definitions all;
+//import from EPTF_CLL_LGenBase_Functions all;
+//import from EPTF_CLL_Scheduler_Definitions all;
+//import from EPTF_CLL_RBTScheduler_Definitions all;
+import from EPTF_CLL_Variable_Definitions all;
+import from EPTF_CLL_Logging_Definitions all;
+import from EPTF_CLL_Common_Definitions all;
+
+//=============================================================================
+// Module parameters
+//=============================================================================
+modulepar float tsp_EPTF_HTTP_latency := 2.0;
+modulepar boolean tsp_EPTF_HTTP_logEnabled := false;
+modulepar charstring tsp_EPTF_HTTP_loggingComponentMask := "EPTF_HTTP_LGen";
+modulepar EPTF_HTTP_EventDispatchLevel tsp_EPTF_HTTP_dispatchLevel := Detailed;
+modulepar boolean tsp_EPTF_HTTP_loggingEnable := false;
+modulepar integer tsp_EPTF_HTTP_maxNumberOfEntities := 1000000;
+modulepar integer tsp_EPTF_HTTP_nofNonceValues := 1;
+
+///////////////////////////////////////////////////////////////////////////////
+// Group: EPTF_HTTP_Applib
+//
+// Purpose:
+// Functions of the EPTF HTTP Application Libray
+//
+///////////////////////////////////////////////////////////////////////////////
+group EPTF_HTTP_Applib
+{
+ //=============================================================================
+ // Component types
+ //=============================================================================
+
+///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_LGen_CT
+ //
+ // Purpose:
+ // HTTP application library component type
+ //
+ // Extensions:
+ // EPTF_LGenBase_CT
+ //
+ // EPTF_Scheduler_CT
+ //
+ // EPTF_Var_CT
+ //
+ // EPTF_Logging_CT
+ //
+ // Variables:
+ // v_EPTF_HTTP_initialized - *boolean* - component initialization state
+ // v_EPTF_HTTP_contexts - <EPTF_HTTP_CtxList> - entity context database
+ //
+ // v_EPTF_HTTP_optionalTempParams - <EPTF_CharstringList> - holds the optional template
+ // parameter values
+ //
+ // v_boolNoWarningLG - *boolean* - dummy variable to supress warnings
+ // v_intNoWarningLG - *integer* - dummy variable to supress warnings
+ //
+ // v_EPTF_HTTP_EntityOffset - *integer* - entity offset for the lgen
+ //
+ // v_EPTF_HTTP_selfName - *charstring* - component's self name
+ // v_EPTF_HTTP_selfId - *integer* - component's self id
+ //
+ // vf_EPTF_HTTP_sendRequest - <EPTF_HTTP_messageProcessSend_FT> - send request
+ // callback function
+ // vf_EPTF_HTTP_connectionOpen - <EPTF_HTTP_connectionOpen_FT> - connection open
+ // callback function
+ // vf_EPTF_HTTP_connectionClose - <EPTF_HTTP_connectionClose_FT> - connection close
+ // callback function
+ // vf_EPTF_HTTP_connectionHalfClose - <EPTF_HTTP_connectionClose_FT> - connection
+ // halfe close callback function
+ //
+ // vf_EPTF_HTTP_closePort - <EPTF_HTTP_PortOperation_FT> - close port
+ // callback function
+ //
+ // vf_EPTF_HTTP_sendResponse - <EPTF_HTTP_sendResponse_FT> - send response
+ // callback function
+ // vf_EPTF_HTTP_listen - <EPTF_HTTP_Listen_FT> - listen callback function
+ //
+ // vf_EPTF_HTTP_searchContext - <EPTF_HTTP_searchContext_FT> - context searching callback function
+ // vf_EPTF_HTTP_searchContext4Event - <EPTF_HTTP_searchContext_FT> - context searching callback function
+ // vf_EPTF_HTTP_searchContext4Error - <EPTF_HTTP_searchContext_FT> - context searching callback function
+ //
+ // v_EPTF_HTTP_entityIdxHashMap - *integer* - entity index hash map handle
+ // v_EPTF_HTTP_myBIdx - *integer* - self behavior index
+ //
+ // v_EPTF_HTTP_maxNumberOfEntities - *integer* - max enabled number of entities
+ // v_EPTF_HTTP_logEnabled - *boolean* - logging enabled state
+ // v_EPTF_HTTP_latency - *float* - latency
+ //
+ // v_EPTF_HTTP_outgoingMessage - *octetstring* - outgoing message
+ // v_EPTF_HTTP_incomingMessage - <HTTPMessage> - incoming message
+ //
+ // v_EPTF_HTTP_lastReceivedGroupId - *integer* - the unique group identifier
+ // of the last received request
+ // v_EPTF_HTTP_lastReceivedPortId - *integer* - the unique port identifier
+ // of the last received request
+ // v_EPTF_HTTP_lastReceivedSeqNum - *integer* - the sequence number of the last received request
+ //
+ // v_EPTF_HTTP_charDB - *integer* - index of charstring database hash map
+ // v_EPTF_HTTP_octDB - *integer* - index of octetstring database hash map
+ //
+ // v_EPTF_HTTP_stats - <EPTF_HTTP_Stats> - statistics database
+ //
+ // v_EPTF_HTTP_headerLinesList - <EPTF_HTTP_HeaderLineList> - headerlines database
+ //
+ // v_EPTF_HTTP_ConnId2EIdx - <EPTF_IntegerList> - connection id to entity database
+ // v_EPTF_HTTP_ConnId2FIdx - <EPTF_IntegerList> - connection id to fsm database
+ //
+ // vf_EPTF_HTTP_dispatchFn - <EPTF_HTTP_dispatchHandler_FT> - dispatch event function pointer
+ //
+ // v_EPTF_HTTP_loggingMaskId - *integer* - logging mask id
+ //
+ // v_EPTF_HTTP_extTemplType_customHeader - *integer*
+ // v_EPTF_HTTP_extTemplType_customHeaderResponse - *integer*
+ // v_EPTF_HTTP_extTemplType_customBody - *integer*
+ //
+ // v_EPTF_HTTP_authData - <EPTF_HTTP_AuthDataServer>
+ //
+ // vf_EPTF_HTTP_messageReceivedHook - <fcb_EPTF_HTTP_messageReceivedHook> - callback placeholder for incoming HTTP message processing
+ //
+ // Timers:
+ // -
+ //
+ // Ports:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+///////////////////////////////////////////////////////////////////////////////
+ type component EPTF_HTTP_LGen_CT extends
+ EPTF_LGenBase_CT, EPTF_Var_CT, EPTF_Logging_CT
+ {
+ var boolean v_EPTF_HTTP_initialized := false;
+ var EPTF_HTTP_CtxList v_EPTF_HTTP_contexts :={};
+
+ var EPTF_CharstringList v_EPTF_HTTP_optionalTempParams := {};
+
+ var integer v_EPTF_HTTP_EntityOffset := 0;
+
+ var boolean v_boolNoWarningLG;
+ var integer v_intNoWarningLG;
+
+ var charstring v_EPTF_HTTP_selfName := "";
+ var integer v_EPTF_HTTP_selfId := -1;
+
+ var EPTF_HTTP_CharstringBodyDatabase v_EPTF_HTTP_charBodyDB := {};
+ var EPTF_HTTP_BinaryBodyDatabase v_EPTF_HTTP_binBodyDB := {};
+
+ var EPTF_HTTP_messageProcessSend_FT vf_EPTF_HTTP_sendRequest := null;
+ var EPTF_HTTP_connectionOpen_FT vf_EPTF_HTTP_connectionOpen := null;
+ var EPTF_HTTP_connectionClose_FT vf_EPTF_HTTP_connectionClose := null;
+ var EPTF_HTTP_connectionClose_FT vf_EPTF_HTTP_connectionHalfClose := null;
+ var EPTF_HTTP_SessionOperation_FT vf_EPTF_HTTP_closePortOfUser := null;
+ var EPTF_HTTP_SessionOperation_FT vf_EPTF_HTTP_freePortOfUser := null;
+
+ var EPTF_HTTP_PortOperation_FT vf_EPTF_HTTP_closePort := null;
+
+ var EPTF_HTTP_sendResponse_FT vf_EPTF_HTTP_sendResponse := null;
+ var EPTF_HTTP_Listen_FT vf_EPTF_HTTP_listen := null;
+
+
+ var EPTF_HTTP_searchContext_FT vf_EPTF_HTTP_searchContext := null;
+ var EPTF_HTTP_searchContext_FT vf_EPTF_HTTP_searchContext4Event := null;
+ var EPTF_HTTP_searchContext_FT vf_EPTF_HTTP_searchContext4Error := null;
+
+ var integer v_EPTF_HTTP_myBIdx;
+
+ //component variables to the module parameters
+ var integer v_EPTF_HTTP_maxNumberOfEntities := tsp_EPTF_HTTP_maxNumberOfEntities;
+ var boolean v_EPTF_HTTP_logEnabled := tsp_EPTF_HTTP_logEnabled;
+ var float v_EPTF_HTTP_latency := tsp_EPTF_HTTP_latency;
+
+ //variables to store incoming and outgoing messages
+ var octetstring v_EPTF_HTTP_outgoingMessage;
+
+ var HTTPMessage v_EPTF_HTTP_incomingMessage;
+
+ var integer v_EPTF_HTTP_lastReceivedGroupId := -1;
+ var integer v_EPTF_HTTP_lastReceivedPortId := -1;
+ var integer v_EPTF_HTTP_lastReceivedSeqNum := -1;
+
+ var EPTF_HTTP_Event v_EPTF_HTTP_event;
+ var EPTF_HTTP_EventError v_EPTF_HTTP_error;
+
+ var EPTF_HTTP_dispatchHandler_FT vf_EPTF_HTTP_dispatchFn := null;
+
+ var integer v_EPTF_HTTP_charDB := -1;
+ var integer v_EPTF_HTTP_octDB := -1;
+
+ var EPTF_HTTP_Stats v_EPTF_HTTP_stats;
+
+ var EPTF_HTTP_HeaderLineList v_EPTF_HTTP_headerLinesList := {};
+
+ //var EPTF_IntegerList v_EPTF_HTTP_ConnId2EIdx := {};
+ var EPTF_IntegerList v_EPTF_HTTP_ConnId2FIdx := {};
+
+ // logging
+ var integer v_EPTF_HTTP_loggingMaskId := c_EPTF_Logging_invalidMaskId;
+
+ // template types
+ var integer v_EPTF_HTTP_extTemplType_customHeader;
+ var integer v_EPTF_HTTP_extTemplType_customHeaderResponse;
+ var integer v_EPTF_HTTP_extTemplType_customBody;
+
+ var EPTF_HTTP_AuthDataServer v_EPTF_HTTP_authData;
+
+ var fcb_EPTF_HTTP_messageReceivedHook vf_EPTF_HTTP_messageReceivedHook := null;
+
+ }
+
+ //=============================================================================
+ // Data types
+ //=============================================================================
+
+///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_StatusCodes
+ //
+ // Purpose:
+ // Container for HTTP status code statistics
+ //
+ // Elements:
+ // codeXXX_k - *integer* - handles for status code statistics for
+ // status code XXX
+ //
+ // Detailed Comments:
+ // -
+ //
+///////////////////////////////////////////////////////////////////////////////
+ type record EPTF_HTTP_StatusCodes {
+ integer code100_k,
+ integer code101_k,
+ integer code200_k,
+ integer code201_k,
+ integer code202_k,
+ integer code203_k,
+ integer code204_k,
+ integer code205_k,
+ integer code206_k,
+ integer code300_k,
+ integer code301_k,
+ integer code302_k,
+ integer code303_k,
+ integer code304_k,
+ integer code305_k,
+ integer code306_k,
+ integer code307_k,
+ integer code400_k,
+ integer code401_k,
+ integer code402_k,
+ integer code403_k,
+ integer code404_k,
+ integer code405_k,
+ integer code406_k,
+ integer code407_k,
+ integer code408_k,
+ integer code409_k,
+ integer code410_k,
+ integer code411_k,
+ integer code412_k,
+ integer code413_k,
+ integer code414_k,
+ integer code415_k,
+ integer code416_k,
+ integer code417_k,
+ integer code500_k,
+ integer code501_k,
+ integer code502_k,
+ integer code503_k,
+ integer code504_k,
+ integer code505_k
+ }
+
+///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_Methods
+ //
+ // Purpose:
+ // Container for HTTP method statistics
+ //
+ // Elements:
+ // options_k - *integer* - handle for options statistics
+ // get_k - *integer* - handle for get statistics
+ // head_k - *integer* - handle for head statistics
+ // post_k - *integer* - handle for post statistics
+ // put_k - *integer* - handle for put statistics
+ // delete_k - *integer* - handle for delete statistics
+ // trace_k - *integer* - handle for trace statistics
+ // connect_k - *integer* - handle for connect statistics
+ //
+ // Detailed Comments:
+ // -
+ //
+///////////////////////////////////////////////////////////////////////////////
+ type record EPTF_HTTP_Methods {
+ integer options_k,
+ integer get_k,
+ integer head_k,
+ integer post_k,
+ integer put_k,
+ integer delete_k,
+ integer trace_k,
+ integer connect_k
+ }
+
+///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_Messages
+ //
+ // Purpose:
+ // Container for HTTP message statistics
+ //
+ // Elements:
+ // method - <EPTF_HTTP_Methods> - handles for method statistics
+ // status - <EPTF_HTTP_StatusCodes> - handles for status code statistics
+ //
+ // Detailed Comments:
+ // -
+ //
+///////////////////////////////////////////////////////////////////////////////
+ type record EPTF_HTTP_Messages {
+ EPTF_HTTP_Methods method,
+ integer requests_k,
+ EPTF_HTTP_StatusCodes status,
+ integer responses_k
+ }
+
+///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_EventDispatchLevel
+ //
+ // Purpose:
+ // Enumerate for HTTP message dispatch level control
+ //
+ // Elements:
+ // OnlyReceived - only message received event will be dispatched
+ // (reception of charstring request, charstring response,
+ // binary request, binary response)
+ // Class - OnlyReceived and status code classes event like 100 class event
+ // if status code is 1xx
+ // Detailed - Class and single status code events
+ //
+ // Detailed Comments:
+ // -
+ //
+///////////////////////////////////////////////////////////////////////////////
+ type enumerated EPTF_HTTP_EventDispatchLevel {
+ OnlyReceived,
+ Class,
+ Detailed
+ }
+
+///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_Stats
+ //
+ // Purpose:
+ // TitanSim variables container for any HTTP statistics
+ //
+ // Elements:
+ // incoming - <EPTF_HTTP_Messages> - incoming message statistics
+ // outgoing - <EPTF_HTTP_Messages> - outgoing message statistics
+ //
+ // Detailed Comments:
+ // -
+ //
+///////////////////////////////////////////////////////////////////////////////
+ type record EPTF_HTTP_Stats {
+ EPTF_HTTP_Messages incoming,
+ EPTF_HTTP_Messages outgoing
+ }
+
+///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_Error
+ //
+ // Purpose:
+ // TitanSim variables container for HTTP error messages
+ //
+ // Detailed Comments:
+ // -
+ //
+///////////////////////////////////////////////////////////////////////////////
+ type Result EPTF_HTTP_Error;
+
+///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_messageProcessSend_FT
+ //
+ // Purpose:
+ // Type for send request callback function
+ //
+ // Detailed Comments:
+ // -
+ //
+///////////////////////////////////////////////////////////////////////////////
+ type function EPTF_HTTP_messageProcessSend_FT(
+ in integer pl_connId,
+ in integer pl_sessionId,
+ in octetstring pl_message)
+ runs on self;
+
+///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_sendResponse_FT
+ //
+ // Purpose:
+ // Type for send response callback function
+ //
+ // Detailed Comments:
+ // -
+ //
+///////////////////////////////////////////////////////////////////////////////
+ type function EPTF_HTTP_sendResponse_FT(
+ in integer pl_groupId,
+ in integer pl_portId,
+ in integer pl_seqNum,
+ in octetstring pl_message)
+ runs on self;
+
+///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_messageProcess_FT
+ //
+ // Purpose:
+ // Type for process message callback function
+ //
+ // Detailed Comments:
+ // -
+ //
+///////////////////////////////////////////////////////////////////////////////
+ type function EPTF_HTTP_messageProcess_FT(
+ in EPTF_HTTP_IncomingMessage pl_message)
+ runs on self;
+
+///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_messageBetweenApplibs_FT
+ //
+ // Purpose:
+ // Type for message from application libraries callback function
+ //
+ // Detailed Comments:
+ // -
+ //
+///////////////////////////////////////////////////////////////////////////////
+ type function EPTF_HTTP_messageBetweenApplibs_FT ()
+ runs on self;
+
+
+///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_bodyContentGetter_FT
+ //
+ // Purpose:
+ // Type for acquire a body content for an HTTP entity
+ //
+ // Detailed Comments:
+ // -
+ //
+///////////////////////////////////////////////////////////////////////////////
+ type function EPTF_HTTP_bodyContentGetter_FT (
+ in EPTF_IntegerList pl_pars,
+ inout EPTF_HTTP_CharOrOct pl_body)
+ runs on self;
+
+///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_headerContentGetter_FT
+ //
+ // Purpose:
+ // Type for acquire the header content for an HTTP entity
+ //
+ // Detailed Comments:
+ // -
+ //
+///////////////////////////////////////////////////////////////////////////////
+ type function EPTF_HTTP_headerContentGetter_FT (
+ in EPTF_IntegerList pl_pars,
+ inout HeaderLines pl_headerLines)
+ runs on self;
+
+///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_rawHeaderContentGetter_FT
+ //
+ // Purpose:
+ // Type for acquire the raw (encoded) header content for an HTTP entity
+ //
+ // Detailed Comments:
+ // -
+ //
+///////////////////////////////////////////////////////////////////////////////
+ type function EPTF_HTTP_rawHeaderContentGetter_FT (
+ in EPTF_IntegerList pl_pars,
+ inout octetstring pl_rawHeader)
+ runs on self;
+
+///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_charstringBodyHandler_FT
+ //
+ // Purpose:
+ // Type for charstring body handler function for an HTTP entity
+ //
+ // Detailed Comments:
+ // -
+ //
+///////////////////////////////////////////////////////////////////////////////
+ type function EPTF_HTTP_charstringBodyHandler_FT (in integer pl_eIdx,in charstring pl_bodyMessage)
+ runs on self;
+
+///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_binaryBodyHandler_FT
+ //
+ // Purpose:
+ // Type for binary body handler function for an HTTP entity
+ //
+ // Detailed Comments:
+ // -
+ //
+///////////////////////////////////////////////////////////////////////////////
+ type function EPTF_HTTP_binaryBodyHandler_FT (in integer pl_eIdx,in octetstring pl_bodyMessage)
+ runs on self;
+
+///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_connectionOpen_FT
+ //
+ // Purpose:
+ // Type for connection open callback function
+ //
+ // Detailed Comments:
+ // -
+ //
+///////////////////////////////////////////////////////////////////////////////
+ type function EPTF_HTTP_connectionOpen_FT (
+ in integer pl_connId,
+ in integer pl_sessionId)
+ runs on self return boolean;
+
+///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_connectionClose_FT
+ //
+ // Purpose:
+ // Type for connection close callback function
+ //
+ // Detailed Comments:
+ // -
+ //
+///////////////////////////////////////////////////////////////////////////////
+ type function EPTF_HTTP_connectionClose_FT (
+ in integer pl_connId)
+ runs on self;
+
+///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_Listen_FT
+ //
+ // Purpose:
+ // Function type to a registerable callback function for
+ // opening a listen port
+ //
+ // Elements:
+ // pl_groupId - *in* *integer* - port group index
+ //
+ // Return value:
+ // boolean - open result
+///////////////////////////////////////////////////////////////////////////////
+ type function EPTF_HTTP_Listen_FT(
+ in integer pl_groupId)
+ runs on self return integer;
+
+///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_searchContext_FT
+ //
+ // Purpose:
+ // Defines a function type for getting the context in case of an incoming
+ // request.
+ //
+ // Elements:
+ // pl_eIdx - *inout* *integer* - entity index (-1 means generic)
+ // pl_fsmCtx - *inout* *integer* - fsm context index
+ //
+///////////////////////////////////////////////////////////////////////////////
+ type function EPTF_HTTP_searchContext_FT(
+ inout integer pl_eIdx,
+ inout integer pl_fsmCtx)
+ runs on self;
+///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_eventReceive_FT
+ //
+ // Purpose:
+ // Type for event receive callback function
+ //
+ // Detailed Comments:
+ // -
+ //
+///////////////////////////////////////////////////////////////////////////////
+ type function EPTF_HTTP_eventReceive_FT (
+ in EPTF_HTTP_Event pl_event)
+ runs on self;
+
+///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_socketErrorReceive_FT
+ //
+ // Purpose:
+ // Type for socket error receive callback function
+ //
+ // Detailed Comments:
+ // -
+ //
+///////////////////////////////////////////////////////////////////////////////
+ type function EPTF_HTTP_socketErrorReceive_FT (
+ in EPTF_HTTP_EventError pl_error)
+ runs on self;
+
+///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_listenSocketEvent_FT
+ //
+ // Purpose:
+ // Type for listening socket event receive callback function
+ //
+ // Detailed Comments:
+ // -
+ //
+///////////////////////////////////////////////////////////////////////////////
+ type function EPTF_HTTP_listenSocketEvent_FT(
+ in EPTF_HTTP_listenSocketEvent pl_event)
+ runs on self;
+
+///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_listenSocketEvent_FT
+ //
+ // Purpose:
+ // Type for listening socket event receive callback function
+ //
+ // Detailed Comments:
+ // -
+ //
+///////////////////////////////////////////////////////////////////////////////
+ type function EPTF_HTTP_listenSocketError_FT(
+ in EPTF_HTTP_listenSocketError pl_error)
+ runs on self;
+
+/////////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_dispatchHandler_FT
+ //
+ // Purpose:
+ // Type for handle dispatch event for current settings
+ //
+ // Detailed Comments:
+ // -
+ //
+///////////////////////////////////////////////////////////////////////////////
+ type function EPTF_HTTP_dispatchHandler_FT(
+ in integer pl_statusCode,
+ in integer pl_eIdx,
+ in integer pl_fsmIdx)
+ runs on self;
+
+/////////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_SessionOperation_FT
+ //
+ // Purpose:
+ // Function type to a registerable callback function to
+ // provide a session operation on a group
+ //
+ // Elements:
+ // pl_groupId - *in* *integer* - group id
+ // pl_sessionId - *in* *integer* - session id
+ //
+///////////////////////////////////////////////////////////////////////////////
+ type function EPTF_HTTP_SessionOperation_FT(
+ in integer pl_groupId,
+ in integer pl_sessionId)
+ runs on self;
+
+/////////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_PortOperation_FT
+ //
+ // Purpose:
+ // Function type to a registerable callback function to
+ // provide an operation on a socket.
+ //
+ // Elements:
+ // pl_groupId - *in* *integer* - group id
+ // pl_portId - *in* *integer* - port id within the group
+ //
+///////////////////////////////////////////////////////////////////////////////
+ type function EPTF_HTTP_PortOperation_FT(
+ in integer pl_groupId,
+ in integer pl_portId
+ )
+ runs on self;
+
+///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_Event
+ //
+ // Purpose:
+ // Contains the event parameters received from the transport layer
+ //
+ // Elements:
+ // groupId - *integer* - port group ID
+ // sessionId - *integer* - unique identifier of the session
+ // eventType - *integer* - the type of the event
+ //
+///////////////////////////////////////////////////////////////////////////////
+ type record EPTF_HTTP_Event{
+ integer groupId,
+ integer sessionId,
+ integer eventType
+ }
+
+///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_EventError
+ //
+ // Purpose:
+ // Contains the error event parameters received from the transport layer
+ //
+ // Elements:
+ // groupId - *integer* - port group ID
+ // sessionId - *integer* - unique identifier of the message
+ // transportError - <EPTF_HTTP_Error> - the error
+ //
+///////////////////////////////////////////////////////////////////////////////
+ type record EPTF_HTTP_EventError{
+ integer groupId,
+ integer sessionId,
+ EPTF_HTTP_Error transportError
+ }
+
+///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_listenSocketEvent
+ //
+ // Purpose:
+ // Contains the listening socket event parameters received from the transport layer
+ //
+ // Elements:
+ // groupId - *integer* - port group ID
+ // hostInfo - <EPTF_HTTP_HostInformation> - listening address and port
+ // eventType - *integer* - event type
+ //
+///////////////////////////////////////////////////////////////////////////////
+ type record EPTF_HTTP_listenSocketEvent
+ {
+ integer groupId,
+ EPTF_HTTP_HostInformation hostInfo,
+ integer eventType
+ }
+
+///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_listenSocketError
+ //
+ // Purpose:
+ // Contains the listening socket error parameters received from the transport layer
+ //
+ // Elements:
+ // groupId - *integer* - port group ID
+ // hostInfo - <EPTF_HTTP_HostInformation> - listening address and port
+ // transportError - <EPTF_HTTP_Error> - the transport error
+ //
+///////////////////////////////////////////////////////////////////////////////
+ type record EPTF_HTTP_listenSocketError
+ {
+ integer groupId,
+ EPTF_HTTP_HostInformation hostInfo,
+ EPTF_HTTP_Error transportError
+ }
+
+///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_IncomingMessage
+ //
+ // Purpose:
+ // Contains the message received from the transport layer
+ //
+ // Elements:
+ // groupId - *integer* - port group identifier of the message
+ // sessionId - *integer* - unique port identifier of the message
+ // seqNum - *integer* - the sequence number of the request
+ // message - *octetstring* - HTTP message
+ //
+///////////////////////////////////////////////////////////////////////////////
+ type record EPTF_HTTP_IncomingMessage{
+ integer groupId,
+ integer sessionId,
+ integer seqNum,
+ octetstring httpMessage
+ }
+
+///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_HeaderLineList
+ //
+ // Purpose:
+ // Type to store a list of header lines
+ //
+ // Elements:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+///////////////////////////////////////////////////////////////////////////////
+ type record of HeaderLines EPTF_HTTP_HeaderLineList;
+
+///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_BinaryBodyDatabase
+ //
+ // Purpose:
+ // HTTP database for binary message body
+ //
+ // Elements:
+ // record of <octetstring>
+ //
+ // Detailed Comments:
+ // -
+ //
+///////////////////////////////////////////////////////////////////////////////
+ type record of octetstring EPTF_HTTP_BinaryBodyDatabase;
+
+///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_CharstringBodyDatabase
+ //
+ // Purpose:
+ // HTTP database for charstring message body
+ //
+ // Elements:
+ // <EPTF_CharstringList>
+ //
+ // Detailed Comments:
+ // -
+ //
+///////////////////////////////////////////////////////////////////////////////
+ type EPTF_CharstringList EPTF_HTTP_CharstringBodyDatabase;
+
+///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_CharOrOct
+ //
+ // Purpose:
+ // HTTP database for charstring message body
+ //
+ // Elements:
+ // charVal - *charstring* - charstring value
+ // octVal - *octetstring* - octetstring value
+ //
+ // Detailed Comments:
+ // -
+ //
+///////////////////////////////////////////////////////////////////////////////
+ type union EPTF_HTTP_CharOrOct {
+ charstring charVal,
+ octetstring octVal
+ }
+
+///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_Information
+ //
+ // Purpose:
+ // Type to store a number of HTTP related data
+ //
+ // Elements:
+ // method - *charstring* - HTTP method
+ // uri - *charstring* - HTTP URI
+ // headerLines - <HeaderLines> - HTTP header lines
+ // authDetails - <EPTF_HTTP_AuthDetails> - HTTP authentication details
+ // bodymessage - *charstring* - HTTP body
+ //
+ // Detailed Comments:
+ // -
+ //
+///////////////////////////////////////////////////////////////////////////////
+ type record EPTF_HTTP_Information {
+ charstring method,
+ charstring uri,
+ HeaderLines headerLines,
+ EPTF_HTTP_AuthDetails authDetails,
+ charstring bodymessage
+ }
+
+///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_AuthDetails
+ //
+ // Purpose:
+ // The authentication details
+ //
+ // Elements:
+ // realm - *charstring* - authentication realm
+ // qop - *charstring* - qop (quality of protection code)
+ // nonce - *charstring* - nonce (number used once)
+ // cnonce - *charstring* - client nonce value
+ // opaque - *charstring* - opaque
+ // nonceCount - *charstring* - nonce count in hexa
+ // algorithm - *charstring* - used algorithm eg: MD5
+ // password - *charstring* - user password
+ //
+ // Detailed Comments:
+ // This record contains the authentication details received from
+ // proxy such as realm, qop, nonce, opaque.
+ //
+///////////////////////////////////////////////////////////////////////////////
+ type record EPTF_HTTP_AuthDetails {
+ charstring realm,
+ charstring qop,
+ charstring nonce,
+ charstring cnonce,
+ charstring opaque,
+ charstring nonceCount,
+ charstring algorithm,
+ charstring response,
+ charstring uri,
+ charstring username,
+ charstring password
+ }
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_initAuthDetails
+ //
+ // Purpose:
+ // Authentication data initialization.
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const EPTF_HTTP_AuthDetails c_EPTF_HTTP_initAuthDetails :=
+ {
+ realm := "",
+ qop := "",
+ nonce := "",
+ cnonce := "",
+ opaque := "",
+ nonceCount := "00000001",
+ algorithm := "",
+ response := "",
+ uri := "",
+ username := "",
+ password := ""
+ }
+///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_Ctx
+ //
+ // Purpose:
+ // HTTP entity context
+ //
+ // Elements:
+ // method - *charstring* - HTTP method
+ // uri - *charstring* - HTTP request URI
+ // version_major - *integer* - HTTP major version number
+ // version_minor - *integer* - HTTP minor version number
+ // headerLinesIdx - *integer* - headerlines database index
+ // authDetails - <EPTF_HTTP_authDetails> - authentication details
+ // connId - *integer* - port group index
+ // bodymessage - *charstring* - HTTP message body
+ //
+ // Detailed Comments:
+ // -
+ //
+///////////////////////////////////////////////////////////////////////////////
+ type record EPTF_HTTP_Ctx {
+ charstring method,
+ integer statusCode,
+ charstring statusText,
+ charstring uri,
+ charstring etag,
+ integer version_major,
+ integer version_minor,
+ integer headerLinesIdx,
+ EPTF_HTTP_AuthDetails authDetails,
+ boolean requestPending,
+ integer connId,
+ integer bodyId,
+ integer portId,
+ integer seqNum,
+ HTTPMessage httpMessage optional,
+ EPTF_HTTP_headerContentGetter_FT headerGetterFn,
+ EPTF_HTTP_rawHeaderContentGetter_FT rawHeaderGetterFn,
+ EPTF_HTTP_bodyContentGetter_FT contentGetterFn,
+ EPTF_HTTP_charstringBodyHandler_FT charBodyHandlerFn,
+ EPTF_HTTP_binaryBodyHandler_FT binaryBodyHandlerFn
+ }
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_initCtx
+ //
+ // Purpose:
+ // Context initialization.
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const EPTF_HTTP_Ctx c_EPTF_HTTP_initCtx :=
+ {
+ method := "",
+ statusCode := -1,
+ statusText := "",
+ uri := "",
+ etag := "",
+ version_major := 1,
+ version_minor := 1,
+ headerLinesIdx := -1,
+ authDetails := c_EPTF_HTTP_initAuthDetails,
+ requestPending := false,
+ connId := -1,
+ bodyId := -1,
+ portId := -1,
+ seqNum := -1,
+ httpMessage := omit,
+ headerGetterFn := null,
+ rawHeaderGetterFn := null,
+ contentGetterFn := null,
+ charBodyHandlerFn := null,
+ binaryBodyHandlerFn := null
+ }
+
+///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_HostInformation
+ //
+ // Purpose:
+ // Host information
+ //
+ // Elements:
+ // hostIPAddress - *charstring* - store the IP address of the given host
+ // hostPort - *integer* - store the port of the gives host
+ //
+///////////////////////////////////////////////////////////////////////////////
+ type record EPTF_HTTP_HostInformation{
+ charstring hostIPAddress ,
+ integer hostPort
+ }
+
+///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_HostInformationList
+ //
+ // Purpose:
+ // Record of <EPTF_HTTP_HostInformation>
+ //
+ // Elements:
+ // -
+ //
+///////////////////////////////////////////////////////////////////////////////
+ type record of EPTF_HTTP_HostInformation EPTF_HTTP_HostInformationList;
+
+
+
+///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_CtxList
+ //
+ // Purpose:
+ // FSM Context Database
+ //
+ // Elements:
+ // record of <EPTF_HTTP_Ctx>
+ //
+ // Detailed Comments:
+ // -
+ //
+///////////////////////////////////////////////////////////////////////////////
+ type record of EPTF_HTTP_Ctx EPTF_HTTP_CtxList;
+
+///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_AuthDataServer
+ //
+ // Purpose:
+ // Stores server authentication data.
+ //
+ // Elements:
+ // method - *charstring* - authentication method ("Digest")
+ // algorithm - *charstring* - used algorithm eg: MD5
+ // realm - *charstring* - authentication realm
+ // domain - *charstring* *optional*- authentication domain
+ // nonce - *charstring* - nonce (number used once)
+ // qopOptions - *charstring* - qop (quality of protection code)
+ // password - *charstring* - user password
+ //
+ // Detailed Comments:
+ // -
+ //
+///////////////////////////////////////////////////////////////////////////////
+ type record EPTF_HTTP_AuthDataServer
+ {
+ charstring method,
+ charstring algorithm,
+ charstring realm,
+ charstring domain optional,
+ EPTF_CharstringList nonceValues,
+ integer currentNonce,
+ charstring qopOptions,
+ charstring password
+ }
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_initAuthData
+ //
+ // Purpose:
+ // -
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const EPTF_HTTP_AuthDataServer c_EPTF_HTTP_initAuthData :=
+ {
+ method := "",
+ algorithm := "",
+ realm := "",
+ domain := omit,
+ nonceValues := {},
+ currentNonce := 0,
+ qopOptions := "",
+ password := ""
+ }
+
+///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_ParamValue
+ //
+ // Purpose:
+ // -
+ //
+ // Elements:
+ // paramName - *charstring* -
+ // paramValue - *charstring* -
+///////////////////////////////////////////////////////////////////////////////
+ type record EPTF_HTTP_ParamValue
+ {
+ charstring paramName,
+ charstring paramValue
+ }
+
+///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_ParamValue_List
+ //
+ // Purpose:
+ // -
+///////////////////////////////////////////////////////////////////////////////
+ type record of EPTF_HTTP_ParamValue EPTF_HTTP_ParamValue_List;
+
+///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_setAuthData
+ //
+ // Purpose:
+ // Sets server authentication data.
+ //
+ // Elements:
+ // method - *charstring* - authentication method ("Digest")
+ // algorithm - *charstring* - used algorithm eg: MD5
+ // realm - *charstring* - authentication realm
+ // domain - *charstring* *optional*- authentication domain
+ // nonce - *charstring* - nonce (number used once)
+ // qopOptions - *charstring* - qop (quality of protection code)
+ // password - *charstring* - user password
+ //
+ // Detailed Comments:
+ // -
+ //
+///////////////////////////////////////////////////////////////////////////////
+ type record EPTF_HTTP_setAuthData
+ {
+ charstring method,
+ charstring algorithm,
+ charstring realm,
+ charstring domain optional,
+ charstring qopOptions,
+ charstring password
+ }
+ //=============================================================================
+ // Constants
+ //=============================================================================
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_stepIdx_sendRequest
+ //
+ // Purpose:
+ // constant for the step index of send request
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const integer c_EPTF_HTTP_stepIdx_sendRequest := 0;
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_stepName_sendRequest
+ //
+ // Purpose:
+ // constant for the step name of send request
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const charstring c_EPTF_HTTP_stepName_sendRequest := "EPTF HTTP: Sends HTTP Request";
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_stepIdx_handleTimeout
+ //
+ // Purpose:
+ // constant for the step index of handle timeout step
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const integer c_EPTF_HTTP_stepIdx_handleTimeout := 1;
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_stepName_handleTimeout
+ //
+ // Purpose:
+ // constant for the step name of handle timeout step
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const charstring c_EPTF_HTTP_stepName_handleTimeout := "EPTF HTTP: Timeout handler";
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_stepIdx_responseReceived
+ //
+ // Purpose:
+ // constant for the step index of response message received step
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const integer c_EPTF_HTTP_stepIdx_responseReceived := 2;
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_stepName_responseReceived
+ //
+ // Purpose:
+ // constant for the step name of response message received step
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const charstring c_EPTF_HTTP_stepName_responseReceived := "EPTF HTTP: Response message received";
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_stepIdx_openConnection
+ //
+ // Purpose:
+ // constant for the step index of open connection step
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const integer c_EPTF_HTTP_stepIdx_openConnection := 3;
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_stepName_openConnection
+ //
+ // Purpose:
+ // constant for the step name of open connection step
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const charstring c_EPTF_HTTP_stepName_openConnection := "EPTF HTTP: Opens connection";
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_stepIdx_closeConnection
+ //
+ // Purpose:
+ // constant for the step index of close connection step
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const integer c_EPTF_HTTP_stepIdx_closeConnection := 4;
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_stepName_closeConnection
+ //
+ // Purpose:
+ // constant for the step name of close connection step
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const charstring c_EPTF_HTTP_stepName_closeConnection := "EPTF HTTP: Closes connection";
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_stepIdx_halfCloseConnection
+ //
+ // Purpose:
+ // constant for the step index of half close connection step
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const integer c_EPTF_HTTP_stepIdx_halfCloseConnection := 5;
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_stepName_halfCloseConnection
+ //
+ // Purpose:
+ // constant for the step name of half close connection step
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const charstring c_EPTF_HTTP_stepName_halfCloseConnection := "EPTF HTTP: Half closes connection";
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_stepIdx_closePortOfUser
+ //
+ // Purpose:
+ // constant for the step index of close port of user step
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const integer c_EPTF_HTTP_stepIdx_closePortOfUser := 6;
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_stepName_closePortOfUser
+ //
+ // Purpose:
+ // constant for the step name of close port of user step
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const charstring c_EPTF_HTTP_stepName_closePortOfUser := "EPTF HTTP: Closes port of user";
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_stepIdx_closePortOfUser
+ //
+ // Purpose:
+ // constant for the step index of free port of user step
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const integer c_EPTF_HTTP_stepIdx_freePortOfUser := 7;
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_stepName_freePortOfUser
+ //
+ // Purpose:
+ // constant for the step name of free port of user step
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const charstring c_EPTF_HTTP_stepName_freePortOfUser := "EPTF HTTP: Frees port of user";
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_stepIdx_setEntityContextHTTPMethodCONNECT
+ //
+ // Purpose:
+ // constant for the step index of send request
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const integer c_EPTF_HTTP_stepIdx_setEntityContextHTTPMethodCONNECT := 8;
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_stepName_setEntityContextHTTPMethodCONNECT
+ //
+ // Purpose:
+ // constant for the step name of send request
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const charstring c_EPTF_HTTP_stepName_setEntityContextHTTPMethodCONNECT := "EPTF HTTP: Set Entity Context HTTP Method CONNECT";
+
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_stepIdx_setEntityContextHTTPMethodDELETE
+ //
+ // Purpose:
+ // constant for the step index of send request
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const integer c_EPTF_HTTP_stepIdx_setEntityContextHTTPMethodDELETE := 9;
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_stepName_setEntityContextHTTPMethodDELETE
+ //
+ // Purpose:
+ // constant for the step name of send request
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const charstring c_EPTF_HTTP_stepName_setEntityContextHTTPMethodDELETE := "EPTF HTTP: Set Entity Context HTTP Method DELETE";
+
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_stepIdx_setEntityContextHTTPMethodGET
+ //
+ // Purpose:
+ // constant for the step index of send request
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const integer c_EPTF_HTTP_stepIdx_setEntityContextHTTPMethodGET := 10;
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_stepName_setEntityContextHTTPMethodGET
+ //
+ // Purpose:
+ // constant for the step name of send request
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const charstring c_EPTF_HTTP_stepName_setEntityContextHTTPMethodGET := "EPTF HTTP: Set Entity Context HTTP Method GET";
+
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_stepIdx_setEntityContextHTTPMethodHEAD
+ //
+ // Purpose:
+ // constant for the step index of send request
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const integer c_EPTF_HTTP_stepIdx_setEntityContextHTTPMethodHEAD := 11;
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_stepName_setEntityContextHTTPMethodHEAD
+ //
+ // Purpose:
+ // constant for the step name of send request
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const charstring c_EPTF_HTTP_stepName_setEntityContextHTTPMethodHEAD := "EPTF HTTP: Set Entity Context HTTP Method HEAD";
+
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_stepIdx_setEntityContextHTTPMethodOPTIONS
+ //
+ // Purpose:
+ // constant for the step index of send request
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const integer c_EPTF_HTTP_stepIdx_setEntityContextHTTPMethodOPTIONS := 12;
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_stepName_setEntityContextHTTPMethodOPTIONS
+ //
+ // Purpose:
+ // constant for the step name of send request
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const charstring c_EPTF_HTTP_stepName_setEntityContextHTTPMethodOPTIONS := "EPTF HTTP: Set Entity Context HTTP Method OPTIONS";
+
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_stepIdx_setEntityContextHTTPMethodPOST
+ //
+ // Purpose:
+ // constant for the step index of send request
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const integer c_EPTF_HTTP_stepIdx_setEntityContextHTTPMethodPOST := 13;
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_stepName_setEntityContextHTTPMethodPOST
+ //
+ // Purpose:
+ // constant for the step name of send request
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const charstring c_EPTF_HTTP_stepName_setEntityContextHTTPMethodPOST := "EPTF HTTP: Set Entity Context HTTP Method POST";
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_stepIdx_setEntityContextHTTPMethodPUT
+ //
+ // Purpose:
+ // constant for the step index of send request
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const integer c_EPTF_HTTP_stepIdx_setEntityContextHTTPMethodPUT := 14;
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_stepName_setEntityContextHTTPMethodPUT
+ //
+ // Purpose:
+ // constant for the step name of send request
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const charstring c_EPTF_HTTP_stepName_setEntityContextHTTPMethodPUT := "EPTF HTTP: Set Entity Context HTTP Method PUT";
+
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_stepIdx_setEntityContextHTTPMethodTRACE
+ //
+ // Purpose:
+ // constant for the step index of send request
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const integer c_EPTF_HTTP_stepIdx_setEntityContextHTTPMethodTRACE := 15;
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_stepName_setEntityContextHTTPMethodTRACE
+ //
+ // Purpose:
+ // constant for the step name of send request
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const charstring c_EPTF_HTTP_stepName_setEntityContextHTTPMethodTRACE := "EPTF HTTP: Set Entity Context HTTP Method TRACE";
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_stepIdx_handleRequest
+ //
+ // Purpose:
+ // constant for the step index of handle request
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const integer c_EPTF_HTTP_stepIdx_handleRequest := 16;
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_stepName_handleRequest
+ //
+ // Purpose:
+ // constant for the step name of handle request
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const charstring c_EPTF_HTTP_stepName_handleRequest := "EPTF HTTP: Handle Request";
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_stepIdx_sendResponse
+ //
+ // Purpose:
+ // constant for the step index of send response
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const integer c_EPTF_HTTP_stepIdx_sendResponse := 17;
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_stepName_sendResponse
+ //
+ // Purpose:
+ // constant for the step name of send response
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const charstring c_EPTF_HTTP_stepName_sendResponse := "EPTF HTTP: Send Response";
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_stepIdx_cleanUpContext
+ //
+ // Purpose:
+ // constant for the step index of context cleanup
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const integer c_EPTF_HTTP_stepIdx_closePort := 18;
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_stepName_closePort
+ //
+ // Purpose:
+ // constant for the step index of port closing
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const charstring c_EPTF_HTTP_stepName_closePort := "EPTF HTTP: Close port";
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_stepIdx_cleanUpContext
+ //
+ // Purpose:
+ // constant for the step index of context cleanup
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const integer c_EPTF_HTTP_stepIdx_cleanUpContext := 19;
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_stepName_cleanUpContext
+ //
+ // Purpose:
+ // constant for the step index of context cleanup
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const charstring c_EPTF_HTTP_stepName_cleanUpContext := "EPTF HTTP: Cleanup";
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputIdx_response100Continue
+ //
+ // Purpose:
+ // constant for the input index of response continue input
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const integer c_EPTF_HTTP_inputIdx_response100Continue := 0;
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputName_response100Continue
+ //
+ // Purpose:
+ // constant for the input name of response continue input
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const charstring c_EPTF_HTTP_inputName_response100Continue := "HTTP Message arrived, Result Code: 100 Continue";
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputIdx_response101SwitchingProtocols
+ //
+ // Purpose:
+ // constant for the input index of response switching protocols input
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const integer c_EPTF_HTTP_inputIdx_response101SwitchingProtocols := 1;
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputName_response101SwitchingProtocols
+ //
+ // Purpose:
+ // constant for the input name of response switching protocols input
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const charstring c_EPTF_HTTP_inputName_response101SwitchingProtocols := "HTTP Message arrived, Result Code: 101 Switching Protocols";
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputIdx_response200OK
+ //
+ // Purpose:
+ // constant for the input index of response OK input
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const integer c_EPTF_HTTP_inputIdx_response200OK := 2;
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputName_response200OK
+ //
+ // Purpose:
+ // constant for the input name of response OK input
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const charstring c_EPTF_HTTP_inputName_response200OK := "HTTP Message arrived, Result Code: 200 Ok";
+
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputIdx_response201Created
+ //
+ // Purpose:
+ // constant for the input index of response created input
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const integer c_EPTF_HTTP_inputIdx_response201Created := 3;
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputName_response201Created
+ //
+ // Purpose:
+ // constant for the input name of response created input
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const charstring c_EPTF_HTTP_inputName_response201Created := "HTTP Message arrived, Result Code: 201 Created";
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputIdx_response202Accepted
+ //
+ // Purpose:
+ // constant for the input index of response accepted input
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const integer c_EPTF_HTTP_inputIdx_response202Accepted := 4;
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputName_response202Accepted
+ //
+ // Purpose:
+ // constant for the input name of response accepted input
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const charstring c_EPTF_HTTP_inputName_response202Accepted := "HTTP Message arrived, Result Code: 202 Accepted";
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputIdx_response203NonAuthoritativeInformation
+ //
+ // Purpose:
+ // constant for the input index of response non-authoritative information
+ // input
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const integer c_EPTF_HTTP_inputIdx_response203NonAuthoritativeInformation := 5;
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputName_response203NonAuthoritativeInformation
+ //
+ // Purpose:
+ // constant for the input name of response non-authoritative information
+ // input
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const charstring c_EPTF_HTTP_inputName_response203NonAuthoritativeInformation:= "HTTP Message arrived, Result Code: 203 Non-Authoritative Information";
+
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputIdx_response204NoContent
+ //
+ // Purpose:
+ // constant for the input index of response no content input
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const integer c_EPTF_HTTP_inputIdx_response204NoContent := 6;
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputName_response204NoContent
+ //
+ // Purpose:
+ // constant for the input name of response no content input
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const charstring c_EPTF_HTTP_inputName_response204NoContent := "HTTP Message arrived, Result Code: 204 No Content";
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputIdx_response205ResetContent
+ //
+ // Purpose:
+ // constant for the input index of response reset content input
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const integer c_EPTF_HTTP_inputIdx_response205ResetContent := 7;
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputName_response205ResetContent
+ //
+ // Purpose:
+ // constant for the input name of response reset content input
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const charstring c_EPTF_HTTP_inputName_response205ResetContent := "HTTP Message arrived, Result Code: 205 Reset Content";
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputIdx_response206PartialContent
+ //
+ // Purpose:
+ // constant for the input index of response partial content input
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const integer c_EPTF_HTTP_inputIdx_response206PartialContent := 8;
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputName_response206PartialContent
+ //
+ // Purpose:
+ // constant for the input name of response partial content input
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const charstring c_EPTF_HTTP_inputName_response206PartialContent := "HTTP Message arrived, Result Code: 206 Partial Content";
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputIdx_response300MultipleChoices
+ //
+ // Purpose:
+ // constant for the input index of response multiple choices input
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const integer c_EPTF_HTTP_inputIdx_response300MultipleChoices := 9;
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputName_response300MultipleChoices
+ //
+ // Purpose:
+ // constant for the input name of response multiple choices input
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const charstring c_EPTF_HTTP_inputName_response300MultipleChoices := "HTTP Message arrived, Result Code: 300 Multiple Choices";
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputIdx_response301MovedPermanently
+ //
+ // Purpose:
+ // constant for the input index of response moved permanently input
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const integer c_EPTF_HTTP_inputIdx_response301MovedPermanently := 10;
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputName_response301MovedPermanently
+ //
+ // Purpose:
+ // constant for the input name of response moved permanently input
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const charstring c_EPTF_HTTP_inputName_response301MovedPermanently := "HTTP Message arrived, Result Code: 301 Moved Permanently";
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputIdx_response302Found
+ //
+ // Purpose:
+ // constant for the input index of response found input
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const integer c_EPTF_HTTP_inputIdx_response302Found := 11;
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputName_response302Found
+ //
+ // Purpose:
+ // constant for the input name of response found input
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const charstring c_EPTF_HTTP_inputName_response302Found := "HTTP Message arrived, Result Code: 302 Found";
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputIdx_response303SeeOther
+ //
+ // Purpose:
+ // constant for the input index of response see other input
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const integer c_EPTF_HTTP_inputIdx_response303SeeOther := 12;
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputName_response303SeeOther
+ //
+ // Purpose:
+ // constant for the input name of response see other input
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const charstring c_EPTF_HTTP_inputName_response303SeeOther := "HTTP Message arrived, Result Code: 303 See Other";
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputIdx_response304NotModified
+ //
+ // Purpose:
+ // constant for the input index of response modified input
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const integer c_EPTF_HTTP_inputIdx_response304NotModified := 13;
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputName_response304NotModified
+ //
+ // Purpose:
+ // constant for the input name of response modified input
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const charstring c_EPTF_HTTP_inputName_response304NotModified := "HTTP Message arrived, Result Code: 304 Not Modified";
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputIdx_response305UseProxy
+ //
+ // Purpose:
+ // constant for the input index of response use proxy input
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const integer c_EPTF_HTTP_inputIdx_response305UseProxy := 14;
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputName_response305UseProxy
+ //
+ // Purpose:
+ // constant for the input name of response use proxy input
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const charstring c_EPTF_HTTP_inputName_response305UseProxy := "HTTP Message arrived, Result Code: 305 Use Proxy";
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputIdx_response306Unused
+ //
+ // Purpose:
+ // constant for the input index of response unused input
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const integer c_EPTF_HTTP_inputIdx_response306Unused := 15;
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputName_response306Unused
+ //
+ // Purpose:
+ // constant for the input name of response unused input
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const charstring c_EPTF_HTTP_inputName_response306Unused := "HTTP Message arrived, Result Code: 306 Unused";
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputIdx_response307TemporaryRedirect
+ //
+ // Purpose:
+ // constant for the input index of response temporary redirect input
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const integer c_EPTF_HTTP_inputIdx_response307TemporaryRedirect := 16;
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputName_response307TemporaryRedirect
+ //
+ // Purpose:
+ // constant for the input name of response temporary redirect input
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const charstring c_EPTF_HTTP_inputName_response307TemporaryRedirect := "HTTP Message arrived, Result Code: 307 Temporary Redirect";
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputIdx_response400BadRequest
+ //
+ // Purpose:
+ // constant for the input index of response bad request input
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const integer c_EPTF_HTTP_inputIdx_response400BadRequest := 17;
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputName_response400BadRequest
+ //
+ // Purpose:
+ // constant for the input name of response bad request input
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const charstring c_EPTF_HTTP_inputName_response400BadRequest := "HTTP Message arrived, Result Code: 400 Bad Request";
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputIdx_response401Unauthorized
+ //
+ // Purpose:
+ // constant for the input index of response unauthorized input
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const integer c_EPTF_HTTP_inputIdx_response401Unauthorized := 18;
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputName_response401Unauthorized
+ //
+ // Purpose:
+ // constant for the input name of response unauthorized input
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const charstring c_EPTF_HTTP_inputName_response401Unauthorized := "HTTP Message arrived, Result Code: 401 Unauthorized";
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputIdx_response402PaymentRequired
+ //
+ // Purpose:
+ // constant for the input index of response payment required input
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const integer c_EPTF_HTTP_inputIdx_response402PaymentRequired := 19;
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputName_response402PaymentRequired
+ //
+ // Purpose:
+ // constant for the input name of response payment required input
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const charstring c_EPTF_HTTP_inputName_response402PaymentRequired := "HTTP Message arrived, Result Code: 402 Payment Required";
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputIdx_response403Forbidden
+ //
+ // Purpose:
+ // constant for the input index of response forbidden input
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const integer c_EPTF_HTTP_inputIdx_response403Forbidden := 20;
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputName_response403Forbidden
+ //
+ // Purpose:
+ // constant for the input name of response forbidden input
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const charstring c_EPTF_HTTP_inputName_response403Forbidden := "HTTP Message arrived, Result Code: 403 Forbidden";
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputIdx_response404NotFound
+ //
+ // Purpose:
+ // constant for the input index of response not found input
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const integer c_EPTF_HTTP_inputIdx_response404NotFound := 21;
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputName_response404NotFound
+ //
+ // Purpose:
+ // constant for the input name of response not found input
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const charstring c_EPTF_HTTP_inputName_response404NotFound := "HTTP Message arrived, Result Code: 404 Not Found";
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputIdx_response405MethodNotAllowed
+ //
+ // Purpose:
+ // constant for the input index of response method not allowed input
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const integer c_EPTF_HTTP_inputIdx_response405MethodNotAllowed := 22;
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputName_response405MethodNotAllowed
+ //
+ // Purpose:
+ // constant for the input name of response method not allowed input
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const charstring c_EPTF_HTTP_inputName_response405MethodNotAllowed := "HTTP Message arrived, Result Code: 405 Method Not Allowed";
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputIdx_response406NotAcceptable
+ //
+ // Purpose:
+ // constant for the input index of response not acceptable input
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const integer c_EPTF_HTTP_inputIdx_response406NotAcceptable := 23;
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputName_response406NotAcceptable
+ //
+ // Purpose:
+ // constant for the input name of response not acceptable input
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const charstring c_EPTF_HTTP_inputName_response406NotAcceptable := "HTTP Message arrived, Result Code: 406 Not Acceptable";
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputIdx_response407ProxyAuthenticationRequired
+ //
+ // Purpose:
+ // constant for the input index of response proxy authentication required
+ // input
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const integer c_EPTF_HTTP_inputIdx_response407ProxyAuthenticationRequired := 24;
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputName_response407ProxyAuthenticationRequired
+ //
+ // Purpose:
+ // constant for the input name of response proxy authentication required
+ // input
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const charstring c_EPTF_HTTP_inputName_response407ProxyAuthenticationRequired := "HTTP Message arrived, Result Code: 407 Proxy Authentication Required";
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputIdx_response408RequestTimeout
+ //
+ // Purpose:
+ // constant for the input index of response request timeout input
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const integer c_EPTF_HTTP_inputIdx_response408RequestTimeout := 25;
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputName_response408RequestTimeout
+ //
+ // Purpose:
+ // constant for the input name of response request timeout input
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const charstring c_EPTF_HTTP_inputName_response408RequestTimeout := "HTTP Message arrived, Result Code: 408 Request Timeout";
+
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputIdx_response409Conflict
+ //
+ // Purpose:
+ // constant for the input index of response conflict input
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const integer c_EPTF_HTTP_inputIdx_response409Conflict := 26;
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputName_response409Conflict
+ //
+ // Purpose:
+ // constant for the input name of response conflict input
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const charstring c_EPTF_HTTP_inputName_response409Conflict := "HTTP Message arrived, Result Code: 409 Conflict";
+
+
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputIdx_response410Gone
+ //
+ // Purpose:
+ // constant for the input index of response gone input
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const integer c_EPTF_HTTP_inputIdx_response410Gone := 27;
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputName_response410Gone
+ //
+ // Purpose:
+ // constant for the input name of response gone input
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const charstring c_EPTF_HTTP_inputName_response410Gone := "HTTP Message arrived, Result Code: 410 Gone";
+
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputIdx_response411LengthRequired
+ //
+ // Purpose:
+ // constant for the input index of response length required input
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const integer c_EPTF_HTTP_inputIdx_response411LengthRequired := 28;
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputName_response411LengthRequired
+ //
+ // Purpose:
+ // constant for the input name of response length required input
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const charstring c_EPTF_HTTP_inputName_response411LengthRequired := "HTTP Message arrived, Result Code: 411 Length Required";
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputIdx_response412PreconditionFailed
+ //
+ // Purpose:
+ // constant for the input index of response precondition failed input
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const integer c_EPTF_HTTP_inputIdx_response412PreconditionFailed := 29;
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputName_response412PreconditionFailed
+ //
+ // Purpose:
+ // constant for the input name of response precondition failed input
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const charstring c_EPTF_HTTP_inputName_response412PreconditionFailed := "HTTP Message arrived, Result Code: 412 Precondition Failed";
+
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputIdx_response413RequestEntityTooLarge
+ //
+ // Purpose:
+ // constant for the input index of response request entity too large input
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const integer c_EPTF_HTTP_inputIdx_response413RequestEntityTooLarge := 30;
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputName_response413RequestEntityTooLarge
+ //
+ // Purpose:
+ // constant for the input name of response request entity too large input
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const charstring c_EPTF_HTTP_inputName_response413RequestEntityTooLarge := "HTTP Message arrived, Result Code: 413 Request Entity Too Large";
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputIdx_response414RequestURITooLong
+ //
+ // Purpose:
+ // constant for the input index of response request URI too long input
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const integer c_EPTF_HTTP_inputIdx_response414RequestURITooLong := 31;
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputName_response414RequestURITooLong
+ //
+ // Purpose:
+ // constant for the input name of response request URI too long input
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const charstring c_EPTF_HTTP_inputName_response414RequestURITooLong := "HTTP Message arrived, Result Code: 414 Request-URI Too Long";
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputIdx_response415UnsupportedMediaType
+ //
+ // Purpose:
+ // constant for the input index of response unsupported media type input
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const integer c_EPTF_HTTP_inputIdx_response415UnsupportedMediaType := 32;
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputName_response415UnsupportedMediaType
+ //
+ // Purpose:
+ // constant for the input name of response unsupported media type input
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const charstring c_EPTF_HTTP_inputName_response415UnsupportedMediaType := "HTTP Message arrived, Result Code: 415 Unsupported Media Type";
+
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputIdx_response416RequestedRangeNotSatisfiable
+ //
+ // Purpose:
+ // constant for the input index of response requested range not
+ // satisfiable input
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const integer c_EPTF_HTTP_inputIdx_response416RequestedRangeNotSatisfiable := 33;
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputName_response416RequestedRangeNotSatisfiable
+ //
+ // Purpose:
+ // constant for the input name of response requested range not
+ // satisfiable input
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const charstring c_EPTF_HTTP_inputName_response416RequestedRangeNotSatisfiable := "HTTP Message arrived, Result Code: 416 Requested Range Not Satisfiable";
+
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputIdx_response417ExpectationFailed
+ //
+ // Purpose:
+ // constant for the input index of response expectation failed input
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const integer c_EPTF_HTTP_inputIdx_response417ExpectationFailed := 34;
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputName_response417ExpectationFailed
+ //
+ // Purpose:
+ // constant for the input name of response expectation failed input
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const charstring c_EPTF_HTTP_inputName_response417ExpectationFailed := "HTTP Message arrived, Result Code: 417 Expectation Failed";
+
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputIdx_response500InternalServerError
+ //
+ // Purpose:
+ // constant for the input index of response internal server error input
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const integer c_EPTF_HTTP_inputIdx_response500InternalServerError := 35;
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputName_response500InternalServerError
+ //
+ // Purpose:
+ // constant for the input name of response internal server error input
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const charstring c_EPTF_HTTP_inputName_response500InternalServerError := "HTTP Message arrived, Result Code: 500 Internal Server Error";
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputIdx_response501NotImplemented
+ //
+ // Purpose:
+ // constant for the input index of response not implemented input
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const integer c_EPTF_HTTP_inputIdx_response501NotImplemented := 36;
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputName_response501NotImplemented
+ //
+ // Purpose:
+ // constant for the input name of response not implemented input
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const charstring c_EPTF_HTTP_inputName_response501NotImplemented := "HTTP Message arrived, Result Code: 501 Not Implemented";
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputIdx_response502BadGateway
+ //
+ // Purpose:
+ // constant for the input index of response bad gateway input
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const integer c_EPTF_HTTP_inputIdx_response502BadGateway := 37;
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputName_response502BadGateway
+ //
+ // Purpose:
+ // constant for the input name of response bad gateway input
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const charstring c_EPTF_HTTP_inputName_response502BadGateway := "HTTP Message arrived, Result Code: 502 Bad Gateway";
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputIdx_response503ServiceUnavailable
+ //
+ // Purpose:
+ // constant for the input index of response service unavailable input
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const integer c_EPTF_HTTP_inputIdx_response503ServiceUnavailable := 38;
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputName_response503ServiceUnavailable
+ //
+ // Purpose:
+ // constant for the input name of response service unavailable input
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const charstring c_EPTF_HTTP_inputName_response503ServiceUnavailable := "HTTP Message arrived, Result Code: 503 Service Unavailable";
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputIdx_response504GatewayTimeout
+ //
+ // Purpose:
+ // constant for the input index of response gateway timeout input
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const integer c_EPTF_HTTP_inputIdx_response504GatewayTimeout := 39;
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputName_response504GatewayTimeout
+ //
+ // Purpose:
+ // constant for the input name of response gateway timeout input
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const charstring c_EPTF_HTTP_inputName_response504GatewayTimeout := "HTTP Message arrived, Result Code: 504 Gateway Timeout";
+
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputIdx_response505HTTPVersionNotSupported
+ //
+ // Purpose:
+ // constant for the input index of response HTTP version not supported
+ // input
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const integer c_EPTF_HTTP_inputIdx_response505HTTPVersionNotSupported := 40;
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputName_response505HTTPVersionNotSupported
+ //
+ // Purpose:
+ // constant for the input name of response HTTP version not supported
+ // input
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const charstring c_EPTF_HTTP_inputName_response505HTTPVersionNotSupported := "HTTP Message arrived, Result Code: 505 HTTP Version Not Supported";
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputIdx_response100class
+ //
+ // Purpose:
+ // constant for the input index of response HTTP class 100
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const integer c_EPTF_HTTP_inputIdx_response100class := 41;
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputName_response100class
+ //
+ // Purpose:
+ // constant for the input name of response HTTP version class 100
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const charstring c_EPTF_HTTP_inputName_response100class := "HTTP Message arrived, Result Code: 1XX";
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputIdx_response200class
+ //
+ // Purpose:
+ // constant for the input index of response HTTP class 200
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const integer c_EPTF_HTTP_inputIdx_response200class := 42;
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputName_response200class
+ //
+ // Purpose:
+ // constant for the input name of response HTTP version class 200
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const charstring c_EPTF_HTTP_inputName_response200class := "HTTP Message arrived, Result Code: 2XX";
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputIdx_response300class
+ //
+ // Purpose:
+ // constant for the input index of response HTTP class 300
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const integer c_EPTF_HTTP_inputIdx_response300class := 43;
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputName_response300class
+ //
+ // Purpose:
+ // constant for the input name of response HTTP version class 300
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const charstring c_EPTF_HTTP_inputName_response300class := "HTTP Message arrived, Result Code: 3XX";
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputIdx_response400class
+ //
+ // Purpose:
+ // constant for the input index of response HTTP class 400
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const integer c_EPTF_HTTP_inputIdx_response400class := 44;
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputName_response400class
+ //
+ // Purpose:
+ // constant for the input name of response HTTP version class 400
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const charstring c_EPTF_HTTP_inputName_response400class := "HTTP Message arrived, Result Code: 4XX";
+ ///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputIdx_response500class
+ //
+ // Purpose:
+ // constant for the input index of response HTTP class 500
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const integer c_EPTF_HTTP_inputIdx_response500class := 45;
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputName_response500class
+ //
+ // Purpose:
+ // constant for the input name of response HTTP version class 500
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const charstring c_EPTF_HTTP_inputName_response500class := "HTTP Message arrived, Result Code: 5XX";
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputIdx_connectionOpened
+ //
+ // Purpose:
+ // constant for the input index of connection opened
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const integer c_EPTF_HTTP_inputIdx_connectionOpened := 46;
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputName_connectionOpened
+ //
+ // Purpose:
+ // constant for the input name of connection opened
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const charstring c_EPTF_HTTP_inputName_connectionOpened := "HTTP Connection Opened ";
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputIdx_connectionClosed
+ //
+ // Purpose:
+ // constant for the input index of connection closed
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const integer c_EPTF_HTTP_inputIdx_connectionClosed := 47;
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputName_connectionClosed
+ //
+ // Purpose:
+ // constant for the input name of connection closed
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const charstring c_EPTF_HTTP_inputName_connectionClosed := "HTTP Connection Closed ";
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputIdx_errorReceived
+ //
+ // Purpose:
+ // constant for the input index of error received
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const integer c_EPTF_HTTP_inputIdx_errorReceived := 48;
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputName_errorReceived
+ //
+ // Purpose:
+ // constant for the input name of error received
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const charstring c_EPTF_HTTP_inputName_errorReceived := "HTTP error Result Received ";
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputIdx_OKReceived
+ //
+ // Purpose:
+ // constant for the input index of OK received
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const integer c_EPTF_HTTP_inputIdx_OKReceived := 49;
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputName_OKReceived
+ //
+ // Purpose:
+ // constant for the input name of OK received
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const charstring c_EPTF_HTTP_inputName_OKReceived := "HTTP OK Result Received";
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputIdx_responseCharReceived
+ //
+ // Purpose:
+ // constant for the input index of charstring response message received
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const integer c_EPTF_HTTP_inputIdx_responseCharReceived := 50;
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputName_responseCharReceived
+ //
+ // Purpose:
+ // constant for the input name of charstring response message received
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const charstring c_EPTF_HTTP_inputName_responseCharReceived := "HTTP CHAR Response Message Received";
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputIdx_requestCharReceived
+ //
+ // Purpose:
+ // constant for the input index of charstring request message received
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const integer c_EPTF_HTTP_inputIdx_requestCharReceived := 51;
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputName_requestCharReceived
+ //
+ // Purpose:
+ // constant for the input name of charstring request message received
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const charstring c_EPTF_HTTP_inputName_requestCharReceived := "HTTP CHAR Request Message Received";
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputIdx_responseOctReceived
+ //
+ // Purpose:
+ // constant for the input index of octetstring response message received
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const integer c_EPTF_HTTP_inputIdx_responseOctReceived := 52;
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputName_responseOctReceived
+ //
+ // Purpose:
+ // constant for the input name of octetstring response message received
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const charstring c_EPTF_HTTP_inputName_responseOctReceived := "HTTP OCT Response Message Received";
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputIdx_requestOctReceived
+ //
+ // Purpose:
+ // constant for the input index of octetstring request message received
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const integer c_EPTF_HTTP_inputIdx_requestOctReceived := 53;
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputName_requestOctReceived
+ //
+ // Purpose:
+ // constant for the input name of octetstring request message received
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const charstring c_EPTF_HTTP_inputName_requestOctReceived := "HTTP OCT Request Message Received";
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputIdx_responseSocketError
+ //
+ // Purpose:
+ // constant for the input index of socket error response received
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const integer c_EPTF_HTTP_inputIdx_responseSocketError := 54;
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_inputName_responseSocketError
+ //
+ // Purpose:
+ // constant for the input name of socket error response received
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const charstring c_EPTF_HTTP_inputName_responseSocketError := "HTTP Response Socket Error";
+
+
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_myBName
+ //
+ // Purpose:
+ // constant for the name of the HTTP behaviour
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const charstring c_EPTF_HTTP_myBName :=
+ "HTTP Behavior";
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_fsmName_basicCall
+ //
+ // Purpose:
+ // constant for the name of basic call FSM
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const charstring c_EPTF_HTTP_fsmName_basicCall := "EPTF HTTP: Basic Call";
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_fsm_basicCall_state_idle
+ //
+ // Purpose:
+ // -
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const integer c_EPTF_HTTP_fsm_basicCall_state_idle := 0;
+
+///////////////////////////////////////////////////////////////////////////////
+ // const: Database Hash Map name constants
+ //
+ // Purpose:
+ // -
+ //
+ // Elements:
+ // - c_EPTF_HTTP_HashMap_charDatabase
+ // - c_EPTF_HTTP_HashMap_octDatabase
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const charstring c_EPTF_HTTP_HashMap_charDatabase := "EPTF HTTP: Charstring database";
+ const charstring c_EPTF_HTTP_HashMap_octDatabase := "EPTF HTTP: Octetstring database";
+
+ //=========================================================================
+ // Templates
+ //=========================================================================
+
+///////////////////////////////////////////////////////////////////////////////
+ // Template: t_EPTF_HTTP_HTTPdistr_request
+ //
+ // Purpose:
+ // <HTTPMessage> template, HTTP request message
+ //
+ // Parameters:
+ // p_client_id - *integer* - connection client ID
+ // p_method - *charstring* - GET, PUT, etc
+ // p_uri - *charstring* - uri ID
+ // p_version_major - *integer* - HTTP major version number
+ // p_version_minor - *integer* - HTTP minor version number
+ // p_header - <HeaderLines> *template* - header of the message
+ // p_body - *charstring* *template* - body of the message
+ //
+ // Detailed Comments:
+ // -
+ //
+///////////////////////////////////////////////////////////////////////////////
+ template HTTPMessage t_EPTF_HTTP_HTTPdistr_request(
+ charstring p_method,
+ charstring p_uri,
+ integer p_version_major,
+ integer p_version_minor,
+ HeaderLines p_header,
+ charstring p_body
+ ) :=
+ {
+ request:= {
+ client_id:= omit,
+ method:= p_method,
+ uri:= p_uri,
+ version_major := p_version_major,
+ version_minor := p_version_minor,
+ header:= p_header,
+ body:= p_body
+ }
+ }
+
+///////////////////////////////////////////////////////////////////////////////
+ // Template: t_EPTF_HTTP_HTTPdistr_binary_request
+ //
+ // Purpose:
+ // <HTTPMessage> template, HTTP binary request message
+ //
+ // Parameters:
+ // p_client_id - *integer* - connection client ID
+ // p_method - *charstring* - GET, PUT, etc
+ // p_uri - *charstring* - uri ID
+ // p_version_major - *integer* - HTTP major version number
+ // p_version_minor - *integer* - HTTP minor version number
+ // p_header - <HeaderLines> *template* - header of the message
+ // p_body - *charstring* *template* - body of the message
+ //
+ // Detailed Comments:
+ // -
+ //
+///////////////////////////////////////////////////////////////////////////////
+ template HTTPMessage t_EPTF_HTTP_HTTPdistr_binary_request(
+ charstring p_method,
+ charstring p_uri,
+ integer p_version_major,
+ integer p_version_minor,
+ HeaderLines p_header,
+ octetstring p_body
+ ) :=
+ {
+ request_binary:= {
+ client_id:= omit,
+ method:= p_method,
+ uri:= p_uri,
+ version_major := p_version_major,
+ version_minor := p_version_minor,
+ header:= p_header,
+ body:= p_body
+ }
+ }
+
+///////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_templName_CustomHeader
+ //
+ // Purpose:
+ // constant for the name of the HTTP external template
+ // type Custom Header
+ //
+///////////////////////////////////////////////////////////
+ const charstring c_EPTF_HTTP_templName_CustomHeader :=
+ "CUSTOM_HEADER";
+
+///////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_templName_CustomHeader
+ //
+ // Purpose:
+ // constant for the name of the HTTP external template
+ // type Custom Header
+ //
+///////////////////////////////////////////////////////////
+ const charstring c_EPTF_HTTP_templName_CustomHeaderResponse :=
+ "CUSTOM_HEADER_RESPONSE"
+
+///////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_templName_CustomBody
+ //
+ // Purpose:
+ // constant for the name of the HTTP external template
+ // type Custom Body
+ //
+///////////////////////////////////////////////////////////
+ const charstring c_EPTF_HTTP_templName_CustomBody :=
+ "CUSTOM_BODY";
+
+}
+
+//=========================================================================
+// Statistics
+//=========================================================================
+
+///////////////////////////////////////////////////////////////////////////////
+// Group: EPTF_HTTP_Statistics
+//
+// Purpose:
+// Functions of the EPTF HTTP Statistics
+//
+///////////////////////////////////////////////////////////////////////////////
+group EPTF_HTTP_Statistics
+{
+///////////////////////////////////////////////////////////////////////////////
+ // Constant: Method constants
+ //
+ // Purpose:
+ // Unique names for incoming and outgoing method statistics
+ //
+ // Elements:
+ // - c_EPTF_HTTP_Stat_nofIncRequests
+ // - c_EPTF_HTTP_Stat_nofIncOptionMessages
+ // - c_EPTF_HTTP_Stat_nofIncOptionMessages
+ // - c_EPTF_HTTP_Stat_nofIncHeadMessages
+ // - c_EPTF_HTTP_Stat_nofIncPostMessages
+ // - c_EPTF_HTTP_Stat_nofIncPutMessages
+ // - c_EPTF_HTTP_Stat_nofIncDeleteMessages
+ // - c_EPTF_HTTP_Stat_nofIncTraceMessages
+ // - c_EPTF_HTTP_Stat_nofIncConnectMessages
+ //
+ // - c_EPTF_HTTP_Stat_nofOutRequests
+ // - c_EPTF_HTTP_Stat_nofOutOptionMessages
+ // - c_EPTF_HTTP_Stat_nofOutOptionMessages
+ // - c_EPTF_HTTP_Stat_nofOutHeadMessages
+ // - c_EPTF_HTTP_Stat_nofOutPostMessages
+ // - c_EPTF_HTTP_Stat_nofOutPutMessages
+ // - c_EPTF_HTTP_Stat_nofOutDeleteMessages
+ // - c_EPTF_HTTP_Stat_nofOutTraceMessages
+ // - c_EPTF_HTTP_Stat_nofOutConnectMessages
+ //
+ // Detailed Comments:
+ // -
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const charstring c_EPTF_HTTP_Stat_nofIncRequests := "HTTP: Number of incoming Requests";
+ const charstring c_EPTF_HTTP_Stat_nofIncOptionMessages := "HTTP: Number of incoming OPTION Messages";
+ const charstring c_EPTF_HTTP_Stat_nofIncGetMessages := "HTTP: Number of incoming GET Messages";
+ const charstring c_EPTF_HTTP_Stat_nofIncHeadMessages := "HTTP: Number of incoming HEAD Messages";
+ const charstring c_EPTF_HTTP_Stat_nofIncPostMessages := "HTTP: Number of incoming POST Messages";
+ const charstring c_EPTF_HTTP_Stat_nofIncPutMessages := "HTTP: Number of incoming PUT Messages";
+ const charstring c_EPTF_HTTP_Stat_nofIncDeleteMessages := "HTTP: Number incoming of DELETE Messages";
+ const charstring c_EPTF_HTTP_Stat_nofIncTraceMessages := "HTTP: Number of incoming TRACE Messages";
+ const charstring c_EPTF_HTTP_Stat_nofIncConnectMessages := "HTTP: Number of incoming CONNECT Messages";
+
+ const charstring c_EPTF_HTTP_Stat_nofOutRequests := "HTTP: Number of outgoing Requests";
+ const charstring c_EPTF_HTTP_Stat_nofOutOptionMessages := "HTTP: Number of outgoing OPTION Messages";
+ const charstring c_EPTF_HTTP_Stat_nofOutGetMessages := "HTTP: Number of outgoing GET Messages";
+ const charstring c_EPTF_HTTP_Stat_nofOutHeadMessages := "HTTP: Number of outgoing HEAD Messages";
+ const charstring c_EPTF_HTTP_Stat_nofOutPostMessages := "HTTP: Number of outgoing POST Messages";
+ const charstring c_EPTF_HTTP_Stat_nofOutPutMessages := "HTTP: Number of outgoing PUT Messages";
+ const charstring c_EPTF_HTTP_Stat_nofOutDeleteMessages := "HTTP: Number outgoing of DELETE Messages";
+ const charstring c_EPTF_HTTP_Stat_nofOutTraceMessages := "HTTP: Number of outgoing TRACE Messages";
+ const charstring c_EPTF_HTTP_Stat_nofOutConnectMessages := "HTTP: Number of outgoing CONNECT Messages";
+
+///////////////////////////////////////////////////////////////////////////////
+ // Constant: Status code constants
+ //
+ // Purpose:
+ // Unique names for incoming and outgoing status code statistics
+ //
+ // Elements:
+ // - c_EPTF_HTTP_Stat_nofIncResponses
+ // - c_EPTF_HTTP_Stat_nofInc100StatusCode
+ // - c_EPTF_HTTP_Stat_nofInc101StatusCode
+ // - c_EPTF_HTTP_Stat_nofInc200StatusCode
+ // - c_EPTF_HTTP_Stat_nofInc201StatusCode
+ // - c_EPTF_HTTP_Stat_nofInc202StatusCode
+ // - c_EPTF_HTTP_Stat_nofInc203StatusCode
+ // - c_EPTF_HTTP_Stat_nofInc204StatusCode
+ // - c_EPTF_HTTP_Stat_nofInc205StatusCode
+ // - c_EPTF_HTTP_Stat_nofInc206StatusCode
+ // - c_EPTF_HTTP_Stat_nofInc300StatusCode
+ // - c_EPTF_HTTP_Stat_nofInc301StatusCode
+ // - c_EPTF_HTTP_Stat_nofInc302StatusCode
+ // - c_EPTF_HTTP_Stat_nofInc303StatusCode
+ // - c_EPTF_HTTP_Stat_nofInc304StatusCode
+ // - c_EPTF_HTTP_Stat_nofInc305StatusCode
+ // - c_EPTF_HTTP_Stat_nofInc306StatusCode
+ // - c_EPTF_HTTP_Stat_nofInc307StatusCode
+ // - c_EPTF_HTTP_Stat_nofInc400StatusCode
+ // - c_EPTF_HTTP_Stat_nofInc401StatusCode
+ // - c_EPTF_HTTP_Stat_nofInc402StatusCode
+ // - c_EPTF_HTTP_Stat_nofInc403StatusCode
+ // - c_EPTF_HTTP_Stat_nofInc404StatusCode
+ // - c_EPTF_HTTP_Stat_nofInc405StatusCode
+ // - c_EPTF_HTTP_Stat_nofInc406StatusCode
+ // - c_EPTF_HTTP_Stat_nofInc407StatusCode
+ // - c_EPTF_HTTP_Stat_nofInc408StatusCode
+ // - c_EPTF_HTTP_Stat_nofInc409StatusCode
+ // - c_EPTF_HTTP_Stat_nofInc410StatusCode
+ // - c_EPTF_HTTP_Stat_nofInc411StatusCode
+ // - c_EPTF_HTTP_Stat_nofInc412StatusCode
+ // - c_EPTF_HTTP_Stat_nofInc413StatusCode
+ // - c_EPTF_HTTP_Stat_nofInc414StatusCode
+ // - c_EPTF_HTTP_Stat_nofInc415StatusCode
+ // - c_EPTF_HTTP_Stat_nofInc416StatusCode
+ // - c_EPTF_HTTP_Stat_nofInc417StatusCode
+ // - c_EPTF_HTTP_Stat_nofInc500StatusCode
+ // - c_EPTF_HTTP_Stat_nofInc501StatusCode
+ // - c_EPTF_HTTP_Stat_nofInc502StatusCode
+ // - c_EPTF_HTTP_Stat_nofInc503StatusCode
+ // - c_EPTF_HTTP_Stat_nofInc504StatusCode
+ // - c_EPTF_HTTP_Stat_nofInc505StatusCode
+ //
+ // - c_EPTF_HTTP_Stat_nofOutResponses
+ // - c_EPTF_HTTP_Stat_nofOut100StatusCode
+ // - c_EPTF_HTTP_Stat_nofOut101StatusCode
+ // - c_EPTF_HTTP_Stat_nofOut200StatusCode
+ // - c_EPTF_HTTP_Stat_nofOut201StatusCode
+ // - c_EPTF_HTTP_Stat_nofOut202StatusCode
+ // - c_EPTF_HTTP_Stat_nofOut203StatusCode
+ // - c_EPTF_HTTP_Stat_nofOut204StatusCode
+ // - c_EPTF_HTTP_Stat_nofOut205StatusCode
+ // - c_EPTF_HTTP_Stat_nofOut206StatusCode
+ // - c_EPTF_HTTP_Stat_nofOut300StatusCode
+ // - c_EPTF_HTTP_Stat_nofOut301StatusCode
+ // - c_EPTF_HTTP_Stat_nofOut302StatusCode
+ // - c_EPTF_HTTP_Stat_nofOut303StatusCode
+ // - c_EPTF_HTTP_Stat_nofOut304StatusCode
+ // - c_EPTF_HTTP_Stat_nofOut305StatusCode
+ // - c_EPTF_HTTP_Stat_nofOut306StatusCode
+ // - c_EPTF_HTTP_Stat_nofOut307StatusCode
+ // - c_EPTF_HTTP_Stat_nofOut400StatusCode
+ // - c_EPTF_HTTP_Stat_nofOut401StatusCode
+ // - c_EPTF_HTTP_Stat_nofOut402StatusCode
+ // - c_EPTF_HTTP_Stat_nofOut403StatusCode
+ // - c_EPTF_HTTP_Stat_nofOut404StatusCode
+ // - c_EPTF_HTTP_Stat_nofOut405StatusCode
+ // - c_EPTF_HTTP_Stat_nofOut406StatusCode
+ // - c_EPTF_HTTP_Stat_nofOut407StatusCode
+ // - c_EPTF_HTTP_Stat_nofOut408StatusCode
+ // - c_EPTF_HTTP_Stat_nofOut409StatusCode
+ // - c_EPTF_HTTP_Stat_nofOut410StatusCode
+ // - c_EPTF_HTTP_Stat_nofOut411StatusCode
+ // - c_EPTF_HTTP_Stat_nofOut412StatusCode
+ // - c_EPTF_HTTP_Stat_nofOut413StatusCode
+ // - c_EPTF_HTTP_Stat_nofOut414StatusCode
+ // - c_EPTF_HTTP_Stat_nofOut415StatusCode
+ // - c_EPTF_HTTP_Stat_nofOut416StatusCode
+ // - c_EPTF_HTTP_Stat_nofOut417StatusCode
+ // - c_EPTF_HTTP_Stat_nofOut500StatusCode
+ // - c_EPTF_HTTP_Stat_nofOut501StatusCode
+ // - c_EPTF_HTTP_Stat_nofOut502StatusCode
+ // - c_EPTF_HTTP_Stat_nofOut503StatusCode
+ // - c_EPTF_HTTP_Stat_nofOut504StatusCode
+ // - c_EPTF_HTTP_Stat_nofOut505StatusCode
+ //
+ // Detailed Comments:
+ // -
+ //
+///////////////////////////////////////////////////////////////////////////////
+ const charstring c_EPTF_HTTP_Stat_nofIncResponses := "HTTP: Number of incoming responses"
+ const charstring c_EPTF_HTTP_Stat_nofInc100StatusCode := "HTTP: Number of incoming 100 Status Codes"
+ const charstring c_EPTF_HTTP_Stat_nofInc101StatusCode := "HTTP: Number of incoming 101 Status Codes"
+ const charstring c_EPTF_HTTP_Stat_nofInc200StatusCode := "HTTP: Number of incoming 200 Status Codes"
+ const charstring c_EPTF_HTTP_Stat_nofInc201StatusCode := "HTTP: Number of incoming 201 Status Codes"
+ const charstring c_EPTF_HTTP_Stat_nofInc202StatusCode := "HTTP: Number of incoming 202 Status Codes"
+ const charstring c_EPTF_HTTP_Stat_nofInc203StatusCode := "HTTP: Number of incoming 203 Status Codes"
+ const charstring c_EPTF_HTTP_Stat_nofInc204StatusCode := "HTTP: Number of incoming 204 Status Codes"
+ const charstring c_EPTF_HTTP_Stat_nofInc205StatusCode := "HTTP: Number of incoming 205 Status Codes"
+ const charstring c_EPTF_HTTP_Stat_nofInc206StatusCode := "HTTP: Number of incoming 206 Status Codes"
+ const charstring c_EPTF_HTTP_Stat_nofInc300StatusCode := "HTTP: Number of incoming 300 Status Codes"
+ const charstring c_EPTF_HTTP_Stat_nofInc301StatusCode := "HTTP: Number of incoming 301 Status Codes"
+ const charstring c_EPTF_HTTP_Stat_nofInc302StatusCode := "HTTP: Number of incoming 302 Status Codes"
+ const charstring c_EPTF_HTTP_Stat_nofInc303StatusCode := "HTTP: Number of incoming 303 Status Codes"
+ const charstring c_EPTF_HTTP_Stat_nofInc304StatusCode := "HTTP: Number of incoming 304 Status Codes"
+ const charstring c_EPTF_HTTP_Stat_nofInc305StatusCode := "HTTP: Number of incoming 305 Status Codes"
+ const charstring c_EPTF_HTTP_Stat_nofInc306StatusCode := "HTTP: Number of incoming 306 Status Codes"
+ const charstring c_EPTF_HTTP_Stat_nofInc307StatusCode := "HTTP: Number of incoming 307 Status Codes"
+ const charstring c_EPTF_HTTP_Stat_nofInc400StatusCode := "HTTP: Number of incoming 400 Status Codes"
+ const charstring c_EPTF_HTTP_Stat_nofInc401StatusCode := "HTTP: Number of incoming 401 Status Codes"
+ const charstring c_EPTF_HTTP_Stat_nofInc402StatusCode := "HTTP: Number of incoming 402 Status Codes"
+ const charstring c_EPTF_HTTP_Stat_nofInc403StatusCode := "HTTP: Number of incoming 403 Status Codes"
+ const charstring c_EPTF_HTTP_Stat_nofInc404StatusCode := "HTTP: Number of incoming 404 Status Codes"
+ const charstring c_EPTF_HTTP_Stat_nofInc405StatusCode := "HTTP: Number of incoming 405 Status Codes"
+ const charstring c_EPTF_HTTP_Stat_nofInc406StatusCode := "HTTP: Number of incoming 406 Status Codes"
+ const charstring c_EPTF_HTTP_Stat_nofInc407StatusCode := "HTTP: Number of incoming 407 Status Codes"
+ const charstring c_EPTF_HTTP_Stat_nofInc408StatusCode := "HTTP: Number of incoming 408 Status Codes"
+ const charstring c_EPTF_HTTP_Stat_nofInc409StatusCode := "HTTP: Number of incoming 409 Status Codes"
+ const charstring c_EPTF_HTTP_Stat_nofInc410StatusCode := "HTTP: Number of incoming 410 Status Codes"
+ const charstring c_EPTF_HTTP_Stat_nofInc411StatusCode := "HTTP: Number of incoming 411 Status Codes"
+ const charstring c_EPTF_HTTP_Stat_nofInc412StatusCode := "HTTP: Number of incoming 412 Status Codes"
+ const charstring c_EPTF_HTTP_Stat_nofInc413StatusCode := "HTTP: Number of incoming 413 Status Codes"
+ const charstring c_EPTF_HTTP_Stat_nofInc414StatusCode := "HTTP: Number of incoming 414 Status Codes"
+ const charstring c_EPTF_HTTP_Stat_nofInc415StatusCode := "HTTP: Number of incoming 415 Status Codes"
+ const charstring c_EPTF_HTTP_Stat_nofInc416StatusCode := "HTTP: Number of incoming 416 Status Codes"
+ const charstring c_EPTF_HTTP_Stat_nofInc417StatusCode := "HTTP: Number of incoming 417 Status Codes"
+ const charstring c_EPTF_HTTP_Stat_nofInc500StatusCode := "HTTP: Number of incoming 500 Status Codes"
+ const charstring c_EPTF_HTTP_Stat_nofInc501StatusCode := "HTTP: Number of incoming 501 Status Codes"
+ const charstring c_EPTF_HTTP_Stat_nofInc502StatusCode := "HTTP: Number of incoming 502 Status Codes"
+ const charstring c_EPTF_HTTP_Stat_nofInc503StatusCode := "HTTP: Number of incoming 503 Status Codes"
+ const charstring c_EPTF_HTTP_Stat_nofInc504StatusCode := "HTTP: Number of incoming 504 Status Codes"
+ const charstring c_EPTF_HTTP_Stat_nofInc505StatusCode := "HTTP: Number of incoming 505 Status Codes"
+
+ const charstring c_EPTF_HTTP_Stat_nofOutResponses := "HTTP: Number of outgoing responses"
+ const charstring c_EPTF_HTTP_Stat_nofOut100StatusCode := "HTTP: Number of outgoing 100 Status Codes"
+ const charstring c_EPTF_HTTP_Stat_nofOut101StatusCode := "HTTP: Number of outgoing 101 Status Codes"
+ const charstring c_EPTF_HTTP_Stat_nofOut200StatusCode := "HTTP: Number of outgoing 200 Status Codes"
+ const charstring c_EPTF_HTTP_Stat_nofOut201StatusCode := "HTTP: Number of outgoing 201 Status Codes"
+ const charstring c_EPTF_HTTP_Stat_nofOut202StatusCode := "HTTP: Number of outgoing 202 Status Codes"
+ const charstring c_EPTF_HTTP_Stat_nofOut203StatusCode := "HTTP: Number of outgoing 203 Status Codes"
+ const charstring c_EPTF_HTTP_Stat_nofOut204StatusCode := "HTTP: Number of outgoing 204 Status Codes"
+ const charstring c_EPTF_HTTP_Stat_nofOut205StatusCode := "HTTP: Number of outgoing 205 Status Codes"
+ const charstring c_EPTF_HTTP_Stat_nofOut206StatusCode := "HTTP: Number of outgoing 206 Status Codes"
+ const charstring c_EPTF_HTTP_Stat_nofOut300StatusCode := "HTTP: Number of outgoing 300 Status Codes"
+ const charstring c_EPTF_HTTP_Stat_nofOut301StatusCode := "HTTP: Number of outgoing 301 Status Codes"
+ const charstring c_EPTF_HTTP_Stat_nofOut302StatusCode := "HTTP: Number of outgoing 302 Status Codes"
+ const charstring c_EPTF_HTTP_Stat_nofOut303StatusCode := "HTTP: Number of outgoing 303 Status Codes"
+ const charstring c_EPTF_HTTP_Stat_nofOut304StatusCode := "HTTP: Number of outgoing 304 Status Codes"
+ const charstring c_EPTF_HTTP_Stat_nofOut305StatusCode := "HTTP: Number of outgoing 305 Status Codes"
+ const charstring c_EPTF_HTTP_Stat_nofOut306StatusCode := "HTTP: Number of outgoing 306 Status Codes"
+ const charstring c_EPTF_HTTP_Stat_nofOut307StatusCode := "HTTP: Number of outgoing 307 Status Codes"
+ const charstring c_EPTF_HTTP_Stat_nofOut400StatusCode := "HTTP: Number of outgoing 400 Status Codes"
+ const charstring c_EPTF_HTTP_Stat_nofOut401StatusCode := "HTTP: Number of outgoing 401 Status Codes"
+ const charstring c_EPTF_HTTP_Stat_nofOut402StatusCode := "HTTP: Number of outgoing 402 Status Codes"
+ const charstring c_EPTF_HTTP_Stat_nofOut403StatusCode := "HTTP: Number of outgoing 403 Status Codes"
+ const charstring c_EPTF_HTTP_Stat_nofOut404StatusCode := "HTTP: Number of outgoing 404 Status Codes"
+ const charstring c_EPTF_HTTP_Stat_nofOut405StatusCode := "HTTP: Number of outgoing 405 Status Codes"
+ const charstring c_EPTF_HTTP_Stat_nofOut406StatusCode := "HTTP: Number of outgoing 406 Status Codes"
+ const charstring c_EPTF_HTTP_Stat_nofOut407StatusCode := "HTTP: Number of outgoing 407 Status Codes"
+ const charstring c_EPTF_HTTP_Stat_nofOut408StatusCode := "HTTP: Number of outgoing 408 Status Codes"
+ const charstring c_EPTF_HTTP_Stat_nofOut409StatusCode := "HTTP: Number of outgoing 409 Status Codes"
+ const charstring c_EPTF_HTTP_Stat_nofOut410StatusCode := "HTTP: Number of outgoing 410 Status Codes"
+ const charstring c_EPTF_HTTP_Stat_nofOut411StatusCode := "HTTP: Number of outgoing 411 Status Codes"
+ const charstring c_EPTF_HTTP_Stat_nofOut412StatusCode := "HTTP: Number of outgoing 412 Status Codes"
+ const charstring c_EPTF_HTTP_Stat_nofOut413StatusCode := "HTTP: Number of outgoing 413 Status Codes"
+ const charstring c_EPTF_HTTP_Stat_nofOut414StatusCode := "HTTP: Number of outgoing 414 Status Codes"
+ const charstring c_EPTF_HTTP_Stat_nofOut415StatusCode := "HTTP: Number of outgoing 415 Status Codes"
+ const charstring c_EPTF_HTTP_Stat_nofOut416StatusCode := "HTTP: Number of outgoing 416 Status Codes"
+ const charstring c_EPTF_HTTP_Stat_nofOut417StatusCode := "HTTP: Number of outgoing 417 Status Codes"
+ const charstring c_EPTF_HTTP_Stat_nofOut500StatusCode := "HTTP: Number of outgoing 500 Status Codes"
+ const charstring c_EPTF_HTTP_Stat_nofOut501StatusCode := "HTTP: Number of outgoing 501 Status Codes"
+ const charstring c_EPTF_HTTP_Stat_nofOut502StatusCode := "HTTP: Number of outgoing 502 Status Codes"
+ const charstring c_EPTF_HTTP_Stat_nofOut503StatusCode := "HTTP: Number of outgoing 503 Status Codes"
+ const charstring c_EPTF_HTTP_Stat_nofOut504StatusCode := "HTTP: Number of outgoing 504 Status Codes"
+ const charstring c_EPTF_HTTP_Stat_nofOut505StatusCode := "HTTP: Number of outgoing 505 Status Codes"
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// Group: EPTF_HTTP_Logging
+//
+// Purpose:
+// Functions of the EPTF HTTP Logging
+//
+///////////////////////////////////////////////////////////////////////////////
+group EPTF_HTTP_Logging
+{
+///////////////////////////////////////////////////////////////////////////////
+ // Constant: c_EPTF_HTTP_loggingEventClasses
+ //
+ // Purpose:
+ // list of logging event class names used on the EPTF HTTP component
+ //
+ // Detailed Comments:
+ // <EPTF_Logging_EventClassPrefixList> { "Error", "Warning", "Debug" }
+///////////////////////////////////////////////////////////////////////////////
+ const EPTF_Logging_EventClassPrefixList c_EPTF_HTTP_loggingEventClasses := { "Error", "Warning", "Debug" };
+
+///////////////////////////////////////////////////////////////////////////////
+ // Constant: c_EPTF_HTTP_Transport_loggingClassIdx_Error
+ //
+ // Purpose:
+ // logging class index for Error
+ //
+ // Detailed Comments:
+ // *0*
+///////////////////////////////////////////////////////////////////////////////
+ const integer c_EPTF_HTTP_loggingClassIdx_Error := 0;
+///////////////////////////////////////////////////////////////////////////////
+ // Constant: c_EPTF_HTTP_Transport_loggingClassIdx_Warning
+ //
+ // Purpose:
+ // logging class index for Warning
+ //
+ // Detailed Comments:
+ // *1*
+///////////////////////////////////////////////////////////////////////////////
+ const integer c_EPTF_HTTP_loggingClassIdx_Warning := 1;
+///////////////////////////////////////////////////////////////////////////////
+ // Constant: c_EPTF_HTTP_Transport_loggingClassIdx_Debug
+ //
+ // Purpose:
+ // logging class index for Debug
+ //
+ // Detailed Comments:
+ // *2*
+///////////////////////////////////////////////////////////////////////////////
+ const integer c_EPTF_HTTP_loggingClassIdx_Debug := 2;
+}
+
+///////////////////////////////////////////////////////////
+// Type: fcb_EPTF_HTTP_messageReceivedHook
+//
+// Purpose: Message hook to HTTP message received processing.
+//
+///////////////////////////////////////////////////////////
+type function fcb_EPTF_HTTP_messageReceivedHook(in integer pl_eIdx, in HTTPMessage pl_httpMessage) runs on self;
+
+}//end of module
+with {
+extension "version <RnXnn>"
+}
+
diff --git a/src/LoadGen/EPTF_HTTP_Functions.ttcn b/src/LoadGen/EPTF_HTTP_Functions.ttcn
new file mode 100644
index 0000000..9c52dab
--- /dev/null
+++ b/src/LoadGen/EPTF_HTTP_Functions.ttcn
@@ -0,0 +1,7012 @@
+///////////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2000-2018 Ericsson Telecom AB
+//
+// All rights reserved. This program and the accompanying materials
+// are made available under the terms of the Eclipse Public License v1.0
+// which accompanies this distribution, and is available at
+// http://www.eclipse.org/legal/epl-v10.html
+///////////////////////////////////////////////////////////////////////////////
+//
+// File: EPTF_HTTP_Functions.ttcn
+// Rev: <RnXnn>
+// Prodnr: CNL 113 618
+// Updated: 2015-05-20
+// Contact: http://ttcn.ericsson.se
+///////////////////////////////////////////////////////////////////////////////
+
+///////////////////////////////////////////////////////////////////////////////
+// Module: EPTF_HTTP_Functions
+//
+// Purpose:
+// This module contains the functions of the EPTF HTTP application id
+//
+// Module Parameters:
+// See <EPTF_HTTP_Definitions>
+//
+// Module depends on:
+// <EPTF_CLL_Common_Definitions>
+//
+// <EPTF_CLL_Base_Functions>
+//
+// <EPTF_CLL_LGenBase_Definitions>
+//
+// <EPTF_CLL_LGenBase_Functions>
+//
+// <EPTF_CLL_LGenBase_ConfigFunctions>
+//
+// <EPTF_CLL_LGenBase_EventHandlingFunctions>
+//
+// <EPTF_CLL_HashMapStr2Int_Functions>
+//
+// <EPTF_CLL_HashMapOct2Int_Functions>
+//
+// <EPTF_CLL_Variable_Functions>
+//
+// <EPTF_CLL_Logging_Functions>
+//
+// <EPTF_CLL_Logging_Definitions>
+//
+// <EPTF_HTTP_Definitions>
+//
+// <HTTPmsg_Types>
+//
+// <TCCSecurity_Functions>
+//
+// <TCCDateTime_Functions>
+// Current Owner:
+// EAKOPER
+//
+// Last Review Date:
+// 2012-10-24
+//
+///////////////////////////////////////////////////////////////////////////////
+module EPTF_HTTP_Functions {
+
+//=============================================================================
+// Import Part
+//=============================================================================
+import from EPTF_CLL_Common_Definitions all;
+import from EPTF_CLL_Base_Functions all;
+import from EPTF_CLL_LGenBase_Definitions all;
+import from EPTF_CLL_LGenBase_Functions all;
+import from EPTF_CLL_LGenBase_ConfigFunctions all;
+import from EPTF_CLL_LGenBase_EventHandlingFunctions all;
+import from EPTF_CLL_LGenBase_TemplateFunctions all;
+import from EPTF_CLL_HashMapStr2Int_Functions all;
+import from EPTF_CLL_HashMapOct2Int_Functions all;
+import from EPTF_CLL_Variable_Functions all;
+import from EPTF_CLL_Logging_Functions all;
+import from EPTF_CLL_Logging_Definitions all;
+import from EPTF_HTTP_Definitions all;
+import from HTTPmsg_Types all;
+
+import from TCCSecurity_Functions all;
+import from TCCDateTime_Functions all;
+import from TCCConversion_Functions all;
+
+//=============================================================================
+// Functions
+//=============================================================================
+
+///////////////////////////////////////////////////////////////////////////////
+// Group: EPTF_HTTP_PublicFunctions
+//
+// Purpose:
+// The functions of the EPTF HTTP Public Functions
+//
+///////////////////////////////////////////////////////////////////////////////
+group EPTF_HTTP_PublicFunctions{
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_init
+ //
+ // Purpose:
+ // Function to initialize HTTP behaviour
+ //
+ // Parameters:
+ // pl_selfName - *in* *charstring* - the components self name
+ // pl_selfId - *in* *integer* - component self id
+ // pl_entityNamePrefix - *in* *charstring* - entity name prefix
+ // pl_numEntities - *in* *integer* - number of entities
+ // pl_bind - *in* <EPTF_LGenBase_BehaviorContextBinder_FT> - behaviour
+ // context bind callback function
+ // pl_reset - *in* <EPTF_LGenBase_BehaviorContextHandler_FT> - behaviour
+ // context reset callback function
+ // pl_unbind - *in* <EPTF_LGenBase_BehaviorContextHandler_FT> - behaviour
+ // context unbind callback function
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_init(
+ in charstring pl_selfName,
+ in integer pl_selfId,
+ in charstring pl_entityNamePrefix,
+ in integer pl_numEntities := 0,
+ in EPTF_LGenBase_BehaviorContextBinder_FT pl_bind := refers(f_EPTF_HTTP_bindEntity4Behavior),
+ in EPTF_LGenBase_BehaviorContextHandler_FT pl_reset := refers(f_EPTF_HTTP_resetEntity4Behavior),
+ in EPTF_LGenBase_BehaviorContextHandler_FT pl_unbind := refers(f_EPTF_HTTP_unbindEntity4Behavior))
+ runs on EPTF_HTTP_LGen_CT
+ {
+ if (not v_EPTF_HTTP_initialized)
+ {
+ f_EPTF_Base_assert(%definitionId &
+ ": tsp_EPTF_HTTP_maxNumberOfEntities must be set to at least: " &
+ int2str(f_EPTF_LGenBase_entityCount()),
+ tsp_EPTF_HTTP_maxNumberOfEntities > f_EPTF_LGenBase_entityCount());
+
+ f_EPTF_HTTP_initializeExtendedComponents( // LGenbase, Variable, Logging
+ pl_selfName,pl_numEntities,pl_entityNamePrefix);
+
+ f_EPTF_Base_registerCleanup(refers(f_EPTF_HTTP_cleanup_CT));
+
+ v_EPTF_HTTP_loggingMaskId :=
+ f_EPTF_Logging_registerComponentMasks(
+ tsp_EPTF_HTTP_loggingComponentMask,
+ c_EPTF_HTTP_loggingEventClasses,
+ EPTF_Logging_CLL);
+
+ if (tsp_EPTF_HTTP_loggingEnable)
+ {
+ f_EPTF_Logging_enableLocalMask(
+ v_EPTF_HTTP_loggingMaskId,
+ c_EPTF_HTTP_loggingClassIdx_Debug);
+ }
+ else
+ {
+ f_EPTF_Logging_disableLocalMask(
+ v_EPTF_HTTP_loggingMaskId,
+ c_EPTF_HTTP_loggingClassIdx_Debug);
+ }
+
+ v_EPTF_HTTP_selfName := pl_selfName;
+ v_EPTF_HTTP_selfId := pl_selfId;
+
+ v_EPTF_HTTP_EntityOffset := pl_selfId * tsp_EPTF_HTTP_maxNumberOfEntities;
+
+ f_EPTF_HTTP_debug(%definitionId & ": Entity offset: " &
+ int2str(v_EPTF_HTTP_EntityOffset));
+
+ vf_EPTF_HTTP_sendRequest := refers(f_EPTF_HTTP_defaultSendRequest);
+ vf_EPTF_HTTP_connectionOpen := refers(f_EPTF_HTTP_defaultConnectionOpen);
+ vf_EPTF_HTTP_connectionClose := refers(f_EPTF_HTTP_defaultConnectionClose);
+ vf_EPTF_HTTP_connectionHalfClose := refers(f_EPTF_HTTP_defaultConnectionHalfClose);
+ vf_EPTF_HTTP_closePortOfUser := refers(f_EPTF_HTTP_defaultFreePortOfUser);
+ vf_EPTF_HTTP_freePortOfUser := refers(f_EPTF_HTTP_defaultFreePortOfUser);
+
+ vf_EPTF_HTTP_closePort := refers(f_EPTF_HTTP_defaultClosePort);
+
+ vf_EPTF_HTTP_sendResponse := refers(f_EPTF_HTTP_defaultSendResponse);
+ vf_EPTF_HTTP_listen := refers(f_EPTF_HTTP_defaultListen);
+
+ vf_EPTF_HTTP_searchContext := refers(f_EPTF_HTTP_defaultSearch);
+ vf_EPTF_HTTP_searchContext4Event := refers(f_EPTF_HTTP_defaultSearch);
+ vf_EPTF_HTTP_searchContext4Error := refers(f_EPTF_HTTP_defaultSearch);
+
+ v_EPTF_HTTP_myBIdx := f_EPTF_LGenBase_declareBehaviorType(
+ c_EPTF_HTTP_myBName,
+ -1,
+ pl_reset,
+ pl_bind,
+ pl_unbind
+ );
+
+ v_EPTF_HTTP_charDB := f_EPTF_str2int_HashMap_New(c_EPTF_HTTP_HashMap_charDatabase);
+ v_EPTF_HTTP_octDB := f_EPTF_oct2int_HashMap_New(c_EPTF_HTTP_HashMap_octDatabase);
+
+ // set event dispatch mechanism
+ select (tsp_EPTF_HTTP_dispatchLevel) {
+ case (Class) { vf_EPTF_HTTP_dispatchFn := refers(f_EPTF_HTTP_reportClassEvent); }
+ case (Detailed) { vf_EPTF_HTTP_dispatchFn := refers(f_EPTF_HTTP_reportDetailedEvent); }
+ case else { }
+ }
+
+
+ f_EPTF_HTTP_declareStepsAndEvent();
+
+ f_EPTF_HTTP_initStats();
+
+ v_EPTF_HTTP_authData := c_EPTF_HTTP_initAuthData;
+
+ f_EPTF_HTTP_generateNonceValues(tsp_EPTF_HTTP_nofNonceValues, v_EPTF_HTTP_authData.nonceValues)
+
+ //Declare external template types
+ v_EPTF_HTTP_extTemplType_customHeader := f_EPTF_LGenBase_declareTemplateType(
+ {behaviourType:=c_EPTF_HTTP_myBName, templateName:=c_EPTF_HTTP_templName_CustomHeader},
+ {"method"}, {"requestURI","versionMajor","versionMinor","customHeader","contentLength"} );
+
+ v_EPTF_HTTP_extTemplType_customHeaderResponse := f_EPTF_LGenBase_declareTemplateType(
+ {behaviourType:=c_EPTF_HTTP_myBName, templateName:=c_EPTF_HTTP_templName_CustomHeaderResponse},
+ {}, {"status","versionMajor","versionMinor","contentLength"} );
+
+ v_EPTF_HTTP_extTemplType_customBody := f_EPTF_LGenBase_declareTemplateType(
+ {behaviourType:=c_EPTF_HTTP_myBName, templateName:=c_EPTF_HTTP_templName_CustomBody},
+ {}, {} );
+
+ v_EPTF_HTTP_initialized := true;
+ }
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_getContextIndex
+ //
+ // Purpose:
+ // Function to add new entity
+ //
+ // Parameters:
+ // pl_eIdx - *in* *integer* - entity index
+ //
+ // Return Value:
+ // *integer* - index of the entity context
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_getContextIndex(
+ in integer pl_eIdx)
+ runs on EPTF_HTTP_LGen_CT
+ return integer
+ {
+ return f_EPTF_LGenBase_getBehaviorCtxItem(pl_eIdx, v_EPTF_HTTP_myBIdx, 0);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_initStats
+ //
+ // Purpose:
+ // Function to initialize HTTP statistics
+ //
+ // Parameters:
+ // -
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_initStats()
+ runs on EPTF_HTTP_LGen_CT
+ {
+ var charstring vl_prefix :=
+ v_EPTF_HTTP_selfName & "." & int2str(v_EPTF_HTTP_selfId) & ".";
+
+ // incoming methods
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofIncRequests, 0,
+ v_EPTF_HTTP_stats.incoming.requests_k);
+ f_EPTF_Var_setSubsCanAdjust(v_EPTF_HTTP_stats.incoming.requests_k, false)
+
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofIncOptionMessages, 0,
+ v_EPTF_HTTP_stats.incoming.method.options_k);
+
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofIncGetMessages, 0,
+ v_EPTF_HTTP_stats.incoming.method.get_k);
+
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofIncHeadMessages, 0,
+ v_EPTF_HTTP_stats.incoming.method.head_k);
+
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofIncPostMessages, 0,
+ v_EPTF_HTTP_stats.incoming.method.post_k);
+
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofIncPutMessages, 0,
+ v_EPTF_HTTP_stats.incoming.method.put_k);
+
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofIncDeleteMessages, 0,
+ v_EPTF_HTTP_stats.incoming.method.delete_k);
+
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofIncTraceMessages, 0,
+ v_EPTF_HTTP_stats.incoming.method.trace_k);
+
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofIncConnectMessages, 0,
+ v_EPTF_HTTP_stats.incoming.method.connect_k);
+
+ // outgoing methods
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofOutRequests, 0,
+ v_EPTF_HTTP_stats.outgoing.requests_k);
+
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofOutOptionMessages, 0,
+ v_EPTF_HTTP_stats.outgoing.method.options_k);
+
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofOutGetMessages, 0,
+ v_EPTF_HTTP_stats.outgoing.method.get_k);
+
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofOutHeadMessages, 0,
+ v_EPTF_HTTP_stats.outgoing.method.head_k);
+
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofOutPostMessages, 0,
+ v_EPTF_HTTP_stats.outgoing.method.post_k);
+
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofOutPutMessages, 0,
+ v_EPTF_HTTP_stats.outgoing.method.put_k);
+
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofOutDeleteMessages, 0,
+ v_EPTF_HTTP_stats.outgoing.method.delete_k);
+
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofOutTraceMessages, 0,
+ v_EPTF_HTTP_stats.outgoing.method.trace_k);
+
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofOutConnectMessages, 0,
+ v_EPTF_HTTP_stats.outgoing.method.connect_k);
+
+ // incoming status codes
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofIncResponses, 0,
+ v_EPTF_HTTP_stats.incoming.responses_k);
+
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofInc100StatusCode, 0,
+ v_EPTF_HTTP_stats.incoming.status.code100_k);
+
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofInc101StatusCode, 0,
+ v_EPTF_HTTP_stats.incoming.status.code101_k);
+
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofInc200StatusCode, 0,
+ v_EPTF_HTTP_stats.incoming.status.code200_k);
+
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofInc201StatusCode, 0,
+ v_EPTF_HTTP_stats.incoming.status.code201_k);
+
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofInc202StatusCode, 0,
+ v_EPTF_HTTP_stats.incoming.status.code202_k);
+
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofInc203StatusCode, 0,
+ v_EPTF_HTTP_stats.incoming.status.code203_k);
+
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofInc204StatusCode, 0,
+ v_EPTF_HTTP_stats.incoming.status.code204_k);
+
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofInc205StatusCode, 0,
+ v_EPTF_HTTP_stats.incoming.status.code205_k);
+
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofInc206StatusCode, 0,
+ v_EPTF_HTTP_stats.incoming.status.code206_k);
+
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofInc300StatusCode, 0,
+ v_EPTF_HTTP_stats.incoming.status.code300_k);
+
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofInc301StatusCode, 0,
+ v_EPTF_HTTP_stats.incoming.status.code301_k);
+
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofInc302StatusCode, 0,
+ v_EPTF_HTTP_stats.incoming.status.code302_k);
+
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofInc303StatusCode, 0,
+ v_EPTF_HTTP_stats.incoming.status.code303_k);
+
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofInc304StatusCode, 0,
+ v_EPTF_HTTP_stats.incoming.status.code304_k);
+
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofInc305StatusCode, 0,
+ v_EPTF_HTTP_stats.incoming.status.code305_k);
+
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofInc306StatusCode, 0,
+ v_EPTF_HTTP_stats.incoming.status.code306_k);
+
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofInc307StatusCode, 0,
+ v_EPTF_HTTP_stats.incoming.status.code307_k);
+
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofInc400StatusCode, 0,
+ v_EPTF_HTTP_stats.incoming.status.code400_k);
+
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofInc401StatusCode, 0,
+ v_EPTF_HTTP_stats.incoming.status.code401_k);
+
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofInc402StatusCode, 0,
+ v_EPTF_HTTP_stats.incoming.status.code402_k);
+
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofInc403StatusCode, 0,
+ v_EPTF_HTTP_stats.incoming.status.code403_k);
+
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofInc404StatusCode, 0,
+ v_EPTF_HTTP_stats.incoming.status.code404_k);
+
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofInc405StatusCode, 0,
+ v_EPTF_HTTP_stats.incoming.status.code405_k);
+
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofInc406StatusCode, 0,
+ v_EPTF_HTTP_stats.incoming.status.code406_k);
+
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofInc407StatusCode, 0,
+ v_EPTF_HTTP_stats.incoming.status.code407_k);
+
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofInc408StatusCode, 0,
+ v_EPTF_HTTP_stats.incoming.status.code408_k);
+
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofInc409StatusCode, 0,
+ v_EPTF_HTTP_stats.incoming.status.code409_k);
+
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofInc410StatusCode, 0,
+ v_EPTF_HTTP_stats.incoming.status.code410_k);
+
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofInc411StatusCode, 0,
+ v_EPTF_HTTP_stats.incoming.status.code411_k);
+
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofInc412StatusCode, 0,
+ v_EPTF_HTTP_stats.incoming.status.code412_k);
+
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofInc413StatusCode, 0,
+ v_EPTF_HTTP_stats.incoming.status.code413_k);
+
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofInc414StatusCode, 0,
+ v_EPTF_HTTP_stats.incoming.status.code414_k);
+
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofInc415StatusCode, 0,
+ v_EPTF_HTTP_stats.incoming.status.code415_k);
+
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofInc416StatusCode, 0,
+ v_EPTF_HTTP_stats.incoming.status.code416_k);
+
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofInc417StatusCode, 0,
+ v_EPTF_HTTP_stats.incoming.status.code417_k);
+
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofInc500StatusCode, 0,
+ v_EPTF_HTTP_stats.incoming.status.code500_k);
+
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofInc501StatusCode, 0,
+ v_EPTF_HTTP_stats.incoming.status.code501_k);
+
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofInc502StatusCode, 0,
+ v_EPTF_HTTP_stats.incoming.status.code502_k);
+
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofInc503StatusCode, 0,
+ v_EPTF_HTTP_stats.incoming.status.code503_k);
+
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofInc504StatusCode, 0,
+ v_EPTF_HTTP_stats.incoming.status.code504_k);
+
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofInc505StatusCode, 0,
+ v_EPTF_HTTP_stats.incoming.status.code505_k);
+
+ // outgoing status codes
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofOutResponses, 0,
+ v_EPTF_HTTP_stats.outgoing.responses_k);
+ f_EPTF_Var_setSubsCanAdjust(v_EPTF_HTTP_stats.outgoing.responses_k, false)
+
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofOut100StatusCode, 0,
+ v_EPTF_HTTP_stats.outgoing.status.code100_k);
+
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofOut101StatusCode, 0,
+ v_EPTF_HTTP_stats.outgoing.status.code101_k);
+
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofOut200StatusCode, 0,
+ v_EPTF_HTTP_stats.outgoing.status.code200_k);
+
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofOut201StatusCode, 0,
+ v_EPTF_HTTP_stats.outgoing.status.code201_k);
+
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofOut202StatusCode, 0,
+ v_EPTF_HTTP_stats.outgoing.status.code202_k);
+
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofOut203StatusCode, 0,
+ v_EPTF_HTTP_stats.outgoing.status.code203_k);
+
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofOut204StatusCode, 0,
+ v_EPTF_HTTP_stats.outgoing.status.code204_k);
+
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofOut205StatusCode, 0,
+ v_EPTF_HTTP_stats.outgoing.status.code205_k);
+
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofOut206StatusCode, 0,
+ v_EPTF_HTTP_stats.outgoing.status.code206_k);
+
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofOut300StatusCode, 0,
+ v_EPTF_HTTP_stats.outgoing.status.code300_k);
+
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofOut301StatusCode, 0,
+ v_EPTF_HTTP_stats.outgoing.status.code301_k);
+
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofOut302StatusCode, 0,
+ v_EPTF_HTTP_stats.outgoing.status.code302_k);
+
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofOut303StatusCode, 0,
+ v_EPTF_HTTP_stats.outgoing.status.code303_k);
+
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofOut304StatusCode, 0,
+ v_EPTF_HTTP_stats.outgoing.status.code304_k);
+
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofOut305StatusCode, 0,
+ v_EPTF_HTTP_stats.outgoing.status.code305_k);
+
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofOut306StatusCode, 0,
+ v_EPTF_HTTP_stats.outgoing.status.code306_k);
+
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofOut307StatusCode, 0,
+ v_EPTF_HTTP_stats.outgoing.status.code307_k);
+
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofOut400StatusCode, 0,
+ v_EPTF_HTTP_stats.outgoing.status.code400_k);
+
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofOut401StatusCode, 0,
+ v_EPTF_HTTP_stats.outgoing.status.code401_k);
+
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofOut402StatusCode, 0,
+ v_EPTF_HTTP_stats.outgoing.status.code402_k);
+
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofOut403StatusCode, 0,
+ v_EPTF_HTTP_stats.outgoing.status.code403_k);
+
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofOut404StatusCode, 0,
+ v_EPTF_HTTP_stats.outgoing.status.code404_k);
+
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofOut405StatusCode, 0,
+ v_EPTF_HTTP_stats.outgoing.status.code405_k);
+
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofOut406StatusCode, 0,
+ v_EPTF_HTTP_stats.outgoing.status.code406_k);
+
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofOut407StatusCode, 0,
+ v_EPTF_HTTP_stats.outgoing.status.code407_k);
+
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofOut408StatusCode, 0,
+ v_EPTF_HTTP_stats.outgoing.status.code408_k);
+
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofOut409StatusCode, 0,
+ v_EPTF_HTTP_stats.outgoing.status.code409_k);
+
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofOut410StatusCode, 0,
+ v_EPTF_HTTP_stats.outgoing.status.code410_k);
+
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofOut411StatusCode, 0,
+ v_EPTF_HTTP_stats.outgoing.status.code411_k);
+
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofOut412StatusCode, 0,
+ v_EPTF_HTTP_stats.outgoing.status.code412_k);
+
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofOut413StatusCode, 0,
+ v_EPTF_HTTP_stats.outgoing.status.code413_k);
+
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofOut414StatusCode, 0,
+ v_EPTF_HTTP_stats.outgoing.status.code414_k);
+
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofOut415StatusCode, 0,
+ v_EPTF_HTTP_stats.outgoing.status.code415_k);
+
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofOut416StatusCode, 0,
+ v_EPTF_HTTP_stats.outgoing.status.code416_k);
+
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofOut417StatusCode, 0,
+ v_EPTF_HTTP_stats.outgoing.status.code417_k);
+
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofOut500StatusCode, 0,
+ v_EPTF_HTTP_stats.outgoing.status.code500_k);
+
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofOut501StatusCode, 0,
+ v_EPTF_HTTP_stats.outgoing.status.code501_k);
+
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofOut502StatusCode, 0,
+ v_EPTF_HTTP_stats.outgoing.status.code502_k);
+
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofOut503StatusCode, 0,
+ v_EPTF_HTTP_stats.outgoing.status.code503_k);
+
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofOut504StatusCode, 0,
+ v_EPTF_HTTP_stats.outgoing.status.code504_k);
+
+ f_EPTF_Var_newInt(
+ vl_prefix & c_EPTF_HTTP_Stat_nofOut505StatusCode, 0,
+ v_EPTF_HTTP_stats.outgoing.status.code505_k);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_resetStats
+ //
+ // Purpose:
+ // Function to reset HTTP statistics
+ //
+ // Parameters:
+ // -
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_resetStats()
+ runs on EPTF_HTTP_LGen_CT
+ {
+ // incoming methods
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.incoming.requests_k,
+ { intVal := 0 });
+
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.incoming.method.options_k,
+ { intVal := 0 });
+
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.incoming.method.get_k,
+ { intVal := 0 });
+
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.incoming.method.head_k,
+ { intVal := 0 });
+
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.incoming.method.post_k,
+ { intVal := 0 });
+
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.incoming.method.put_k,
+ { intVal := 0 });
+
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.incoming.method.delete_k,
+ { intVal := 0 });
+
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.incoming.method.trace_k,
+ { intVal := 0 });
+
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.incoming.method.connect_k,
+ { intVal := 0 });
+
+ // outgoing methods
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.outgoing.requests_k,
+ { intVal := 0 });
+
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.outgoing.method.options_k,
+ { intVal := 0 });
+
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.outgoing.method.get_k,
+ { intVal := 0 });
+
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.outgoing.method.head_k,
+ { intVal := 0 });
+
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.outgoing.method.post_k,
+ { intVal := 0 });
+
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.outgoing.method.put_k,
+ { intVal := 0 });
+
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.outgoing.method.delete_k,
+ { intVal := 0 });
+
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.outgoing.method.trace_k,
+ { intVal := 0 });
+
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.outgoing.method.connect_k,
+ { intVal := 0 });
+
+ // incoming status codes
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.incoming.responses_k,
+ { intVal := 0 });
+
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.incoming.status.code100_k,
+ { intVal := 0 });
+
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.incoming.status.code101_k,
+ { intVal := 0 });
+
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.incoming.status.code200_k,
+ { intVal := 0 });
+
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.incoming.status.code201_k,
+ { intVal := 0 });
+
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.incoming.status.code202_k,
+ { intVal := 0 });
+
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.incoming.status.code203_k,
+ { intVal := 0 });
+
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.incoming.status.code204_k,
+ { intVal := 0 });
+
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.incoming.status.code205_k,
+ { intVal := 0 });
+
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.incoming.status.code206_k,
+ { intVal := 0 });
+
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.incoming.status.code300_k,
+ { intVal := 0 });
+
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.incoming.status.code301_k,
+ { intVal := 0 });
+
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.incoming.status.code302_k,
+ { intVal := 0 });
+
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.incoming.status.code303_k,
+ { intVal := 0 });
+
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.incoming.status.code304_k,
+ { intVal := 0 });
+
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.incoming.status.code305_k,
+ { intVal := 0 });
+
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.incoming.status.code306_k,
+ { intVal := 0 });
+
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.incoming.status.code307_k,
+ { intVal := 0 });
+
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.incoming.status.code400_k,
+ { intVal := 0 });
+
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.incoming.status.code401_k,
+ { intVal := 0 });
+
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.incoming.status.code402_k,
+ { intVal := 0 });
+
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.incoming.status.code403_k,
+ { intVal := 0 });
+
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.incoming.status.code404_k,
+ { intVal := 0 });
+
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.incoming.status.code405_k,
+ { intVal := 0 });
+
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.incoming.status.code406_k,
+ { intVal := 0 });
+
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.incoming.status.code407_k,
+ { intVal := 0 });
+
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.incoming.status.code408_k,
+ { intVal := 0 });
+
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.incoming.status.code409_k,
+ { intVal := 0 });
+
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.incoming.status.code410_k,
+ { intVal := 0 });
+
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.incoming.status.code411_k,
+ { intVal := 0 });
+
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.incoming.status.code412_k,
+ { intVal := 0 });
+
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.incoming.status.code413_k,
+ { intVal := 0 });
+
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.incoming.status.code414_k,
+ { intVal := 0 });
+
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.incoming.status.code415_k,
+ { intVal := 0 });
+
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.incoming.status.code416_k,
+ { intVal := 0 });
+
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.incoming.status.code417_k,
+ { intVal := 0 });
+
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.incoming.status.code500_k,
+ { intVal := 0 });
+
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.incoming.status.code501_k,
+ { intVal := 0 });
+
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.incoming.status.code502_k,
+ { intVal := 0 });
+
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.incoming.status.code503_k,
+ { intVal := 0 });
+
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.incoming.status.code504_k,
+ { intVal := 0 });
+
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.incoming.status.code505_k,
+ { intVal := 0 });
+
+ // outgoing status codes
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.outgoing.responses_k,
+ { intVal := 0 });
+
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.outgoing.status.code100_k,
+ { intVal := 0 });
+
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.outgoing.status.code101_k,
+ { intVal := 0 });
+
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.outgoing.status.code200_k,
+ { intVal := 0 });
+
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.outgoing.status.code201_k,
+ { intVal := 0 });
+
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.outgoing.status.code202_k,
+ { intVal := 0 });
+
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.outgoing.status.code203_k,
+ { intVal := 0 });
+
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.outgoing.status.code204_k,
+ { intVal := 0 });
+
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.outgoing.status.code205_k,
+ { intVal := 0 });
+
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.outgoing.status.code206_k,
+ { intVal := 0 });
+
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.outgoing.status.code300_k,
+ { intVal := 0 });
+
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.outgoing.status.code301_k,
+ { intVal := 0 });
+
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.outgoing.status.code302_k,
+ { intVal := 0 });
+
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.outgoing.status.code303_k,
+ { intVal := 0 });
+
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.outgoing.status.code304_k,
+ { intVal := 0 });
+
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.outgoing.status.code305_k,
+ { intVal := 0 });
+
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.outgoing.status.code306_k,
+ { intVal := 0 });
+
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.outgoing.status.code307_k,
+ { intVal := 0 });
+
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.outgoing.status.code400_k,
+ { intVal := 0 });
+
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.outgoing.status.code401_k,
+ { intVal := 0 });
+
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.outgoing.status.code402_k,
+ { intVal := 0 });
+
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.outgoing.status.code403_k,
+ { intVal := 0 });
+
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.outgoing.status.code404_k,
+ { intVal := 0 });
+
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.outgoing.status.code405_k,
+ { intVal := 0 });
+
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.outgoing.status.code406_k,
+ { intVal := 0 });
+
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.outgoing.status.code407_k,
+ { intVal := 0 });
+
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.outgoing.status.code408_k,
+ { intVal := 0 });
+
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.outgoing.status.code409_k,
+ { intVal := 0 });
+
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.outgoing.status.code410_k,
+ { intVal := 0 });
+
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.outgoing.status.code411_k,
+ { intVal := 0 });
+
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.outgoing.status.code412_k,
+ { intVal := 0 });
+
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.outgoing.status.code413_k,
+ { intVal := 0 });
+
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.outgoing.status.code414_k,
+ { intVal := 0 });
+
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.outgoing.status.code415_k,
+ { intVal := 0 });
+
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.outgoing.status.code416_k,
+ { intVal := 0 });
+
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.outgoing.status.code417_k,
+ { intVal := 0 });
+
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.outgoing.status.code500_k,
+ { intVal := 0 });
+
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.outgoing.status.code501_k,
+ { intVal := 0 });
+
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.outgoing.status.code502_k,
+ { intVal := 0 });
+
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.outgoing.status.code503_k,
+ { intVal := 0 });
+
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.outgoing.status.code504_k,
+ { intVal := 0 });
+
+ f_EPTF_Var_adjustContent(
+ v_EPTF_HTTP_stats.outgoing.status.code505_k,
+ { intVal := 0 });
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_updateStatistics
+ //
+ // Purpose:
+ // Function to update HTTP statistics
+ //
+ // Parameters:
+ // pl_in - *in* *boolean* - message direction (incoming/outgoing)
+ // pl_method - *in* *charstring* - HTTP method
+ // pl_code - *in* *integer* - HTTP response status code
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // If pl_in is true, incoming statistics is updated, else outgoing
+ // If pl_method is empty string then method statistics will not be updates
+ // If pl_code is -1 then statuscode statistics will not be updated
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_updateStatistics(
+ in boolean pl_in := true,
+ in charstring pl_method := "",
+ in integer pl_code := -1)
+ runs on EPTF_HTTP_LGen_CT
+ {
+ if (pl_in)
+ {
+ if ("" != pl_method)
+ {
+ // incoming methods
+ select (pl_method)
+ {
+ case ("OPTIONS")
+ {
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.incoming.method.options_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.incoming.method.options_k) + 1 });
+ }
+ case ("GET")
+ {
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.incoming.method.get_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.incoming.method.get_k) + 1 });
+ }
+ case ("HEAD")
+ {
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.incoming.method.head_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.incoming.method.head_k) + 1 });
+ }
+ case ("POST")
+ {
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.incoming.method.post_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.incoming.method.post_k) + 1 });
+ }
+ case ("PUT")
+ {
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.incoming.method.put_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.incoming.method.put_k) + 1 });
+ }
+ case ("DELETE")
+ {
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.incoming.method.delete_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.incoming.method.delete_k) + 1 });
+ }
+ case ("TRACE")
+ {
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.incoming.method.trace_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.incoming.method.trace_k) + 1 });
+ }
+ case ("CONNECT")
+ {
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.incoming.method.connect_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.incoming.method.connect_k) + 1 });
+ }
+ case else
+ {
+ f_EPTF_HTTP_error(%definitionId &
+ ": Unhandled HTTP method: " & pl_method);
+ }
+ }
+
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.incoming.requests_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.incoming.requests_k) + 1 });
+
+ }
+
+ if (-1 != pl_code)
+ {
+ // incoming status codes
+ select (pl_code)
+ {
+ case (100)
+ {
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.incoming.status.code100_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.incoming.status.code100_k) + 1 });
+ }
+ case (101) {
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.incoming.status.code101_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.incoming.status.code101_k) + 1 });
+ }
+ case (200) {
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.incoming.status.code200_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.incoming.status.code200_k) + 1 });
+ }
+ case (201) {
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.incoming.status.code201_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.incoming.status.code201_k) + 1 });
+ }
+ case (202) {
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.incoming.status.code202_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.incoming.status.code202_k) + 1 });
+ }
+ case (203) {
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.incoming.status.code203_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.incoming.status.code203_k) + 1 });
+ }
+ case (204) {
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.incoming.status.code204_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.incoming.status.code204_k) + 1 });
+ }
+ case (205) {
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.incoming.status.code205_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.incoming.status.code205_k) + 1 });
+ }
+ case (206) {
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.incoming.status.code206_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.incoming.status.code206_k) + 1 });
+ }
+ case (300) {
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.incoming.status.code300_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.incoming.status.code300_k) + 1 });
+ }
+ case (301) {
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.incoming.status.code301_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.incoming.status.code301_k) + 1 });
+ }
+ case (302) {
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.incoming.status.code302_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.incoming.status.code302_k) + 1 });
+ }
+ case (303) {
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.incoming.status.code303_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.incoming.status.code303_k) + 1 });
+ }
+ case (304) {
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.incoming.status.code304_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.incoming.status.code304_k) + 1 });
+ }
+ case (305) {
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.incoming.status.code305_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.incoming.status.code305_k) + 1 });
+ }
+ case (306) {
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.incoming.status.code306_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.incoming.status.code306_k) + 1 });
+ }
+ case (307) {
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.incoming.status.code307_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.incoming.status.code307_k) + 1 });
+ }
+ case (400) {
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.incoming.status.code400_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.incoming.status.code400_k) + 1 });
+ }
+ case (401) {
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.incoming.status.code401_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.incoming.status.code401_k) + 1 });
+ }
+ case (402) {
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.incoming.status.code402_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.incoming.status.code402_k) + 1 });
+ }
+ case (403) {
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.incoming.status.code403_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.incoming.status.code403_k) + 1 });
+ }
+ case (404) {
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.incoming.status.code404_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.incoming.status.code404_k) + 1 });
+ }
+ case (405) {
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.incoming.status.code405_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.incoming.status.code405_k) + 1 });
+ }
+ case (406) {
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.incoming.status.code406_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.incoming.status.code406_k) + 1 });
+ }
+ case (407) {
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.incoming.status.code407_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.incoming.status.code407_k) + 1 });
+ }
+ case (408) {
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.incoming.status.code408_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.incoming.status.code408_k) + 1 });
+ }
+ case (409) {
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.incoming.status.code409_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.incoming.status.code409_k) + 1 });
+ }
+ case (410) {
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.incoming.status.code410_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.incoming.status.code410_k) + 1 });
+ }
+ case (411) {
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.incoming.status.code411_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.incoming.status.code411_k) + 1 });
+ }
+ case (412) {
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.incoming.status.code412_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.incoming.status.code412_k) + 1 });
+ }
+ case (413) {
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.incoming.status.code413_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.incoming.status.code413_k) + 1 });
+ }
+ case (414) {
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.incoming.status.code414_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.incoming.status.code414_k) + 1 });
+ }
+ case (415) {
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.incoming.status.code415_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.incoming.status.code415_k) + 1 });
+ }
+ case (416) {
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.incoming.status.code416_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.incoming.status.code416_k) + 1 });
+ }
+ case (417) {
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.incoming.status.code417_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.incoming.status.code417_k) + 1 });
+ }
+ case (500) {
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.incoming.status.code500_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.incoming.status.code500_k) + 1 });
+ }
+ case (501) {
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.incoming.status.code501_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.incoming.status.code501_k) + 1 });
+ }
+ case (502) {
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.incoming.status.code502_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.incoming.status.code502_k) + 1 });
+ }
+ case (503) {
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.incoming.status.code503_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.incoming.status.code503_k) + 1 });
+ }
+ case (504) {
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.incoming.status.code504_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.incoming.status.code504_k) + 1 });
+ }
+ case (505) {
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.incoming.status.code505_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.incoming.status.code505_k) + 1 });
+ }
+ }
+
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.incoming.responses_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.incoming.responses_k) + 1 });
+ }
+ }
+ else
+ {
+ if ("" != pl_method)
+ {
+ // outgoing method
+ select (pl_method)
+ {
+ case ("OPTIONS")
+ {
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.outgoing.method.options_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.outgoing.method.options_k) + 1 });
+ }
+ case ("GET")
+ {
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.outgoing.method.get_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.outgoing.method.get_k) + 1 });
+ }
+ case ("HEAD")
+ {
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.outgoing.method.head_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.outgoing.method.head_k) + 1 });
+ }
+ case ("POST")
+ {
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.outgoing.method.post_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.outgoing.method.post_k) + 1 });
+ }
+ case ("PUT")
+ {
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.outgoing.method.put_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.outgoing.method.put_k) + 1 });
+ }
+ case ("DELETE")
+ {
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.outgoing.method.delete_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.outgoing.method.delete_k) + 1 });
+ }
+ case ("TRACE")
+ {
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.outgoing.method.trace_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.outgoing.method.trace_k) + 1 });
+ }
+ case ("CONNECT")
+ {
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.outgoing.method.connect_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.outgoing.method.connect_k) + 1 });
+ }
+ case else
+ {
+ f_EPTF_HTTP_error(%definitionId &
+ ": Unhandled HTTP method: " & pl_method);
+ }
+ }
+
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.outgoing.requests_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.outgoing.requests_k) + 1 });
+ }
+ if (-1 != pl_code)
+ {
+ // outgoing status codes
+ select (pl_code)
+ {
+ case (100)
+ {
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.outgoing.status.code100_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.outgoing.status.code100_k) + 1 });
+ }
+ case (101) {
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.outgoing.status.code101_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.outgoing.status.code101_k) + 1 });
+ }
+ case (200) {
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.outgoing.status.code200_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.outgoing.status.code200_k) + 1 });
+ }
+ case (201) {
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.outgoing.status.code201_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.outgoing.status.code201_k) + 1 });
+ }
+ case (202) {
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.outgoing.status.code202_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.outgoing.status.code202_k) + 1 });
+ }
+ case (203) {
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.outgoing.status.code203_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.outgoing.status.code203_k) + 1 });
+ }
+ case (204) {
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.outgoing.status.code204_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.outgoing.status.code204_k) + 1 });
+ }
+ case (205) {
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.outgoing.status.code205_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.outgoing.status.code205_k) + 1 });
+ }
+ case (206) {
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.outgoing.status.code206_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.outgoing.status.code206_k) + 1 });
+ }
+ case (300) {
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.outgoing.status.code300_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.outgoing.status.code300_k) + 1 });
+ }
+ case (301) {
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.outgoing.status.code301_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.outgoing.status.code301_k) + 1 });
+ }
+ case (302) {
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.outgoing.status.code302_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.outgoing.status.code302_k) + 1 });
+ }
+ case (303) {
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.outgoing.status.code303_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.outgoing.status.code303_k) + 1 });
+ }
+ case (304) {
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.outgoing.status.code304_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.outgoing.status.code304_k) + 1 });
+ }
+ case (305) {
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.outgoing.status.code305_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.outgoing.status.code305_k) + 1 });
+ }
+ case (306) {
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.outgoing.status.code306_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.outgoing.status.code306_k) + 1 });
+ }
+ case (307) {
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.outgoing.status.code307_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.outgoing.status.code307_k) + 1 });
+ }
+ case (400) {
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.outgoing.status.code400_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.outgoing.status.code400_k) + 1 });
+ }
+ case (401) {
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.outgoing.status.code401_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.outgoing.status.code401_k) + 1 });
+ }
+ case (402) {
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.outgoing.status.code402_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.outgoing.status.code402_k) + 1 });
+ }
+ case (403) {
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.outgoing.status.code403_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.outgoing.status.code403_k) + 1 });
+ }
+ case (404) {
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.outgoing.status.code404_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.outgoing.status.code404_k) + 1 });
+ }
+ case (405) {
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.outgoing.status.code405_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.outgoing.status.code405_k) + 1 });
+ }
+ case (406) {
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.outgoing.status.code406_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.outgoing.status.code406_k) + 1 });
+ }
+ case (407) {
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.outgoing.status.code407_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.outgoing.status.code407_k) + 1 });
+ }
+ case (408) {
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.outgoing.status.code408_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.outgoing.status.code408_k) + 1 });
+ }
+ case (409) {
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.outgoing.status.code409_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.outgoing.status.code409_k) + 1 });
+ }
+ case (410) {
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.outgoing.status.code410_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.outgoing.status.code410_k) + 1 });
+ }
+ case (411) {
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.outgoing.status.code411_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.outgoing.status.code411_k) + 1 });
+ }
+ case (412) {
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.outgoing.status.code412_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.outgoing.status.code412_k) + 1 });
+ }
+ case (413) {
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.outgoing.status.code413_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.outgoing.status.code413_k) + 1 });
+ }
+ case (414) {
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.outgoing.status.code414_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.outgoing.status.code414_k) + 1 });
+ }
+ case (415) {
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.outgoing.status.code415_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.outgoing.status.code415_k) + 1 });
+ }
+ case (416) {
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.outgoing.status.code416_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.outgoing.status.code416_k) + 1 });
+ }
+ case (417) {
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.outgoing.status.code417_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.outgoing.status.code417_k) + 1 });
+ }
+ case (500) {
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.outgoing.status.code500_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.outgoing.status.code500_k) + 1 });
+ }
+ case (501) {
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.outgoing.status.code501_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.outgoing.status.code501_k) + 1 });
+ }
+ case (502) {
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.outgoing.status.code502_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.outgoing.status.code502_k) + 1 });
+ }
+ case (503) {
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.outgoing.status.code503_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.outgoing.status.code503_k) + 1 });
+ }
+ case (504) {
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.outgoing.status.code504_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.outgoing.status.code504_k) + 1 });
+ }
+ case (505) {
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.outgoing.status.code505_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.outgoing.status.code505_k) + 1 });
+ }
+ }
+
+ f_EPTF_Var_adjustContent(v_EPTF_HTTP_stats.outgoing.responses_k,
+ { intVal := f_EPTF_Var_getIntValue(v_EPTF_HTTP_stats.outgoing.responses_k) + 1 });
+ }
+ }
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_setConnectionOpenFunction
+ //
+ // Purpose:
+ // Function to set open connection callback function pointer
+ //
+ // Parameters:
+ // plf_connectionOpen - *in* <EPTF_HTTP_connectionOpen_FT> - connection
+ // open callback function
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_setConnectionOpenFunction (
+ in EPTF_HTTP_connectionOpen_FT plf_connectionOpen)
+ runs on EPTF_HTTP_LGen_CT
+ {
+ vf_EPTF_HTTP_connectionOpen := plf_connectionOpen;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_setConnectionCloseFunction
+ //
+ // Purpose:
+ // Function to set close connection callback function pointer
+ //
+ // Parameters:
+ // plf_connectionClose - *in* <EPTF_HTTP_connectionClose_FT> - connection
+ // close callback function
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_setConnectionCloseFunction (
+ in EPTF_HTTP_connectionClose_FT plf_connectionClose)
+ runs on EPTF_HTTP_LGen_CT
+ {
+ vf_EPTF_HTTP_connectionClose := plf_connectionClose;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_setConnectionHalfCloseFunction
+ //
+ // Purpose:
+ // Function to set half close connection callback function pointer
+ //
+ // Parameters:
+ // plf_connectionHalfClose - *in* <EPTF_HTTP_connectionClose_FT> -
+ // connection half close callback function
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_setConnectionHalfCloseFunction (
+ in EPTF_HTTP_connectionClose_FT plf_connectionHalfClose)
+ runs on EPTF_HTTP_LGen_CT
+ {
+ vf_EPTF_HTTP_connectionHalfClose := plf_connectionHalfClose;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_setSendRequestFunction
+ //
+ // Purpose:
+ // Function to set send message callback function pointer
+ //
+ // Parameters:
+ // pl_sendRequest_fp - <EPTF_HTTP_sendRequest_FT> - sendRequest function
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_setSendRequestFunction(
+ in EPTF_HTTP_messageProcessSend_FT pl_sendRequest_fp)
+ runs on EPTF_HTTP_LGen_CT
+ {
+ vf_EPTF_HTTP_sendRequest := pl_sendRequest_fp;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_setClosePortOfUserFunction
+ //
+ // Purpose:
+ // Function to set close port of user callback function pointer
+ //
+ // Parameters:
+ // plf_cpou - *in* <EPTF_HTTP_SessionOperation_FT> - close port of
+ // user function reference
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_setClosePortOfUserFunction (
+ in EPTF_HTTP_SessionOperation_FT plf_cpou)
+ runs on EPTF_HTTP_LGen_CT
+ {
+ vf_EPTF_HTTP_closePortOfUser := plf_cpou;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_setFreePortOfUserFunction
+ //
+ // Purpose:
+ // Function to set free port of user callback function pointer
+ //
+ // Parameters:
+ // plf_cpou - *in* <EPTF_HTTP_SessionOperation_FT> - close port of
+ // user function reference
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_setFreePortOfUserFunction (
+ in EPTF_HTTP_SessionOperation_FT plf_fpou)
+ runs on EPTF_HTTP_LGen_CT
+ {
+ vf_EPTF_HTTP_freePortOfUser := plf_fpou;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_setClosePortFunction
+ //
+ // Purpose:
+ // Function to set close a port callback function pointer
+ //
+ // Parameters:
+ // plf_close - *in* <EPTF_HTTP_PortOperation_FT> - close port function reference
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_setClosePortFunction(
+ in EPTF_HTTP_PortOperation_FT plf_close)
+ runs on EPTF_HTTP_LGen_CT
+ {
+ vf_EPTF_HTTP_closePort := plf_close;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_setSendResponseFunction
+ //
+ // Purpose:
+ // Sets the response sender callback function.
+ //
+ // Parameters:
+ // plf_sendResponse - *in* <EPTF_HTTP_sendResponse_FT> - send response function reference
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_setSendResponseFunction (
+ in EPTF_HTTP_sendResponse_FT plf_sendResponse)
+ runs on EPTF_HTTP_LGen_CT
+ {
+ vf_EPTF_HTTP_sendResponse := plf_sendResponse;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_setListenFunction
+ //
+ // Purpose:
+ // Sets the listen callback function.
+ //
+ // Parameters:
+ // plf_listen - *in* <EPTF_HTTP_Listen_FT> - listen function reference
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_setListenFunction(
+ in EPTF_HTTP_Listen_FT plf_listen)
+ runs on EPTF_HTTP_LGen_CT
+ {
+ vf_EPTF_HTTP_listen := plf_listen;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_setSearchContextFunction
+ //
+ // Purpose:
+ // Sets the entity searching callback function.
+ //
+ // Parameters:
+ // plf_search - *in* <EPTF_HTTP_searchEntity_FT> - entity searching function reference
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_setSearchContextFunction(
+ in EPTF_HTTP_searchContext_FT plf_search)
+ runs on EPTF_HTTP_LGen_CT
+ {
+ vf_EPTF_HTTP_searchContext := plf_search;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_setSearchContextFunction4Event
+ //
+ // Purpose:
+ // Sets the entity searching callback function for socket events.
+ //
+ // Parameters:
+ // plf_search - *in* <EPTF_HTTP_searchEntity_FT> - entity searching function reference
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_setSearchContextFunction4Event(
+ in EPTF_HTTP_searchContext_FT plf_search)
+ runs on EPTF_HTTP_LGen_CT
+ {
+ vf_EPTF_HTTP_searchContext4Event := plf_search;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_setSearchContextFunction4Error
+ //
+ // Purpose:
+ // Sets the entity searching callback function for socket error events.
+ //
+ // Parameters:
+ // plf_search - *in* <EPTF_HTTP_searchEntity_FT> - entity searching function reference
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_setSearchContextFunction4Error(
+ in EPTF_HTTP_searchContext_FT plf_search)
+ runs on EPTF_HTTP_LGen_CT
+ {
+ vf_EPTF_HTTP_searchContext4Error := plf_search;
+ }
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_setEntityContext
+ //
+ // Purpose:
+ // Function to set entity context
+ //
+ // Parameters:
+ // pl_eIdx - *in* *integer* - index of entity whose context
+ // database is to be set
+ // pl_method - *charstring* - HTTP method
+ // pl_uri - *charstring* - HTTP URI
+ // pl_version_major - *integer* - HTTP major version number
+ // pl_version_minor - *integer* - HTTP minor version number
+ // pl_headerLines - <HeaderLines> - HTTP header lines
+ // pl_connId - *integer* - port group index beloning to the entity
+ // pl_authDetails - <EPTF_HTTP_AuthDetails> - authorization details
+ // pl_body - *charstring* - message body
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_setEntityContext (
+ in integer pl_eIdx,
+ in charstring pl_method,
+ in charstring pl_uri,
+ in integer pl_version_major,
+ in integer pl_version_minor,
+ in HeaderLines pl_headerlines,
+ in integer pl_connId := -1,
+ in EPTF_HTTP_AuthDetails pl_authDetails := c_EPTF_HTTP_initAuthDetails,
+ in EPTF_HTTP_CharOrOct pl_body := { charVal := "" })
+ runs on EPTF_HTTP_LGen_CT
+ {
+ var integer vl_EPTF_HTTP_myCtx := f_EPTF_HTTP_getContextIndex(pl_eIdx);
+ var integer vl_bodyIdx := -1;
+ var integer vl_headerLinesIdx := -1;
+
+ if (ischosen(pl_body.charVal))
+ {
+ vl_bodyIdx := f_EPTF_HTTP_setCharEntityBody(pl_body.charVal);
+ }else{
+ vl_bodyIdx := f_EPTF_HTTP_setOctEntityBody(pl_body.octVal);
+ }
+
+ vl_headerLinesIdx := f_EPTF_HTTP_addNewHeaderLines(pl_headerlines);
+
+ v_EPTF_HTTP_contexts[vl_EPTF_HTTP_myCtx] := c_EPTF_HTTP_initCtx;
+
+ v_EPTF_HTTP_contexts[vl_EPTF_HTTP_myCtx].method := pl_method;
+ v_EPTF_HTTP_contexts[vl_EPTF_HTTP_myCtx].uri := pl_uri;
+ v_EPTF_HTTP_contexts[vl_EPTF_HTTP_myCtx].version_major := pl_version_major;
+ v_EPTF_HTTP_contexts[vl_EPTF_HTTP_myCtx].version_minor := pl_version_minor;
+ v_EPTF_HTTP_contexts[vl_EPTF_HTTP_myCtx].headerLinesIdx := vl_headerLinesIdx;
+ v_EPTF_HTTP_contexts[vl_EPTF_HTTP_myCtx].authDetails := pl_authDetails;
+ v_EPTF_HTTP_contexts[vl_EPTF_HTTP_myCtx].connId := pl_connId;
+ v_EPTF_HTTP_contexts[vl_EPTF_HTTP_myCtx].bodyId := vl_bodyIdx;
+ v_EPTF_HTTP_contexts[vl_EPTF_HTTP_myCtx].headerGetterFn := refers(f_EPTF_HTTP_getHeaderContentForEntity);
+ v_EPTF_HTTP_contexts[vl_EPTF_HTTP_myCtx].contentGetterFn := refers(f_EPTF_HTTP_getCharstringBodyContentForEntity);
+ v_EPTF_HTTP_contexts[vl_EPTF_HTTP_myCtx].charBodyHandlerFn := refers(f_EPTF_HTTP_defaultCharstringBodyHandler);
+ v_EPTF_HTTP_contexts[vl_EPTF_HTTP_myCtx].binaryBodyHandlerFn := refers(f_EPTF_HTTP_defaultBinaryBodyHandler);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_setEntityContextServer
+ //
+ // Purpose:
+ // Sets the entity context of a server entity.
+ //
+ // Parameters:
+ // pl_eIdx - *in* *integer* - index of entity whose context
+ // database is to be set
+ // pl_statusCode - *integer* - status code of the response
+ // pl_statusText - *charstring* - status text of the response
+ // pl_version_major - *integer* - HTTP major version number
+ // pl_version_minor - *integer* - HTTP minor version number
+ // pl_headerLines - <HeaderLines> - HTTP header lines
+ // pl_connId - *integer* - port group index beloning to the entity
+ // pl_body - *charstring* - message body
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_setEntityContextServer (
+ in integer pl_eIdx,
+ in integer pl_statusCode,
+ in charstring pl_statusText,
+ in integer pl_version_major,
+ in integer pl_version_minor,
+ in HeaderLines pl_headerlines,
+ in EPTF_HTTP_CharOrOct pl_body := { charVal := "" })
+ runs on EPTF_HTTP_LGen_CT
+ {
+ var integer vl_EPTF_HTTP_myCtx := f_EPTF_HTTP_getContextIndex(pl_eIdx);
+ var integer vl_bodyIdx := -1;
+ var integer vl_headerLinesIdx := -1;
+
+ if (ischosen(pl_body.charVal))
+ {
+ vl_bodyIdx := f_EPTF_HTTP_setCharEntityBody(pl_body.charVal);
+ }else{
+ vl_bodyIdx := f_EPTF_HTTP_setOctEntityBody(pl_body.octVal);
+ }
+
+ vl_headerLinesIdx := f_EPTF_HTTP_addNewHeaderLines(pl_headerlines);
+
+ v_EPTF_HTTP_contexts[vl_EPTF_HTTP_myCtx] := c_EPTF_HTTP_initCtx;
+
+ v_EPTF_HTTP_contexts[vl_EPTF_HTTP_myCtx].statusCode := pl_statusCode;
+ v_EPTF_HTTP_contexts[vl_EPTF_HTTP_myCtx].statusText := pl_statusText;
+ v_EPTF_HTTP_contexts[vl_EPTF_HTTP_myCtx].version_major := pl_version_major;
+ v_EPTF_HTTP_contexts[vl_EPTF_HTTP_myCtx].version_minor := pl_version_minor;
+ v_EPTF_HTTP_contexts[vl_EPTF_HTTP_myCtx].headerLinesIdx := vl_headerLinesIdx;
+ v_EPTF_HTTP_contexts[vl_EPTF_HTTP_myCtx].bodyId := vl_bodyIdx;
+ v_EPTF_HTTP_contexts[vl_EPTF_HTTP_myCtx].headerGetterFn := refers(f_EPTF_HTTP_getHeaderContentForEntity);
+ v_EPTF_HTTP_contexts[vl_EPTF_HTTP_myCtx].contentGetterFn := refers(f_EPTF_HTTP_getCharstringBodyContentForEntity);
+ v_EPTF_HTTP_contexts[vl_EPTF_HTTP_myCtx].charBodyHandlerFn := refers(f_EPTF_HTTP_defaultCharstringBodyHandler);
+ v_EPTF_HTTP_contexts[vl_EPTF_HTTP_myCtx].binaryBodyHandlerFn := refers(f_EPTF_HTTP_defaultBinaryBodyHandler);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_setCharstringBodyHandlerFunction4Entity
+ //
+ // Purpose:
+ // Function to set the HTTP charstring body handler function of an entity
+ //
+ // Parameters:
+ // pl_eIdx - *in* *integer* - entity index
+ // pl_bodySender - *in* <EPTF_HTTP_charstringBodyHandler_FT> - body handler function
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_setCharstringBodyHandlerFunction4Entity(
+ in integer pl_eIdx,
+ in EPTF_HTTP_charstringBodyHandler_FT pl_bodySender)
+ runs on EPTF_HTTP_LGen_CT
+ {
+ v_EPTF_HTTP_contexts[pl_eIdx].charBodyHandlerFn := pl_bodySender;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_setBinaryBodyHandlerFunction4Entity
+ //
+ // Purpose:
+ // Function to set the HTTP binary body handler function of an entity
+ //
+ // Parameters:
+ // pl_eIdx - *in* *integer* - entity index
+ // pl_bodySender - *in* <EPTF_HTTP_binaryBodyHandler_FT> - body handler function
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_setBinaryBodyHandlerFunction4Entity(
+ in integer pl_eIdx,
+ in EPTF_HTTP_binaryBodyHandler_FT pl_bodySender)
+ runs on EPTF_HTTP_LGen_CT
+ {
+ v_EPTF_HTTP_contexts[pl_eIdx].binaryBodyHandlerFn := pl_bodySender;
+ }
+
+ /////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_getEntityContextMethod
+ //
+ // Purpose:
+ // Function to get the HTTP Method field of the entity context of an entity
+ //
+ // Parameters:
+ // pl_eIdx - *in* *integer* - entity index
+ //
+ // Return Value:
+ // *charstring* - method name
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_getEntityContextMethod (
+ in integer pl_eIdx)
+ runs on EPTF_HTTP_LGen_CT
+ return charstring
+ {
+ var integer vl_EPTF_HTTP_myCtx := f_EPTF_HTTP_getContextIndex(pl_eIdx);
+ return v_EPTF_HTTP_contexts[vl_EPTF_HTTP_myCtx].method;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_setEntityContextMethod
+ //
+ // Purpose:
+ // Function to set the HTTP Method field of the entity context of an entity
+ //
+ // Parameters:
+ // pl_eIdx - *in* *integer* - entity index
+ // pl_method - *in* *charstring* - HTTP method name
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_setEntityContextMethod (
+ in integer pl_eIdx,
+ in charstring pl_method)
+ runs on EPTF_HTTP_LGen_CT
+ {
+ var integer vl_EPTF_HTTP_myCtx := f_EPTF_HTTP_getContextIndex(pl_eIdx);
+ v_EPTF_HTTP_contexts[vl_EPTF_HTTP_myCtx].method := pl_method;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_getEntityContextStatusCode
+ //
+ // Purpose:
+ // Gets the HTTP status code field from an entity context.
+ //
+ // Parameters:
+ // pl_eIdx - *in* *integer* - entity index
+ //
+ // Return Value:
+ // *integer* - status code
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_getEntityContextStatusCode (
+ in integer pl_eIdx)
+ runs on EPTF_HTTP_LGen_CT
+ return integer
+ {
+ var integer vl_EPTF_HTTP_myCtx := f_EPTF_HTTP_getContextIndex(pl_eIdx);
+ return v_EPTF_HTTP_contexts[vl_EPTF_HTTP_myCtx].statusCode;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_setEntityContextStatusCode
+ //
+ // Purpose:
+ // Sets the HTTP status code field in an entity context.
+ //
+ // Parameters:
+ // pl_eIdx - *in* *integer* - entity index
+ // pl_statusCode - *in* *charstring* - status code
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_setEntityContextStatusCode (
+ in integer pl_eIdx,
+ in integer pl_statusCode)
+ runs on EPTF_HTTP_LGen_CT
+ {
+ var integer vl_EPTF_HTTP_myCtx := f_EPTF_HTTP_getContextIndex(pl_eIdx);
+ v_EPTF_HTTP_contexts[vl_EPTF_HTTP_myCtx].statusCode := pl_statusCode;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_getEntityContextStatusText
+ //
+ // Purpose:
+ // Gets the HTTP status text field from an entity context.
+ //
+ // Parameters:
+ // pl_eIdx - *in* *integer* - entity index
+ //
+ // Return Value:
+ // *charstring* - status text
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_getEntityContextStatusText (
+ in integer pl_eIdx)
+ runs on EPTF_HTTP_LGen_CT
+ return charstring
+ {
+ var integer vl_EPTF_HTTP_myCtx := f_EPTF_HTTP_getContextIndex(pl_eIdx);
+ return v_EPTF_HTTP_contexts[vl_EPTF_HTTP_myCtx].statusText;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_setEntityContextStatusText
+ //
+ // Purpose:
+ // Sets the HTTP status text field in an entity context.
+ //
+ // Parameters:
+ // pl_eIdx - *in* *integer* - entity index
+ // pl_statusText - *in* *charstring* - status text
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_setEntityContextStatusText (
+ in integer pl_eIdx,
+ in charstring pl_statusText)
+ runs on EPTF_HTTP_LGen_CT
+ {
+ var integer vl_EPTF_HTTP_myCtx := f_EPTF_HTTP_getContextIndex(pl_eIdx);
+ v_EPTF_HTTP_contexts[vl_EPTF_HTTP_myCtx].statusText := pl_statusText;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_setEntityContextHeaderLinesIdx
+ //
+ // Purpose:
+ // Sets the header line index of an entity
+ //
+ // Parameters:
+ // pl_eIdx - *in* *integer* - entity index
+ // pl_headerLinesIdx - *in* *integer* - header line index
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_setEntityContextHeaderLinesIdx(
+ in integer pl_eIdx,
+ in integer pl_headerLinesIdx)
+ runs on EPTF_HTTP_LGen_CT
+ {
+ if (0 > pl_headerLinesIdx) {return;}
+
+ var integer vl_EPTF_HTTP_myCtx := f_EPTF_HTTP_getContextIndex(pl_eIdx);
+ v_EPTF_HTTP_contexts[vl_EPTF_HTTP_myCtx].headerLinesIdx := pl_headerLinesIdx;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_ETPF_HTTP_setEntityContextStatusCode
+ //
+ // Purpose:
+ // Sets the status code of an entity
+ //
+ // Parameters:
+ // pl_eIdx - *in* *integer* - entity index
+ // pl_statusCode - *in* *integer* - status code
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_ETPF_HTTP_setEntityContextStatusCode(
+ in integer pl_eIdx,
+ in integer pl_statusCode)
+ runs on EPTF_HTTP_LGen_CT
+ {
+ var integer vl_EPTF_HTTP_myCtx := f_EPTF_HTTP_getContextIndex(pl_eIdx);
+ v_EPTF_HTTP_contexts[vl_EPTF_HTTP_myCtx].statusCode := pl_statusCode;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_ETPF_HTTP_setEntityContextStatusText
+ //
+ // Purpose:
+ // Sets the status text of an entity
+ //
+ // Parameters:
+ // pl_eIdx - *in* *integer* - entity index
+ // pl_statusText - *in* *charstring* - status text
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_ETPF_HTTP_setEntityContextStatusText(
+ in integer pl_eIdx,
+ in charstring pl_statusText)
+ runs on EPTF_HTTP_LGen_CT
+ {
+ var integer vl_EPTF_HTTP_myCtx := f_EPTF_HTTP_getContextIndex(pl_eIdx);
+ v_EPTF_HTTP_contexts[vl_EPTF_HTTP_myCtx].statusText := pl_statusText;
+ }
+ /////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_getEntityContextURI
+ //
+ // Purpose:
+ // Function to get the HTTP URI field of the entity context of an entity
+ //
+ // Parameters:
+ // pl_eIdx - *in* *integer* - entity index
+ //
+ // Return Value:
+ // *charstring* - URI
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_getEntityContextURI (
+ in integer pl_eIdx)
+ runs on EPTF_HTTP_LGen_CT
+ return charstring
+ {
+ var integer vl_EPTF_HTTP_myCtx := f_EPTF_HTTP_getContextIndex(pl_eIdx);
+ return v_EPTF_HTTP_contexts[vl_EPTF_HTTP_myCtx].uri;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_setEntityContextURI
+ //
+ // Purpose:
+ // Function to set the HTTP URI field of the entity context of an entity
+ //
+ // Parameters:
+ // pl_eIdx - *in* *integer* - entity index
+ // pl_uri - *in* *charstring* - HTTP URI
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_setEntityContextURI (
+ in integer pl_eIdx,
+ in charstring pl_uri)
+ runs on EPTF_HTTP_LGen_CT
+ {
+ var integer vl_EPTF_HTTP_myCtx := f_EPTF_HTTP_getContextIndex(pl_eIdx);
+ v_EPTF_HTTP_contexts[vl_EPTF_HTTP_myCtx].uri := pl_uri;
+ }
+
+ /////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_getEntityContextVersionMajor
+ //
+ // Purpose:
+ // Function to get the major version number of HTTP
+ //
+ // Parameters:
+ // pl_eIdx - *in* *integer* - entity index
+ //
+ // Return Value:
+ // *integer* - major version number
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_getEntityContextVersionMajor (
+ in integer pl_eIdx)
+ runs on EPTF_HTTP_LGen_CT
+ return integer
+ {
+ var integer vl_EPTF_HTTP_myCtx := f_EPTF_HTTP_getContextIndex(pl_eIdx);
+ return v_EPTF_HTTP_contexts[vl_EPTF_HTTP_myCtx].version_major;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_setEntityContextVersionMajor
+ //
+ // Purpose:
+ // Function to set the major version number of HTTP
+ //
+ // Parameters:
+ // pl_eIdx - *in* *integer* - entity index
+ // pl_version_major - *in* *integer* - major version number
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_setEntityContextVersionMajor (
+ in integer pl_eIdx,
+ in integer pl_version_major)
+ runs on EPTF_HTTP_LGen_CT
+ {
+ var integer vl_EPTF_HTTP_myCtx := f_EPTF_HTTP_getContextIndex(pl_eIdx);
+ v_EPTF_HTTP_contexts[vl_EPTF_HTTP_myCtx].version_major := pl_version_major;
+ }
+
+ /////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_getEntityContextVersionMinor
+ //
+ // Purpose:
+ // Function to get the minor version number of HTTP
+ //
+ // Parameters:
+ // pl_eIdx - *in* *integer* - entity index
+ //
+ // Return Value:
+ // *integer* - minor version number
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_getEntityContextVersionMinor (
+ in integer pl_eIdx)
+ runs on EPTF_HTTP_LGen_CT
+ return integer
+ {
+ var integer vl_EPTF_HTTP_myCtx := f_EPTF_HTTP_getContextIndex(pl_eIdx);
+ return v_EPTF_HTTP_contexts[vl_EPTF_HTTP_myCtx].version_minor;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_setEntityContextVersionMinor
+ //
+ // Purpose:
+ // Function to set the minor version number of HTTP
+ //
+ // Parameters:
+ // pl_eIdx - *in* *integer* - entity index
+ // pl_version_minor - *in* *integer* - minor version number
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_setEntityContextVersionMinor (
+ in integer pl_eIdx,
+ in integer pl_version_minor)
+ runs on EPTF_HTTP_LGen_CT
+ {
+ var integer vl_EPTF_HTTP_myCtx := f_EPTF_HTTP_getContextIndex(pl_eIdx);
+ v_EPTF_HTTP_contexts[vl_EPTF_HTTP_myCtx].version_minor := pl_version_minor;
+ }
+
+ /////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_getEntityContextMessageHeader
+ //
+ // Purpose:
+ // Function to get the HTTP header lines of the entity context of an entity
+ //
+ // Parameters:
+ // pl_ctxIdx - *in* *integer* - entity index
+ //
+ // Return Value:
+ // *charstring* - URI
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_getEntityContextMessageHeader (
+ in integer pl_ctxIdx)
+ runs on EPTF_HTTP_LGen_CT
+ return HeaderLines
+ {
+ //var integer vl_EPTF_HTTP_myCtx := f_EPTF_HTTP_getContextIndex(pl_eIdx);
+ var integer vl_headerLinesIdx := v_EPTF_HTTP_contexts[pl_ctxIdx].headerLinesIdx;
+
+ return v_EPTF_HTTP_headerLinesList[vl_headerLinesIdx];
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_setEntityContextAddCustomHeader
+ //
+ // Purpose:
+ // Function to add a custom HTTP header to the entity context of an entity
+ //
+ // Parameters:
+ // pl_eIdx - *in* *integer* - entity index
+ // pl_uri - *in* *charstring* - HTTP URI
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_setEntityContextAddCustomHeader (
+ in integer pl_eIdx,
+ in charstring pl_field_name,
+ in charstring pl_field_value)
+ runs on EPTF_HTTP_LGen_CT
+ {
+ var integer vl_EPTF_HTTP_myCtx := f_EPTF_HTTP_getContextIndex(pl_eIdx);
+ var integer vl_headerLinesIdx := v_EPTF_HTTP_contexts[vl_EPTF_HTTP_myCtx].headerLinesIdx;
+
+ if(vl_headerLinesIdx < 0) { return; }
+ v_EPTF_HTTP_headerLinesList[vl_headerLinesIdx][sizeof(v_EPTF_HTTP_headerLinesList[vl_headerLinesIdx])] :=
+ { pl_field_name, pl_field_value }
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_getEntityContextConnectionId
+ //
+ // Purpose:
+ // Function to get entity context connection Id
+ //
+ // Parameters:
+ // pl_eIdx - *in* *integer* - index of entity whose context
+ // database is to be set
+ // Return Value:
+ // *integer* - connection id
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_getEntityContextConnectionId (
+ in integer pl_eIdx)
+ runs on EPTF_HTTP_LGen_CT
+ return integer
+ {
+ var integer myCtx := f_EPTF_HTTP_getContextIndex(pl_eIdx);
+
+ return v_EPTF_HTTP_contexts[myCtx].connId;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_setEntityContextConnectionId
+ //
+ // Purpose:
+ // Function to set entity context
+ //
+ // Parameters:
+ // pl_eIdx - *in* *integer* - index of entity whose context
+ // database is to be set
+ // pl_connId - *integer* - port group index beloning to the entity
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_setEntityContextConnectionId (
+ in integer pl_eIdx,
+ in integer pl_connId)
+ runs on EPTF_HTTP_LGen_CT
+ {
+ var integer myCtx := f_EPTF_HTTP_getContextIndex(pl_eIdx);
+
+ v_EPTF_HTTP_contexts[myCtx].connId := pl_connId;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_getEntityContextBodyId
+ //
+ // Purpose:
+ // Function to get entity context body Id
+ //
+ // Parameters:
+ // pl_eIdx - *in* *integer* - index of entity whose context
+ // database is to be get
+ // Return Value:
+ // *integer* - body id
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_getEntityContextBodyId (
+ in integer pl_eIdx)
+ runs on EPTF_HTTP_LGen_CT
+ return integer
+ {
+ var integer myCtx := f_EPTF_HTTP_getContextIndex(pl_eIdx);
+
+ return v_EPTF_HTTP_contexts[myCtx].bodyId;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_setEntityContextBodyId
+ //
+ // Purpose:
+ // Function to set entity context
+ //
+ // Parameters:
+ // pl_eIdx - *in* *integer* - index of entity whose context
+ // database is to be set
+ // pl_bodyId - *integer* - body index beloning to the entity
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_setEntityContextBodyId (
+ in integer pl_eIdx,
+ in integer pl_bodyId)
+ runs on EPTF_HTTP_LGen_CT
+ {
+ var integer myCtx := f_EPTF_HTTP_getContextIndex(pl_eIdx);
+
+ v_EPTF_HTTP_contexts[myCtx].bodyId := pl_bodyId;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_getEntityContextPortId
+ //
+ // Purpose:
+ // Function to get entity context port Id
+ //
+ // Parameters:
+ // pl_eIdx - *in* *integer* - index of entity whose context
+ // database is to be get
+ // Return Value:
+ // *integer* - port id
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_getEntityContextPortId (
+ in integer pl_eIdx)
+ runs on EPTF_HTTP_LGen_CT
+ return integer
+ {
+ var integer myCtx := f_EPTF_HTTP_getContextIndex(pl_eIdx);
+
+ return v_EPTF_HTTP_contexts[myCtx].portId;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_setEntityContextPortId
+ //
+ // Purpose:
+ // Function to set entity context
+ //
+ // Parameters:
+ // pl_eIdx - *in* *integer* - index of entity whose context
+ // database is to be set
+ // pl_portId - *integer* - port index beloning to the entity
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_setEntityContextPortId (
+ in integer pl_eIdx,
+ in integer pl_portId)
+ runs on EPTF_HTTP_LGen_CT
+ {
+ var integer myCtx := f_EPTF_HTTP_getContextIndex(pl_eIdx);
+
+ v_EPTF_HTTP_contexts[myCtx].portId := pl_portId;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_getEntityContextSeqNum
+ //
+ // Purpose:
+ // Function to get entity context sequence number
+ //
+ // Parameters:
+ // pl_eIdx - *in* *integer* - index of entity whose context
+ // database is to be get
+ // Return Value:
+ // *integer* - sequence number
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_getEntityContextSeqNum (
+ in integer pl_eIdx)
+ runs on EPTF_HTTP_LGen_CT
+ return integer
+ {
+ var integer myCtx := f_EPTF_HTTP_getContextIndex(pl_eIdx);
+
+ return v_EPTF_HTTP_contexts[myCtx].seqNum;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_setEntityContextSeqNum
+ //
+ // Purpose:
+ // Function to set entity context
+ //
+ // Parameters:
+ // pl_eIdx - *in* *integer* - index of entity whose context
+ // database is to be set
+ // pl_connId - *integer* - sequence number beloning to the entity
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_setEntityContextSeqNum (
+ in integer pl_eIdx,
+ in integer pl_seqNum)
+ runs on EPTF_HTTP_LGen_CT
+ {
+ var integer myCtx := f_EPTF_HTTP_getContextIndex(pl_eIdx);
+
+ v_EPTF_HTTP_contexts[myCtx].seqNum := pl_seqNum;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_setCharEntityBody
+ //
+ // Purpose:
+ // Function to set the charstring body of an entity
+ //
+ // Parameters:
+ // pl_connId - *integer* - port group index beloning to the entity
+ //
+ // Return Value:
+ // *integer* - database index
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_setCharEntityBody(
+ in charstring pl_val)
+ runs on EPTF_HTTP_LGen_CT return integer
+ {
+ var integer vl_dbIdx;
+
+ if (f_EPTF_str2int_HashMap_Find(v_EPTF_HTTP_charDB, pl_val, vl_dbIdx))
+ {
+ f_EPTF_HTTP_debug(%definitionId &
+ ": CHAR Body already exists at index: " & int2str(vl_dbIdx));
+ }
+ else
+ {
+ vl_dbIdx := sizeof(v_EPTF_HTTP_charBodyDB);
+
+ f_EPTF_str2int_HashMap_Insert(v_EPTF_HTTP_charDB, pl_val, vl_dbIdx);
+ v_EPTF_HTTP_charBodyDB[vl_dbIdx] := pl_val;
+
+ f_EPTF_HTTP_debug(%definitionId &
+ ": CHAR Body does not exists, now added: " & int2str(vl_dbIdx));
+ }
+
+ return vl_dbIdx;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_setOctEntityBody
+ //
+ // Purpose:
+ // Function to set the octetstring body of an entity
+ //
+ // Parameters:
+ // pl_connId - *integer* - port group index beloning to the entity
+ //
+ // Return Value:
+ // *integer* - database index
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_setOctEntityBody(
+ in octetstring pl_val)
+ runs on EPTF_HTTP_LGen_CT return integer
+ {
+ var integer vl_dbIdx;
+
+ if (f_EPTF_oct2int_HashMap_Find(v_EPTF_HTTP_octDB, pl_val, vl_dbIdx))
+ {
+ f_EPTF_HTTP_debug(%definitionId &
+ ": OCT Body already exists at index: " & int2str(vl_dbIdx));
+ }
+ else
+ {
+ vl_dbIdx := sizeof(v_EPTF_HTTP_binBodyDB);
+
+ f_EPTF_oct2int_HashMap_Insert(v_EPTF_HTTP_octDB, pl_val, vl_dbIdx);
+ v_EPTF_HTTP_binBodyDB[vl_dbIdx] := pl_val;
+
+ f_EPTF_HTTP_debug(%definitionId &
+ ": OCT Body does not exists, now added: " & int2str(vl_dbIdx));
+ }
+
+ return vl_dbIdx;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_getHeaderContentForEntity
+ //
+ // Purpose:
+ // Get HTTP header content for an entity
+ //
+ // Parameters:
+ // pl_pars - *in* <EPTF_IntegerList> - parameter list, element #0 is the entity context index
+ // pl_headerLines - *inout* <HeaderLines> - header content
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_getHeaderContentForEntity(
+ in EPTF_IntegerList pl_pars,
+ inout HeaderLines pl_headerLines)
+ runs on EPTF_HTTP_LGen_CT
+ {
+ pl_headerLines := f_EPTF_HTTP_getEntityContextMessageHeader(pl_pars[0]);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_getCharstringBodyContentForEntity
+ //
+ // Purpose:
+ // Get HTTP body content for an entity
+ //
+ // Parameters:
+ // pl_pars - *in* <EPTF_IntegerList> - parameter list, element #0 is the entity context index
+ // pl_body - *inout* <EPTF_HTTP_CharOrOct> - charstring or binary body content
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_getCharstringBodyContentForEntity(
+ in EPTF_IntegerList pl_pars,
+ inout EPTF_HTTP_CharOrOct pl_body)
+ runs on EPTF_HTTP_LGen_CT
+ {
+ pl_body := { charVal := v_EPTF_HTTP_charBodyDB[v_EPTF_HTTP_contexts[pl_pars[0]].bodyId] };
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_getCharstringBodyContentForEntity
+ //
+ // Purpose:
+ // Get HTTP body content for an entity
+ //
+ // Parameters:
+ // pl_pars - *in* <EPTF_IntegerList> - parameter list, element #0 is the entity context index
+ // pl_body - *inout* <EPTF_HTTP_CharOrOct> - charstring or binary body content
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_getBinaryBodyContentForEntity(
+ in EPTF_IntegerList pl_pars,
+ inout EPTF_HTTP_CharOrOct pl_body)
+ runs on EPTF_HTTP_LGen_CT
+ {
+ pl_body := { octVal := v_EPTF_HTTP_binBodyDB[v_EPTF_HTTP_contexts[pl_pars[0]].bodyId] };
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_getBodyContentForEntity
+ //
+ // Purpose:
+ // Get HTTP body for an entity (entity context)
+ //
+ // Parameters:
+ // pl_ctxIdx - *in* *integer* - entity context
+ // pl_body - *inout* <EPTF_HTTP_CharOrOct> - charstring or binary body content
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_getBodyContentForEntity(
+ in integer pl_ctxIdx,
+ inout EPTF_HTTP_CharOrOct pl_body)
+ runs on EPTF_HTTP_LGen_CT
+ {
+ f_EPTF_Base_assert(
+ %definitionId & ": Content getter function is null!",
+ v_EPTF_HTTP_contexts[pl_ctxIdx].contentGetterFn != null);
+
+ f_EPTF_Base_assert(
+ %definitionId & ": Content getter function is unbound!",
+ isvalue(v_EPTF_HTTP_contexts[pl_ctxIdx].contentGetterFn));
+
+ v_EPTF_HTTP_contexts[pl_ctxIdx].contentGetterFn.apply(
+ {pl_ctxIdx}, pl_body)
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_getHeaderForEntity
+ //
+ // Purpose:
+ // Get HTTP header for an entity (entity context)
+ //
+ // Parameters:
+ // pl_ctxIdx - *in* *integer* - entity context
+ // pl_headerLines - *inout* <HeaderLines> - header content
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_getHeaderForEntity(
+ in integer pl_ctxIdx,
+ inout HeaderLines pl_headerLines)
+ runs on EPTF_HTTP_LGen_CT
+ {
+ f_EPTF_Base_assert(
+ %definitionId & ": Header content getter function is null!",
+ v_EPTF_HTTP_contexts[pl_ctxIdx].headerGetterFn != null);
+
+ f_EPTF_Base_assert(
+ %definitionId & ": Header content getter function is unbound!",
+ isvalue(v_EPTF_HTTP_contexts[pl_ctxIdx].headerGetterFn));
+
+ v_EPTF_HTTP_contexts[pl_ctxIdx].headerGetterFn.apply(
+ {pl_ctxIdx}, pl_headerLines)
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_getRawHeaderForEntity
+ //
+ // Purpose:
+ // Get HTTP raw header for an entity (entity context)
+ //
+ // Parameters:
+ // pl_ctxIdx - *in* *integer* - entity context
+ // pl_body - *inout* <EPTF_HTTP_CharOrOct> - charstring or binary body content
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_getRawHeaderForEntity(
+ in integer pl_ctxIdx,
+ inout octetstring pl_rawHeader)
+ runs on EPTF_HTTP_LGen_CT
+ {
+ f_EPTF_Base_assert(
+ %definitionId & ": Raw header content getter function is null!",
+ v_EPTF_HTTP_contexts[pl_ctxIdx].rawHeaderGetterFn != null);
+
+ f_EPTF_Base_assert(
+ %definitionId & ": Raw header content getter function is unbound!",
+ isvalue(v_EPTF_HTTP_contexts[pl_ctxIdx].rawHeaderGetterFn));
+
+ v_EPTF_HTTP_contexts[pl_ctxIdx].rawHeaderGetterFn.apply(
+ {pl_ctxIdx}, pl_rawHeader)
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_setEntityContextMessageBody
+ //
+ // Purpose:
+ // Get HTTP body for an entity (entity context)
+ //
+ // Parameters:
+ // pl_eIdx - *in* *integer* - index of entity whose context
+ // database is to be set
+ // pl_body - *inout* <EPTF_HTTP_CharOrOct> - charstring or binary body content
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_setEntityContextMessageBody(
+ in integer pl_eIdx,
+ inout EPTF_HTTP_CharOrOct pl_body)
+ runs on EPTF_HTTP_LGen_CT
+ {
+ var integer vl_myCtx := f_EPTF_HTTP_getContextIndex(pl_eIdx);
+
+ if(ischosen(pl_body.charVal))
+ {
+ v_EPTF_HTTP_contexts[vl_myCtx].bodyId := f_EPTF_HTTP_setCharEntityBody(pl_body.charVal);
+ }
+ else
+ {
+ v_EPTF_HTTP_contexts[vl_myCtx].bodyId := f_EPTF_HTTP_setOctEntityBody(pl_body.octVal);
+ }
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_reportEvent
+ //
+ // Purpose:
+ // Function to report an event on the initially set reporting level
+ //
+ // Parameters:
+ // pl_statusCode - *in* *integer* - status code of the message
+ // pl_eIdx - *in* *integer* - index of the entity
+ // pl_fsmIdx - *in* *integer* - index of the fsm of the entity
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_reportEvent(
+ in integer pl_statusCode,
+ in integer pl_eIdx,
+ in integer pl_fsmIdx)
+ runs on EPTF_HTTP_LGen_CT
+ {
+ if (vf_EPTF_HTTP_dispatchFn != null) {
+ vf_EPTF_HTTP_dispatchFn.apply(pl_statusCode, pl_eIdx, pl_fsmIdx);
+ }
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_convertEvent
+ //
+ // Purpose:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_convertEvent(
+ in EPTF_LGenBase_ReportedEventDescriptor pl_eventIN,
+ inout EPTF_LGenBase_ReportedEventDescriptor pl_eventOUT)
+ {
+ pl_eventOUT := pl_eventIN;
+
+ if (omit != pl_eventIN.event.target)
+ {
+ if (0 > pl_eventIN.event.target.eIdx)
+ {
+ pl_eventOUT.event.target := omit;
+ }else if (0 > pl_eventIN.event.target.fsmCtxIdx)
+ {
+ pl_eventOUT.event.target.fsmCtxIdx := omit;
+ }
+ }
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_dispatchEvent
+ //
+ // Purpose:
+ // HTTP dispatch function
+ //
+ // Parameters:
+ // pl_event - *in* <EPTF_LGenBase_ReportedEventDescriptor> - status code of the message
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_dispatchEvent(in EPTF_LGenBase_ReportedEventDescriptor pl_event)
+ runs on EPTF_HTTP_LGen_CT
+ {
+ var EPTF_LGenBase_ReportedEventDescriptor vl_local;
+
+ f_EPTF_HTTP_convertEvent(pl_event, vl_local);
+
+ f_EPTF_LGenBase_dispatchEvent(vl_local);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_postEvent
+ //
+ // Purpose:
+ // HTTP post function
+ //
+ // Parameters:
+ // pl_event - *in* <EPTF_LGenBase_ReportedEventDescriptor> - status code of the message
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_postEvent(in EPTF_LGenBase_ReportedEventDescriptor pl_event)
+ runs on EPTF_HTTP_LGen_CT
+ {
+ var EPTF_LGenBase_ReportedEventDescriptor vl_local;
+
+ f_EPTF_HTTP_convertEvent(pl_event, vl_local);
+
+ f_EPTF_LGenBase_postEvent(vl_local);
+
+ }
+
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_reportClassEvent
+ //
+ // Purpose:
+ // Function to report an event to an entity/fsm (class reporting level)
+ //
+ // Parameters:
+ // pl_statusCode - *in* *integer* - status code of the message
+ // pl_eIdx - *in* *integer* - index of the entity
+ // pl_fsmIdx - *in* *integer* - index of the fsm of the entity
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_reportClassEvent(
+ in integer pl_statusCode,
+ in integer pl_eIdx,
+ in integer pl_fsmIdx)
+ runs on EPTF_HTTP_LGen_CT
+ {
+ if (pl_statusCode < 100 or pl_statusCode > 599)
+ {
+ f_EPTF_HTTP_warning(%definitionId &
+ ": Status code of incoming message is invalid: " &
+ int2str(pl_statusCode));
+
+ return;
+ }
+
+ if (pl_statusCode < 200) {
+ f_EPTF_HTTP_dispatchEvent({{v_EPTF_HTTP_myBIdx,
+ c_EPTF_HTTP_inputIdx_response100class,{pl_eIdx,pl_fsmIdx}, omit},{}});
+ }
+ else
+ if (pl_statusCode < 300) {
+ f_EPTF_HTTP_dispatchEvent({{v_EPTF_HTTP_myBIdx,
+ c_EPTF_HTTP_inputIdx_response200class,{pl_eIdx,pl_fsmIdx}, omit},{}});
+ }
+ else
+ if (pl_statusCode < 400) {
+ f_EPTF_HTTP_dispatchEvent({{v_EPTF_HTTP_myBIdx,
+ c_EPTF_HTTP_inputIdx_response300class,{pl_eIdx,pl_fsmIdx}, omit},{}});
+ }
+ else
+ if (pl_statusCode < 500) {
+ f_EPTF_HTTP_dispatchEvent({{v_EPTF_HTTP_myBIdx,
+ c_EPTF_HTTP_inputIdx_response400class,{pl_eIdx,pl_fsmIdx}, omit},{}});
+ }
+ else
+ if (pl_statusCode < 600) {
+ f_EPTF_HTTP_dispatchEvent({{v_EPTF_HTTP_myBIdx,
+ c_EPTF_HTTP_inputIdx_response500class,{pl_eIdx,pl_fsmIdx}, omit},{}});
+ }
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_reportDetailedEvent
+ //
+ // Purpose:
+ // Function to report an event to an entity/fsm (detailed reporting level)
+ //
+ // Parameters:
+ // pl_statusCode - *in* *integer* - status code of the message
+ // pl_eIdx - *in* *integer* - index of the entity
+ // pl_fsmIdx - *in* *integer* - index of the fsm of the entity
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_reportDetailedEvent(
+ in integer pl_statusCode,
+ in integer pl_eIdx,
+ in integer pl_fsmIdx)
+ runs on EPTF_HTTP_LGen_CT
+ {
+ // do reporting
+ select (pl_statusCode)
+ {
+ case (100) {
+ f_EPTF_HTTP_dispatchEvent({{v_EPTF_HTTP_myBIdx,
+ c_EPTF_HTTP_inputIdx_response100class,{pl_eIdx,pl_fsmIdx}, omit},{}});
+
+ f_EPTF_HTTP_dispatchEvent({{v_EPTF_HTTP_myBIdx,
+ c_EPTF_HTTP_inputIdx_response100Continue,{pl_eIdx,pl_fsmIdx}, omit},{}});
+ }
+ case (101) {
+ f_EPTF_HTTP_dispatchEvent({{v_EPTF_HTTP_myBIdx,
+ c_EPTF_HTTP_inputIdx_response100class,{pl_eIdx,pl_fsmIdx}, omit},{}});
+
+ f_EPTF_HTTP_dispatchEvent({{v_EPTF_HTTP_myBIdx,
+ c_EPTF_HTTP_inputIdx_response101SwitchingProtocols,{pl_eIdx,pl_fsmIdx}, omit},{}}) ;
+ }
+ case (200) {
+ f_EPTF_HTTP_dispatchEvent({{v_EPTF_HTTP_myBIdx,
+ c_EPTF_HTTP_inputIdx_response200class,{pl_eIdx,pl_fsmIdx}, omit},{}});
+
+ f_EPTF_HTTP_dispatchEvent({{v_EPTF_HTTP_myBIdx,
+ c_EPTF_HTTP_inputIdx_response200OK,{pl_eIdx,pl_fsmIdx}, omit},{}}) ;
+ }
+ case (201) {
+ f_EPTF_HTTP_dispatchEvent({{v_EPTF_HTTP_myBIdx,
+ c_EPTF_HTTP_inputIdx_response200class,{pl_eIdx,pl_fsmIdx}, omit},{}});
+
+ f_EPTF_HTTP_dispatchEvent({{v_EPTF_HTTP_myBIdx,
+ c_EPTF_HTTP_inputIdx_response201Created,{pl_eIdx,pl_fsmIdx}, omit},{}}) ;
+ }
+ case (202) {
+ f_EPTF_HTTP_dispatchEvent({{v_EPTF_HTTP_myBIdx,
+ c_EPTF_HTTP_inputIdx_response200class,{pl_eIdx,pl_fsmIdx}, omit},{}});
+
+ f_EPTF_HTTP_dispatchEvent({{v_EPTF_HTTP_myBIdx,
+ c_EPTF_HTTP_inputIdx_response202Accepted,{pl_eIdx,pl_fsmIdx}, omit},{}}) ;
+ }
+ case (203) {
+ f_EPTF_HTTP_dispatchEvent({{v_EPTF_HTTP_myBIdx,
+ c_EPTF_HTTP_inputIdx_response200class,{pl_eIdx,pl_fsmIdx}, omit},{}});
+
+ f_EPTF_HTTP_dispatchEvent({{v_EPTF_HTTP_myBIdx,
+ c_EPTF_HTTP_inputIdx_response203NonAuthoritativeInformation,{pl_eIdx,pl_fsmIdx}, omit},{}}) ;
+ }
+ case (204) {
+ f_EPTF_HTTP_dispatchEvent({{v_EPTF_HTTP_myBIdx,
+ c_EPTF_HTTP_inputIdx_response200class,{pl_eIdx,pl_fsmIdx}, omit},{}});
+
+ f_EPTF_HTTP_dispatchEvent({{v_EPTF_HTTP_myBIdx,
+ c_EPTF_HTTP_inputIdx_response204NoContent,{pl_eIdx,pl_fsmIdx}, omit},{}}) ;
+ }
+ case (205) {
+ f_EPTF_HTTP_dispatchEvent({{v_EPTF_HTTP_myBIdx,
+ c_EPTF_HTTP_inputIdx_response200class,{pl_eIdx,pl_fsmIdx}, omit},{}});
+
+ f_EPTF_HTTP_dispatchEvent({{v_EPTF_HTTP_myBIdx,
+ c_EPTF_HTTP_inputIdx_response205ResetContent,{pl_eIdx,pl_fsmIdx}, omit},{}}) ;
+ }
+ case (206) {
+ f_EPTF_HTTP_dispatchEvent({{v_EPTF_HTTP_myBIdx,
+ c_EPTF_HTTP_inputIdx_response200class,{pl_eIdx,pl_fsmIdx}, omit},{}});
+
+ f_EPTF_HTTP_dispatchEvent({{v_EPTF_HTTP_myBIdx,
+ c_EPTF_HTTP_inputIdx_response206PartialContent,{pl_eIdx,pl_fsmIdx}, omit},{}}) ;
+ }
+ case (300) {
+ f_EPTF_HTTP_dispatchEvent({{v_EPTF_HTTP_myBIdx,
+ c_EPTF_HTTP_inputIdx_response300class,{pl_eIdx,pl_fsmIdx}, omit},{}});
+
+ f_EPTF_HTTP_dispatchEvent({{v_EPTF_HTTP_myBIdx,
+ c_EPTF_HTTP_inputIdx_response300MultipleChoices,{pl_eIdx,pl_fsmIdx}, omit},{}}) ;
+ }
+ case (301) {
+ f_EPTF_HTTP_dispatchEvent({{v_EPTF_HTTP_myBIdx,
+ c_EPTF_HTTP_inputIdx_response300class,{pl_eIdx,pl_fsmIdx}, omit},{}});
+
+ f_EPTF_HTTP_dispatchEvent({{v_EPTF_HTTP_myBIdx,
+ c_EPTF_HTTP_inputIdx_response301MovedPermanently,{pl_eIdx,pl_fsmIdx}, omit},{}}) ;
+ }
+ case (302) {
+ f_EPTF_HTTP_dispatchEvent({{v_EPTF_HTTP_myBIdx,
+ c_EPTF_HTTP_inputIdx_response300class,{pl_eIdx,pl_fsmIdx}, omit},{}});
+
+ f_EPTF_HTTP_dispatchEvent({{v_EPTF_HTTP_myBIdx,
+ c_EPTF_HTTP_inputIdx_response302Found,{pl_eIdx,pl_fsmIdx}, omit},{}}) ;
+ }
+ case (303) {
+ f_EPTF_HTTP_dispatchEvent({{v_EPTF_HTTP_myBIdx,
+ c_EPTF_HTTP_inputIdx_response300class,{pl_eIdx,pl_fsmIdx}, omit},{}});
+
+ f_EPTF_HTTP_dispatchEvent({{v_EPTF_HTTP_myBIdx,
+ c_EPTF_HTTP_inputIdx_response303SeeOther,{pl_eIdx,pl_fsmIdx}, omit},{}}) ;
+ }
+ case (304) {
+ f_EPTF_HTTP_dispatchEvent({{v_EPTF_HTTP_myBIdx,
+ c_EPTF_HTTP_inputIdx_response300class,{pl_eIdx,pl_fsmIdx}, omit},{}});
+
+ f_EPTF_HTTP_dispatchEvent({{v_EPTF_HTTP_myBIdx,
+ c_EPTF_HTTP_inputIdx_response304NotModified,{pl_eIdx,pl_fsmIdx}, omit},{}}) ;
+ }
+ case (305) {
+ f_EPTF_HTTP_dispatchEvent({{v_EPTF_HTTP_myBIdx,
+ c_EPTF_HTTP_inputIdx_response300class,{pl_eIdx,pl_fsmIdx}, omit},{}});
+
+ f_EPTF_HTTP_dispatchEvent({{v_EPTF_HTTP_myBIdx,
+ c_EPTF_HTTP_inputIdx_response305UseProxy,{pl_eIdx,pl_fsmIdx}, omit},{}}) ;
+ }
+ case (306) {
+ f_EPTF_HTTP_dispatchEvent({{v_EPTF_HTTP_myBIdx,
+ c_EPTF_HTTP_inputIdx_response300class,{pl_eIdx,pl_fsmIdx}, omit},{}});
+
+ f_EPTF_HTTP_dispatchEvent({{v_EPTF_HTTP_myBIdx,
+ c_EPTF_HTTP_inputIdx_response306Unused,{pl_eIdx,pl_fsmIdx}, omit},{}}) ;
+ }
+ case (307) {
+ f_EPTF_HTTP_dispatchEvent({{v_EPTF_HTTP_myBIdx,
+ c_EPTF_HTTP_inputIdx_response300class,{pl_eIdx,pl_fsmIdx}, omit},{}});
+
+ f_EPTF_HTTP_dispatchEvent({{v_EPTF_HTTP_myBIdx,
+ c_EPTF_HTTP_inputIdx_response307TemporaryRedirect,{pl_eIdx,pl_fsmIdx}, omit},{}}) ;
+ }
+ case (400) {
+ f_EPTF_HTTP_dispatchEvent({{v_EPTF_HTTP_myBIdx,
+ c_EPTF_HTTP_inputIdx_response400class,{pl_eIdx,pl_fsmIdx}, omit},{}});
+
+ f_EPTF_HTTP_dispatchEvent({{v_EPTF_HTTP_myBIdx,
+ c_EPTF_HTTP_inputIdx_response400BadRequest,{pl_eIdx,pl_fsmIdx}, omit},{}}) ;
+ }
+ case (401) {
+ f_EPTF_HTTP_dispatchEvent({{v_EPTF_HTTP_myBIdx,
+ c_EPTF_HTTP_inputIdx_response400class,{pl_eIdx,pl_fsmIdx}, omit},{}});
+
+ f_EPTF_HTTP_dispatchEvent({{v_EPTF_HTTP_myBIdx,
+ c_EPTF_HTTP_inputIdx_response401Unauthorized,{pl_eIdx,pl_fsmIdx}, omit},{}}) ;
+ }
+ case (402) {
+ f_EPTF_HTTP_dispatchEvent({{v_EPTF_HTTP_myBIdx,
+ c_EPTF_HTTP_inputIdx_response400class,{pl_eIdx,pl_fsmIdx}, omit},{}});
+
+ f_EPTF_HTTP_dispatchEvent({{v_EPTF_HTTP_myBIdx,
+ c_EPTF_HTTP_inputIdx_response402PaymentRequired,{pl_eIdx,pl_fsmIdx}, omit},{}}) ;
+ }
+ case (403) {
+ f_EPTF_HTTP_dispatchEvent({{v_EPTF_HTTP_myBIdx,
+ c_EPTF_HTTP_inputIdx_response400class,{pl_eIdx,pl_fsmIdx}, omit},{}});
+
+ f_EPTF_HTTP_dispatchEvent({{v_EPTF_HTTP_myBIdx,
+ c_EPTF_HTTP_inputIdx_response403Forbidden,{pl_eIdx,pl_fsmIdx}, omit},{}}) ;
+ }
+ case (404) {
+ f_EPTF_HTTP_dispatchEvent({{v_EPTF_HTTP_myBIdx,
+ c_EPTF_HTTP_inputIdx_response400class,{pl_eIdx,pl_fsmIdx}, omit},{}});
+
+ f_EPTF_HTTP_dispatchEvent({{v_EPTF_HTTP_myBIdx,
+ c_EPTF_HTTP_inputIdx_response404NotFound,{pl_eIdx,pl_fsmIdx}, omit},{}}) ;
+ }
+ case (405) {
+ f_EPTF_HTTP_dispatchEvent({{v_EPTF_HTTP_myBIdx,
+ c_EPTF_HTTP_inputIdx_response400class,{pl_eIdx,pl_fsmIdx}, omit},{}});
+
+ f_EPTF_HTTP_dispatchEvent({{v_EPTF_HTTP_myBIdx,
+ c_EPTF_HTTP_inputIdx_response405MethodNotAllowed,{pl_eIdx,pl_fsmIdx}, omit},{}}) ;
+ }
+ case (406) {
+ f_EPTF_HTTP_dispatchEvent({{v_EPTF_HTTP_myBIdx,
+ c_EPTF_HTTP_inputIdx_response400class,{pl_eIdx,pl_fsmIdx}, omit},{}});
+
+ f_EPTF_HTTP_dispatchEvent({{v_EPTF_HTTP_myBIdx,
+ c_EPTF_HTTP_inputIdx_response406NotAcceptable,{pl_eIdx,pl_fsmIdx}, omit},{}}) ;
+ }
+ case (407) {
+ f_EPTF_HTTP_dispatchEvent({{v_EPTF_HTTP_myBIdx,
+ c_EPTF_HTTP_inputIdx_response400class,{pl_eIdx,pl_fsmIdx}, omit},{}});
+
+ f_EPTF_HTTP_dispatchEvent({{v_EPTF_HTTP_myBIdx,
+ c_EPTF_HTTP_inputIdx_response407ProxyAuthenticationRequired,{pl_eIdx,pl_fsmIdx}, omit},{}}) ;
+ }
+ case (408) {
+ f_EPTF_HTTP_dispatchEvent({{v_EPTF_HTTP_myBIdx,
+ c_EPTF_HTTP_inputIdx_response400class,{pl_eIdx,pl_fsmIdx}, omit},{}});
+
+ f_EPTF_HTTP_dispatchEvent({{v_EPTF_HTTP_myBIdx,
+ c_EPTF_HTTP_inputIdx_response408RequestTimeout,{pl_eIdx,pl_fsmIdx}, omit},{}}) ;
+ }
+ case (409) {
+ f_EPTF_HTTP_dispatchEvent({{v_EPTF_HTTP_myBIdx,
+ c_EPTF_HTTP_inputIdx_response400class,{pl_eIdx,pl_fsmIdx}, omit},{}});
+
+ f_EPTF_HTTP_dispatchEvent({{v_EPTF_HTTP_myBIdx,
+ c_EPTF_HTTP_inputIdx_response409Conflict,{pl_eIdx,pl_fsmIdx}, omit},{}}) ;
+ }
+ case (410) {
+ f_EPTF_HTTP_dispatchEvent({{v_EPTF_HTTP_myBIdx,
+ c_EPTF_HTTP_inputIdx_response400class,{pl_eIdx,pl_fsmIdx}, omit},{}});
+
+ f_EPTF_HTTP_dispatchEvent({{v_EPTF_HTTP_myBIdx,
+ c_EPTF_HTTP_inputIdx_response410Gone,{pl_eIdx,pl_fsmIdx}, omit},{}}) ;
+ }
+ case (411) {
+ f_EPTF_HTTP_dispatchEvent({{v_EPTF_HTTP_myBIdx,
+ c_EPTF_HTTP_inputIdx_response400class,{pl_eIdx,pl_fsmIdx}, omit},{}});
+
+ f_EPTF_HTTP_dispatchEvent({{v_EPTF_HTTP_myBIdx,
+ c_EPTF_HTTP_inputIdx_response411LengthRequired,{pl_eIdx,pl_fsmIdx}, omit},{}}) ;
+ }
+ case (412) {
+ f_EPTF_HTTP_dispatchEvent({{v_EPTF_HTTP_myBIdx,
+ c_EPTF_HTTP_inputIdx_response400class,{pl_eIdx,pl_fsmIdx}, omit},{}});
+
+ f_EPTF_HTTP_dispatchEvent({{v_EPTF_HTTP_myBIdx,
+ c_EPTF_HTTP_inputIdx_response412PreconditionFailed,{pl_eIdx,pl_fsmIdx}, omit},{}}) ;
+ }
+ case (413) {
+ f_EPTF_HTTP_dispatchEvent({{v_EPTF_HTTP_myBIdx,
+ c_EPTF_HTTP_inputIdx_response400class,{pl_eIdx,pl_fsmIdx}, omit},{}});
+
+ f_EPTF_HTTP_dispatchEvent({{v_EPTF_HTTP_myBIdx,
+ c_EPTF_HTTP_inputIdx_response413RequestEntityTooLarge,{pl_eIdx,pl_fsmIdx}, omit},{}}) ;
+ }
+ case (414) {
+ f_EPTF_HTTP_dispatchEvent({{v_EPTF_HTTP_myBIdx,
+ c_EPTF_HTTP_inputIdx_response400class,{pl_eIdx,pl_fsmIdx}, omit},{}});
+
+ f_EPTF_HTTP_dispatchEvent({{v_EPTF_HTTP_myBIdx,
+ c_EPTF_HTTP_inputIdx_response414RequestURITooLong,{pl_eIdx,pl_fsmIdx}, omit},{}}) ;
+ }
+ case (415) {
+ f_EPTF_HTTP_dispatchEvent({{v_EPTF_HTTP_myBIdx,
+ c_EPTF_HTTP_inputIdx_response400class,{pl_eIdx,pl_fsmIdx}, omit},{}});
+
+ f_EPTF_HTTP_dispatchEvent({{v_EPTF_HTTP_myBIdx,
+ c_EPTF_HTTP_inputIdx_response415UnsupportedMediaType,{pl_eIdx,pl_fsmIdx}, omit},{}}) ;
+ }
+ case (416) {
+ f_EPTF_HTTP_dispatchEvent({{v_EPTF_HTTP_myBIdx,
+ c_EPTF_HTTP_inputIdx_response400class,{pl_eIdx,pl_fsmIdx}, omit},{}});
+
+ f_EPTF_HTTP_dispatchEvent({{v_EPTF_HTTP_myBIdx,
+ c_EPTF_HTTP_inputIdx_response416RequestedRangeNotSatisfiable,{pl_eIdx,pl_fsmIdx}, omit},{}}) ;
+ }
+ case (417) {
+ f_EPTF_HTTP_dispatchEvent({{v_EPTF_HTTP_myBIdx,
+ c_EPTF_HTTP_inputIdx_response400class,{pl_eIdx,pl_fsmIdx}, omit},{}});
+
+ f_EPTF_HTTP_dispatchEvent({{v_EPTF_HTTP_myBIdx,
+ c_EPTF_HTTP_inputIdx_response417ExpectationFailed,{pl_eIdx,pl_fsmIdx}, omit},{}}) ;
+ }
+ case (500) {
+ f_EPTF_HTTP_dispatchEvent({{v_EPTF_HTTP_myBIdx,
+ c_EPTF_HTTP_inputIdx_response500class,{pl_eIdx,pl_fsmIdx}, omit},{}});
+
+ f_EPTF_HTTP_dispatchEvent({{v_EPTF_HTTP_myBIdx,
+ c_EPTF_HTTP_inputIdx_response500InternalServerError,{pl_eIdx,pl_fsmIdx}, omit},{}}) ;
+ }
+ case (501) {
+ f_EPTF_HTTP_dispatchEvent({{v_EPTF_HTTP_myBIdx,
+ c_EPTF_HTTP_inputIdx_response500class,{pl_eIdx,pl_fsmIdx}, omit},{}});
+
+ f_EPTF_HTTP_dispatchEvent({{v_EPTF_HTTP_myBIdx,
+ c_EPTF_HTTP_inputIdx_response501NotImplemented,{pl_eIdx,pl_fsmIdx}, omit},{}}) ;
+ }
+ case (502) {
+ f_EPTF_HTTP_dispatchEvent({{v_EPTF_HTTP_myBIdx,
+ c_EPTF_HTTP_inputIdx_response500class,{pl_eIdx,pl_fsmIdx}, omit},{}});
+
+ f_EPTF_HTTP_dispatchEvent({{v_EPTF_HTTP_myBIdx,
+ c_EPTF_HTTP_inputIdx_response502BadGateway,{pl_eIdx,pl_fsmIdx}, omit},{}}) ;
+ }
+ case (503) {
+ f_EPTF_HTTP_dispatchEvent({{v_EPTF_HTTP_myBIdx,
+ c_EPTF_HTTP_inputIdx_response500class,{pl_eIdx,pl_fsmIdx}, omit},{}});
+
+ f_EPTF_HTTP_dispatchEvent({{v_EPTF_HTTP_myBIdx,
+ c_EPTF_HTTP_inputIdx_response503ServiceUnavailable,{pl_eIdx,pl_fsmIdx}, omit},{}}) ;
+ }
+ case (504) {
+ f_EPTF_HTTP_dispatchEvent({{v_EPTF_HTTP_myBIdx,
+ c_EPTF_HTTP_inputIdx_response500class,{pl_eIdx,pl_fsmIdx}, omit},{}});
+
+ f_EPTF_HTTP_dispatchEvent({{v_EPTF_HTTP_myBIdx,
+ c_EPTF_HTTP_inputIdx_response504GatewayTimeout,{pl_eIdx,pl_fsmIdx}, omit},{}}) ;
+ }
+ case (505) {
+ f_EPTF_HTTP_dispatchEvent({{v_EPTF_HTTP_myBIdx,
+ c_EPTF_HTTP_inputIdx_response500class,{pl_eIdx,pl_fsmIdx}, omit},{}});
+
+ f_EPTF_HTTP_dispatchEvent({{v_EPTF_HTTP_myBIdx,
+ c_EPTF_HTTP_inputIdx_response505HTTPVersionNotSupported,{pl_eIdx,pl_fsmIdx}, omit},{}}) ;
+ }
+ }
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_messageReceived
+ //
+ // Purpose:
+ // Function to handle received message
+ //
+ // Parameters:
+ // pl_message - *in* <EPTF_HTTP_IncomingMessage> - incoming message from the transport layer
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_messageReceived(
+ in EPTF_HTTP_IncomingMessage pl_message)
+ runs on EPTF_HTTP_LGen_CT
+ {
+ f_EPTF_HTTP_debug(%definitionId & ": Message received!");
+
+ f_EPTF_HTTP_debug(%definitionId & ": Session id and entity offset: " &
+ int2str(pl_message.sessionId) & " / " & int2str(v_EPTF_HTTP_EntityOffset));
+
+ var integer vl_fsmIdx, vl_eIdx := pl_message.sessionId - v_EPTF_HTTP_EntityOffset;
+
+ if (vl_eIdx < 0) {
+ f_EPTF_HTTP_warning(%definitionId &
+ ": Entity cannot be determined to message on session: " &
+ int2str(pl_message.sessionId))
+
+ return;
+ };
+
+ f_EPTF_Base_assert(%definitionId & ": Invalid entity index (" &
+ int2str(vl_eIdx) &
+ ") applied to connId -> fsm index database!",
+ isvalue(v_EPTF_HTTP_ConnId2FIdx[vl_eIdx]));
+
+ vl_fsmIdx := v_EPTF_HTTP_ConnId2FIdx[vl_eIdx];
+ //v_EPTF_HTTP_ConnId2FIdx[vl_fsmIdx] := -1;
+
+ f_EPTF_HTTP_debug(%definitionId & ": Fsm index: " &
+ int2str(vl_fsmIdx) & " acquired for entity id: " &
+ int2str(vl_eIdx));
+
+ v_intNoWarningLG := dec_HTTPMessage(pl_message.httpMessage, v_EPTF_HTTP_incomingMessage);
+
+ if (vf_EPTF_HTTP_messageReceivedHook != null) {
+ vf_EPTF_HTTP_messageReceivedHook.apply(vl_eIdx, v_EPTF_HTTP_incomingMessage);
+ }
+
+
+ if (ischosen(v_EPTF_HTTP_incomingMessage.request))
+ {
+ f_EPTF_HTTP_dispatchEvent({{v_EPTF_HTTP_myBIdx,
+ c_EPTF_HTTP_inputIdx_requestCharReceived, {vl_eIdx,vl_fsmIdx}, omit},{}});
+
+ f_EPTF_HTTP_updateStatistics(true,
+ v_EPTF_HTTP_incomingMessage.request.method, -1);
+
+ var integer myctx := f_EPTF_HTTP_getContextIndex(vl_eIdx);
+ v_EPTF_HTTP_contexts[myctx].charBodyHandlerFn.apply( vl_eIdx, v_EPTF_HTTP_incomingMessage.request.body);
+ }
+ else
+ if (ischosen(v_EPTF_HTTP_incomingMessage.request_binary))
+ {
+ f_EPTF_HTTP_dispatchEvent({{v_EPTF_HTTP_myBIdx,
+ c_EPTF_HTTP_inputIdx_requestOctReceived, {vl_eIdx,vl_fsmIdx}, omit},{}});
+
+ f_EPTF_HTTP_updateStatistics(true,
+ v_EPTF_HTTP_incomingMessage.request_binary.method, -1);
+
+ var integer myctx := f_EPTF_HTTP_getContextIndex(vl_eIdx);
+ v_EPTF_HTTP_contexts[myctx].binaryBodyHandlerFn.apply( vl_eIdx, v_EPTF_HTTP_incomingMessage.request_binary.body);
+ }
+ else
+ if (ischosen(v_EPTF_HTTP_incomingMessage.response))
+ {
+ var integer myctx := f_EPTF_HTTP_getContextIndex(vl_eIdx);
+
+ // do automatic adminsitration
+ if (v_EPTF_HTTP_contexts[myctx].requestPending)
+ {
+ v_EPTF_HTTP_contexts[myctx].requestPending := false; // request is not pending after answer
+
+ f_EPTF_HTTP_createAuthorizationDataFromMessage(myctx); // store auth data into entity context
+ }
+
+ if( v_EPTF_HTTP_contexts[myctx].uri != "")
+ {
+ v_EPTF_HTTP_contexts[myctx].etag:="";
+ var integer vl_size := sizeof(v_EPTF_HTTP_incomingMessage.response.header);
+ for(var integer vl_i := 0; vl_i < vl_size; vl_i := vl_i + 1)
+ {
+ if(v_EPTF_HTTP_incomingMessage.response.header[vl_i].header_name == "ETag")
+ {
+ var charstring vl_etag := v_EPTF_HTTP_incomingMessage.response.header[vl_i].header_value;
+ var integer vl_length := lengthof(vl_etag);
+ if(vl_etag[0] == "\"" and vl_etag[vl_length-1] == "\"")
+ {
+ vl_etag := substr(vl_etag,1,vl_length-2);
+ }
+ v_EPTF_HTTP_contexts[myctx].etag := vl_etag;
+ break;
+ }
+ }
+ }
+
+ f_EPTF_HTTP_dispatchEvent({{v_EPTF_HTTP_myBIdx,
+ c_EPTF_HTTP_inputIdx_responseCharReceived,{vl_eIdx,vl_fsmIdx}, omit},{}});
+
+ f_EPTF_HTTP_reportEvent(
+ v_EPTF_HTTP_incomingMessage.response.statuscode,
+ vl_eIdx, vl_fsmIdx)
+
+ f_EPTF_HTTP_updateStatistics(true, "",
+ v_EPTF_HTTP_incomingMessage.response.statuscode);
+
+ v_EPTF_HTTP_contexts[myctx].charBodyHandlerFn.apply( vl_eIdx,v_EPTF_HTTP_incomingMessage.response.body);
+ }
+ else if (ischosen(v_EPTF_HTTP_incomingMessage.response_binary))
+ {
+ var integer myctx := f_EPTF_HTTP_getContextIndex(vl_eIdx);
+
+ // do automatic adminsitration
+ if (v_EPTF_HTTP_contexts[myctx].requestPending)
+ {
+ v_EPTF_HTTP_contexts[myctx].requestPending := false; // request is not pending after answer
+
+ f_EPTF_HTTP_createAuthorizationDataFromMessage(myctx); // store auth data into entity context
+ }
+
+ f_EPTF_HTTP_dispatchEvent({{v_EPTF_HTTP_myBIdx,
+ c_EPTF_HTTP_inputIdx_responseOctReceived,{vl_eIdx,vl_fsmIdx}, omit},{}});
+
+ f_EPTF_HTTP_reportEvent(
+ v_EPTF_HTTP_incomingMessage.response_binary.statuscode,
+ vl_eIdx, vl_fsmIdx)
+
+ f_EPTF_HTTP_updateStatistics(true, "",
+ v_EPTF_HTTP_incomingMessage.response_binary.statuscode);
+
+ v_EPTF_HTTP_contexts[myctx].binaryBodyHandlerFn.apply( vl_eIdx, v_EPTF_HTTP_incomingMessage.response_binary.body);
+ }
+ else // not response
+ {
+ f_EPTF_HTTP_debug(%definitionId & ": Unhandled message type received: " &
+ log2str(v_EPTF_HTTP_incomingMessage));
+ }
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_eventReceived
+ //
+ // Purpose:
+ // Function to handle received events
+ //
+ // Parameters:
+ // pl_sessionId - *integer* - session id of received event
+ // pl_type - *integer* - event type
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_eventReceived(
+ in EPTF_HTTP_Event pl_event)
+ runs on EPTF_HTTP_LGen_CT
+ {
+ f_EPTF_HTTP_debug(%definitionId & ": Event received!");
+
+ f_EPTF_HTTP_debug(%definitionId & ": Session id and entity offset: " &
+ int2str(pl_event.sessionId) & " / " & int2str(v_EPTF_HTTP_EntityOffset));
+
+ var integer vl_fsmIdx, vl_eIdx := pl_event.sessionId - v_EPTF_HTTP_EntityOffset;
+
+ if (vl_eIdx < 0) {
+ f_EPTF_HTTP_debug(%definitionId &
+ ": Entity cannot be determined to event: " &
+ int2str(pl_event.eventType) & " on session: " &
+ int2str(pl_event.sessionId) & ", dispatching generic event");
+
+ f_EPTF_HTTP_dispatchEvent({{v_EPTF_HTTP_myBIdx,
+ pl_event.eventType, omit, omit},{}}) ;
+
+ return;
+ };
+
+ f_EPTF_Base_assert(%definitionId & ": Invalid connection id (" &
+ int2str(vl_eIdx) &
+ ") applied to connId -> fsm index database!",
+ isvalue(v_EPTF_HTTP_ConnId2FIdx[vl_eIdx]));
+
+ vl_fsmIdx := v_EPTF_HTTP_ConnId2FIdx[vl_eIdx];
+
+ //v_EPTF_HTTP_ConnId2FIdx[vl_eIdx] := -1;
+
+ f_EPTF_HTTP_debug(%definitionId & ": Fsm index: " &
+ int2str(vl_fsmIdx) & " acquired for entity id: " &
+ int2str(vl_eIdx));
+
+ f_EPTF_HTTP_dispatchEvent({{v_EPTF_HTTP_myBIdx,
+ pl_event.eventType,{vl_eIdx,vl_fsmIdx}, omit},{}}) ;
+
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_socketErrorReceived
+ //
+ // Purpose:
+ // Function to handle received socket errors
+ //
+ // Parameters:
+ // pl_error - *in* <EPTF_HTTP_EventError> - error received from the transport layer
+ //
+ // Detailed Comments:
+ // This function handles received socket error messages and events and sends a socketError event
+ // with LGenbase postEvent method. This is a private function.
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_socketErrorReceived(
+ in EPTF_HTTP_EventError pl_error)
+ runs on EPTF_HTTP_LGen_CT
+ {
+ f_EPTF_HTTP_debug(%definitionId & ": Socket Error received!");
+ if(ispresent(pl_error.transportError.errorCode)) {
+ f_EPTF_HTTP_debug(%definitionId & ": Socket Error result: " & log2str(pl_error.transportError));
+
+ f_EPTF_HTTP_debug(%definitionId & ": Session id and entity offset: " &
+ int2str(pl_error.sessionId) & " / " & int2str(v_EPTF_HTTP_EntityOffset));
+
+ var EPTF_IntegerList vl_reportedArgs := { enum2int(pl_error.transportError.errorCode), -1 };
+ if(ispresent(pl_error.transportError.os_error_code)) { vl_reportedArgs[1] := pl_error.transportError.os_error_code; }
+
+ var integer vl_fsmIdx, vl_eIdx := pl_error.sessionId - v_EPTF_HTTP_EntityOffset;
+
+ if (vl_eIdx < 0) {
+ //if connection opened with f_EPTF_HTTP_LocalTransport_newPortGroup() with no instant connection open sessionId cannot be determined
+ f_EPTF_HTTP_debug(%definitionId &
+ ": Entity cannot be determined to socket Error on session: " &
+ int2str(pl_error.sessionId));
+
+ f_EPTF_HTTP_postEvent({{v_EPTF_HTTP_myBIdx,c_EPTF_HTTP_inputIdx_responseSocketError,
+ omit,omit},vl_reportedArgs});
+
+ return;
+ };
+
+ f_EPTF_Base_assert(%definitionId & ": Invalid connection id (" &
+ int2str(vl_eIdx) &
+ ") applied to connId -> fsm index database!",
+ isvalue(v_EPTF_HTTP_ConnId2FIdx[vl_eIdx]));
+
+ vl_fsmIdx := v_EPTF_HTTP_ConnId2FIdx[vl_eIdx];
+
+ f_EPTF_HTTP_debug(%definitionId & ": Fsm index: " &
+ int2str(vl_fsmIdx) & " acquired for entity id: " &
+ int2str(vl_eIdx));
+
+ // generating postEvent for socket error
+ f_EPTF_HTTP_postEvent({{v_EPTF_HTTP_myBIdx,c_EPTF_HTTP_inputIdx_responseSocketError,
+ {vl_eIdx,vl_fsmIdx},omit},vl_reportedArgs});
+ }
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_messageReceivedServer
+ //
+ // Purpose:
+ // Function to handle received message in a server
+ //
+ // Parameters:
+ // pl_message - *in* <EPTF_HTTP_IncomingMessage> - incoming message from the transport layer
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_messageReceivedServer(
+ in EPTF_HTTP_IncomingMessage pl_message)
+ runs on EPTF_HTTP_LGen_CT
+ {
+ v_intNoWarningLG := dec_HTTPMessage(pl_message.httpMessage, v_EPTF_HTTP_incomingMessage);
+
+ v_EPTF_HTTP_lastReceivedGroupId := pl_message.groupId;
+ v_EPTF_HTTP_lastReceivedPortId := pl_message.sessionId;
+ v_EPTF_HTTP_lastReceivedSeqNum := pl_message.seqNum;
+
+ f_EPTF_HTTP_debug(%definitionId & ": Message received!");
+
+ var integer vl_eIdx := -1;
+ var integer vl_fsmCtx := -1;
+ var integer vl_eventIdx := -1;
+
+ if (null != vf_EPTF_HTTP_searchContext)
+ {
+ vf_EPTF_HTTP_searchContext.apply(vl_eIdx, vl_fsmCtx);
+ }
+
+ if (ischosen(v_EPTF_HTTP_incomingMessage.request))
+ {
+ vl_eventIdx := c_EPTF_HTTP_inputIdx_requestCharReceived;
+
+ f_EPTF_HTTP_updateStatistics(true,
+ v_EPTF_HTTP_incomingMessage.request.method, -1);
+ }
+ else
+ if (ischosen(v_EPTF_HTTP_incomingMessage.request_binary))
+ {
+ vl_eventIdx := c_EPTF_HTTP_inputIdx_requestOctReceived;
+
+ f_EPTF_HTTP_updateStatistics(true,
+ v_EPTF_HTTP_incomingMessage.request_binary.method, -1);
+ }
+ else // not response
+ {
+ f_EPTF_HTTP_warning(%definitionId & ": Unhandled message type received: " &
+ log2str(v_EPTF_HTTP_incomingMessage));
+ return;
+ }
+
+ f_EPTF_HTTP_dispatchEvent( {{v_EPTF_HTTP_myBIdx, vl_eventIdx,
+ {vl_eIdx,vl_fsmCtx}, omit},{}});
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_eventReceivedServer
+ //
+ // Purpose:
+ // Function to handle received events in a server
+ //
+ // Parameters:
+ // pl_sessionId - *in* <EPTF_HTTP_Event> - event received from the transport layer
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_eventReceivedServer(
+ in EPTF_HTTP_Event pl_event)
+ runs on EPTF_HTTP_LGen_CT
+ {
+ v_EPTF_HTTP_event := pl_event;
+
+ var integer vl_eIdx := -1;
+ var integer vl_fsmCtx := -1;
+
+ if (null != vf_EPTF_HTTP_searchContext4Event)
+ {
+ vf_EPTF_HTTP_searchContext4Event.apply(vl_eIdx, vl_fsmCtx);
+ }
+
+ f_EPTF_HTTP_dispatchEvent( {{v_EPTF_HTTP_myBIdx, pl_event.eventType,
+ {vl_eIdx,vl_fsmCtx}, omit},{}});
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_socketErrorReceivedServer
+ //
+ // Purpose:
+ // Function to handle received socket errors
+ //
+ // Parameters:
+ // pl_error - *in* <EPTF_HTTP_EventError> - error received from the transport layer
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_socketErrorReceivedServer(
+ in EPTF_HTTP_EventError pl_error)
+ runs on EPTF_HTTP_LGen_CT
+ {
+ v_EPTF_HTTP_error := pl_error;
+
+ var integer vl_eIdx := -1;
+ var integer vl_fsmCtx := -1;
+
+ if (null != vf_EPTF_HTTP_searchContext4Error)
+ {
+ vf_EPTF_HTTP_searchContext4Error.apply(vl_eIdx, vl_fsmCtx);
+ }
+
+ var EPTF_IntegerList vl_reportedArgs := { -1, -1 };
+ if(ispresent(pl_error.transportError.errorCode)) { vl_reportedArgs[0] := enum2int(pl_error.transportError.errorCode); }
+ if(ispresent(pl_error.transportError.os_error_code)) { vl_reportedArgs[1] := pl_error.transportError.os_error_code; }
+
+ f_EPTF_HTTP_postEvent( {{v_EPTF_HTTP_myBIdx, c_EPTF_HTTP_inputIdx_responseSocketError,
+ {vl_eIdx,vl_fsmCtx}, omit},vl_reportedArgs} );
+ }
+
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_sendRequest
+ //
+ // Purpose:
+ // Function to send HTTP message
+ //
+ // Parameters:
+ // pl_connId - *integer* - port group index on which the message is
+ // intended to be sent
+ // pl_sessionId - *integer* - session id
+ // pl_message - *octetstring* - message to send
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_sendRequest(
+ in integer pl_connId,
+ in integer pl_sessionId,
+ in octetstring pl_message)
+ runs on EPTF_HTTP_LGen_CT
+ {
+ vf_EPTF_HTTP_sendRequest.apply(pl_connId, pl_sessionId, pl_message);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_closeConnection
+ //
+ // Purpose:
+ // Function to close connection
+ //
+ // Parameters:
+ // pl_connId - *integer* - port group index
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // Closes all open conection in a port group
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_closeConnection(
+ in integer pl_connId)
+ runs on EPTF_HTTP_LGen_CT
+ {
+ vf_EPTF_HTTP_connectionClose.apply(pl_connId);
+ }
+
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_closeHalfConnection
+ //
+ // Purpose:
+ // Function to half close connection
+ //
+ // Parameters:
+ // pl_connId - *integer* - port group index
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // Half closes all open connections in a port group
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_closeHalfConnection(
+ in integer pl_connId)
+ runs on EPTF_HTTP_LGen_CT
+ {
+ vf_EPTF_HTTP_connectionHalfClose.apply(pl_connId);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_openConnection
+ //
+ // Purpose:
+ // Function to open connection
+ //
+ // Parameters:
+ // -
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // Open all idle connections in a port group
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_openConnection(
+ in integer pl_connId,
+ in integer pl_sessionId)
+ runs on EPTF_HTTP_LGen_CT return boolean
+ {
+ return vf_EPTF_HTTP_connectionOpen.apply(pl_connId, pl_sessionId);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_closePortOfUser
+ //
+ // Purpose:
+ // Function to close port of user
+ //
+ // Parameters:
+ // -
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_closePortOfUser(
+ in integer pl_groupId,
+ in integer pl_sessionId)
+ runs on EPTF_HTTP_LGen_CT
+ {
+ vf_EPTF_HTTP_closePortOfUser.apply(pl_groupId, pl_sessionId);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_freePortOfUser
+ //
+ // Purpose:
+ // Function to free port of user
+ //
+ // Parameters:
+ // -
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_freePortOfUser(
+ in integer pl_groupId,
+ in integer pl_sessionId)
+ runs on EPTF_HTTP_LGen_CT
+ {
+ vf_EPTF_HTTP_freePortOfUser.apply(pl_groupId, pl_sessionId);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_sendResponse
+ //
+ // Purpose:
+ // Sends the response.
+ //
+ // Parameters:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_sendResponse(
+ in integer pl_groupId,
+ in integer pl_portId,
+ in integer pl_seqNum,
+ in octetstring pl_message)
+ runs on EPTF_HTTP_LGen_CT
+ {
+ vf_EPTF_HTTP_sendResponse.apply(pl_groupId, pl_portId, pl_seqNum, pl_message);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_listen
+ //
+ // Purpose:
+ // Opens a listen port
+ //
+ // Parameters:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_listen(
+ in integer pl_groupId)
+ runs on EPTF_HTTP_LGen_CT
+ return integer
+ {
+ return vf_EPTF_HTTP_listen.apply(pl_groupId);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_closePort
+ //
+ // Purpose:
+ // Closes a port in a server port group.
+ //
+ // Parameters:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_closePort(
+ in integer pl_groupId,
+ in integer pl_portId
+ )
+ runs on EPTF_HTTP_LGen_CT
+ {
+ vf_EPTF_HTTP_closePort.apply(pl_groupId, pl_portId);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_setAuthData
+ //
+ // Purpose:
+ // Sets the authentication data for the server.
+ //
+ // Parameters:
+ // pl_authData - *in* <EPTF_HTTP_setAuthData> - authentication data
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_setAuthData(in EPTF_HTTP_setAuthData pl_authData)
+ runs on EPTF_HTTP_LGen_CT
+ {
+ v_EPTF_HTTP_authData.method := pl_authData.method;
+ v_EPTF_HTTP_authData.algorithm := pl_authData.algorithm;
+ v_EPTF_HTTP_authData.realm := pl_authData.realm;
+ v_EPTF_HTTP_authData.domain := pl_authData.domain;
+ v_EPTF_HTTP_authData.qopOptions := pl_authData.qopOptions;
+ v_EPTF_HTTP_authData.password := pl_authData.password;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_genAuthResponse
+ //
+ // Purpose:
+ // Generates authentication response data.
+ //
+ // Parameters:
+ // pl_authResp - *inout* *charstring* - authentication data
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_genAuthResponse(inout charstring pl_authResp)
+ runs on EPTF_HTTP_LGen_CT
+ {
+ var charstring vl_nonce := f_EPTF_HTTP_getNonceValue(v_EPTF_HTTP_authData);
+
+ pl_authResp := v_EPTF_HTTP_authData.method &
+ " realm=\"" & v_EPTF_HTTP_authData.realm & "\"" &
+ ",nonce=\"" & vl_nonce & "\"" &
+ ",algorithm=" & v_EPTF_HTTP_authData.algorithm &
+ ",qop=\"" & v_EPTF_HTTP_authData.qopOptions &"\"";
+
+ if (ispresent(v_EPTF_HTTP_authData.domain))
+ {
+ pl_authResp := pl_authResp & ",domain=\"" & v_EPTF_HTTP_authData.domain & "\"";
+ }
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_checkAuthData
+ //
+ // Purpose:
+ // Checks authorization data.
+ //
+ // Parameters:
+ // pl_method - *in* *charstring* - HTTP request method
+ // pl_authData - *in* *charstring* - the Authorization header value
+ // pl_entityBody - *in* *charstring* - the entity body
+ //
+ // Return value:
+ // boolean - check result
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_checkAuthData(in charstring pl_httpMethod, in charstring pl_authData, in charstring pl_entityBody)
+ runs on EPTF_HTTP_LGen_CT
+ return boolean
+ {
+ var EPTF_HTTP_AuthDetails vl_authDetails := c_EPTF_HTTP_initAuthDetails;
+
+ f_EPTF_HTTP_getAuthParams(pl_authData, vl_authDetails);
+
+ f_EPTF_HTTP_debug(log2str(%definitionId, ": Authentication details: ", vl_authDetails));
+
+ var charstring vl_response := f_calculateDigestResponse(
+ vl_authDetails.nonce,
+ vl_authDetails.cnonce,
+ vl_authDetails.username,
+ vl_authDetails.realm,
+ v_EPTF_HTTP_authData.password,
+ vl_authDetails.algorithm,
+ vl_authDetails.nonceCount,
+ pl_httpMethod,
+ vl_authDetails.qop,
+ vl_authDetails.uri,
+ f_calculateMD5(pl_entityBody));
+
+ return vl_response == vl_authDetails.response;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_addNewHeaderLines
+ //
+ // Purpose:
+ // Add header lines to the header lines database
+ //
+ // Parameters:
+ // pl_headerLines - *in* <HeaderLines> - header lines to add
+ //
+ // Return Value:
+ // *integer* - index of HTTP header lines database where new data is
+ // found or inserted
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_addNewHeaderLines (
+ in HeaderLines pl_headerLines)
+ runs on EPTF_HTTP_LGen_CT
+ return integer
+ {
+
+ var integer pl_headerLinesIdx := f_EPTF_HTTP_existHeaderLines(pl_headerLines);
+
+ if (pl_headerLinesIdx > -1) {
+
+ return pl_headerLinesIdx;
+ }
+ else {
+ var integer pl_size := sizeof(v_EPTF_HTTP_headerLinesList);
+
+ v_EPTF_HTTP_headerLinesList[pl_size] := pl_headerLines;
+
+ return pl_size;
+ }
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_setHeaderValue
+ //
+ // Purpose:
+ // Sets a header value for an element in the HeaderLines list.
+ //
+ // Parameters:
+ // pl_headerLinesIdx - *in* *integer* - header line index
+ // pl_headerName - *in* *charstring* - header name
+ // pl_headerValue - *in* *charstring* - header value
+ //
+ // Detailed comments:
+ // If the header does not exist, the value is NOT added.
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_setHeaderValue(
+ in integer pl_headerLinesIdx,
+ in charstring pl_headerName,
+ in charstring pl_headerValue)
+ runs on EPTF_HTTP_LGen_CT
+ {
+ for (var integer i := 0; i < sizeof(v_EPTF_HTTP_headerLinesList[pl_headerLinesIdx]); i := i + 1)
+ {
+ if (pl_headerName == v_EPTF_HTTP_headerLinesList[pl_headerLinesIdx][i].header_name)
+ {
+ v_EPTF_HTTP_headerLinesList[pl_headerLinesIdx][i].header_value := pl_headerValue;
+ break;
+ }
+ }
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_setCharBody
+ //
+ // Purpose:
+ // Sets the charstring body of an entity. All of the entities referencing this
+ /// charstring body entry will be affected.
+ //
+ // Parameters:
+ // pl_eIdx - *in* *integer* - entity index
+ // pl_body - *in* *charstring* - body value
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_setCharBody(
+ in integer pl_eIdx,
+ in charstring pl_body
+ )
+ runs on EPTF_HTTP_LGen_CT
+ {
+ var integer vl_ctx := f_EPTF_HTTP_getContextIndex(pl_eIdx);
+ var integer vl_bodyId := v_EPTF_HTTP_contexts[vl_ctx].bodyId;
+
+ v_EPTF_HTTP_charBodyDB[vl_bodyId] := pl_body;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_createContextLengthHeaderLine
+ //
+ // Purpose:
+ // Create header lines containing only content length header line
+ //
+ // Parameters:
+ // pl_body - *in* *charstring* - message body
+ //
+ // Return Value:
+ // <HeaderLines> - created header lines
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_createContextLengthHeaderLine(
+ in charstring pl_body)
+ runs on EPTF_HTTP_LGen_CT
+ return HeaderLines
+ {
+ var HeaderLines vl_hl;
+
+ vl_hl := { { "Content-Length", int2str(lengthof(pl_body)) } };
+
+ return vl_hl;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_addOptTempParamNumber
+ //
+ // Purpose:
+ // Sets the variable that holds the user added optional template parameters.
+ //
+ // Parameters:
+ // pl_number - *in* *integer* - the number of the optional template parameters
+ //
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_addOptTempParamNumber(in integer pl_number)
+ runs on EPTF_HTTP_LGen_CT
+ {
+ var integer vl_sizeof := sizeof(v_EPTF_HTTP_optionalTempParams)
+ for (var integer i := vl_sizeof; i < pl_number; i := i + 1)
+ {
+ v_EPTF_HTTP_optionalTempParams[i] := "";
+ }
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_setOptTempParam
+ //
+ // Purpose:
+ // Sets the user added optional template parameter value
+ //
+ // Parameters:
+ // pl_idx - *in* *integer* - the index of the optional template parameter
+ // pl_paramValue - *in* *charstring* - parameter value
+ //
+ // Detailed Comments:
+ // The index must be the same as the index of the parameter
+ // when calling f_EPTF_LGenBase_extendTemplateType.
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_setOptTempParam(in integer pl_idx, in charstring pl_paramValue)
+ runs on EPTF_HTTP_LGen_CT
+ {
+ if (pl_idx >= sizeof(v_EPTF_HTTP_optionalTempParams) or 0 > pl_idx)
+ {
+ f_EPTF_HTTP_warning(%definitionId &
+ ": Setting invalid template parameter: " & int2str(pl_idx));
+ return;
+ }
+
+ v_EPTF_HTTP_optionalTempParams[pl_idx] := pl_paramValue;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_cleanupContext
+ //
+ // Purpose:
+ // Cleans up entity context. All the value set by f_EPTF_HTTP_setEntityContextServer
+ // or f_EPTF_HTTP_setEntityContext remains unchanged.
+ //
+ // Parameters:
+ // pl_eIdx - *in* *integer* - entity index
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_cleanupContext(in integer pl_eIdx)
+ runs on EPTF_HTTP_LGen_CT
+ {
+ var integer vl_EPTF_HTTP_myCtx := f_EPTF_HTTP_getContextIndex(pl_eIdx);
+
+ v_EPTF_HTTP_contexts[vl_EPTF_HTTP_myCtx].requestPending := c_EPTF_HTTP_initCtx.requestPending;
+ v_EPTF_HTTP_contexts[vl_EPTF_HTTP_myCtx].portId := c_EPTF_HTTP_initCtx.portId;
+ v_EPTF_HTTP_contexts[vl_EPTF_HTTP_myCtx].httpMessage := omit;//c_EPTF_HTTP_initCtx.httpMessage;
+ v_EPTF_HTTP_contexts[vl_EPTF_HTTP_myCtx].seqNum := c_EPTF_HTTP_initCtx.seqNum;
+ v_EPTF_HTTP_contexts[vl_EPTF_HTTP_myCtx].connId := c_EPTF_HTTP_initCtx.connId;
+
+ v_EPTF_HTTP_ConnId2FIdx[pl_eIdx] := -1;
+ }
+} //EPTF_HTTP_PublicFunctions
+
+
+///////////////////////////////////////////////////////////////////////////////
+// Group: EPTF_HTTP_PrivateFunctions
+//
+// Purpose:
+// The functions of the EPTF HTTP Private Functions
+//
+///////////////////////////////////////////////////////////////////////////////
+group EPTF_HTTP_PrivateFunctions {
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_cleanup_CT
+ //
+ // Purpose:
+ // The HTTP HTTP cleanup function
+ //
+ // Parameters:
+ // -
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ private function f_EPTF_HTTP_cleanup_CT()
+ runs on EPTF_HTTP_LGen_CT
+ {
+ if (not v_EPTF_HTTP_initialized)
+ {
+ return;
+ }
+ v_EPTF_HTTP_initialized := false;
+
+ f_EPTF_str2int_HashMap_Delete(c_EPTF_HTTP_HashMap_charDatabase);
+ f_EPTF_oct2int_HashMap_Delete(c_EPTF_HTTP_HashMap_octDatabase);
+
+ v_EPTF_HTTP_charDB := -1;
+ v_EPTF_HTTP_octDB := -1;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_declareStepsAndEvent
+ //
+ // Purpose:
+ // Function to declare the steps and events
+ //
+ // Parameters:
+ // -
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_declareStepsAndEvent( )
+ runs on EPTF_HTTP_LGen_CT
+ {
+
+ if( //steps
+ c_EPTF_HTTP_stepIdx_sendRequest != f_EPTF_LGenBase_declareStep(c_EPTF_HTTP_myBName, {c_EPTF_HTTP_stepName_sendRequest,refers(f_EPTF_HTTP_step_sendRequest)})
+ or c_EPTF_HTTP_stepIdx_handleTimeout != f_EPTF_LGenBase_declareStep(c_EPTF_HTTP_myBName, {c_EPTF_HTTP_stepName_handleTimeout,refers(f_EPTF_HTTP_step_handleTimeout)})
+ or c_EPTF_HTTP_stepIdx_responseReceived != f_EPTF_LGenBase_declareStep(c_EPTF_HTTP_myBName, {c_EPTF_HTTP_stepName_responseReceived,refers(f_EPTF_HTTP_step_processResponse)})
+ or c_EPTF_HTTP_stepIdx_openConnection != f_EPTF_LGenBase_declareStep(c_EPTF_HTTP_myBName, {c_EPTF_HTTP_stepName_openConnection,refers(f_EPTF_HTTP_step_sendConnect)})
+ or c_EPTF_HTTP_stepIdx_closeConnection != f_EPTF_LGenBase_declareStep(c_EPTF_HTTP_myBName, {c_EPTF_HTTP_stepName_closeConnection,refers(f_EPTF_HTTP_step_sendClose)})
+ or c_EPTF_HTTP_stepIdx_halfCloseConnection != f_EPTF_LGenBase_declareStep(c_EPTF_HTTP_myBName, {c_EPTF_HTTP_stepName_halfCloseConnection,refers(f_EPTF_HTTP_step_sendHalfClose)})
+ or c_EPTF_HTTP_stepIdx_closePortOfUser != f_EPTF_LGenBase_declareStep(c_EPTF_HTTP_myBName, {c_EPTF_HTTP_stepName_closePortOfUser,refers(f_EPTF_HTTP_step_closePortOfUser)})
+ or c_EPTF_HTTP_stepIdx_freePortOfUser != f_EPTF_LGenBase_declareStep(c_EPTF_HTTP_myBName, {c_EPTF_HTTP_stepName_freePortOfUser,refers(f_EPTF_HTTP_step_freePortOfUser)})
+ or c_EPTF_HTTP_stepIdx_setEntityContextHTTPMethodCONNECT != f_EPTF_LGenBase_declareStep(c_EPTF_HTTP_myBName, {c_EPTF_HTTP_stepName_setEntityContextHTTPMethodCONNECT,refers(f_EPTF_HTTP_step_setEntityContextHTTPMethodCONNECT)})
+ or c_EPTF_HTTP_stepIdx_setEntityContextHTTPMethodDELETE != f_EPTF_LGenBase_declareStep(c_EPTF_HTTP_myBName, {c_EPTF_HTTP_stepName_setEntityContextHTTPMethodDELETE,refers(f_EPTF_HTTP_step_setEntityContextHTTPMethodDELETE)})
+ or c_EPTF_HTTP_stepIdx_setEntityContextHTTPMethodGET != f_EPTF_LGenBase_declareStep(c_EPTF_HTTP_myBName, {c_EPTF_HTTP_stepName_setEntityContextHTTPMethodGET,refers(f_EPTF_HTTP_step_setEntityContextHTTPMethodGET)})
+ or c_EPTF_HTTP_stepIdx_setEntityContextHTTPMethodHEAD != f_EPTF_LGenBase_declareStep(c_EPTF_HTTP_myBName, {c_EPTF_HTTP_stepName_setEntityContextHTTPMethodHEAD,refers(f_EPTF_HTTP_step_setEntityContextHTTPMethodHEAD)})
+ or c_EPTF_HTTP_stepIdx_setEntityContextHTTPMethodOPTIONS != f_EPTF_LGenBase_declareStep(c_EPTF_HTTP_myBName, {c_EPTF_HTTP_stepName_setEntityContextHTTPMethodOPTIONS,refers(f_EPTF_HTTP_step_setEntityContextHTTPMethodOPTIONS)})
+ or c_EPTF_HTTP_stepIdx_setEntityContextHTTPMethodPOST != f_EPTF_LGenBase_declareStep(c_EPTF_HTTP_myBName, {c_EPTF_HTTP_stepName_setEntityContextHTTPMethodPOST,refers(f_EPTF_HTTP_step_setEntityContextHTTPMethodPOST)})
+ or c_EPTF_HTTP_stepIdx_setEntityContextHTTPMethodPUT != f_EPTF_LGenBase_declareStep(c_EPTF_HTTP_myBName, {c_EPTF_HTTP_stepName_setEntityContextHTTPMethodPUT,refers(f_EPTF_HTTP_step_setEntityContextHTTPMethodPUT)})
+ or c_EPTF_HTTP_stepIdx_setEntityContextHTTPMethodTRACE != f_EPTF_LGenBase_declareStep(c_EPTF_HTTP_myBName, {c_EPTF_HTTP_stepName_setEntityContextHTTPMethodTRACE,refers(f_EPTF_HTTP_step_setEntityContextHTTPMethodTRACE)})
+ or c_EPTF_HTTP_stepIdx_handleRequest != f_EPTF_LGenBase_declareStep(c_EPTF_HTTP_myBName,{c_EPTF_HTTP_stepName_handleRequest,refers(f_EPTF_HTTP_step_handleRequest)})
+ or c_EPTF_HTTP_stepIdx_sendResponse != f_EPTF_LGenBase_declareStep(c_EPTF_HTTP_myBName,{c_EPTF_HTTP_stepName_sendResponse,refers(f_EPTF_HTTP_step_sendResponse)})
+ or c_EPTF_HTTP_stepIdx_closePort != f_EPTF_LGenBase_declareStep(c_EPTF_HTTP_myBName, {c_EPTF_HTTP_stepName_closePort, refers(f_EPTF_HTTP_step_closePort)})
+ or c_EPTF_HTTP_stepIdx_cleanUpContext != f_EPTF_LGenBase_declareStep(c_EPTF_HTTP_myBName, {c_EPTF_HTTP_stepName_cleanUpContext, refers(f_EPTF_HTTP_step_cleanUp)})
+
+ //inputs
+ or c_EPTF_HTTP_inputIdx_response100Continue != f_EPTF_LGenBase_declareFsmEvent(c_EPTF_HTTP_myBName,c_EPTF_HTTP_inputName_response100Continue)
+ or c_EPTF_HTTP_inputIdx_response101SwitchingProtocols != f_EPTF_LGenBase_declareFsmEvent(c_EPTF_HTTP_myBName,c_EPTF_HTTP_inputName_response101SwitchingProtocols)
+ or c_EPTF_HTTP_inputIdx_response200OK != f_EPTF_LGenBase_declareFsmEvent(c_EPTF_HTTP_myBName,c_EPTF_HTTP_inputName_response200OK)
+ or c_EPTF_HTTP_inputIdx_response201Created != f_EPTF_LGenBase_declareFsmEvent(c_EPTF_HTTP_myBName,c_EPTF_HTTP_inputName_response201Created)
+ or c_EPTF_HTTP_inputIdx_response202Accepted != f_EPTF_LGenBase_declareFsmEvent(c_EPTF_HTTP_myBName,c_EPTF_HTTP_inputName_response202Accepted)
+ or c_EPTF_HTTP_inputIdx_response203NonAuthoritativeInformation != f_EPTF_LGenBase_declareFsmEvent(c_EPTF_HTTP_myBName,c_EPTF_HTTP_inputName_response203NonAuthoritativeInformation)
+ or c_EPTF_HTTP_inputIdx_response204NoContent != f_EPTF_LGenBase_declareFsmEvent(c_EPTF_HTTP_myBName,c_EPTF_HTTP_inputName_response204NoContent)
+ or c_EPTF_HTTP_inputIdx_response205ResetContent != f_EPTF_LGenBase_declareFsmEvent(c_EPTF_HTTP_myBName,c_EPTF_HTTP_inputName_response205ResetContent)
+ or c_EPTF_HTTP_inputIdx_response206PartialContent != f_EPTF_LGenBase_declareFsmEvent(c_EPTF_HTTP_myBName,c_EPTF_HTTP_inputName_response206PartialContent)
+ or c_EPTF_HTTP_inputIdx_response300MultipleChoices != f_EPTF_LGenBase_declareFsmEvent(c_EPTF_HTTP_myBName,c_EPTF_HTTP_inputName_response300MultipleChoices)
+ or c_EPTF_HTTP_inputIdx_response301MovedPermanently != f_EPTF_LGenBase_declareFsmEvent(c_EPTF_HTTP_myBName,c_EPTF_HTTP_inputName_response301MovedPermanently)
+ or c_EPTF_HTTP_inputIdx_response302Found != f_EPTF_LGenBase_declareFsmEvent(c_EPTF_HTTP_myBName,c_EPTF_HTTP_inputName_response302Found)
+ or c_EPTF_HTTP_inputIdx_response303SeeOther != f_EPTF_LGenBase_declareFsmEvent(c_EPTF_HTTP_myBName,c_EPTF_HTTP_inputName_response303SeeOther)
+ or c_EPTF_HTTP_inputIdx_response304NotModified != f_EPTF_LGenBase_declareFsmEvent(c_EPTF_HTTP_myBName,c_EPTF_HTTP_inputName_response304NotModified)
+ or c_EPTF_HTTP_inputIdx_response305UseProxy != f_EPTF_LGenBase_declareFsmEvent(c_EPTF_HTTP_myBName,c_EPTF_HTTP_inputName_response305UseProxy)
+ or c_EPTF_HTTP_inputIdx_response306Unused != f_EPTF_LGenBase_declareFsmEvent(c_EPTF_HTTP_myBName,c_EPTF_HTTP_inputName_response306Unused)
+ or c_EPTF_HTTP_inputIdx_response307TemporaryRedirect != f_EPTF_LGenBase_declareFsmEvent(c_EPTF_HTTP_myBName,c_EPTF_HTTP_inputName_response307TemporaryRedirect)
+ or c_EPTF_HTTP_inputIdx_response400BadRequest != f_EPTF_LGenBase_declareFsmEvent(c_EPTF_HTTP_myBName,c_EPTF_HTTP_inputName_response400BadRequest)
+ or c_EPTF_HTTP_inputIdx_response401Unauthorized != f_EPTF_LGenBase_declareFsmEvent(c_EPTF_HTTP_myBName,c_EPTF_HTTP_inputName_response401Unauthorized)
+ or c_EPTF_HTTP_inputIdx_response402PaymentRequired != f_EPTF_LGenBase_declareFsmEvent(c_EPTF_HTTP_myBName,c_EPTF_HTTP_inputName_response402PaymentRequired)
+ or c_EPTF_HTTP_inputIdx_response403Forbidden != f_EPTF_LGenBase_declareFsmEvent(c_EPTF_HTTP_myBName,c_EPTF_HTTP_inputName_response403Forbidden)
+ or c_EPTF_HTTP_inputIdx_response404NotFound != f_EPTF_LGenBase_declareFsmEvent(c_EPTF_HTTP_myBName,c_EPTF_HTTP_inputName_response404NotFound)
+ or c_EPTF_HTTP_inputIdx_response405MethodNotAllowed != f_EPTF_LGenBase_declareFsmEvent(c_EPTF_HTTP_myBName,c_EPTF_HTTP_inputName_response405MethodNotAllowed)
+ or c_EPTF_HTTP_inputIdx_response406NotAcceptable != f_EPTF_LGenBase_declareFsmEvent(c_EPTF_HTTP_myBName,c_EPTF_HTTP_inputName_response406NotAcceptable)
+ or c_EPTF_HTTP_inputIdx_response407ProxyAuthenticationRequired != f_EPTF_LGenBase_declareFsmEvent(c_EPTF_HTTP_myBName,c_EPTF_HTTP_inputName_response407ProxyAuthenticationRequired)
+ or c_EPTF_HTTP_inputIdx_response408RequestTimeout != f_EPTF_LGenBase_declareFsmEvent(c_EPTF_HTTP_myBName,c_EPTF_HTTP_inputName_response408RequestTimeout)
+ or c_EPTF_HTTP_inputIdx_response409Conflict != f_EPTF_LGenBase_declareFsmEvent(c_EPTF_HTTP_myBName,c_EPTF_HTTP_inputName_response409Conflict)
+ or c_EPTF_HTTP_inputIdx_response410Gone != f_EPTF_LGenBase_declareFsmEvent(c_EPTF_HTTP_myBName,c_EPTF_HTTP_inputName_response410Gone)
+ or c_EPTF_HTTP_inputIdx_response411LengthRequired != f_EPTF_LGenBase_declareFsmEvent(c_EPTF_HTTP_myBName,c_EPTF_HTTP_inputName_response411LengthRequired)
+ or c_EPTF_HTTP_inputIdx_response412PreconditionFailed != f_EPTF_LGenBase_declareFsmEvent(c_EPTF_HTTP_myBName,c_EPTF_HTTP_inputName_response412PreconditionFailed)
+ or c_EPTF_HTTP_inputIdx_response413RequestEntityTooLarge != f_EPTF_LGenBase_declareFsmEvent(c_EPTF_HTTP_myBName,c_EPTF_HTTP_inputName_response413RequestEntityTooLarge)
+ or c_EPTF_HTTP_inputIdx_response414RequestURITooLong != f_EPTF_LGenBase_declareFsmEvent(c_EPTF_HTTP_myBName,c_EPTF_HTTP_inputName_response414RequestURITooLong)
+ or c_EPTF_HTTP_inputIdx_response415UnsupportedMediaType != f_EPTF_LGenBase_declareFsmEvent(c_EPTF_HTTP_myBName,c_EPTF_HTTP_inputName_response415UnsupportedMediaType)
+ or c_EPTF_HTTP_inputIdx_response416RequestedRangeNotSatisfiable != f_EPTF_LGenBase_declareFsmEvent(c_EPTF_HTTP_myBName,c_EPTF_HTTP_inputName_response416RequestedRangeNotSatisfiable)
+ or c_EPTF_HTTP_inputIdx_response417ExpectationFailed != f_EPTF_LGenBase_declareFsmEvent(c_EPTF_HTTP_myBName,c_EPTF_HTTP_inputName_response417ExpectationFailed)
+ or c_EPTF_HTTP_inputIdx_response500InternalServerError != f_EPTF_LGenBase_declareFsmEvent(c_EPTF_HTTP_myBName,c_EPTF_HTTP_inputName_response500InternalServerError)
+ or c_EPTF_HTTP_inputIdx_response501NotImplemented != f_EPTF_LGenBase_declareFsmEvent(c_EPTF_HTTP_myBName,c_EPTF_HTTP_inputName_response501NotImplemented)
+ or c_EPTF_HTTP_inputIdx_response502BadGateway != f_EPTF_LGenBase_declareFsmEvent(c_EPTF_HTTP_myBName,c_EPTF_HTTP_inputName_response502BadGateway)
+ or c_EPTF_HTTP_inputIdx_response503ServiceUnavailable != f_EPTF_LGenBase_declareFsmEvent(c_EPTF_HTTP_myBName,c_EPTF_HTTP_inputName_response503ServiceUnavailable)
+ or c_EPTF_HTTP_inputIdx_response504GatewayTimeout != f_EPTF_LGenBase_declareFsmEvent(c_EPTF_HTTP_myBName,c_EPTF_HTTP_inputName_response504GatewayTimeout)
+ or c_EPTF_HTTP_inputIdx_response505HTTPVersionNotSupported != f_EPTF_LGenBase_declareFsmEvent(c_EPTF_HTTP_myBName,c_EPTF_HTTP_inputName_response505HTTPVersionNotSupported)
+ or c_EPTF_HTTP_inputIdx_response100class != f_EPTF_LGenBase_declareFsmEvent(c_EPTF_HTTP_myBName,c_EPTF_HTTP_inputName_response100class)
+ or c_EPTF_HTTP_inputIdx_response200class != f_EPTF_LGenBase_declareFsmEvent(c_EPTF_HTTP_myBName,c_EPTF_HTTP_inputName_response200class)
+ or c_EPTF_HTTP_inputIdx_response300class != f_EPTF_LGenBase_declareFsmEvent(c_EPTF_HTTP_myBName,c_EPTF_HTTP_inputName_response300class)
+ or c_EPTF_HTTP_inputIdx_response400class != f_EPTF_LGenBase_declareFsmEvent(c_EPTF_HTTP_myBName,c_EPTF_HTTP_inputName_response400class)
+ or c_EPTF_HTTP_inputIdx_response500class != f_EPTF_LGenBase_declareFsmEvent(c_EPTF_HTTP_myBName,c_EPTF_HTTP_inputName_response500class)
+ or c_EPTF_HTTP_inputIdx_connectionOpened != f_EPTF_LGenBase_declareFsmEvent(c_EPTF_HTTP_myBName,c_EPTF_HTTP_inputName_connectionOpened)
+ or c_EPTF_HTTP_inputIdx_connectionClosed != f_EPTF_LGenBase_declareFsmEvent(c_EPTF_HTTP_myBName,c_EPTF_HTTP_inputName_connectionClosed)
+ or c_EPTF_HTTP_inputIdx_errorReceived != f_EPTF_LGenBase_declareFsmEvent(c_EPTF_HTTP_myBName,c_EPTF_HTTP_inputName_errorReceived)
+ or c_EPTF_HTTP_inputIdx_OKReceived != f_EPTF_LGenBase_declareFsmEvent(c_EPTF_HTTP_myBName,c_EPTF_HTTP_inputName_OKReceived)
+ or c_EPTF_HTTP_inputIdx_responseCharReceived != f_EPTF_LGenBase_declareFsmEvent(c_EPTF_HTTP_myBName,c_EPTF_HTTP_inputName_responseCharReceived)
+ or c_EPTF_HTTP_inputIdx_requestCharReceived != f_EPTF_LGenBase_declareFsmEvent(c_EPTF_HTTP_myBName,c_EPTF_HTTP_inputName_requestCharReceived)
+ or c_EPTF_HTTP_inputIdx_responseOctReceived != f_EPTF_LGenBase_declareFsmEvent(c_EPTF_HTTP_myBName,c_EPTF_HTTP_inputName_responseOctReceived)
+ or c_EPTF_HTTP_inputIdx_requestOctReceived != f_EPTF_LGenBase_declareFsmEvent(c_EPTF_HTTP_myBName,c_EPTF_HTTP_inputName_requestOctReceived)
+ or c_EPTF_HTTP_inputIdx_responseSocketError != f_EPTF_LGenBase_declareFsmEvent(c_EPTF_HTTP_myBName,c_EPTF_HTTP_inputName_responseSocketError)
+ )
+ {
+ f_EPTF_HTTP_error(%definitionId&": error");
+ mtc.stop;
+ }
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_bindEntity4Behavior
+ //
+ // Purpose:
+ // Function to bind entity for the behaviour
+ //
+ // Parameters:
+ // pl_eIdx - *in* *integer* - entity index
+ //
+ // Return Value:
+ // <EPTF_IntegerList> - behaviour integer list
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_bindEntity4Behavior(
+ in integer pl_eIdx)
+ runs on EPTF_HTTP_LGen_CT
+ return EPTF_IntegerList
+ {
+ var integer vl_EPTF_HTTP_index := sizeof(v_EPTF_HTTP_contexts);
+
+ v_EPTF_HTTP_contexts[vl_EPTF_HTTP_index] := c_EPTF_HTTP_initCtx;
+
+ return {vl_EPTF_HTTP_index};
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_setContentGetterFunction4Entity
+ //
+ // Purpose:
+ // Function to set content getter function to the entity
+ //
+ // Parameters:
+ // pl_eIdx - *in* *integer* - entity index
+ // pl_contentGetter - *in* <EPTF_HTTP_bodyContentGetter_FT> - the content getter function
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_setContentGetterFunction4Entity(
+ in integer pl_eIdx,
+ in EPTF_HTTP_bodyContentGetter_FT pl_contentGetter)
+ runs on EPTF_HTTP_LGen_CT {
+
+
+ v_EPTF_HTTP_contexts[pl_eIdx].contentGetterFn := pl_contentGetter;
+
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_setContentGetterFunction4Entities
+ //
+ // Purpose:
+ // Function to set content getter function to the entities
+ //
+ // Parameters:
+ // pl_contentGetter - *in* <EPTF_HTTP_bodyContentGetter_FT> - the content getter function
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_setContentGetterFunction4Entities(
+ in EPTF_HTTP_bodyContentGetter_FT pl_contentGetter)
+ runs on EPTF_HTTP_LGen_CT {
+
+ for (var integer i := 0; i < sizeof(v_EPTF_HTTP_contexts); i := i + 1) {
+ v_EPTF_HTTP_contexts[i].contentGetterFn := pl_contentGetter;
+ }
+
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_setHeaderContentGetterFunction4Entity
+ //
+ // Purpose:
+ // Function to set header content getter function to the entity
+ //
+ // Parameters:
+ // pl_eIdx - *in* *integer* - entity index
+ // pl_headerContentGetter - *in* <EPTF_HTTP_headerContentGetter_FT> - the header content getter function
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_setHeaderContentGetterFunction4Entity(
+ in integer pl_eIdx,
+ in EPTF_HTTP_headerContentGetter_FT pl_headerContentGetter)
+ runs on EPTF_HTTP_LGen_CT {
+
+ v_EPTF_HTTP_contexts[pl_eIdx].headerGetterFn := pl_headerContentGetter;
+
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_setHeaderContentGetterFunction4Entities
+ //
+ // Purpose:
+ // Function to set header content getter function to the entities
+ //
+ // Parameters:
+ // pl_headerContentGetter - *in* <EPTF_HTTP_headerContentGetter_FT> - the header content getter function
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_setHeaderContentGetterFunction4Entities(
+ in EPTF_HTTP_headerContentGetter_FT pl_headerContentGetter)
+ runs on EPTF_HTTP_LGen_CT {
+
+ for (var integer i := 0; i < sizeof(v_EPTF_HTTP_contexts); i := i + 1) {
+ v_EPTF_HTTP_contexts[i].headerGetterFn := pl_headerContentGetter;
+ }
+
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_setRawHeaderContentGetterFunction4Entity
+ //
+ // Purpose:
+ // Function to set raw header content getter function to the entity
+ //
+ // Parameters:
+ // pl_eIdx - *in* *integer* - entity index
+ // pl_rawHeaderContentGetter - *in* <EPTF_HTTP_rawHeaderContentGetter_FT> - the raw header content getter function
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_setRawHeaderContentGetterFunction4Entity(
+ in integer pl_eIdx,
+ in EPTF_HTTP_rawHeaderContentGetter_FT pl_rawHeaderContentGetter)
+ runs on EPTF_HTTP_LGen_CT {
+
+ v_EPTF_HTTP_contexts[pl_eIdx].rawHeaderGetterFn := pl_rawHeaderContentGetter;
+
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_setRawHeaderContentGetterFunction4Entities
+ //
+ // Purpose:
+ // Function to set raw header content getter function to the entities
+ //
+ // Parameters:
+ // pl_rawHeaderContentGetter - *in* <EPTF_HTTP_rawHeaderContentGetter_FT> - the raw header content getter function
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_setRawHeaderContentGetterFunction4Entities(
+ in EPTF_HTTP_rawHeaderContentGetter_FT pl_rawHeaderContentGetter)
+ runs on EPTF_HTTP_LGen_CT {
+
+ for (var integer i := 0; i < sizeof(v_EPTF_HTTP_contexts); i := i + 1) {
+ v_EPTF_HTTP_contexts[i].rawHeaderGetterFn := pl_rawHeaderContentGetter;
+ }
+
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_unbindEntity4Behavior
+ //
+ // Purpose:
+ // Function to unbind entity
+ //
+ // Parameters:
+ // pl_eIdx - *in* *integer* - entity index
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_unbindEntity4Behavior(
+ in integer pl_eIdx)
+ runs on EPTF_HTTP_LGen_CT {
+
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_resetEntity4Behavior
+ //
+ // Purpose:
+ // Function to reset entity
+ //
+ // Parameters:
+ // pl_eIdx - *in* *integer* - entity index
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_resetEntity4Behavior(
+ in integer pl_eIdx)
+ runs on EPTF_HTTP_LGen_CT
+ {
+ var integer vl_EPTF_HTTP_myCtx := f_EPTF_HTTP_getContextIndex(pl_eIdx);
+ v_EPTF_HTTP_contexts[vl_EPTF_HTTP_myCtx] := {
+ method := "",
+ uri:= "",
+ headerLinesIdx := -1
+ }
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_initializeExtendedComponents
+ //
+ // Purpose:
+ // Function to initialize the extended components
+ //
+ // Parameters:
+ // pl_selfName - *charstring* - component self name
+ // pl_numEntities - *integer* - number of entities
+ // pl_entityNamePrefix - *charstring* - entity name prefix
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_initializeExtendedComponents(
+ in charstring pl_selfName,
+ in integer pl_numEntities := 0,
+ in charstring pl_entityNamePrefix)
+ runs on EPTF_HTTP_LGen_CT
+ {
+ f_EPTF_LGenBase_init(pl_selfName,pl_numEntities,pl_entityNamePrefix);
+ f_EPTF_Var_init_CT(pl_selfName);
+ f_EPTF_Logging_init_CT(pl_selfName);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_existHeaderLines
+ //
+ // Purpose:
+ // Check if header lines exist in header lines database
+ //
+ // Parameters:
+ // pl_headerLines - *in* <HeaderLines> - header lines to check
+ //
+ // Return Value:
+ // *integer* - database index if header lines exist, otherwise -1
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_existHeaderLines(
+ in HeaderLines pl_headerLines)
+ runs on EPTF_HTTP_LGen_CT
+ return integer
+ {
+ for (var integer i := 0; i < sizeof(v_EPTF_HTTP_headerLinesList); i := i + 1){
+ if (pl_headerLines == v_EPTF_HTTP_headerLinesList[i]) {
+ return i;
+ }
+ }
+
+ return -1;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_setAuthDetails4Entity
+ //
+ // Purpose:
+ // Function to set authorization details for entity such as password
+ //
+ // Parameters:
+ // pl_eIdx - *integer* - entity index
+ // pl_algorithm - *charstring* - used algorithm eg: MD5
+ // pl_password - *charstring* - used password
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // This function can be used to set authorization details for entity such as password, algorithm...
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_setAuthDetails4Entity(
+ in integer pl_eIdx,
+ in charstring pl_algorithm,
+ in charstring pl_password)
+ runs on EPTF_HTTP_LGen_CT
+ {
+ var integer myCtx := f_EPTF_HTTP_getContextIndex(pl_eIdx);
+
+ v_EPTF_HTTP_contexts[myCtx].authDetails.algorithm := pl_algorithm;
+ v_EPTF_HTTP_contexts[myCtx].authDetails.password := pl_password;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_getHeaderIndex
+ //
+ // Purpose:
+ // This function retrieves the index of a given header
+ //
+ // Parameters:
+ // pl_headerName - *in* *charstring* - the name of the header
+ // pl_headerList - *inout* <HeaderLines> - the HTTP header
+ //
+ // Return Value:
+ // *integer* - the header index
+ //
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_getHeaderIndex(
+ in charstring pl_headerName,
+ inout HeaderLines pl_headerList)
+ return integer
+ {
+ var integer vl_headerIdx := -1;
+ var integer vl_headers := sizeof(pl_headerList);
+
+ for(var integer i := 0; i < vl_headers; i:=i+1)
+ {
+ if (pl_headerList[i].header_name == pl_headerName) {
+ vl_headerIdx := i;
+ break;
+ }
+ }
+
+ return vl_headerIdx;
+ }
+
+ ///////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_isWhiteSpace
+ //
+ // Purpose:
+ // Function to decide wether a character is a whitespace.
+ //
+ // Parameters:
+ // pl_char - *in* *integer* - the character
+ //
+ // Return Value:
+ // *boolean* - the result
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ ///////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_isWhiteSpace(
+ in integer pl_char)
+ return boolean{
+ return (pl_char == 32 /* SP */ or pl_char == 9 /* TAB */);
+ }
+
+ ///////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_isWSBeforeEq
+ //
+ // Purpose:
+ // Function to decide wether a whitespace is before an equal sign.
+ //
+ // Parameters:
+ // pl_char - *in* *integer* - the whistspace character
+ //
+ // Return Value:
+ // *boolean* - the result
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ ///////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_isWSBeforeEq(
+ in charstring pl_string,
+ inout integer pl_pos,
+ out charstring pl_segment)
+ return boolean
+ {
+ pl_segment := "";
+ while (pl_pos<lengthof(pl_string)) {
+ var integer ch := char2int(pl_string[pl_pos]);
+ pl_segment := pl_segment & int2char(ch);
+ if (not f_EPTF_HTTP_isWhiteSpace(ch)) {
+ if (ch == 61 /* = */) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+ pl_pos:=pl_pos+1;
+ }
+ return false;
+ }
+
+ ///////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_getNextAttribute
+ //
+ // Purpose:
+ // Function to process the next header field parameter.
+ //
+ // Parameters:
+ // pl_char - *in* *integer* - the whistspace character
+ // pl_authenticateHeader - *in* *charstring* - the header field string
+ // pl_pos - *inout* *integer* - the actual position in the proccessing
+ // pl_errpos - *out* *integer* - the character position where the error occured
+ // pl_key - *out* *charstring* - the recevied parameter key
+ // pl_value - *out* *charstring* - the recevied parameter value
+ //
+ // Return Value:
+ // *boolean* - true if there is more parameters
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ ///////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_getNextAttribute(
+ in charstring pl_authenticateHeader,
+ inout integer pl_pos,
+ out integer pl_errpos,
+ out charstring pl_key,
+ out charstring pl_value)
+ return boolean{
+
+ const integer cl_WSKEY := 0;
+ const integer cl_KEY := 1;
+ const integer cl_EQ := 2;
+ const integer cl_WSVALUE := 3;
+ const integer cl_VALUE := 4;
+ const integer cl_WSCOMMA := 5;
+
+ var integer vl_state := cl_WSKEY;
+ var boolean vl_woqoute := false;
+ pl_key := "";
+ pl_value := "";
+ pl_errpos := -1;
+
+ for(var integer i:=pl_pos; i<lengthof(pl_authenticateHeader); i:=i+1) {
+ // action("pl_authenticateHeader[",i,"] := ", pl_authenticateHeader[i])
+ var integer ch := char2int(pl_authenticateHeader[i]);
+ select (vl_state) {
+ case (cl_WSKEY) {
+ if (not f_EPTF_HTTP_isWhiteSpace(ch)) {
+ vl_state := cl_KEY;
+ pl_key := pl_key & int2char(ch);
+ }
+ } case (cl_KEY) {
+ if (f_EPTF_HTTP_isWhiteSpace(ch)) {
+ var charstring vl_segment;
+ if (f_EPTF_HTTP_isWSBeforeEq(pl_authenticateHeader, i, vl_segment)) {
+ // action("f_isWSBeforeEq():true -> ", vl_segment);
+ vl_state := cl_WSVALUE;
+ } else {
+ // action("f_isWSBeforeEq():false -> ", vl_segment);
+ pl_key := pl_key & vl_segment;
+ }
+ } else if (ch == 61 /* = */) {
+ vl_state := cl_EQ;
+ } else {
+ pl_key := pl_key & int2char(ch);
+ }
+ } case (cl_EQ) {
+ if (f_EPTF_HTTP_isWhiteSpace(ch)) {
+ vl_state := cl_WSVALUE;
+ } else if (ch==34 /* " */) {
+ vl_state := cl_VALUE;
+ } else if (ch==44 /* , */) {
+ pl_pos := i+1;
+ return true;
+ } else {
+ vl_woqoute := true; // value wo qoute
+ pl_value := pl_value & int2char(ch);
+ vl_state := cl_VALUE;
+ }
+ } case (cl_WSVALUE) {
+ if (ch == 34 /* " */) {
+ vl_state := cl_VALUE;
+ } else if (ch == 44 /* , */) {
+ pl_pos := i+1;
+ return true;
+ } else if (not f_EPTF_HTTP_isWhiteSpace(ch)) {
+ vl_woqoute := true; // value wo qoute
+ pl_value := pl_value & int2char(ch);
+ vl_state := cl_VALUE;
+ }
+ } case (cl_VALUE) {
+ if (vl_woqoute) {
+ if (ch == 44 /* , */) {
+ pl_pos := i+1;
+ return true;
+ } else {
+ pl_value := pl_value & int2char(ch);
+ }
+ } else {
+ if (ch == 34 /* " */) {
+ vl_state := cl_WSCOMMA;
+ } else {
+ pl_value := pl_value & int2char(ch);
+ }
+ }
+ } case (cl_WSCOMMA) {
+ if (ch == 44 /* , */) {
+ pl_pos := i+1;
+ return true;
+ }
+ }
+ }
+ }
+ // action ("pl_key := ", pl_key, "; pl_value := ", pl_value);
+ return false;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_setAuthorizationDataToContextFromMessage
+ //
+ // Purpose:
+ // This function acquires authentication data from a message
+ //
+ // Parameters:
+ // pl_myCtx - *in* *integer* - the index of the context
+ // pl_authHeader - *in* *charstring* - authentication header
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_setAuthorizationDataToContextFromMessage(
+ in integer pl_myCtx,
+ in charstring pl_authHeader)
+ runs on EPTF_HTTP_LGen_CT
+ {
+ var boolean vl_hasParameter := false;
+ var integer vl_pos := 0;
+ var integer vl_errpos := 0;
+ var charstring vl_key := "";
+ var charstring vl_value := "";
+ do
+ {
+ vl_hasParameter := f_EPTF_HTTP_getNextAttribute(pl_authHeader, vl_pos, vl_errpos, vl_key, vl_value);
+ if (vl_errpos != -1) {
+ f_EPTF_Logging_warning(tsp_EPTF_HTTP_logEnabled,%definitionId&
+ ": Parsing WWW-Authenticate header failed on position: "&
+ int2str(vl_errpos)&" in """&pl_authHeader&"""");
+ }
+ if (vl_key == "Digest realm"){
+ v_EPTF_HTTP_contexts[pl_myCtx].authDetails.realm := vl_value;
+ } else if (vl_key == "qop"){
+ v_EPTF_HTTP_contexts[pl_myCtx].authDetails.qop := vl_value;
+ } else if (vl_key == "nonce"){
+ v_EPTF_HTTP_contexts[pl_myCtx].authDetails.nonce := vl_value;
+ } else if (vl_key == "opaque"){
+ v_EPTF_HTTP_contexts[pl_myCtx].authDetails.opaque := vl_value;
+ }
+ } while ( vl_hasParameter )
+
+ f_EPTF_HTTP_debug(%definitionId&
+ ": Authentication data stored: realm -> " &
+ v_EPTF_HTTP_contexts[pl_myCtx].authDetails.realm &
+ " qop-> "&v_EPTF_HTTP_contexts[pl_myCtx].authDetails.qop &
+ " nonce-> "&v_EPTF_HTTP_contexts[pl_myCtx].authDetails.nonce &
+ " opaque-> "&v_EPTF_HTTP_contexts[pl_myCtx].authDetails.opaque);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_createAuthorizationDataFromMessage
+ //
+ // Purpose:
+ // This function generates the authorization data header
+ //
+ // Parameters:
+ // pl_myCtx - *in* *integer* - the index of the context
+ // pl_userName - *in* *charstring* - the username
+ // pl_requestUri - *in* *charstring* - HTTP requestUri
+ // pl_method - *charstring* - HTTP method
+ //
+ // Return Value:
+ // *charstring* - the generated authorization data
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // This function generates the authorization data to the header if the authorization details exists
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_createAuthorizationDataFromMessage(
+ in integer pl_myctx)
+ runs on EPTF_HTTP_LGen_CT
+ {
+ var integer vl_hIdx := -1;
+
+ if (ischosen(v_EPTF_HTTP_incomingMessage.response))
+ {
+ vl_hIdx := f_EPTF_HTTP_getHeaderIndex("WWW-Authenticate",
+ v_EPTF_HTTP_incomingMessage.response.header);
+
+ if (vl_hIdx != -1) {
+ f_EPTF_HTTP_setAuthorizationDataToContextFromMessage(pl_myctx,
+ v_EPTF_HTTP_incomingMessage.response.header[vl_hIdx].header_value);
+ }
+ }
+ else {
+ vl_hIdx := f_EPTF_HTTP_getHeaderIndex("WWW-Authenticate",
+ v_EPTF_HTTP_incomingMessage.response_binary.header);
+
+ if (vl_hIdx != -1) {
+ f_EPTF_HTTP_setAuthorizationDataToContextFromMessage(pl_myctx,
+ v_EPTF_HTTP_incomingMessage.response_binary.header[vl_hIdx].header_value);
+ }
+ }
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_createAuthorizationData
+ //
+ // Purpose:
+ // This function generates the authorization data header
+ //
+ // Parameters:
+ // pl_myCtx - *in* *integer* - the index of the context
+ // pl_userName - *in* *charstring* - the username
+ // pl_requestUri - *in* *charstring* - HTTP requestUri
+ // pl_method - *charstring* - HTTP method
+ //
+ // Return Value:
+ // *charstring* - the generated authorization data
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // This function generates the authorization data to the header if the authorization details exists
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_createAuthorizationData(
+ in integer pl_myCtx,
+ in charstring pl_userName,
+ in charstring pl_requestUri,
+ in charstring pl_method)
+ runs on EPTF_HTTP_LGen_CT return charstring
+ {
+ // MD5 hash of empty entity body for qop=auth, for qop=auth-int a new hash for the body must be calculated).
+ const charstring hEntity := ""; //"d41d8cd98f00b204e9800998ecf8427e"; //hash for empty string
+ var charstring cnonce := "01234567890abcdef01234567890abcdef";
+
+ var charstring realm := v_EPTF_HTTP_contexts[pl_myCtx].authDetails.realm;
+ var charstring qop := v_EPTF_HTTP_contexts[pl_myCtx].authDetails.qop;
+ var charstring nonce := v_EPTF_HTTP_contexts[pl_myCtx].authDetails.nonce;
+ var charstring opaque := v_EPTF_HTTP_contexts[pl_myCtx].authDetails.opaque;
+
+ var charstring password := v_EPTF_HTTP_contexts[pl_myCtx].authDetails.password;
+ var charstring algorithm := v_EPTF_HTTP_contexts[pl_myCtx].authDetails.algorithm;
+ var charstring nonceCount := v_EPTF_HTTP_contexts[pl_myCtx].authDetails.nonceCount;
+
+ v_EPTF_HTTP_contexts[pl_myCtx].authDetails.nonceCount := f_putInLowercase(
+ hex2str(int2hex( hex2int( str2hex(nonceCount) ) + 1, 8 ) )); //nonce count +1
+
+ var charstring response := f_calculateDigestResponse(
+ nonce, cnonce, pl_userName, realm, password, algorithm, nonceCount,
+ pl_method, qop, pl_requestUri, hEntity);
+
+ var charstring vl_authData :=
+ "Authorization: Digest username=\""&pl_userName&"\""&
+ ", realm=\""&realm&"\""&
+ ", nonce=\""&nonce&"\""&
+ ", uri=\""&pl_requestUri&"\""&
+ ", response=\""&response&"\"";
+ if(algorithm != "") { vl_authData := vl_authData & ", algorithm=\""&algorithm&"\"" }
+ vl_authData := vl_authData &
+ ", qop="&qop& // qop is without quotes, see rfc
+ ", nc="&nonceCount& // nc is without quotes, see rfc
+ ", cnonce=\""&cnonce&"\""&
+ ", opaque=\""&opaque&"\"" &
+ "\r\n";
+
+ f_EPTF_HTTP_debug(%definitionId & "Authorization data: " &
+ vl_authData);
+
+ return vl_authData;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_contentLength
+ //
+ // Purpose:
+ // Function to calculate the length of the given string
+ //
+ // Parameters:
+ // p_str - *in* *charstring* - content
+ //
+ // Return Value:
+ // *charstring* - the length of the content in charstring
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_contentLength (
+ in charstring p_str)
+ return charstring
+ {
+ return int2str(lengthof(p_str));
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_encodeHeader
+ //
+ // Purpose:
+ // Function to encode header
+ //
+ // Parameters:
+ // pl_myCtx - *in* *integer* - the index of the context
+ // pl_templSetIdx - *in* *integer* - the index of the template set
+ // pl_templItemIdxHeader - *in* *integer* - the index of the template item holding the header
+ // pl_content_length - *in* *charstring* - content length
+ // pl_headerOct - *inout* *octetstring* - encoded header
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_encodeHeader(
+ in integer pl_myCtx,
+ in integer pl_templSetIdx,
+ in integer pl_templItemIdxHeader,
+ in charstring pl_content_length,
+ inout octetstring pl_headerOct)
+ runs on EPTF_HTTP_LGen_CT
+ {
+
+ var boolean isRawheader := (v_EPTF_HTTP_contexts[pl_myCtx].rawHeaderGetterFn != null) and
+ isvalue(v_EPTF_HTTP_contexts[pl_myCtx].rawHeaderGetterFn);
+
+ var boolean isExternalTemplate := pl_templItemIdxHeader > -1;
+ var charstring vl_method := v_EPTF_HTTP_contexts[pl_myCtx].method;
+ var charstring vl_uri := v_EPTF_HTTP_contexts[pl_myCtx].uri;
+ var charstring vl_version_major := int2str(v_EPTF_HTTP_contexts[pl_myCtx].version_major);
+ var charstring vl_version_minor := int2str(v_EPTF_HTTP_contexts[pl_myCtx].version_minor);
+ var HeaderLines vl_headerlines;
+
+
+ if(isExternalTemplate)
+ {
+ var charstring vl_context_header := "";
+ var charstring vl_message_header;
+
+ // custom header from entity context
+ f_EPTF_HTTP_getHeaderForEntity(pl_myCtx, vl_headerlines);
+
+ for(var integer i := 0; i < sizeof(vl_headerlines); i := i + 1)
+ {
+ if(vl_headerlines[i].header_name == "" or vl_headerlines[i].header_value == "") { continue;}
+ vl_context_header := vl_context_header &
+ vl_headerlines[i].header_name & ": " &
+ vl_headerlines[i].header_value;
+ // There is a newline character after the customHeader parameter in each template.
+ if(i < sizeof(vl_headerlines) - 1)
+ {
+ vl_context_header := vl_context_header & "\n";
+ }
+ } // => $(customHeader) + \n
+
+ v_boolNoWarningLG := f_EPTF_LGenBase_getTemplateContentFast(pl_templSetIdx, pl_templItemIdxHeader,
+ { vl_method, vl_uri, vl_version_major, vl_version_minor, vl_context_header, pl_content_length },
+ vl_message_header );
+
+ //external template resolves crlf conversion
+ //vl_message_header := f_replaceEveryOccurenceOfSubstring(vl_message_header,"\n","\r\n");
+
+ pl_headerOct := char2oct(vl_message_header);
+
+ f_EPTF_Logging_debug(v_EPTF_HTTP_logEnabled,
+ %definitionId&": "&
+ "SendMessage, header: "&vl_message_header);
+ }
+ else if(isRawheader)
+ {
+ f_EPTF_HTTP_getRawHeaderForEntity(pl_myCtx, pl_headerOct);
+ }
+ else // inner template
+ {
+ f_EPTF_HTTP_getHeaderForEntity(pl_myCtx, vl_headerlines);
+ if (pl_content_length != "0") {
+ vl_headerlines[sizeof(vl_headerlines)] := { "Content-Length", pl_content_length };
+ }
+ var HTTPMessage vl_outgoingMessage := valueof(t_EPTF_HTTP_HTTPdistr_request(
+ vl_method,
+ vl_uri,
+ v_EPTF_HTTP_contexts[pl_myCtx].version_major,
+ v_EPTF_HTTP_contexts[pl_myCtx].version_minor,
+ vl_headerlines,
+ ""
+ ));
+ var octetstring temp := enc_HTTPMessage(vl_outgoingMessage);
+
+ // cutting trailing /r/n
+ pl_headerOct := substr(temp, 0, lengthof(temp)-2);
+
+ }
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_encodeHeaderResponse
+ //
+ // Purpose:
+ // Encodes response header.
+ //
+ // Parameters:
+ // pl_myCtx - *in* *integer* - the index of the context
+ // pl_templSetIdx - *in* *integer* - the index of the template set
+ // pl_templItemIdxHeader - *in* *integer* - the index of the template item holding the header
+ // pl_content_length - *in* *charstring* - content length
+ // pl_headerOct - *inout* *octetstring* - encoded header
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_encodeHeaderResponse(
+ in integer pl_myCtx,
+ in integer pl_templSetIdx,
+ in integer pl_templItemIdxHeader,
+ in charstring pl_content_length,
+ inout octetstring pl_headerOct,
+ in EPTF_CharstringList pl_optParams := {})
+ runs on EPTF_HTTP_LGen_CT
+ {
+
+ var boolean isRawheader := (v_EPTF_HTTP_contexts[pl_myCtx].rawHeaderGetterFn != null) and
+ isvalue(v_EPTF_HTTP_contexts[pl_myCtx].rawHeaderGetterFn);
+
+ var boolean isExternalTemplate := pl_templItemIdxHeader > -1;
+
+
+ if(isExternalTemplate)
+ {
+ var charstring vl_version_major := int2str(v_EPTF_HTTP_contexts[pl_myCtx].version_major);
+ var charstring vl_version_minor := int2str(v_EPTF_HTTP_contexts[pl_myCtx].version_minor);
+ var charstring vl_status := int2str(v_EPTF_HTTP_contexts[pl_myCtx].statusCode) & " " & v_EPTF_HTTP_contexts[pl_myCtx].statusText;
+ var charstring vl_message_header;
+
+ var EPTF_CharstringList vl_paramListDef := { vl_status, vl_version_major, vl_version_minor, pl_content_length } ;
+ var EPTF_CharstringList vl_paramListOpt
+ if(pl_optParams == {}) {
+ vl_paramListOpt := v_EPTF_HTTP_optionalTempParams;
+ }
+ else {
+ vl_paramListOpt := pl_optParams;
+ }
+
+ v_boolNoWarningLG := f_EPTF_LGenBase_getTemplateContentFast(pl_templSetIdx, pl_templItemIdxHeader,
+ vl_paramListDef & vl_paramListOpt,
+ vl_message_header );
+
+ pl_headerOct := char2oct(vl_message_header);
+
+ f_EPTF_Logging_debug(v_EPTF_HTTP_logEnabled,
+ %definitionId&": "&
+ "SendMessage, header: "&vl_message_header);
+
+ return;
+ }
+
+ if(isRawheader)
+ {
+ f_EPTF_HTTP_getRawHeaderForEntity(pl_myCtx, pl_headerOct);
+ return;
+ }
+
+ var HeaderLines vl_headerlines := {};
+
+ f_EPTF_HTTP_getHeaderForEntity(pl_myCtx, vl_headerlines);
+ if (pl_content_length != "0") {
+ vl_headerlines[sizeof(vl_headerlines)] := { "Content-Length", pl_content_length };
+ }
+ var HTTPMessage vl_outgoingMessage := {
+ response :={
+ client_id := omit,
+ version_major := v_EPTF_HTTP_contexts[pl_myCtx].version_major,
+ version_minor := v_EPTF_HTTP_contexts[pl_myCtx].version_minor,
+ statuscode := v_EPTF_HTTP_contexts[pl_myCtx].statusCode,
+ statustext := v_EPTF_HTTP_contexts[pl_myCtx].statusText,
+ header := vl_headerlines,
+ body := ""
+ }
+ }
+ var octetstring temp := enc_HTTPMessage(vl_outgoingMessage);
+
+ // cutting trailing /r/n
+ pl_headerOct := substr(temp, 0, lengthof(temp)-2);
+
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_encodeBody
+ //
+ // Purpose:
+ // Function to encode body
+ //
+ // Parameters:
+ // pl_myCtx - *in* *integer* - the index of the context
+ // pl_templSetIdx - *in* *integer* - the index of the template set
+ // pl_templItemIdxBody - *in* *integer* - the index of the template item holding the body
+ // pl_content_length - *inout* *charstring* - content length
+ // pl_bodyOct - *inout* *octetstring* - encoded body
+ // pl_templParamList - *in* *EPTF_CharstringList* - extra optional parameters for the body template
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_encodeBody(
+ in integer pl_myCtx,
+ in integer pl_templSetIdx,
+ in integer pl_templItemIdxBody,
+ inout charstring pl_content_length,
+ inout octetstring pl_bodyOct,
+ in EPTF_CharstringList pl_templParamList := {})
+ runs on EPTF_HTTP_LGen_CT
+ {
+
+ var boolean isExternalTemplate := pl_templItemIdxBody > -1;
+
+ if(isExternalTemplate)
+ {
+ var charstring vl_message_body;
+
+ v_boolNoWarningLG := f_EPTF_LGenBase_getTemplateContentFast(pl_templSetIdx, pl_templItemIdxBody,
+ pl_templParamList, vl_message_body );
+
+ //external template resolves crlf conversion
+ //vl_message_body := f_replaceEveryOccurenceOfSubstring(vl_message_body,"\n","\r\n");
+
+ pl_bodyOct := char2oct(vl_message_body);
+ pl_content_length := int2str(lengthof(pl_bodyOct));
+ }
+ else // inner template
+ {
+ var EPTF_HTTP_CharOrOct vl_body;
+ f_EPTF_HTTP_getBodyContentForEntity(pl_myCtx, vl_body);
+ if (ischosen(vl_body.charVal))
+ {
+ pl_bodyOct := char2oct(vl_body.charVal);
+ }
+ else
+ {
+ pl_bodyOct := vl_body.octVal;
+ }
+ pl_content_length := int2str(lengthof(pl_bodyOct));
+ }
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_getNonceValue
+ //
+ // Purpose:
+ // Generates a nonce value.
+ //
+ // Parameters:
+ // pl_authData - *inout* <EPTF_HTTP_AuthData> - the generated nonce values
+ //
+ // Return value:
+ // charstring - nonce value
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_getNonceValue(inout EPTF_HTTP_AuthDataServer pl_authData)
+ return charstring
+ {
+ if (0 == sizeof(pl_authData.nonceValues))
+ {
+ return "";
+ }
+
+ var integer vl_currentNonce := pl_authData.currentNonce;
+ pl_authData.currentNonce := (pl_authData.currentNonce + 1) mod sizeof(pl_authData.nonceValues);
+
+
+ return pl_authData.nonceValues[vl_currentNonce];
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_getAuthParams
+ //
+ // Purpose:
+ // Retrieves the authentication data from the Authorization request header.
+ //
+ // Parameters:
+ // pl_authData - *in* *charstring* - the Authorization header value
+ // pl_authParams - *inout* <EPTF_HTTP_AuthDetails> - the retreived paramters
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_getAuthParams(in charstring pl_authData, inout EPTF_HTTP_AuthDetails pl_authParams)
+ {
+ var EPTF_CharstringList vl_list := {};
+ var EPTF_CharstringList vl_paramValues := {};
+ var EPTF_HTTP_ParamValue_List vl_params := {};
+ var charstring vl_paramValue := "";
+
+ f_EPTF_HTTP_Tokenize(pl_authData, " ,", vl_list);
+ for (var integer i := 0; i < sizeof(vl_list); i := i + 1)
+ {
+ f_EPTF_HTTP_Tokenize(vl_list[i], "=", vl_paramValues);
+ if (sizeof(vl_paramValues) == 1)
+ {
+ vl_params[sizeof(vl_params)] := {vl_paramValues[0], ""};
+ }else
+ {
+ vl_paramValue := vl_paramValues[1];
+ if (lengthof(vl_paramValue) > 2)
+ {
+ if ("\"" == vl_paramValue[0] and "\"" == vl_paramValue[lengthof(vl_paramValue) - 1])
+ {
+ vl_paramValue := substr(vl_paramValue, 1, lengthof(vl_paramValue) - 2);
+ }
+ }else{
+ vl_paramValue := "";
+ }
+ vl_params[sizeof(vl_params)] := {vl_paramValues[0], vl_paramValue};
+ }
+ vl_paramValues := {}
+ }
+
+ for (var integer i := 0; i < sizeof(vl_params); i := i + 1)
+ {
+ if ("nonce" == vl_params[i].paramName)
+ {
+ pl_authParams.nonce := vl_params[i].paramValue;
+ continue;
+ }
+
+ if ("algorithm" == vl_params[i].paramName)
+ {
+ pl_authParams.algorithm := vl_params[i].paramValue;
+ continue;
+ }
+
+ if ("cnonce" == vl_params[i].paramName)
+ {
+ pl_authParams.cnonce := vl_params[i].paramValue;
+ continue;
+ }
+
+ if ("nc" == vl_params[i].paramName)
+ {
+ pl_authParams.nonceCount := vl_params[i].paramValue;
+ continue;
+ }
+
+ if ("realm" == vl_params[i].paramName)
+ {
+ pl_authParams.realm := vl_params[i].paramValue;
+ continue;
+ }
+
+ if ("qop" == vl_params[i].paramName)
+ {
+ pl_authParams.qop := vl_params[i].paramValue;
+ continue;
+ }
+
+ if ("response" == vl_params[i].paramName)
+ {
+ pl_authParams.response := vl_params[i].paramValue;
+ continue;
+ }
+
+ if ("uri" == vl_params[i].paramName)
+ {
+ pl_authParams.uri := vl_params[i].paramValue;
+ continue;
+ }
+
+ if ("username" == vl_params[i].paramName)
+ {
+ pl_authParams.username := vl_params[i].paramValue;
+ continue;
+ }
+ }
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_Tokenize
+ //
+ // Purpose:
+ // Breaks a string into a sequence of tokens, each of which is delimited by
+ // one or more characters.
+ //
+ // Parameters:
+ // pl_string - *in* *charstring* - the string to break into tokens
+ // pl_delimiters - *in* *charstring* - the delimiter characters
+ // pl_tokens - *in* <EPTF_CharstringList> - the tokens
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_Tokenize(in charstring pl_string, in charstring pl_delimiters, inout EPTF_CharstringList pl_tokens)
+ {
+ var integer vl_state := 0; //0: not delim; 1: delim; 2: quoted
+ var boolean vl_isDelim := false;
+ var charstring vl_value := "";
+
+ for (var integer i := 0; i < lengthof(pl_string); i := i + 1)
+ {
+ vl_isDelim := false;
+
+ if (0 == vl_state)
+ {
+ for (var integer ii := 0; ii < lengthof(pl_delimiters) and not vl_isDelim; ii := ii + 1)
+ {
+ vl_isDelim := pl_delimiters[ii] == pl_string[i];
+ }
+
+ if (vl_isDelim)
+ {
+ if (vl_value != "")
+ {
+ pl_tokens[sizeof(pl_tokens)] := vl_value;
+ }
+ vl_state := 1
+ }else{
+ vl_value := vl_value & pl_string[i];
+ if (pl_string[i] == "\"")
+ {
+ vl_state := 2;
+ }
+ }
+ }else if (1 == vl_state)
+ {
+ for (var integer ii := 0; ii < lengthof(pl_delimiters) and not vl_isDelim; ii := ii + 1)
+ {
+ vl_isDelim := pl_delimiters[ii] == pl_string[i];
+ }
+
+ if (vl_isDelim)
+ {/*do nothing*/}
+ else{
+ vl_state := 0;
+ vl_value := pl_string[i];
+ if (pl_string[i] == "\"")
+ {
+ vl_state := 2;
+ }
+ }
+ }else if (2 == vl_state)
+ {
+ vl_value := vl_value & pl_string[i];
+ if (pl_string[i] == "\"")
+ {
+ vl_state := 0;
+ }
+ }
+ }
+
+ if (vl_value != ""){pl_tokens[sizeof(pl_tokens)] := vl_value;}
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_generateNonceValues
+ //
+ // Purpose:
+ // Generates nonce values for the server
+ //
+ // Parameters:
+ // pl_number - *in* *integer* - number of nonce values to generate
+ // pl_nonceValues - *in* <EPTF_CharstringList> - generated nonce values
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_generateNonceValues(in integer pl_number, inout EPTF_CharstringList pl_nonceValues)
+ {
+ for (var integer i := 0; i < pl_number; i := i + 1)
+ {
+ pl_nonceValues[sizeof(pl_nonceValues)] := f_calculateMD5(int2str(f_time()));
+ }
+ }
+} //EPTF_HTTP_PrivateFunctions
+
+///////////////////////////////////////////////////////////////////////////////
+// Group: EPTF_HTTP_TestSteps
+//
+// Purpose:
+// The functions of the EPTF HTTP Test Steps
+//
+// Test Steps:
+// f_EPTF_HTTP_step_handleTimeout -
+// f_EPTF_HTTP_step_sendRequest -
+// f_EPTF_HTTP_step_closePortOfUser -
+// f_EPTF_HTTP_step_freePortOfUser -
+// f_EPTF_HTTP_step_processResponse -
+// f_EPTF_HTTP_step_sendConnect -
+// f_EPTF_HTTP_step_sendClose -
+// f_EPTF_HTTP_step_sendHalfClose -
+// f_EPTF_HTTP_step_setEntityContextHTTPMethodCONNECT -
+// f_EPTF_HTTP_step_setEntityContextHTTPMethodDELETE -
+// f_EPTF_HTTP_step_setEntityContextHTTPMethodGET -
+// f_EPTF_HTTP_step_setEntityContextHTTPMethodHEAD -
+// f_EPTF_HTTP_step_setEntityContextHTTPMethodOPTIONS -
+// f_EPTF_HTTP_step_setEntityContextHTTPMethodPOST -
+// f_EPTF_HTTP_step_setEntityContextHTTPMethodPUT -
+// f_EPTF_HTTP_step_setEntityContextHTTPMethodTRACE -
+// f_EPTF_HTTP_step_handleRequest -
+// f_EPTF_HTTP_step_sendResponse -
+// f_EPTF_HTTP_step_closePort -
+// f_EPTF_HTTP_step_cleanUp -
+//
+//
+///////////////////////////////////////////////////////////////////////////////
+group EPTF_HTTP_TestSteps
+{
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_step_handleTimeout
+ //
+ // Purpose:
+ // This function implements handle timeout test step
+ //
+ // Parameters:
+ // pl_ptr - *in* <EPTF_LGenBase_TestStepArgs> - test step args
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_step_handleTimeout(
+ in EPTF_LGenBase_TestStepArgs pl_ptr)
+ runs on EPTF_HTTP_LGen_CT
+ {
+ var integer myCtx := f_EPTF_HTTP_getContextIndex(pl_ptr.eIdx);
+ var integer fCtx := pl_ptr.refContext.fCtxIdx;
+
+ f_EPTF_HTTP_debug(%definitionId&
+ ": Timed Out: cIdx-> "&int2str(myCtx)&
+ " fCtx-> "&int2str(fCtx));
+
+ // Update The Statistics
+
+ // Delete the entity context and databases
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_step_sendRequest
+ //
+ // Purpose:
+ // This function implements send request test step
+ //
+ // Parameters:
+ // pl_ptr - *in* <EPTF_LGenBase_TestStepArgs> - test step args
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // stepArgs first element holds the desired callType
+ // stepArgs second element holds the fsm to report events up
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_step_sendRequest(
+ in EPTF_LGenBase_TestStepArgs pl_ptr)
+ runs on EPTF_HTTP_LGen_CT
+ {
+ var integer myCtx := f_EPTF_HTTP_getContextIndex(pl_ptr.eIdx);
+ var integer fCtx := pl_ptr.refContext.fCtxIdx;
+ var integer vl_connId := v_EPTF_HTTP_contexts[myCtx].connId; // port group id
+ var integer vl_templSetIdx := f_EPTF_LGenBase_templateSetIdxOfStep(pl_ptr);
+ var integer vl_templItemIdxHeader := -1;
+ var integer vl_templItemIdxBody := -1;
+ var charstring vl_content_length;
+
+ var octetstring vl_outgoingMessage;
+
+ f_EPTF_HTTP_debug(%definitionId & ": " &
+ " myCtx-> "&int2str(myCtx)&
+ " pl_ptr.eIdx-> "&int2str(pl_ptr.eIdx)&
+ " fCtx-> "&int2str(fCtx)//&
+ //" vl_tcIdx-> "&int2str(vl_tcIdx)
+ );
+
+ if(vl_templSetIdx>-1) { // if template set exists
+ vl_templItemIdxHeader := f_EPTF_LGenBase_getTemplateItemIdxFromSet(
+ vl_templSetIdx, v_EPTF_HTTP_extTemplType_customHeader );
+ vl_templItemIdxBody := f_EPTF_LGenBase_getTemplateItemIdxFromSet(
+ vl_templSetIdx, v_EPTF_HTTP_extTemplType_customBody );
+ }
+
+ var octetstring vl_headerOct;
+ var octetstring vl_bodyOct;
+
+ f_EPTF_HTTP_encodeBody(myCtx, vl_templSetIdx, vl_templItemIdxBody, vl_content_length, vl_bodyOct);
+ f_EPTF_HTTP_encodeHeader(myCtx, vl_templSetIdx, vl_templItemIdxHeader, vl_content_length, vl_headerOct);
+
+
+ vl_outgoingMessage := vl_headerOct & '0D0A'O & vl_bodyOct;
+
+ f_EPTF_HTTP_debug(%definitionId & ": sending message: " &
+ log2str(vl_outgoingMessage));
+
+ //v_EPTF_HTTP_ConnId2EIdx[vl_connId] := pl_ptr.eIdx;
+ v_EPTF_HTTP_ConnId2FIdx[pl_ptr.eIdx] := pl_ptr.refContext.fCtxIdx;
+
+ f_EPTF_HTTP_debug(%definitionId & ": Entity and Fsm index: " &
+ int2str(pl_ptr.eIdx) & " / " &
+ int2str(v_EPTF_HTTP_ConnId2FIdx[pl_ptr.eIdx]) &
+ " set for connection id: " & int2str(vl_connId));
+
+ f_EPTF_HTTP_sendRequest(vl_connId,
+ v_EPTF_HTTP_EntityOffset + pl_ptr.eIdx,
+ vl_outgoingMessage);
+
+ v_EPTF_HTTP_contexts[myCtx].requestPending := true; // if request sent out, message is pending
+
+ f_EPTF_HTTP_updateStatistics(false, v_EPTF_HTTP_contexts[myCtx].method);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_step_sendResponse
+ //
+ // Purpose:
+ // This function implements send response test step
+ //
+ // Parameters:
+ // pl_ptr - *in* <EPTF_LGenBase_TestStepArgs> - test step args
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_step_sendResponse(
+ in EPTF_LGenBase_TestStepArgs pl_ptr)
+ runs on EPTF_HTTP_LGen_CT
+ {
+ var integer myCtx := f_EPTF_HTTP_getContextIndex(pl_ptr.eIdx);
+ var integer fCtx := pl_ptr.refContext.fCtxIdx;
+
+ var integer vl_connId := v_EPTF_HTTP_contexts[myCtx].connId; // port group id
+ var integer vl_portId := v_EPTF_HTTP_contexts[myCtx].portId;
+ var integer vl_seqNum := v_EPTF_HTTP_contexts[myCtx].seqNum;
+
+ var integer vl_templSetIdx := f_EPTF_LGenBase_templateSetIdxOfStep(pl_ptr);
+ var integer vl_templItemIdxHeader := -1;
+ var integer vl_templItemIdxBody := -1;
+ var charstring vl_content_length;
+
+ var octetstring vl_outgoingMessage;
+
+ var octetstring vl_headerOct;
+ var octetstring vl_bodyOct;
+
+ f_EPTF_HTTP_debug(%definitionId & ": " &
+ " myCtx-> "&int2str(myCtx)&
+ " pl_ptr.eIdx-> "&int2str(pl_ptr.eIdx)&
+ " fCtx-> "&int2str(fCtx)//&
+ //" vl_tcIdx-> "&int2str(vl_tcIdx)
+ );
+
+ if(vl_templSetIdx>-1) { // if template set exists
+ vl_templItemIdxHeader := f_EPTF_LGenBase_getTemplateItemIdxFromSet(
+ vl_templSetIdx, v_EPTF_HTTP_extTemplType_customHeaderResponse );
+ vl_templItemIdxBody := f_EPTF_LGenBase_getTemplateItemIdxFromSet(
+ vl_templSetIdx, v_EPTF_HTTP_extTemplType_customBody );
+ }
+
+ f_EPTF_HTTP_encodeBody(myCtx, vl_templSetIdx, vl_templItemIdxBody, vl_content_length, vl_bodyOct);
+ f_EPTF_HTTP_encodeHeaderResponse(myCtx, vl_templSetIdx, vl_templItemIdxHeader, vl_content_length, vl_headerOct);
+
+ vl_outgoingMessage := vl_headerOct & '0D0A'O & vl_bodyOct;
+
+ f_EPTF_HTTP_debug(%definitionId & ": sending message: " &
+ log2str(vl_outgoingMessage));
+
+ f_EPTF_HTTP_debug(%definitionId & ": Entity index: " &
+ int2str(pl_ptr.eIdx) &
+ " set for group id: " & int2str(vl_connId));
+
+ f_EPTF_HTTP_sendResponse(vl_connId,
+ vl_portId,
+ vl_seqNum,
+ vl_outgoingMessage);
+
+ f_EPTF_HTTP_updateStatistics(false, "", v_EPTF_HTTP_contexts[myCtx].statusCode);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_step_closePortOfUser
+ //
+ // Purpose:
+ // This function implements the close port of user test step
+ //
+ // Parameters:
+ // pl_ptr - *in* <EPTF_LGenBase_TestStepArgs> - test step args
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_step_closePortOfUser(
+ in EPTF_LGenBase_TestStepArgs pl_ptr)
+ runs on EPTF_HTTP_LGen_CT
+ {
+ var integer myCtx := f_EPTF_HTTP_getContextIndex(pl_ptr.eIdx);
+ //var integer fCtx := pl_ptr.refContext.fCtxIdx;
+ //var integer vl_tcIdx := f_EPTF_LGenBase_tcIdxOfStep(pl_ptr);
+ var integer vl_connId := v_EPTF_HTTP_contexts[myCtx].connId; // port group id
+
+ f_EPTF_HTTP_debug(%definitionId & ": " &
+ " myCtx-> "&int2str(myCtx)//&
+ //" fCtx-> "&int2str(fCtx)&
+ //" vl_tcIdx-> "&int2str(vl_tcIdx)
+ );
+
+ f_EPTF_HTTP_closePortOfUser(vl_connId,
+ v_EPTF_HTTP_EntityOffset + pl_ptr.eIdx);
+
+ v_EPTF_HTTP_contexts[myCtx].requestPending := false;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_step_freePortOfUser
+ //
+ // Purpose:
+ // This function implements the free port of user test step
+ //
+ // Parameters:
+ // pl_ptr - *in* <EPTF_LGenBase_TestStepArgs> - test step args
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_step_freePortOfUser(
+ in EPTF_LGenBase_TestStepArgs pl_ptr)
+ runs on EPTF_HTTP_LGen_CT
+ {
+ var integer myCtx := f_EPTF_HTTP_getContextIndex(pl_ptr.eIdx);
+ //var integer fCtx := pl_ptr.refContext.fCtxIdx;
+ //var integer vl_tcIdx := f_EPTF_LGenBase_tcIdxOfStep(pl_ptr);
+ var integer vl_connId := v_EPTF_HTTP_contexts[myCtx].connId; // port group id
+
+ f_EPTF_HTTP_debug(%definitionId & ": " &
+ " myCtx-> "&int2str(myCtx)//&
+ //" fCtx-> "&int2str(fCtx)&
+ //" vl_tcIdx-> "&int2str(vl_tcIdx)
+ );
+
+ f_EPTF_HTTP_freePortOfUser(vl_connId,
+ v_EPTF_HTTP_EntityOffset + pl_ptr.eIdx);
+
+ v_EPTF_HTTP_contexts[myCtx].requestPending := false;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_step_processResponse
+ //
+ // Purpose:
+ // This function implements processing of HTTP responses
+ //
+ // Parameters:
+ // pl_ptr - *in* <EPTF_LGenBase_TestStepArgs> - test step args
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_step_processResponse(
+ in EPTF_LGenBase_TestStepArgs pl_ptr)
+ runs on EPTF_HTTP_LGen_CT
+ {
+ var integer myCtx := f_EPTF_HTTP_getContextIndex(pl_ptr.eIdx);
+
+ f_EPTF_HTTP_debug(%definitionId &
+ ": Request arrived for entity context: " & int2str(myCtx));
+
+ //var integer fCtx := pl_ptr.refContext.fCtxIdx;
+ //var integer vl_tcIdx := f_EPTF_LGenBase_tcIdxOfStep(pl_ptr);
+ }
+
+ ///////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_step_sendConnect
+ //
+ // Purpose:
+ // This function implements connect request test step
+ //
+ // Parameters:
+ // pl_ptr - *in* <EPTF_LGenBase_TestStepArgs> - test step args
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_step_sendConnect(
+ in EPTF_LGenBase_TestStepArgs pl_ptr)
+ runs on EPTF_HTTP_LGen_CT
+ {
+ var integer myCtx := f_EPTF_HTTP_getContextIndex(pl_ptr.eIdx);
+
+ v_boolNoWarningLG :=
+ f_EPTF_HTTP_openConnection(v_EPTF_HTTP_contexts[myCtx].connId, v_EPTF_HTTP_EntityOffset + pl_ptr.eIdx);
+ }
+
+ ///////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_step_sendClose
+ //
+ // Purpose:
+ // This function implements close request test step
+ //
+ // Parameters:
+ // pl_ptr - *in* <EPTF_LGenBase_TestStepArgs> - test step args
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_step_sendClose(
+ in EPTF_LGenBase_TestStepArgs pl_ptr)
+ runs on EPTF_HTTP_LGen_CT
+ {
+ var integer myCtx := f_EPTF_HTTP_getContextIndex(pl_ptr.eIdx);
+
+ f_EPTF_HTTP_closeConnection(v_EPTF_HTTP_contexts[myCtx].connId);
+ }
+
+ ///////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_step_sendHalfClose
+ //
+ // Purpose:
+ // This function implements half close request test step
+ //
+ // Parameters:
+ // pl_ptr - *in* <EPTF_LGenBase_TestStepArgs> - test step args
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_step_sendHalfClose(
+ in EPTF_LGenBase_TestStepArgs pl_ptr)
+ runs on EPTF_HTTP_LGen_CT
+ {
+ var integer myCtx := f_EPTF_HTTP_getContextIndex(pl_ptr.eIdx);
+
+ f_EPTF_HTTP_closeHalfConnection(v_EPTF_HTTP_contexts[myCtx].connId);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_step_handleRequest
+ //
+ // Purpose:
+ // Handles the incoming HTTP requests
+ //
+ // Parameters:
+ // pl_ptr - *in* <EPTF_LGenBase_TestStepArgs> - test step args
+ //
+ // Detailed Comments:
+ // Handles the following events: c_EPTF_HTTP_inputIdx_requestCharReceived,
+ // c_EPTF_HTTP_inputIdx_requestOctReceived.
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_step_handleRequest(
+ in EPTF_LGenBase_TestStepArgs pl_ptr)
+ runs on EPTF_HTTP_LGen_CT
+ {
+ var integer v_ctx := f_EPTF_HTTP_getContextIndex(pl_ptr.eIdx);
+
+ v_EPTF_HTTP_contexts[v_ctx].httpMessage := v_EPTF_HTTP_incomingMessage;
+
+ v_EPTF_HTTP_contexts[v_ctx].connId := v_EPTF_HTTP_lastReceivedGroupId;
+ v_EPTF_HTTP_contexts[v_ctx].portId := v_EPTF_HTTP_lastReceivedPortId;
+ v_EPTF_HTTP_contexts[v_ctx].seqNum := v_EPTF_HTTP_lastReceivedSeqNum;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_step_setEntityContextHTTPMethodCONNECT
+ //
+ // Purpose:
+ // This function sets the HTTP method of the entity context to CONNECT.
+ //
+ // Parameters:
+ // pl_ptr - *in* <EPTF_LGenBase_TestStepArgs> - test step args
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_step_setEntityContextHTTPMethodCONNECT(
+ in EPTF_LGenBase_TestStepArgs pl_ptr)
+ runs on EPTF_HTTP_LGen_CT
+ {
+ f_EPTF_HTTP_setEntityContextMethod(pl_ptr.eIdx, "CONNECT");
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_step_setEntityContextHTTPMethodDELETE
+ //
+ // Purpose:
+ // This function sets the HTTP method of the entity context to DELETE.
+ //
+ // Parameters:
+ // pl_ptr - *in* <EPTF_LGenBase_TestStepArgs> - test step args
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_step_setEntityContextHTTPMethodDELETE(
+ in EPTF_LGenBase_TestStepArgs pl_ptr)
+ runs on EPTF_HTTP_LGen_CT
+ {
+ f_EPTF_HTTP_setEntityContextMethod(pl_ptr.eIdx, "DELETE");
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_step_setEntityContextHTTPMethodGET
+ //
+ // Purpose:
+ // This function sets the HTTP method of the entity context to GET.
+ //
+ // Parameters:
+ // pl_ptr - *in* <EPTF_LGenBase_TestStepArgs> - test step args
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_step_setEntityContextHTTPMethodGET(
+ in EPTF_LGenBase_TestStepArgs pl_ptr)
+ runs on EPTF_HTTP_LGen_CT
+ {
+ f_EPTF_HTTP_setEntityContextMethod(pl_ptr.eIdx, "GET");
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_step_setEntityContextHTTPMethodHEAD
+ //
+ // Purpose:
+ // This function sets the HTTP method of the entity context to HEAD.
+ //
+ // Parameters:
+ // pl_ptr - *in* <EPTF_LGenBase_TestStepArgs> - test step args
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_step_setEntityContextHTTPMethodHEAD(
+ in EPTF_LGenBase_TestStepArgs pl_ptr)
+ runs on EPTF_HTTP_LGen_CT
+ {
+ f_EPTF_HTTP_setEntityContextMethod(pl_ptr.eIdx, "HEAD");
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_step_setEntityContextHTTPMethodOPTIONS
+ //
+ // Purpose:
+ // This function sets the HTTP method of the entity context to OPTIONS.
+ //
+ // Parameters:
+ // pl_ptr - *in* <EPTF_LGenBase_TestStepArgs> - test step args
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_step_setEntityContextHTTPMethodOPTIONS(
+ in EPTF_LGenBase_TestStepArgs pl_ptr)
+ runs on EPTF_HTTP_LGen_CT
+ {
+ f_EPTF_HTTP_setEntityContextMethod(pl_ptr.eIdx, "OPTIONS");
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_step_setEntityContextHTTPMethodPOST
+ //
+ // Purpose:
+ // This function sets the HTTP method of the entity context to POST.
+ //
+ // Parameters:
+ // pl_ptr - *in* <EPTF_LGenBase_TestStepArgs> - test step args
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_step_setEntityContextHTTPMethodPOST(
+ in EPTF_LGenBase_TestStepArgs pl_ptr)
+ runs on EPTF_HTTP_LGen_CT
+ {
+ f_EPTF_HTTP_setEntityContextMethod(pl_ptr.eIdx, "POST");
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_step_setEntityContextHTTPMethodPUT
+ //
+ // Purpose:
+ // This function sets the HTTP method of the entity context to PUT.
+ //
+ // Parameters:
+ // pl_ptr - *in* <EPTF_LGenBase_TestStepArgs> - test step args
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_step_setEntityContextHTTPMethodPUT(
+ in EPTF_LGenBase_TestStepArgs pl_ptr)
+ runs on EPTF_HTTP_LGen_CT
+ {
+ f_EPTF_HTTP_setEntityContextMethod(pl_ptr.eIdx, "PUT");
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_step_setEntityContextHTTPMethodTRACE
+ //
+ // Purpose:
+ // This function sets the HTTP method of the entity context to TRACE.
+ //
+ // Parameters:
+ // pl_ptr - *in* <EPTF_LGenBase_TestStepArgs> - test step args
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_step_setEntityContextHTTPMethodTRACE(
+ in EPTF_LGenBase_TestStepArgs pl_ptr)
+ runs on EPTF_HTTP_LGen_CT
+ {
+ f_EPTF_HTTP_setEntityContextMethod(pl_ptr.eIdx, "TRACE");
+ }
+
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_step_closePort
+ //
+ // Purpose:
+ // Test step wrapper for <f_EPTF_HTTP_closePort>
+ //
+ // Parameters:
+ // pl_ptr - *in* <EPTF_LGenBase_TestStepArgs> - test step args
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_step_closePort(
+ in EPTF_LGenBase_TestStepArgs pl_ptr)
+ runs on EPTF_HTTP_LGen_CT
+ {
+ var integer v_ctx := f_EPTF_HTTP_getContextIndex(pl_ptr.eIdx);
+
+ f_EPTF_HTTP_closePort(v_EPTF_HTTP_contexts[v_ctx].connId, v_EPTF_HTTP_contexts[v_ctx].portId);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: EPTF_LGenBase_TestStepArgs
+ //
+ // Purpose:
+ // Test step wrapper for <f_EPTF_HTTP_cleanupContext>
+ //
+ // Parameters:
+ // pl_ptr - *in* <EPTF_LGenBase_TestStepArgs> - test step args
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_step_cleanUp(
+ in EPTF_LGenBase_TestStepArgs pl_ptr)
+ runs on EPTF_HTTP_LGen_CT
+ {
+ f_EPTF_HTTP_cleanupContext(pl_ptr.eIdx);
+ }
+
+} //EPTF_HTTP_TestSteps
+
+///////////////////////////////////////////////////////////////////////////////
+// Group: EPTF_HTTP_DefaultFunctions
+//
+// Purpose:
+// The functions of the EPTF HTTP Default Functions
+//
+///////////////////////////////////////////////////////////////////////////////
+group EPTF_HTTP_DefaultFunctions {
+
+ ///////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_defaultSendRequest
+ //
+ // Purpose:
+ // This function is the default send request function
+ //
+ // Parameters:
+ // pl_Message - *in* <EPTF_HTTP_Message> - the outgoing HTTP message
+ // pl_result - *out* <Result> - the result of send
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_defaultSendRequest(
+ in integer pl_connId,
+ in integer pl_sessionId,
+ in octetstring pl_message)
+ runs on EPTF_HTTP_LGen_CT
+ {
+ f_EPTF_HTTP_debug(%definitionId&": "&
+ "You should set your sender function with f_EPTF_HTTP_setSendRequestFunction");
+ }
+
+ ///////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_defaultConnectionOpen
+ //
+ // Purpose:
+ // This function is the default connection open function
+ //
+ // Parameters:
+ // pl_connId - *in* *integer* - the ID of the opened connection
+ // pl_sessionId - *in* *integer* - session id
+ //
+ // Return Value:
+ // *boolean* - success result of operation
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_defaultConnectionOpen (
+ in integer pl_connId,
+ in integer pl_sessionId)
+ runs on EPTF_HTTP_LGen_CT return boolean
+ {
+ f_EPTF_HTTP_debug("Default Connection Open fucntion has been called");
+
+ return true;
+ }
+
+ ///////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_defaultConnectionClose
+ //
+ // Purpose:
+ // This function is the default connection close function
+ //
+ // Parameters:
+ // pl_connId - *in* *integer* - the connection ID
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_defaultConnectionClose (
+ in integer pl_connId)
+ runs on EPTF_HTTP_LGen_CT
+ {
+ f_EPTF_HTTP_debug("Default Connection Close fucntion has been called");
+ }
+
+ ///////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_defaultConnectionHalfClose
+ //
+ // Purpose:
+ // This function is the default connection half close function
+ //
+ // Parameters:
+ // pl_connId - *in* *integer* - the connection ID
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_defaultConnectionHalfClose (
+ in integer pl_connId)
+ runs on EPTF_HTTP_LGen_CT
+ {
+ f_EPTF_HTTP_debug("Default Connection Half Close function has been called");
+ }
+
+ ///////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_defaultClosePortOfUser
+ //
+ // Purpose:
+ // This function is the default close port of user function
+ //
+ // Parameters:
+ // pl_groupId - *in* *integer* - group id
+ // pl_sessionId - *in* *integer* - session id
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_defaultClosePortOfUser (
+ in integer pl_groupId,
+ in integer pl_sessionId)
+ runs on EPTF_HTTP_LGen_CT
+ {
+ f_EPTF_HTTP_debug("Default Close Port of User function has been called");
+ }
+
+ ///////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_defaultFreePortOfUser
+ //
+ // Purpose:
+ // This function is the default free port of user function
+ //
+ // Parameters:
+ // pl_groupId - *in* *integer* - group id
+ // pl_sessionId - *in* *integer* - session id
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_defaultFreePortOfUser (
+ in integer pl_groupId,
+ in integer pl_sessionId)
+ runs on EPTF_HTTP_LGen_CT
+ {
+ f_EPTF_HTTP_debug("Default Free Port of User function has been called");
+ }
+
+ ///////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_defaultClosePort
+ //
+ // Purpose:
+ // This function is the default free port of user function
+ //
+ // Parameters:
+ // pl_groupId - *in* *integer* - group id
+ // pl_portId - *in* *integer* - session id
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_defaultClosePort(
+ in integer pl_groupId,
+ in integer pl_portId)
+ runs on EPTF_HTTP_LGen_CT
+ {
+ f_EPTF_HTTP_debug("Default connection close function has been called");
+ }
+
+ ///////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_defaultSendResponse
+ //
+ // Purpose:
+ // This function is the default send response function
+ //
+ // Parameters:
+ // pl_groupId - *in* *integer* - group identifier to send the response
+ // pl_portId - *out* *integer* - unique port identifier in the port group
+ // pl_message - *out* *integer* - the message to send
+ //
+ ///////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_defaultSendResponse(
+ in integer pl_groupId,
+ in integer pl_portId,
+ in integer pl_seqNum,
+ in octetstring pl_message)
+ runs on EPTF_HTTP_LGen_CT
+ {
+ f_EPTF_HTTP_debug(%definitionId&": "&
+ "You should set your sender function with f_EPTF_HTTP_setSendResponseFunction");
+ }
+
+ ///////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_defaultListen
+ //
+ // Purpose:
+ // This function is the default listen function
+ //
+ // Parameters:
+ // pl_groupId - *in* *integer* - group identifier to send the response
+ //
+ ///////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_defaultListen(
+ in integer pl_groupId)
+ runs on EPTF_HTTP_LGen_CT
+ return integer
+ {
+ f_EPTF_HTTP_debug(%definitionId&": "&
+ "You should set your sender function with f_EPTF_HTTP_setListenFunction");
+ return -1;
+ }
+
+ ///////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_defaultSearch
+ //
+ // Purpose:
+ // The default context searching function
+ //
+ // Parameters:
+ //
+ ///////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_defaultSearch(
+ inout integer pl_eIdx,
+ inout integer pl_fsmCtx)
+ runs on EPTF_HTTP_LGen_CT
+ {
+ f_EPTF_HTTP_debug(%definitionId&": "&
+ "You should set your sender function with f_EPTF_HTTP_setSearchContextFunction");
+ }
+
+ ///////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_defaultCharstringBodyHandler
+ //
+ // Purpose:
+ // The default charstring body handler function
+ //
+ // Parameters:
+ // pl_eIdx - *in* *integer* - group id
+ // pl_bodyMessage - *in* *charstring* - the body message
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_defaultCharstringBodyHandler (
+ in integer pl_eIdx,
+ in charstring pl_bodyMessage)
+ runs on EPTF_HTTP_LGen_CT
+ {
+ //f_EPTF_HTTP_debug(pl_bodyMessage);
+ }
+
+ ///////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_defaultBinaryBodyHandler
+ //
+ // Purpose:
+ // The default binary body handler function
+ //
+ // Parameters:
+ // pl_eIdx - *in* *integer* - group id
+ // pl_bodyMessage - *in* *octetstring* - the body message
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_defaultBinaryBodyHandler (
+ in integer pl_eIdx,
+ in octetstring pl_bodyMessage)
+ runs on EPTF_HTTP_LGen_CT
+ {
+ //f_EPTF_HTTP_debug(pl_bodyMessage);
+ }
+
+} //EPTF_HTTP_DefaultFunctions
+
+///////////////////////////////////////////////////////////////////////////////
+// Group: EPTF_HTTP_Logging
+//
+// Purpose:
+// The functions of the EPTF HTTP Logging
+//
+///////////////////////////////////////////////////////////////////////////////
+group EPTF_HTTP_Logging
+{
+
+ ///////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_error
+ //
+ // Purpose:
+ // Function to log an error from StatMeasure feature.
+ //
+ // Parameters:
+ // - pl_message - *in* *charstring* - the message to log
+ //
+ // Return Value:
+ // -
+ //
+ // Errors & assertions:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_error(
+ in @lazy charstring pl_message)
+ runs on EPTF_HTTP_LGen_CT
+ {
+ f_EPTF_Logging_errorV2(pl_message,
+ v_EPTF_HTTP_loggingMaskId,
+ {c_EPTF_HTTP_loggingClassIdx_Error});
+ f_EPTF_Base_stopAll();
+ }
+
+ ///////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_warning
+ //
+ // Purpose:
+ // Function to log a warning from StatMeasure feature.
+ //
+ // Parameters:
+ // - pl_message - *in* *charstring* - the message to log
+ //
+ // Return Value:
+ // -
+ //
+ // Errors & assertions:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_warning(
+ in @lazy charstring pl_message)
+ runs on EPTF_HTTP_LGen_CT
+ {
+ f_EPTF_Logging_warningV2(pl_message,
+ v_EPTF_HTTP_loggingMaskId,
+ {c_EPTF_HTTP_loggingClassIdx_Warning});
+ }
+
+ ///////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_debug
+ //
+ // Purpose:
+ // Function to log a debug message from StatMeasure feature.
+ //
+ // Parameters:
+ // - pl_message - *in* *charstring* - the message to log
+ //
+ // Return Value:
+ // -
+ //
+ // Errors & assertions:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_debug(
+ in @lazy charstring pl_message)
+ runs on EPTF_HTTP_LGen_CT
+ {
+ f_EPTF_Logging_debugV2(pl_message,
+ v_EPTF_HTTP_loggingMaskId,
+ {c_EPTF_HTTP_loggingClassIdx_Debug});
+ }
+
+ ///////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_debugEnabled
+ //
+ // Purpose:
+ // Function to check if debug is enabled for StatMeasure
+ //
+ // Parameters:
+ // -
+ //
+ // Return Value:
+ // *boolean* - true if debug enalbed
+ //
+ // Errors & assertions:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_debugEnabled()
+ runs on EPTF_HTTP_LGen_CT
+ return boolean
+ {
+ return f_EPTF_Logging_isEnabled(
+ v_EPTF_HTTP_loggingMaskId,
+ c_EPTF_HTTP_loggingClassIdx_Debug);
+ }
+} // group Logging
+
+}//end of module
+with {
+extension "version <RnXnn>"
+}
+
diff --git a/src/LoadGen/EPTF_HTTP_LoadGen.grp b/src/LoadGen/EPTF_HTTP_LoadGen.grp
new file mode 100644
index 0000000..c0a61d4
--- /dev/null
+++ b/src/LoadGen/EPTF_HTTP_LoadGen.grp
@@ -0,0 +1,25 @@
+<!--
+///////////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2000-2018 Ericsson Telecom AB
+//
+// All rights reserved. This program and the accompanying materials
+// are made available under the terms of the Eclipse Public License v1.0
+// which accompanies this distribution, and is available at
+// http://www.eclipse.org/legal/epl-v10.html
+///////////////////////////////////////////////////////////////////////////////
+//
+// File: EPTF_HTTP_LoadGen.grp
+// Description: FileGroup file for EPTF Applib HTTP LoadGen
+// Rev: <RnXnn>
+// Prodnr: CNL 113 618
+// Updated: 2009-03-11
+// Contact: http://ttcn.ericsson.se
+//
+
+-->
+<!DOCTYPE TITAN_GUI_FileGroup_file>
+<File_Group name="EPTF_HTTP_LoadGen" >
+ <File path="EPTF_HTTP_Definitions.ttcn" />
+ <File path="EPTF_HTTP_Functions.ttcn" />
+</File_Group>
diff --git a/src/Logger/EPTF_HTTP_Logger.grp b/src/Logger/EPTF_HTTP_Logger.grp
new file mode 100644
index 0000000..ba5bd93
--- /dev/null
+++ b/src/Logger/EPTF_HTTP_Logger.grp
@@ -0,0 +1,25 @@
+<!--
+///////////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2000-2018 Ericsson Telecom AB
+//
+// All rights reserved. This program and the accompanying materials
+// are made available under the terms of the Eclipse Public License v1.0
+// which accompanies this distribution, and is available at
+// http://www.eclipse.org/legal/epl-v10.html
+///////////////////////////////////////////////////////////////////////////////
+//
+// File: EPTF_HTTP_Logger.grp
+// Description: FileGroup file for EPTF Applib HTTP Logger
+// Rev: <RnXnn>
+// Prodnr: CNL 113 618
+// Updated: 2009-03-11
+// Contact: http://ttcn.ericsson.se
+//
+
+-->
+<!DOCTYPE TITAN_GUI_FileGroup_file>
+<File_Group name="EPTF_HTTP_Logger" >
+ <File path="EPTF_HTTP_Logger_Definitions.ttcn" />
+ <File path="EPTF_HTTP_Logger_Functions.ttcn" />
+</File_Group>
diff --git a/src/Logger/EPTF_HTTP_Logger_Definitions.ttcn b/src/Logger/EPTF_HTTP_Logger_Definitions.ttcn
new file mode 100644
index 0000000..97a2503
--- /dev/null
+++ b/src/Logger/EPTF_HTTP_Logger_Definitions.ttcn
@@ -0,0 +1,118 @@
+///////////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2000-2018 Ericsson Telecom AB
+//
+// All rights reserved. This program and the accompanying materials
+// are made available under the terms of the Eclipse Public License v1.0
+// which accompanies this distribution, and is available at
+// http://www.eclipse.org/legal/epl-v10.html
+///////////////////////////////////////////////////////////////////////////////
+//
+// File: EPTF_HTTP_Logger_Definitions.ttcn
+// Rev: <RnXnn>
+// Prodnr: CNL 113 618
+// Updated: 2012-11-28
+// Contact: http://ttcn.ericsson.se
+///////////////////////////////////////////////////////////////////////////////
+
+///////////////////////////////////////////////////////////
+// Module: EPTF_HTTP_Logger_Definitions
+//
+// Purpose:
+// This module contains the definitions used by the EPTF_HTTP_Logger_CT
+// component.
+//
+// Module Parameters:
+// -
+//
+// Module depends on:
+// <EPTF_CLL_Base_Definitions>
+//
+// <HTTPmsg_Types>
+//
+// Current Owner:
+// EAKOPER
+//
+// Last Review Date:
+// 2008-01-09
+///////////////////////////////////////////////////////////
+module EPTF_HTTP_Logger_Definitions {
+
+//=========================================================================
+// Import Part
+//=========================================================================
+import from EPTF_CLL_Base_Definitions all;
+import from HTTPmsg_Types all;
+
+///////////////////////////////////////////////////////////
+// Type: EPTF_HTTP_LoggerClient_FT
+//
+// Purpose:
+// Function type to register LoggerClient send function
+//
+// Elements:
+// pl_message - *in* - *octetstring* - the outgoing octetstring message
+//
+///////////////////////////////////////////////////////////
+type function EPTF_HTTP_LoggerClient_FT (
+ in charstring pl_message)
+runs on self;
+
+///////////////////////////////////////////////////////////
+// Type: EPTF_HTTP_LoggerClient_CT
+//
+// Purpose:
+// The type definition of the LoggerClient component
+//
+// Extends:
+// EPTF_Base_CT
+//
+// Elements:
+// HTTP_LoggerClient_PCO - <EPTF_HTTP_Logger_PT> - Communiucation port between the LoggerClient and The Logger components
+// vf_EPTF_HTTP_LoggerClient_sendFunction - <EPTF_HTTP_LoggerClient_FT> - Function to reference the logging send function
+// vc_EPTF_HTTP_LoggerClient_loggerComponent - <EPTF_HTTP_Logger_CT> - The Logger component
+// v_EPTF_HTTP_LoggerClient_initialized - *boolean* - The component initialized variable
+///////////////////////////////////////////////////////////
+type component EPTF_HTTP_LoggerClient_CT extends
+ EPTF_Base_CT
+{
+ port EPTF_HTTP_Logger_PT HTTP_LoggerClient_PCO;
+ var EPTF_HTTP_LoggerClient_FT vf_EPTF_HTTP_LoggerClient_sendFunction := null;
+ var EPTF_HTTP_Logger_CT vc_EPTF_HTTP_LoggerClient_loggerComponent;
+ var boolean v_EPTF_HTTP_LoggerClient_initialized := false;
+}
+
+///////////////////////////////////////////////////////////
+// Type: EPTF_HTTP_Logger_PT
+//
+// Purpose:
+// HTTP Logger port type
+//
+// Detailed Comments:
+// The port receives a HTTP message as octetstring
+//
+///////////////////////////////////////////////////////////
+type port EPTF_HTTP_Logger_PT message {
+ inout octetstring
+} with { extension "internal" };
+
+///////////////////////////////////////////////////////////
+// Type: EPTF_HTTP_Logger_CT
+//
+// Purpose:
+// HTTP Logger component type
+//
+// Detailed Comments:
+//
+///////////////////////////////////////////////////////////
+type component EPTF_HTTP_Logger_CT {
+ port EPTF_HTTP_Logger_PT HTTP_Logger_PCO;
+ var octetstring v_EPTF_HTTP_Logger_incomingMsg;
+ var HTTPMessage v_EPTF_HTTP_Logger_decodedMessage;
+}
+
+}//end of module
+with {
+extension "version <RnXnn>"
+}
+
diff --git a/src/Logger/EPTF_HTTP_Logger_Functions.ttcn b/src/Logger/EPTF_HTTP_Logger_Functions.ttcn
new file mode 100644
index 0000000..fe63c55
--- /dev/null
+++ b/src/Logger/EPTF_HTTP_Logger_Functions.ttcn
@@ -0,0 +1,180 @@
+///////////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2000-2018 Ericsson Telecom AB
+//
+// All rights reserved. This program and the accompanying materials
+// are made available under the terms of the Eclipse Public License v1.0
+// which accompanies this distribution, and is available at
+// http://www.eclipse.org/legal/epl-v10.html
+///////////////////////////////////////////////////////////////////////////////
+//
+// File: EPTF_HTTP_Logger_Functions.ttcn
+// Rev: <RnXnn>
+// Prodnr: CNL 113 618
+// Updated: 2012-11-28
+// Contact: http://ttcn.ericsson.se
+///////////////////////////////////////////////////////////////////////////////
+
+///////////////////////////////////////////////////////////
+// Module: EPTF_HTTP_Logger_Functions
+//
+// Purpose:
+// This module contains the functions for EPTF_HTTP_Logger_PT component
+//
+// Module Parameters:
+// tsp_EPTF_HTTP_Logging_Decode - *boolean* - default value:*true*
+//
+// Module depends on:
+// <EPTF_CLL_Base_Functions>
+//
+// <EPTF_HTTP_Logger_Definitions>
+//
+// <HTTPmsg_Types>
+//
+// Current owner
+// EAKOPER
+//
+// Last Review Date:
+// 2008-01-09
+//
+///////////////////////////////////////////////////////////
+module EPTF_HTTP_Logger_Functions {
+
+import from EPTF_CLL_Base_Functions all;
+import from EPTF_HTTP_Logger_Definitions all;
+import from HTTPmsg_Types all;
+
+//=========================================================================
+// Module Parameters
+//=========================================================================
+
+modulepar boolean tsp_EPTF_HTTP_Logging_Decode := true;
+
+
+///////////////////////////////////////////////////////////
+// Group: LoggerClient
+//
+// Purpose:
+// Functions of the LoggerClient component
+//
+///////////////////////////////////////////////////////////
+group LoggerClient {
+///////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_LoggerClient_init_CT
+ //
+ // Purpose:
+ // Function to init the LoggerClient component
+ //
+ // Parameters:
+ // pl_functionRef - *in* - <EPTF_HTTP_LoggerClient_FT> - The send function of the logging
+ //
+ // Return Value:
+ // - integer - if the component initialize already the return value will be -1
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+///////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_LoggerClient_init_CT(
+ in EPTF_HTTP_LoggerClient_FT pl_functionRef)
+ runs on EPTF_HTTP_LoggerClient_CT
+ return integer
+ {
+ if (v_EPTF_HTTP_LoggerClient_initialized) {
+ return -1;
+ }
+
+ f_EPTF_Base_registerCleanup(refers(f_EPTF_HTTP_LoggerClient_cleanup_CT));
+
+ vf_EPTF_HTTP_LoggerClient_sendFunction := pl_functionRef;
+ vc_EPTF_HTTP_LoggerClient_loggerComponent := EPTF_HTTP_Logger_CT.create;
+ connect(vc_EPTF_HTTP_LoggerClient_loggerComponent:HTTP_Logger_PCO,self:HTTP_LoggerClient_PCO);
+ vc_EPTF_HTTP_LoggerClient_loggerComponent.start(f_EPTF_HTTP_Logger_Behavior());
+
+ v_EPTF_HTTP_LoggerClient_initialized := true;
+
+ return 1;
+ }
+
+///////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_LoggerClient_cleanup_CT
+ //
+ // Purpose:
+ // Function to clean the LoggerClient component
+ //
+ // Parameters:
+ // -
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+///////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_LoggerClient_cleanup_CT()
+ runs on EPTF_HTTP_LoggerClient_CT {
+
+ if (not v_EPTF_HTTP_LoggerClient_initialized) {
+ return;
+ }
+ v_EPTF_HTTP_LoggerClient_initialized := false;
+
+ vc_EPTF_HTTP_LoggerClient_loggerComponent.stop;
+ disconnect(vc_EPTF_HTTP_LoggerClient_loggerComponent:HTTP_Logger_PCO,
+ self:HTTP_LoggerClient_PCO);
+ }
+}
+
+
+///////////////////////////////////////////////////////////
+// Function: f_EPTF_HTTP_Logger_Behavior
+//
+// Purpose:
+// The main function of the logger component
+//
+// Parameters:
+// -
+//
+// Return Value:
+// -
+//
+// Errors:
+// -
+//
+///////////////////////////////////////////////////////////
+function f_EPTF_HTTP_Logger_Behavior()
+runs on EPTF_HTTP_Logger_CT
+{
+ var integer vl_noIntWarning;
+ alt {
+ [] HTTP_Logger_PCO.receive(octetstring:?) -> value v_EPTF_HTTP_Logger_incomingMsg
+ {
+ if(tsp_EPTF_HTTP_Logging_Decode) {
+ vl_noIntWarning := dec_HTTPMessage(v_EPTF_HTTP_Logger_incomingMsg,
+ v_EPTF_HTTP_Logger_decodedMessage )
+
+ log("The received decoded Message is: ",
+ v_EPTF_HTTP_Logger_decodedMessage);
+ }
+
+ else {
+ log("The received encoded Message is: ",
+ v_EPTF_HTTP_Logger_incomingMsg);
+ }
+ repeat;
+ }
+ }
+}
+
+}//end of module
+with {
+extension "version <RnXnn>"
+}
+
diff --git a/src/Transport/EPTF_HTTP_Transport.grp b/src/Transport/EPTF_HTTP_Transport.grp
new file mode 100644
index 0000000..b6ae3b2
--- /dev/null
+++ b/src/Transport/EPTF_HTTP_Transport.grp
@@ -0,0 +1,25 @@
+<!--
+///////////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2000-2018 Ericsson Telecom AB
+//
+// All rights reserved. This program and the accompanying materials
+// are made available under the terms of the Eclipse Public License v1.0
+// which accompanies this distribution, and is available at
+// http://www.eclipse.org/legal/epl-v10.html
+///////////////////////////////////////////////////////////////////////////////
+//
+// File: EPTF_HTTP_Transport.grp
+// Description: FileGroup file for EPTF Applib HTTP Transport
+// Rev: <RnXnn>
+// Prodnr: CNL 113 618
+// Updated: 2009-03-11
+// Contact: http://ttcn.ericsson.se
+//
+
+-->
+<!DOCTYPE TITAN_GUI_FileGroup_file>
+<File_Group name="EPTF_HTTP_Transport" >
+ <File path="EPTF_HTTP_Transport_Definitions.ttcn" />
+ <File path="EPTF_HTTP_Transport_Functions.ttcn" />
+</File_Group>
diff --git a/src/Transport/EPTF_HTTP_Transport_Definitions.ttcn b/src/Transport/EPTF_HTTP_Transport_Definitions.ttcn
new file mode 100644
index 0000000..b46be44
--- /dev/null
+++ b/src/Transport/EPTF_HTTP_Transport_Definitions.ttcn
@@ -0,0 +1,2092 @@
+///////////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2000-2018 Ericsson Telecom AB
+//
+// All rights reserved. This program and the accompanying materials
+// are made available under the terms of the Eclipse Public License v1.0
+// which accompanies this distribution, and is available at
+// http://www.eclipse.org/legal/epl-v10.html
+///////////////////////////////////////////////////////////////////////////////
+//
+// File: EPTF_HTTP_Transport_Definitions.ttcn
+// Rev: <RnXnn>
+// Prodnr: CNL 113 618
+// Updated: 2014-03-21
+// Contact: http://ttcn.ericsson.se
+///////////////////////////////////////////////////////////////////////////////
+
+///////////////////////////////////////////////////////////
+// Module: EPTF_HTTP_Transport_Definitions
+//
+// Purpose:
+// This module contains the definitions to the HTTP Transport
+//
+// Module Parameters:
+// tsp_EPTF_HTTP_Transport_loggingComponentMask - *charstring* - logging component mask id
+// tsp_EPTF_HTTP_Transport_loggingEnable - *boolean* - enable/disable the transport logging
+//
+// Module depends on:
+// <EPTF_HTTP_Definitions>
+//
+// <EPTF_CLL_Common_Definitions>
+//
+// <EPTF_CLL_Base_Definitions>
+//
+// <EPTF_CLL_LGenBase_Definitions>
+//
+// <EPTF_HTTP_Logger_Definitions>
+//
+// <EPTF_CLL_FBQ_Definitions>
+//
+// <EPTF_CLL_TransportDefinitions>
+//
+// <EPTF_CLL_TransportMessageBufferManager_Definitions>
+//
+// <EPTF_CLL_Logging_Definitions>
+//
+// <EPTF_CLL_TransportCommPortIPL4_Definitions>
+//
+// <IPL4asp_Types>
+//
+// <TCCMaths_GenericTypes>
+//
+// Current Owner:
+// EAKOPER
+//
+// Last Review Date:
+// 2009-08-10
+//
+// Detailed Comments:
+// -
+//
+///////////////////////////////////////////////////////////
+
+module EPTF_HTTP_Transport_Definitions {
+
+//=============================================================================
+// Imports
+//=============================================================================
+import from EPTF_CLL_Common_Definitions all;
+import from EPTF_CLL_Base_Definitions all;
+//import from EPTF_CLL_LGenBase_Definitions all;
+import from EPTF_CLL_FBQ_Definitions all;
+import from EPTF_CLL_TransportRouting_Definitions all;
+import from EPTF_CLL_TransportMessageBufferManager_Definitions all;
+import from EPTF_CLL_Logging_Definitions all;
+import from EPTF_CLL_TransportCommPortIPL4_Definitions all;
+import from EPTF_CLL_HashMap_Definitions all;
+
+import from EPTF_HTTP_Definitions all;
+
+import from IPL4asp_Types all;
+
+import from TCCMaths_GenericTypes all;
+
+//=============================================================================
+// Module parameters
+//=============================================================================
+
+modulepar charstring tsp_EPTF_HTTP_Transport_loggingComponentMask := "EPTF_HTTP_Transport";
+modulepar boolean tsp_EPTF_HTTP_Transport_loggingEnable := false;
+modulepar boolean tsp_EPTF_HTTP_Transport_bufferLogEnable := false;
+modulepar boolean tsp_EPTF_HTTP_Transport_messageBufferEnable := false;
+modulepar integer tsp_EPTF_HTTP_bufferSize := 100;
+
+//=============================================================================
+// Data types
+//=============================================================================
+
+///////////////////////////////////////////////////////////////////////////////
+// Group: EPTF_HTTP_Transport
+//
+// Purpose:
+// The definitions of the EPTF HTTP Transport
+//
+///////////////////////////////////////////////////////////////////////////////
+group EPTF_HTTP_Transport {
+ ///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_Transport_ConnectionState
+ //
+ // Purpose:
+ // HTTP states
+ //
+ // Elements:
+ // IDLE(0),
+ // OPENED(1)
+ // HALFCLOSED(2)
+ // CLOSED(3)
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ type enumerated EPTF_HTTP_Transport_ConnectionState {
+ IDLE,
+ OPENED,
+ HALFCLOSED,
+ CLOSED
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_Transport_PortType
+ //
+ // Purpose:
+ // Port type
+ //
+ // Elements:
+ // LISTENING(0) -
+ // INCOMING_PORT(1) -
+ // OUTGOING_PORT(2) -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ type enumerated EPTF_HTTP_Transport_PortType{
+ LISTENING_PORT,
+ INCOMING_PORT,
+ OUTGOING_PORT
+ }
+ ///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_Transport_GroupOperation_FT
+ //
+ // Purpose:
+ // Function type to a registerable callback functions to
+ // add/remove ports to/from a port group
+ //
+ // Elements:
+ // pl_group - *in* *integer* - port group index
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ type function EPTF_HTTP_Transport_GroupOperation_FT(
+ in integer pl_group)
+ runs on EPTF_HTTP_LocalTransport_CT return boolean;
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_Transport_SelectPort_FT
+ //
+ // Purpose:
+ // Function type to a registerable callback functions to
+ // select a port for sending within a port group
+ //
+ // Elements:
+ // pl_group - *in* *integer* - port group index
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ type function EPTF_HTTP_Transport_SelectPort_FT(
+ in integer pl_group)
+ runs on EPTF_HTTP_LocalTransport_CT return integer;
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_Transport_SessionOperation_FT
+ //
+ // Purpose:
+ // Function type to a registerable callback functions to
+ // provide a session operation on a group
+ //
+ // Elements:
+ // pl_group - *in* *integer* - port group index
+ // pl_sessionId - *in* *integer* - session id
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ type function EPTF_HTTP_Transport_SessionOperation_FT(
+ in integer pl_group,
+ in integer pl_sessionId)
+ runs on EPTF_HTTP_LocalTransport_CT;
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_Transport_PortOperation_FT
+ //
+ // Purpose:
+ // Function type to a registerable callback functions to
+ // provide a session operation on a group
+ //
+ // Elements:
+ // pl_group - *in* *integer* - port group index
+ // pl_portId - *in* *integer* - port id
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ type function EPTF_HTTP_Transport_PortOperation_FT(
+ in integer pl_group,
+ in integer pl_portId)
+ runs on EPTF_HTTP_LocalTransport_CT;
+
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_Transport_GetGroupAndPort_FT
+ //
+ // Purpose:
+ // Function type to a registerable callback functions to
+ // acquire port group and port index for a connection id
+ //
+ // Elements:
+ // pl_connId - *in* *integer* -connection id
+ // pl_group - *inout* *integer* - port group index
+ // pl_port - *inout* *integer* - port index
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ type function EPTF_HTTP_Transport_GetGroupAndPort_FT(
+ in integer pl_connId,
+ inout integer pl_group,
+ inout integer pl_port)
+ runs on EPTF_HTTP_LocalTransport_CT return boolean;
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_Transport_GetGroup_FT
+ //
+ // Purpose:
+ // Function type to a registerable callback functions to
+ // acquire port group ndex for a connection id
+ //
+ // Elements:
+ // pl_connId - *in* *integer* -connection id
+ // pl_groupId - *inout* *integer* - port group index
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ type function EPTF_HTTP_Transport_GetGroup_FT(
+ in integer pl_connId,
+ inout integer pl_groupId)
+ runs on EPTF_HTTP_LocalTransport_CT return boolean;
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_Transport_SendFunction_FT
+ //
+ // Purpose:
+ // Function type to a registerable callback functions to
+ // send an encoded message over a port group
+ //
+ // Elements:
+ // pl_group - *in* *integer* - port group index
+ // pl_sessionId - *in* *integer* - session id for sending
+ // pl_msg - *in* *octetstring* - message to send
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ type function EPTF_HTTP_Transport_SendFunction_FT(
+ in integer pl_group,
+ in integer pl_sessionId,
+ in octetstring pl_msg)
+ runs on EPTF_HTTP_LocalTransport_CT;
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_Transport_SendResponse_FT
+ //
+ // Purpose:
+ // Function type to a registerable callback functions to
+ // send an encoded response over a port group
+ //
+ // Elements:
+ // pl_group - *in* *integer* - port group index
+ // pl_portId - *in* *integer* - port id for sending
+ // pl_seqNum - *in* *integer* - sequence number of the response
+ // pl_msg - *in* *octetstring* - response to send
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ type function EPTF_HTTP_Transport_SendResponse_FT(
+ in integer pl_group,
+ in integer pl_portId,
+ in integer pl_seqNum,
+ in octetstring pl_msg
+ )
+ runs on EPTF_HTTP_LocalTransport_CT;
+ ///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_Transport_OpenConnection_FT
+ //
+ // Purpose:
+ // Function type to a registerable callback functions to
+ // open port / port group connection
+ //
+ // Elements:
+ // pl_group - *in* *integer* - port group index
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ type function EPTF_HTTP_Transport_OpenConnection_FT(
+ in integer pl_group)
+ runs on EPTF_HTTP_LocalTransport_CT return boolean;
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_Transport_CloseConnection_FT
+ //
+ // Purpose:
+ // Function type to a registerable callback functions to
+ // cloase port / port group connection
+ //
+ // Elements:
+ // pl_group - *in* *integer* - port group index
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ type function EPTF_HTTP_Transport_CloseConnection_FT(
+ in integer pl_group)
+ runs on EPTF_HTTP_LocalTransport_CT;
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_Transport_ReceiveMessage_FT
+ //
+ // Purpose:
+ // Function type to a registerable callback functions to
+ // handle a received message
+ //
+ // Elements:
+ // pl_group - *in* *integer* - port group index
+ // pl_port - *in* *integer* - port index
+ // pl_msg - *in* *octetstring* - message to send
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ type function EPTF_HTTP_Transport_ReceiveMessage_FT(
+ in integer pl_group,
+ in integer pl_port,
+ in octetstring pl_msg)
+ runs on EPTF_HTTP_LocalTransport_CT;
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_Transport_ReceiveEvent_FT
+ //
+ // Purpose:
+ // Function type to a registerable callback functions to
+ // handle a received message
+ //
+ // Elements:
+ // pl_group - *in* *integer* - port group index
+ // pl_port - *in* *integer* - port index
+ // pl_type - *in* *integer* - event type
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ type function EPTF_HTTP_Transport_ReceiveEvent_FT (
+ in integer pl_group,
+ in integer pl_port,
+ in integer pl_type)
+ runs on EPTF_HTTP_LocalTransport_CT;
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_Transport_Listen_FT
+ //
+ // Purpose:
+ // Function type to a registerable callback function for
+ // opening a listen port
+ //
+ // Elements:
+ // pl_group - *in* *integer* - port group index
+ //
+ // Return value:
+ // boolean - open result
+ ///////////////////////////////////////////////////////////////////////////////
+ type function EPTF_HTTP_Transport_Listen_FT(
+ in integer pl_group)
+ runs on EPTF_HTTP_LocalTransport_CT return integer;
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_Transport_CreateIncomingConn_FT
+ //
+ // Purpose:
+ // Function type to a registerable callback functions to
+ // store an incoming connection
+ //
+ // Elements:
+ // pl_group - *in* *integer* - port group index
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ type function EPTF_HTTP_Transport_CreateIncomingConn_FT(
+ in integer pl_group,
+ in ConnectionOpenedEvent pl_connOpened,
+ inout integer pl_port)
+ runs on EPTF_HTTP_LocalTransport_CT return boolean;
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_Transport_RemoveIncomingConn_FT
+ //
+ // Purpose:
+ // Function type to a registerable callback functions to
+ // remove an incoming connection
+ //
+ // Elements:
+ // pl_group - *in* *integer* - port group index
+ // pl_port - *in* *integer* - port index in the group
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ type function EPTF_HTTP_Transport_RemoveIncomingConn_FT(
+ in integer pl_group,
+ in integer pl_port)
+ runs on EPTF_HTTP_LocalTransport_CT;
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_Transport_UserFunctions
+ //
+ // Purpose:
+ // Record to store function referencies for a port group
+ //
+ // Elements:
+ // addPort - <EPTF_HTTP_Transport_GroupOperation_FT> *optional* - add port function ref
+ // removePort - <EPTF_HTTP_Transport_GroupOperation_FT> *optional* - remove port function ref
+ // selectPort - <EPTF_HTTP_Transport_SelectPort_FT> *optional* - select port function ref
+ // sendMessage - <EPTF_HTTP_Transport_SendFunction_FT> *optional* - send message function ref
+ // closePortOfUser - <EPTF_HTTP_Transport_SessionOperation_FT> - close port of user function ref
+ // freePortOfUser - <EPTF_HTTP_Transport_SessionOperation_FT> - free port of user function ref
+ // openPort - <EPTF_HTTP_Transport_OpenConnection_FT> *optional* - open port function ref
+ // closeConnection - <EPTF_HTTP_Transport_CloseConnection_FT> *optional* - close port function ref
+ // halfClosePort - <EPTF_HTTP_Transport_CloseConnection_FT> *optional* - half close port function ref
+ // receiveMessage - <EPTF_HTTP_Transport_ReceiveMessage_FT> *optional* - receive message function ref
+ // receiveEvent - <EPTF_HTTP_Transport_ReceiveEvent_FT> *optional* - receive event function ref
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ type record EPTF_HTTP_Transport_UserFunctions
+ {
+ EPTF_HTTP_Transport_GroupOperation_FT addPort optional,
+ EPTF_HTTP_Transport_GroupOperation_FT removePort optional,
+ EPTF_HTTP_Transport_SelectPort_FT selectPort optional,
+ EPTF_HTTP_Transport_SendFunction_FT sendMessage optional,
+ EPTF_HTTP_Transport_SessionOperation_FT closePortOfUser optional,
+ EPTF_HTTP_Transport_SessionOperation_FT freePortOfUser optional,
+ EPTF_HTTP_Transport_OpenConnection_FT openPort optional,
+ EPTF_HTTP_Transport_CloseConnection_FT closeConnection optional,
+ EPTF_HTTP_Transport_CloseConnection_FT halfClosePort optional,
+ EPTF_HTTP_Transport_ReceiveMessage_FT receiveMessage optional,
+ EPTF_HTTP_Transport_ReceiveEvent_FT receiveEvent optional
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_initUserFunctions
+ //
+ // Purpose:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ const EPTF_HTTP_Transport_UserFunctions c_EPTF_HTTP_initUserFunctions :={
+ omit,
+ omit,
+ omit,
+ omit,
+ omit,
+ omit,
+ omit,
+ omit,
+ omit,
+ omit,
+ omit
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_Transport_ServerUserFunctions
+ //
+ // Purpose:
+ // Record to store function referencies for a server port group
+ //
+ // Elements:
+ // removePort - <EPTF_HTTP_Transport_GroupOperation_FT> *optional* - remove port function ref
+ // listen - <EPTF_HTTP_Transport_Listen_FT> *optional* - open a listen port function ref
+ // createIncomingConn - <EPTF_HTTP_Transport_CreateIncomingConn_FT> *optional* - create incoming connection function ref
+ // removeIncomingConn - <EPTF_HTTP_Transport_RemoveIncomingConn_FT> *optional* - remove incoming connection function ref
+ // sendResponse - <EPTF_HTTP_Transport_SendResponse_FT> *optional* - send response function ref
+ // receiveMessage - <EPTF_HTTP_Transport_ReceiveMessage_FT> *optional* - receive message function ref
+ // receiveEvent - <EPTF_HTTP_Transport_ReceiveEvent_FT> *optional* - receive event function ref
+ // closePort - <EPTF_HTTP_Transport_PortOperation_FT> - close connection function ref
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ type record EPTF_HTTP_Transport_ServerUserFunctions
+ {
+ EPTF_HTTP_Transport_GroupOperation_FT removePort optional,
+ EPTF_HTTP_Transport_Listen_FT listen optional,
+ EPTF_HTTP_Transport_CreateIncomingConn_FT createIncomingConn optional,
+ EPTF_HTTP_Transport_RemoveIncomingConn_FT removeIncomingConn optional,
+ EPTF_HTTP_Transport_SendResponse_FT sendResponse optional,
+ EPTF_HTTP_Transport_ReceiveMessage_FT receiveMessage optional,
+ EPTF_HTTP_Transport_ReceiveEvent_FT receiveEvent optional,
+ EPTF_HTTP_Transport_PortOperation_FT closePort optional
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_initUserFunctions
+ //
+ // Purpose:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ const EPTF_HTTP_Transport_ServerUserFunctions c_EPTF_HTTP_initServerUserFunctions :={
+ removePort := omit,
+ listen := omit,
+ createIncomingConn := omit,
+ removeIncomingConn := omit,
+ sendResponse := omit,
+ receiveMessage := omit,
+ receiveEvent := omit,
+ closePort := omit
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_Transport_GroupMode
+ //
+ // Purpose:
+ // Record to store information on a port group
+ //
+ // Elements:
+ // name - *charstring* *optional* - unique name of the group
+ // localHostInformation - <EPTF_HTTP_HostInformation> - local IP address
+ // and port
+ // remoteHostInformation - <EPTF_HTTP_HostInformation> - remote IP address
+ // and port
+ // numberOfPorts - *integer* - number of ports within the group to be
+ // created
+ // localportStep - *integer* - step of local port number after creation
+ // of each port
+ // remoteportStep - *integer* - step of remote port number after creation
+ // of each port
+ // instantConnOpen - *boolean* - instant connection open mode
+ // instantConnClose - *boolean* - instant connection close mode
+ // useSSL - *boolean* - use ssl mode
+ // userFunctions - <EPTF_HTTP_Transport_UserFunctions> *optional* -
+ // function references of group callback functions if needed
+ //
+ // Detailed Comments:
+ // Used for port group creation
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ type record EPTF_HTTP_Transport_GroupMode {
+ charstring name optional,
+
+ EPTF_HTTP_HostInformation localHostInformation,
+ EPTF_HTTP_HostInformation remoteHostInformation,
+ integer numberOfPorts,
+ integer localportStep,
+ integer remoteportStep,
+
+ boolean instantConnOpen,
+ boolean instantConnClose,
+ boolean useSSL,
+
+ EPTF_HTTP_Transport_UserFunctions userFunctions optional
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_Transport_PortMode
+ //
+ // Purpose:
+ // Record to store information on a port group
+ //
+ // Elements:
+ // name - *charstring* *optional* - unique name of the port
+ // localHostInformation - <EPTF_HTTP_HostInformation> - local IP address
+ // and port
+ // remoteHostInformation - <EPTF_HTTP_HostInformation> - remote IP address
+ // and port
+ // instantConnOpen - *boolean* - instant connection open mode
+ // instantConnClose - *boolean* - instant connection close mode
+ // useSSL - *boolean* - use ssl mode
+ // userFunctions - <EPTF_HTTP_Transport_UserFunctions> *optional* -
+ // function references of group callback functions if needed
+ //
+ // Detailed Comments:
+ // Used for port creation
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ type record EPTF_HTTP_Transport_PortMode {
+ charstring name optional,
+
+ EPTF_HTTP_HostInformation localHostInformation,
+ EPTF_HTTP_HostInformation remoteHostInformation,
+
+ boolean instantConnOpen,
+ boolean instantConnClose,
+ boolean useSSL,
+
+ EPTF_HTTP_Transport_UserFunctions userFunctions optional
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_Transport_ServerPortMode
+ //
+ // Purpose:
+ // Contains information to create a new listening port group.
+ //
+ // Elements:
+ // name - *charstring* - unique name of the port
+ // localHostInformation - <EPTF_HTTP_HostInformation> - local IP address
+ // and port
+ // instantConnClose - *boolean* - instant connection close mode
+ // userFunctions - <EPTF_HTTP_Transport_ListeningUserFunctions> *optional* -
+ // function references of group callback functions if needed
+ // buffer - *boolean* - buffering mode
+ // useSSL - *boolean* - use SSL socket
+ //
+ // Detailed Comments:
+ // Used for port creation
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ type record EPTF_HTTP_Transport_ServerPortMode{
+ charstring name,
+
+ EPTF_HTTP_HostInformation localHostInformation,
+ boolean instantConnClose,
+
+ EPTF_HTTP_Transport_ServerUserFunctions userFunctions optional,
+ boolean buffer,
+ boolean useSSL optional
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_initServerPortMode
+ //
+ // Purpose:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ const EPTF_HTTP_Transport_ServerPortMode c_EPTF_HTTP_initServerPortMode :={
+ name := "",
+ localHostInformation := {"", -1},
+ instantConnClose := false,
+ userFunctions := omit,
+ buffer := false,
+ useSSL := omit
+ }
+ ///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_Transport_Function
+ //
+ // Purpose:
+ // Record to store an element of the function group database
+ //
+ // Elements:
+ // addPort - <EPTF_HTTP_Transport_GroupOperation_FT> - add port function ref
+ // removePort - <EPTF_HTTP_Transport_GroupOperation_FT> - remove port function ref
+ // selectPort - <EPTF_HTTP_Transport_SelectPort_FT> - select port function ref
+ // sendMessage - <EPTF_HTTP_Transport_SendFunction_FT> - send message function ref
+ // closePortOfUser - <EPTF_HTTP_Transport_SessionOperation_FT> - close port of user function ref
+ // freePortOfUser - <EPTF_HTTP_Transport_SessionOperation_FT> - free port of user function ref
+ // openPort - <EPTF_HTTP_Transport_OpenConnection_FT> - open port function ref
+ // closeConnection - <EPTF_HTTP_Transport_CloseConnection_FT> - close port function ref
+ // halfClosePort - <EPTF_HTTP_Transport_CloseConnection_FT> - half close port function ref
+ // receiveMessage - <EPTF_HTTP_Transport_ReceiveMessage_FT> - receive message function ref
+ // receiveEvent - <EPTF_HTTP_Transport_ReceiveEvent_FT> - receive event function ref
+ // listen - <EPTF_HTTP_Transport_Listen_FT> - open a listen port function ref
+ // createIncomingConn - <EPTF_HTTP_Transport_CreateIncomingConn_FT> - create incoming connection function ref
+ // removeIncomingConn - <EPTF_HTTP_Transport_RemoveIncomingConn_FT> *optional* - remove incoming connection function ref
+ // closePort - <EPTF_HTTP_Transport_PortOperation_FT> - close connection function ref
+ //
+ // Detailed Comments:
+ // A port group has a number of registerable and stateless callback
+ // functions to handle communication. These kind of function sets can
+ // be registered into the function database. This element contains
+ // one functions set.
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ type record EPTF_HTTP_Transport_Function
+ {
+ EPTF_HTTP_Transport_GroupOperation_FT addPort,
+ EPTF_HTTP_Transport_GroupOperation_FT removePort,
+ EPTF_HTTP_Transport_SelectPort_FT selectPort,
+ EPTF_HTTP_Transport_SendFunction_FT sendMessage,
+ EPTF_HTTP_Transport_SendResponse_FT sendResponse,
+ EPTF_HTTP_Transport_SessionOperation_FT closePortOfUser,
+ EPTF_HTTP_Transport_SessionOperation_FT freePortOfUser,
+ EPTF_HTTP_Transport_OpenConnection_FT openPort,
+ EPTF_HTTP_Transport_CloseConnection_FT closeConnection,
+ EPTF_HTTP_Transport_CloseConnection_FT halfClosePort,
+ EPTF_HTTP_Transport_ReceiveMessage_FT receiveMessage,
+ EPTF_HTTP_Transport_ReceiveEvent_FT receiveEvent,
+ EPTF_HTTP_Transport_Listen_FT listen,
+ EPTF_HTTP_Transport_CreateIncomingConn_FT createIncomingConn,
+ EPTF_HTTP_Transport_RemoveIncomingConn_FT removeIncomingConn,
+ EPTF_HTTP_Transport_PortOperation_FT closePort
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // const: c_HTTP_Transport_initFunction
+ //
+ // Purpose:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ const EPTF_HTTP_Transport_Function c_HTTP_Transport_initFunction:=
+ {
+ addPort := null,
+ removePort := null,
+ selectPort := null,
+ sendMessage := null,
+ sendResponse := null,
+ closePortOfUser := null,
+ freePortOfUser := null,
+ openPort := null,
+ closeConnection := null,
+ halfClosePort := null,
+ receiveMessage := null,
+ receiveEvent := null,
+ listen := null,
+ createIncomingConn := null,
+ removeIncomingConn := null,
+ closePort := null
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_Transport_FunctionList
+ //
+ // Purpose:
+ // Function database for port groups
+ //
+ // Elements:
+ // record of <EPTF_HTTP_Transport_Function>
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ type record of EPTF_HTTP_Transport_Function EPTF_HTTP_Transport_FunctionList;
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_Transport_PortInfo
+ //
+ // Purpose:
+ // A port connection database element
+ //
+ // Elements:
+ // groupIndex - *integer* - index of the port group in which the
+ // port is situated
+ // portIndex - *integer* - self index of the port within the port
+ // connection database
+ // connectionId - *integer* - connection id of the current port
+ // localhostInfoIdx - *integer* - localhost information database index to
+ // acquire local IP adress and port number
+ // remotehostInfoIdx - *integer* - remotehost information database index to
+ // acquire remote IP adress and port number
+ // state - <EPTF_HTTP_Transport_ConnectionState> - state of current port
+ // portType - <EPTF_HTTP_Transport_PortType> - port type
+ // buffer - *boolean* - buffering mode
+ // mesageBuffer - <EPTF_HTTP_Buffer> - buffer for sequencing outgoing responses
+ //
+ // Detailed Comments:
+ // A port group has a number of registerable and stateless callback
+ // functions to handle communication. These kind of function sets can
+ // be registered into the function database. This element contains
+ // one functions set.
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ type record EPTF_HTTP_Transport_PortInfo {
+ integer groupIndex,
+ integer portIndex,
+ integer connectionId,
+ integer sessionId,
+ integer portId,
+ integer localhostInfoIdx,
+ integer remotehostInfoIdx,
+ EPTF_HTTP_Transport_ConnectionState state,
+ EPTF_HTTP_Transport_PortType portType,
+ boolean buffer,
+ EPTF_HTTP_MessageBuffer messageBuffer optional
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_LocalTransport_initPortInfo
+ //
+ // Purpose:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ const EPTF_HTTP_Transport_PortInfo c_EPTF_HTTP_LocalTransport_initPortInfo :={
+ groupIndex := -1,
+ portIndex := -1,
+ connectionId := -1,
+ sessionId := -1,
+ portId := -1,
+ localhostInfoIdx := -1,
+ remotehostInfoIdx := -1,
+ state := IDLE,
+ portType := OUTGOING_PORT,
+ buffer := false,
+ messageBuffer := omit
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_MessageBuffer
+ //
+ // Purpose:
+ // Message buffer for response sequencing.
+ //
+ // Elements:
+ // seqNums - <EPTF_HTTP_SeqNumMgmt> - sequence number management
+ // seqNum2messageIdxHM - *integer* - hashmap reference to map a sequence number to a message queue index
+ // messageQueue - <EPTF_FreeBusyQueue> - index management for the message queue
+ // httpMessages - <EPTF_OctetstringList> - http messages in the buffer
+ //
+ // Detailed Comments:
+ // In case of a pipelining on a persistent connection the server MUST send its
+ // responses to the requests in the same order that the requests were received.
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ type record EPTF_HTTP_MessageBuffer
+ {
+ EPTF_HTTP_RingBuffer seqNums,
+ integer seqNum2messageIdxHM,
+ EPTF_FreeBusyQueue messageQueue,
+ OctetStringList httpMessages
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_RingBuffer
+ //
+ // Purpose:
+ // Handles sequence numbers of the responses
+ //
+ // Elements:
+ // isSlotBusyHM - *integer* - to decide if a given slot is busy
+ // nextSeqNum - *integer* - the sequence number of the next incoming request
+ // waitForSeqNum - *integer* - the sequence number of the next response to send out
+ // usedSlots - *integer* - number of used slowts in the buffer
+ // maxSize - *integer* - maximum size of the buffer
+ //
+ // Detailed Comments:
+ // In case of a pipelining on a persistent connection the server MUST send its
+ // responses to the requests in the same order that the requests were received.
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ type record EPTF_HTTP_RingBuffer{
+ integer isSlotBusyHM,
+ integer nextSeqNum,
+ integer waitForSeqNum,
+ integer usedSlots,
+ integer maxSize
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_Transport_PortInfoList
+ //
+ // Purpose:
+ // Port connection database of a port group
+ //
+ // Elements:
+ // record of <EPTF_HTTP_Transport_PortInfo>
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ type record of EPTF_HTTP_Transport_PortInfo EPTF_HTTP_Transport_PortInfoList;
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_Transport_PortGroup
+ //
+ // Purpose:
+ // An element of the port group database of the HTTP transport component
+ //
+ // Elements:
+ // name - *charstring* - unique name of the port group
+ // localHostInformation - <EPTF_HTTP_HostInformation> - base local IP
+ // address and port
+ // remoteHostInformation - <EPTF_HTTP_HostInformation> - base remote IP
+ // address and port
+ // currentPortId - *integer* - used to generate unique portId
+ // numberOfPorts - *integer* - number of ports within the group to be
+ // created
+ // localportStep - *integer* - step of local port number after creation
+ // of each port
+ // remoteportStep - *integer* - step of remote port number after creation
+ // of each port
+ // portDatabase - <EPTF_HTTP_Transport_PortInfoList> - port connection
+ // database of the group
+ // listeningPort - <EPTF_HTTP_Transport_PortInfo> *optional* - listening port info
+ // defaultFIdx - *integer* - function group database pointer
+ // portQueue - <EPTF_FreeBusyQueue> - FBQ to maintain status of ports
+ // within the group
+ // portStateQueue - <EPTF_FreeBusyQueue> - FBQ to maintain sending status
+ // of ports within the group
+ // useSSL - *boolean* - use ssl mode
+ // instantConnOpen - *boolean* - instant connection open mode
+ // instantConnClose - *boolean* - instant connection close mode
+ // buffer - *boolean* - buffer mode
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ type record EPTF_HTTP_Transport_PortGroup {
+ charstring name,
+
+ EPTF_HTTP_HostInformation baseLocalHostInformation,
+ EPTF_HTTP_HostInformation baseRemoteHostInformation,
+ integer currentPortId,
+ integer numberOfPorts,
+ integer localportStep,
+ integer remoteportStep,
+
+ EPTF_HTTP_Transport_PortInfoList portDatabase,
+ integer listeningPortIdx,
+
+ integer defaultFIdx,
+
+ EPTF_FreeBusyQueue portQueue,
+ EPTF_FreeBusyQueue portStateQueue,
+ boolean useSSL,
+ boolean instantConnOpen,
+ boolean instantConnClose,
+ boolean buffer
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // const: c_HTTP_Transport_initPortGroup
+ //
+ // Purpose:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ const EPTF_HTTP_Transport_PortGroup c_HTTP_Transport_initPortGroup :=
+ {
+ name := "",
+ baseLocalHostInformation := {"", -1},
+ baseRemoteHostInformation := {"", -1},
+ currentPortId := 0,
+ numberOfPorts := 0,
+ localportStep := -1,
+ remoteportStep := -1,
+ portDatabase := {},
+ listeningPortIdx := -1,
+ defaultFIdx := -1,
+ portQueue := c_EPTF_emptyFreeBusyQueue,
+ portStateQueue := c_EPTF_emptyFreeBusyQueue,
+ useSSL := false,
+ instantConnOpen := false,
+ instantConnClose := false,
+ buffer := false
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_Transport_PortGroupList
+ //
+ // Purpose:
+ // Port group database of the HTTP transport component
+ //
+ // Elements:
+ // record of <EPTF_HTTP_Transport_PortGroup>
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ type record of EPTF_HTTP_Transport_PortGroup EPTF_HTTP_Transport_PortGroupList;
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_Transport_NewPortGroup
+ //
+ // Purpose:
+ // Remote transport ASP API element for port group creation
+ //
+ // Elements:
+ // groupInfo - <EPTF_HTTP_Transport_GroupMode> - port group info
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ type record EPTF_HTTP_Transport_NewPortGroup {
+ EPTF_HTTP_Transport_GroupMode groupInfo
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_Transport_DeletePortGroup
+ //
+ // Purpose:
+ // Remote transport ASP API element for port group deletion
+ //
+ // Elements:
+ // groupId - *integer* - port group index of created port group
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ type record EPTF_HTTP_Transport_DeletePortGroup {
+ integer groupId
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_Transport_NewPort
+ //
+ // Purpose:
+ // Remote transport ASP API element for port creation
+ //
+ // Elements:
+ // portInfo - <EPTF_HTTP_Transport_PortMode> - port info
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ type record EPTF_HTTP_Transport_NewPort {
+ EPTF_HTTP_Transport_PortMode portInfo
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_Transport_NewServerPort
+ //
+ // Purpose:
+ // Remote transport ASP API element for a server port creation
+ //
+ // Elements:
+ // portInfo - <EPTF_HTTP_Transport_ServerPortMode> - server port info
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ type record EPTF_HTTP_Transport_NewServerPort {
+ EPTF_HTTP_Transport_ServerPortMode portInfo
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_Transport_DeletePort
+ //
+ // Purpose:
+ // Remote transport ASP API element for port deletion
+ //
+ // Elements:
+ // portId - *integer* - port group index of port to be deleted
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ type record EPTF_HTTP_Transport_DeletePort {
+ integer portId
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_Transport_AddPort
+ //
+ // Purpose:
+ // Remote transport ASP API element for add port to a port group
+ //
+ // Elements:
+ // groupId - *integer* - port group index of group to which a new port
+ // is to be added
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ type record EPTF_HTTP_Transport_AddPort {
+ integer groupId
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_Transport_RemovePort
+ //
+ // Purpose:
+ // Remote transport ASP API element for remove port from a port group
+ //
+ // Elements:
+ // groupId - *integer* - port group index of group from which a port
+ // is to be removed
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ type record EPTF_HTTP_Transport_RemovePort {
+ integer groupId
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_Transport_Send
+ //
+ // Purpose:
+ // Remote transport ASP API element for send a message
+ //
+ // Elements:
+ // groupId - *integer* - the ID of the group on which the message
+ // should be sent
+ // sessionId - *integer* - entity index as session id for current send
+ // outgoingMessage - *octetstring* - outgoing message
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ type record EPTF_HTTP_Transport_Send {
+ integer groupId,
+ integer sessionId,
+ octetstring outgoingMessage
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_Transport_ClosePortOfUser
+ //
+ // Purpose:
+ // Remote transport ASP API element for close port of user
+ //
+ // Elements:
+ // groupId - *integer* - the ID of the group on which the message
+ // should be sent
+ // sessionId - *integer* - entity index as session id for current send
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ type record EPTF_HTTP_Transport_ClosePortOfUser {
+ integer groupId,
+ integer sessionId
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_Transport_FreePortOfUser
+ //
+ // Purpose:
+ // Remote transport ASP API element for free port of user
+ //
+ // Elements:
+ // groupId - *integer* - the ID of the group on which the message
+ // should be sent
+ // sessionId - *integer* - entity index as session id for current send
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ type record EPTF_HTTP_Transport_FreePortOfUser {
+ integer groupId,
+ integer sessionId
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_Transport_Connect
+ //
+ // Purpose:
+ // Remote transport ASP API element for open a connection
+ //
+ // Elements:
+ // groupId - *integer* - the ID of the group whose connections should
+ // be opened
+ // sessionId - *integer* - entity index as session id for current open
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ type record EPTF_HTTP_Transport_Connect {
+ integer groupId,
+ integer sessionId
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_Transport_Close
+ //
+ // Purpose:
+ // Remote transport ASP API element for close a connection
+ //
+ // Elements:
+ // groupId - *integer* - the ID of the group whose connections should
+ // be closed
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ type record EPTF_HTTP_Transport_Close {
+ integer groupId
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_Transport_HalfClose
+ //
+ // Purpose:
+ // Remote transport ASP API element for half close a connection
+ //
+ // Elements:
+ // groupId - *integer* - the ID of the group whose connections should
+ // be half closed
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ type record EPTF_HTTP_Transport_HalfClose {
+ integer groupId
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_Transport_Listen
+ //
+ // Purpose:
+ // Remote transport ASP API element for opening a listen connection
+ //
+ // Elements:
+ // groupId - *integer* - the ID of the server group
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ type record EPTF_HTTP_Transport_Listen {
+ integer groupId
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_Transport_closePort
+ //
+ // Purpose:
+ // Remote transport ASP API element for closing a port
+ //
+ // Elements:
+ // groupId - *integer* - the ID of the group
+ // portId - *integer* - the port identifier
+ //
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ type record EPTF_HTTP_Transport_closePort{
+ integer groupId,
+ integer portId
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_Transport_SendResponse
+ //
+ // Purpose:
+ // Remote transport ASP API element for send a response.
+ //
+ // Elements:
+ // groupId - *integer* - the ID of the group on which the message
+ // should be sent
+ // portId - *integer* - the unique port identifier of the request
+ // msg - *octetstring* - outgoing response
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ type record EPTF_HTTP_Transport_SendResponse{
+ integer groupId,
+ integer portId,
+ integer seqNum,
+ octetstring msg
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_Transport_Result
+ //
+ // Purpose:
+ // Remote transport ASP API element for result notification
+ //
+ // Elements:
+ // groupId - *integer* - the ID of the group whose port got the event
+ // resultType - *integer* - event type
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ type record EPTF_HTTP_Transport_Result {
+ integer groupId,
+ integer sessionId,
+ integer resultType
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_Transport_Receive
+ //
+ // Purpose:
+ // Remote transport ASP API element for message reception handling
+ //
+ // Elements:
+ // groupId - *integer* - port group identifier of the request
+ // sessionId - *integer* - unique id of the request
+ // seqNum- *integer* - sequence number of the request
+ // reveivedMessage - *octetstring* - received message
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ type record EPTF_HTTP_Transport_Receive {
+ integer groupId,
+ integer sessionId,
+ integer seqNum,
+ octetstring reveivedMessage
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_Transport_Error
+ //
+ // Purpose:
+ // Remote transport ASP API element for error socket notification
+ //
+ // Elements:
+ // groupId - *integer* - the ID of the group whose port got the event
+ // result - <Result> - Contains IPL4 Result message
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ type record EPTF_HTTP_Transport_Error {
+ integer groupId,
+ integer sessionId,
+ Result result
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_Transport_ListenEvent
+ //
+ // Purpose:
+ // Remote transport ASP API element for listen socket event notification
+ //
+ // Elements:
+ // groupId - *integer* - port group ID
+ // hostInfo - <EPTF_HTTP_HostInformation> - listening address and port
+ // eventType - *integer* - event type
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ type record EPTF_HTTP_Transport_ListenEvent{
+ integer groupId,
+ EPTF_HTTP_HostInformation hostInfo,
+ integer eventType
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_Transport_ListenError
+ //
+ // Purpose:
+ // Remote transport ASP API element for listen socket error notification
+ //
+ // Elements:
+ // groupId - *integer* - port group ID
+ // hostInfo - <EPTF_HTTP_HostInformation> - listening address and port
+ // transportError - <EPTF_HTTP_Error> - error
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ type record EPTF_HTTP_Transport_ListenError{
+ integer groupId,
+ EPTF_HTTP_HostInformation hostInfo,
+ EPTF_HTTP_Error transportError
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_Transport_PT
+ //
+ // Purpose:
+ // EPTF HTTP internal communication port
+ //
+ // Elements:
+ // EPTF_HTTP_Transport_NewPortGroup
+ // EPTF_HTTP_Transport_NewPort
+ // EPTF_HTTP_Transport_NewServerPort
+ // EPTF_HTTP_Transport_DeletePortGroup
+ // EPTF_HTTP_Transport_DeletePort
+ // EPTF_HTTP_Transport_AddPort
+ // EPTF_HTTP_Transport_RemovePort
+ // EPTF_HTTP_Transport_Send
+ // EPTF_HTTP_Transport_ClosePortOfUser
+ // EPTF_HTTP_Transport_FreePortOfUser
+ // EPTF_HTTP_Transport_Connect
+ // EPTF_HTTP_Transport_Close
+ // EPTF_HTTP_Transport_HalfClose
+ // EPTF_HTTP_Transport_Listen
+ // EPTF_HTTP_Transport_SendResponse
+ // EPTF_HTTP_Transport_Result
+ // EPTF_HTTP_Transport_Receive
+ // EPTF_HTTP_Transport_Error
+ // EPTF_HTTP_Transport_ListenEvent
+ // EPTF_HTTP_Transport_ListenError
+ // EPTF_HTTP_Transport_closePort
+ // integer
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ type port EPTF_HTTP_Transport_PT message
+ {
+ inout EPTF_HTTP_Transport_NewPortGroup;
+ inout EPTF_HTTP_Transport_NewPort;
+ inout EPTF_HTTP_Transport_NewServerPort;
+ inout EPTF_HTTP_Transport_DeletePortGroup;
+ inout EPTF_HTTP_Transport_DeletePort;
+ inout EPTF_HTTP_Transport_AddPort;
+ inout EPTF_HTTP_Transport_RemovePort;
+ inout EPTF_HTTP_Transport_Send;
+ inout EPTF_HTTP_Transport_ClosePortOfUser;
+ inout EPTF_HTTP_Transport_FreePortOfUser;
+ inout EPTF_HTTP_Transport_Connect;
+ inout EPTF_HTTP_Transport_Close;
+ inout EPTF_HTTP_Transport_HalfClose;
+ inout EPTF_HTTP_Transport_Listen;
+ inout EPTF_HTTP_Transport_SendResponse
+ inout EPTF_HTTP_Transport_Result;
+ inout EPTF_HTTP_Transport_Receive;
+ inout EPTF_HTTP_Transport_Error;
+ inout EPTF_HTTP_Transport_ListenEvent;
+ inout EPTF_HTTP_Transport_ListenError;
+ inout EPTF_HTTP_Transport_closePort;
+ inout integer;
+ } with {extension "internal"}
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_Base_CTList
+ //
+ // Purpose:
+ // Routing component CT list
+ //
+ // Elements:
+ // record of <EPTF_Base_CT>
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ type record of EPTF_Base_CT EPTF_HTTP_Base_CTList;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// Group: EPTF_HTTP_LocalTransport
+//
+// Purpose:
+// The definitions of the EPTF HTTP Local Transport
+//
+///////////////////////////////////////////////////////////////////////////////
+group EPTF_HTTP_LocalTransport {
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_LocalTransport_CT
+ //
+ // Purpose:
+ // EPTF HTTP local transport component
+ //
+ // Extends:
+ // EPTF_MessageBufferManager_CT
+ //
+ // EPTF_HTTP_LoggerClient_CT
+ //
+ // EPTF_HTTP_Transport_Logging_CT (this extends EPTF_Logging_CT)
+ //
+ // EPTF_CommPort_IPL4_CT
+ //
+ // EPTF_Base_CT
+ //
+ // Ports:
+ // pf_EPTF_HTTP_LocalTransport_commPort - <EPTF_HTTP_Transport_PT> - local transport communication port
+ //
+ // Timers:
+ // -
+ //
+ // Elements:
+ // vf_EPTF_HTTP_LocalTransport_receive - <EPTF_HTTP_messageProcess_FT> -
+ // receive message callback function pointer
+ // vf_EPTF_HTTP_LocalTransport_eventReceive - <EPTF_HTTP_eventReceive_FT> -
+ // receive event callback function pointer
+ // vf_EPTF_HTTP_LocalTransport_socketErrorReceive - <EPTF_HTTP_socketErrorReceive_FT> -
+ // receive socket error callback function pointer
+ // vf_EPTF_HTTP_LocalTransport_listenSocketEvent - <EPTF_HTTP_listenSocketEvent_FT> -
+ // receive lisent socket event callback function pointer
+ // vf_EPTF_HTTP_LocalTransport_listenSocketError - <EPTF_HTTP_listenSocketError_FT> -
+ // receive lisent socket error callback function pointer
+ // vf_EPTF_HTTP_messageSentHook - <fcb_EPTF_HTTP_messageSentHook> -
+ // callback function that is invoked after each HTTP message is sent
+ //
+ // v_EPTF_HTTP_LocalTransport_loggingEnabled - *integer* -
+ // the Variable of the GUI logging
+ // v_EPTF_HTTP_LocalTransport_guiEnabled - *boolean* - GUI Logging enabled
+ // v_EPTF_HTTP_LocalTransport_initialized - *boolean* -
+ // The component initialized variable
+ // v_EPTF_HTTPLocalTransport_lengthCalculationFunctions - <EPTF_HTTP_LocalTransport_MessageLengthCalculationFunctionList> -
+ // message length calcualtion function list
+ //
+ // v_EPTF_HTTP_LocalTransport_selfName - *charstring* - self name of the component
+ // v_EPTF_HTTP_Transport_groupQueue - <EPTF_FreeBusyQueue> - FBQ to maintain port groups
+ // v_EPTF_HTTP_Transport_portDB - <EPTF_HTTP_Transport_PortGroupList> - port group database
+ // v_EPTF_HTTP_Transport_functionDB - <EPTF_HTTP_Transport_FunctionList> - function database
+ //
+ // v_EPTF_HTTP_Transport_groupName2Idx_HM - *integer* - group name to group index hash map handle
+ // v_EPTF_HTTP_Transport_functions2Idx_HM - *integer* - function set to function database hash map handle
+ // v_EPTF_HTTP_Transport_remoteHostHashMap - *integer* - remote host hash map handle
+ // v_EPTF_HTTP_Transport_localHostHashMap - *integer* - local host hash map handle
+ // v_EPTF_HTTP_Transport_connId2GroupId_HM - *integer* - connection id to group index hash map handle
+ // v_EPTF_HTTP_Transport_connId2PortId_HM - *integer* - connection id to port index hash map handle
+ //
+ // v_nameIdx - *integer* - variable to store current highest port group name index
+ //
+ // v_resultNoWarning - <Result> - dummy variable to suppress warnings
+ // v_boolNoWarning - *boolean* - dummy variable to suppress warnings
+ // v_intNoWarning - *integer* - dummy variable to suppress warnings
+ //
+ // v_EPTF_HTTP_Transport_localHostInformationList - <EPTF_HTTP_HostInformationList> - local host
+ // information database
+ // v_EPTF_HTTP_Transport_remoteHostInformationList - <EPTF_HTTP_HostInformationList> - remote
+ // host information database
+ //
+ // v_EPTF_HTTP_Transport_OutgoingMessage - <EPTF_CommPort_IPL4_ASP_OutgoingMessage> -
+ // outgoing message
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ type component EPTF_HTTP_LocalTransport_CT extends
+ EPTF_MessageBufferManager_CT,
+ EPTF_HTTP_Transport_Logging_CT,
+ EPTF_CommPort_IPL4_CT,
+ EPTF_Base_CT
+ {
+ var EPTF_HTTP_messageProcess_FT vf_EPTF_HTTP_LocalTransport_receive := null;
+ var EPTF_HTTP_eventReceive_FT vf_EPTF_HTTP_LocalTransport_eventReceive := null;
+ var EPTF_HTTP_socketErrorReceive_FT vf_EPTF_HTTP_LocalTransport_socketErrorReceive := null;
+
+ var EPTF_HTTP_listenSocketEvent_FT vf_EPTF_HTTP_LocalTransport_listenSocketEvent := null;
+ var EPTF_HTTP_listenSocketError_FT vf_EPTF_HTTP_LocalTransport_listenSocketError := null
+ var fcb_EPTF_HTTP_messageSentHook vf_EPTF_HTTP_messageSentHook := null;
+
+ var integer v_EPTF_HTTP_LocalTransport_loggingEnabled := -1;
+ var boolean v_EPTF_HTTP_LocalTransport_guiEnabled := false;
+ var boolean v_EPTF_HTTP_LocalTransport_initialized := false;
+ var EPTF_HTTP_LocalTransport_MessageLengthCalculationFunctionList v_EPTF_HTTPLocalTransport_lengthCalculationFunctions := {};
+
+ var EPTF_HTTP_Transport_GetGroupAndPort_FT vf_getGroupAndPort := null;
+ var EPTF_HTTP_Transport_GetGroup_FT vf_getGroup := null;
+
+
+ var charstring v_EPTF_HTTP_LocalTransport_selfName := "EPTF_HTTP_Transport";
+
+ var EPTF_FreeBusyQueue v_EPTF_HTTP_Transport_groupQueue;
+ var EPTF_HTTP_Transport_PortGroupList v_EPTF_HTTP_Transport_portDB := {};
+ var integer v_EPTF_HTTP_Transport_groupName2Idx_HM := -1;
+
+ var EPTF_HTTP_Transport_FunctionList v_EPTF_HTTP_Transport_functionDB := {};
+ var integer v_EPTF_HTTP_Transport_functions2Idx_HM := -1;
+
+ var integer v_EPTF_HTTP_Transport_connId2GroupId_HM := -1;
+ var integer v_EPTF_HTTP_Transport_connId2PortId_HM := -1;
+ var integer v_EPTF_HTTP_Transport_sessId2PortId_HM := -1;
+ var integer v_EPTF_HTTP_Transport_portId2Idx_HM := -1;
+
+ var integer v_nameIdx := 0;
+ var Result v_resultNoWarning;
+ var boolean v_boolNoWarning;
+ var integer v_intNoWarning;
+
+ var EPTF_HTTP_HostInformationList v_EPTF_HTTP_Transport_localHostInformationList := {};
+ var integer v_EPTF_HTTP_Transport_localHostHashMap := -1;
+
+ var EPTF_HTTP_HostInformationList v_EPTF_HTTP_Transport_remoteHostInformationList := {};
+ var integer v_EPTF_HTTP_Transport_remoteHostHashMap := -1;
+
+ var integer v_EPTF_HTTP_Transport_lastReceivedGroup := -1;
+ var EPTF_CommPort_IPL4_ASP_OutgoingMessage v_EPTF_HTTP_Transport_OutgoingMessage;
+
+ var integer v_EPTF_HTTP_Transport_bufferSize := tsp_EPTF_HTTP_bufferSize;
+
+ port EPTF_HTTP_Transport_PT pf_EPTF_HTTP_LocalTransport_commPort;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_LocalTransport_CTList
+ //
+ // Purpose:
+ // Remote transport CT list
+ //
+ // Elements:
+ // record of <EPTF_HTTP_LocalTransport_CT>
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ type record of EPTF_HTTP_LocalTransport_CT EPTF_HTTP_LocalTransport_CTList;
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_LocalTransport_MessageLengthCalculationFunctionList
+ //
+ // Purpose:
+ // Message length calculation function database
+ //
+ // Elements:
+ // record of <f_IPL4_getMsgLen>
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ type record of f_IPL4_getMsgLen
+ EPTF_HTTP_LocalTransport_MessageLengthCalculationFunctionList;
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_LocalTransport_idx_getMessageLength
+ //
+ // Purpose:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ const integer c_EPTF_HTTP_LocalTransport_idx_getMessageLength := 0;
+
+ ///////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_LocalTransport_idx_getMessageLength4Diameter
+ //
+ // Purpose:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ const integer c_EPTF_HTTP_LocalTransport_idx_getMessageLength4Diameter := 1;
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_LocalTransport_idx_getMessageLengthChunkedCoding
+ //
+ // Purpose:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ const integer c_EPTF_HTTP_LocalTransport_idx_getMessageLengthChunkedCoding := 2;
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // const: Hash map name constants for Local transport
+ //
+ // Purpose:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ const charstring c_EPTF_HTTP_LocalTransport_HashMap_groupName2Idx := "EPTF HTTP: Group name to group index HashMap";
+ const charstring c_EPTF_HTTP_LocalTransport_HashMap_fnGrp2Idx := "EPTF HTTP: Function group to index HashMap";
+ const charstring c_EPTF_HTTP_LocalTransport_HashMap_localHost := "EPTF HTTP: Local Host HashMap";
+ const charstring c_EPTF_HTTP_LocalTransport_HashMap_remoteHost := "EPTF HTTP: Remote Host HashMap";
+ const charstring c_EPTF_HTTP_LocalTransport_HashMap_connId2PortGrp := "EPTF HTTP: Connection id to Port group index HashMap";
+ const charstring c_EPTF_HTTP_LocalTransport_HashMap_connId2Port := "EPTF HTTP: Connection id to Port index within port group HashMap";
+ const charstring c_EPTF_HTTP_LocalTransport_HashMap_sessId2Port := "EPTF HTTP: Session id to Port index within port group HashMap";
+ const charstring c_EPTF_HTTP_LocalTransport_HashMap_portId2Idx := "EPTF HTTP: Port id to Port index within port group HashMap";
+ const charstring c_EPTF_HTTP_LocalTransport_HashMap_isSlotBusy := "EPTF HTTP: Buffer queue HashMap";
+ const charstring c_EPTF_HTTP_LocalTransport_HashMap_seqNum2messageIdx := "EPTF HTTP: Sequence number to message queue index HashMap";
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// Group: EPTF_HTTP_RemoteTransport
+//
+// Purpose:
+// The definitions of the EPTF HTTP Remote Transport
+//
+///////////////////////////////////////////////////////////////////////////////
+group EPTF_HTTP_RemoteTransport
+{
+ ///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_RemoteTransport_CT
+ //
+ // Purpose:
+ // EPTF HTTP remote transport component
+ //
+ // Extends:
+ // EPTF_Base_CT
+ // EPTF_HTTP_Transport_Logging_CT (this extends EPTF_Logging_CT)
+ //
+ // Ports:
+ // v_EPTF_HTTP_RemoteTransport_commPort - <EPTF_HTTP_Transport_PT> -
+ // internal communication port
+ //
+ // Timers:
+ // -
+ //
+ // Elements:
+ // v_EPTF_HTTP_RemoteTransport_selfName - *charstring* - self name of the
+ // component
+ // v_EPTF_HTTP_RemoteTransport_result - <EPTF_HTTP_Transport_Result> -
+ // Remote transport internal communication ASP for incoming events
+ // v_EPTF_HTTP_RemoteTransport_receive - <EPTF_HTTP_Transport_Receive> -
+ // Remote transport internal communication ASP for incoming messages
+ // v_EPTF_HTTP_RemoteTransport_error - <EPTF_HTTP_Transport_Error> -
+ // Remote transport internal communication ASP for error messages
+ // v_EPTF_HTTP_RemoteTransport_listenEvent - <EPTF_HTTP_Transport_ListenEvent> -
+ // Remote transport internal communication ASP for listening socket events
+ // v_EPTF_HTTP_RemoteTransport_listenError - <EPTF_HTTP_Transport_ListenError> -
+ // Remote transport internal communication ASP for listening socket errors
+ // vf_EPTF_HTTP_RemoteTransport_handleReceive - <EPTF_HTTP_messageProcess_FT> -
+ // receive callback function pointer
+ // vf_EPTF_HTTP_RemoteTransport_eventReceive - <EPTF_HTTP_eventReceive_FT> -
+ // receive event callback function pointer
+ // vf_EPTF_HTTP_RemoteTransport_socketErrorReceive - <EPTF_HTTP_socketErrorReceive_FT> -
+ // receive socket error callback function pointer
+ // v_EPTF_HTTP_RemoteTransport_default - *default* - remote transport
+ // default altstep handler
+ // v_EPTF_HTTP_RemoteTransport_initialized - *boolean* - remote transport
+ // component initialization state
+ // v_EPTF_HTTP_RemoteTransport_transportIdToConnId - *integer* - hash map
+ // index
+ // v_EPTF_HTTP_Mapper_halfClose - <EPTF_HTTP_Transport_HalfClose> - HTTP
+ // half close message ASP
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ type component EPTF_HTTP_RemoteTransport_CT extends
+ EPTF_Base_CT,
+ EPTF_HTTP_Transport_Logging_CT,
+ EPTF_HashMap_CT
+ {
+ var charstring v_EPTF_HTTP_RemoteTransport_selfName := "EPTF_HTTP_RemoteTransport";
+
+ var EPTF_HTTP_Transport_Result v_EPTF_HTTP_RemoteTransport_result;
+ var EPTF_HTTP_Transport_Receive v_EPTF_HTTP_RemoteTransport_receive;
+ var EPTF_HTTP_Transport_Error v_EPTF_HTTP_RemoteTransport_error;
+
+ var EPTF_HTTP_Transport_ListenEvent v_EPTF_HTTP_RemoteTransport_listenEvent;
+ var EPTF_HTTP_Transport_ListenError v_EPTF_HTTP_RemoteTransport_listenError;
+
+ var EPTF_HTTP_messageProcess_FT vf_EPTF_HTTP_RemoteTransport_handleReceive := null;
+ var EPTF_HTTP_eventReceive_FT vf_EPTF_HTTP_RemoteTransport_eventReceive := null;
+ var EPTF_HTTP_socketErrorReceive_FT vf_EPTF_HTTP_RemoteTransport_socketErrorReceive := null;
+
+ var EPTF_HTTP_listenSocketEvent_FT vf_EPTF_HTTP_RemoteTransport_listenSocketEvent := null;
+ var EPTF_HTTP_listenSocketError_FT vf_EPTF_HTTP_RemoteTransport_listenSocketError := null
+
+ var default v_EPTF_HTTP_RemoteTransport_default;
+
+ var boolean v_EPTF_HTTP_RemoteTransport_initialized := false;
+ var integer v_EPTF_HTTP_RemoteTransport_transportIdToConnId := -1;
+
+ port EPTF_HTTP_Transport_PT v_EPTF_HTTP_RemoteTransport_commPort;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_RemoteTransport_CTList
+ //
+ // Purpose:
+ // Remote transport CT list
+ //
+ // Elements:
+ // record of <EPTF_HTTP_RemoteTransport_CT>
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ type record of EPTF_HTTP_RemoteTransport_CT EPTF_HTTP_RemoteTransport_CTList;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// const: Hash map name constants for Remote transport
+//
+// Purpose:
+// -
+//
+///////////////////////////////////////////////////////////////////////////////
+const charstring c_EPTF_HTTP_RemoteTransport_HashMap_transportId2ConnId := "EPTF HTTP: Transport ID To Connection ID HashMap";
+
+///////////////////////////////////////////////////////////////////////////////
+// Group: EPTF_HTTP_Mapper
+//
+// Purpose:
+// The definitions of the EPTF HTTP Mapper
+//
+///////////////////////////////////////////////////////////////////////////////
+group EPTF_HTTP_Mapper
+{
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_Mapper_CT
+ //
+ // Purpose:
+ // EPTF HTTP mapper component
+ //
+ // Extends:
+ // EPTF_HTTP_LocalTransport_CT
+ //
+ // EPTF_Routing_CT
+ //
+ // EPTF_Base_CT
+ //
+ // Ports:
+ // v_EPTF_HTTP_Mapper_commPort - <EPTF_HTTP_Transport_PT> - internal
+ // communication port
+ //
+ // Timers:
+ // -
+ //
+ // Elements:
+ // v_EPTF_HTTP_Mapper_componentId - *integer* - component id for routing
+ // v_EPTF_HTTP_Mapper_default - *default* - handle of the Mapper's
+ // default altstep
+ // v_EPTF_HTTP_Mapper_componentRef - <EPTF_Base_CT> - store remote load
+ // generator component reference for routing
+ // v_EPTF_HTTP_Mapper_hashMapIdx - *integer* - mapper routing hash map
+ // v_EPTF_HTTP_Mapper_initialized - *boolean* - mapper initialization
+ // state
+ // v_EPTF_HTTP_Mapper_newPortGroup - <EPTF_HTTP_Transport_NewPortGroup> -
+ // HTTP new port group ASP
+ // v_EPTF_HTTP_Mapper_deletePortGroup - <EPTF_HTTP_Transport_DeletePortGroup> -
+ // HTTP delete port group ASP
+ // v_EPTF_HTTP_Mapper_newPort - <EPTF_HTTP_Transport_NewPort> - HTTP
+ // new port ASP
+ // v_EPTF_HTTP_Mapper_newServerPort - <EPTF_HTTP_Transport_NewServerPort> - HTTP
+ // new server port ASP
+ // v_EPTF_HTTP_Mapper_deletePort - <EPTF_HTTP_Transport_DeletePort> -
+ // HTTP delete port ASP
+ // v_EPTF_HTTP_Mapper_addPort - <EPTF_HTTP_Transport_AddPort> - HTTP
+ // HTTP add port from port group ASP
+ // v_EPTF_HTTP_Mapper_removePort - <EPTF_HTTP_Transport_RemovePort> -
+ // HTTP remove port from port group ASP
+ // v_EPTF_HTTP_Mapper_sendMessage - <EPTF_HTTP_Transport_Send> - HTTP
+ // HTTP send message ASP
+ // v_EPTF_HTTP_Mapper_connect - <EPTF_HTTP_Transport_Connect> - HTTP
+ // connect message ASP
+ // v_EPTF_HTTP_Mapper_close - <EPTF_HTTP_Transport_Close> - HTTP close
+ // message ASP
+ // v_EPTF_HTTP_Mapper_halfClose - <EPTF_HTTP_Transport_HalfClose> - HTTP
+ // half close message ASP
+ // v_EPTF_HTTP_Mapper_listen - <EPTF_HTTP_Transport_Listen> - HTTP
+ // listen message ASP
+ // v_EPTF_HTTP_Mapper_sendResponse - <EPTF_HTTP_Transport_SendResponse> - HTTP
+ // send response ASP
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ type component EPTF_HTTP_Mapper_CT extends
+ EPTF_HTTP_LocalTransport_CT,
+ EPTF_Routing_CT,
+ EPTF_Base_CT
+ {
+ port EPTF_HTTP_Transport_PT v_EPTF_HTTP_Mapper_commPort;
+
+ var integer v_EPTF_HTTP_Mapper_sessionId;
+ var integer v_EPTF_HTTP_Mapper_portId;
+
+ var EPTF_IntegerList v_EPTF_HTTP_Mapper_componentId;
+ var default v_EPTF_HTTP_Mapper_default;
+ var EPTF_Base_CT v_EPTF_HTTP_Mapper_componentRef;
+ var integer v_EPTF_HTTP_Mapper_hashMapIdx := -1;
+ var boolean v_EPTF_HTTP_Mapper_initialized := false;
+
+ var EPTF_BooleanList v_EPTF_HTTP_Mapper_routingSetDatabase := {};
+ var EPTF_HTTP_Mapper_Routing_Database v_EPTF_HTTP_Mapper_inRoutingDatabase := {};
+
+ var EPTF_HTTP_MapperRoutingUri2LGenDB v_EPTF_HTTP_MapperRoutingUri2LGenDB;
+ private var EPTF_HTTP_MapperRoutingUri2LGen_GetUri_FT fcb_EPTF_HTTP_MapperRoutingUri2LGen_GetUri := null;
+
+ var EPTF_HTTP_Transport_NewPortGroup v_EPTF_HTTP_Mapper_newPortGroup;
+ var EPTF_HTTP_Transport_DeletePortGroup v_EPTF_HTTP_Mapper_deletePortGroup;
+ var EPTF_HTTP_Transport_NewPort v_EPTF_HTTP_Mapper_newPort;
+ var EPTF_HTTP_Transport_NewServerPort v_EPTF_HTTP_Mapper_newServerPort;
+ var EPTF_HTTP_Transport_DeletePort v_EPTF_HTTP_Mapper_deletePort;
+ var EPTF_HTTP_Transport_AddPort v_EPTF_HTTP_Mapper_addPort;
+ var EPTF_HTTP_Transport_RemovePort v_EPTF_HTTP_Mapper_removePort;
+ var EPTF_HTTP_Transport_Connect v_EPTF_HTTP_Mapper_connect;
+ var EPTF_HTTP_Transport_Send v_EPTF_HTTP_Mapper_sendMessage;
+ var EPTF_HTTP_Transport_ClosePortOfUser v_EPTF_HTTP_Mapper_closePortOfUser;
+ var EPTF_HTTP_Transport_FreePortOfUser v_EPTF_HTTP_Mapper_freePortOfUser;
+ var EPTF_HTTP_Transport_Close v_EPTF_HTTP_Mapper_close;
+ var EPTF_HTTP_Transport_HalfClose v_EPTF_HTTP_Mapper_halfClose;
+ var EPTF_HTTP_Transport_Listen v_EPTF_HTTP_Mapper_listen;
+ var EPTF_HTTP_Transport_SendResponse v_EPTF_HTTP_Mapper_sendResponse;
+ var EPTF_HTTP_Transport_closePort v_EPTF_HTTP_Mapper_closePort;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_Mapper_Routing
+ //
+ // Purpose:
+ // Routing setup element
+ //
+ // Elements:
+ // groupId - *integer* - group index
+ // compIdList - <EPTF_IntegerList> - component id list casted to integer
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ type record EPTF_HTTP_Mapper_Routing {
+ integer groupId,
+ EPTF_IntegerList compIdList
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_Mapper_Routing
+ //
+ // Purpose:
+ // Routing setup list
+ //
+ // Elements:
+ // record of <EPTF_HTTP_Mapper_Routing>
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ type record of EPTF_HTTP_Mapper_Routing EPTF_HTTP_Mapper_RoutingList;
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_Mapper_Routing_DBE
+ //
+ // Purpose:
+ // Routing database element
+ //
+ // Elements:
+ // ptr - *integer* - next component id list pointer to send
+ // size - *integer* - component id list size
+ // compIdList - <EPTF_IntegerList> - component id list casted to integer
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ type record EPTF_HTTP_Mapper_Routing_DBE {
+ integer ptr,
+ integer size,
+ EPTF_IntegerList compIdList
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // const: c_EPTF_HTTP_initRoutingDBE
+ //
+ // Purpose:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ const EPTF_HTTP_Mapper_Routing_DBE c_EPTF_HTTP_initRoutingDBE :=
+ {
+ ptr := 0,
+ size := 0,
+ compIdList := {}
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_Mapper_Routing_Database
+ //
+ // Purpose:
+ // Routing database
+ //
+ // Elements:
+ // record of <EPTF_HTTP_Mapper_Routing_DBE>
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ type record of EPTF_HTTP_Mapper_Routing_DBE EPTF_HTTP_Mapper_Routing_Database;
+
+ const charstring c_EPTF_HTTP_Transport_hashMapName_uri2idxHash := "SIP: uri2Idx";
+ type record EPTF_HTTP_MapperRoutingUri2LGenDB {
+ integer uri2lgenIdxHash
+ }
+
+ type function EPTF_HTTP_MapperRoutingUri2LGen_GetUri_FT() runs on self return charstring;
+
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // const: Hash map name constants for Mapper
+ //
+ // Purpose:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ const charstring c_EPTF_HTTP_Mapper_HashMap_routing := "EPTF HTTP: Routing HashMap";
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// Group: EPTF_HTTP_Transport_Logging
+//
+// Purpose:
+// The definitions of the EPTF HTTP Transport Logging
+//
+///////////////////////////////////////////////////////////////////////////////
+group EPTF_HTTP_Transport_Logging
+{
+ ///////////////////////////////////////////////////////////////////////////////
+ // Type: EPTF_HTTP_Transport_Logging_CT
+ //
+ // Purpose:
+ // Common logging component for Local/Remote transport
+ //
+ // Extends:
+ // EPTF_Logging_CT
+ //
+ // Ports:
+ // -
+ //
+ // Timers:
+ // -
+ //
+ // Elements:
+ // v_EPTF_HTTP_Transport_loggingMaskId - *integer* - logging mask id
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ type component EPTF_HTTP_Transport_Logging_CT extends EPTF_Logging_CT
+ {
+ // logging
+ var integer v_EPTF_HTTP_Transport_loggingMaskId := c_EPTF_Logging_invalidMaskId;
+
+ var integer v_EPTF_HTTP_Transport_bufferLoggingMaskId := c_EPTF_Logging_invalidMaskId;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Constant: c_EPTF_HTTP_Transport_loggingEventClasses
+ //
+ // Purpose:
+ // list of logging event class names used on the EPTF HTTP
+ // Transport component
+ //
+ // Detailed Comments:
+ // <EPTF_Logging_EventClassPrefixList> { "Error", "Warning", "Debug" }
+ ///////////////////////////////////////////////////////////////////////////////
+ const EPTF_Logging_EventClassPrefixList
+ c_EPTF_HTTP_Transport_loggingEventClasses := { "Error", "Warning", "Debug", "BufferWarning", "BufferDebug"};
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Constant: c_EPTF_HTTP_Transport_loggingClassIdx_Error
+ //
+ // Purpose:
+ // logging class index for Error
+ //
+ // Detailed Comments:
+ // *0*
+ ///////////////////////////////////////////////////////////////////////////////
+ const integer c_EPTF_HTTP_Transport_loggingClassIdx_Error := 0;
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Constant: c_EPTF_HTTP_Transport_loggingClassIdx_Warning
+ //
+ // Purpose:
+ // logging class index for Warning
+ //
+ // Detailed Comments:
+ // *1*
+ ///////////////////////////////////////////////////////////////////////////////
+ const integer c_EPTF_HTTP_Transport_loggingClassIdx_Warning := 1;
+
+ ///////////////////////////////////////////////////////////
+ // Constant: c_EPTF_HTTP_Transport_loggingClassIdx_Debug
+ //
+ // Purpose:
+ // logging class index for Debug
+ //
+ // Detailed Comments:
+ // *2*
+ ///////////////////////////////////////////////////////////////////////////////
+ const integer c_EPTF_HTTP_Transport_loggingClassIdx_Debug := 2;
+
+ ///////////////////////////////////////////////////////////
+ // Constant: c_EPTF_HTTP_Transport_loggingClassIdx_BufferWarning
+ //
+ // Purpose:
+ // logging class index for Buffer debug warning logging.
+ //
+ // Detailed Comments:
+ // *0*
+ ///////////////////////////////////////////////////////////////////////////////
+ const integer c_EPTF_HTTP_Transport_loggingClassIdx_BufferWarning := 3;
+
+ ///////////////////////////////////////////////////////////
+ // Constant: c_EPTF_HTTP_Transport_loggingClassIdx_BufferDebug
+ //
+ // Purpose:
+ // logging class index for Buffer debug logging.
+ //
+ // Detailed Comments:
+ // *1*
+ ///////////////////////////////////////////////////////////////////////////////
+ const integer c_EPTF_HTTP_Transport_loggingClassIdx_BufferDebug := 4;
+}
+
+///////////////////////////////////////////////////////////
+// Type: fcb_EPTF_HTTP_messageSentHook
+//
+// Purpose: Message hook for post-processing HTTP message sent.
+//
+///////////////////////////////////////////////////////////
+type function fcb_EPTF_HTTP_messageSentHook(in integer pl_eIdx, in octetstring pl_httpMessage) runs on self;
+
+}//end of module
+with {
+extension "version <RnXnn>"
+}
+
diff --git a/src/Transport/EPTF_HTTP_Transport_Functions.ttcn b/src/Transport/EPTF_HTTP_Transport_Functions.ttcn
new file mode 100644
index 0000000..711465c
--- /dev/null
+++ b/src/Transport/EPTF_HTTP_Transport_Functions.ttcn
@@ -0,0 +1,6482 @@
+///////////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2000-2018 Ericsson Telecom AB
+//
+// All rights reserved. This program and the accompanying materials
+// are made available under the terms of the Eclipse Public License v1.0
+// which accompanies this distribution, and is available at
+// http://www.eclipse.org/legal/epl-v10.html
+///////////////////////////////////////////////////////////////////////////////
+//
+// File: EPTF_HTTP_Transport_Functions.ttcn
+// Rev: <RnXnn>
+// Prodnr: CNL 113 618
+// Updated: 2014-03-21
+// Contact: http://ttcn.ericsson.se
+///////////////////////////////////////////////////////////////////////////////
+
+///////////////////////////////////////////////////////////////////////////////
+// Module: EPTF_HTTP_Transport_Functions
+//
+// Purpose:
+// This module contains the HTTP transport layer functions
+//
+// Module Parameters:
+// See <EPTF_HTTP_Transport_Definitions>
+//
+// Module depends on:
+// <EPTF_CLL_TransportRouting_Functions>
+//
+// <EPTF_CLL_TransportMessageBufferManager_Functions>
+//
+// <EPTF_CLL_Base_Definitions>
+//
+// <EPTF_CLL_Base_Functions>
+//
+// <EPTF_CLL_Variable_Functions>
+//
+// <EPTF_CLL_Logging_Definitions>
+//
+// <EPTF_CLL_Logging_Functions>
+//
+// <EPTF_CLL_TransportCommPortIPL4_Definitions>
+//
+// <EPTF_CLL_TransportCommPortIPL4_Functions>
+//
+// <EPTF_CLL_Common_Definitions>
+//
+// <EPTF_CLL_LGenBase_Functions>
+//
+// <EPTF_CLL_LGenBase_Definitions>
+//
+// <EPTF_CLL_HashMapStr2Int_Functions>
+//
+// <EPTF_CLL_HashMapInt2Int_Functions>
+//
+// <EPTF_CLL_FBQ_Definitions>
+//
+// <EPTF_CLL_FBQ_Functions>
+//
+// <EPTF_HTTP_Definitions>
+//
+// <EPTF_HTTP_Transport_Definitions>
+//
+// <IPL4asp_Types>
+//
+// <TCCMessageHandling_Functions>
+//
+// Current Owner:
+// EAKOPER
+//
+// Last Review Date:
+// 2009-08-10
+//
+// Detailed Comments:
+// -
+//
+///////////////////////////////////////////////////////////////////////////////
+
+module EPTF_HTTP_Transport_Functions {
+
+//=============================================================================
+// Imports
+//=============================================================================
+
+import from EPTF_CLL_TransportRouting_Functions all;
+import from EPTF_CLL_TransportMessageBufferManager_Functions all;
+import from EPTF_CLL_Base_Functions all;
+import from EPTF_CLL_Logging_Definitions all;
+import from EPTF_CLL_Logging_Functions all;
+import from EPTF_CLL_TransportCommPortIPL4_Definitions all;
+import from EPTF_CLL_TransportCommPortIPL4_Functions all;
+import from EPTF_CLL_HashMapStr2Int_Functions all;
+import from EPTF_CLL_HashMapInt2Int_Functions all;
+import from EPTF_CLL_FBQ_Functions all;
+import from EPTF_CLL_HashMap_Functions all;
+
+import from EPTF_HTTP_Definitions all; // events
+import from EPTF_HTTP_Transport_Definitions all;
+
+import from IPL4asp_Types all;
+
+import from TCCMessageHandling_Functions all;
+
+//=============================================================================
+// Functions
+//=============================================================================
+
+///////////////////////////////////////////////////////////////////////////////
+// Group: EPTF_HTTP_LocalTransport
+//
+// Purpose:
+// Functions of the EPTF HTTP Local Transport
+//
+///////////////////////////////////////////////////////////////////////////////
+group EPTF_HTTP_LocalTransport
+{
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_LocalTransport_init_CT
+ //
+ // Purpose:
+ // Function to init The LocalTransprot component
+ //
+ // Parameters:
+ // - pl_selfName - *in* *charstring* - self name of the component
+ // - pl_receiveFunction - *in* <EPTF_HTTP_messageProcess_FT> - the
+ // receive callback function to handle received messages
+ // - pl_eventReceiveFunction - *in* <EPTF_HTTP_eventReceive_FT> - the
+ // receive event callback function to handle received events
+ // - pl_socketErrorReceiveFunction - *in* <EPTF_HTTP_socketErrorReceive_FT> - the
+ // socket error receive callback function to handle received socket error events and messages
+ // - pl_interfaceInformationList - *in* <EPTF_CommPort_IPL4_InterfaceInformationList> -
+ // the defined interfaces for IPL4 (can be used only with root rights)
+ //
+ // Return Value:
+ // *integer* - if the component is initialized already the return value
+ // will be -1
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_LocalTransport_init_CT(
+ in charstring pl_selfName := "EPTF_HTTP_LocalTransport",
+ in EPTF_HTTP_messageProcess_FT pl_receiveFunction := null,
+ in EPTF_HTTP_eventReceive_FT pl_eventReceiveFunction := null,
+ in EPTF_HTTP_socketErrorReceive_FT pl_socketErrorReceiveFunction := null,
+ in EPTF_CommPort_IPL4_InterfaceInformationList pl_interfaceInformationList := {},
+ in EPTF_HTTP_listenSocketEvent_FT pl_listenSocketEvent := null,
+ in EPTF_HTTP_listenSocketError_FT pl_listenSocketError := null)
+ runs on EPTF_HTTP_LocalTransport_CT
+ return integer
+ {
+ if (v_EPTF_HTTP_LocalTransport_initialized)
+ {
+ log(%definitionId & // intentionally simple log
+ ": The HTTP LocalTransport component already initialized!");
+
+ return -1;
+ }
+
+ v_EPTF_HTTP_LocalTransport_selfName := pl_selfName
+
+ f_EPTF_Logging_init_CT(pl_selfName);
+
+ v_EPTF_HTTP_Transport_loggingMaskId :=
+ f_EPTF_Logging_registerComponentMasks(
+ tsp_EPTF_HTTP_Transport_loggingComponentMask,
+ c_EPTF_HTTP_Transport_loggingEventClasses,
+ EPTF_Logging_CLL);
+
+ if (tsp_EPTF_HTTP_Transport_loggingEnable)
+ {
+ f_EPTF_Logging_enableLocalMask(
+ v_EPTF_HTTP_Transport_loggingMaskId,
+ c_EPTF_HTTP_Transport_loggingClassIdx_Debug);
+ }
+ else
+ {
+ f_EPTF_Logging_disableLocalMask(
+ v_EPTF_HTTP_Transport_loggingMaskId,
+ c_EPTF_HTTP_Transport_loggingClassIdx_Debug);
+ }
+
+ if (tsp_EPTF_HTTP_Transport_bufferLogEnable)
+ {
+ f_EPTF_Logging_enableLocalMask(
+ v_EPTF_HTTP_Transport_loggingMaskId,
+ c_EPTF_HTTP_Transport_loggingClassIdx_BufferDebug);
+ }else
+ {
+ f_EPTF_Logging_disableLocalMask(
+ v_EPTF_HTTP_Transport_loggingMaskId,
+ c_EPTF_HTTP_Transport_loggingClassIdx_BufferDebug);
+ }
+
+ vf_getGroupAndPort := refers(f_EPTF_HTTP_LocalTransport_getGroupAndPort_default);
+ vf_getGroup := refers(f_EPTF_HTTP_LocalTransport_getGroup_default);
+
+ vf_EPTF_HTTP_LocalTransport_receive := pl_receiveFunction;
+ vf_EPTF_HTTP_LocalTransport_eventReceive := pl_eventReceiveFunction;
+ vf_EPTF_HTTP_LocalTransport_socketErrorReceive := pl_socketErrorReceiveFunction;
+
+ vf_EPTF_HTTP_LocalTransport_listenSocketEvent := pl_listenSocketEvent;
+ vf_EPTF_HTTP_LocalTransport_listenSocketError := pl_listenSocketError;
+
+ f_EPTF_CommPort_IPL4_init(pl_interfaceInformationList,true);
+
+ f_EPTF_CommPort_IPL4_setReceive(
+ { asp_RecvFrom := ? },refers(f_EPTF_HTTP_LocalTransport_receiveMessage), pl_selfName);
+
+ f_EPTF_CommPort_IPL4_setReceive(
+ { asp_Event := ? },refers(f_EPTF_HTTP_LocalTransport_receiveEvent), pl_selfName);
+
+ f_EPTF_CommPort_IPL4_activateDefaultBufferingHandler(pl_selfName);
+
+ f_EPTF_CommPort_IPL4_setMsgLen(-1,
+ refers(f_EPTF_HTTP_LocalTransport_getMessageLength), {});
+
+ f_EPTF_FBQ_initFreeBusyQueue(v_EPTF_HTTP_Transport_groupQueue);
+
+ f_EPTF_int2int_HashMap_Init();
+ f_EPTF_str2int_HashMap_Init();
+
+ v_EPTF_HTTP_Transport_groupName2Idx_HM :=
+ f_EPTF_str2int_HashMap_New(c_EPTF_HTTP_LocalTransport_HashMap_groupName2Idx);
+ v_EPTF_HTTP_Transport_functions2Idx_HM :=
+ f_EPTF_str2int_HashMap_New(c_EPTF_HTTP_LocalTransport_HashMap_fnGrp2Idx);
+ v_EPTF_HTTP_Transport_localHostHashMap :=
+ f_EPTF_str2int_HashMap_New(c_EPTF_HTTP_LocalTransport_HashMap_localHost);
+ v_EPTF_HTTP_Transport_remoteHostHashMap :=
+ f_EPTF_str2int_HashMap_New(c_EPTF_HTTP_LocalTransport_HashMap_remoteHost);
+ v_EPTF_HTTP_Transport_connId2GroupId_HM :=
+ f_EPTF_int2int_HashMap_New(c_EPTF_HTTP_LocalTransport_HashMap_connId2PortGrp);
+ v_EPTF_HTTP_Transport_connId2PortId_HM :=
+ f_EPTF_int2int_HashMap_New(c_EPTF_HTTP_LocalTransport_HashMap_connId2Port);
+ v_EPTF_HTTP_Transport_sessId2PortId_HM :=
+ f_EPTF_int2int_HashMap_New(c_EPTF_HTTP_LocalTransport_HashMap_sessId2Port);
+ v_EPTF_HTTP_Transport_portId2Idx_HM :=
+ f_EPTF_int2int_HashMap_New(c_EPTF_HTTP_LocalTransport_HashMap_portId2Idx);
+
+ f_EPTF_Base_init_CT(pl_selfName);
+ f_EPTF_Base_registerCleanup(refers(f_EPTF_HTTP_LocalTransport_cleanup_CT));
+
+ if (tsp_EPTF_HTTP_Transport_messageBufferEnable == true) {
+ f_EPTF_MessageBufferManager_init_CT();
+ }
+
+ v_EPTF_HTTP_LocalTransport_initialized := true;
+
+ f_EPTF_HTTP_Transport_debug(%definitionId & "The initialization of the " &
+ "HTTP LocalTransport component is ready");
+
+ return 1;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_LocalTransport_cleanup_CT
+ //
+ // Purpose:
+ // Function to clean The LocalTransport component
+ //
+ // Parameters:
+ // -
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_LocalTransport_cleanup_CT()
+ runs on EPTF_HTTP_LocalTransport_CT
+ {
+ if (not v_EPTF_HTTP_LocalTransport_initialized) {
+ return;
+ }
+ v_EPTF_HTTP_LocalTransport_initialized:= false;
+
+ f_EPTF_HTTP_Transport_debug("### " & %definitionId & "()");
+
+ vf_EPTF_HTTP_LocalTransport_receive := null;
+ vf_EPTF_HTTP_LocalTransport_eventReceive := null;
+ vf_EPTF_HTTP_LocalTransport_socketErrorReceive := null
+
+ v_EPTF_HTTP_LocalTransport_loggingEnabled := -1;
+
+ // delate all ports and port groups
+ var integer vl_group;
+ while (f_EPTF_FBQ_getBusyHeadIdx(vl_group, v_EPTF_HTTP_Transport_groupQueue)) {
+ f_EPTF_HTTP_LocalTransport_deletePortGroup(vl_group);
+ }
+
+ f_EPTF_str2int_HashMap_Delete(c_EPTF_HTTP_LocalTransport_HashMap_groupName2Idx);
+ f_EPTF_str2int_HashMap_Delete(c_EPTF_HTTP_LocalTransport_HashMap_fnGrp2Idx);
+ f_EPTF_str2int_HashMap_Delete(c_EPTF_HTTP_LocalTransport_HashMap_localHost);
+ f_EPTF_str2int_HashMap_Delete(c_EPTF_HTTP_LocalTransport_HashMap_remoteHost);
+ f_EPTF_int2int_HashMap_Delete(c_EPTF_HTTP_LocalTransport_HashMap_connId2PortGrp);
+ f_EPTF_int2int_HashMap_Delete(c_EPTF_HTTP_LocalTransport_HashMap_connId2Port);
+ f_EPTF_int2int_HashMap_Delete(c_EPTF_HTTP_LocalTransport_HashMap_sessId2Port);
+ f_EPTF_int2int_HashMap_Delete(c_EPTF_HTTP_LocalTransport_HashMap_portId2Idx);
+
+ f_EPTF_FBQ_initFreeBusyQueue(v_EPTF_HTTP_Transport_groupQueue);
+
+ f_EPTF_HTTP_Transport_debug(%definitionId &
+ ": The cleanup of the LocalTransport component is ready");
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_LocalTransport_newPortGroup
+ //
+ // Purpose:
+ // Function to create a new port group
+ //
+ // Parameters:
+ // - pl_group - *in* <EPTF_HTTP_Transport_GroupMode> - group data
+ // - pl_portmode - *in* *boolean* - port mode / group mode selector
+ //
+ // Return Value:
+ // *integer* - index of the new port group if creation successful,
+ // otherwise -1
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // Function creats a new port group based on the given port group data.
+ // This includes creation of port database objects within the group
+ // and optionally open ports (based on port group data)
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_LocalTransport_newPortGroup(
+ in EPTF_HTTP_Transport_GroupMode pl_group,
+ in boolean pl_portmode := false)
+ runs on EPTF_HTTP_LocalTransport_CT return integer
+ {
+ f_EPTF_HTTP_Transport_debug("### " & %definitionId & "()");
+
+ var charstring vl_groupName := "";
+ var integer i, vl_dummy, vl_fGIdx, vl_newGrpIdx;
+
+ vl_newGrpIdx := f_EPTF_FBQ_getOrCreateFreeSlot(v_EPTF_HTTP_Transport_groupQueue);
+
+ f_EPTF_HTTP_Transport_debug(%definitionId &
+ ": New group index: " & int2str(vl_newGrpIdx));
+
+ // if group name not presented a unique one is generated
+ if (not ispresent(pl_group.name) or pl_group.name == "") {
+ vl_groupName := f_EPTF_HTTP_LocalTransport_createUniqueGroupName(
+ v_EPTF_HTTP_LocalTransport_selfName);
+ }
+ // if group name presented, then it must be unique
+ else {
+ vl_groupName := pl_group.name;
+
+ if (f_EPTF_str2int_HashMap_Find(v_EPTF_HTTP_Transport_groupName2Idx_HM,
+ vl_groupName, vl_dummy))
+ {
+ f_EPTF_HTTP_Transport_warning(%definitionId &
+ ": Group name: " & vl_groupName & " is not unique!");
+ return -1;
+ }
+ }
+
+ f_EPTF_FBQ_moveFromFreeToBusyTail(vl_newGrpIdx, v_EPTF_HTTP_Transport_groupQueue); // only if name unique
+
+ // insert new group index into group name - group index hashmap
+ f_EPTF_str2int_HashMap_Insert(v_EPTF_HTTP_Transport_groupName2Idx_HM,
+ vl_groupName, vl_newGrpIdx);
+
+
+ // set group database
+ v_EPTF_HTTP_Transport_portDB[vl_newGrpIdx] := c_HTTP_Transport_initPortGroup;
+
+ v_EPTF_HTTP_Transport_portDB[vl_newGrpIdx].name := vl_groupName;
+ v_EPTF_HTTP_Transport_portDB[vl_newGrpIdx].localportStep := pl_group.localportStep;
+ v_EPTF_HTTP_Transport_portDB[vl_newGrpIdx].remoteportStep := pl_group.remoteportStep;
+ v_EPTF_HTTP_Transport_portDB[vl_newGrpIdx].baseLocalHostInformation := pl_group.localHostInformation;
+ v_EPTF_HTTP_Transport_portDB[vl_newGrpIdx].baseRemoteHostInformation := pl_group.remoteHostInformation;
+
+ v_EPTF_HTTP_Transport_portDB[vl_newGrpIdx].useSSL := pl_group.useSSL; // FIXME
+ v_EPTF_HTTP_Transport_portDB[vl_newGrpIdx].instantConnOpen := pl_group.instantConnOpen;
+ v_EPTF_HTTP_Transport_portDB[vl_newGrpIdx].instantConnClose := pl_group.instantConnClose;
+
+ // overdefine functionality if user functions are presented
+ if (ispresent(pl_group.userFunctions))
+ {
+ vl_fGIdx := f_EPTF_HTTP_LocalTransport_registerGroupFunctions(
+ vl_newGrpIdx, pl_portmode, pl_group.userFunctions);
+ } else
+ {
+ vl_fGIdx := f_EPTF_HTTP_LocalTransport_registerGroupFunctions(
+ vl_newGrpIdx, pl_portmode, c_EPTF_HTTP_initUserFunctions);
+ }
+ v_EPTF_HTTP_Transport_portDB[vl_newGrpIdx].defaultFIdx := vl_fGIdx;
+
+ // init queues
+ f_EPTF_FBQ_initFreeBusyQueue(v_EPTF_HTTP_Transport_portDB[vl_newGrpIdx].portQueue);
+ f_EPTF_FBQ_initFreeBusyQueue(v_EPTF_HTTP_Transport_portDB[vl_newGrpIdx].portStateQueue);
+
+ // add group (and open ports if necessary)
+ var boolean vl_success := true;
+ for (i := 0; i < pl_group.numberOfPorts; i:= i + 1) {
+ if (not v_EPTF_HTTP_Transport_functionDB[vl_fGIdx].addPort.apply(vl_newGrpIdx)) {
+ vl_success := false;
+ i := pl_group.numberOfPorts;
+ }
+ }
+
+ // evaluate result
+ if (vl_success)
+ {
+ f_EPTF_HTTP_Transport_debug(%definitionId & ": Group added successfully: " &
+ int2str(vl_newGrpIdx) & " - " & v_EPTF_HTTP_Transport_portDB[vl_newGrpIdx].name);
+
+ return vl_newGrpIdx;
+ }
+ else
+ {
+ f_EPTF_HTTP_Transport_debug(%definitionId & ": Group addition unsuccessful: " &
+ int2str(vl_newGrpIdx) & " - " & v_EPTF_HTTP_Transport_portDB[vl_newGrpIdx].name);
+
+ f_EPTF_HTTP_LocalTransport_deletePortGroup(vl_newGrpIdx);
+
+ return -1;
+ }
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_LocalTransport_deletePortGroup
+ //
+ // Purpose:
+ // Function to delete an existing port group
+ //
+ // Parameters:
+ // - pl_group - *in* <EPTF_HTTP_Transport_GroupMode> - group index
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // Function deletes a port group based on the given port group index.
+ // This includes closure and deletion of ports within the port group.
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_LocalTransport_deletePortGroup(
+ in integer pl_group)
+ runs on EPTF_HTTP_LocalTransport_CT
+ {
+ f_EPTF_HTTP_Transport_debug("### " & %definitionId & "()");
+
+ if (not f_EPTF_HTTP_LocalTransport_checkGroup(pl_group)) { return; };
+
+ var integer vl_fGrpIdx := v_EPTF_HTTP_Transport_portDB[pl_group].defaultFIdx;
+
+ // remove prots
+ while (v_EPTF_HTTP_Transport_functionDB[vl_fGrpIdx].removePort.apply(pl_group)) { };
+
+ for (var integer i := 0; i < sizeof(v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase); i := i + 1)
+ {
+ if (omit != v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[i].messageBuffer)
+ {
+ f_EPTF_HTTP_MsgBuffer_erase(v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[i].messageBuffer, i);
+ }
+
+ v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[i].messageBuffer := omit;
+ }
+
+ // remove name
+ f_EPTF_str2int_HashMap_Erase(v_EPTF_HTTP_Transport_groupName2Idx_HM,
+ v_EPTF_HTTP_Transport_portDB[pl_group].name);
+
+ // unset database
+ v_EPTF_HTTP_Transport_portDB[pl_group] := c_HTTP_Transport_initPortGroup;
+
+ // free group in FBQ
+ f_EPTF_FBQ_moveFromBusyToFreeTail(pl_group, v_EPTF_HTTP_Transport_groupQueue);
+
+ f_EPTF_HTTP_Transport_debug(%definitionId & ": Group deleted successfully: " &
+ int2str(pl_group));
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_LocalTransport_newPort
+ //
+ // Purpose:
+ // Function to create a new port group object
+ //
+ // Parameters:
+ // - pl_portInfo - *in* <EPTF_HTTP_Transport_PortMode> - port data
+ //
+ // Return Value:
+ // *integer* - index of the new port group
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // Function creats a new port based on the given port data.
+ // It optionally opens the port (based on port group data)
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_LocalTransport_newPort(
+ in EPTF_HTTP_Transport_PortMode pl_portInfo)
+ runs on EPTF_HTTP_LocalTransport_CT return integer
+ {
+ f_EPTF_HTTP_Transport_debug("### " & %definitionId & "()");
+
+ var integer vl_group;
+ var EPTF_HTTP_Transport_GroupMode vl_groupInfo;
+
+ // convert port to group
+ vl_groupInfo := {
+ name := pl_portInfo.name,
+ localHostInformation := pl_portInfo.localHostInformation,
+ remoteHostInformation := pl_portInfo.remoteHostInformation,
+ numberOfPorts := 1,
+ localportStep := 0,
+ remoteportStep := 0,
+ instantConnOpen := pl_portInfo.instantConnOpen,
+ instantConnClose := pl_portInfo.instantConnClose,
+ useSSL := pl_portInfo.useSSL,
+ userFunctions := pl_portInfo.userFunctions
+ };
+
+ vl_group := f_EPTF_HTTP_LocalTransport_newPortGroup(vl_groupInfo, true);
+
+ if (vl_group != -1)
+ {
+ var EPTF_HTTP_Transport_Function vl_funcs := v_EPTF_HTTP_Transport_functionDB[v_EPTF_HTTP_Transport_portDB[vl_group].defaultFIdx];
+
+ vl_funcs.addPort := refers(f_EPTF_HTTP_LocalTransport_addRemovePortToGroup_dummy);
+ //vl_funcs.addPort := refers(f_EPTF_HTTP_LocalTransport_addRemovePortToGroup_dummy);
+
+ // function database index must be updated!!
+ var integer vl_index;
+
+ // creates a hash map key from the function group
+ var charstring vl_key := log2str(vl_funcs)
+
+ // if function group is already existing, then return id
+ if (f_EPTF_str2int_HashMap_Find(v_EPTF_HTTP_Transport_functions2Idx_HM,
+ vl_key, vl_index))
+ {
+ v_EPTF_HTTP_Transport_portDB[vl_group].defaultFIdx := vl_index;
+ }
+ else {
+ // if function group was not existing, then add new element
+ vl_index := sizeof(v_EPTF_HTTP_Transport_functionDB);
+
+ f_EPTF_HTTP_Transport_debug(%definitionId & ": New database index: " & int2str(vl_index) &
+ " for functions: " & vl_key);
+
+ v_EPTF_HTTP_Transport_portDB[vl_group].defaultFIdx := vl_index;
+ v_EPTF_HTTP_Transport_functionDB[vl_index] := vl_funcs;
+
+ f_EPTF_str2int_HashMap_Insert(v_EPTF_HTTP_Transport_functions2Idx_HM,
+ vl_key, vl_index);
+
+ f_EPTF_HTTP_Transport_debug(%definitionId & ": Functions are registered to group (" &
+ int2str(vl_group) & " - " & v_EPTF_HTTP_Transport_portDB[vl_group].name & ": " & vl_key &
+ " at position " & int2str(vl_index) & " in function database!");
+ }
+
+ f_EPTF_HTTP_Transport_debug(%definitionId & ": Port created (" &
+ int2str(vl_group) & ") - " & v_EPTF_HTTP_Transport_portDB[vl_group].name);
+
+ }
+ else {
+ f_EPTF_HTTP_Transport_debug(%definitionId & ": Port not created!");
+ }
+
+ return vl_group;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_LocalTransport_newServerPort
+ //
+ // Purpose:
+ // Function to create a new server port group
+ //
+ // Parameters:
+ // - pl_portInfo - *in* <EPTF_HTTP_Transport_ServerPortMode> - port mode / group mode selector
+ //
+ // Return Value:
+ // *integer* - index of the new port group if creation successful,
+ // otherwise -1
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // Function creats a new port group based on the given port group data.
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_LocalTransport_newServerPort(
+ in EPTF_HTTP_Transport_ServerPortMode pl_portInfo)
+ runs on EPTF_HTTP_LocalTransport_CT
+ return integer
+ {
+ f_EPTF_HTTP_Transport_debug("### " & %definitionId & "()");
+
+ var integer vl_newGrpIdx := -1;
+
+ v_boolNoWarning := f_EPTF_HTTP_LocalTransport_createServerPort(pl_portInfo, vl_newGrpIdx)
+
+ return vl_newGrpIdx;
+ }
+
+ function f_EPTF_HTTP_LocalTransport_createServerPort(
+ in EPTF_HTTP_Transport_ServerPortMode pl_portInfo,
+ inout integer pl_groupId)
+ runs on EPTF_HTTP_LocalTransport_CT
+ return boolean
+ {
+ f_EPTF_HTTP_Transport_debug("### " & %definitionId & "()");
+
+ var integer vl_fGIdx, vl_newGrpIdx;
+
+ if (f_EPTF_str2int_HashMap_Find(v_EPTF_HTTP_Transport_groupName2Idx_HM,
+ pl_portInfo.name, pl_groupId))
+ {
+ f_EPTF_HTTP_Transport_debug(%definitionId &
+ ": Server group already exists.");
+ return false;
+ }
+
+ vl_newGrpIdx := f_EPTF_FBQ_getOrCreateFreeSlot(v_EPTF_HTTP_Transport_groupQueue);
+
+ f_EPTF_HTTP_Transport_debug(%definitionId &
+ ": New group index: " & int2str(vl_newGrpIdx));
+
+ f_EPTF_FBQ_moveFromFreeToBusyTail(vl_newGrpIdx, v_EPTF_HTTP_Transport_groupQueue);
+
+ // insert new group index into group name - group index hashmap
+ f_EPTF_str2int_HashMap_Insert(v_EPTF_HTTP_Transport_groupName2Idx_HM,
+ pl_portInfo.name, vl_newGrpIdx);
+
+
+ // set group database
+ v_EPTF_HTTP_Transport_portDB[vl_newGrpIdx] := c_HTTP_Transport_initPortGroup;
+ f_EPTF_FBQ_initFreeBusyQueue(v_EPTF_HTTP_Transport_portDB[vl_newGrpIdx].portQueue);
+ f_EPTF_FBQ_initFreeBusyQueue(v_EPTF_HTTP_Transport_portDB[vl_newGrpIdx].portStateQueue);
+
+ v_EPTF_HTTP_Transport_portDB[vl_newGrpIdx].name := pl_portInfo.name;
+ v_EPTF_HTTP_Transport_portDB[vl_newGrpIdx].baseLocalHostInformation := pl_portInfo.localHostInformation;
+
+ v_EPTF_HTTP_Transport_portDB[vl_newGrpIdx].instantConnClose := pl_portInfo.instantConnClose;
+
+ v_EPTF_HTTP_Transport_portDB[vl_newGrpIdx].buffer := pl_portInfo.buffer;
+
+ if(ispresent(pl_portInfo.useSSL) and pl_portInfo.useSSL) {
+ v_EPTF_HTTP_Transport_portDB[vl_newGrpIdx].useSSL := true;
+ }
+ else {
+ v_EPTF_HTTP_Transport_portDB[vl_newGrpIdx].useSSL := false;
+ }
+
+ // overdefine functionality if user functions are presented
+ if (ispresent(pl_portInfo.userFunctions))
+ {
+ vl_fGIdx := f_EPTF_HTTP_LocalTransport_registerServerGroupFunctions(
+ vl_newGrpIdx, pl_portInfo.userFunctions);
+ } else
+ {
+ vl_fGIdx := f_EPTF_HTTP_LocalTransport_registerServerGroupFunctions(
+ vl_newGrpIdx, c_EPTF_HTTP_initServerUserFunctions);
+ }
+ v_EPTF_HTTP_Transport_portDB[vl_newGrpIdx].defaultFIdx := vl_fGIdx;
+
+ f_EPTF_HTTP_Transport_debug(%definitionId & ": Group added successfully: " &
+ int2str(vl_newGrpIdx) & " - " & v_EPTF_HTTP_Transport_portDB[vl_newGrpIdx].name);
+
+ pl_groupId := vl_newGrpIdx;
+ return true;
+ }
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_LocalTransport_deletePort
+ //
+ // Purpose:
+ // Function to delete an existing port
+ //
+ // Parameters:
+ // - pl_group - *in* <EPTF_HTTP_Transport_GroupMode> - port index
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // Function deletes a port group based on the given port group index.
+ // This includes closure and deletion of ports within the port group.
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_LocalTransport_deletePort(
+ in integer pl_group)
+ runs on EPTF_HTTP_LocalTransport_CT
+ {
+ f_EPTF_HTTP_Transport_debug("### " & %definitionId & "()");
+
+ if (not f_EPTF_HTTP_LocalTransport_checkGroup(pl_group)) { return; };
+
+ f_EPTF_HTTP_LocalTransport_deletePortGroup(pl_group);
+
+ f_EPTF_HTTP_Transport_debug(%definitionId & ": Port deleted (" &
+ int2str(pl_group) & ") - " & v_EPTF_HTTP_Transport_portDB[pl_group].name);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_LocalTransport_addPortToGroup_default
+ //
+ // Purpose:
+ // Function to add a single port to an existing port group
+ //
+ // Parameters:
+ // - pl_group - *in* <EPTF_HTTP_Transport_GroupMode> - group index
+ //
+ // Return Value:
+ // *boolean* - result of the operation
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // The new port added to the port group will be created according to
+ // port group data. Set local and remote IP addresses won't be changed,
+ // but local and remote ports will be calculated according to:
+ // (<number of ports in port group> + 1) * (<local/remote port step>).
+ //
+ // Addition of new port optionally opens connection on port group data
+ // to which the port is added (if instant connection open is enabled,
+ // then ports won't be opened, otherwise they will be).
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_LocalTransport_addPortToGroup_default(
+ in integer pl_group)
+ runs on EPTF_HTTP_LocalTransport_CT return boolean
+ {
+ f_EPTF_HTTP_Transport_debug("### " & %definitionId & "()");
+
+ if (not f_EPTF_HTTP_LocalTransport_checkGroup(pl_group)) { return false; };
+
+ var EPTF_HTTP_HostInformation vl_lhostInformation, vl_rhostInformation;
+ var integer vl_lhIdx, vl_rhIdx, vl_fbqIdx;
+
+ f_EPTF_FBQ_createFreeSlots(1, v_EPTF_HTTP_Transport_portDB[pl_group].portStateQueue);
+ vl_fbqIdx := f_EPTF_FBQ_getOrCreateFreeSlot(v_EPTF_HTTP_Transport_portDB[pl_group].portQueue);
+
+ //vl_fbqStateIdx := f_EPTF_FBQ_getOrCreateFreeSlot(v_EPTF_HTTP_Transport_portDB[pl_group].portStateQueue);
+ //f_EPTF_Base_assert(%definitionId & "FBQ index mismatch", vl_fbqIdx == vl_fbqStateIdx);
+ //f_EPTF_FBQ_setQueueDidx(vl_fbqStateIdx, {vl_fbqIdx}, v_EPTF_HTTP_Transport_portDB[pl_portGrpIdx].portStateQueue);
+
+ // calculate next port data according (local)
+ vl_lhostInformation := v_EPTF_HTTP_Transport_portDB[pl_group].baseLocalHostInformation;
+ vl_lhostInformation.hostPort := vl_lhostInformation.hostPort +
+ v_EPTF_HTTP_Transport_portDB[pl_group].localportStep * v_EPTF_HTTP_Transport_portDB[pl_group].numberOfPorts;
+ vl_lhIdx := f_EPTF_HTTP_LocalTransport_addLocalHostInformation(vl_lhostInformation);
+
+ // calculate next port data according (remote)
+ vl_rhostInformation := v_EPTF_HTTP_Transport_portDB[pl_group].baseRemoteHostInformation;
+ vl_rhostInformation.hostPort := vl_rhostInformation.hostPort +
+ v_EPTF_HTTP_Transport_portDB[pl_group].remoteportStep * v_EPTF_HTTP_Transport_portDB[pl_group].numberOfPorts;
+ vl_rhIdx := f_EPTF_HTTP_LocalTransport_addRemoteHostInformation(vl_rhostInformation);
+
+ // set port data to port info database
+ v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[vl_fbqIdx] := c_EPTF_HTTP_LocalTransport_initPortInfo;
+
+ v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[vl_fbqIdx].groupIndex := pl_group; // FIXME check
+ v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[vl_fbqIdx].portIndex := vl_fbqIdx; // FIXME check
+ v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[vl_fbqIdx].localhostInfoIdx := vl_lhIdx;
+ v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[vl_fbqIdx].remotehostInfoIdx := vl_rhIdx;
+
+ f_EPTF_HTTP_Transport_debug(%definitionId & ": New port added to " &
+ f_EPTF_HTTP_LocalTransport_createGroupPortInfoString(pl_group, vl_fbqIdx));
+
+ // InstantConnOpen == true means that a send request on the group will
+ // automatically trigger a port open -> this case no ports are opened
+ // initially, otherwise ports are opened previosly
+ if (not v_EPTF_HTTP_Transport_portDB[pl_group].instantConnOpen)
+ {
+ if (not f_EPTF_HTTP_LocalTransport_openPortInGroup(pl_group, vl_fbqIdx)) {
+ return false;
+ }
+ }
+
+ // move to busy (only if everything was previously successful)
+ f_EPTF_FBQ_moveFromFreeToBusyTail(vl_fbqIdx,
+ v_EPTF_HTTP_Transport_portDB[pl_group].portQueue);
+
+ // administrate new port opening
+ v_EPTF_HTTP_Transport_portDB[pl_group].numberOfPorts := v_EPTF_HTTP_Transport_portDB[pl_group].numberOfPorts + 1;
+
+ return true;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_LocalTransport_removePortFromGroup_default
+ //
+ // Purpose:
+ // Function to remove a single port from an existing port group
+ //
+ // Parameters:
+ // - pl_group - *in* <EPTF_HTTP_Transport_GroupMode> - group index
+ //
+ // Return Value:
+ // *boolean* - result of the operation
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // The port which is choosen to be removed is the first one added to
+ // the port group from which the port is removed.
+ //
+ // If the port has an open connection, then the connection will be closed.
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_LocalTransport_removePortFromGroup_default(
+ in integer pl_group)
+ runs on EPTF_HTTP_LocalTransport_CT return boolean
+ {
+ f_EPTF_HTTP_Transport_debug("### " & %definitionId & "()");
+
+ if (not f_EPTF_HTTP_LocalTransport_checkGroup(pl_group)) { return false; };
+
+ var EPTF_HTTP_Transport_ConnectionState vl_state;
+ var integer vl_connId, vl_busyHeadIdx := -1;
+
+ // the first removed port is the oldest one (busy head)
+ if (f_EPTF_FBQ_getBusyHeadIdx(vl_busyHeadIdx, v_EPTF_HTTP_Transport_portDB[pl_group].portQueue))
+ {
+ vl_connId := v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[vl_busyHeadIdx].connectionId;
+ vl_state := v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[vl_busyHeadIdx].state;
+
+ // when port removed, it must be closed
+ // it can be closed if connId != -1 and state is OPENING/OPENED/HALFCLOSED
+ f_EPTF_Base_assert(%definitionId & ": Invalid state of port in " &
+ f_EPTF_HTTP_LocalTransport_createGroupPortInfoString(pl_group, vl_busyHeadIdx),
+ vl_connId != -1 or vl_state == IDLE);
+
+ f_EPTF_HTTP_Transport_debug(%definitionId & ": Removing port at " &
+ f_EPTF_HTTP_LocalTransport_createGroupPortInfoString(pl_group, vl_busyHeadIdx));
+
+ if (vl_connId != -1)
+ {
+ f_EPTF_HTTP_Transport_debug(%definitionId & ": Closing connection on port " &
+ "to be removed!");
+
+ // close port
+ f_EPTF_HTTP_Transport_closePortInGroup(pl_group, vl_busyHeadIdx);
+ }
+
+ // deleted port will be allocated again (if necessary) at last time (free tail)
+ f_EPTF_FBQ_moveFromBusyToFreeTail(vl_busyHeadIdx,
+ v_EPTF_HTTP_Transport_portDB[pl_group].portQueue);
+
+ v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[vl_busyHeadIdx] := c_EPTF_HTTP_LocalTransport_initPortInfo;
+
+ v_EPTF_HTTP_Transport_portDB[pl_group].numberOfPorts := v_EPTF_HTTP_Transport_portDB[pl_group].numberOfPorts - 1;
+
+ return true;
+ }
+ //else
+ //{
+ // f_EPTF_HTTP_Transport_warning(%definitionId &
+ // ": No more ports to remove from group: " &
+ // int2str(pl_group) & " - " & v_EPTF_HTTP_Transport_portDB[pl_group].name);
+ //
+ return false;
+ //}
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_LocalTransport_removePortFromGroupServer_default
+ //
+ // Purpose:
+ // Function to remove a single port from an existing server port group
+ //
+ // Parameters:
+ // - pl_group - *in* <EPTF_HTTP_Transport_GroupMode> - group index
+ //
+ // Return Value:
+ // *boolean* - result of the operation
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // The port which is choosen to be removed is the first one added to
+ // the port group from which the port is removed.
+ //
+ // If the port has an open connection, then the connection will be closed.
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_LocalTransport_removePortFromGroupServer_default(
+ in integer pl_group)
+ runs on EPTF_HTTP_LocalTransport_CT
+ return boolean
+ {
+ f_EPTF_HTTP_Transport_debug("### " & %definitionId & "()");
+
+ if (not f_EPTF_HTTP_LocalTransport_checkGroup(pl_group)) { return false; };
+
+ var integer vl_busyHeadIdx := -1;
+
+ if (f_EPTF_FBQ_getBusyHeadIdx(vl_busyHeadIdx, v_EPTF_HTTP_Transport_portDB[pl_group].portQueue))
+ {
+ f_EPTF_HTTP_LocalTransport_removeServerPort(pl_group, vl_busyHeadIdx);
+ return true;
+ }
+
+ return false;
+ }
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_LocalTransport_addRemovePortToGroup_dummy
+ //
+ // Purpose:
+ // Dummy function to disable add/remove port
+ //
+ // Parameters:
+ // - pl_group - *in* <EPTF_HTTP_Transport_GroupMode> - group index
+ //
+ // Return Value:
+ // *boolean* - result of the operation
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // Application of this function can disable addition or deletion of
+ // new ports from port group
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_LocalTransport_addRemovePortToGroup_dummy(
+ in integer pl_group)
+ runs on EPTF_HTTP_LocalTransport_CT return boolean
+ {
+ f_EPTF_HTTP_Transport_debug("### " & %definitionId & "()");
+
+ f_EPTF_HTTP_Transport_warning(%definitionId &
+ ": Cannot add/remove ports to port groups created in Port mode");
+
+ return true;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_LocalTransport_selectPortInGroup_defaultGroup
+ //
+ // Purpose:
+ // Function to select a port in the group on which user intends to perform
+ // an send operation
+ //
+ // Parameters:
+ // - pl_group - *in* *integer* - group index
+ //
+ // Return Value:
+ // *integer* - index of the selected port within the port group
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // State of ports within a port group are maintained. If someone sends
+ // an a port, its state is busy for further send. This function selects
+ // a port within the port group that is not busy for sending.
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_LocalTransport_selectPortInGroup_defaultGroup(
+ in integer pl_group)
+ runs on EPTF_HTTP_LocalTransport_CT return integer
+ {
+ f_EPTF_HTTP_Transport_debug("### " & %definitionId & "()");
+
+ if (not f_EPTF_HTTP_LocalTransport_checkGroup(pl_group)) { return -1; };
+
+ var integer vl_nextFreePortIdx;
+
+ if (f_EPTF_FBQ_getFreeTailIdx(vl_nextFreePortIdx, v_EPTF_HTTP_Transport_portDB[pl_group].portStateQueue))
+ {
+ f_EPTF_HTTP_Transport_debug(%definitionId & ": Selected port is " &
+ int2str(vl_nextFreePortIdx) & " for group: " & int2str(pl_group));
+
+ return vl_nextFreePortIdx;
+ }
+
+ f_EPTF_HTTP_Transport_warning(%definitionId & ": Port selection unsuccessful"
+ & " for group: " & int2str(pl_group));
+
+ return -1;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_LocalTransport_selectPortInGroup_defaultPort
+ //
+ // Purpose:
+ // Function to select a port in the group on which user intends to perform
+ // an send operation.
+ //
+ // Parameters:
+ // - pl_group - *in* *integer* - group index
+ //
+ // Return Value:
+ // *integer* - index of the selected port within the port group
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // The function is the default function for port operation mode and
+ // therefore it will always provide port 0 as in port operation mode
+ // only one port is located within the port group.
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_LocalTransport_selectPortInGroup_defaultPort(
+ in integer pl_group)
+ runs on EPTF_HTTP_LocalTransport_CT return integer
+ {
+ f_EPTF_HTTP_Transport_debug("### " & %definitionId & "()");
+
+ if (not f_EPTF_FBQ_itemIsBusy(pl_group, v_EPTF_HTTP_Transport_groupQueue)) {
+ f_EPTF_HTTP_Transport_warning(%definitionId & ": Group already deleted: " &
+ int2str(pl_group) & " - " & v_EPTF_HTTP_Transport_portDB[pl_group].name);
+ return -1;
+ }
+
+ if (f_EPTF_FBQ_itemIsBusy(0, v_EPTF_HTTP_Transport_portDB[pl_group].portStateQueue)) {
+ f_EPTF_HTTP_Transport_warning(%definitionId & ": Already sending " &
+ "group: " & int2str(pl_group) & " - " & v_EPTF_HTTP_Transport_portDB[pl_group].name);
+
+ return -1;
+ }
+
+ f_EPTF_HTTP_Transport_debug(%definitionId & ": Selected port is 0" &
+ " for group: " & int2str(pl_group));
+
+ return 0;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_LocalTransport_getGroupAndPort_defaultGroup
+ //
+ // Purpose:
+ // Function to acquire port and group index for a connection id
+ //
+ // Parameters:
+ // - pl_connId - *in* *integer* - connection id
+ // - pl_group - *in* *integer* - port group index
+ // - pl_port - *in* *integer* - port index within the group id
+ //
+ // Return Value:
+ // *boolean* - true if group and port index successfully retrieved
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // Default function for group operation mode
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_LocalTransport_getGroupAndPort_default(
+ in integer pl_connId,
+ inout integer pl_group,
+ inout integer pl_port)
+ runs on EPTF_HTTP_LocalTransport_CT return boolean
+ {
+ f_EPTF_HTTP_Transport_debug("### " & %definitionId & "()");
+
+ if (f_EPTF_int2int_HashMap_Find(v_EPTF_HTTP_Transport_connId2GroupId_HM,
+ pl_connId, pl_group))
+ {
+ if (f_EPTF_int2int_HashMap_Find(v_EPTF_HTTP_Transport_connId2PortId_HM,
+ pl_connId, pl_port))
+ {
+ f_EPTF_HTTP_Transport_debug(%definitionId & ": Connection id mapped " &
+ " to port: " & int2str(pl_port) & " and group: " & int2str(pl_group));
+
+ return true;
+ }
+ else {
+ f_EPTF_HTTP_Transport_warning(%definitionId & ": Connection id was " &
+ "not found in Connection id to port id hash map. Message dropped!");
+
+ pl_group := -1; pl_port := -1;
+ return false;
+ }
+ }
+ else {
+ f_EPTF_HTTP_Transport_warning(%definitionId & ": Connection id was " &
+ "not found in Connection id to group id hash map. Message dropped!");
+
+ pl_group := -1; pl_port := -1;
+ return false;
+ }
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_LocalTransport_getGroup_default
+ //
+ // Purpose:
+ // Function to acquire group index for a connection id
+ //
+ // Parameters:
+ // - pl_connId - *in* *integer* - connection id
+ // - pl_groupId - *inout* *integer* - port group index
+ //
+ // Return Value:
+ // *boolean* - true if group index is successfully retrieved
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_LocalTransport_getGroup_default(
+ in integer pl_connId,
+ inout integer pl_groupId)
+ runs on EPTF_HTTP_LocalTransport_CT return boolean
+ {
+ f_EPTF_HTTP_Transport_debug("### " & %definitionId & "()");
+
+ if (not f_EPTF_int2int_HashMap_Find(v_EPTF_HTTP_Transport_connId2GroupId_HM,
+ pl_connId, pl_groupId))
+ {
+ f_EPTF_HTTP_Transport_warning(%definitionId & ": Connection id "& int2str(pl_connId) &" was " &
+ "not found in Connection id to group id hash map. Message dropped!");
+
+ pl_groupId := -1
+ return false;
+ }
+
+ return true;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_LocalTransport_sendMessage_default_IC
+ //
+ // Purpose:
+ // Function to send message and open connection instantly
+ //
+ // Parameters:
+ // - pl_group - *in* *integer* - group index
+ // - pl_sessionId - *in* *integer* - unique session id of current send
+ // - pl_msg - *in* *octetstring* - encoded message to be sent
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // The function selects a port within the port group which it has
+ // been applied to, then tries to open the port's connection instantly. If
+ // both of these operations have finished successfully, finally sends
+ // the message.
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_LocalTransport_sendMessage_default_IC(
+ in integer pl_group,
+ in integer pl_sessionId,
+ in octetstring pl_msg)
+ runs on EPTF_HTTP_LocalTransport_CT
+ {
+ f_EPTF_HTTP_Transport_debug("### " & %definitionId & "()");
+
+ if (not f_EPTF_HTTP_LocalTransport_checkGroup(pl_group)) { return; };
+
+ var integer vl_port :=
+ v_EPTF_HTTP_Transport_functionDB[v_EPTF_HTTP_Transport_portDB[pl_group].defaultFIdx].selectPort.apply(pl_group);
+
+ if (vl_port == -1)
+ {
+ if (tsp_EPTF_HTTP_Transport_messageBufferEnable == false) {
+ f_EPTF_HTTP_Transport_warning(%definitionId & ": No more free ports available!");
+ }
+ else {
+ f_EPTF_MessageBufferManager_setMessageToBuffer(pl_msg, int2str(pl_sessionId), pl_group);
+ }
+ }
+
+ else
+ {
+
+ if (v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[vl_port].state != IDLE and v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[vl_port].state != OPENED)
+ {
+ f_EPTF_HTTP_Transport_warning(%definitionId & ": Connection is not in Idle state, state: " &
+ log2str(v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[vl_port].state));
+ }
+ else
+ {
+ if (f_EPTF_FBQ_itemIsBusy(vl_port, v_EPTF_HTTP_Transport_portDB[pl_group].portQueue)) {
+ var EPTF_HTTP_HostInformation vl_local, vl_remote;
+
+ vl_local := v_EPTF_HTTP_Transport_localHostInformationList[
+ v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[vl_port].localhostInfoIdx];
+ vl_remote := v_EPTF_HTTP_Transport_remoteHostInformationList[
+ v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[vl_port].remotehostInfoIdx];
+
+ v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[vl_port].sessionId := pl_sessionId;
+
+ if (v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[vl_port].state == OPENED or f_EPTF_HTTP_LocalTransport_openPortInGroup(pl_group, vl_port))
+ //if (v_EPTF_HTTP_Transport_functionDB[v_EPTF_HTTP_Transport_portDB[pl_group].defaultFIdx].openPort.apply(pl_group))
+ {
+ v_EPTF_HTTP_Transport_OutgoingMessage := { asp_Send := {
+ connId := v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[vl_port].connectionId,
+ proto := {tcp:= {}},
+ msg := pl_msg
+ } };
+
+ v_resultNoWarning := f_EPTF_CommPort_IPL4_send(
+ v_EPTF_HTTP_Transport_OutgoingMessage,
+ null, false, true, v_EPTF_HTTP_LocalTransport_selfName);
+
+ f_EPTF_HTTP_Transport_debug(%definitionId & ": Send result is " &
+ log2str(v_resultNoWarning));
+ if ((not ispresent(v_resultNoWarning.errorCode)) or
+ (v_resultNoWarning.errorCode == ERROR_TEMPORARILY_UNAVAILABLE) or
+ (v_resultNoWarning.errorCode == ERROR_AVAILABLE) )
+ {
+ if (ispresent(v_resultNoWarning.errorCode) and (v_resultNoWarning.errorCode != ERROR_TEMPORARILY_UNAVAILABLE)) {
+ f_EPTF_HTTP_Transport_warning(%definitionId &
+ ": f_EPTF_CommPort_IPL4_send error code: " &
+ log2str(v_resultNoWarning.errorCode));
+ }
+ // move to busy if sending on port
+ if (not f_EPTF_FBQ_itemIsBusy(vl_port, v_EPTF_HTTP_Transport_portDB[pl_group].portStateQueue)) {
+ f_EPTF_FBQ_moveFromFreeToBusyTail(vl_port,
+ v_EPTF_HTTP_Transport_portDB[pl_group].portStateQueue);
+ }
+
+ f_EPTF_int2int_HashMap_Insert(v_EPTF_HTTP_Transport_sessId2PortId_HM,
+ pl_sessionId,
+ vl_port);
+
+ f_EPTF_HTTP_Transport_debug(%definitionId & ": Message sent on " &
+ f_EPTF_HTTP_LocalTransport_createGroupPortInfoString(pl_group, vl_port) &
+ ": " & log2str(pl_msg));
+ }
+ else
+ {
+ f_EPTF_HTTP_Transport_warning(%definitionId &
+ ": Send message unsuccessful!" &
+ f_EPTF_HTTP_LocalTransport_createGroupPortInfoString(pl_group, vl_port));
+ v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[vl_port].sessionId := -1;
+
+ // socket error, calling callback
+ if(vf_EPTF_HTTP_LocalTransport_socketErrorReceive != null) {
+ vf_EPTF_HTTP_LocalTransport_socketErrorReceive.apply({
+ pl_group,
+ pl_sessionId,
+ v_resultNoWarning});
+ }
+
+ }
+ }
+ else {
+ f_EPTF_HTTP_Transport_warning(%definitionId &
+ ": Instant connection opening unsuccessful for port at " &
+ f_EPTF_HTTP_LocalTransport_createGroupPortInfoString(pl_group, vl_port));
+ }
+ }
+ else {
+ f_EPTF_HTTP_Transport_warning(%definitionId &
+ ": Sending on port which has already been removed!" &
+ int2str(pl_group) & " / " & int2str(vl_port));
+ }
+ }
+ }
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_LocalTransport_sendMessage_default_NIC
+ //
+ // Purpose:
+ // Function to send message and open connection instantly
+ //
+ // Parameters:
+ // - pl_group - *in* *integer* - group index
+ // - pl_sessionId - *in* *integer* - unique session id of current send
+ // - pl_msg - *in* *octetstring* - encoded message to be sent
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // The function selects a port within the port group which it has
+ // been applied to, then tries to send the message.
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_LocalTransport_sendMessage_default_NIC(
+ in integer pl_group,
+ in integer pl_sessionId,
+ in octetstring pl_msg)
+ runs on EPTF_HTTP_LocalTransport_CT
+ {
+ f_EPTF_HTTP_Transport_debug("### " & %definitionId & "()");
+
+ if (not f_EPTF_HTTP_LocalTransport_checkGroup(pl_group)) { return; };
+
+ var integer vl_port :=
+ v_EPTF_HTTP_Transport_functionDB[v_EPTF_HTTP_Transport_portDB[pl_group].defaultFIdx].selectPort.apply(pl_group);
+
+ if (vl_port == -1)
+ {
+ if (tsp_EPTF_HTTP_Transport_messageBufferEnable == false) {
+ f_EPTF_HTTP_Transport_warning(%definitionId & ": No more free ports available");
+ }
+ else {
+ f_EPTF_MessageBufferManager_setMessageToBuffer(pl_msg, int2str (pl_sessionId), pl_group);
+ }
+ }
+ else {
+ if (v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[vl_port].state != OPENED)
+ {
+ f_EPTF_HTTP_Transport_warning(%definitionId & ": Connection is not opened, state: " &
+ log2str(v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[vl_port].state));
+ }
+ else
+ {
+ v_EPTF_HTTP_Transport_OutgoingMessage := { asp_Send := {
+ connId := v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[vl_port].connectionId,
+ proto := {tcp:= {}},
+ msg := pl_msg
+ } };
+
+ v_resultNoWarning := f_EPTF_CommPort_IPL4_send(
+ v_EPTF_HTTP_Transport_OutgoingMessage,
+ null, false, true, v_EPTF_HTTP_LocalTransport_selfName);
+
+ f_EPTF_HTTP_Transport_debug(%definitionId & ": Send result is " &
+ log2str(v_resultNoWarning));
+
+ if (not ispresent(v_resultNoWarning.errorCode) or ((v_resultNoWarning.errorCode == ERROR_TEMPORARILY_UNAVAILABLE) or (v_resultNoWarning.errorCode == ERROR_AVAILABLE)))
+ {
+ v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[vl_port].sessionId := pl_sessionId
+
+ // move to busy if sending on port
+ if (not f_EPTF_FBQ_itemIsBusy(vl_port, v_EPTF_HTTP_Transport_portDB[pl_group].portStateQueue)) {
+ f_EPTF_FBQ_moveFromFreeToBusyTail(vl_port,
+ v_EPTF_HTTP_Transport_portDB[pl_group].portStateQueue);
+ }
+
+ f_EPTF_int2int_HashMap_Insert(v_EPTF_HTTP_Transport_sessId2PortId_HM,
+ pl_sessionId,
+ vl_port);
+
+ f_EPTF_HTTP_Transport_debug(%definitionId & ": Message sent on " &
+ f_EPTF_HTTP_LocalTransport_createGroupPortInfoString(pl_group, vl_port) &
+ ": " & log2str(pl_msg));
+ }
+ else {
+ f_EPTF_HTTP_Transport_debug(%definitionId &
+ ": Send message unsuccessful!" &
+ f_EPTF_HTTP_LocalTransport_createGroupPortInfoString(pl_group, vl_port));
+
+ // socket error, calling callback
+ if(vf_EPTF_HTTP_LocalTransport_socketErrorReceive != null) {
+ vf_EPTF_HTTP_LocalTransport_socketErrorReceive.apply({
+ pl_group,
+ pl_sessionId,
+ v_resultNoWarning});
+ }
+ }
+ }
+ }
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_LocalTransport_sendResponse_default_IC
+ //
+ // Purpose:
+ // Function to send a response and close connection instantly
+ //
+ // Parameters:
+ // - pl_group - *in* *integer* - group index
+ // - pl_portId - *in* *integer* - unique port id to send the request
+ // - pl_msg - *in* *octetstring* - encoded message to be sent
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_LocalTransport_sendResponse_default_IC(
+ in integer pl_group,
+ in integer pl_portId,
+ in integer pl_seqNum,
+ in octetstring pl_msg)
+ runs on EPTF_HTTP_LocalTransport_CT
+ {
+ f_EPTF_HTTP_Transport_debug("### " & %definitionId & "()");
+
+ var integer vl_port := -1;
+ if (not f_EPTF_int2int_HashMap_Find(v_EPTF_HTTP_Transport_portId2Idx_HM, pl_portId, vl_port))
+ {
+ f_EPTF_HTTP_Transport_warning(%definitionId & ": Could not find port identifier!" &
+ log2str(v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase));
+ return;
+ }
+
+ if (f_EPTF_HTTP_Transport_sendResponse(pl_group, vl_port, pl_msg))
+ {
+ var integer vl_fGIdx := v_EPTF_HTTP_Transport_portDB[pl_group].defaultFIdx;
+
+ v_EPTF_HTTP_Transport_functionDB[vl_fGIdx].removeIncomingConn.apply(pl_group, vl_port);
+ }
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_LocalTransport_sendResponse_default_NIC
+ //
+ // Purpose:
+ // Function to send a response.
+ //
+ // Parameters:
+ // - pl_group - *in* *integer* - group index
+ // - pl_portId - *in* *integer* - unique port id to send the request
+ // - pl_seqNum - *in* *integer* - sequence number of the response
+ // - pl_msg - *in* *octetstring* - encoded message to be sent
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_LocalTransport_sendResponse_default_NIC(
+ in integer pl_group,
+ in integer pl_portId,
+ in integer pl_seqNum,
+ in octetstring pl_msg)
+ runs on EPTF_HTTP_LocalTransport_CT
+ {
+ f_EPTF_HTTP_Transport_debug("### " & %definitionId & "()");
+
+ var integer vl_port := -1;
+ if (not f_EPTF_int2int_HashMap_Find(v_EPTF_HTTP_Transport_portId2Idx_HM, pl_portId, vl_port))
+ {
+ f_EPTF_HTTP_Transport_warning(%definitionId & ": Could not find port identifier!" &
+ log2str(v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase));
+ return;
+ }
+
+ if (-1 == pl_seqNum)
+ {
+ v_boolNoWarning := f_EPTF_HTTP_Transport_sendResponse(pl_group, vl_port, pl_msg);
+ return;
+ }
+
+ var integer vl_headIdx :=
+ f_EPTF_HTTP_RingBuffer_getHeadIdx(v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[vl_port].messageBuffer.seqNums);
+ var integer vl_messageIdx := -1;
+
+ f_EPTF_HTTP_RingBuffer_setElementBusy(
+ v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[vl_port].messageBuffer.seqNums,
+ pl_seqNum
+ );
+
+ if (pl_seqNum == vl_headIdx)
+ {
+ v_boolNoWarning := f_EPTF_HTTP_Transport_sendResponse(pl_group, vl_port, pl_msg);
+
+ if (not v_boolNoWarning)
+ {
+ f_EPTF_HTTP_Transport_warning(%definitionId & ": Error while sending buffered responses, clearing buffer.");
+ f_EPTF_HTTP_MsgBuffer_clear(v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[vl_port].messageBuffer);
+ return;
+ }
+
+ f_EPTF_HTTP_RingBuffer_freeHead(v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[vl_port].messageBuffer.seqNums);
+
+ while(f_EPTF_HTTP_RingBuffer_isHeadBusy(v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[vl_port].messageBuffer.seqNums))
+ {
+ //send buffered message
+ vl_headIdx :=
+ f_EPTF_HTTP_RingBuffer_getHeadIdx(v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[vl_port].messageBuffer.seqNums);
+
+ if (f_EPTF_int2int_HashMap_Find(
+ v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[vl_port].messageBuffer.seqNum2messageIdxHM,
+ vl_headIdx,
+ vl_messageIdx) and
+ f_EPTF_FBQ_itemIsBusy(
+ vl_messageIdx,
+ v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[vl_port].messageBuffer.messageQueue))
+ {
+ if (f_EPTF_HTTP_Transport_sendResponse(
+ pl_group,
+ vl_port,
+ v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[vl_port].messageBuffer.httpMessages[vl_messageIdx]))
+ {
+ v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[vl_port].messageBuffer.httpMessages[vl_messageIdx] := ''O;
+ f_EPTF_FBQ_moveFromBusyToFreeHead(
+ vl_messageIdx,
+ v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[vl_port].messageBuffer.messageQueue);
+ f_EPTF_int2int_HashMap_Erase(
+ v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[vl_port].messageBuffer.seqNum2messageIdxHM,
+ vl_headIdx);
+ f_EPTF_HTTP_RingBuffer_freeHead(v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[vl_port].messageBuffer.seqNums);
+ continue;
+ }
+
+ f_EPTF_HTTP_MsgBuffer_clear(v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[vl_port].messageBuffer);
+ f_EPTF_HTTP_Transport_warning(%definitionId & ": Error while sending buffered responses, clearing buffer.");
+ return;
+
+ }else{
+ f_EPTF_HTTP_MsgBuffer_clear(v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[vl_port].messageBuffer);
+ f_EPTF_HTTP_Transport_warning(%definitionId & ": Inconsistency in message buffer!");
+ }
+ }
+ }else{
+ //store message
+ var integer vl_idx := -1;
+
+ if (f_EPTF_int2int_HashMap_Find(
+ v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[vl_port].messageBuffer.seqNum2messageIdxHM,
+ pl_seqNum,
+ vl_idx))
+ {
+ f_EPTF_HTTP_Transport_warning(%definitionId & ": Re-using slot! Replacing old message with new.");
+ }else
+ {
+ vl_idx := f_EPTF_FBQ_getOrCreateFreeSlot(v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[vl_port].messageBuffer.messageQueue);
+ f_EPTF_FBQ_moveFromFreeToBusyTail(
+ vl_idx,
+ v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[vl_port].messageBuffer.messageQueue);
+
+ f_EPTF_int2int_HashMap_Insert(
+ v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[vl_port].messageBuffer.seqNum2messageIdxHM,
+ pl_seqNum,
+ vl_idx)
+ }
+
+ v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[vl_port].messageBuffer.httpMessages[vl_idx] := pl_msg;
+
+ }
+
+ f_EPTF_HTTP_printBufferStatus(pl_group, vl_port);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_Transport_sendResponse
+ //
+ // Purpose:
+ // Sends the response.
+ //
+ // Parameters:
+ // - pl_group - *in* *integer* - group index
+ // - pl_port - *in* *integer* - port index
+ // - pl_msg - *in* *octetstring* - encoded message to be sent
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_Transport_sendResponse(
+ in integer pl_group,
+ in integer pl_port,
+ in octetstring pl_msg)
+ runs on EPTF_HTTP_LocalTransport_CT
+ return boolean
+ {
+ f_EPTF_HTTP_Transport_debug("### " & %definitionId & "()");
+
+ if (not f_EPTF_HTTP_LocalTransport_checkGroup(pl_group)) { return false; };
+
+ var ProtoTuple vl_proto := {tcp:= {}};
+ if(v_EPTF_HTTP_Transport_portDB[pl_group].useSSL){
+ vl_proto := {ssl:= {}}
+ }
+
+ v_EPTF_HTTP_Transport_OutgoingMessage := { asp_Send := {
+ connId := v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[pl_port].connectionId,
+ proto := vl_proto,
+ msg := pl_msg
+ } };
+
+ v_resultNoWarning := f_EPTF_CommPort_IPL4_send(
+ v_EPTF_HTTP_Transport_OutgoingMessage,
+ null, false, true, v_EPTF_HTTP_LocalTransport_selfName);
+
+ f_EPTF_HTTP_Transport_debug(%definitionId & ": Send result is " &
+ log2str(v_resultNoWarning));
+
+ if (ispresent(v_resultNoWarning.errorCode))
+ {
+ f_EPTF_HTTP_Transport_warning(%definitionId &
+ ": Send message unsuccessful!" &
+ f_EPTF_HTTP_LocalTransport_createGroupPortInfoString(pl_group, pl_port) & " " &
+ log2str(v_resultNoWarning));
+
+ // socket error, calling callback
+ if(vf_EPTF_HTTP_LocalTransport_socketErrorReceive != null) {
+ vf_EPTF_HTTP_LocalTransport_socketErrorReceive.apply({
+ pl_group,
+ v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[pl_port].portId,
+ v_resultNoWarning});
+ }
+ return false;
+ }
+
+ return true;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_LocalTransport_receiveMessage_default_IC
+ //
+ // Purpose:
+ // Function to receive message and close connection instantly
+ //
+ // Parameters:
+ // - pl_group - *in* *integer* - group index
+ // - pl_port - *in* *integer* - port index
+ // - pl_msg - *in* *octetstring* - encoded message to be sent
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // The function administrates port state and then calls the real
+ // message handler
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_LocalTransport_receiveMessage_default_IC(
+ in integer pl_group,
+ in integer pl_port,
+ in octetstring pl_msg)
+ runs on EPTF_HTTP_LocalTransport_CT
+ {
+ f_EPTF_HTTP_Transport_debug("### " & %definitionId & "()");
+
+ f_EPTF_int2int_HashMap_Erase(v_EPTF_HTTP_Transport_sessId2PortId_HM,
+ v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[pl_port].sessionId);
+
+ if (v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[pl_port].state == IDLE)
+ {
+ f_EPTF_HTTP_Transport_warning(%definitionId & ": Port already closed " &
+ f_EPTF_HTTP_LocalTransport_createGroupPortInfoString(pl_group, pl_port));
+
+ return;
+ }
+ else
+ {
+ f_EPTF_HTTP_Transport_closePortInGroup(pl_group, pl_port);
+
+ //v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[pl_port].state := IDLE;
+ //v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[pl_port].connectionId := -1;
+
+ //f_EPTF_int2int_HashMap_Erase(v_EPTF_HTTP_Transport_connId2GroupId_HM, pl_conn);
+ //f_EPTF_int2int_HashMap_Erase(v_EPTF_HTTP_Transport_connId2PortId_HM, pl_conn);
+
+ // deleted port will be allocated again (if necessary) at last time (free tail)
+ //f_EPTF_FBQ_moveFromBusyToFreeTail(pl_port, v_EPTF_HTTP_Transport_portDB[pl_group].portQueue);
+
+ // administrate as IDLE port
+ //if (f_EPTF_FBQ_itemIsBusy(pl_port, v_EPTF_HTTP_Transport_portDB[pl_group].portStateQueue)) {
+ // f_EPTF_FBQ_moveFromBusyToFreeTail(pl_port, v_EPTF_HTTP_Transport_portDB[pl_group].portStateQueue);
+ //}
+ }
+
+ var integer vl_temp := v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[pl_port].sessionId;
+ // delete session id only after handle receive message
+ v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[pl_port].sessionId := -1;
+ if (vf_EPTF_HTTP_LocalTransport_receive != null) {
+ vf_EPTF_HTTP_LocalTransport_receive.apply({
+ pl_group,
+ vl_temp,
+ -1,
+ pl_msg});
+ }
+ if (tsp_EPTF_HTTP_Transport_messageBufferEnable == true) {
+ var octetstring vl_message;
+ var charstring vl_sessionId;
+ if (f_EPTF_MessageBufferManager_getMessageFromBuffer(pl_group, vl_message, vl_sessionId)) {
+ if (lengthof (vl_message) > 0) {
+ f_EPTF_HTTP_LocalTransport_sendMessage_default_IC(pl_group, str2int(vl_sessionId), vl_message);
+ }
+ }
+ }
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_LocalTransport_receiveMessage_default_NIC
+ //
+ // Purpose:
+ // Function to handle message recpetion
+ //
+ // Parameters:
+ // - pl_group - *in* *integer* - group index
+ // - pl_port - *in* *integer* - port index
+ // - pl_msg - *in* *octetstring* - the received encoded message
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // The function closes the port connection on which the message has
+ // arrived and then calls the real message handler
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_LocalTransport_receiveMessage_default_NIC(
+ in integer pl_group,
+ in integer pl_port,
+ in octetstring pl_msg)
+ runs on EPTF_HTTP_LocalTransport_CT
+ {
+ f_EPTF_HTTP_Transport_debug("### " & %definitionId & "()");
+
+ f_EPTF_int2int_HashMap_Erase(v_EPTF_HTTP_Transport_sessId2PortId_HM,
+ v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[pl_port].sessionId);
+
+ // administrate as IDLE port
+ if (f_EPTF_FBQ_itemIsBusy(pl_port, v_EPTF_HTTP_Transport_portDB[pl_group].portStateQueue)) {
+ f_EPTF_FBQ_moveFromBusyToFreeTail(pl_port, v_EPTF_HTTP_Transport_portDB[pl_group].portStateQueue);
+ }
+ var integer vl_temp := v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[pl_port].sessionId;
+
+ if (vf_EPTF_HTTP_LocalTransport_receive != null) {
+ vf_EPTF_HTTP_LocalTransport_receive.apply({
+ pl_group,
+ vl_temp,
+ -1,
+ pl_msg});
+ }
+
+ if (tsp_EPTF_HTTP_Transport_messageBufferEnable == true) {
+ var octetstring vl_message;
+ var charstring vl_sessionId;
+ if (f_EPTF_MessageBufferManager_getMessageFromBuffer(pl_group, vl_message, vl_sessionId)) {
+ if (lengthof (vl_message) > 0) {
+ f_EPTF_HTTP_LocalTransport_sendMessage_default_NIC(pl_group, str2int(vl_sessionId), vl_message);
+ }
+ }
+ }
+ // session id cannot be deleted if connection stayed open
+ //v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[pl_port].sessionId := -1;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_LocalTransport_receiveMessageServer_default
+ //
+ // Purpose:
+ // Function to handle message recpetion
+ //
+ // Parameters:
+ // - pl_group - *in* *integer* - group index
+ // - pl_port - *in* *integer* - port index
+ // - pl_msg - *in* *octetstring* - the received encoded message
+ //
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_LocalTransport_receiveMessageServer_default(
+ in integer pl_group,
+ in integer pl_port,
+ in octetstring pl_msg)
+ runs on EPTF_HTTP_LocalTransport_CT
+ {
+ f_EPTF_HTTP_Transport_debug("### " & %definitionId & "()");
+
+ var integer vl_seqNum := -1;
+
+ if (v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[pl_port].buffer)
+ {
+ vl_seqNum := f_EPTF_HTTP_RingBuffer_getNext(v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[pl_port].messageBuffer.seqNums);
+ if (-1 == vl_seqNum)
+ {
+ f_EPTF_HTTP_Transport_warning(log2str(%definitionId &
+ ": Dropping message: ", pl_msg));
+ return;
+ }
+
+ f_EPTF_HTTP_printBufferStatus(pl_group, pl_port);
+ }
+
+ if (vf_EPTF_HTTP_LocalTransport_receive != null) {
+ vf_EPTF_HTTP_LocalTransport_receive.apply({
+ pl_group,
+ v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[pl_port].portId,
+ vl_seqNum,
+ pl_msg});
+ }
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_LocalTransport_receiveEvent_default
+ //
+ // Purpose:
+ // Function to handle event reception
+ //
+ // Parameters:
+ // - pl_group - *in* *integer* - group index
+ // - pl_port - *in* *integer* - port index
+ // - pl_type - *in* *integer* - event type
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_LocalTransport_receiveEvent_default(
+ in integer pl_group,
+ in integer pl_port,
+ in integer pl_type)
+ runs on EPTF_HTTP_LocalTransport_CT
+ {
+ f_EPTF_HTTP_Transport_debug("### " & %definitionId & "()");
+
+ select (pl_type)
+ {
+ case (c_EPTF_HTTP_inputIdx_connectionOpened)
+ {
+ f_EPTF_HTTP_Transport_debug(%definitionId &
+ ": Connection opened received");
+
+ v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[pl_port].state := OPENED;
+
+ if (vf_EPTF_HTTP_LocalTransport_eventReceive != null) {
+ vf_EPTF_HTTP_LocalTransport_eventReceive.apply({
+ pl_group,
+ v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[pl_port].sessionId,
+ pl_type});
+ }
+
+ return;
+ }
+ case (c_EPTF_HTTP_inputIdx_connectionClosed)
+ {
+ f_EPTF_HTTP_Transport_debug(%definitionId &
+ ": Connection closed received");
+
+ if (v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[pl_port].state != IDLE)
+ {
+ f_EPTF_int2int_HashMap_Erase(v_EPTF_HTTP_Transport_connId2GroupId_HM,
+ v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[pl_port].connectionId);
+ f_EPTF_int2int_HashMap_Erase(v_EPTF_HTTP_Transport_connId2PortId_HM,
+ v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[pl_port].connectionId);
+
+ v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[pl_port].state := IDLE;
+ v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[pl_port].connectionId := -1;
+
+ // deleted port will be allocated again (if necessary) at last time (free tail)
+ //f_EPTF_FBQ_moveFromBusyToFreeTail(pl_port, v_EPTF_HTTP_Transport_portDB[pl_group].portQueue);
+
+ // administrate as IDLE port
+ if (f_EPTF_FBQ_itemIsBusy(pl_port, v_EPTF_HTTP_Transport_portDB[pl_group].portStateQueue)) {
+ f_EPTF_FBQ_moveFromBusyToFreeTail(pl_port, v_EPTF_HTTP_Transport_portDB[pl_group].portStateQueue);
+ }
+ }
+ else { // receivemessage_default_IC can result in this state
+ //f_EPTF_HTTP_Transport_warning(%definitionId &
+ // ": Connection already closed");
+ }
+
+ if (vf_EPTF_HTTP_LocalTransport_eventReceive != null) {
+ vf_EPTF_HTTP_LocalTransport_eventReceive.apply({
+ pl_group,
+ v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[pl_port].sessionId,
+ pl_type});
+ }
+
+ return;
+ }
+ case (c_EPTF_HTTP_inputIdx_OKReceived) {
+ f_EPTF_HTTP_Transport_debug(%definitionId &
+ ": OK message received");
+
+ if (vf_EPTF_HTTP_LocalTransport_eventReceive != null) {
+ vf_EPTF_HTTP_LocalTransport_eventReceive.apply({
+ pl_group,
+ v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[pl_port].sessionId,
+ pl_type});
+ }
+
+ return;
+ }
+ case (c_EPTF_HTTP_inputIdx_errorReceived) {
+ f_EPTF_HTTP_Transport_debug(%definitionId &
+ ": Error message received");
+
+ // socket error, calling callback
+ if(vf_EPTF_HTTP_LocalTransport_socketErrorReceive != null) {
+ vf_EPTF_HTTP_LocalTransport_socketErrorReceive.apply({
+ pl_group,
+ v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[pl_port].sessionId,
+ v_EPTF_CommPort_IPL4_aspEvent.result});
+ }
+ return;
+ }
+ }
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_LocalTransport_receiveEventServer_default
+ //
+ // Purpose:
+ // Function to handle event reception in a server group.
+ //
+ // Parameters:
+ // - pl_group - *in* *integer* - group index
+ // - pl_port - *in* *integer* - port index
+ // - pl_type - *in* *integer* - event type
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_LocalTransport_receiveEventServer_default(
+ in integer pl_group,
+ in integer pl_port,
+ in integer pl_type)
+ runs on EPTF_HTTP_LocalTransport_CT
+ {
+ f_EPTF_HTTP_Transport_debug("### " & %definitionId & "()");
+
+ select (pl_type)
+ {
+ case (c_EPTF_HTTP_inputIdx_connectionOpened)
+ {
+ f_EPTF_HTTP_Transport_debug(%definitionId &
+ ": Connection opened received");
+
+ var integer vl_fGIdx := v_EPTF_HTTP_Transport_portDB[pl_group].defaultFIdx;
+ var integer vl_port := -1;
+
+ if (v_EPTF_HTTP_Transport_functionDB[vl_fGIdx].createIncomingConn.apply(pl_group,
+ v_EPTF_CommPort_IPL4_aspEvent.connOpened,
+ vl_port))
+ {
+ if (vf_EPTF_HTTP_LocalTransport_eventReceive != null) {
+ vf_EPTF_HTTP_LocalTransport_eventReceive.apply({
+ pl_group,
+ v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[vl_port].portId,
+ pl_type});
+ }
+ }
+
+ return;
+ }
+ case (c_EPTF_HTTP_inputIdx_connectionClosed)
+ {
+ f_EPTF_HTTP_Transport_debug(%definitionId &
+ ": Connection closed received");
+
+ if (vf_EPTF_HTTP_LocalTransport_eventReceive != null) {
+ vf_EPTF_HTTP_LocalTransport_eventReceive.apply({
+ pl_group,
+ v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[pl_port].portId,
+ pl_type});
+ }
+
+ var integer vl_fGIdx := v_EPTF_HTTP_Transport_portDB[pl_group].defaultFIdx;
+ var integer vl_connId := v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[pl_port].connectionId;
+
+ v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[pl_port].state := CLOSED;
+ f_EPTF_HTTP_Transport_socketClosed(vl_connId);
+
+ v_EPTF_HTTP_Transport_functionDB[vl_fGIdx].removeIncomingConn.apply(pl_group, pl_port);
+
+ return;
+ }
+ case (c_EPTF_HTTP_inputIdx_OKReceived) {
+ f_EPTF_HTTP_Transport_debug(%definitionId &
+ ": OK message received");
+
+ if (LISTENING_PORT == v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[pl_port].portType)
+ {
+ if (vf_EPTF_HTTP_LocalTransport_listenSocketEvent != null) {
+ vf_EPTF_HTTP_LocalTransport_listenSocketEvent.apply({
+ pl_group,
+ v_EPTF_HTTP_Transport_portDB[pl_group].baseLocalHostInformation,
+ pl_type});
+ }
+
+ }else
+ {
+ if (vf_EPTF_HTTP_LocalTransport_eventReceive != null) {
+ vf_EPTF_HTTP_LocalTransport_eventReceive.apply({
+ pl_group,
+ v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[pl_port].sessionId,
+ pl_type});
+ }
+ }
+
+ return;
+ }
+ case (c_EPTF_HTTP_inputIdx_errorReceived) {
+ f_EPTF_HTTP_Transport_debug(%definitionId &
+ ": Error message received");
+
+ if (LISTENING_PORT == v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[pl_port].portType)
+ {
+ if (vf_EPTF_HTTP_LocalTransport_listenSocketError != null) {
+ vf_EPTF_HTTP_LocalTransport_listenSocketError.apply({
+ pl_group,
+ v_EPTF_HTTP_Transport_portDB[pl_group].baseLocalHostInformation,
+ v_EPTF_CommPort_IPL4_aspEvent.result});
+ }
+
+ }else
+ {
+ // socket error, calling callback
+ if(vf_EPTF_HTTP_LocalTransport_socketErrorReceive != null) {
+ vf_EPTF_HTTP_LocalTransport_socketErrorReceive.apply({
+ pl_group,
+ v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[pl_port].sessionId,
+ v_EPTF_CommPort_IPL4_aspEvent.result});
+ }
+ }
+ return;
+ }
+ }
+ }
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_LocalTransport_closePortOfUser_default
+ //
+ // Purpose:
+ // Function to close the port of an HTTP user free
+ //
+ // Parameters:
+ // - pl_group - *in* *integer* - group index
+ // - pl_sessionId - *in* *integer* - session id
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // An HTTP user is identified internally with a unique session id.
+ // If the HTTP user sends on a port of a port group, it can close the
+ // connection of its port group
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_LocalTransport_closePortOfUser_default(
+ in integer pl_group,
+ in integer pl_sessionId)
+ runs on EPTF_HTTP_LocalTransport_CT
+ {
+ f_EPTF_HTTP_Transport_debug("### " & %definitionId & "()");
+
+ if (not f_EPTF_HTTP_LocalTransport_checkGroup(pl_group)) { return; };
+
+ var integer vl_port;
+
+ if (f_EPTF_int2int_HashMap_Find(v_EPTF_HTTP_Transport_sessId2PortId_HM, pl_sessionId, vl_port))
+ {
+ f_EPTF_HTTP_Transport_closePortInGroup(pl_group, vl_port);
+
+ v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[vl_port].sessionId := -1;
+ }
+ else {
+ f_EPTF_HTTP_Transport_warning(%definitionId &
+ ": Port cannot be closed for session id " &
+ int2str(pl_sessionId) & " in group " & int2str(pl_group));
+ }
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_LocalTransport_freePortOfUser_default
+ //
+ // Purpose:
+ // Function to make the port of an HTTP user free
+ //
+ // Parameters:
+ // - pl_group - *in* *integer* - group index
+ // - pl_sessionId - *in* *integer* - session id
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // An HTTP user is identified internally with a unique session id.
+ // If the HTTP user sends on a port of a port group, it can make the
+ // state of its port free. This case incoming messages on the port
+ // will be dropped and the port is free again for any HTTP user to use.
+ //
+ // If the port is reused by another HTTP user and the message of the
+ // last session arrives during this time, then the message will be
+ // forwaerded to the new HTTP user.
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_LocalTransport_freePortOfUser_default(
+ in integer pl_group,
+ in integer pl_sessionId)
+ runs on EPTF_HTTP_LocalTransport_CT
+ {
+ f_EPTF_HTTP_Transport_debug("### " & %definitionId & "()");
+
+ if (not f_EPTF_HTTP_LocalTransport_checkGroup(pl_group)) { return; };
+
+ var integer vl_port;
+
+ if (f_EPTF_int2int_HashMap_Find(v_EPTF_HTTP_Transport_sessId2PortId_HM, pl_sessionId, vl_port))
+ {
+ // administrate as IDLE port
+ if (f_EPTF_FBQ_itemIsBusy(vl_port, v_EPTF_HTTP_Transport_portDB[pl_group].portStateQueue))
+ {
+ f_EPTF_FBQ_moveFromBusyToFreeTail(vl_port,
+ v_EPTF_HTTP_Transport_portDB[pl_group].portStateQueue);
+
+ // if port made free again, then messages from last session are disabled
+ v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[vl_port].sessionId := -1;
+ }
+ }
+ else
+ {
+ f_EPTF_HTTP_Transport_warning(%definitionId &
+ ": Port cannot be made free for session id " &
+ int2str(pl_sessionId) & " in group " & int2str(pl_group))
+ }
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_LocalTransport_openConnection_defaultGroup
+ //
+ // Purpose:
+ // Function to open connections within a port group
+ //
+ // Parameters:
+ // - pl_group - *in* *integer* - group index
+ //
+ // Return Value:
+ // *boolean* - result of connection opening
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // Connection for all the ports will be opened within the port group. If
+ // one fails, all will be closed.
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_LocalTransport_openConnection_defaultGroup(
+ in integer pl_group)
+ runs on EPTF_HTTP_LocalTransport_CT return boolean
+ {
+ f_EPTF_HTTP_Transport_debug("### " & %definitionId & "()");
+
+ if (not f_EPTF_HTTP_LocalTransport_checkGroup(pl_group)) { return false; };
+
+ var boolean vl_hasMoreElement;
+ var boolean vl_success := true;
+ var integer i; //, vl_ports := sizeof(v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase);
+
+ vl_hasMoreElement := f_EPTF_FBQ_getBusyHeadIdx(i, v_EPTF_HTTP_Transport_portDB[pl_group].portQueue);
+
+ while (vl_hasMoreElement)
+ //for (i := 0; i < vl_ports; i := i + 1)
+ {
+ if (v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[i].state == IDLE)
+ {
+ f_EPTF_Base_assert(%definitionId &
+ ": Port is in idle state but connection id is presented at " &
+ f_EPTF_HTTP_LocalTransport_createGroupPortInfoString(pl_group, i),
+ v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[i].connectionId == -1);
+
+ if (not f_EPTF_HTTP_LocalTransport_openPortInGroup(pl_group, i)) {
+ vl_success := false;
+ break; //i := vl_ports;
+ }
+ }
+
+ vl_hasMoreElement := f_EPTF_FBQ_getFwdBusyItemIdx(i, v_EPTF_HTTP_Transport_portDB[pl_group].portQueue);
+ }
+
+ if (not vl_success) {
+ v_EPTF_HTTP_Transport_functionDB[v_EPTF_HTTP_Transport_portDB[pl_group].defaultFIdx].closeConnection.apply(pl_group);
+ }
+
+ return vl_success;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_LocalTransport_openPortInGroup
+ //
+ // Purpose:
+ // Auxilary function to open a connection for a given port of a given
+ // port group
+ //
+ // Parameters:
+ // - pl_group - *in* *integer* - group index
+ // - pl_port - *in* *integer* - port index
+ //
+ // Return Value:
+ // *boolean* - result of connection opening
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_LocalTransport_openPortInGroup(
+ in integer pl_group,
+ in integer pl_port
+ )
+ runs on EPTF_HTTP_LocalTransport_CT return boolean
+ {
+ f_EPTF_HTTP_Transport_debug("### " & %definitionId & "()");
+
+ var EPTF_HTTP_HostInformation vl_local, vl_remote;
+ var Result vl_result;
+
+ vl_local := v_EPTF_HTTP_Transport_localHostInformationList[
+ v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[pl_port].localhostInfoIdx];
+ vl_remote := v_EPTF_HTTP_Transport_remoteHostInformationList[
+ v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[pl_port].remotehostInfoIdx];
+
+ v_EPTF_HTTP_Transport_OutgoingMessage := {
+ asp_Connect := {
+ remName := vl_remote.hostIPAddress,
+ remPort := vl_remote.hostPort,
+ locName := vl_local.hostIPAddress,
+ locPort := vl_local.hostPort,
+ proto := {tcp := {}}
+ }
+ }
+
+ vl_result:={omit,omit,omit,omit};
+ vl_result := f_EPTF_CommPort_IPL4_send(
+ v_EPTF_HTTP_Transport_OutgoingMessage,
+ null,false,false,v_EPTF_HTTP_LocalTransport_selfName);
+
+ if (ispresent(vl_result.errorCode) and
+ IPL4_ERROR_TEMPORARILY_UNAVAILABLE != vl_result.errorCode)
+ {
+ f_EPTF_HTTP_Transport_debug(%definitionId & ": Connection opening unsuccessful" &
+ " for port (" & log2str(vl_result) & ") at " &
+
+ f_EPTF_HTTP_LocalTransport_createGroupPortInfoString(pl_group, pl_port));
+
+ // socket error, calling callback
+ if(vf_EPTF_HTTP_LocalTransport_socketErrorReceive != null) {
+ vf_EPTF_HTTP_LocalTransport_socketErrorReceive.apply({
+ pl_group,
+ v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[pl_port].sessionId,
+ vl_result});
+ }
+
+ return false;
+ }
+ else {
+ v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[pl_port].connectionId := vl_result.connId;
+
+ v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[pl_port].state := OPENED;
+
+ f_EPTF_HTTP_Transport_socketOpened(vl_result.connId, pl_group, pl_port);
+
+ f_EPTF_HTTP_Transport_debug(%definitionId &
+ ": Connection opening successful for port at " &
+ f_EPTF_HTTP_LocalTransport_createGroupPortInfoString(pl_group, pl_port) &
+ " with connection id: " & int2str(vl_result.connId));
+ }
+
+ return true;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_LocalTransport_openConnection_defaultPort
+ //
+ // Purpose:
+ // Function to open connection for a given port
+ //
+ // Parameters:
+ // - pl_group - *in* *integer* - port index
+ //
+ // Return Value:
+ // *boolean* - result of connection opening
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_LocalTransport_openConnection_defaultPort(
+ in integer pl_group)
+ runs on EPTF_HTTP_LocalTransport_CT return boolean
+ {
+ f_EPTF_HTTP_Transport_debug("### " & %definitionId & "()");
+
+ if (not f_EPTF_HTTP_LocalTransport_checkGroup(pl_group)) { return false; };
+
+ if (v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[0].state != IDLE)
+ {
+ f_EPTF_Base_assert("Non-IDLE port must be busy!",
+ v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[0].state == IDLE or
+ f_EPTF_FBQ_itemIsBusy(0, v_EPTF_HTTP_Transport_portDB[pl_group].portQueue) );
+
+ f_EPTF_HTTP_Transport_warning(%definitionId & ": Connection already open!");
+ return true; // because connection is open
+ }
+ else
+ {
+ if (f_EPTF_FBQ_itemIsBusy(0, v_EPTF_HTTP_Transport_portDB[pl_group].portQueue))
+ {
+ var Result vl_result;
+
+ log(v_EPTF_HTTP_Transport_portDB[pl_group]);
+
+ f_EPTF_Base_assert(%definitionId &
+ ": Port is in idle state but connection id is presented at " &
+ f_EPTF_HTTP_LocalTransport_createGroupPortInfoString(pl_group, 0),
+ v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[0].connectionId == -1);
+
+ v_EPTF_HTTP_Transport_OutgoingMessage := {
+ asp_Connect := {
+ remName := v_EPTF_HTTP_Transport_portDB[pl_group].baseRemoteHostInformation.hostIPAddress,
+ remPort := v_EPTF_HTTP_Transport_portDB[pl_group].baseRemoteHostInformation.hostPort,
+ locName := v_EPTF_HTTP_Transport_portDB[pl_group].baseLocalHostInformation.hostIPAddress,
+ locPort := v_EPTF_HTTP_Transport_portDB[pl_group].baseLocalHostInformation.hostPort,
+ proto := {tcp := {}}
+ }
+ }
+
+ vl_result:={omit,omit,omit,omit};
+ vl_result := f_EPTF_CommPort_IPL4_send(
+ v_EPTF_HTTP_Transport_OutgoingMessage,
+ null,false,false,v_EPTF_HTTP_LocalTransport_selfName);
+
+ if (ispresent(vl_result.errorCode) and
+ IPL4_ERROR_TEMPORARILY_UNAVAILABLE != vl_result.errorCode)
+ {
+ f_EPTF_HTTP_Transport_debug(%definitionId & ": Connection opening unsuccessful" &
+ " for port (" & log2str(vl_result) & ") at " &
+ f_EPTF_HTTP_LocalTransport_createGroupPortInfoString(pl_group, 0));
+
+ // socket error, calling callback
+ if(vf_EPTF_HTTP_LocalTransport_socketErrorReceive != null) {
+ vf_EPTF_HTTP_LocalTransport_socketErrorReceive.apply({
+ pl_group,
+ v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[0].sessionId,
+ vl_result});
+ }
+
+ return false;
+ }
+ else
+ {
+ v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[0].connectionId := vl_result.connId;
+
+ v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[0].state := OPENED;
+
+ f_EPTF_HTTP_Transport_socketOpened(vl_result.connId, pl_group, 0);
+
+ f_EPTF_HTTP_Transport_debug(%definitionId &
+ ": Connection opening successful for port at " &
+ f_EPTF_HTTP_LocalTransport_createGroupPortInfoString(pl_group, 0) &
+ " with connection id: " & int2str(vl_result.connId));
+
+ return true
+ }
+ }
+ else {
+ f_EPTF_HTTP_Transport_warning(%definitionId &
+ ": Port 0 already deleted from group: " & int2str(pl_group));
+
+ return false;
+ }
+ }
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_LocalTransport_listen_default
+ //
+ // Purpose:
+ // Opens a listen port in a server port group.
+ //
+ // Parameters:
+ // - pl_group - *in* *integer* - server port group index
+ //
+ // Return Value:
+ // *boolean* - result
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_LocalTransport_listen_default(
+ in integer pl_group)
+ runs on EPTF_HTTP_LocalTransport_CT
+ return integer
+ {
+ f_EPTF_HTTP_Transport_debug("### " & %definitionId & "()");
+
+ if (not f_EPTF_HTTP_LocalTransport_checkGroup(pl_group)) { return -1; };
+
+ if (-1 != v_EPTF_HTTP_Transport_portDB[pl_group].listeningPortIdx)
+ {
+ f_EPTF_HTTP_Transport_debug(%definitionId &
+ ": Already listening on " &
+ f_EPTF_HTTP_LocalTransport_createGroupPortInfoString(pl_group, v_EPTF_HTTP_Transport_portDB[pl_group].listeningPortIdx));
+ return v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[v_EPTF_HTTP_Transport_portDB[pl_group].listeningPortIdx].portId;
+ }
+
+ var charstring vl_localHost := v_EPTF_HTTP_Transport_portDB[pl_group].baseLocalHostInformation.hostIPAddress;
+ var integer vl_localPort := v_EPTF_HTTP_Transport_portDB[pl_group].baseLocalHostInformation.hostPort;
+ var ProtoTuple vl_proto := {tcp := {}}
+ if(v_EPTF_HTTP_Transport_portDB[pl_group].useSSL) {
+ vl_proto := {ssl := {}};
+ f_EPTF_HTTP_Transport_debug(%definitionId &
+ ": Using SSL.");
+ }
+ v_EPTF_HTTP_Transport_OutgoingMessage := {
+ asp_Listen := {
+ locName := vl_localHost,
+ locPort := vl_localPort,
+ proto := vl_proto
+ }
+ }
+
+ v_resultNoWarning := f_EPTF_CommPort_IPL4_send(
+ v_EPTF_HTTP_Transport_OutgoingMessage,
+ null,false,false,v_EPTF_HTTP_LocalTransport_selfName);
+
+ if (ispresent(v_resultNoWarning.errorCode))
+ {
+ f_EPTF_HTTP_Transport_warning(%definitionId & ": Listening unsuccessful for port (" & log2str(v_resultNoWarning) & ") at " &
+ f_EPTF_HTTP_LocalTransport_createGroupPortInfoString(pl_group, 0));
+
+ return -1;
+ }
+
+ var integer vl_fbqIdx := -1;
+ vl_fbqIdx := f_EPTF_FBQ_getOrCreateFreeSlot(v_EPTF_HTTP_Transport_portDB[pl_group].portQueue);
+ var Result vl_result;
+
+ vl_result := f_EPTF_CommPort_IPL4_setUserData(v_resultNoWarning.connId, v_resultNoWarning.connId);
+
+ f_EPTF_HTTP_Transport_socketOpened(v_resultNoWarning.connId, pl_group, vl_fbqIdx);
+
+ f_EPTF_FBQ_moveFromFreeToBusyTail(vl_fbqIdx, v_EPTF_HTTP_Transport_portDB[pl_group].portQueue)
+
+ v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[vl_fbqIdx] := c_EPTF_HTTP_LocalTransport_initPortInfo;
+
+ v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[vl_fbqIdx].groupIndex := pl_group; // FIXME check
+ v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[vl_fbqIdx].portIndex := vl_fbqIdx; // FIXME check
+ v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[vl_fbqIdx].portType := LISTENING_PORT;
+ v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[vl_fbqIdx].state := OPENED;
+ v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[vl_fbqIdx].portId := f_EPTF_HTTP_Transport_generatePortId(pl_group);
+ v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[vl_fbqIdx].connectionId := v_resultNoWarning.connId;
+ v_EPTF_HTTP_Transport_portDB[pl_group].listeningPortIdx := vl_fbqIdx;
+
+ v_EPTF_HTTP_Transport_portDB[pl_group].numberOfPorts := v_EPTF_HTTP_Transport_portDB[pl_group].numberOfPorts + 1;
+
+ f_EPTF_int2int_HashMap_Insert(v_EPTF_HTTP_Transport_portId2Idx_HM,
+ v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[vl_fbqIdx].portId, vl_fbqIdx);
+
+ f_EPTF_HTTP_Transport_debug(%definitionId &
+ ": Listening successful on " &
+ f_EPTF_HTTP_LocalTransport_createGroupPortInfoString(pl_group, vl_fbqIdx) &
+ " with connection id: " & int2str(v_resultNoWarning.connId));
+
+ return v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[vl_fbqIdx].portId;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_LocalTransport_createIncomingConn_default
+ //
+ // Purpose:
+ // Creates an incoming connection in the port group.
+ //
+ // Parameters:
+ // - pl_group - *in* *integer* - port group index
+ // - pl_connOpened - *in* <ConnectionOpenedEvent> - connection opened event
+ // - pl_port - *inout* *integer* - the index of the created port
+ //
+ // Return Value:
+ // boolean -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_LocalTransport_createIncomingConn_default(
+ in integer pl_group,
+ in ConnectionOpenedEvent pl_connOpened,
+ inout integer pl_port)
+ runs on EPTF_HTTP_LocalTransport_CT
+ return boolean
+ {
+ f_EPTF_HTTP_Transport_debug("### " & %definitionId & "()");
+
+ if (not f_EPTF_HTTP_LocalTransport_checkGroup(pl_group)) { return false;};
+
+ var integer vl_fbqIdx := -1, vl_rhIdx := -1;
+ var EPTF_HTTP_HostInformation vl_rhostInformation := {"", -1};
+
+ vl_rhostInformation.hostIPAddress := pl_connOpened.remName;
+ vl_rhostInformation.hostPort := pl_connOpened.remPort;
+ vl_rhIdx := f_EPTF_HTTP_LocalTransport_addRemoteHostInformation(vl_rhostInformation);
+
+ vl_fbqIdx := f_EPTF_FBQ_getOrCreateFreeSlot(v_EPTF_HTTP_Transport_portDB[pl_group].portQueue);
+
+ f_EPTF_FBQ_moveFromFreeToBusyTail(vl_fbqIdx,
+ v_EPTF_HTTP_Transport_portDB[pl_group].portQueue);
+
+ v_EPTF_HTTP_Transport_portDB[pl_group].numberOfPorts := v_EPTF_HTTP_Transport_portDB[pl_group].numberOfPorts + 1;
+
+ // set port data to port info database
+ if (sizeof(v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase) <= vl_fbqIdx)
+ {
+ v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[vl_fbqIdx] := c_EPTF_HTTP_LocalTransport_initPortInfo;
+ }
+
+ v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[vl_fbqIdx].groupIndex := pl_group; // FIXME check
+ v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[vl_fbqIdx].portIndex := vl_fbqIdx; // FIXME check
+ v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[vl_fbqIdx].connectionId := pl_connOpened.connId;
+ v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[vl_fbqIdx].portId := f_EPTF_HTTP_Transport_generatePortId(pl_group);
+ v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[vl_fbqIdx].portType := INCOMING_PORT;
+ v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[vl_fbqIdx].state := OPENED;
+ v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[vl_fbqIdx].remotehostInfoIdx := vl_rhIdx;
+ v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[vl_fbqIdx].buffer := v_EPTF_HTTP_Transport_portDB[pl_group].buffer;
+ if (v_EPTF_HTTP_Transport_portDB[pl_group].buffer and omit == v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[vl_fbqIdx].messageBuffer)
+ {
+ f_EPTF_HTTP_MsgBuffer_init(
+ v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[vl_fbqIdx].messageBuffer,
+ v_EPTF_HTTP_Transport_bufferSize,
+ vl_fbqIdx);
+ }
+
+ f_EPTF_HTTP_Transport_socketOpened(pl_connOpened.connId, pl_group, vl_fbqIdx);
+
+ f_EPTF_int2int_HashMap_Insert(v_EPTF_HTTP_Transport_portId2Idx_HM,
+ v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[vl_fbqIdx].portId, vl_fbqIdx);
+
+ f_EPTF_HTTP_Transport_debug(%definitionId & ": New incoming connection added to " &
+ f_EPTF_HTTP_LocalTransport_createGroupPortInfoString(pl_group, vl_fbqIdx));
+
+ pl_port := vl_fbqIdx;
+
+ return true;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_LocalTransport_removeIncomingConn_default
+ //
+ // Purpose:
+ // Removes an incoming connection from the server port group.
+ //
+ // Parameters:
+ // - pl_group - *in* *integer* - port group index
+ // - pl_port - *in* *integer* - the index of the port to remove
+ //
+ // Return Value:
+ // boolean -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_LocalTransport_removeIncomingConn_default(
+ in integer pl_group,
+ in integer pl_port)
+ runs on EPTF_HTTP_LocalTransport_CT
+ {
+ f_EPTF_HTTP_Transport_debug("### " & %definitionId & "()");
+
+ f_EPTF_HTTP_LocalTransport_removeServerPort(pl_group, pl_port);
+
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_LocalTransport_closePort_default
+ //
+ // Purpose:
+ // Closes a connection.
+ //
+ // Parameters:
+ // - pl_group - *in* *integer* - port group index
+ // - pl_portId - *in* *integer* - port identifier
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_LocalTransport_closePort_default(
+ in integer pl_group,
+ in integer pl_portId)
+ runs on EPTF_HTTP_LocalTransport_CT
+ {
+ f_EPTF_HTTP_Transport_debug("### " & %definitionId & "()");
+
+ if (not f_EPTF_HTTP_LocalTransport_checkGroup(pl_group)) { return; };
+
+ var integer vl_port := -1;
+
+ if (not f_EPTF_int2int_HashMap_Find(v_EPTF_HTTP_Transport_portId2Idx_HM, pl_portId, vl_port))
+ {
+ f_EPTF_HTTP_Transport_debug(%definitionId & ": Could not find port identifier!" &
+ log2str(v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase));
+ return;
+ }
+
+ f_EPTF_HTTP_LocalTransport_removeServerPort(pl_group, vl_port);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_LocalTransport_removeServerPort
+ //
+ // Purpose:
+ // Removes a port from the server group.
+ //
+ // Parameters:
+ // - pl_group - *in* *integer* - port group index
+ // - pl_port - *in* *integer* - port index
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_LocalTransport_removeServerPort(
+ in integer pl_group,
+ in integer pl_port)
+ runs on EPTF_HTTP_LocalTransport_CT
+ {
+ f_EPTF_HTTP_Transport_debug("### " & %definitionId & "()");
+
+ if (not f_EPTF_HTTP_LocalTransport_checkGroup(pl_group)) { return; };
+
+ if (f_EPTF_FBQ_itemIsBusy(pl_port, v_EPTF_HTTP_Transport_portDB[pl_group].portQueue))
+ {
+ f_EPTF_HTTP_Transport_debug(%definitionId & ": Removing port from group: " &
+ f_EPTF_HTTP_LocalTransport_createGroupPortInfoString(pl_group, pl_port));
+
+ if (CLOSED != v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[pl_port].state)
+ {
+ var integer vl_connId := v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[pl_port].connectionId;
+
+ f_EPTF_HTTP_Transport_debug(%definitionId & ": Closing connection with id " & int2str(vl_connId));
+
+ v_EPTF_HTTP_Transport_OutgoingMessage := {
+ asp_Close := {
+ id := vl_connId,
+ proto := {tcp := {}}
+ }
+ }
+
+ v_resultNoWarning := f_EPTF_CommPort_IPL4_send(
+ v_EPTF_HTTP_Transport_OutgoingMessage,
+ null, false, false, v_EPTF_HTTP_LocalTransport_selfName);
+
+ f_EPTF_HTTP_Transport_socketClosed(vl_connId);
+ v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[pl_port].state := CLOSED;
+ }
+
+ f_EPTF_int2int_HashMap_Erase(v_EPTF_HTTP_Transport_portId2Idx_HM, v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[pl_port].portId);
+
+ f_EPTF_FBQ_moveFromBusyToFreeTail(pl_port,
+ v_EPTF_HTTP_Transport_portDB[pl_group].portQueue);
+
+ if (omit == v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[pl_port].messageBuffer)
+ {
+ v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[pl_port] := c_EPTF_HTTP_LocalTransport_initPortInfo;
+ }else
+ {
+ v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[pl_port].groupIndex := c_EPTF_HTTP_LocalTransport_initPortInfo.groupIndex;
+ v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[pl_port].portIndex := c_EPTF_HTTP_LocalTransport_initPortInfo.portIndex;
+ v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[pl_port].connectionId := c_EPTF_HTTP_LocalTransport_initPortInfo.connectionId;
+ v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[pl_port].sessionId := c_EPTF_HTTP_LocalTransport_initPortInfo.sessionId;
+ v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[pl_port].portId := c_EPTF_HTTP_LocalTransport_initPortInfo.portId;
+ v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[pl_port].localhostInfoIdx := c_EPTF_HTTP_LocalTransport_initPortInfo.localhostInfoIdx;
+ v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[pl_port].remotehostInfoIdx :=
+ c_EPTF_HTTP_LocalTransport_initPortInfo.remotehostInfoIdx;
+ v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[pl_port].state := c_EPTF_HTTP_LocalTransport_initPortInfo.state;
+ v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[pl_port].portType := c_EPTF_HTTP_LocalTransport_initPortInfo.portType;
+
+ f_EPTF_HTTP_MsgBuffer_clear(v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[pl_port].messageBuffer);
+ }
+ v_EPTF_HTTP_Transport_portDB[pl_group].numberOfPorts := v_EPTF_HTTP_Transport_portDB[pl_group].numberOfPorts - 1;
+ v_EPTF_HTTP_Transport_portDB[pl_group].listeningPortIdx := -1;
+
+ }
+ else
+ {
+ f_EPTF_HTTP_Transport_warning(log2str(%definitionId &
+ ": Error removing incoming connection: port(",pl_port,") is not busy : " &
+ int2str(pl_group) & " - " &
+ v_EPTF_HTTP_Transport_portDB[pl_group].name & "; ",
+ v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[pl_port]));
+ }
+
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_LocalTransport_closeConnection_defaultGroup
+ //
+ // Purpose:
+ // Function to close connections for a given port group
+ //
+ // Parameters:
+ // - pl_group - *in* *integer* - port index
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // All open ports within the port group will be closed
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_LocalTransport_closeConnection_defaultGroup(
+ in integer pl_group)
+ runs on EPTF_HTTP_LocalTransport_CT
+ {
+ f_EPTF_HTTP_Transport_debug("### " & %definitionId & "()");
+
+ if (not f_EPTF_HTTP_LocalTransport_checkGroup(pl_group)) { return; };
+
+ var boolean vl_hasMoreElement;
+ var integer i;
+
+ //vl_ports := sizeof(v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase);
+ vl_hasMoreElement := f_EPTF_FBQ_getBusyHeadIdx(i, v_EPTF_HTTP_Transport_portDB[pl_group].portQueue);
+ while (vl_hasMoreElement)
+ //for (i := 0; i < vl_ports; i := i + 1);
+ {
+ f_EPTF_HTTP_Transport_closePortInGroup(pl_group, i);
+
+ vl_hasMoreElement := f_EPTF_FBQ_getFwdBusyItemIdx(i, v_EPTF_HTTP_Transport_portDB[pl_group].portQueue);
+ }
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_Transport_closePortInGroup
+ //
+ // Purpose:
+ // Auxialry funtion to close a given port of a given port group
+ //
+ // Parameters:
+ // - pl_group - *in* *integer* - group index
+ // - pl_port - *in* *integer* - port index
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_Transport_closePortInGroup(
+ in integer pl_group,
+ in integer pl_port)
+ runs on EPTF_HTTP_LocalTransport_CT
+ {
+ f_EPTF_HTTP_Transport_debug("### " & %definitionId & "()");
+
+ if (v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[pl_port].state != IDLE)
+ {
+ var integer vl_connId := v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[pl_port].connectionId;
+
+ f_EPTF_Base_assert(%definitionId &
+ ": Port is not in IDLE state but connection id is missing at " &
+ f_EPTF_HTTP_LocalTransport_createGroupPortInfoString(pl_group, pl_port),
+ vl_connId != -1);
+
+ v_EPTF_HTTP_Transport_OutgoingMessage := {
+ asp_Close := {
+ id := vl_connId,
+ proto := {tcp := {}}
+ }
+ }
+
+ v_resultNoWarning := f_EPTF_CommPort_IPL4_send(
+ v_EPTF_HTTP_Transport_OutgoingMessage,
+ null, false, false, v_EPTF_HTTP_LocalTransport_selfName);
+
+ v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[pl_port].connectionId := -1;
+ v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[pl_port].state := IDLE;
+
+ f_EPTF_HTTP_Transport_socketClosed(vl_connId);
+
+ // administrate port as free
+ //if (f_EPTF_FBQ_itemIsBusy(pl_port, v_EPTF_HTTP_Transport_portDB[pl_group].portQueue)) {
+ // f_EPTF_FBQ_moveFromBusyToFreeTail(pl_port,
+ // v_EPTF_HTTP_Transport_portDB[pl_group].portQueue);
+ //}
+
+ // administrate as IDLE port
+ if (f_EPTF_FBQ_itemIsBusy(pl_port, v_EPTF_HTTP_Transport_portDB[pl_group].portStateQueue)) {
+ f_EPTF_FBQ_moveFromBusyToFreeTail(pl_port,
+ v_EPTF_HTTP_Transport_portDB[pl_group].portStateQueue);
+ }
+
+ f_EPTF_HTTP_Transport_debug(%definitionId & ": Connection (" &
+ int2str(vl_connId) & ") closed for port at " &
+ f_EPTF_HTTP_LocalTransport_createGroupPortInfoString(pl_group, pl_port));
+ }
+ else
+ {
+ f_EPTF_HTTP_Transport_warning(%definitionId & ": Connection (" &
+ int2str(v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[pl_port].connectionId) &
+ ") is already closed for port at " &
+ f_EPTF_HTTP_LocalTransport_createGroupPortInfoString(pl_group, pl_port));
+ }
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_LocalTransport_closeConnection_defaultPort
+ //
+ // Purpose:
+ // Function to close connection of a port
+ //
+ // Parameters:
+ // - pl_group - *in* *integer* - port index
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_LocalTransport_closeConnection_defaultPort(
+ in integer pl_group)
+ runs on EPTF_HTTP_LocalTransport_CT
+ {
+ f_EPTF_HTTP_Transport_debug("### " & %definitionId & "()");
+
+ if (not f_EPTF_HTTP_LocalTransport_checkGroup(pl_group)) { return; };
+
+ var integer vl_connId;
+
+ if (v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[0].state == IDLE)
+ {
+ f_EPTF_HTTP_Transport_warning(%definitionId & ": Connection already closed!");
+ return;
+ }
+ else
+ {
+ vl_connId := v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[0].connectionId;
+
+ log(v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[0]);
+
+ f_EPTF_Base_assert(%definitionId &
+ ": Port is not in IDLE state but connection id is missing at " &
+ f_EPTF_HTTP_LocalTransport_createGroupPortInfoString(pl_group, 0),
+ vl_connId != -1);
+
+ v_EPTF_HTTP_Transport_OutgoingMessage := {
+ asp_Close := {
+ id := vl_connId,
+ proto := {tcp := {}}
+ }
+ }
+
+ v_resultNoWarning := f_EPTF_CommPort_IPL4_send(
+ v_EPTF_HTTP_Transport_OutgoingMessage,
+ null, false, false, v_EPTF_HTTP_LocalTransport_selfName);
+
+ v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[0].connectionId := -1;
+ v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[0].state := IDLE;
+
+ f_EPTF_HTTP_Transport_socketClosed(vl_connId);
+
+ // administrate port as free
+ //if (f_EPTF_FBQ_itemIsBusy(0, v_EPTF_HTTP_Transport_portDB[pl_group].portQueue)) {
+ // f_EPTF_FBQ_moveFromBusyToFreeTail(0,
+ // v_EPTF_HTTP_Transport_portDB[pl_group].portQueue);
+ //}
+
+ // administrate as IDLE port
+ if (f_EPTF_FBQ_itemIsBusy(0, v_EPTF_HTTP_Transport_portDB[pl_group].portStateQueue)) {
+ f_EPTF_FBQ_moveFromBusyToFreeTail(0,
+ v_EPTF_HTTP_Transport_portDB[pl_group].portStateQueue);
+ }
+ }
+
+ f_EPTF_HTTP_Transport_debug(%definitionId & ": Connection (" &
+ int2str(vl_connId) & ") closed for port at " &
+ f_EPTF_HTTP_LocalTransport_createGroupPortInfoString(pl_group, 0));
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_LocalTransport_halfCloseConnection_defaultGroup
+ //
+ // Purpose:
+ // Function to half close connections for a given port group
+ //
+ // Parameters:
+ // - pl_group - *in* *integer* - port index
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // State of all opened ports will be set to half closed
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_LocalTransport_halfCloseConnection_defaultGroup(
+ in integer pl_group)
+ runs on EPTF_HTTP_LocalTransport_CT
+ {
+ f_EPTF_HTTP_Transport_debug("### " & %definitionId & "()");
+
+ if (not f_EPTF_HTTP_LocalTransport_checkGroup(pl_group)) { return; };
+
+ var boolean vl_hasMoreElement;
+ var integer i; //, vl_ports;
+
+ //vl_ports := sizeof(v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase);
+
+ vl_hasMoreElement := f_EPTF_FBQ_getBusyHeadIdx(i, v_EPTF_HTTP_Transport_portDB[pl_group].portQueue);
+ while (vl_hasMoreElement)
+ //for (i := 0; i < vl_ports; i := i + 1)
+ {
+ if (v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[i].state != IDLE and
+ v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[i].state != HALFCLOSED)
+ {
+ f_EPTF_Base_assert(%definitionId &
+ ": Port is not in IDLE/HALFCLOSED state but connection id is missing at " &
+ f_EPTF_HTTP_LocalTransport_createGroupPortInfoString(pl_group, i),
+ -1 != v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[i].connectionId);
+
+ v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[i].state := HALFCLOSED;
+
+ f_EPTF_HTTP_Transport_debug(%definitionId & ": Port state is set to " &
+ "half closed at " &
+ f_EPTF_HTTP_LocalTransport_createGroupPortInfoString(pl_group, i));
+ }
+
+ vl_hasMoreElement := f_EPTF_FBQ_getFwdBusyItemIdx(i, v_EPTF_HTTP_Transport_portDB[pl_group].portQueue);
+ }
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_LocalTransport_halfCloseConnection_defaultPort
+ //
+ // Purpose:
+ // Auxialry funtion to close a given port
+ //
+ // Parameters:
+ // - pl_group - *in* *integer* - port index
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_LocalTransport_halfCloseConnection_defaultPort(
+ in integer pl_group)
+ runs on EPTF_HTTP_LocalTransport_CT
+ {
+ f_EPTF_HTTP_Transport_debug("### " & %definitionId & "()");
+
+ if (not f_EPTF_HTTP_LocalTransport_checkGroup(pl_group)) { return; };
+
+ if (v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[0].state != IDLE and
+ v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[0].state != HALFCLOSED and
+ f_EPTF_FBQ_itemIsBusy(0, v_EPTF_HTTP_Transport_portDB[pl_group].portQueue))
+ {
+ f_EPTF_Base_assert(%definitionId &
+ ": Port is not in IDLE/HALFCLOSED state but connection id is missing at " &
+ f_EPTF_HTTP_LocalTransport_createGroupPortInfoString(pl_group, 0),
+ -1 != v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[0].connectionId);
+
+ v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[0].state := HALFCLOSED;
+
+ f_EPTF_HTTP_Transport_debug(%definitionId & ": Port state is set to " &
+ "half closed at " &
+ f_EPTF_HTTP_LocalTransport_createGroupPortInfoString(pl_group, 0));
+ }
+ else
+ {
+ f_EPTF_HTTP_Transport_warning(%definitionId &
+ ": Connection already half closed!");
+ }
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_LocalTransport_createGroupPortInfoString
+ //
+ // Purpose:
+ // Helper function to create port information string for logging
+ //
+ // Parameters:
+ // - pl_group - *in* *integer* - group index
+ // - pl_port - *in* *integer* - port index
+ //
+ // Return Value:
+ // *charstring* - the created information string
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // Information string will be 'group (<group index>) - <group name> at
+ // port index <port index>: Local: <local host information> / Remote:
+ // <remote host information>'
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_LocalTransport_createGroupPortInfoString(
+ in integer pl_group,
+ in integer pl_port)
+ runs on EPTF_HTTP_LocalTransport_CT return charstring
+ {
+ var EPTF_HTTP_HostInformation vl_local := {"", -1}, vl_remote := {"", -1};
+ if( sizeof(v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase) > pl_port ) {
+ var integer vl_localIdx := v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[pl_port].localhostInfoIdx;
+ var integer vl_remoteIdx := v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[pl_port].remotehostInfoIdx;
+
+ if (0 <= vl_localIdx)
+ {
+ vl_local := v_EPTF_HTTP_Transport_localHostInformationList[
+ v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[pl_port].localhostInfoIdx];
+ }else{
+ vl_local := v_EPTF_HTTP_Transport_portDB[pl_group].baseLocalHostInformation
+ }
+
+ if (0 <= vl_remoteIdx)
+ {
+ vl_remote := v_EPTF_HTTP_Transport_remoteHostInformationList[
+ v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[pl_port].remotehostInfoIdx];
+ }
+ } else {
+ f_EPTF_HTTP_Transport_debug(%definitionId & " Not fully initialized portDB: v_EPTF_HTTP_Transport_portDB:" &
+ log2str(v_EPTF_HTTP_Transport_portDB) & " pl_group: " & log2str(pl_group) & " pl_port: " & log2str(pl_port));
+ }
+ return "group (" & int2str(pl_group) & ") - " & v_EPTF_HTTP_Transport_portDB[pl_group].name &
+ " at port index " & int2str(pl_port) &
+ ": Local: " & log2str(vl_local) & " / Remote: " & log2str(vl_remote);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_LocalTransport_createUniqueGroupName
+ //
+ // Purpose:
+ // Creates a unique group name for port groups
+ //
+ // Parameters:
+ // - pl_basename - *in* *charstring* - base name for port names
+ //
+ // Return Value:
+ // - charstring - the created group name
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // The function appends a number to the provided pl_basename and increases
+ // the attached number till the created name will be unique
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_LocalTransport_createUniqueGroupName(
+ in charstring pl_basename)
+ runs on EPTF_HTTP_LocalTransport_CT return charstring
+ {
+ var integer vl_dummy;
+ var charstring vl_groupName := pl_basename & "." & int2str(v_nameIdx);
+
+ while (f_EPTF_str2int_HashMap_Find(v_EPTF_HTTP_Transport_groupName2Idx_HM,
+ vl_groupName, vl_dummy))
+ {
+ v_nameIdx := v_nameIdx + 1;
+ vl_groupName := pl_basename & "." & int2str(v_nameIdx);
+ }
+
+ f_EPTF_HTTP_Transport_debug(%definitionId &
+ ": Unique group name created: " & vl_groupName);
+
+ return vl_groupName;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_LocalTransport_registerGroupFunctions
+ //
+ // Purpose:
+ // Registers handler functions to a port group
+ //
+ // Parameters:
+ // - pl_group - *in* *integer* - group index
+ // - pl_portMode - *in* *boolean* - port group creation mode
+ // (port/group mode)
+ // - pl_funcs - *in* <EPTF_HTTP_Transport_UserFunctions> - record
+ // containing function references of handler functions
+ //
+ // Return Value:
+ // *charstring* - the created group name
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // The function should be applied to an already created port group with
+ // set instant connection close, instant connection open parameters.
+ //
+ // If the port group which the function is applied to has a set
+ // handler function reference index (defaultFIdx != -1), then the functions
+ // which are set in pl_funcs will be used to overdefine the default
+ // handler functions. The ones that are omit in pl_funcs will be left
+ // unchanged.
+ //
+ // If the port group which the function is applied to doesn't have a set
+ // handler function reference index (defaultFIdx != -1), then all the
+ // handler functions will be redefined. If a function reference is omit in
+ // pl_funcs, the handler function will be overdefined with default functions
+ // based on instant connection close, instant connection open parameters
+ // of the port group, otherwise the set function reference will be used to
+ // redefine the handler function.
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_LocalTransport_registerGroupFunctions(
+ in integer pl_group,
+ in boolean pl_portMode,
+ in EPTF_HTTP_Transport_UserFunctions pl_funcs)
+ runs on EPTF_HTTP_LocalTransport_CT return integer
+ {
+ if (not f_EPTF_HTTP_LocalTransport_checkGroup(pl_group)) { return -1; };
+
+ var integer vl_index;
+ var charstring vl_key;
+ var EPTF_HTTP_Transport_Function vl_funcs := c_HTTP_Transport_initFunction;
+
+ f_EPTF_Base_assert(%definitionId &
+ ": Group not yet initialized (" & int2str(pl_group) & ")",
+ pl_group < sizeof(v_EPTF_HTTP_Transport_portDB) and f_EPTF_FBQ_itemIsBusy(pl_group, v_EPTF_HTTP_Transport_groupQueue));
+
+ // checks if function group has been checked before
+ var boolean vl_override := v_EPTF_HTTP_Transport_portDB[pl_group].defaultFIdx == -1;
+ var boolean vl_iconn := v_EPTF_HTTP_Transport_portDB[pl_group].instantConnOpen;
+ var boolean vl_iclose := v_EPTF_HTTP_Transport_portDB[pl_group].instantConnClose;
+
+ // creates new candidate function group for the the port group
+ if (ispresent(pl_funcs.addPort) and pl_funcs.addPort != null) {
+ vl_funcs.addPort := pl_funcs.addPort;
+ } else {
+ if (vl_override) {
+ vl_funcs.addPort := refers(f_EPTF_HTTP_LocalTransport_addPortToGroup_default);
+ }
+ }
+
+ if (ispresent(pl_funcs.removePort) and pl_funcs.removePort != null) {
+ vl_funcs.removePort := pl_funcs.removePort;
+ } else {
+ if (vl_override) {
+ vl_funcs.removePort := refers(f_EPTF_HTTP_LocalTransport_removePortFromGroup_default);
+ }
+ }
+
+ if (ispresent(pl_funcs.selectPort) and pl_funcs.selectPort != null)
+ {
+ vl_funcs.selectPort := pl_funcs.selectPort;
+ } else {
+ if (vl_override) {
+ if (pl_portMode) {
+ vl_funcs.selectPort := refers(
+ f_EPTF_HTTP_LocalTransport_selectPortInGroup_defaultPort);
+ }
+ else {
+ vl_funcs.selectPort := refers(
+ f_EPTF_HTTP_LocalTransport_selectPortInGroup_defaultGroup);
+ }
+ }
+ }
+
+ /* MOVED TO COMPONENT VARIABLE vf_getGroupAndPort
+ if (ispresent(pl_funcs.getGroupAndPort) and pl_funcs.getGroupAndPort != null)
+ {
+ vl_funcs.getGroupAndPort := pl_funcs.getGroupAndPort;
+ }
+ else {
+ if (vl_override) {
+ if (pl_portMode) {
+ vl_funcs.getGroupAndPort := refers(
+ f_EPTF_HTTP_LocalTransport_getGroupAndPort_defaultGroup);
+ }
+ else {
+ vl_funcs.getGroupAndPort := refers(
+ f_EPTF_HTTP_LocalTransport_getGroupAndPort_defaultPort);
+ }
+ }
+ }
+ */
+
+ if (ispresent(pl_funcs.sendMessage) and pl_funcs.sendMessage != null)
+ {
+ vl_funcs.sendMessage := pl_funcs.sendMessage;
+ }
+ else {
+ if (vl_override) {
+ if (vl_iconn) {
+ vl_funcs.sendMessage := refers(
+ f_EPTF_HTTP_LocalTransport_sendMessage_default_IC);
+ }
+ else {
+ vl_funcs.sendMessage := refers(
+ f_EPTF_HTTP_LocalTransport_sendMessage_default_NIC);
+ }
+ }
+ }
+
+ if (ispresent(pl_funcs.closePortOfUser) and pl_funcs.closePortOfUser != null)
+ {
+ vl_funcs.closePortOfUser := pl_funcs.closePortOfUser;
+ }
+ else {
+ if (vl_override) {
+ vl_funcs.closePortOfUser := refers(f_EPTF_HTTP_LocalTransport_closePortOfUser_default);
+ }
+ }
+
+ if (ispresent(pl_funcs.freePortOfUser) and pl_funcs.freePortOfUser != null)
+ {
+ vl_funcs.freePortOfUser := pl_funcs.freePortOfUser;
+ }
+ else {
+ if (vl_override) {
+ vl_funcs.freePortOfUser := refers(f_EPTF_HTTP_LocalTransport_freePortOfUser_default);
+ }
+ }
+
+ if (ispresent(pl_funcs.openPort) and pl_funcs.openPort != null)
+ {
+ vl_funcs.openPort := pl_funcs.openPort;
+ }
+ else {
+ if (vl_override) {
+ if (pl_portMode) {
+ vl_funcs.openPort := refers(
+ f_EPTF_HTTP_LocalTransport_openConnection_defaultPort);
+ }
+ else {
+ vl_funcs.openPort := refers(
+ f_EPTF_HTTP_LocalTransport_openConnection_defaultGroup);
+ }
+ }
+ }
+
+
+ if (ispresent(pl_funcs.closeConnection) and pl_funcs.closeConnection != null)
+ {
+ vl_funcs.closeConnection := pl_funcs.closeConnection;
+ }
+ else {
+ if (vl_override) {
+ if (pl_portMode) {
+ vl_funcs.closeConnection := refers(
+ f_EPTF_HTTP_LocalTransport_closeConnection_defaultPort);
+ }
+ else {
+ vl_funcs.closeConnection := refers(
+ f_EPTF_HTTP_LocalTransport_closeConnection_defaultGroup);
+ }
+ }
+ }
+
+ if (ispresent(pl_funcs.halfClosePort) and pl_funcs.halfClosePort != null)
+ {
+ vl_funcs.halfClosePort := pl_funcs.halfClosePort;
+ }
+ else {
+ if (vl_override) {
+ if (pl_portMode) {
+ vl_funcs.halfClosePort := refers(
+ f_EPTF_HTTP_LocalTransport_halfCloseConnection_defaultPort);
+ }
+ else {
+ vl_funcs.halfClosePort := refers(
+ f_EPTF_HTTP_LocalTransport_halfCloseConnection_defaultGroup);
+ }
+ }
+ }
+
+ if (ispresent(pl_funcs.receiveMessage) and pl_funcs.receiveMessage != null) {
+ vl_funcs.receiveMessage := pl_funcs.receiveMessage;
+ }
+ else {
+ if (vl_override) {
+ if (vl_iclose) {
+ vl_funcs.receiveMessage := refers(
+ f_EPTF_HTTP_LocalTransport_receiveMessage_default_IC);
+ }
+ else {
+ vl_funcs.receiveMessage := refers(
+ f_EPTF_HTTP_LocalTransport_receiveMessage_default_NIC);
+ }
+ }
+ }
+
+ if (ispresent(pl_funcs.receiveEvent) and pl_funcs.receiveEvent != null) {
+ vl_funcs.receiveEvent := pl_funcs.receiveEvent;
+ }
+ else {
+ if (vl_override) {
+ vl_funcs.receiveEvent := refers(f_EPTF_HTTP_LocalTransport_receiveEvent_default);
+ }
+ }
+
+ // creates a hash map key from the function group
+ vl_key := log2str(vl_funcs)
+
+ // if function group is already existing, then return id
+ if (f_EPTF_str2int_HashMap_Find(v_EPTF_HTTP_Transport_functions2Idx_HM,
+ vl_key, vl_index))
+ {
+ return vl_index;
+ }
+
+ // if function group was not existing, then add new element
+ vl_index := sizeof(v_EPTF_HTTP_Transport_functionDB);
+
+ f_EPTF_HTTP_Transport_debug(%definitionId & ": New database index: " & int2str(vl_index) &
+ " for functions: " & vl_key);
+
+ v_EPTF_HTTP_Transport_functionDB[vl_index] := vl_funcs;
+
+ f_EPTF_str2int_HashMap_Insert(v_EPTF_HTTP_Transport_functions2Idx_HM,
+ vl_key, vl_index);
+
+ f_EPTF_HTTP_Transport_debug(%definitionId & ": Functions are registered to group (" &
+ int2str(pl_group) & " - " & v_EPTF_HTTP_Transport_portDB[pl_group].name & ": " & vl_key &
+ " at position " & int2str(vl_index) & " in function database!");
+
+ return vl_index;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_LocalTransport_registerServerGroupFunctions
+ //
+ // Purpose:
+ // Registers handler functions to a server port group
+ //
+ // Parameters:
+ // - pl_group - *in* *integer* - group index
+ // - pl_funcs - *in* <EPTF_HTTP_Transport_ServerUserFunctions> - record
+ // containing function references of handler functions
+ //
+ // Return Value:
+ // *charstring* - the created group name
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // The function should be applied to an already created port group with
+ // set instant connection close, instant connection open parameters.
+ //
+ // If the port group which the function is applied to has a set
+ // handler function reference index (defaultFIdx != -1), then the functions
+ // which are set in pl_funcs will be used to overdefine the default
+ // handler functions. The ones that are omit in pl_funcs will be left
+ // unchanged.
+ //
+ // If the port group which the function is applied to doesn't have a set
+ // handler function reference index (defaultFIdx != -1), then all the
+ // handler functions will be redefined. If a function reference is omit in
+ // pl_funcs, the handler function will be overdefined with default functions
+ // based on instant connection close, instant connection open parameters
+ // of the port group, otherwise the set function reference will be used to
+ // redefine the handler function.
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_LocalTransport_registerServerGroupFunctions(
+ in integer pl_group,
+ in EPTF_HTTP_Transport_ServerUserFunctions pl_funcs)
+ runs on EPTF_HTTP_LocalTransport_CT
+ return integer
+ {
+ if (not f_EPTF_HTTP_LocalTransport_checkGroup(pl_group)) { return -1; };
+
+ var integer vl_index;
+ var charstring vl_key;
+ var EPTF_HTTP_Transport_Function vl_funcs := c_HTTP_Transport_initFunction;
+
+ f_EPTF_Base_assert(%definitionId &
+ ": Group not yet initialized (" & int2str(pl_group) & ")",
+ pl_group < sizeof(v_EPTF_HTTP_Transport_portDB) and f_EPTF_FBQ_itemIsBusy(pl_group, v_EPTF_HTTP_Transport_groupQueue));
+
+ // checks if function group has been checked before
+ var boolean vl_override := v_EPTF_HTTP_Transport_portDB[pl_group].defaultFIdx == -1;
+ var boolean vl_iclose := v_EPTF_HTTP_Transport_portDB[pl_group].instantConnClose;
+
+ if (ispresent(pl_funcs.removePort) and pl_funcs.removePort != null) {
+ vl_funcs.removePort := pl_funcs.removePort;
+ } else {
+ if (vl_override) {
+ vl_funcs.removePort := refers(f_EPTF_HTTP_LocalTransport_removePortFromGroupServer_default);
+ }
+ }
+
+ if (ispresent(pl_funcs.listen) and pl_funcs.listen != null){
+ vl_funcs.listen := pl_funcs.listen;
+ }else{
+ if (vl_override) {
+ vl_funcs.listen := refers(f_EPTF_HTTP_LocalTransport_listen_default);
+ }
+ }
+
+ if (ispresent(pl_funcs.createIncomingConn) and pl_funcs.createIncomingConn != null){
+ vl_funcs.createIncomingConn := pl_funcs.createIncomingConn;
+ }else{
+ if (vl_override) {
+ vl_funcs.createIncomingConn := refers(f_EPTF_HTTP_LocalTransport_createIncomingConn_default);
+ }
+ }
+
+ if (ispresent(pl_funcs.removeIncomingConn) and pl_funcs.removeIncomingConn != null){
+ vl_funcs.removeIncomingConn := pl_funcs.removeIncomingConn;
+ }else{
+ if (vl_override) {
+ vl_funcs.removeIncomingConn := refers(f_EPTF_HTTP_LocalTransport_removeIncomingConn_default);
+ }
+ }
+
+ if (ispresent(pl_funcs.receiveEvent) and pl_funcs.receiveEvent != null) {
+ vl_funcs.receiveEvent := pl_funcs.receiveEvent;
+ }
+ else {
+ if (vl_override) {
+ vl_funcs.receiveEvent := refers(f_EPTF_HTTP_LocalTransport_receiveEventServer_default);
+ }
+ }
+
+ if (ispresent(pl_funcs.receiveMessage) and pl_funcs.receiveMessage != null) {
+ vl_funcs.receiveMessage := pl_funcs.receiveMessage;
+ }
+ else {
+ if (vl_override) {
+ vl_funcs.receiveMessage := refers(
+ f_EPTF_HTTP_LocalTransport_receiveMessageServer_default);
+ }
+ }
+
+ if (ispresent(pl_funcs.sendResponse) and pl_funcs.sendResponse != null)
+ {
+ vl_funcs.sendResponse := pl_funcs.sendResponse;
+ }
+ else {
+ if (vl_override) {
+ if (vl_iclose) {
+ vl_funcs.sendResponse := refers(
+ f_EPTF_HTTP_LocalTransport_sendResponse_default_IC);
+ }
+ else {
+ vl_funcs.sendResponse := refers(
+ f_EPTF_HTTP_LocalTransport_sendResponse_default_NIC);
+ }
+ }
+ }
+
+ if (ispresent(pl_funcs.closePort) and pl_funcs.listen != null){
+ vl_funcs.closePort := pl_funcs.closePort;
+ }else{
+ if (vl_override) {
+ vl_funcs.closePort := refers(f_EPTF_HTTP_LocalTransport_closePort_default);
+ }
+ }
+
+ // creates a hash map key from the function group
+ vl_key := log2str(vl_funcs)
+
+ // if function group is already existing, then return id
+ if (f_EPTF_str2int_HashMap_Find(v_EPTF_HTTP_Transport_functions2Idx_HM,
+ vl_key, vl_index))
+ {
+ return vl_index;
+ }
+
+ // if function group was not existing, then add new element
+ vl_index := sizeof(v_EPTF_HTTP_Transport_functionDB);
+
+ f_EPTF_HTTP_Transport_debug(%definitionId & ": New database index: " & int2str(vl_index) &
+ " for functions: " & vl_key);
+
+ v_EPTF_HTTP_Transport_functionDB[vl_index] := vl_funcs;
+
+ f_EPTF_str2int_HashMap_Insert(v_EPTF_HTTP_Transport_functions2Idx_HM,
+ vl_key, vl_index);
+
+ f_EPTF_HTTP_Transport_debug(%definitionId & ": Functions are registered to group (" &
+ int2str(pl_group) & " - " & v_EPTF_HTTP_Transport_portDB[pl_group].name & ": " & vl_key &
+ " at position " & int2str(vl_index) & " in function database!");
+
+ return vl_index;
+
+ }
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_LocalTransport_checkGroup
+ //
+ // Purpose:
+ // Check the state of a port group
+ //
+ // Parameters:
+ // - pl_group - *in* *integer* - group index
+ //
+ // Return Value:
+ // *boolean* - true if group is okay, false otherwise
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // Check group index and group occupation state
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_LocalTransport_checkGroup(
+ in integer pl_group)
+ runs on EPTF_HTTP_LocalTransport_CT return boolean
+ {
+ if (pl_group == -1) {
+ f_EPTF_HTTP_Transport_warning(%definitionId & ": Group does not exist!");
+ return false;
+ }
+
+ if (sizeof(v_EPTF_HTTP_Transport_portDB) <= pl_group) {
+ f_EPTF_HTTP_Transport_warning(%definitionId & ": Invalid group index: " &
+ int2str(pl_group));
+ return false;
+ }
+
+ if (not f_EPTF_FBQ_itemIsBusy(pl_group, v_EPTF_HTTP_Transport_groupQueue)) {
+ f_EPTF_HTTP_Transport_warning(%definitionId & ": Group already deleted: " &
+ int2str(pl_group) & " - " & v_EPTF_HTTP_Transport_portDB[pl_group].name);
+ return false;
+ }
+
+ return true;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_LocalTransport_addLocalHostInformation
+ //
+ // Purpose:
+ // Function to add new Local Host Information to the LocalHostInformation database
+ //
+ // Parameters:
+ // pl_hostInformation - *in* - <EPTF_HTTP_HostInformation> - The local host information
+ //
+ // Return Value:
+ // *integer* - the index of the database record
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_LocalTransport_addLocalHostInformation (
+ in EPTF_HTTP_HostInformation pl_hostInformation)
+ runs on EPTF_HTTP_LocalTransport_CT return integer
+ {
+ var integer vl_EPTF_HTTP_index;
+
+ if (f_EPTF_str2int_HashMap_Find(v_EPTF_HTTP_Transport_localHostHashMap,
+ pl_hostInformation.hostIPAddress&int2str(pl_hostInformation.hostPort),
+ vl_EPTF_HTTP_index))
+ {
+ f_EPTF_HTTP_Transport_debug(%definitionId &
+ ": Local HostIPAddress already exists: "&int2str(vl_EPTF_HTTP_index));
+ }
+ else
+ {
+ vl_EPTF_HTTP_index := sizeof(v_EPTF_HTTP_Transport_localHostInformationList);
+
+ f_EPTF_str2int_HashMap_Insert(v_EPTF_HTTP_Transport_localHostHashMap,
+ pl_hostInformation.hostIPAddress&int2str(pl_hostInformation.hostPort),
+ vl_EPTF_HTTP_index);
+
+ v_EPTF_HTTP_Transport_localHostInformationList[vl_EPTF_HTTP_index] := pl_hostInformation;
+
+ f_EPTF_HTTP_Transport_debug(%definitionId &
+ ": Local HostIPAddress does not exist, now added: "&int2str(vl_EPTF_HTTP_index));
+ }
+
+ return vl_EPTF_HTTP_index;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_LocalTransport_addRemoteHostInformation
+ //
+ // Purpose:
+ // Function to add new Remote Host Information to the LocalHostInformation database
+ //
+ // Parameters:
+ // pl_hostInformation - *in* - <EPTF_HTTP_HostInformation> - The remote host information
+ //
+ // Return Value:
+ // *integer* - the index of the database record
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_LocalTransport_addRemoteHostInformation (
+ in EPTF_HTTP_HostInformation pl_hostInformation)
+ runs on EPTF_HTTP_LocalTransport_CT
+ return integer
+ {
+ var integer vl_EPTF_HTTP_index;
+
+ if (f_EPTF_str2int_HashMap_Find(v_EPTF_HTTP_Transport_remoteHostHashMap,
+ pl_hostInformation.hostIPAddress&int2str(pl_hostInformation.hostPort),
+ vl_EPTF_HTTP_index))
+ {
+ f_EPTF_HTTP_Transport_debug(%definitionId &
+ ": Remote HostIPAddress already exists: "&int2str(vl_EPTF_HTTP_index));
+ }
+ else
+ {
+ vl_EPTF_HTTP_index := sizeof(v_EPTF_HTTP_Transport_remoteHostInformationList);
+
+ f_EPTF_str2int_HashMap_Insert(v_EPTF_HTTP_Transport_remoteHostHashMap,
+ pl_hostInformation.hostIPAddress&int2str(pl_hostInformation.hostPort),
+ vl_EPTF_HTTP_index);
+
+ v_EPTF_HTTP_Transport_remoteHostInformationList[vl_EPTF_HTTP_index] := pl_hostInformation;
+
+ f_EPTF_HTTP_Transport_debug(%definitionId &
+ ": Remote HostIPAddress not exists, now added: "&int2str(vl_EPTF_HTTP_index));
+ }
+
+ return vl_EPTF_HTTP_index;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_LocalTransport_addMessageLengthCalculationFunction
+ //
+ // Purpose:
+ // Function to add a new message length calculation function
+ //
+ // Parameters:
+ // pl_functionRef - *in* <f_IPL4_getMsgLen> - function reference of
+ // messagelength calculation function
+ //
+ // Return Value:
+ // *integer* - message length calcualtion function index
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_LocalTransport_addMessageLengthCalculationFunction(
+ in f_IPL4_getMsgLen pl_functionRef)
+ runs on EPTF_HTTP_LocalTransport_CT return integer
+ {
+ var integer vl_size :=
+ sizeof(v_EPTF_HTTPLocalTransport_lengthCalculationFunctions);
+
+ v_EPTF_HTTPLocalTransport_lengthCalculationFunctions[vl_size] :=
+ pl_functionRef;
+
+ return vl_size;
+ }
+
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_LocalTransport_setMessageLengthCalculationFunctionToConnId
+ //
+ // Purpose:
+ // Function to set a message length calculation function to a connection
+ // id
+ //
+ // Parameters:
+ // pl_connId - *in* *integer* - connection id
+ // pl_functionIdx - *in* *integer* - message length calculation
+ // function database index
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_LocalTransport_setMessageLengthCalculationFunctionToConnId(
+ in integer pl_connId,
+ in integer pl_functionIdx)
+ runs on EPTF_HTTP_LocalTransport_CT
+ {
+
+ f_EPTF_CommPort_IPL4_setMsgLen(pl_connId,
+ v_EPTF_HTTPLocalTransport_lengthCalculationFunctions[pl_functionIdx], {});
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_LocalTransport_getMessageLength
+ //
+ // Purpose:
+ // Function to get the message length of a stream
+ //
+ // Parameters:
+ // stream - *in* *octetstring* - stream
+ // args - *inout* - arguments
+ //
+ // Return Value:
+ // *integer* - message length of stream
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_LocalTransport_getMessageLength (
+ in octetstring stream,
+ inout ro_integer args)
+ return integer
+ {
+ return f_TCCMessageHandling_getMessageLength(stream)
+ }
+
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_LocalTransport_receiveMessage
+ //
+ // Purpose:
+ // Function to receive the incoming messages
+ //
+ // Parameters:
+ // -
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_LocalTransport_receiveMessage()
+ runs on EPTF_HTTP_LocalTransport_CT {
+
+ f_EPTF_HTTP_Transport_debug("### " & %definitionId &
+ "(): Message received on connection: " &
+ int2str(v_EPTF_CommPort_IPL4_aspRecvFrom.connId));
+
+ var integer vl_group, vl_port;
+
+ v_boolNoWarning := vf_getGroupAndPort.apply(v_EPTF_CommPort_IPL4_aspRecvFrom.connId, vl_group, vl_port);
+
+ v_EPTF_HTTP_Transport_lastReceivedGroup := vl_group;
+
+ v_EPTF_HTTP_Transport_functionDB[v_EPTF_HTTP_Transport_portDB[vl_group].defaultFIdx].receiveMessage.apply(
+ vl_group, vl_port,
+ v_EPTF_CommPort_IPL4_aspRecvFrom.msg);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_LocalTransport_receiveEvent
+ //
+ // Purpose:
+ // Function to receive the incoming events
+ //
+ // Parameters:
+ // -
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_LocalTransport_receiveEvent()
+ runs on EPTF_HTTP_LocalTransport_CT {
+
+ var integer vl_group, vl_port, vl_conn;
+
+ if (ischosen(v_EPTF_CommPort_IPL4_aspEvent.connOpened))
+ {
+ vl_conn := v_EPTF_CommPort_IPL4_aspEvent.connOpened.connId;
+ var integer vl_userData := -1;
+
+ f_EPTF_HTTP_Transport_debug("### " & %definitionId & "(): " &
+ "Event received on connection:" & int2str(vl_conn) & ": " &
+ log2str(v_EPTF_CommPort_IPL4_aspEvent));
+
+ v_resultNoWarning := f_EPTF_CommPort_IPL4_getUserData(vl_conn, vl_userData);
+
+ v_boolNoWarning := vf_getGroup.apply(vl_userData, vl_group);
+
+ v_EPTF_HTTP_Transport_lastReceivedGroup := vl_group;
+
+ v_EPTF_HTTP_Transport_functionDB[v_EPTF_HTTP_Transport_portDB[vl_group].defaultFIdx].receiveEvent.apply(
+ vl_group, vl_port,
+ //vl_conn,
+ //v_EPTF_HTTP_Transport_portDB[vl_group].portDatabase[vl_port].sessionId, //vl_conn,
+ c_EPTF_HTTP_inputIdx_connectionOpened);
+ }
+ else
+ if (ischosen(v_EPTF_CommPort_IPL4_aspEvent.connClosed))
+ {
+ vl_conn := v_EPTF_CommPort_IPL4_aspEvent.connClosed.connId;
+
+ f_EPTF_HTTP_Transport_debug("### " & %definitionId & "()" &
+ "Event received on connection:" & int2str(vl_conn) & ": " &
+ log2str(v_EPTF_CommPort_IPL4_aspEvent));
+
+ v_boolNoWarning := vf_getGroupAndPort.apply(vl_conn, vl_group, vl_port);
+
+ v_EPTF_HTTP_Transport_lastReceivedGroup := vl_group;
+
+ v_EPTF_HTTP_Transport_functionDB[v_EPTF_HTTP_Transport_portDB[vl_group].defaultFIdx].receiveEvent.apply(
+ vl_group, vl_port,
+ //vl_conn,
+ //v_EPTF_HTTP_Transport_portDB[vl_group].portDatabase[vl_port].sessionId, //vl_conn,
+ c_EPTF_HTTP_inputIdx_connectionClosed);
+ }
+ else
+ if (ischosen(v_EPTF_CommPort_IPL4_aspEvent.result))
+ {
+ vl_conn := v_EPTF_CommPort_IPL4_aspEvent.result.connId;
+
+ f_EPTF_HTTP_Transport_debug("### " & %definitionId & "(): " &
+ "Event received on connection: " & int2str(vl_conn) & ": " &
+ log2str(v_EPTF_CommPort_IPL4_aspEvent));
+
+ v_boolNoWarning := vf_getGroupAndPort.apply(vl_conn, vl_group, vl_port);
+
+ v_EPTF_HTTP_Transport_lastReceivedGroup := vl_group;
+
+ if (v_EPTF_CommPort_IPL4_aspEvent.result.errorCode == omit)
+ {
+ v_EPTF_HTTP_Transport_functionDB[v_EPTF_HTTP_Transport_portDB[vl_group].defaultFIdx].receiveEvent.apply(
+ vl_group, vl_port,
+ //vl_conn,
+ //v_EPTF_HTTP_Transport_portDB[vl_group].portDatabase[vl_port].sessionId, //vl_conn,
+ c_EPTF_HTTP_inputIdx_OKReceived);
+ }
+ else
+ {
+ v_EPTF_HTTP_Transport_functionDB[v_EPTF_HTTP_Transport_portDB[vl_group].defaultFIdx].receiveEvent.apply(
+ vl_group, vl_port,
+ //vl_conn,
+ //v_EPTF_HTTP_Transport_portDB[vl_group].portDatabase[vl_port].sessionId, //vl_conn,
+ c_EPTF_HTTP_inputIdx_errorReceived);
+ }
+ }
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_LocalTransport_closePortOfUser
+ //
+ // Purpose:
+ // Function to close the port of an HTTP user
+ //
+ // Parameters:
+ // pl_connId - *in* *integer* - group id
+ // pl_sessionId - *in* *integer* - session id of HTTP user
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_LocalTransport_closePortOfUser(
+ in integer pl_groupId,
+ in integer pl_sessionId)
+ runs on EPTF_HTTP_LocalTransport_CT
+ {
+ if (not f_EPTF_HTTP_LocalTransport_checkGroup(pl_groupId)) { return; };
+
+ v_EPTF_HTTP_Transport_functionDB[
+ v_EPTF_HTTP_Transport_portDB[pl_groupId].defaultFIdx].closePortOfUser.apply(
+ pl_groupId,
+ pl_sessionId);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_LocalTransport_freePortOfUser
+ //
+ // Purpose:
+ // Function to free the port of an HTTP user
+ //
+ // Parameters:
+ // pl_groupId - *in* *integer* - group id
+ // pl_sessionId - *in* *integer* - session id of HTTP user
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_LocalTransport_freePortOfUser(
+ in integer pl_groupId,
+ in integer pl_sessionId)
+ runs on EPTF_HTTP_LocalTransport_CT
+ {
+ if (not f_EPTF_HTTP_LocalTransport_checkGroup(pl_groupId)) { return; };
+
+ v_EPTF_HTTP_Transport_functionDB[
+ v_EPTF_HTTP_Transport_portDB[pl_groupId].defaultFIdx].freePortOfUser.apply(
+ pl_groupId,
+ pl_sessionId);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_LocalTransport_connectionOpen
+ //
+ // Purpose:
+ // Function to open the connection
+ //
+ // Parameters:
+ // pl_connId - *in* *integer* - group id
+ // pl_sessionId - *in* *integer* - session id of HTTP user
+ //
+ // Return Value:
+ // <Result> - the result of port open
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_LocalTransport_connectionOpen(
+ in integer pl_connId,
+ in integer pl_sessionId)
+ runs on EPTF_HTTP_LocalTransport_CT return boolean
+ {
+ if (not f_EPTF_HTTP_LocalTransport_checkGroup(pl_connId)) { return false; };
+
+
+ var integer vl_port :=
+ v_EPTF_HTTP_Transport_functionDB[v_EPTF_HTTP_Transport_portDB[pl_connId].defaultFIdx].selectPort.apply(pl_connId);
+
+ if (vl_port == -1)
+ {
+ f_EPTF_HTTP_Transport_warning(%definitionId & ": No more free ports available!");
+ }
+ else
+ {
+ v_EPTF_HTTP_Transport_portDB[pl_connId].portDatabase[vl_port].sessionId := pl_sessionId;
+ }
+
+ return v_EPTF_HTTP_Transport_functionDB[v_EPTF_HTTP_Transport_portDB[pl_connId].defaultFIdx].openPort.apply(pl_connId);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_LocalTransport_connectionClose
+ //
+ // Purpose:
+ // Function to close the connection
+ //
+ // Parameters:
+ // pl_connId - *in* - <Result> - the connection ID
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_LocalTransport_connectionClose(
+ in integer pl_connId)
+ runs on EPTF_HTTP_LocalTransport_CT
+ {
+ if (not f_EPTF_HTTP_LocalTransport_checkGroup(pl_connId)) { return; };
+
+ v_EPTF_HTTP_Transport_functionDB[v_EPTF_HTTP_Transport_portDB[pl_connId].defaultFIdx].closeConnection.apply(pl_connId);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_LocalTransport_connectionClose
+ //
+ // Purpose:
+ // Function to close the connection
+ //
+ // Parameters:
+ // pl_connId - *in* - <Result> - the connection ID
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_LocalTransport_connectionHalfClose(
+ in integer pl_connId)
+ runs on EPTF_HTTP_LocalTransport_CT
+ {
+ if (not f_EPTF_HTTP_LocalTransport_checkGroup(pl_connId)) { return; };
+
+ v_EPTF_HTTP_Transport_functionDB[v_EPTF_HTTP_Transport_portDB[pl_connId].defaultFIdx].halfClosePort.apply(pl_connId);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_LocalTransport_sendMessage
+ //
+ // Purpose:
+ // Function to send the outgoing message
+ //
+ // Parameters:
+ // pl_connId - *in* *integer* - connection id
+ // pl_sessionId - *in* *integer* - session id
+ // pl_message - *in* *octetstring* - encoded message
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_LocalTransport_sendMessage(
+ in integer pl_connId,
+ in integer pl_sessionId,
+ in octetstring pl_message)
+ runs on EPTF_HTTP_LocalTransport_CT
+ {
+ if (not f_EPTF_HTTP_LocalTransport_checkGroup(pl_connId)) { return; };
+
+ v_EPTF_HTTP_Transport_functionDB[v_EPTF_HTTP_Transport_portDB[pl_connId].defaultFIdx].sendMessage.apply(
+ pl_connId,
+ pl_sessionId,
+ pl_message);
+
+ if (vf_EPTF_HTTP_messageSentHook != null) {
+ vf_EPTF_HTTP_messageSentHook.apply(pl_sessionId, pl_message);
+ }
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_LocalTransport_sendResponse
+ //
+ // Purpose:
+ // Function to send the response
+ //
+ // Parameters:
+ // pl_groupId - *in* *integer* - connection id
+ // pl_portId - *in* *integer* - unique port id
+ // pl_seqNum - *in* *integer* - sequnence number of the response
+ // pl_message - *in* *octetstring* - encoded message
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_LocalTransport_sendResponse(
+ in integer pl_groupId,
+ in integer pl_portId,
+ in integer pl_seqNum,
+ in octetstring pl_message)
+ runs on EPTF_HTTP_LocalTransport_CT
+ {
+ if (not f_EPTF_HTTP_LocalTransport_checkGroup(pl_groupId)) { return; };
+
+ v_EPTF_HTTP_Transport_functionDB[v_EPTF_HTTP_Transport_portDB[pl_groupId].defaultFIdx].sendResponse.apply(
+ pl_groupId,
+ pl_portId,
+ pl_seqNum,
+ pl_message);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_LocalTransport_listen
+ //
+ // Purpose:
+ // Function to create a listening socket in a server port group.
+ //
+ // Parameters:
+ // pl_groupId - *in* *integer* - the group ID
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_LocalTransport_listen(
+ in integer pl_groupId)
+ runs on EPTF_HTTP_LocalTransport_CT
+ return integer
+ {
+ if (not f_EPTF_HTTP_LocalTransport_checkGroup(pl_groupId)) { return -1; };
+
+ return v_EPTF_HTTP_Transport_functionDB[v_EPTF_HTTP_Transport_portDB[pl_groupId].defaultFIdx].listen.apply(pl_groupId);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_LocalTransport_closePort
+ //
+ // Purpose:
+ // Closes a socket in a server port.
+ //
+ // Parameters:
+ // pl_groupId - *in* *integer* - the group ID
+ // pl_portId - *in* *integer* - the port ID
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_LocalTransport_closePort(
+ in integer pl_groupId,
+ in integer pl_portId)
+ runs on EPTF_HTTP_LocalTransport_CT
+ {
+ if (not f_EPTF_HTTP_LocalTransport_checkGroup(pl_groupId)) { return; };
+
+ v_EPTF_HTTP_Transport_functionDB[v_EPTF_HTTP_Transport_portDB[pl_groupId].defaultFIdx].closePort.apply(pl_groupId, pl_portId);
+ }
+
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_Transport_generatePortId
+ //
+ // Purpose:
+ // Generates a port identifier unique in the port group.
+ //
+ // Parameters:
+ // pl_group - *in* *integer* - connection id
+ //
+ // Return Value:
+ // integer - identifier
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_Transport_generatePortId(in integer pl_group)
+ runs on EPTF_HTTP_LocalTransport_CT
+ return integer
+ {
+ var integer vl_maxNoPortIds:=100000;
+ var integer vl_dummyIdx:=-1;
+ var integer vl_nextPortId:=v_EPTF_HTTP_Transport_portDB[pl_group].currentPortId;
+ var boolean vl_foundFreePortId:=false;
+
+ //TR: HK96316
+ for(var integer i:=0;i< vl_maxNoPortIds and not vl_foundFreePortId;i:=i+1) {
+ vl_nextPortId:=(vl_nextPortId+1) mod vl_maxNoPortIds;
+ if( not f_EPTF_int2int_HashMap_Find(v_EPTF_HTTP_Transport_portId2Idx_HM,vl_nextPortId,vl_dummyIdx) ){
+ vl_foundFreePortId:=true;
+ }
+ }
+
+ if(not vl_foundFreePortId) {
+ f_EPTF_HTTP_Transport_warning(log2str(%definitionId &
+ " : Error in generating the next free portId. There is no free portId and it will fail" ));
+ }
+ v_EPTF_HTTP_Transport_portDB[pl_group].currentPortId:=vl_nextPortId;
+ return vl_nextPortId;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_Transport_socketOpened
+ //
+ // Purpose:
+ // Creates the database entries needed in case of opening a new socket.
+ //
+ // Parameters:
+ // - pl_connId - *in* *integer* - connection Id
+ // - pl_groupId - *in* *integer* - the index of the group
+ // - pl_port - *inout* *integer* - the index of the port
+ //
+ // Return Value:
+ // boolean -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_Transport_socketOpened(in integer pl_connId, in integer pl_groupId, in integer pl_portId)
+ runs on EPTF_HTTP_LocalTransport_CT
+ {
+ f_EPTF_int2int_HashMap_Insert(v_EPTF_HTTP_Transport_connId2GroupId_HM,
+ pl_connId, pl_groupId);
+ f_EPTF_int2int_HashMap_Insert(v_EPTF_HTTP_Transport_connId2PortId_HM,
+ pl_connId, pl_portId);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_Transport_socketClosed
+ //
+ // Purpose:
+ // Removes the database entries needed in case of closing a socket.
+ //
+ // Parameters:
+ // - pl_connId - *in* *integer* - connection Id
+ //
+ // Return Value:
+ // boolean -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_Transport_socketClosed(in integer pl_connId)
+ runs on EPTF_HTTP_LocalTransport_CT
+ {
+ f_EPTF_int2int_HashMap_Erase(v_EPTF_HTTP_Transport_connId2GroupId_HM, pl_connId);
+ f_EPTF_int2int_HashMap_Erase(v_EPTF_HTTP_Transport_connId2PortId_HM, pl_connId);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_setFunc_getGroupAndPort
+ //
+ // Purpose:
+ // Registers the group and port search function
+ //
+ // Parameters:
+ // pl_func - *in* <EPTF_HTTP_Transport_GetGroupAndPort_FT> - function reference
+ //
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_setFunc_getGroupAndPort(in EPTF_HTTP_Transport_GetGroupAndPort_FT pl_func)
+ runs on EPTF_HTTP_LocalTransport_CT
+ {
+ vf_getGroupAndPort := pl_func;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_setFunc_getGroup
+ //
+ // Purpose:
+ // Registers the group search function
+ //
+ // Parameters:
+ // pl_func - *in* <EPTF_HTTP_Transport_GetGroup_FT> - function reference
+ //
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_setFunc_getGroup(in EPTF_HTTP_Transport_GetGroup_FT pl_func)
+ runs on EPTF_HTTP_LocalTransport_CT
+ {
+ vf_getGroup := pl_func;
+ }
+
+} // group LocalTransport
+
+///////////////////////////////////////////////////////////////////////////////
+// Group: EPTF_HTTP_RemoteTransport
+//
+// Purpose:
+// Functions of the EPTF HTTP Remote Transport
+//
+///////////////////////////////////////////////////////////////////////////////
+group EPTF_HTTP_RemoteTransport {
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Altstep: as_EPTF_HTTP_RemoteTransport_handler
+ //
+ // Purpose:
+ // Altstep to handle the incoming messages from the mapper component
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ altstep as_EPTF_HTTP_RemoteTransport_handler()
+ runs on EPTF_HTTP_RemoteTransport_CT
+ {
+ [] v_EPTF_HTTP_RemoteTransport_commPort.receive(EPTF_HTTP_Transport_Receive:?) -> value v_EPTF_HTTP_RemoteTransport_receive
+ {
+ vf_EPTF_HTTP_RemoteTransport_handleReceive.apply({
+ v_EPTF_HTTP_RemoteTransport_receive.groupId,
+ v_EPTF_HTTP_RemoteTransport_receive.sessionId,
+ v_EPTF_HTTP_RemoteTransport_receive.seqNum,
+ v_EPTF_HTTP_RemoteTransport_receive.reveivedMessage});
+
+ repeat;
+ }
+ [] v_EPTF_HTTP_RemoteTransport_commPort.receive(EPTF_HTTP_Transport_Result:?) -> value v_EPTF_HTTP_RemoteTransport_result
+ {
+ vf_EPTF_HTTP_RemoteTransport_eventReceive.apply({
+ v_EPTF_HTTP_RemoteTransport_result.groupId,
+ v_EPTF_HTTP_RemoteTransport_result.sessionId,
+ v_EPTF_HTTP_RemoteTransport_result.resultType});
+
+ repeat;
+ }
+ [] v_EPTF_HTTP_RemoteTransport_commPort.receive(EPTF_HTTP_Transport_Error:?) -> value v_EPTF_HTTP_RemoteTransport_error
+ {
+ vf_EPTF_HTTP_RemoteTransport_socketErrorReceive.apply({
+ v_EPTF_HTTP_RemoteTransport_error.groupId,
+ v_EPTF_HTTP_RemoteTransport_error.sessionId,
+ v_EPTF_HTTP_RemoteTransport_error.result});
+
+ repeat;
+ }
+ [] v_EPTF_HTTP_RemoteTransport_commPort.receive(EPTF_HTTP_Transport_ListenEvent:?) -> value v_EPTF_HTTP_RemoteTransport_listenEvent
+ {
+ vf_EPTF_HTTP_RemoteTransport_listenSocketEvent.apply({
+ v_EPTF_HTTP_RemoteTransport_listenEvent.groupId,
+ v_EPTF_HTTP_RemoteTransport_listenEvent.hostInfo,
+ v_EPTF_HTTP_RemoteTransport_listenEvent.eventType});
+
+ repeat;
+ }
+ [] v_EPTF_HTTP_RemoteTransport_commPort.receive(EPTF_HTTP_Transport_ListenError:?) -> value v_EPTF_HTTP_RemoteTransport_listenError
+ {
+ vf_EPTF_HTTP_RemoteTransport_listenSocketError.apply({
+ v_EPTF_HTTP_RemoteTransport_listenError.groupId,
+ v_EPTF_HTTP_RemoteTransport_listenError.hostInfo,
+ v_EPTF_HTTP_RemoteTransport_listenError.transportError});
+
+ repeat;
+ }
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_RemoteTransport_init_CT
+ //
+ // Purpose:
+ // Function to init the RemoteTransport component
+ //
+ // Parameters:
+ // pl_selfName - *in* *charstring* - self name of the component
+ // pl_handleReceive - *in* - <EPTF_HTTP_messageProcess_FT> - receive
+ // function
+ // pl_eventReceiveFunction - *in* - <EPTF_HTTP_eventReceive_FT> -
+ // event receive function
+ //
+ // Return Value:
+ // *integer* - if the component initialize already the return value
+ // will be -1
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_RemoteTransport_init_CT(
+ in charstring pl_selfName := "EPTF_HTTP_RemoteTransport",
+ in EPTF_HTTP_messageProcess_FT pl_handleReceive,
+ in EPTF_HTTP_eventReceive_FT pl_eventReceiveFunction,
+ in EPTF_HTTP_socketErrorReceive_FT pl_socketErrorReceiveFunction,
+ in EPTF_HTTP_listenSocketEvent_FT pl_listenSocketEvent := null,
+ in EPTF_HTTP_listenSocketError_FT pl_listenSocketError := null)
+ runs on EPTF_HTTP_RemoteTransport_CT
+ return integer
+ {
+ if (v_EPTF_HTTP_RemoteTransport_initialized)
+ {
+ log(%definitionId & ": " & // intentionally simple log
+ "The HTTP RemoteTransport component already initialized!");
+ return -1;
+ }
+
+ v_EPTF_HTTP_RemoteTransport_selfName := pl_selfName
+
+ f_EPTF_Logging_init_CT(pl_selfName);
+
+ v_EPTF_HTTP_Transport_loggingMaskId :=
+ f_EPTF_Logging_registerComponentMasks(
+ tsp_EPTF_HTTP_Transport_loggingComponentMask,
+ c_EPTF_HTTP_Transport_loggingEventClasses,
+ EPTF_Logging_CLL);
+
+ if (tsp_EPTF_HTTP_Transport_loggingEnable)
+ {
+ f_EPTF_Logging_enableLocalMask(
+ v_EPTF_HTTP_Transport_loggingMaskId,
+ c_EPTF_HTTP_Transport_loggingClassIdx_Debug);
+ }
+ else
+ {
+ f_EPTF_Logging_disableLocalMask(
+ v_EPTF_HTTP_Transport_loggingMaskId,
+ c_EPTF_HTTP_Transport_loggingClassIdx_Debug);
+ }
+
+
+ if (tsp_EPTF_HTTP_Transport_bufferLogEnable)
+ {
+ f_EPTF_Logging_enableLocalMask(
+ v_EPTF_HTTP_Transport_loggingMaskId,
+ c_EPTF_HTTP_Transport_loggingClassIdx_BufferDebug);
+ }else
+ {
+ f_EPTF_Logging_disableLocalMask(
+ v_EPTF_HTTP_Transport_loggingMaskId,
+ c_EPTF_HTTP_Transport_loggingClassIdx_BufferDebug);
+ }
+
+ vf_EPTF_HTTP_RemoteTransport_handleReceive := pl_handleReceive;
+ vf_EPTF_HTTP_RemoteTransport_eventReceive := pl_eventReceiveFunction;
+ vf_EPTF_HTTP_RemoteTransport_socketErrorReceive := pl_socketErrorReceiveFunction;
+
+ vf_EPTF_HTTP_RemoteTransport_listenSocketEvent := pl_listenSocketEvent;
+ vf_EPTF_HTTP_RemoteTransport_listenSocketError := pl_listenSocketError;
+
+ f_EPTF_Base_init_CT(pl_selfName);
+ f_EPTF_Base_registerCleanup(refers(f_EPTF_HTTP_RemoteTransport_cleanup_CT));
+ f_EPTF_HashMap_init_CT(pl_selfName);
+
+ v_EPTF_HTTP_RemoteTransport_transportIdToConnId :=
+ f_EPTF_int2int_HashMap_New(c_EPTF_HTTP_RemoteTransport_HashMap_transportId2ConnId);
+
+ v_EPTF_HTTP_RemoteTransport_default := activate(as_EPTF_HTTP_RemoteTransport_handler());
+
+ //map(self:IPL4_PCO, system:IPL4_PCO);
+
+ v_EPTF_HTTP_RemoteTransport_initialized := true;
+
+ f_EPTF_HTTP_Transport_debug(%definitionId & ": The initialization of the " &
+ "HTTP RemoteTransport component is ready");
+
+ return 1;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_RemoteTranport_cleanup_CT
+ //
+ // Purpose:
+ // Function to clean the RemoteTransport component
+ //
+ // Parameters:
+ // -
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_RemoteTransport_cleanup_CT ()
+ runs on EPTF_HTTP_RemoteTransport_CT
+ {
+ if (not v_EPTF_HTTP_RemoteTransport_initialized) {
+ return;
+ }
+ v_EPTF_HTTP_RemoteTransport_initialized := false;
+
+ deactivate(v_EPTF_HTTP_RemoteTransport_default);
+ v_EPTF_HTTP_RemoteTransport_default := null;
+
+ f_EPTF_int2int_HashMap_Delete(c_EPTF_HTTP_RemoteTransport_HashMap_transportId2ConnId);
+ v_EPTF_HTTP_RemoteTransport_transportIdToConnId := -1;
+
+ vf_EPTF_HTTP_RemoteTransport_handleReceive := null;
+ //f_EPTF_Logging_debug(true,"The cleanup of the RemoteTransport component is ready");
+ }
+
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_RemoteTransport_newPortGroup
+ //
+ // Purpose:
+ // Function to create port group on the mapper component remotely
+ //
+ // Parameters:
+ // pl_result - *out* - <Result> - the result of sending
+ //
+ // Return Value:
+ // *integer* - index of newly created port group, -1 if creation is
+ // unsuccessful
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_RemoteTransport_newPortGroup(
+ in EPTF_HTTP_Transport_GroupMode pl_group)
+ runs on EPTF_HTTP_RemoteTransport_CT return integer
+ {
+ var integer vl_groupId;
+ var EPTF_HTTP_Transport_NewPortGroup vl_createPortGroup := {
+ groupInfo := pl_group
+ }
+
+ v_EPTF_HTTP_RemoteTransport_commPort.send(vl_createPortGroup);
+
+ alt {
+ [] v_EPTF_HTTP_RemoteTransport_commPort.receive (integer:?) -> value vl_groupId {}
+ }
+
+ return vl_groupId;
+ }
+
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_RemoteTransport_deletePortGroup
+ //
+ // Purpose:
+ // Function to delete port group on the mapper component remotely
+ //
+ // Parameters:
+ // pl_group - *in* - *integer* - port group index
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_RemoteTransport_deletePortGroup(
+ in integer pl_group)
+ runs on EPTF_HTTP_RemoteTransport_CT
+ {
+ var EPTF_HTTP_Transport_DeletePortGroup vl_deletePortGroup := {
+ groupId := pl_group
+ }
+
+ v_EPTF_HTTP_RemoteTransport_commPort.send(vl_deletePortGroup);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_RemoteTransport_newPort
+ //
+ // Purpose:
+ // Function to create a port on the mapper component remotely
+ //
+ // Parameters:
+ // pl_portInfo - *in* - <EPTF_HTTP_Transport_PortMode> - port data
+ //
+ // Return Value:
+ // *integer* - index of newly created port, -1 if creation is
+ // unsuccessful
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_RemoteTransport_newPort(
+ in EPTF_HTTP_Transport_PortMode pl_portInfo)
+ runs on EPTF_HTTP_RemoteTransport_CT return integer
+ {
+ var integer vl_groupId;
+ var EPTF_HTTP_Transport_NewPort vl_createPort := {
+ portInfo := pl_portInfo
+ }
+
+ v_EPTF_HTTP_RemoteTransport_commPort.send(vl_createPort);
+
+ alt {
+ [] v_EPTF_HTTP_RemoteTransport_commPort.receive (integer:?) -> value vl_groupId {}
+ }
+
+ return vl_groupId;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_RemoteTransport_newServerPort
+ //
+ // Purpose:
+ // Creates a server port on the mapper component remotely
+ //
+ // Parameters:
+ // pl_portInfo - *in* - <EPTF_HTTP_Transport_ServerPortMode> - server port data
+ //
+ // Return Value:
+ // *integer* - index of newly created port, -1 if creation is
+ // unsuccessful
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_RemoteTransport_newServerPort(
+ in EPTF_HTTP_Transport_ServerPortMode pl_portInfo)
+ runs on EPTF_HTTP_RemoteTransport_CT return integer
+ {
+ var integer vl_groupId;
+ var EPTF_HTTP_Transport_NewServerPort vl_createServerPort := {
+ portInfo := pl_portInfo
+ }
+
+ v_EPTF_HTTP_RemoteTransport_commPort.send(vl_createServerPort);
+
+ alt {
+ [] v_EPTF_HTTP_RemoteTransport_commPort.receive (integer:?) -> value vl_groupId {}
+ }
+
+ return vl_groupId;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_RemoteTransport_deletePort
+ //
+ // Purpose:
+ // Function to delete a port on the mapper component remotely
+ //
+ // Parameters:
+ // pl_group - *in* - *integer* - port group index
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_RemoteTransport_deletePort(
+ in integer pl_group)
+ runs on EPTF_HTTP_RemoteTransport_CT
+ {
+ var EPTF_HTTP_Transport_DeletePort vl_deletePort := {
+ portId := pl_group
+ }
+
+ v_EPTF_HTTP_RemoteTransport_commPort.send(vl_deletePort);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_RemoteTransport_addPortToGroup
+ //
+ // Purpose:
+ // Function to add a new port to a port group on the mapper component
+ // remotely
+ //
+ // Parameters:
+ // pl_group - *in* - <EPTF_HTTP_Transport_GroupMode> - port group data
+ // pl_result - *out* - <Result> - the result of sending
+ //
+ // Return Value:
+ // *boolean* - success result of new port addition to port group
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_RemoteTransport_addPortToGroup(
+ in integer pl_group)
+ runs on EPTF_HTTP_RemoteTransport_CT return boolean
+ {
+ var integer vl_groupId;
+ var EPTF_HTTP_Transport_AddPort vl_addPort := {
+ groupId := pl_group
+ }
+
+ v_EPTF_HTTP_RemoteTransport_commPort.send(vl_addPort);
+
+ alt {
+ [] v_EPTF_HTTP_RemoteTransport_commPort.receive (integer:?) -> value vl_groupId {}
+ }
+
+ if (vl_groupId == -1) { return false; } else { return true; };
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_RemoteTransport_removePortFromGroup
+ //
+ // Purpose:
+ // Function to remove a port from a port group on the mapper remotely
+ //
+ // Parameters:
+ // pl_group - *in* - *integer* - port group data
+ //
+ // Return Value:
+ // *boolean* - result of port removal
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_RemoteTransport_removePortFromGroup(
+ in integer pl_group)
+ runs on EPTF_HTTP_RemoteTransport_CT
+ {
+ var EPTF_HTTP_Transport_RemovePort vl_removePort := {
+ groupId := pl_group
+ }
+
+ v_EPTF_HTTP_RemoteTransport_commPort.send(vl_removePort);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_RemoteTransport_sendMessage
+ //
+ // Purpose:
+ // Function to send the messages to the mapper component
+ //
+ // Parameters:
+ // pl_connId - *in* - *integer* - connection id
+ // pl_sessionId - *in* - *integer* - session id
+ // pl_message - *in* *octetstring* - encoded message
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_RemoteTransport_sendMessage(
+ in integer pl_connId,
+ in integer pl_sessionId,
+ in octetstring pl_message)
+ runs on EPTF_HTTP_RemoteTransport_CT
+ {
+ var EPTF_HTTP_Transport_Send vl_send := {
+ groupId := pl_connId,
+ sessionId := pl_sessionId,
+ outgoingMessage := pl_message
+ }
+
+ v_EPTF_HTTP_RemoteTransport_commPort.send(vl_send);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_RemoteTransport_sendMessage
+ //
+ // Purpose:
+ // Function to close the port of an HTTP user
+ //
+ // Parameters:
+ // pl_groupId - *in* - *integer* - group id
+ // pl_sessionId - *in* - *integer* - session id
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_RemoteTransport_closePortOfUser(
+ in integer pl_groupId,
+ in integer pl_sessionId)
+ runs on EPTF_HTTP_RemoteTransport_CT
+ {
+ var EPTF_HTTP_Transport_ClosePortOfUser vl_send := {
+ groupId := pl_groupId,
+ sessionId := pl_sessionId
+ }
+
+ v_EPTF_HTTP_RemoteTransport_commPort.send(vl_send);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_RemoteTransport_freePortOfUser
+ //
+ // Purpose:
+ // Function to free the port of an HTTP user
+ //
+ // Parameters:
+ // pl_groupId - *in* - *integer* - group id
+ // pl_sessionId - *in* - *integer* - session id
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // If port is freed then it can be reused by any HTTP user. Incoming
+ // messages from last session will be dropped.
+ //
+ // If message arrives on the port from the last session after reuse,
+ // then the message will be forwarded to the new entity
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_RemoteTransport_freePortOfUser(
+ in integer pl_groupId,
+ in integer pl_sessionId)
+ runs on EPTF_HTTP_RemoteTransport_CT
+ {
+ var EPTF_HTTP_Transport_FreePortOfUser vl_send := {
+ groupId := pl_groupId,
+ sessionId := pl_sessionId
+ }
+
+ v_EPTF_HTTP_RemoteTransport_commPort.send(vl_send);
+ }
+
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_RemoteTransport_connectionOpen
+ //
+ // Purpose:
+ // Function to open the connection
+ //
+ // Parameters:
+ // pl_connId - *in* - *integer* - port group index
+ // pl_sessionId - *in* - *integer* - session id
+ //
+ // Return Value:
+ // *boolean* - result of connection opening
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_RemoteTransport_connectionOpen(
+ in integer pl_connId,
+ in integer pl_sessionId)
+ runs on EPTF_HTTP_RemoteTransport_CT return boolean
+ {
+ var integer vl_connId;
+ var EPTF_HTTP_Transport_Connect vl_connect := {
+ groupId := pl_connId,
+ sessionId := pl_sessionId
+ }
+
+ v_EPTF_HTTP_RemoteTransport_commPort.send(vl_connect);
+
+ alt {
+ [] v_EPTF_HTTP_RemoteTransport_commPort.receive (integer:?) -> value vl_connId {}
+ }
+
+ if (vl_connId == -1) { return false; } else { return true; };
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_RemoteTransport_connectionClose
+ //
+ // Purpose:
+ // Function to close the connection
+ //
+ // Parameters:
+ // pl_connId - *in* - *integer* - the connection ID
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_RemoteTransport_connectionClose(
+ in integer pl_connId)
+ runs on EPTF_HTTP_RemoteTransport_CT {
+
+ var EPTF_HTTP_Transport_Close vl_close := {
+ groupId := pl_connId
+ }
+
+ v_EPTF_HTTP_RemoteTransport_commPort.send(vl_close);
+
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_RemoteTransport_connectionHalfClose
+ //
+ // Purpose:
+ // Function to close the connection
+ //
+ // Parameters:
+ // pl_connId - *in* - *integer* - the connection ID
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_RemoteTransport_connectionHalfClose(
+ in integer pl_connId)
+ runs on EPTF_HTTP_RemoteTransport_CT {
+
+ var EPTF_HTTP_Transport_HalfClose vl_halfclose := {
+ groupId := pl_connId
+ }
+
+ v_EPTF_HTTP_RemoteTransport_commPort.send(vl_halfclose);
+
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_RemoteTransport_listen
+ //
+ // Purpose:
+ // Function to open a listening socket
+ //
+ // Parameters:
+ // pl_group - *in* - *integer* - the server port identifier
+ //
+ // Return Value:
+ // boolean - listen result
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_RemoteTransport_listen(
+ in integer pl_groupId)
+ runs on EPTF_HTTP_RemoteTransport_CT
+ return integer{
+
+ var integer vl_result;
+ var EPTF_HTTP_Transport_Listen vl_listen := {
+ groupId := pl_groupId
+ }
+
+ v_EPTF_HTTP_RemoteTransport_commPort.send(vl_listen);
+
+ alt {
+ [] v_EPTF_HTTP_RemoteTransport_commPort.receive (integer:?) -> value vl_result {}
+ }
+
+ return vl_result;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_RemoteTransport_closePort
+ //
+ // Purpose:
+ // Closes a socket in the server port.
+ //
+ // Parameters:
+ // pl_group - *in* - *integer* - the server port identifier
+ // pl_portId - *in* - *integer* - the port identifier
+ //
+ // Return Value:
+ // boolean - listen result
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_RemoteTransport_closePort(
+ in integer pl_groupId,
+ in integer pl_portId)
+ runs on EPTF_HTTP_RemoteTransport_CT
+ {
+ var EPTF_HTTP_Transport_closePort vl_close :={
+ groupId := pl_groupId,
+ portId := pl_portId
+ }
+
+ v_EPTF_HTTP_RemoteTransport_commPort.send(vl_close);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_RemoteTransport_sendResponse
+ //
+ // Purpose:
+ // Function to send the responses to the mapper component
+ //
+ // Parameters:
+ // pl_group - *in* - *integer* - server group identifier
+ // pl_portId - *in* - *integer* - unique port identifier of the request
+ // pl_message - *in* *octetstring* - encoded message
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_RemoteTransport_sendResponse(
+ in integer pl_groupId,
+ in integer pl_portId,
+ in integer pl_seqNum,
+ in octetstring pl_message
+ )
+ runs on EPTF_HTTP_RemoteTransport_CT{
+
+ var EPTF_HTTP_Transport_SendResponse vl_response :={
+ groupId := pl_groupId,
+ portId := pl_portId,
+ seqNum := pl_seqNum,
+ msg := pl_message
+ }
+
+ v_EPTF_HTTP_RemoteTransport_commPort.send(vl_response);
+ }
+} // group remoteTransport
+
+///////////////////////////////////////////////////////////////////////////////
+// Group: EPTF_HTTP_Mapper
+//
+// Purpose:
+// The functions of the EPTF HTTP Mapper
+//
+///////////////////////////////////////////////////////////////////////////////
+group EPTF_HTTP_Mapper {
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Altstep: as_EPTF_HTTP_Mapper_Handler
+ //
+ // Purpose:
+ // Altstep to handle the incoming messages from the RemoteTransport component
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ altstep as_EPTF_HTTP_Mapper_Handler()
+ runs on EPTF_HTTP_Mapper_CT
+ {
+ [] v_EPTF_HTTP_Mapper_commPort.receive (EPTF_HTTP_Transport_NewPortGroup:?) -> value v_EPTF_HTTP_Mapper_newPortGroup sender v_EPTF_HTTP_Mapper_componentRef
+ {
+ var integer vl_newGroupId :=
+ f_EPTF_HTTP_LocalTransport_newPortGroup(v_EPTF_HTTP_Mapper_newPortGroup.groupInfo);
+
+ if (vl_newGroupId == -1)
+ {
+ f_EPTF_HTTP_Transport_warning(%definitionId &
+ ": Creation of port group failed for group: " &
+ log2str(v_EPTF_HTTP_Mapper_newPortGroup.groupInfo));
+
+ v_EPTF_HTTP_Mapper_commPort.send(-1) to v_EPTF_HTTP_Mapper_componentRef;
+ }
+ else
+ {
+ f_EPTF_HTTP_Transport_debug(%definitionId &
+ "New group id acquired (" & int2str(vl_newGroupId) & " for group: " &
+ log2str(v_EPTF_HTTP_Mapper_newPortGroup.groupInfo));
+
+ v_EPTF_HTTP_Mapper_commPort.send(vl_newGroupId) to v_EPTF_HTTP_Mapper_componentRef;
+ }
+
+ repeat;
+ }
+ [] v_EPTF_HTTP_Mapper_commPort.receive (EPTF_HTTP_Transport_DeletePortGroup:?) -> value v_EPTF_HTTP_Mapper_deletePortGroup sender v_EPTF_HTTP_Mapper_componentRef
+ {
+ f_EPTF_HTTP_LocalTransport_deletePortGroup(v_EPTF_HTTP_Mapper_deletePortGroup.groupId);
+
+ repeat;
+ }
+ [] v_EPTF_HTTP_Mapper_commPort.receive (EPTF_HTTP_Transport_NewPort:?) -> value v_EPTF_HTTP_Mapper_newPort sender v_EPTF_HTTP_Mapper_componentRef
+ {
+ var integer vl_newGroupId :=
+ f_EPTF_HTTP_LocalTransport_newPort(v_EPTF_HTTP_Mapper_newPort.portInfo);
+
+ if (vl_newGroupId == -1)
+ {
+ f_EPTF_HTTP_Transport_warning(%definitionId &
+ ": Creation of port failed for port: " &
+ log2str(v_EPTF_HTTP_Mapper_newPort.portInfo));
+
+ v_EPTF_HTTP_Mapper_commPort.send(-1) to v_EPTF_HTTP_Mapper_componentRef;
+ }
+ else
+ {
+ f_EPTF_HTTP_Transport_debug(%definitionId &
+ "New port id acquired (" & int2str(vl_newGroupId) & " for port: " &
+ log2str(v_EPTF_HTTP_Mapper_newPort.portInfo));
+
+ v_EPTF_HTTP_Mapper_commPort.send(vl_newGroupId) to v_EPTF_HTTP_Mapper_componentRef;
+ }
+
+ repeat;
+ }
+ [] v_EPTF_HTTP_Mapper_commPort.receive (EPTF_HTTP_Transport_NewServerPort:?) -> value v_EPTF_HTTP_Mapper_newServerPort sender v_EPTF_HTTP_Mapper_componentRef
+ {
+ var integer vl_newGroupId := -1
+ var boolean vl_new :=
+ f_EPTF_HTTP_LocalTransport_createServerPort(v_EPTF_HTTP_Mapper_newServerPort.portInfo, vl_newGroupId);
+
+ if (vl_newGroupId == -1)
+ {
+ f_EPTF_HTTP_Transport_warning(%definitionId &
+ ": Creation of port failed for port: " &
+ log2str(v_EPTF_HTTP_Mapper_newServerPort.portInfo));
+
+ v_EPTF_HTTP_Mapper_commPort.send(-1) to v_EPTF_HTTP_Mapper_componentRef;
+
+ }
+ else
+ {
+ if (vl_new)
+ {
+ v_EPTF_HTTP_Mapper_inRoutingDatabase[vl_newGroupId] := c_EPTF_HTTP_initRoutingDBE;
+ }
+ var integer vl_size := v_EPTF_HTTP_Mapper_inRoutingDatabase[vl_newGroupId].size;
+
+ v_EPTF_HTTP_Mapper_inRoutingDatabase[vl_newGroupId].size := vl_size + 1;
+ v_EPTF_HTTP_Mapper_inRoutingDatabase[vl_newGroupId].compIdList[vl_size] := f_EPTF_Base_upcast(v_EPTF_HTTP_Mapper_componentRef);
+
+ f_EPTF_HTTP_Transport_debug(log2str(%definitionId,
+ ": Routing database: ", v_EPTF_HTTP_Mapper_inRoutingDatabase[vl_newGroupId]));
+
+ v_EPTF_HTTP_Mapper_commPort.send(vl_newGroupId) to v_EPTF_HTTP_Mapper_componentRef;
+ }
+
+ repeat;
+ }
+ [] v_EPTF_HTTP_Mapper_commPort.receive (EPTF_HTTP_Transport_DeletePort:?) -> value v_EPTF_HTTP_Mapper_deletePort sender v_EPTF_HTTP_Mapper_componentRef
+ {
+ f_EPTF_HTTP_LocalTransport_deletePort(v_EPTF_HTTP_Mapper_deletePort.portId);
+
+ repeat;
+ }
+ [] v_EPTF_HTTP_Mapper_commPort.receive (EPTF_HTTP_Transport_AddPort:?) -> value v_EPTF_HTTP_Mapper_addPort sender v_EPTF_HTTP_Mapper_componentRef
+ {
+ if (not f_EPTF_HTTP_LocalTransport_checkGroup(v_EPTF_HTTP_Mapper_addPort.groupId))
+ {
+ f_EPTF_HTTP_Transport_warning(%definitionId &
+ ": Wrong port group index: " & int2str(v_EPTF_HTTP_Mapper_addPort.groupId));
+
+ v_EPTF_HTTP_Mapper_commPort.send(-1) to v_EPTF_HTTP_Mapper_componentRef;
+
+ repeat;
+ };
+
+ if (v_EPTF_HTTP_Transport_functionDB[v_EPTF_HTTP_Transport_portDB[v_EPTF_HTTP_Mapper_addPort.groupId].defaultFIdx].addPort.apply(
+ v_EPTF_HTTP_Mapper_addPort.groupId))
+ {
+ v_EPTF_HTTP_Mapper_commPort.send(1) to v_EPTF_HTTP_Mapper_componentRef;
+ }
+ else
+ {
+ f_EPTF_HTTP_Transport_warning(%definitionId &
+ ": Port addition to group failed: " & int2str(v_EPTF_HTTP_Mapper_addPort.groupId));
+
+ v_EPTF_HTTP_Mapper_commPort.send(-1) to v_EPTF_HTTP_Mapper_componentRef;
+ }
+
+ repeat;
+ }
+ [] v_EPTF_HTTP_Mapper_commPort.receive (EPTF_HTTP_Transport_RemovePort:?) -> value v_EPTF_HTTP_Mapper_removePort sender v_EPTF_HTTP_Mapper_componentRef
+ {
+ if (not f_EPTF_HTTP_LocalTransport_checkGroup(v_EPTF_HTTP_Mapper_removePort.groupId))
+ {
+ f_EPTF_HTTP_Transport_warning(%definitionId &
+ ": Wrong port group index: " & int2str(v_EPTF_HTTP_Mapper_removePort.groupId));
+
+ repeat;
+ };
+
+ v_boolNoWarning := v_EPTF_HTTP_Transport_functionDB[v_EPTF_HTTP_Transport_portDB[v_EPTF_HTTP_Mapper_removePort.groupId].defaultFIdx
+ ].removePort.apply(v_EPTF_HTTP_Mapper_removePort.groupId);
+
+ repeat;
+ }
+ [] v_EPTF_HTTP_Mapper_commPort.receive (EPTF_HTTP_Transport_Connect:?) -> value v_EPTF_HTTP_Mapper_connect sender v_EPTF_HTTP_Mapper_componentRef
+ {
+ if (f_EPTF_HTTP_LocalTransport_connectionOpen(v_EPTF_HTTP_Mapper_connect.groupId, v_EPTF_HTTP_Mapper_connect.sessionId))
+ {
+ //v_EPTF_HTTP_Transport_lastReceivedGroup := v_EPTF_HTTP_Mapper_connect.groupId;
+ //v_EPTF_HTTP_Mapper_portId := f_EPTF_HTTP_LocalTransport_selectPortInGroup_defaultGroup(
+ // v_EPTF_HTTP_Mapper_groupId); // port on which we will send
+
+ //f_EPTF_Routing_processOutgoingMessage();
+
+ v_EPTF_HTTP_Mapper_commPort.send( v_EPTF_HTTP_Mapper_connect.groupId ) to v_EPTF_HTTP_Mapper_componentRef;
+ }
+ else
+ {
+ f_EPTF_HTTP_Transport_warning(%definitionId &
+ ": Open connection unsuccessful for port group: " &
+ int2str(v_EPTF_HTTP_Mapper_connect.groupId));
+
+ v_EPTF_HTTP_Mapper_commPort.send(-1) to v_EPTF_HTTP_Mapper_componentRef;
+ }
+
+ repeat;
+ }
+ [] v_EPTF_HTTP_Mapper_commPort.receive (EPTF_HTTP_Transport_Send:?) -> value v_EPTF_HTTP_Mapper_sendMessage sender v_EPTF_HTTP_Mapper_componentRef
+ {
+ v_EPTF_HTTP_Mapper_sessionId := v_EPTF_HTTP_Mapper_sendMessage.sessionId;
+ f_EPTF_Routing_processOutgoingMessage();
+
+ if (v_EPTF_HTTP_Mapper_sessionId != -1)
+ {
+ f_EPTF_HTTP_LocalTransport_sendMessage(
+ v_EPTF_HTTP_Mapper_sendMessage.groupId,
+ v_EPTF_HTTP_Mapper_sendMessage.sessionId,
+ v_EPTF_HTTP_Mapper_sendMessage.outgoingMessage);
+ }
+
+ repeat;
+ }
+ [] v_EPTF_HTTP_Mapper_commPort.receive (EPTF_HTTP_Transport_SendResponse:?) -> value v_EPTF_HTTP_Mapper_sendResponse sender v_EPTF_HTTP_Mapper_componentRef
+ {
+ v_EPTF_HTTP_Mapper_portId := v_EPTF_HTTP_Mapper_sendResponse.portId;
+
+ f_EPTF_HTTP_LocalTransport_sendResponse(
+ v_EPTF_HTTP_Mapper_sendResponse.groupId,
+ v_EPTF_HTTP_Mapper_sendResponse.portId,
+ v_EPTF_HTTP_Mapper_sendResponse.seqNum,
+ v_EPTF_HTTP_Mapper_sendResponse.msg);
+
+ repeat;
+ }
+ [] v_EPTF_HTTP_Mapper_commPort.receive (EPTF_HTTP_Transport_ClosePortOfUser:?) -> value v_EPTF_HTTP_Mapper_closePortOfUser sender v_EPTF_HTTP_Mapper_componentRef
+ {
+ f_EPTF_HTTP_LocalTransport_closePortOfUser(
+ v_EPTF_HTTP_Mapper_closePortOfUser.groupId,
+ v_EPTF_HTTP_Mapper_closePortOfUser.sessionId);
+
+ repeat;
+ }
+ [] v_EPTF_HTTP_Mapper_commPort.receive (EPTF_HTTP_Transport_FreePortOfUser:?) -> value v_EPTF_HTTP_Mapper_freePortOfUser sender v_EPTF_HTTP_Mapper_componentRef
+ {
+ f_EPTF_HTTP_LocalTransport_freePortOfUser(
+ v_EPTF_HTTP_Mapper_freePortOfUser.groupId,
+ v_EPTF_HTTP_Mapper_freePortOfUser.sessionId);
+
+ repeat;
+ }
+
+ [] v_EPTF_HTTP_Mapper_commPort.receive (EPTF_HTTP_Transport_Close:?) -> value v_EPTF_HTTP_Mapper_close sender v_EPTF_HTTP_Mapper_componentRef
+ {
+ if (not f_EPTF_HTTP_LocalTransport_checkGroup(v_EPTF_HTTP_Mapper_close.groupId))
+ {
+ f_EPTF_HTTP_Transport_warning(%definitionId &
+ ": Wrong port group index: " & int2str(v_EPTF_HTTP_Mapper_close.groupId));
+
+ repeat;
+ };
+
+ //for (var integer i := 0; i < sizeof(v_EPTF_HTTP_Transport_portDB[v_EPTF_HTTP_Transport_lastReceivedGroup].portDatabase); i := i + 1)
+ //{
+ // v_EPTF_HTTP_Mapper_portId := i;
+
+ // f_EPTF_Routing_processOutgoingMessage();
+ //}
+
+ f_EPTF_HTTP_LocalTransport_connectionClose(v_EPTF_HTTP_Mapper_close.groupId);
+
+ repeat;
+ }
+ [] v_EPTF_HTTP_Mapper_commPort.receive (EPTF_HTTP_Transport_HalfClose:?) -> value v_EPTF_HTTP_Mapper_halfClose sender v_EPTF_HTTP_Mapper_componentRef
+ {
+ if (not f_EPTF_HTTP_LocalTransport_checkGroup(v_EPTF_HTTP_Mapper_halfClose.groupId)) {
+ f_EPTF_HTTP_Transport_warning(%definitionId &
+ ": Wrong port group index: " & int2str(v_EPTF_HTTP_Mapper_halfClose.groupId));
+
+ repeat;
+ };
+
+ //for (var integer i := 0; i < sizeof(v_EPTF_HTTP_Transport_portDB[v_EPTF_HTTP_Transport_lastReceivedGroup].portDatabase); i := i + 1)
+ //{
+ // v_EPTF_HTTP_Mapper_portId := i;
+
+ // f_EPTF_Routing_processOutgoingMessage();
+ //}
+
+ f_EPTF_HTTP_LocalTransport_connectionHalfClose(
+ v_EPTF_HTTP_Mapper_halfClose.groupId);
+
+ repeat;
+ }
+ [] v_EPTF_HTTP_Mapper_commPort.receive (EPTF_HTTP_Transport_Listen:?) -> value v_EPTF_HTTP_Mapper_listen sender v_EPTF_HTTP_Mapper_componentRef
+ {
+ var integer vl_id := f_EPTF_HTTP_LocalTransport_listen(v_EPTF_HTTP_Mapper_listen.groupId);
+ v_EPTF_HTTP_Mapper_commPort.send(vl_id) to v_EPTF_HTTP_Mapper_componentRef;
+
+ repeat;
+ }
+ [] v_EPTF_HTTP_Mapper_commPort.receive (EPTF_HTTP_Transport_closePort:?) -> value v_EPTF_HTTP_Mapper_closePort sender v_EPTF_HTTP_Mapper_componentRef
+ {
+ f_EPTF_HTTP_LocalTransport_closePort(v_EPTF_HTTP_Mapper_closePort.groupId, v_EPTF_HTTP_Mapper_closePort.portId);
+ repeat;
+ }
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_Mapper_init_CT
+ //
+ // Purpose:
+ // Function to init the Mapper component
+ //
+ // Parameters:
+ // - pl_selfName - *in charstring* - the name of the component
+ // - pl_interfaceInformationList - <EPTF_CommPort_IPL4_InterfaceInformationList> - The defined interfaces
+ //
+ // Return Value:
+ // *integer* - if the component initialize already the return value will be -1
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_Mapper_init_CT(
+ in charstring pl_selfName := "",
+ in EPTF_CommPort_IPL4_InterfaceInformationList pl_interfaceInformationList := {},
+ in integer pl_mode := 0) //0: client mode, 1:server mode
+ runs on EPTF_HTTP_Mapper_CT
+ return integer
+ {
+ if (v_EPTF_HTTP_Mapper_initialized) {
+ log(%definitionId & // intentionally simple log!
+ "The Mapper component is initialized already");
+ return -1;
+ }
+
+ v_EPTF_HTTP_Mapper_componentId := {};
+ f_EPTF_HashMap_init_CT(pl_selfName);
+ v_EPTF_HTTP_Mapper_hashMapIdx := f_EPTF_int2int_HashMap_New(
+ c_EPTF_HTTP_Mapper_HashMap_routing);
+ v_intNoWarning := f_EPTF_HTTP_LocalTransport_init_CT(pl_selfName,
+ refers(f_EPTF_HTTP_Mapper_receiveMsg),
+ refers(f_EPTF_HTTP_Mapper_receiveEvent),
+ refers(f_EPTF_HTTP_Mapper_receiveSocketError),
+ pl_interfaceInformationList,
+ refers(f_EPTF_HTTP_Mapper_listenSocketEvent),
+ refers(f_EPTF_HTTP_Mapper_listenSocketError));
+
+ if (0 == pl_mode)//client mode
+ {
+ f_EPTF_Routing_init_CT(
+ refers(f_EPTF_HTTP_Mapper_processOutgoingMessage),
+ refers(f_EPTF_HTTP_Mapper_processIncomingMessage));
+ }else if (1 == pl_mode)//server mode
+ {
+ f_EPTF_Routing_init_CT(
+ -,
+ refers(f_EPTF_HTTP_Mapper_processIncomingMessageServer));
+ }
+
+ v_EPTF_HTTP_MapperRoutingUri2LGenDB.uri2lgenIdxHash :=
+ f_EPTF_str2int_HashMap_New(c_EPTF_HTTP_Transport_hashMapName_uri2idxHash);
+
+ f_EPTF_Base_init_CT(pl_selfName);
+ f_EPTF_Base_registerCleanup(refers(f_EPTF_HTTP_Mapper_cleanup_CT));
+
+ v_EPTF_HTTP_Mapper_initialized := true;
+
+ v_EPTF_HTTP_Mapper_default := activate(as_EPTF_HTTP_Mapper_Handler());
+
+ f_EPTF_HTTP_Transport_debug(%definitionId &
+ ": The initialization of the Mapper component is ready");
+
+ return 1;
+ }
+
+ function f_EPTF_HTTP_Mapper_CommPort_IPL4_setMsgLen(
+ in ConnectionId pl_connId,
+ in f_IPL4_getMsgLen pl_function,
+ in ro_integer pl_msgLenArgs)
+ runs on EPTF_HTTP_Mapper_CT
+ {
+ f_EPTF_CommPort_IPL4_setMsgLen(pl_connId, pl_function, pl_msgLenArgs);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_Mapper_cleanup_CT
+ //
+ // Purpose:
+ // Function to clean the Mapper component
+ //
+ // Parameters:
+ // -
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_Mapper_cleanup_CT()
+ runs on EPTF_HTTP_Mapper_CT
+ {
+ if (not v_EPTF_HTTP_Mapper_initialized) {
+ return;
+ }
+ v_EPTF_HTTP_Mapper_initialized := false;
+ f_EPTF_HTTP_Transport_debug("### " & %definitionId & "()");
+
+ v_EPTF_HTTP_Mapper_componentId := {};
+ v_EPTF_HTTP_Mapper_hashMapIdx := -1;
+
+ f_EPTF_int2int_HashMap_Delete(c_EPTF_HTTP_Mapper_HashMap_routing);
+
+ v_EPTF_HTTP_Mapper_default := null;
+
+ f_EPTF_HTTP_Transport_debug(%definitionId &
+ ": The cleanup of the Mapper component is ready");
+
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_Mapper_setRouting
+ //
+ // Purpose:
+ // Function to set routing information for Mapper database
+ //
+ // Parameters:
+ // pl_route - *in* <EPTF_HTTP_Mapper_RoutingList> - routing data
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_Mapper_setRouting(
+ in EPTF_HTTP_Mapper_RoutingList pl_route)
+ runs on EPTF_HTTP_Mapper_CT
+ {
+ f_EPTF_HTTP_Transport_debug("### " & %definitionId & "()");
+
+ var integer i, vl_maxGroupIdx := -1;
+
+ for (i := 0; i < sizeof(pl_route); i := i + 1)
+ {
+ if (vl_maxGroupIdx < pl_route[i].groupId) {
+ vl_maxGroupIdx := pl_route[i].groupId;
+ };
+ }
+
+ for (i := 0; i < vl_maxGroupIdx; i := i + 1)
+ {
+ v_EPTF_HTTP_Mapper_routingSetDatabase[i] := false;
+ }
+
+ for (i := 0; i < sizeof(pl_route); i := i + 1)
+ {
+ v_EPTF_HTTP_Mapper_inRoutingDatabase[pl_route[i].groupId] := {
+ ptr := 0,
+ size := sizeof(pl_route[i].compIdList),
+ compIdList := pl_route[i].compIdList
+ }
+
+ v_EPTF_HTTP_Mapper_routingSetDatabase[i] := true;
+ }
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_setRoutingUri2LGen_GetUriCallback
+ //
+ // Purpose:
+ // Function to set the fcb_EPTF_HTTP_MapperRoutingUri2LGen_GetUri.
+ // If fcb_EPTF_HTTP_MapperRoutingUri2LGen_GetUri is set, then the Mapper will use its return value
+ // to look up the subscribed LGen for the returned URI
+ //
+ // Parameters:
+ // pl_callback - *in* <EPTF_HTTP_MapperRoutingUri2LGen_GetUri_FT> - user function to return the URI
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_setRoutingUri2LGen_GetUriCallback(in EPTF_HTTP_MapperRoutingUri2LGen_GetUri_FT pl_callback) runs on EPTF_HTTP_Mapper_CT {
+ fcb_EPTF_HTTP_MapperRoutingUri2LGen_GetUri := pl_callback
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_getUri2LGenRoutingData
+ //
+ // Purpose:
+ // Looks up the subscribed LGen for <pl_uri>, and returns it in the <pl_lgenIdx>
+ //
+ // Parameters:
+ // pl_uri - *in* <charstring> - URI to look up
+ // pl_lgenIdx - *inout* <integer> - LGen index handling the URI
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ private function f_EPTF_HTTP_getUri2LGenRoutingData(in charstring pl_uri, inout integer pl_lgenIdx) runs on EPTF_HTTP_Mapper_CT return boolean {
+
+ if (f_EPTF_str2int_HashMap_Find(v_EPTF_HTTP_MapperRoutingUri2LGenDB.uri2lgenIdxHash, pl_uri, pl_lgenIdx)) {
+ return true;
+ }
+
+ return false;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_addUri2LGenRoutingData
+ //
+ // Purpose:
+ // Adds (subscribes) LGen <pl_lgenIdx> for URI <pl_uri>, and stores it in the database
+ //
+ // Parameters:
+ // pl_uri - *in* <charstring> - URI to look up
+ // pl_lgenIdx - *in* <integer> - LGen index handling the URI
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_addUri2LGenRoutingData(in charstring pl_uri, in integer pl_lgenIdx) runs on EPTF_HTTP_Mapper_CT {
+ f_EPTF_str2int_HashMap_Insert(v_EPTF_HTTP_MapperRoutingUri2LGenDB.uri2lgenIdxHash, pl_uri, pl_lgenIdx);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_removeUri2LGenRoutingData
+ //
+ // Purpose:
+ // Removes (unsubscribes) URI <pl_uri> from the URI <-> LGen database
+ //
+ // Parameters:
+ // pl_uri - *in* <charstring> - URI to look up
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_removeUri2LGenRoutingData(in charstring pl_uri) runs on EPTF_HTTP_Mapper_CT {
+ f_EPTF_str2int_HashMap_Erase(v_EPTF_HTTP_MapperRoutingUri2LGenDB.uri2lgenIdxHash, pl_uri);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_Mapper_processOutgoingMessage
+ //
+ // Purpose:
+ // Function to process the outgoing messages
+ //
+ // Parameters:
+ // -
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // Functions stores in a hash map the integer casted component id value
+ // of the component from which the message has been received with the
+ // key of the connection id value within the message
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_Mapper_processOutgoingMessage()
+ runs on EPTF_HTTP_Mapper_CT
+ {
+ var integer vl_dummy;
+ if (f_EPTF_int2int_HashMap_Find(
+ v_EPTF_HTTP_Mapper_hashMapIdx,
+ v_EPTF_HTTP_Mapper_sessionId,
+ vl_dummy))
+ {
+ f_EPTF_HTTP_Transport_warning(%definitionId &
+ ": A component reference for session id ("
+ & int2str(v_EPTF_HTTP_Mapper_sessionId) &
+ ") is already stored! Message not sent!");
+
+ v_EPTF_HTTP_Mapper_sessionId := -1;
+ }
+ else
+ {
+ f_EPTF_int2int_HashMap_Insert(
+ v_EPTF_HTTP_Mapper_hashMapIdx,
+ v_EPTF_HTTP_Mapper_sessionId,
+ f_EPTF_Base_upcast(v_EPTF_HTTP_Mapper_componentRef));
+
+ f_EPTF_HTTP_Transport_debug(%definitionId &
+ " Source component index (" &
+ int2str(f_EPTF_Base_upcast(v_EPTF_HTTP_Mapper_componentRef)) &
+ ") stored in hash map for session id (" &
+ int2str(v_EPTF_HTTP_Mapper_sessionId) & ")!");
+ }
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_Mapper_processIncomingMessage
+ //
+ // Purpose:
+ // Function to process the incoming messages
+ //
+ // Parameters:
+ // -
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // Function retrieves the integer casted component id to which the
+ // received message should be sent and then places this component id
+ // into the component variable v_EPTF_HTTP_Mapper_componentId
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_Mapper_processIncomingMessage()
+ runs on EPTF_HTTP_Mapper_CT
+ {
+ f_EPTF_HTTP_Transport_debug(log2str(%definitionId,
+ ": Incoming message received for session id: ",
+ v_EPTF_HTTP_Mapper_sessionId));
+
+ /*
+ if (v_EPTF_HTTP_Transport_lastReceivedGroup >= sizeof(v_EPTF_HTTP_Mapper_routingSetDatabase) or
+ not v_EPTF_HTTP_Mapper_routingSetDatabase[v_EPTF_HTTP_Transport_lastReceivedGroup])
+ {
+ f_EPTF_HTTP_Transport_warning(%definitionId &
+ ": Group id (" & int2str(v_EPTF_HTTP_Transport_lastReceivedGroup) &
+ ") not found in routing database!");
+
+ v_EPTF_HTTP_Mapper_componentId := -1;
+ }
+ else
+ {
+ var integer vl_ptr := v_EPTF_HTTP_Mapper_inRoutingDatabase[v_EPTF_HTTP_Transport_lastReceivedGroup].ptr;
+ var integer vl_size := v_EPTF_HTTP_Mapper_inRoutingDatabase[v_EPTF_HTTP_Transport_lastReceivedGroup].size;
+
+ //log(v_EPTF_HTTP_Mapper_inRoutingDatabase);
+ //log(vl_ptr);
+ //log(v_EPTF_HTTP_Mapper_groupId);
+ v_EPTF_HTTP_Mapper_componentId :=
+ v_EPTF_HTTP_Mapper_inRoutingDatabase[v_EPTF_HTTP_Transport_lastReceivedGroup].compIdList[vl_ptr];
+
+ f_EPTF_HTTP_Transport_debug(%definitionId &
+ " Destination component acquired (" &
+ int2str(v_EPTF_HTTP_Mapper_componentId) & ") for group id (" &
+ int2str(v_EPTF_HTTP_Transport_lastReceivedGroup) & ")!");
+
+ vl_ptr := vl_ptr + 1;
+ if (vl_ptr >= vl_size) { vl_ptr := 1; };
+ }
+ */
+
+ var integer vl_compId := -1;
+
+ if (f_EPTF_int2int_HashMap_Find(
+ v_EPTF_HTTP_Mapper_hashMapIdx,
+ v_EPTF_HTTP_Mapper_sessionId,
+ vl_compId))
+ {
+ f_EPTF_HTTP_Transport_debug(log2str(%definitionId,
+ " Destination component acquired (",
+ v_EPTF_HTTP_Mapper_componentId, ") for session id (",
+ int2str(v_EPTF_HTTP_Transport_lastReceivedGroup),")!"));
+
+ f_EPTF_int2int_HashMap_Erase(
+ v_EPTF_HTTP_Mapper_hashMapIdx,
+ v_EPTF_HTTP_Mapper_sessionId);
+
+ v_EPTF_HTTP_Mapper_componentId := {vl_compId};
+ }
+ else {
+ f_EPTF_HTTP_Transport_warning(%definitionId &
+ ": Session id (" & int2str(v_EPTF_HTTP_Mapper_sessionId) &
+ ") not found in hash map! Possibly connection closed remotely on Free port!");
+
+ v_EPTF_HTTP_Mapper_componentId := {};
+ }
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_Mapper_processIncomingMessageServer
+ //
+ // Purpose:
+ // Processes the incoming messages.
+ //
+ // Detailed Comments:
+ // The current LGen to send the request to is chosen round robin.
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_Mapper_processIncomingMessageServer()
+ runs on EPTF_HTTP_Mapper_CT
+ {
+ f_EPTF_HTTP_Transport_debug(%definitionId &
+ ": Incoming message received for group id: " &
+ int2str(v_EPTF_HTTP_Transport_lastReceivedGroup))
+
+ if(fcb_EPTF_HTTP_MapperRoutingUri2LGen_GetUri == null or (not isbound(v_EPTF_CommPort_IPL4_aspRecvFrom.msg))) {
+ var integer vl_current :=
+ v_EPTF_HTTP_Mapper_inRoutingDatabase[v_EPTF_HTTP_Transport_lastReceivedGroup].ptr;
+
+ v_EPTF_HTTP_Mapper_componentId := {v_EPTF_HTTP_Mapper_inRoutingDatabase[v_EPTF_HTTP_Transport_lastReceivedGroup].compIdList[vl_current]};
+
+ v_EPTF_HTTP_Mapper_inRoutingDatabase[v_EPTF_HTTP_Transport_lastReceivedGroup].ptr :=
+ (vl_current + 1) mod v_EPTF_HTTP_Mapper_inRoutingDatabase[v_EPTF_HTTP_Transport_lastReceivedGroup].size;
+ } else {
+ f_EPTF_HTTP_Transport_debug(%definitionId & ": Incoming message received, calling fcb_EPTF_HTTP_MapperRoutingUri2LGen_GetUri..");
+ var charstring vl_uri := fcb_EPTF_HTTP_MapperRoutingUri2LGen_GetUri.apply();
+ var integer vl_comp;
+ if(f_EPTF_HTTP_getUri2LGenRoutingData(vl_uri, vl_comp)) {
+ //log("LGen #", vl_comp, " is subscribed to the URI: ", vl_uri, ".");
+ v_EPTF_HTTP_Mapper_componentId := { vl_comp };
+ } else {
+ //log("No LGen is subscribed to the URI: ", vl_uri, ". Message discarded!");
+ v_EPTF_HTTP_Mapper_componentId := {};
+ }
+ }
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_Mapper_receiveMsg
+ //
+ // Purpose:
+ // Function to receive the incoming messages
+ //
+ // Parameters:
+ // pl_message - *in* <EPTF_HTTP_IncomingMessage> - incoming message from the transport layer
+ //
+ // Detailed Comments:
+ // Function performs routing of incoming messages. It determins to which
+ // load generator component the message should be sent based on
+ // the provided connection id and sends it to this component.
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_Mapper_receiveMsg(
+ in EPTF_HTTP_IncomingMessage pl_message)
+ runs on EPTF_HTTP_Mapper_CT
+ {
+ v_EPTF_HTTP_Mapper_sessionId := pl_message.sessionId;
+
+ f_EPTF_Routing_processIncomingMessage();
+
+ var EPTF_HTTP_Transport_Receive vl_receive := {
+ groupId := pl_message.groupId,
+ sessionId := pl_message.sessionId,
+ seqNum := pl_message.seqNum,
+ reveivedMessage := pl_message.httpMessage
+ }
+
+ for (var integer i := 0; i < sizeof(v_EPTF_HTTP_Mapper_componentId); i := i + 1)
+ {
+ v_EPTF_HTTP_Mapper_commPort.send(vl_receive) to f_EPTF_Base_downcast(v_EPTF_HTTP_Mapper_componentId[i]);
+ }
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_Mapper_receiveEvent
+ //
+ // Purpose:
+ // Function to receive the incoming events
+ //
+ // Parameters:
+ // pl_event - *in* <EPTF_HTTP_Event> - incoming event from the transport layer
+ //
+ // Detailed Comments:
+ // Function performs routing of incoming messages. It determins to which
+ // load generator component the message should be sent based on
+ // the provided connection id and sends it to this component.
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_Mapper_receiveEvent(
+ in EPTF_HTTP_Event pl_event)
+ runs on EPTF_HTTP_Mapper_CT
+ {
+ v_EPTF_HTTP_Mapper_sessionId := pl_event.sessionId;
+
+ f_EPTF_Routing_processIncomingMessage();
+
+ var EPTF_HTTP_Transport_Result vl_result := {
+ groupId := pl_event.groupId,
+ sessionId := pl_event.sessionId, //pl_sessionId,
+ resultType := pl_event.eventType
+ }
+
+ for (var integer i := 0; i < sizeof(v_EPTF_HTTP_Mapper_componentId); i := i + 1)
+ {
+ v_EPTF_HTTP_Mapper_commPort.send(vl_result) to f_EPTF_Base_downcast(v_EPTF_HTTP_Mapper_componentId[i]);
+ }
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_Mapper_receiveSocketError
+ //
+ // Purpose:
+ // Function to receive the incoming socket errors
+ //
+ // Parameters:
+ // pl_error - <EPTF_HTTP_Error> - the error message
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // Function performs routing of incoming messages. It determins to which
+ // load generator component the message should be sent based on
+ // the provided connection id and sends it to this component.
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_Mapper_receiveSocketError(
+ in EPTF_HTTP_EventError pl_error)
+ runs on EPTF_HTTP_Mapper_CT
+ {
+ v_EPTF_HTTP_Mapper_sessionId := pl_error.sessionId;
+ f_EPTF_Routing_processIncomingMessage();
+
+ var EPTF_HTTP_Transport_Error vl_result := {
+ groupId := pl_error.groupId,
+ sessionId := pl_error.sessionId, //pl_sessionId,
+ result := pl_error.transportError
+ }
+
+ for (var integer i := 0; i < sizeof(v_EPTF_HTTP_Mapper_componentId); i := i + 1)
+ {
+ v_EPTF_HTTP_Mapper_commPort.send(vl_result) to f_EPTF_Base_downcast(v_EPTF_HTTP_Mapper_componentId[i]);
+ }
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_Mapper_listenSocketEvent
+ //
+ // Purpose:
+ // Function to receive the incoming listening socket events
+ //
+ // Parameters:
+ // pl_event - <EPTF_HTTP_listenSocketEvent> -
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // Events are routed to all of the LGens belonging to the server port.
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_Mapper_listenSocketEvent(
+ in EPTF_HTTP_listenSocketEvent pl_event)
+ runs on EPTF_HTTP_Mapper_CT
+ {
+ var EPTF_HTTP_Transport_ListenEvent vl_result := {
+ groupId := pl_event.groupId,
+ hostInfo := pl_event.hostInfo,
+ eventType := pl_event.eventType
+ }
+
+ for (var integer i := 0; i < v_EPTF_HTTP_Mapper_inRoutingDatabase[v_EPTF_HTTP_Transport_lastReceivedGroup].size; i := i + 1)
+ {
+ v_EPTF_HTTP_Mapper_commPort.send(vl_result) to
+ f_EPTF_Base_downcast(v_EPTF_HTTP_Mapper_inRoutingDatabase[v_EPTF_HTTP_Transport_lastReceivedGroup].compIdList[i]);
+ }
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_Mapper_listenSocketError
+ //
+ // Purpose:
+ // Function to receive the incoming listening socket events
+ //
+ // Parameters:
+ // pl_error - <EPTF_HTTP_listenSocketError> -
+ //
+ // Return Value:
+ // -
+ //
+ // Errors:
+ // -
+ //
+ // Detailed Comments:
+ // Events are routed to all of the LGens belonging to the server port.
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_Mapper_listenSocketError(
+ in EPTF_HTTP_listenSocketError pl_error)
+ runs on EPTF_HTTP_Mapper_CT
+ {
+ var EPTF_HTTP_Transport_ListenError vl_result := {
+ groupId := pl_error.groupId,
+ hostInfo := pl_error.hostInfo,
+ transportError := pl_error.transportError
+ }
+
+ for (var integer i := 0; i < v_EPTF_HTTP_Mapper_inRoutingDatabase[v_EPTF_HTTP_Transport_lastReceivedGroup].size; i := i + 1)
+ {
+ v_EPTF_HTTP_Mapper_commPort.send(vl_result) to
+ f_EPTF_Base_downcast(v_EPTF_HTTP_Mapper_inRoutingDatabase[v_EPTF_HTTP_Transport_lastReceivedGroup].compIdList[i]);
+ }
+ }
+
+} // end of Group: Mapper
+
+///////////////////////////////////////////////////////////////////////////////
+// Group: EPTF_HTTP_Transport_Logging
+//
+// Purpose:
+// The functions of the EPTF HTTP Transport Logging
+//
+///////////////////////////////////////////////////////////////////////////////
+group EPTF_HTTP_Transport_Logging {
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_Transport_error
+ //
+ // Purpose:
+ // Function to log an error from EPTF HTTP Transport
+ //
+ // Parameters:
+ // - pl_message - *in* *charstring* - the message to log
+ //
+ // Return Value:
+ // -
+ //
+ // Errors & assertions:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_Transport_error(
+ in @lazy charstring pl_message)
+ runs on EPTF_HTTP_Transport_Logging_CT
+ {
+ f_EPTF_Logging_errorV2(pl_message,
+ v_EPTF_HTTP_Transport_loggingMaskId,
+ {c_EPTF_HTTP_Transport_loggingClassIdx_Error});
+ f_EPTF_Base_stopAll();
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_Transport_warning
+ //
+ // Purpose:
+ // Function to log a warning from EPTF HTTP Transport
+ //
+ // Parameters:
+ // - pl_message - *in* *charstring* - the message to log
+ //
+ // Return Value:
+ // -
+ //
+ // Errors & assertions:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_Transport_warning(
+ in @lazy charstring pl_message)
+ runs on EPTF_HTTP_Transport_Logging_CT
+ {
+ f_EPTF_Logging_warningV2(pl_message,
+ v_EPTF_HTTP_Transport_loggingMaskId,
+ {c_EPTF_HTTP_Transport_loggingClassIdx_Warning});
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_Transport_debug
+ //
+ // Purpose:
+ // Function to log a debug message from EPTF HTTP Transport
+ //
+ // Parameters:
+ // - pl_message - *in* *charstring* - the message to log
+ //
+ // Return Value:
+ // -
+ //
+ // Errors & assertions:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_Transport_debug(
+ in @lazy charstring pl_message)
+ runs on EPTF_HTTP_Transport_Logging_CT
+ {
+ f_EPTF_Logging_debugV2(pl_message,
+ v_EPTF_HTTP_Transport_loggingMaskId,
+ {c_EPTF_HTTP_Transport_loggingClassIdx_Debug});
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_Transport_bufferWarning
+ //
+ // Purpose:
+ // Function to log a buffer warning message from EPTF HTTP Transport
+ //
+ // Parameters:
+ // - pl_message - *in* *charstring* - the message to log
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_Transport_bufferWarning(
+ in @lazy charstring pl_message)
+ runs on EPTF_HTTP_Transport_Logging_CT
+ {
+ f_EPTF_Logging_warningV2(pl_message,
+ v_EPTF_HTTP_Transport_loggingMaskId,
+ {c_EPTF_HTTP_Transport_loggingClassIdx_BufferWarning});
+
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_Transport_bufferDebug
+ //
+ // Purpose:
+ // Function to log a buffer debug message from EPTF HTTP Transport
+ //
+ // Parameters:
+ // - pl_message - *in* *charstring* - the message to log
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_Transport_bufferDebug(
+ in @lazy charstring pl_message)
+ runs on EPTF_HTTP_Transport_Logging_CT
+ {
+ f_EPTF_Logging_debugV2(pl_message,
+ v_EPTF_HTTP_Transport_loggingMaskId,
+ {c_EPTF_HTTP_Transport_loggingClassIdx_BufferDebug});
+
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_Transport_debugEnabled
+ //
+ // Purpose:
+ // Function to check if debug is enabled for EPTF HTTP Transport
+ //
+ // Parameters:
+ // -
+ //
+ // Return Value:
+ // *boolean* - true if debug enalbed
+ //
+ // Errors & assertions:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_Transport_debugEnabled()
+ runs on EPTF_HTTP_Transport_Logging_CT
+ return boolean
+ {
+ return f_EPTF_Logging_isEnabled(
+ v_EPTF_HTTP_Transport_loggingMaskId,
+ c_EPTF_HTTP_Transport_loggingClassIdx_Debug);
+ }
+} // group Logging
+
+///////////////////////////////////////////////////////////////////////////////
+// Group: EPTF_HTTP_Transport_DB
+//
+// Purpose:
+// Contains the database handling functions.
+//
+///////////////////////////////////////////////////////////////////////////////
+group EPTF_HTTP_Transport_DB{
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_Transport_debugEnabled
+ //
+ // Purpose:
+ // Function to check if debug is enabled for EPTF HTTP Transport
+ //
+ // Parameters:
+ // -
+ //
+ // Return Value:
+ // *boolean* - true if debug enalbed
+ //
+ // Errors & assertions:
+ // -
+ //
+ // Detailed Comments:
+ // -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_Transport_Group_getName(in integer pl_groupId)
+ runs on EPTF_HTTP_LocalTransport_CT
+ return charstring
+ {
+ if (not f_EPTF_HTTP_LocalTransport_checkGroup(pl_groupId)) { return ""; };
+
+ return v_EPTF_HTTP_Transport_portDB[pl_groupId].name;
+ }
+
+ function f_EPTF_HTTP_Transport_Group_getLocHostInfo(in integer pl_groupId)
+ runs on EPTF_HTTP_LocalTransport_CT
+ return EPTF_HTTP_HostInformation
+ {
+ if (not f_EPTF_HTTP_LocalTransport_checkGroup(pl_groupId)) { return {"", -1}; };
+
+ return v_EPTF_HTTP_Transport_portDB[pl_groupId].baseLocalHostInformation;
+ }
+
+ function f_EPTF_HTTP_Transport_Group_getRemoteHostInfo(in integer pl_groupId)
+ runs on EPTF_HTTP_LocalTransport_CT
+ return EPTF_HTTP_HostInformation
+ {
+ if (not f_EPTF_HTTP_LocalTransport_checkGroup(pl_groupId)) { return {"", -1}; };
+
+ return v_EPTF_HTTP_Transport_portDB[pl_groupId].baseRemoteHostInformation;
+ }
+
+ function f_EPTF_HTTP_Transport_Group_getNumberOfPorts(in integer pl_groupId)
+ runs on EPTF_HTTP_LocalTransport_CT
+ return integer
+ {
+ if (not f_EPTF_HTTP_LocalTransport_checkGroup(pl_groupId)) { return -1; };
+
+ return v_EPTF_HTTP_Transport_portDB[pl_groupId].numberOfPorts;
+ }
+
+ function f_EPTF_HTTP_Transport_Group_getLocalportStep(in integer pl_groupId)
+ runs on EPTF_HTTP_LocalTransport_CT
+ return integer
+ {
+ if (not f_EPTF_HTTP_LocalTransport_checkGroup(pl_groupId)) { return -1; };
+
+ return v_EPTF_HTTP_Transport_portDB[pl_groupId].localportStep;
+ }
+
+ function f_EPTF_HTTP_Transport_Group_getRemoteportStep(in integer pl_groupId)
+ runs on EPTF_HTTP_LocalTransport_CT
+ return integer
+ {
+ if (not f_EPTF_HTTP_LocalTransport_checkGroup(pl_groupId)) { return -1; };
+
+ return v_EPTF_HTTP_Transport_portDB[pl_groupId].remoteportStep;
+ }
+
+ function f_EPTF_HTTP_Transport_Group_getUseSSL(in integer pl_groupId, inout boolean pl_useSSL)
+ runs on EPTF_HTTP_LocalTransport_CT
+ return boolean
+ {
+ if (not f_EPTF_HTTP_LocalTransport_checkGroup(pl_groupId)) { return false; };
+
+ pl_useSSL := v_EPTF_HTTP_Transport_portDB[pl_groupId].useSSL;
+ return true;
+ }
+
+ function f_EPTF_HTTP_Transport_Group_getInstantConnClose(in integer pl_groupId, inout boolean pl_instantConnClose)
+ runs on EPTF_HTTP_LocalTransport_CT
+ return boolean
+ {
+ if (not f_EPTF_HTTP_LocalTransport_checkGroup(pl_groupId)) { return false; };
+
+ pl_instantConnClose := v_EPTF_HTTP_Transport_portDB[pl_groupId].instantConnClose;
+ return true;
+ }
+
+ function f_EPTF_HTTP_Transport_Group_getInstantConnOpen(in integer pl_groupId, inout boolean pl_instantConnOpen)
+ runs on EPTF_HTTP_LocalTransport_CT
+ return boolean
+ {
+ if (not f_EPTF_HTTP_LocalTransport_checkGroup(pl_groupId)) { return false; };
+
+ pl_instantConnOpen := v_EPTF_HTTP_Transport_portDB[pl_groupId].instantConnOpen;
+ return true;
+ }
+
+}//EPTF_HTTP_Transport_DB
+
+///////////////////////////////////////////////////////////////////////////////
+// Group: EPTF_HTTP_Buffer
+//
+// Purpose:
+// Contains the buffer handling functions.
+//
+///////////////////////////////////////////////////////////////////////////////
+group EPTF_HTTP_Buffer{
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_MsgBuffer_init
+ //
+ // Purpose:
+ // Initializes the message buffer.
+ //
+ // Parameters:
+ // pl_buffer - *inout* <EPTF_HTTP_MessageBuffer> -
+ // pl_size - *in* *integer* - maximum size of the buffer
+ // pl_id - *in* *integer* - unique identifier of the buffer
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_MsgBuffer_init(inout EPTF_HTTP_MessageBuffer pl_buffer, in integer pl_size, in integer pl_id)
+ runs on EPTF_HTTP_LocalTransport_CT
+ {
+ f_EPTF_HTTP_RingBuffer_init(pl_buffer.seqNums, pl_size, pl_id);
+ pl_buffer.seqNum2messageIdxHM :=
+ f_EPTF_int2int_HashMap_New(c_EPTF_HTTP_LocalTransport_HashMap_seqNum2messageIdx & int2str(pl_id));
+ f_EPTF_FBQ_initFreeBusyQueue(pl_buffer.messageQueue);
+ pl_buffer.httpMessages := {}
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_RingBuffer_init
+ //
+ // Purpose:
+ // Initializes the sequence numbers.
+ //
+ // Parameters:
+ // pl_buffer - *inout* <EPTF_HTTP_SeqNumMgmt> -
+ // pl_size - *in* *integer* - maximum sequence number
+ // pl_id - *in* *integer* - unique identifier
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_RingBuffer_init(inout EPTF_HTTP_RingBuffer pl_buffer, in integer pl_size, in integer pl_id)
+ runs on EPTF_HTTP_LocalTransport_CT
+ {
+ pl_buffer.nextSeqNum := 0;
+ pl_buffer.waitForSeqNum := 0;
+ pl_buffer.usedSlots := 0;
+ pl_buffer.maxSize := pl_size;
+
+ pl_buffer.isSlotBusyHM :=
+ f_EPTF_int2int_HashMap_New(c_EPTF_HTTP_LocalTransport_HashMap_isSlotBusy & int2str(pl_id));
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_RingBuffer_clear
+ //
+ // Purpose:
+ // Clears the sequence numbers.
+ //
+ // Parameters:
+ // pl_buffer - *inout* <EPTF_HTTP_RingBuffer> -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_RingBuffer_clear(inout EPTF_HTTP_RingBuffer pl_buffer)
+ runs on EPTF_HTTP_LocalTransport_CT
+ {
+ pl_buffer.nextSeqNum := 0;
+ pl_buffer.waitForSeqNum := 0;
+ pl_buffer.usedSlots := 0;
+
+ f_EPTF_int2int_HashMap_Clear(pl_buffer.isSlotBusyHM);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_RingBuffer_erase
+ //
+ // Purpose:
+ // Clears the sequence numbers.
+ //
+ // Parameters:
+ // pl_buffer - *inout* <EPTF_HTTP_RingBuffer> -
+ // pl_id - *in* *integer* - unique identifier
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_RingBuffer_erase(inout EPTF_HTTP_RingBuffer pl_buffer, in integer pl_id)
+ runs on EPTF_HTTP_LocalTransport_CT
+ {
+ pl_buffer.nextSeqNum := 0;
+ pl_buffer.waitForSeqNum := 0;
+ pl_buffer.usedSlots := 0;
+
+ f_EPTF_int2int_HashMap_Delete(c_EPTF_HTTP_LocalTransport_HashMap_isSlotBusy & int2str(pl_id));
+
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_MsgBuffer_clear
+ //
+ // Purpose:
+ // Clears the message buffer.
+ //
+ // Parameters:
+ // pl_buffer - *inout* <EPTF_HTTP_Buffer> -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_MsgBuffer_clear(inout EPTF_HTTP_MessageBuffer pl_buffer)
+ runs on EPTF_HTTP_LocalTransport_CT
+ {
+ f_EPTF_HTTP_RingBuffer_clear(pl_buffer.seqNums);
+ f_EPTF_int2int_HashMap_Clear(pl_buffer.seqNum2messageIdxHM)
+ f_EPTF_FBQ_initFreeBusyQueue(pl_buffer.messageQueue);
+ pl_buffer.httpMessages := {}
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_MsgBuffer_erase
+ //
+ // Purpose:
+ // Erases the message buffer.
+ //
+ // Parameters:
+ // pl_buffer - *inout* <EPTF_HTTP_Buffer> -
+ // pl_id - *in* *integer* - unique identifier
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_MsgBuffer_erase(inout EPTF_HTTP_MessageBuffer pl_buffer, in integer pl_id)
+ runs on EPTF_HTTP_LocalTransport_CT
+ {
+ f_EPTF_HTTP_Transport_bufferDebug("### " & %definitionId & "()");
+
+ f_EPTF_HTTP_RingBuffer_erase(pl_buffer.seqNums, pl_id);
+ f_EPTF_int2int_HashMap_Delete(c_EPTF_HTTP_LocalTransport_HashMap_seqNum2messageIdx & int2str(pl_id))
+ pl_buffer.seqNum2messageIdxHM := -1;
+ f_EPTF_FBQ_initFreeBusyQueue(pl_buffer.messageQueue);
+ pl_buffer.httpMessages := {}
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_RingBuffer_getNext
+ //
+ // Purpose:
+ // Gets the next sequence number.
+ //
+ // Parameters:
+ // pl_buffer - *inout* <EPTF_HTTP_RingBuffer> -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_RingBuffer_getNext(inout EPTF_HTTP_RingBuffer pl_buffer)
+ runs on EPTF_HTTP_LocalTransport_CT
+ return integer
+ {
+ if (pl_buffer.usedSlots == pl_buffer.maxSize)
+ {
+ f_EPTF_HTTP_Transport_bufferWarning(log2str(%definitionId &
+ ": Buffer is full!"));
+ return -1;
+ }
+
+ var integer vl_next := pl_buffer.nextSeqNum;
+
+ pl_buffer.nextSeqNum := (vl_next + 1) mod pl_buffer.maxSize;
+
+ pl_buffer.usedSlots := pl_buffer.usedSlots + 1
+
+ return vl_next;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_RingBuffer_setElementBusy
+ //
+ // Purpose:
+ // Sets the element status to busy.
+ //
+ // Parameters:
+ // pl_buffer - *inout* <EPTF_HTTP_RingBuffer> -
+ // pl_elemIdx -*integer* *integer*- element index
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_RingBuffer_setElementBusy(inout EPTF_HTTP_RingBuffer pl_buffer, in integer pl_elemIdx)
+ runs on EPTF_HTTP_LocalTransport_CT
+ {
+ if (pl_elemIdx >= pl_buffer.nextSeqNum and pl_elemIdx < pl_buffer.waitForSeqNum)
+ {
+ f_EPTF_HTTP_Transport_bufferWarning(log2str(%definitionId &
+ ": Setting invalid index (",pl_elemIdx,"). ", "head: ", pl_buffer.waitForSeqNum, " tail: ", pl_buffer.nextSeqNum));
+ return;
+ }
+
+ f_EPTF_int2int_HashMap_Insert(pl_buffer.isSlotBusyHM, pl_elemIdx, 1);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_RingBuffer_isHeadBusy
+ //
+ // Purpose:
+ // Retreive head slot status.
+ //
+ // Parameters:
+ // pl_buffer - *in* <EPTF_HTTP_RingBuffer> -
+ //
+ // Return Value:
+ // boolean - true if the head is busy
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_RingBuffer_isHeadBusy(in EPTF_HTTP_RingBuffer pl_buffer)
+ runs on EPTF_HTTP_LocalTransport_CT
+ return boolean
+ {
+ var integer vl_tmp;
+ return f_EPTF_int2int_HashMap_Find(pl_buffer.isSlotBusyHM, pl_buffer.waitForSeqNum, vl_tmp);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_RingBuffer_freeHead
+ //
+ // Purpose:
+ // Sets the status of the head to free.
+ //
+ // Parameters:
+ // pl_buffer - *inout* <EPTF_HTTP_RingBuffer> -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_RingBuffer_freeHead(inout EPTF_HTTP_RingBuffer pl_buffer)
+ runs on EPTF_HTTP_LocalTransport_CT
+ {
+ f_EPTF_int2int_HashMap_Erase(pl_buffer.isSlotBusyHM, pl_buffer.waitForSeqNum);
+ pl_buffer.usedSlots := pl_buffer.usedSlots - 1;
+
+ pl_buffer.waitForSeqNum := (pl_buffer.waitForSeqNum + 1) mod pl_buffer.maxSize
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_RingBuffer_getHeadIdx
+ //
+ // Purpose:
+ // Gets the index of the head.
+ //
+ // Parameters:
+ // pl_buffer - *in* <EPTF_HTTP_RingBuffer> -
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_RingBuffer_getHeadIdx(in EPTF_HTTP_RingBuffer pl_buffer)
+ runs on EPTF_HTTP_LocalTransport_CT
+ return integer
+ {
+ return pl_buffer.waitForSeqNum;
+ }
+ ///////////////////////////////////////////////////////////////////////////////
+ // Function: f_EPTF_HTTP_printBufferStatus
+ //
+ // Purpose:
+ // Prints message buffer status.
+ //
+ // Parameters:
+ // pl_group - *in* *integer* - group id
+ // pl_port - *in* *integer* - port id
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ function f_EPTF_HTTP_printBufferStatus(in integer pl_group, in integer pl_port)
+ runs on EPTF_HTTP_LocalTransport_CT
+ {
+ f_EPTF_HTTP_Transport_bufferDebug(log2str(%definitionId, ": Buffer status (group: ",pl_group," port: ",pl_port,"):",
+ " next sequence number: "& int2str(v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[pl_port].messageBuffer.seqNums.nextSeqNum),
+ " waiting for: ", int2str(v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[pl_port].messageBuffer.seqNums.waitForSeqNum),
+ " used slots: ", int2str(v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[pl_port].messageBuffer.seqNums.usedSlots),
+ " size of message buffer: ",
+ f_EPTF_FBQ_getLengthOfFreeChain(v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[pl_port].messageBuffer.messageQueue)));
+
+ }
+
+}//EPTF_HTTP_Buffer
+
+}//end of module
+with {
+extension "version <RnXnn>"
+}
+
diff --git a/test/EPTF_AppLib_HTTP_Test_Makepatch.sh b/test/EPTF_AppLib_HTTP_Test_Makepatch.sh
new file mode 100755
index 0000000..191a7d2
--- /dev/null
+++ b/test/EPTF_AppLib_HTTP_Test_Makepatch.sh
@@ -0,0 +1,22 @@
+#!/bin/sh
+
+sed -e '
+
+s/CPPFLAGS = -D$(PLATFORM) -I$(TTCN3_DIR)\/include/CPPFLAGS = -D$(PLATFORM) -I$(OPENSSL_DIR)\/include -I$(TTCN3_DIR)\/include -DNO_IPV6/g
+
+s/OPENSSL_DIR = $(TTCN3_DIR)/#OPENSSL_DIR = $(TTCN3_DIR)/g
+
+#s/CXX = g++/CXX = \/usr\/sfw\/bin\/g++/g
+#s/CPP = cpp/CPP = \/usr\/sfw\/bin\/cpp/g
+
+#s/-L$(OPENSSL_DIR)\/lib -lcrypto $($(PLATFORM)_LIBS)/-L$(OPENSSL_DIR)\/lib -lcrypto $($(PLATFORM)_LIBS)/g
+
+s/SOLARIS_LIBS = -lsocket -lnsl/SOLARIS_LIBS = -lsocket -lnsl -lresolv -lxnet/g
+
+s/SOLARIS8_LIBS = -lsocket -lnsl/SOLARIS8_LIBS = -lsocket -lnsl -lresolv -lxnet/g
+
+s/CXXFLAGS = -Wall/CXXFLAGS = -Wall /g
+
+#s/LDFLAGS =/LDFLAGS = -g/g
+
+' <$1 >$2
diff --git a/test/EPTF_Applib_HTTP_CNL113618_TD.doc b/test/EPTF_Applib_HTTP_CNL113618_TD.doc
new file mode 100644
index 0000000..5c7b796
--- /dev/null
+++ b/test/EPTF_Applib_HTTP_CNL113618_TD.doc
Binary files differ
diff --git a/test/EPTF_Applib_HTTP_CNL113618_TR.doc b/test/EPTF_Applib_HTTP_CNL113618_TR.doc
new file mode 100644
index 0000000..3522e40
--- /dev/null
+++ b/test/EPTF_Applib_HTTP_CNL113618_TR.doc
Binary files differ
diff --git a/test/EPTF_Applib_HTTP_NaturalDocs_Generator/Languages.txt b/test/EPTF_Applib_HTTP_NaturalDocs_Generator/Languages.txt
new file mode 100755
index 0000000..2fbc5d1
--- /dev/null
+++ b/test/EPTF_Applib_HTTP_NaturalDocs_Generator/Languages.txt
@@ -0,0 +1,138 @@
+Format: 1.35
+
+# This is the Natural Docs languages file for this project. If you change
+# anything here, it will apply to THIS PROJECT ONLY. If you'd like to change
+# something for all your projects, edit the Languages.txt in Natural Docs'
+# Config directory instead.
+
+
+Ignore Extensions: c cpp hh o sh csh txt pl pm
+
+
+#-------------------------------------------------------------------------------
+# SYNTAX:
+#
+# Unlike other Natural Docs configuration files, in this file all comments
+# MUST be alone on a line. Some languages deal with the # character, so you
+# cannot put comments on the same line as content.
+#
+# Also, all lists are separated with spaces, not commas, again because some
+# languages may need to use them.
+#
+# Language: [name]
+# Alter Language: [name]
+# Defines a new language or alters an existing one. Its name can use any
+# characters. If any of the properties below have an add/replace form, you
+# must use that when using Alter Language.
+#
+# The language Shebang Script is special. It's entry is only used for
+# extensions, and files with those extensions have their shebang (#!) lines
+# read to determine the real language of the file. Extensionless files are
+# always treated this way.
+#
+# The language Text File is also special. It's treated as one big comment
+# so you can put Natural Docs content in them without special symbols. Also,
+# if you don't specify a package separator, ignored prefixes, or enum value
+# behavior, it will copy those settings from the language that is used most
+# in the source tree.
+#
+# Extensions: [extension] [extension] ...
+# [Add/Replace] Extensions: [extension] [extension] ...
+# Defines the file extensions of the language's source files. You can
+# redefine extensions found in the main languages file. You can use * to
+# mean any undefined extension.
+#
+# Shebang Strings: [string] [string] ...
+# [Add/Replace] Shebang Strings: [string] [string] ...
+# Defines a list of strings that can appear in the shebang (#!) line to
+# designate that it's part of the language. You can redefine strings found
+# in the main languages file.
+#
+# Ignore Prefixes in Index: [prefix] [prefix] ...
+# [Add/Replace] Ignored Prefixes in Index: [prefix] [prefix] ...
+#
+# Ignore [Topic Type] Prefixes in Index: [prefix] [prefix] ...
+# [Add/Replace] Ignored [Topic Type] Prefixes in Index: [prefix] [prefix] ...
+# Specifies prefixes that should be ignored when sorting symbols in an
+# index. Can be specified in general or for a specific topic type.
+#
+#------------------------------------------------------------------------------
+# For basic language support only:
+#
+# Line Comments: [symbol] [symbol] ...
+# Defines a space-separated list of symbols that are used for line comments,
+# if any.
+#
+# Block Comments: [opening sym] [closing sym] [opening sym] [closing sym] ...
+# Defines a space-separated list of symbol pairs that are used for block
+# comments, if any.
+#
+# Package Separator: [symbol]
+# Defines the default package separator symbol. The default is a dot.
+#
+# [Topic Type] Prototype Enders: [symbol] [symbol] ...
+# When defined, Natural Docs will attempt to get a prototype from the code
+# immediately following the topic type. It stops when it reaches one of
+# these symbols. Use \n for line breaks.
+#
+# Line Extender: [symbol]
+# Defines the symbol that allows a prototype to span multiple lines if
+# normally a line break would end it.
+#
+# Enum Values: [global|under type|under parent]
+# Defines how enum values are referenced. The default is global.
+# global - Values are always global, referenced as 'value'.
+# under type - Values are under the enum type, referenced as
+# 'package.enum.value'.
+# under parent - Values are under the enum's parent, referenced as
+# 'package.value'.
+#
+# Perl Package: [perl package]
+# Specifies the Perl package used to fine-tune the language behavior in ways
+# too complex to do in this file.
+#
+#------------------------------------------------------------------------------
+# For full language support only:
+#
+# Full Language Support: [perl package]
+# Specifies the Perl package that has the parsing routines necessary for full
+# language support.
+#
+#-------------------------------------------------------------------------------
+
+# The following languages are defined in the main file, if you'd like to alter
+# them:
+#
+# Text File, Shebang Script, C/C++, C#, Java, JavaScript, Perl, Python,
+# PHP, SQL, Visual Basic, Pascal, Assembly, Ada, Tcl, Ruby, Makefile,
+# ActionScript, ColdFusion, R, Fortran
+
+# If you add a language that you think would be useful to other developers
+# and should be included in Natural Docs by default, please e-mail it to
+# languages [at] naturaldocs [dot] org.
+
+
+Language: TTCN3
+
+ Extension: ttcn ttcnin ttcnpp
+ Line Comment: //
+ Block Comment: /* */
+ Function Prototype Enders: ; {
+ Variable Prototype Enders: ; =
+ RequirementProcedure Prototype Ender: {
+ Procedure Prototype Ender: {
+ RequirementFunction Prototype Ender: {
+
+
+Language: ASN1
+
+ Extension: asn
+ Line Comment: --
+
+
+Language: C++
+
+ Extension: cc hh h
+ Line Comment: //
+ Block Comment: /* */
+
diff --git a/test/EPTF_Applib_HTTP_NaturalDocs_Generator/Menu.txt b/test/EPTF_Applib_HTTP_NaturalDocs_Generator/Menu.txt
new file mode 100755
index 0000000..d75a170
--- /dev/null
+++ b/test/EPTF_Applib_HTTP_NaturalDocs_Generator/Menu.txt
@@ -0,0 +1,47 @@
+Format: 1.35
+
+
+Title: HTTP Application Library
+SubTitle: CNL 113 618 Rev.R2A01
+
+Footer: Copyright (c) 2000-2018 Ericsson Telecom AB
+
+
+# --------------------------------------------------------------------------
+#
+# Cut and paste the lines below to change the order in which your files
+# appear on the menu. Don't worry about adding or removing files, Natural
+# Docs will take care of that.
+#
+# You can further organize the menu by grouping the entries. Add a
+# "Group: [name] {" line to start a group, and add a "}" to end it.
+#
+# You can add text and web links to the menu by adding "Text: [text]" and
+# "Link: [name] ([URL])" lines, respectively.
+#
+# The formatting and comments are auto-generated, so don't worry about
+# neatness when editing the file. Natural Docs will clean it up the next
+# time it is run. When working with groups, just deal with the braces and
+# forget about the indentation and comments.
+#
+# --------------------------------------------------------------------------
+
+
+File: EPTF_HTTP_Definitions.ttcn (LoadGen/EPTF_HTTP_Definitions.ttcn)
+File: EPTF_HTTP_Functions.ttcn (LoadGen/EPTF_HTTP_Functions.ttcn)
+File: EPTF_HTTP_Logger_Definitions.ttcn (Logger/EPTF_HTTP_Logger_Definitions.ttcn)
+File: EPTF_HTTP_Logger_Functions.ttcn (Logger/EPTF_HTTP_Logger_Functions.ttcn)
+File: EPTF_HTTP_Transport_Definitions.ttcn (Transport/EPTF_HTTP_Transport_Definitions.ttcn)
+File: EPTF_HTTP_Transport_Functions.ttcn (Transport/EPTF_HTTP_Transport_Functions.ttcn)
+
+Group: Index {
+
+ Altstep Index: Altsteps
+ Constant Index: Constants
+ Index: Everything
+ File Index: Files
+ Function Index: Functions
+ Template Index: Templates
+ Type Index: Types
+ } # Group: Index
+
diff --git a/test/EPTF_Applib_HTTP_NaturalDocs_Generator/Topics.txt b/test/EPTF_Applib_HTTP_NaturalDocs_Generator/Topics.txt
new file mode 100755
index 0000000..bf2a03b
--- /dev/null
+++ b/test/EPTF_Applib_HTTP_NaturalDocs_Generator/Topics.txt
@@ -0,0 +1,182 @@
+Format: 1.35
+
+# This is the Natural Docs topics file for this project. If you change anything
+# here, it will apply to THIS PROJECT ONLY. If you'd like to change something
+# for all your projects, edit the Topics.txt in Natural Docs' Config directory
+# instead.
+
+
+Ignore Keywords:
+ note, notes
+
+
+#-------------------------------------------------------------------------------
+# SYNTAX:
+#
+# Topic Type: [name]
+# Alter Topic Type: [name]
+# Creates a new topic type or alters one from the main file. Each type gets
+# its own index and behavior settings. Its name can have letters, numbers,
+# spaces, and these charaters: - / . '
+#
+# Plural: [name]
+# Sets the plural name of the topic type, if different.
+#
+# Keywords:
+# [keyword]
+# [keyword], [plural keyword]
+# ...
+# Defines or adds to the list of keywords for the topic type. They may only
+# contain letters, numbers, and spaces and are not case sensitive. Plural
+# keywords are used for list topics. You can redefine keywords found in the
+# main topics file.
+#
+# Index: [yes|no]
+# Whether the topics get their own index. Defaults to yes. Everything is
+# included in the general index regardless of this setting.
+#
+# Scope: [normal|start|end|always global]
+# How the topics affects scope. Defaults to normal.
+# normal - Topics stay within the current scope.
+# start - Topics start a new scope for all the topics beneath it,
+# like class topics.
+# end - Topics reset the scope back to global for all the topics
+# beneath it.
+# always global - Topics are defined as global, but do not change the scope
+# for any other topics.
+#
+# Class Hierarchy: [yes|no]
+# Whether the topics are part of the class hierarchy. Defaults to no.
+#
+# Variable Type: [yes|no]
+# Whether the topics can be a variable type. Defaults to no.
+#
+# Page Title If First: [yes|no]
+# Whether the topic's title becomes the page title if it's the first one in
+# a file. Defaults to no.
+#
+# Break Lists: [yes|no]
+# Whether list topics should be broken into individual topics in the output.
+# Defaults to no.
+#
+# Can Group With: [type], [type], ...
+# Defines a list of topic types that this one can possibly be grouped with.
+# Defaults to none.
+#-------------------------------------------------------------------------------
+
+# The following topics are defined in the main file, if you'd like to alter
+# their behavior or add keywords:
+#
+# Generic, Class, Interface, Section, File, Group, Function, Variable,
+# Property, Type, Constant, Enumeration, Event, Delegate, Macro,
+# Database, Database Table, Database View, Database Index, Database
+# Cursor, Database Trigger, Cookie, Build Target
+
+# If you add something that you think would be useful to other developers
+# and should be included in Natural Docs by default, please e-mail it to
+# topics [at] naturaldocs [dot] org.
+
+
+Topic Type: Testcase
+
+ Plural: Testcases
+ Keywords:
+ testcase, testcases
+ testcasefunction, testcasefunctions
+
+
+Topic Type: RequirementTestcase
+
+ Plural: RequirementTestcases
+ Keywords:
+ requirementtestcase, requirementtestcases
+
+
+Topic Type: RequirementFunction
+
+ Plural: RequirementFunctions
+ Keywords:
+ requirementfunction, requirementfunctions
+
+
+Topic Type: Procedure
+
+ Plural: Procedures
+ Keywords:
+ procedure, procedures
+
+
+Topic Type: RequirementProcedure
+
+ Plural: RequirementProcedures
+ Keywords:
+ requirementprocedure, requirementprocedures
+
+
+Topic Type: Primitive
+
+ Plural: Primitives
+ Keywords:
+ primitive, primitives
+
+
+Topic Type: Altstep
+
+ Plural: Altsteps
+ Keywords:
+ altstep, altsteps
+
+
+Topic Type: RequirementAltstep
+
+ Plural: RequirementAltsteps
+ Keywords:
+ requirementaltstep, requirementaltsteps
+
+
+Topic Type: Template
+
+ Plural: Templates
+ Keywords:
+ template, templates
+
+
+Topic Type: RequirementType
+
+ Plural: RequirementTypes
+ Keywords:
+ requirementtype, requirementtypes
+
+
+Alter Topic Type: Group
+
+ Plural: Groups
+ Index: No
+
+ Add Keywords:
+ group
+
+
+Alter Topic Type: Generic
+
+
+
+Alter Topic Type: File
+
+ Add Keywords:
+ module
+ asnmodule
+
+
+Topic Type: AsnType
+
+ Plural: AsnTypes
+ Keywords:
+ asntype, asntypes
+
+
+Topic Type: Component
+
+ Plural: Components
+ Keywords:
+ component, components
diff --git a/test/EPTF_Applib_HTTP_NaturalDocs_Generator/generate.sh b/test/EPTF_Applib_HTTP_NaturalDocs_Generator/generate.sh
new file mode 100755
index 0000000..9101fb0
--- /dev/null
+++ b/test/EPTF_Applib_HTTP_NaturalDocs_Generator/generate.sh
@@ -0,0 +1,85 @@
+#!/usr/bin/sh
+
+ct=/usr/atria/bin/cleartool
+natdoc=/mnt/TTCN/Tools/naturaldocs/NaturalDocs
+ttcn3=/view/${USER}_tcc/vobs/ttcn/TCC_Common/Libraries/EPTF_Applib_HTTP_CNL113618/src
+natdocvobdir=$ttcn3/../test/EPTF_Applib_HTTP_NaturalDocs_Generator #to be excluded
+
+natdocproj=$natdocvobdir/generated
+html_dir=$natdocproj/html
+
+# Prepare Files
+prepare_file()
+{
+ f=$1
+ if [ -w $f ]
+ then
+ $ct lscheckout -cview $f | grep unreserved
+ if [ $? ]
+ then
+ $ct unco -rm $f
+ else
+ echo "Warning - $f is checked out reserved!"
+ fi
+ fi
+ if [ ! -w $f ]
+ then
+ $ct co -c "Checked out by generate.sh" -unreserved $f
+ fi
+ if [ ! -w $f ]
+ then
+ echo "Error - unable to check out $f - check your config spec"
+ $ct ls $f
+ exit
+ fi
+}
+
+if [ ! -x $natdoc ]
+then
+ echo "Error - Can't execute $natdoc"
+ exit
+fi
+
+# Check out those files that need to be modified, unreserved
+#prepare_file "$natdocproj/Topics.txt"
+#prepare_file "$natdocproj/Languages.txt"
+cp $natdocvobdir/Topics.txt $natdocproj/Topics.txt
+cp $natdocvobdir/Languages.txt $natdocproj/Languages.txt
+cp $natdocvobdir/load.css $natdocproj/load.css
+cp $natdocvobdir/Menu.txt $natdocproj/Menu.txt
+chmod 664 $natdocproj/Topics.txt $natdocproj/Languages.txt $natdocproj/load.css #$natdocproj/Menu.txt
+
+# Run from the top level directory
+# NaturalDocs doesn't seem to update the menu properly without the hacking below
+echo "Deleting cached info..."
+#/usr/bin/rm -f $natdocproj/Menu.txt
+/usr/bin/rm -f $natdocproj/Data/*
+echo "Rebuilding everything..."
+$natdoc --input $ttcn3 --output framedhtml $html_dir --project $natdocproj -s Default load -r --exclude-input $natdocvobdir
+
+# Ensure that any new files created are writable by all, but ignore
+# the errors that will probably come
+chmod 775 `find $html_dir -type d` > /dev/null 2>&1
+chmod 664 `find $html_dir -type f` > /dev/null 2>&1
+chmod 664 `find $natdocproj/Data -type f` > /dev/null 2>&1
+chmod 664 $natdocproj/Menu.txt > /dev/null 2>&1
+
+/usr/bin/rm -f $natdocproj/Topics.txt
+/usr/bin/rm -f $natdocproj/load.css
+/usr/bin/rm -f $natdocproj/Languages.txt
+
+# copy externally modified html files
+#cp $natdocvobdir/TITANSim.html $html_dir/files/TITANSim.html
+#cp $natdocvobdir/index.html $html_dir/index.html
+
+# close group items for default
+#/bin/sh closegroups.sh $html_dir/menu.html $html_dir/menu2.html
+#/usr/bin/rm -f $html_dir/menu.html
+#/usr/bin/mv $html_dir/menu2.html $html_dir/menu.html
+
+# repairs unnatural html files generated by NaturalDocs
+/usr/local/bin/perl /$natdocvobdir/repairunnaturalhtml.pl $html_dir
+
+
+
+
diff --git a/test/EPTF_Applib_HTTP_NaturalDocs_Generator/load.css b/test/EPTF_Applib_HTTP_NaturalDocs_Generator/load.css
new file mode 100755
index 0000000..bd55024
--- /dev/null
+++ b/test/EPTF_Applib_HTTP_NaturalDocs_Generator/load.css
@@ -0,0 +1,45 @@
+/*
+ IMPORTANT: If you're editing this file in the output directory of one of
+ your projects, your changes will be overwritten the next time you run
+ Natural Docs. Instead, copy this file to your project directory, make your
+ changes, and you can use it with -s. Even better would be to make a CSS
+ file in your project directory with only your changes, which you can then
+ use with -s [original style] [your changes].
+
+ On the other hand, if you're editing this file in the Natural Docs styles
+ directory, the changes will automatically be applied to all your projects
+ that use this style the next time Natural Docs is run on them.
+
+ This file is part of Natural Docs, which is Copyright © 2003-2004 Greg Valure
+ Natural Docs is licensed under the GPL
+*/
+
+/* NO longer necessary!!
+ .Prototype td {
+ font-size: 8pt;
+ }
+*/
+
+.CRequirementTestcase .Prototype { background-color: #F4F4F4; border-color: #D0D0D0 }
+.CRequirementFunction .Prototype { background-color: #F4F4F4; border-color: #D0D0D0 }
+.CRequirementProcedure .Prototype { background-color: #F4F4F4; border-color: #D0D0D0 }
+.CRequirementType .Prototype { background-color: #F4F4F4; border-color: #D0D0D0 }
+
+.MGroupContent {
+ font-variant: normal;
+ font-weight: normal;
+ display: none;
+}
+
+/* NO longer necessary!!
+@media print {
+
+ blockquote {
+ overflow: visible;
+ }
+
+ .IE blockquote {
+ width: auto;
+ }
+}
+*/
diff --git a/test/EPTF_Applib_HTTP_NaturalDocs_Generator/repairunnaturalhtml.pl b/test/EPTF_Applib_HTTP_NaturalDocs_Generator/repairunnaturalhtml.pl
new file mode 100755
index 0000000..85478af
--- /dev/null
+++ b/test/EPTF_Applib_HTTP_NaturalDocs_Generator/repairunnaturalhtml.pl
@@ -0,0 +1,99 @@
+#!/usr/bin/perl -w
+
+use strict;
+
+# in: file path
+# out: extension
+sub getFileExtension
+{
+ my $path = shift;
+ my @lst = split( /\./ , $path );
+ return( (@lst<2) ? '' : $lst[@lst-1] );
+}
+
+#in : reference to string containing source code line, extension
+#out: number of inserted line breaks
+sub insertLineBreaks
+{
+ my $r_line = shift;
+ my $extension = shift; # currently not used
+ my $subst_cnt = $$r_line =~ s/>\s*<([^\/])/>\n<$1/g;
+ return $subst_cnt;
+}
+
+sub isHtmldocFile
+{
+ my $fname = shift;
+ my $htmldocexts = "html|htm";
+ return ($fname =~/\.($htmldocexts)$/);
+}
+
+# recursive scan of the given path: insert line breaks for all html files
+# input : path
+# output: number of changed html files
+sub repairHtmlDoc
+{
+ my $source_path = shift;
+ my %my_cnt = ( 'html' => 0, 'changed' => 0 );
+
+ opendir(DIRH, $source_path) or die("Could not open the directory: $source_path\n");
+ my @dirContent = readdir DIRH;
+ closedir(DIRH);
+
+ my $file;
+ foreach $file (@dirContent)
+ {
+ if (($file ne '.') and ($file ne '..'))
+ {
+ my $path = $source_path.'/'.$file;
+ if (-l $path)
+ {
+ # nothing to do
+ }
+ elsif (-d $path)
+ {
+ # recursive call
+ my %cnt = repairHtmlDoc($path);
+ $my_cnt{'html'} += $cnt{'html'};
+ $my_cnt{'changed'} += $cnt{'changed'};
+ }
+ else # file
+ {
+ if (isHtmldocFile($path))
+ {
+ my $inserted = 0;
+ my $extension = getFileExtension($path);
+ # read content
+ open(HTML_FILE, $path) or die("Could not open file '$path' for reading.\n");
+ my @html_content = <HTML_FILE>;
+ close HTML_FILE;
+ # overwrite file with inserted line breaks
+ open(HTML_FILE, "+>$path") or die("Could not open file '$path' for overwriting.\n");
+ my $line;
+ foreach $line (@html_content)
+ {
+ $inserted += insertLineBreaks(\$line, $extension);
+ print HTML_FILE $line;
+ }
+ close HTML_FILE;
+ $my_cnt{'html'}++;
+ $my_cnt{'changed'}++ if ($inserted);
+ print "Inserted $inserted line breaks into '$path' file.\n";
+ }
+ }
+ }
+ }
+ return %my_cnt;
+}
+
+#START:
+# get directory name
+die "Usage: $0 <path_to_naturaldocs_documentation_directory>\n" if (@ARGV!=1);
+my $dirname = $ARGV[0];
+# remove eventual ending '/' from directory names
+$dirname =~ s/\/$//;
+die "Directory '$dirname' does not exist.\n" unless (-e $dirname);
+# insert line breaks in place
+my %cnt = repairHtmlDoc($dirname);
+# print statistics
+print "*** Processed ".$cnt{'html'}." html files.\n";
diff --git a/test/EPTF_Applib_HTTP_Test.cfg b/test/EPTF_Applib_HTTP_Test.cfg
new file mode 100644
index 0000000..8b6cb72
--- /dev/null
+++ b/test/EPTF_Applib_HTTP_Test.cfg
@@ -0,0 +1,41 @@
+[EXECUTE]
+EPTF_Applib_HTTP_Test_Testcases.control
+
+[LOGGING]
+FileMask := TTCN_ERROR | TTCN_WARNING | TTCN_USER | TTCN_VERDICTOP |
+TTCN_TESTCASE |TTCN_STATISTICS |TTCN_PARALLEL | TTCN_MATCHING | TTCN_PORTEVENT | TTCN_DEBUG
+ConsoleMask := TTCN_ERROR | TTCN_WARNING | TTCN_VERDICTOP | TTCN_TESTCASE |TTCN_STATISTICS
+LogEventTypes := Yes
+SourceInfoFormat := Stack #Single
+LogEntityName := Yes
+#MatchingHints := Detailed
+
+[MODULE_PARAMETERS]
+tsp_EPTF_Var_debug := true;
+tsp_EPTF_HTTP_Transport_loggingEnable := true;
+tsp_EPTF_HTTP_loggingEnable := true;
+tsp_EPTF_HTTP_maxNumberOfEntities := 100;
+
+tsp_EPTF_HTTP_dispatchLevel := Detailed;
+
+tsp_EPTF_LGenBaseDebug := false;
+tsp_EPTF_LGenBaseDebugTraffic := false;
+
+tsp_EPTF_HTTP_Test_Responder_host := "159.107.193.33";
+tsp_EPTF_HTTP_Test_Responder_port := 3100;
+tsp_EPTF_HTTP_Test_Application1_host := "159.107.193.33";
+tsp_EPTF_HTTP_Test_Application1_port := 6000;
+
+#tsp_runningTime := 4;
+#tsp_QPS := 500;
+#tsp_rangeHi := 3000;
+
+
+[TESTPORT_PARAMETERS]
+#*.IPL4_PCO.debug := "YES"
+#*.v_IPL4_PCO.debug := "YES"
+
+[MAIN_CONTROLLER]
+#TCPPort := 1025
+#NumHCs := 1
+#KillTimer := 11
diff --git a/test/EPTF_Applib_HTTP_Test.prj b/test/EPTF_Applib_HTTP_Test.prj
new file mode 100644
index 0000000..55dbb10
--- /dev/null
+++ b/test/EPTF_Applib_HTTP_Test.prj
@@ -0,0 +1,127 @@
+<!DOCTYPE TITAN_GUI_project_file>
+<Project TITAN_version="1.8.pl2" >
+ <General>
+ <Project_Name>HTTP</Project_Name>
+ <Executable_Path>../bin/HTTP</Executable_Path>
+ <Working_Dir>../bin</Working_Dir>
+ <Build_Host>alpha</Build_Host>
+ <Execution_Mode>Parallel</Execution_Mode>
+ <Code_Splitting_Mode>None</Code_Splitting_Mode>
+ <ScriptFile_AfterMake>EPTF_AppLib_HTTP_Test_Makepatch.sh</ScriptFile_AfterMake>
+ <Log_Format>yes</Log_Format>
+ <Update_Symlinks>yes</Update_Symlinks>
+ <Create_Absolute_Symlinks>no</Create_Absolute_Symlinks>
+ <Update_Makefile>yes</Update_Makefile>
+ <Localhost_Execute>yes</Localhost_Execute>
+ <Execute_Command>rsh %host &quot;cd %project_working_dir ; &quot;%executable&quot; %localhost %mctr_port&quot;</Execute_Command>
+ <Execute_Hosts>alfa, beta, gamma</Execute_Hosts>
+ <UnUsed_List>../../EPTF_Core_Library_CNL113512/src/Common/EPTF_CLL_Common_RndDefinitions.ttcn,../../EPTF_Core_Library_CNL113512/src/Common/EPTF_CLL_Common_RndFunctions.ttcn,../../EPTF_Core_Library_CNL113512/src/LGenBase/EPTF_CLL_LGenBaseStatsUI_Definitions.ttcn,../../EPTF_Core_Library_CNL113512/src/LGenBase/EPTF_CLL_LGenBaseStatsUI_Functions.ttcn,../../TCCUsefulFunctions_CNL113472/src/TCCAssertion.cc,../../TCCUsefulFunctions_CNL113472/src/TCCAssertion_Functions.ttcn,../../TCCUsefulFunctions_CNL113472/src/TCCEncoding.cc,../../TCCUsefulFunctions_CNL113472/src/TCCEncoding_Functions.ttcn,../../TCCUsefulFunctions_CNL113472/src/TCCEnv.cc,../../TCCUsefulFunctions_CNL113472/src/TCCEnv_Functions.ttcn,../../TCCUsefulFunctions_CNL113472/src/TCCIPsec.cc,../../TCCUsefulFunctions_CNL113472/src/TCCIPsec_Definitions.ttcn,../../TCCUsefulFunctions_CNL113472/src/TCCIPsec_Functions.ttcn,../../TCCUsefulFunctions_CNL113472/src/TCCTitanMetadata.cc,../../TCCUsefulFunctions_CNL113472/src/TCCTitanMetadata_Functions.ttcn,../../TCCUsefulFunctions_CNL113472/src/TCCXPathSupport.cc,../../TCCUsefulFunctions_CNL113472/src/TCCXPathSupport_Functions.ttcn,../../../TestPorts/IPL4asp_CNL113531/src/IPL4asp_User_CtrlFunct.ttcn,../../../TestPorts/IPL4asp_CNL113531/src/IPL4asp_User_CtrlFunctDef.cc</UnUsed_List>
+ </General>
+ <Configs>
+ <Config>EPTF_Applib_HTTP_Test.cfg</Config>
+ </Configs>
+ <Test_Cases>
+ <Test_Case>EPTF_Applib_HTTP_Test_Testcases.control</Test_Case>
+ <Test_Case>EPTF_Applib_HTTP_Test_Testcases.tc_EPTF_HTTP_Test_test1</Test_Case>
+ <Test_Case>EPTF_Applib_HTTP_Test_Testcases.tc_EPTF_HTTP_Test_test2</Test_Case>
+ <Test_Case>EPTF_Applib_HTTP_Test_Testcases.tc_EPTF_HTTP_Test_test3</Test_Case>
+ <Test_Case>EPTF_Applib_HTTP_Test_Testcases.tc_EPTF_HTTP_Test_test4</Test_Case>
+ <Test_Case>EPTF_Applib_HTTP_Test_Testcases.tc_EPTF_HTTP_Test_test5</Test_Case>
+ <Test_Case>EPTF_Applib_HTTP_Test_Testcases.tc_EPTF_HTTP_Test_test6</Test_Case>
+ <Test_Case>EPTF_Applib_HTTP_Test_Testcases.tc_EPTF_HTTP_Test_test7</Test_Case>
+ <Test_Case>EPTF_Applib_HTTP_Test_Testcases.tc_EPTF_HTTP_Test_test8</Test_Case>
+ <Test_Case>EPTF_Applib_HTTP_Test_Testcases.tc_EPTF_HTTP_Test_test9</Test_Case>
+ <Test_Case>EPTF_Applib_HTTP_Test_Testcases.tc_EPTF_HTTP_Test_test10</Test_Case>
+ <Test_Case>EPTF_Applib_HTTP_Test_Testcases.tc_EPTF_HTTP_Test_test11</Test_Case>
+ <Test_Case>EPTF_Applib_HTTP_Test_Testcases.tc_EPTF_HTTP_Test_test12</Test_Case>
+ <Test_Case>EPTF_Applib_HTTP_Test_Testcases.tc_EPTF_HTTP_Test_test13</Test_Case>
+ <Test_Case>EPTF_Applib_HTTP_Test_Testcases.tc_EPTF_HTTP_Test_test14</Test_Case>
+ <Test_Case>EPTF_Applib_HTTP_Test_Testcases.tc_EPTF_HTTP_Test_test15</Test_Case>
+ <Test_Case>EPTF_Applib_HTTP_Test_Testcases.tc_EPTF_HTTP_Test_test16</Test_Case>
+ <Test_Case>EPTF_Applib_HTTP_Test_Testcases.tc_EPTF_HTTP_Test_test17</Test_Case>
+ <Test_Case>EPTF_Applib_HTTP_Test_Testcases.tc_EPTF_HTTP_Test_test18</Test_Case>
+ <Test_Case>EPTF_Applib_HTTP_Test_Testcases.tc_EPTF_HTTP_Test_test19</Test_Case>
+ </Test_Cases>
+ <Others>
+ <Other>EPTF_AppLib_HTTP_Test_Makepatch.sh</Other>
+ <Other>EPTF_Applib_HTTP_Test.prj</Other>
+ </Others>
+ <File_Group name="MainFileGroup" >
+ <File_Groups>
+ <File_Group name="CoreLibrary" >
+ <File_Groups>
+ <File_Group path="../../EPTF_Core_Library_CNL113512/src/Base/EPTF_CLL_Base.grp" />
+ <File_Group path="../../EPTF_Core_Library_CNL113512/src/Common/EPTF_CLL_Common.grp" />
+ <File_Group path="../../EPTF_Core_Library_CNL113512/src/FreeBusyQueue/EPTF_CLL_FreeBusyQueue.grp" />
+ <File_Group path="../../EPTF_Core_Library_CNL113512/src/HashMap/EPTF_CLL_HashMap.grp" />
+ <File_Group path="../../EPTF_Core_Library_CNL113512/src/LGenBase/EPTF_CLL_LGenBase_All.grp" />
+ <File_Group path="../../EPTF_Core_Library_CNL113512/src/Logging/EPTF_CLL_Logging.grp" />
+ <File_Group path="../../EPTF_Core_Library_CNL113512/src/Logging/EPTF_CLL_LoggingUI.grp" />
+ <File_Group path="../../EPTF_Core_Library_CNL113512/src/RedBlackTree/EPTF_CLL_RBtree.grp" />
+ <File_Group path="../../EPTF_Core_Library_CNL113512/src/Scheduler/EPTF_CLL_Scheduler.grp" />
+ <File_Group path="../../EPTF_Core_Library_CNL113512/src/Semaphore/EPTF_CLL_Semaphore.grp" />
+ <File_Group path="../../EPTF_Core_Library_CNL113512/src/StatHandler/EPTF_CLL_StatHandler.grp" />
+ <File_Group path="../../EPTF_Core_Library_CNL113512/src/StatHandler/EPTF_CLL_StatHandlerUI.grp" />
+ <File_Group path="../../EPTF_Core_Library_CNL113512/src/Transport/EPTF_CLL_TransportCommPortIPL4.grp" />
+ <File_Group path="../../EPTF_Core_Library_CNL113512/src/Transport/EPTF_CLL_TransportMessageBufferManager.grp" />
+ <File_Group path="../../EPTF_Core_Library_CNL113512/src/Transport/EPTF_CLL_TransportRouting.grp" />
+ <File_Group path="../../EPTF_Core_Library_CNL113512/src/UIHandler/EPTF_CLL_UIHandler.grp" />
+ <File_Group path="../../EPTF_Core_Library_CNL113512/src/Variable/EPTF_CLL_Variable.grp" />
+ <File_Group path="../../EPTF_Core_Library_CNL113512/src/StatMeasure/EPTF_CLL_StatMeasure.grp" />
+ <File_Group path="../../EPTF_Core_Library_CNL113512/src/RandomNArray/EPTF_CLL_RNA.grp" />
+ </File_Groups>
+ </File_Group>
+ <File_Group path="../../TCCUsefulFunctions_CNL113472/src/TCCUsefulFunctions_Library.grp" />
+ <File_Group name="Test" >
+ <File path="EPTF_Applib_HTTP_Test_Application1_Definitions.ttcn" />
+ <File path="EPTF_Applib_HTTP_Test_Application1_Functions.ttcn" />
+ <File path="EPTF_Applib_HTTP_Test_Responder.ttcn" />
+ <File path="EPTF_Applib_HTTP_Test_Testcases.ttcn" />
+ <File path="EPTF_Applib_HTTP_Test_Definitions.ttcn" />
+ <File path="EPTF_Applib_HTTP_Test_Functions.ttcn" />
+ <File path="EPTF_Applib_HTTP_Test_Templates.ttcn" />
+ </File_Group>
+ <File_Group name="HTTP" >
+ <File_Groups>
+ <File_Group name="LGen" >
+ <File path="../src/LoadGen/EPTF_HTTP_Definitions.ttcn" />
+ <File path="../src/LoadGen/EPTF_HTTP_Functions.ttcn" />
+ </File_Group>
+ <File_Group name="Transport" >
+ <File path="../src/Transport/EPTF_HTTP_Transport_Definitions.ttcn" />
+ <File path="../src/Transport/EPTF_HTTP_Transport_Functions.ttcn" />
+ </File_Group>
+ <File_Group name="Logger" >
+ <File path="../src/Logger/EPTF_HTTP_Logger_Definitions.ttcn" />
+ <File path="../src/Logger/EPTF_HTTP_Logger_Functions.ttcn" />
+ </File_Group>
+ </File_Groups>
+ </File_Group>
+ <File_Group name="TestPorts" >
+ <File_Groups>
+ <File_Group path="../../../TestPorts/IPL4asp_CNL113531/src/IPL4.grp" />
+ <File_Group name="IPL4 User Ctrl Functions" >
+ <File path="../../../TestPorts/IPL4asp_CNL113531/src/IPL4asp_User_CtrlFunct.ttcn" />
+ <File path="../../../TestPorts/IPL4asp_CNL113531/src/IPL4asp_User_CtrlFunctDef.cc" />
+ </File_Group>
+ <File_Group name="HTTP_TP" >
+ <File path="../../../TestPorts/HTTPmsg_CNL113312/src/HTTPmsg_PT.cc" />
+ <File path="../../../TestPorts/HTTPmsg_CNL113312/src/HTTPmsg_PT.hh" />
+ <File path="../../../TestPorts/HTTPmsg_CNL113312/src/HTTPmsg_PortType.ttcn" />
+ <File path="../../../TestPorts/HTTPmsg_CNL113312/src/HTTPmsg_Types.ttcn" />
+ </File_Group>
+ <File_Group path="../../../TestPorts/XTDPasp_CNL113494/src/XTDPasp.grp" />
+ <File_Group name="AS" >
+ <File path="../../../TestPorts/Common_Components/Abstract_Socket_CNL113384/src/Abstract_Socket.cc" />
+ <File path="../../../TestPorts/Common_Components/Abstract_Socket_CNL113384/src/Abstract_Socket.hh" />
+ </File_Group>
+ <File_Group name="Telnet" >
+ <File path="../../../TestPorts/TELNETasp_CNL113320/src/TELNETasp_PT.cc" />
+ <File path="../../../TestPorts/TELNETasp_CNL113320/src/TELNETasp_PT.hh" />
+ <File path="../../../TestPorts/TELNETasp_CNL113320/src/TELNETasp_PortType.ttcn" />
+ </File_Group>
+ </File_Groups>
+ </File_Group>
+ </File_Groups>
+ </File_Group>
+</Project>
diff --git a/test/EPTF_Applib_HTTP_Test.tpd b/test/EPTF_Applib_HTTP_Test.tpd
new file mode 100644
index 0000000..9d29972
--- /dev/null
+++ b/test/EPTF_Applib_HTTP_Test.tpd
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<TITAN_Project_File_Information version="1.0">
+ <ProjectName>EPTF_Applib_HTTP_Test</ProjectName>
+ <ReferencedProjects>
+ <ReferencedProject name="EPTF_Applib_HTTP_CNL113618" projectLocationURI="../EPTF_Applib_HTTP_CNL113618.tpd"/>
+
+ </ReferencedProjects>
+ <Files>
+ <FileResource projectRelativePath="EPTF_Applib_HTTP_Test.cfg" relativeURI="EPTF_Applib_HTTP_Test.cfg"/>
+ <FileResource projectRelativePath="EPTF_Applib_HTTP_Test_Application1_Definitions.ttcn" relativeURI="EPTF_Applib_HTTP_Test_Application1_Definitions.ttcn"/>
+ <FileResource projectRelativePath="EPTF_Applib_HTTP_Test_Application1_Functions.ttcn" relativeURI="EPTF_Applib_HTTP_Test_Application1_Functions.ttcn"/>
+ <FileResource projectRelativePath="EPTF_Applib_HTTP_Test_Responder.ttcn" relativeURI="EPTF_Applib_HTTP_Test_Responder.ttcn"/>
+ <FileResource projectRelativePath="EPTF_Applib_HTTP_Test_Testcases.ttcn" relativeURI="EPTF_Applib_HTTP_Test_Testcases.ttcn"/>
+ <FileResource projectRelativePath="EPTF_Applib_HTTP_Test_Definitions.ttcn" relativeURI="EPTF_Applib_HTTP_Test_Definitions.ttcn"/>
+ <FileResource projectRelativePath="EPTF_Applib_HTTP_Test_Functions.ttcn" relativeURI="EPTF_Applib_HTTP_Test_Functions.ttcn"/>
+ <FileResource projectRelativePath="EPTF_Applib_HTTP_Test_Templates.ttcn" relativeURI="EPTF_Applib_HTTP_Test_Templates.ttcn"/>
+ </Files>
+ <ActiveConfiguration>Default</ActiveConfiguration>
+ <Configurations>
+ <Configuration name="Default">
+ <ProjectProperties>
+ <MakefileSettings>
+ <generateInternalMakefile>true</generateInternalMakefile>
+ <GNUMake>true</GNUMake>
+ <incrementalDependencyRefresh>true</incrementalDependencyRefresh>
+ <targetExecutable>bin/EPTF_Applib_HTTP_Test</targetExecutable>
+ <suppressWarnings>true</suppressWarnings>
+ </MakefileSettings>
+ <LocalBuildSettings>
+ <workingDirectory>bin</workingDirectory>
+ </LocalBuildSettings>
+ </ProjectProperties>
+ </Configuration>
+ </Configurations>
+</TITAN_Project_File_Information>
diff --git a/test/EPTF_Applib_HTTP_Test_Application1_Definitions.ttcn b/test/EPTF_Applib_HTTP_Test_Application1_Definitions.ttcn
new file mode 100644
index 0000000..bbe45a5
--- /dev/null
+++ b/test/EPTF_Applib_HTTP_Test_Application1_Definitions.ttcn
@@ -0,0 +1,178 @@
+///////////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2000-2018 Ericsson Telecom AB
+//
+// All rights reserved. This program and the accompanying materials
+// are made available under the terms of the Eclipse Public License v1.0
+// which accompanies this distribution, and is available at
+// http://www.eclipse.org/legal/epl-v10.html
+///////////////////////////////////////////////////////////////////////////////
+//
+// File: EPTF_Applib_HTTP_Test_Application1_Definitions.ttcn
+// Rev: <RnXnn>
+// Prodnr: CNL 113 618
+// Updated: 2009-01-08
+// Contact: http://ttcn.ericsson.se
+///////////////////////////////////////////////////////////////////////////////
+
+///////////////////////////////////////////////////////////////////////////////
+// Module: EPTF_Applib_HTTP_Test_Application1_Definitions
+//
+// Purpose:
+// This module contains the definitions to test HTTP application.
+//
+// Module Parameters:
+// -
+//
+// Module depends on:
+// <EPTF_CLL_Common_Definitions>
+//
+// <EPTF_CLL_LGenBase_ConfigDefinitions>
+//
+// <EPTF_HTTP_Transport_Definitions>
+//
+// <EPTF_HTTP_Definitions>
+//
+// Current Owner:
+// EAKOPER
+//
+// Last Review Date:
+// 2009-01-09
+//
+// Detailed Comments:
+//
+// Application1 is based on HTTP transport.
+// HTTP transport related components are extended here. Both
+// local and remote operation mode is supported. Current
+// operation mode is determined via configuration.
+//
+///////////////////////////////////////////////////////////////////////////////
+
+module EPTF_Applib_HTTP_Test_Application1_Definitions {
+
+//=========================================================================
+// Import Part
+//=========================================================================
+import from EPTF_CLL_Common_Definitions all;
+import from EPTF_CLL_LGenBase_ConfigDefinitions all;
+import from EPTF_HTTP_Transport_Definitions all;
+import from EPTF_HTTP_Definitions all;
+
+//=========================================================================
+// Types
+//=========================================================================
+
+type record EPTF_HTTP_Test_Valid
+{
+ integer step,
+ integer groupId
+}
+
+type enumerated EPTF_HTTP_Test_Status
+{
+ READY
+}
+
+type port EPTF_HTTP_Test_Validation_PT message
+{
+ inout EPTF_HTTP_Test_Valid;
+ inout EPTF_HTTP_Test_Status;
+}with {extension "internal"}
+
+// HTTP_CT to extend functionality of AppLib
+// Extension functions and AppLib API can run on this CT
+type component EPTF_HTTP_Test_Application1_CT
+ extends EPTF_HTTP_LGen_CT
+{
+ // extensions component variables e.g. new stats
+ var EPTF_CharstringList v_HTTP1_strList := {};
+
+ var integer v_numEntities;
+ var boolean v_portMode;
+ var boolean v_globalMode;
+ var integer v_numOfPorts;
+ var boolean v_iConnOpen;
+ var boolean v_iConnClose;
+
+ var integer v_sizeofAnswers_idx := -1;
+
+ var EPTF_BooleanArray2D v_portStates;
+
+ var integer v_tcIdx;
+
+ var boolean v_stateCheckEnabled := true;
+}
+
+// HTTP Local transport CT
+// Extends HTTP_CT so that extension function and AppLib API
+// work on it and transport specific API can be added
+type component EPTF_HTTP_Test_Application1_LocalCT extends
+ EPTF_HTTP_Test_Application1_CT, EPTF_HTTP_LocalTransport_CT
+{
+}
+
+type record of EPTF_HTTP_Test_Application1_LocalCT EPTF_HTTP_Test_Application1_LocalCTList;
+
+type record of EPTF_BooleanList EPTF_BooleanArray2D;
+
+// HTTP Remote transport CT
+// Extends HTTP_CT so that extension function and AppLib API
+// work on it and transport specific API can be added
+type component EPTF_HTTP_Test_Application1_RemoteCT extends
+ EPTF_HTTP_Test_Application1_CT, EPTF_HTTP_RemoteTransport_CT
+{
+}
+
+type record of EPTF_HTTP_Test_Application1_RemoteCT EPTF_HTTP_Test_Application1_RemoteCTList;
+
+type record of EPTF_HTTP_Transport_ConnectionState EPTF_HTTP_Transport_ConnectionStateList;
+
+// HTTP Mapper CT
+type component EPTF_HTTP_Test_Application1_MapperCT
+ extends EPTF_HTTP_Mapper_CT, EPTF_HTTP_Test_Application1_LocalCT
+{
+ port EPTF_HTTP_Test_Validation_PT v_validation_PCO;
+}
+
+template EPTF_LGenBase_TcMgmt_tcTypeDeclarator2 t_HTTP_defaultTC(
+ in charstring pl_name,
+ in charstring pl_fsmName,
+ in charstring pl_eType
+) :=
+{
+ name := pl_name,
+ fsmName := pl_fsmName,
+ entityType := pl_eType,
+ customEntitySucc := ""
+}
+
+template EPTF_LGenBase_TcMgmt_ScenarioDeclarator2 t_HTTP_defaultSC(
+ in charstring pl_name,
+ in EPTF_LGenBase_TcMgmt_TcOfScenario2List pl_tclist) :=
+{
+ name := pl_name,
+ tcList := pl_tclist
+}
+
+
+template EPTF_LGenBase_TcMgmt_TcOfScenario2 t_HTTP_defaultTCofSC(
+ in charstring pl_name,
+ in float pl_delay,
+ in float pl_cps) :=
+{
+ tcName := pl_name,
+ startDelay := pl_delay,
+ cpsToReach := pl_cps,
+ enableEntities := true,
+ enable := true,
+ ranges := {},
+ params := {},
+ //finishConditions
+ groupFinishConditions := c_EPTF_LGenBase_TcMgmt_emptyGroupFinishConditions2,
+ entityFinishConditions := c_EPTF_LGenBase_TcMgmt_emptyEntityFinishConditions,
+ //actionLists
+ entityFinishActions := {},
+ tcFinishActions := {}
+}
+
+}
diff --git a/test/EPTF_Applib_HTTP_Test_Application1_Functions.ttcn b/test/EPTF_Applib_HTTP_Test_Application1_Functions.ttcn
new file mode 100644
index 0000000..6fb98fc
--- /dev/null
+++ b/test/EPTF_Applib_HTTP_Test_Application1_Functions.ttcn
@@ -0,0 +1,1675 @@
+///////////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2000-2018 Ericsson Telecom AB
+//
+// All rights reserved. This program and the accompanying materials
+// are made available under the terms of the Eclipse Public License v1.0
+// which accompanies this distribution, and is available at
+// http://www.eclipse.org/legal/epl-v10.html
+///////////////////////////////////////////////////////////////////////////////
+//
+// File: EPTF_Applib_HTTP_Test_Application1_Functions.ttcn
+// Rev: <RnXnn>
+// Prodnr: CNL 113 618
+// Updated: 2012-02-23
+// Contact: http://ttcn.ericsson.se
+///////////////////////////////////////////////////////////////////////////////
+
+///////////////////////////////////////////////////////////
+// Module: EPTF_Applib_HTTP_Test_Application1_Functions
+//
+// Purpose:
+// This module contains the functions to demo HTTP application
+//
+// Module Parameters:
+// tsp_EPTF_HTTP_Test_Application1_numberOfLoadGens - *integer* - number of load generators
+// tsp_EPTF_HTTP_Test_Responder_host - *charstring* - server simulator local IP address
+// tsp_EPTF_HTTP_Test_Responder_port - *integer* - server simulator local port
+// tsp_EPTF_HTTP_Test_Application1_host - *charstring* - HTTP application local IP address
+// tsp_EPTF_HTTP_Test_Application1_port - *integer* - HTTP application local port
+//
+// Module depends on:
+// <EPTF_CLL_Common_Definitions>
+//
+// <EPTF_CLL_Base_Functions>
+//
+// <EPTF_CLL_LGenBase_Definitions>
+//
+// <EPTF_CLL_LGenBase_ConfigDefinitions>
+//
+// <EPTF_CLL_LGenBase_ConfigFunctions>
+//
+// <EPTF_CLL_LGenBase_TrafficFunctions>
+//
+// <EPTF_CLL_HashMapInt2Int_Functions>
+//
+// <EPTF_CLL_Variable_Functions>
+//
+// <EPTF_CLL_FBQ_Functions>
+//
+// <EPTF_Applib_HTTP_Test_Application1_Definitions>
+//
+// <EPTF_HTTP_Transport_Definitions>
+//
+// <EPTF_HTTP_Transport_Functions>
+//
+// <EPTF_HTTP_Definitions>
+//
+// <EPTF_HTTP_Functions>
+//
+// Current Owner:
+// EAKOPER
+//
+// Last Review Date:
+// 2009-03-11
+//
+// Detailed Comments:
+//
+///////////////////////////////////////////////////////////
+
+module EPTF_Applib_HTTP_Test_Application1_Functions {
+
+//=========================================================================
+// Import Part
+//=========================================================================
+import from EPTF_CLL_Common_Definitions all;
+import from EPTF_CLL_Base_Functions all;
+import from EPTF_CLL_LGenBase_Definitions all;
+import from EPTF_CLL_LGenBase_ConfigDefinitions all;
+import from EPTF_CLL_LGenBase_ConfigFunctions all;
+import from EPTF_CLL_LGenBase_TrafficFunctions all;
+import from EPTF_CLL_HashMapInt2Int_Functions all;
+import from EPTF_CLL_Variable_Functions all;
+import from EPTF_CLL_FBQ_Functions all;
+
+import from EPTF_Applib_HTTP_Test_Application1_Definitions all;
+
+import from EPTF_HTTP_Transport_Definitions all;
+import from EPTF_HTTP_Transport_Functions all;
+import from EPTF_HTTP_Definitions all;
+import from EPTF_HTTP_Functions all;
+
+//=========================================================================
+// Module parameters
+//=========================================================================
+modulepar integer tsp_EPTF_HTTP_Test_Application1_numberOfLoadGens := 1;
+modulepar charstring tsp_EPTF_HTTP_Test_Responder_host := "159.107.193.33";
+modulepar integer tsp_EPTF_HTTP_Test_Responder_port := 4000;
+modulepar charstring tsp_EPTF_HTTP_Test_Application1_host := "159.107.193.33";
+modulepar integer tsp_EPTF_HTTP_Test_Application1_port := 5000;
+
+//=========================================================================
+// Functions
+//=========================================================================
+// checks state of a port in a group (pl_group, pl_port)
+// pl_state - port state
+// pl_connId - connection id
+// pl_c2g - should be in connection id 2 group id HashMap
+// pl_c2p - should be in connection id 2 port id HashMap
+// pl_busyState - should be busy in portStateQueue (meaning free/busy for sending)
+function f_EPTF_HTTP_Test_Application1_checkPortState(
+ in integer pl_group,
+ in integer pl_port,
+ in EPTF_HTTP_Transport_ConnectionState pl_state,
+ in integer pl_connId,
+ in boolean pl_c2g,
+ in boolean pl_c2p,
+ in boolean pl_busyState)
+runs on EPTF_HTTP_Test_Application1_LocalCT return boolean
+{
+ log("Checking port state for :", pl_group, " / ", pl_port);
+
+ var boolean vl_found;
+ var integer vl_result, vl_connId;
+ var EPTF_HTTP_Transport_ConnectionState vl_state;
+
+ if (pl_group == -1 or pl_group >= sizeof(v_EPTF_HTTP_Transport_portDB)) {
+ log("Port database (GROUP) is wrong!");
+ setverdict(fail);
+ return false;
+ }
+
+ if (pl_port == -1 or pl_port >= sizeof(v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase)) {
+ log("Port database (PORT) is wrong!");
+ setverdict(fail);
+ return false;
+ }
+
+ log(v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[pl_port]);
+
+ vl_state := v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[pl_port].state;
+ if (vl_state != pl_state)
+ {
+ log("Inconsistent port state: ", vl_state, " instead of: ", pl_state);
+ setverdict(fail);
+ return false;
+ }
+
+ vl_connId := v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[pl_port].connectionId;
+ if (pl_connId == -1 and vl_connId != pl_connId)
+ {
+ log("Inconsistent connnection id: ", vl_connId, " instead of: ", pl_connId);
+ setverdict(fail);
+ return false;
+ }
+
+ if (pl_connId != -1 and vl_connId <= 0)
+ {
+ log("Inconsistent connnection id: ", vl_connId, " instead of a positive value!");
+ setverdict(fail);
+ return false;
+ }
+
+ vl_found := f_EPTF_int2int_HashMap_Find(v_EPTF_HTTP_Transport_connId2GroupId_HM,
+ vl_connId, vl_result);
+
+ if (vl_found != pl_c2g) {
+ if (pl_c2g) {
+ log("Group id not found in Conn2Grp HM for connection (",
+ vl_connId, "), but it should be there!");
+ } else {
+ log("Group id found in Conn2Grp HM for connection (",
+ vl_connId, "), but it shouldn't be there!");
+ }
+ setverdict(fail);
+ return false;
+ }
+
+ vl_found := f_EPTF_int2int_HashMap_Find(v_EPTF_HTTP_Transport_connId2PortId_HM,
+ vl_connId, vl_result);
+
+ if (vl_found != pl_c2p) {
+ if (pl_c2p) {
+ log("Port id not found in Conn2Grp HM for connection (",
+ vl_connId, "), but it should be there!");
+ } else {
+ log("Port id found in Conn2Grp HM for connection (",
+ vl_connId, "), but it shouldn't be there!");
+ }
+ setverdict(fail);
+ return false;
+ }
+
+ vl_found := f_EPTF_FBQ_itemIsBusy(pl_port, v_EPTF_HTTP_Transport_portDB[pl_group].portStateQueue);
+ if (pl_busyState != vl_found) {
+ if (vl_found) {
+ log("Port is busy for sending!");
+ }
+ else {
+ log("Port is free for sending!");
+ }
+ setverdict(fail);
+ return false;
+ }
+
+ return true;
+}
+
+function f_EPTF_HTTP_Test_Application1_checkResponses(
+ in integer pl_selfId,
+ in integer pl_succ)
+runs on EPTF_HTTP_Test_Application1_CT
+{
+ var EPTF_CharstringList vl_strList := {};
+
+ log("Self ID: ", pl_selfId, " and request number: ", pl_succ);
+
+ for (var integer i := 0; i < pl_succ; i := i + 1) {
+ vl_strList[i] := "<A" & int2str(v_EPTF_HTTP_selfId) &
+ "." & int2str(i) & ">";
+ }
+
+ if (not match(v_HTTP1_strList, vl_strList)) {
+ log("Responses are inconsistenct!");
+ log(match(v_HTTP1_strList, vl_strList));
+ setverdict(fail);
+ }
+}
+
+function f_EPTF_HTTP_Test_Application1_step_recordAnswer(
+ in EPTF_LGenBase_TestStepArgs pl_ptr)
+runs on EPTF_HTTP_Test_Application1_CT
+{
+ if (ischosen(v_EPTF_HTTP_incomingMessage.response)) {
+ log(v_EPTF_HTTP_incomingMessage);
+ v_HTTP1_strList[sizeof(v_HTTP1_strList)] :=
+ v_EPTF_HTTP_incomingMessage.response.body;
+ log(v_HTTP1_strList);
+
+ f_EPTF_Var_adjustContent( v_sizeofAnswers_idx,
+ { intVal := f_EPTF_Var_getIntValue(v_sizeofAnswers_idx) + 1 });
+ f_EPTF_Var_refreshContent(v_sizeofAnswers_idx);
+ }
+ else {
+ f_EPTF_HTTP_error(%definitionId & ": Invalid resonse message received: " &
+ log2str(v_EPTF_HTTP_incomingMessage));
+ }
+}
+
+function f_EPTF_HTTP_Test_Application1_step_wrongState(
+ in EPTF_LGenBase_TestStepArgs pl_ptr)
+runs on EPTF_HTTP_Test_Application1_CT
+{
+ var integer eIdx := pl_ptr.eIdx;
+ var integer fIdx := pl_ptr.refContext.fCtxIdx;
+
+ select (pl_ptr.refContext.fRefArgs[0])
+ {
+ case (0) {
+ f_EPTF_HTTP_error("TrafficCaseStarted event received in Wait state for entity/fsm: " &
+ int2str(eIdx) & " / " & int2str(fIdx));
+ }
+ case (1) {
+ f_EPTF_HTTP_error("StartTC event received in Wait state for entity/fsm: " &
+ int2str(eIdx) & " / " & int2str(fIdx));
+ }
+ case (2) {
+ f_EPTF_HTTP_error("Message received event received in Idle state for entity/fsm: " &
+ int2str(eIdx) & " / " & int2str(fIdx));
+ }
+ case (3) {
+ f_EPTF_HTTP_error("TIMEOUT timer timed out in Idle state for entity/fsm: " &
+ int2str(eIdx) & " / " & int2str(fIdx));
+ }
+ }
+}
+
+function f_EPTF_HTTP_Test_Application1_step_rightState(
+ in EPTF_LGenBase_TestStepArgs pl_ptr)
+runs on EPTF_HTTP_Test_Application1_CT
+{
+ var integer eIdx := pl_ptr.eIdx;
+ var integer fIdx := pl_ptr.refContext.fCtxIdx;
+
+ select (pl_ptr.refContext.fRefArgs[0])
+ {
+ case (0) {
+ f_EPTF_HTTP_debug("TrafficCaseStarted event received in Idle state for entity/fsm: " &
+ int2str(eIdx) & " / " & int2str(fIdx));
+ }
+ case (1) {
+ f_EPTF_HTTP_debug("StartTC event received in Idle state for entity/fsm: " &
+ int2str(eIdx) & " / " & int2str(fIdx));
+ }
+ case (2) {
+ f_EPTF_HTTP_debug("Message received event received in Wait state for entity/fsm: " &
+ int2str(eIdx) & " / " & int2str(fIdx));
+ }
+ case (3) {
+ f_EPTF_HTTP_debug("TIMEOUT timer timed out in Wait state for entity/fsm: " &
+ int2str(eIdx) & " / " & int2str(fIdx));
+ }
+ }
+}
+
+function f_EPTF_HTTP_Test_Application1_step_enableStateCheck(
+ in EPTF_LGenBase_TestStepArgs pl_ptr)
+runs on EPTF_HTTP_Test_Application1_CT
+{
+ v_stateCheckEnabled := true;
+}
+
+function f_EPTF_HTTP_Test_Application1_step_disableStateCheck(
+ in EPTF_LGenBase_TestStepArgs pl_ptr)
+runs on EPTF_HTTP_Test_Application1_CT
+{
+ v_stateCheckEnabled := false;
+}
+
+function f_EPTF_HTTP_Test_Application1_step_checkPortState(
+ in EPTF_LGenBase_TestStepArgs pl_ptr)
+runs on EPTF_HTTP_Test_Application1_LocalCT
+{
+ if (not v_stateCheckEnabled) {
+ f_EPTF_HTTP_warning(%definitionId & ": State check disabled!");
+ return;
+ };
+
+ var integer vl_grpIdx;
+
+ select (pl_ptr.refContext.fRefArgs[0])
+ {
+ case (0)
+ {
+ if (v_globalMode) { vl_grpIdx := 0; } else { vl_grpIdx := pl_ptr.eIdx; };
+
+ if (v_portMode)
+ {
+ if (not f_EPTF_HTTP_Test_Application1_checkPortState(vl_grpIdx, 0, OPENED, vl_grpIdx+1, true, true, false)) { f_EPTF_Base_stopAll(); }
+ }
+ else {
+ var integer vl_connId;
+ for (var integer i := 0; i < v_numOfPorts; i := i + 1)
+ {
+ vl_connId := (vl_grpIdx * v_numOfPorts) + i + 1;
+ if (not f_EPTF_HTTP_Test_Application1_checkPortState(vl_grpIdx, i, OPENED, vl_connId, true, true, false)) { f_EPTF_Base_stopAll(); }
+ }
+ }
+ }
+ case (1)
+ {
+ //log(v_EPTF_HTTP_ConnId2EIdx);
+ //log(v_EPTF_HTTP_ConnId2FIdx);
+
+ if (v_globalMode) { vl_grpIdx := 0; } else { vl_grpIdx := pl_ptr.eIdx; };
+
+ if (v_portMode)
+ {
+ v_portStates[vl_grpIdx][0] := true;
+
+ if (not f_EPTF_HTTP_Test_Application1_checkPortState(vl_grpIdx, 0, OPENED, vl_grpIdx+1, true, true, true)) { f_EPTF_Base_stopAll(); }
+ }
+ else {
+ var integer vl_port;
+ f_EPTF_FBQ_getBusyTailIdx(vl_port,v_EPTF_HTTP_Transport_portDB[vl_grpIdx].portStateQueue); // must be called after send message
+ log("Busy tail: ", vl_port);
+
+ v_portStates[vl_grpIdx][vl_port] := true;
+
+ var integer vl_connId;
+ for (var integer i := 0; i < v_numOfPorts; i := i + 1)
+ {
+ vl_connId := (vl_grpIdx * v_numOfPorts) + i + 1;
+
+
+ if (v_portStates[vl_grpIdx][i]) {
+ if (not f_EPTF_HTTP_Test_Application1_checkPortState(vl_grpIdx, i, OPENED, vl_connId, true, true, v_portStates[vl_grpIdx][i]))
+ {
+ f_EPTF_Base_stopAll();
+ }
+ }
+ else {
+ if (v_iConnClose) {
+ if (not f_EPTF_HTTP_Test_Application1_checkPortState(vl_grpIdx, i, IDLE, -1, false, false, v_portStates[vl_grpIdx][i]))
+ {
+ f_EPTF_Base_stopAll();
+ }
+ }
+ }
+
+ }
+ }
+ }
+ case (2)
+ {
+ if (v_globalMode) { vl_grpIdx := 0; } else { vl_grpIdx := pl_ptr.eIdx; };
+
+ if (v_portMode)
+ {
+ v_portStates[vl_grpIdx][0] := false;
+
+ if (v_iConnClose) {
+ if (not f_EPTF_HTTP_Test_Application1_checkPortState(vl_grpIdx, 0, IDLE, -1, false, false, false)) { f_EPTF_Base_stopAll(); }
+ }
+ else {
+ if (not f_EPTF_HTTP_Test_Application1_checkPortState(vl_grpIdx, 0, OPENED, vl_grpIdx+1, true, true, false)) { f_EPTF_Base_stopAll(); }
+ }
+ }
+ else
+ {
+ var integer vl_connId, vl_port;
+ f_EPTF_FBQ_getFreeTailIdx(vl_port,v_EPTF_HTTP_Transport_portDB[vl_grpIdx].portStateQueue);
+ log("Free tail: ", vl_port);
+
+ v_portStates[vl_grpIdx][vl_port] := false;
+
+ for (var integer i := 0; i < v_numOfPorts; i := i + 1)
+ {
+ if (v_iConnClose)
+ {
+ if (not f_EPTF_HTTP_Test_Application1_checkPortState(vl_grpIdx, i, IDLE, -1, false, false, v_portStates[vl_grpIdx][i])) { f_EPTF_Base_stopAll(); }
+ }
+ else
+ {
+ vl_connId := (vl_grpIdx * v_numOfPorts) + i + 1;
+ if (not f_EPTF_HTTP_Test_Application1_checkPortState(vl_grpIdx, i, OPENED, vl_connId, true, true, v_portStates[vl_grpIdx][i])) { f_EPTF_Base_stopAll(); }
+ }
+ }
+ }
+ }
+ case (3)
+ {
+ f_EPTF_HTTP_debug("Do nothing!");
+ }
+ }
+}
+
+function f_EPTF_HTTP_Test_Application1_createPort(
+ in integer pl_idx,
+ in boolean pl_iCO,
+ in boolean pl_iCC)
+runs on EPTF_HTTP_Test_Application1_LocalCT return EPTF_HTTP_Transport_PortMode
+{
+ var EPTF_HTTP_Transport_PortMode vl_connObj :=
+ {
+ name := "MyPort." & int2str(pl_idx),
+ localHostInformation := {tsp_EPTF_HTTP_Test_Application1_host, tsp_EPTF_HTTP_Test_Application1_port + pl_idx + 100 * v_tcIdx},
+ remoteHostInformation := {tsp_EPTF_HTTP_Test_Responder_host, tsp_EPTF_HTTP_Test_Responder_port + v_tcIdx},
+ instantConnOpen := pl_iCO,
+ instantConnClose := pl_iCC,
+ useSSL := false,
+ userFunctions := omit
+ };
+
+ return vl_connObj;
+}
+
+function f_EPTF_HTTP_Test_Application1_createGroup(
+ in integer pl_idx,
+ in integer pl_nOPs,
+ in boolean pl_iCO,
+ in boolean pl_iCC)
+runs on EPTF_HTTP_Test_Application1_LocalCT return EPTF_HTTP_Transport_GroupMode
+{
+ var EPTF_HTTP_Transport_GroupMode vl_connObj := {
+ name := "MyGroup." & int2str(pl_idx),
+
+ localHostInformation := {tsp_EPTF_HTTP_Test_Application1_host, tsp_EPTF_HTTP_Test_Application1_port + pl_nOPs * pl_idx + 100 * v_tcIdx},
+ remoteHostInformation := {tsp_EPTF_HTTP_Test_Responder_host, tsp_EPTF_HTTP_Test_Responder_port + v_tcIdx},
+
+ numberOfPorts := pl_nOPs,
+ localportStep := 1,
+ remoteportStep := 0,
+
+ instantConnOpen := pl_iCO,
+ instantConnClose := pl_iCC,
+ useSSL := false,
+ userFunctions := omit
+ }
+
+ return vl_connObj;
+}
+
+function f_EPTF_HTTP_Test_Application1_createScenarios(
+ in integer pl_selfid,
+ in integer pl_numEntities,
+ out integer pl_egIdx,
+ out integer pl_scIdx,
+ out integer pl_tcIdx,
+ in boolean pl_globalMode,
+ in boolean pl_remote)
+runs on EPTF_HTTP_Test_Application1_CT
+{
+ f_EPTF_HTTP_debug("### " & %definitionId & "()");
+
+ var integer vl_noIntWarning;
+ var EPTF_IntegerList v_noIntListWarning;
+ var charstring vl_prefix := "HTTP1_";
+ var charstring vl_name := vl_prefix & "APPL." & int2str(pl_selfid);
+ var charstring vl_tcname := vl_prefix & "SendReceive";
+ var float vl_startDelay := int2float(pl_selfid);
+ log("Start delay: ", vl_startDelay);
+
+ f_EPTF_HTTP_debug("Configuring traffic properties ...");
+
+ // Creating trafic manually (no execution control)
+ vl_noIntWarning := f_EPTF_LGenBase_declareEntityType(
+ vl_name & "ET", { c_EPTF_HTTP_myBName });
+ vl_noIntWarning := f_EPTF_LGenBase_createEntityGroup(
+ {vl_name & "EG", vl_name & "ET", pl_numEntities});
+
+ vl_noIntWarning := f_EPTF_LGenBase_declareTcType2(valueof(
+ t_HTTP_defaultTC(vl_tcname & "TC", vl_tcname & "FSM", vl_name & "ET")));
+ vl_noIntWarning := f_EPTF_LGenBase_declareScenarioType2(valueof(
+ t_HTTP_defaultSC(vl_tcname & "SC", { valueof(t_HTTP_defaultTCofSC(vl_tcname & "TC", vl_startDelay, 1.0)) } )));
+ f_EPTF_LGenBase_createScenario2EntityGroup({vl_name & "EG", vl_tcname & "SC"});
+
+ var integer vl_groupIdx:=f_EPTF_LGenBase_entityGrpNameIndex(vl_name & "EG");
+ var integer vl_groupBaseOffsetIdx:= f_EPTF_LGenBase_getEGrpBaseOffset(vl_groupIdx);
+
+ var charstring vl_body := "";
+ if (pl_globalMode)
+ {
+ for (var integer i := vl_groupBaseOffsetIdx; i < vl_groupBaseOffsetIdx + pl_numEntities; i := i + 1)
+ {
+ vl_body := "<A" & int2str(v_EPTF_HTTP_selfId) & "." & int2str(i) & ">";
+
+ f_EPTF_HTTP_setEntityContext (i,
+ "POST",
+ "http://responder.com",
+ 1,
+ 1,
+ f_EPTF_HTTP_createContextLengthHeaderLine(vl_body),
+ 0,
+ -,
+ { charVal := vl_body });
+ }
+ }else{
+ if (pl_remote)
+ {
+ for (var integer i := vl_groupBaseOffsetIdx; i < vl_groupBaseOffsetIdx + pl_numEntities; i := i + 1)
+ {
+ vl_body := "<A" & int2str(v_EPTF_HTTP_selfId) & "." & int2str(i) & ">";
+
+ f_EPTF_HTTP_setEntityContext (i,
+ "POST",
+ "http://responder.com",
+ 1,
+ 1,
+ f_EPTF_HTTP_createContextLengthHeaderLine(vl_body),
+ 5*v_EPTF_HTTP_selfId + i,
+ -,
+ { charVal := vl_body });
+ }
+ }
+ for (var integer i := vl_groupBaseOffsetIdx; i < vl_groupBaseOffsetIdx + pl_numEntities; i := i + 1)
+ {
+ vl_body := "<A" & int2str(v_EPTF_HTTP_selfId) & "." & int2str(i) & ">";
+
+ f_EPTF_HTTP_setEntityContext (i,
+ "POST",
+ "http://responder.com",
+ 1,
+ 1,
+ f_EPTF_HTTP_createContextLengthHeaderLine(vl_body),
+ i,
+ -,
+ { charVal := vl_body });
+ }
+ }
+
+ pl_egIdx := f_EPTF_LGenBase_entityGrpNameIndex(vl_name & "EG");
+ pl_scIdx := f_EPTF_LGenBase_scenarioNameIndex(vl_tcname & "SC");
+ pl_tcIdx := f_EPTF_LGenBase_trafficCaseId(vl_name & "EG", vl_tcname & "SC", vl_tcname & "TC");
+}
+
+function f_EPTF_HTTP_Test_Application1_HTTP1_createConnectionObjects()
+runs on EPTF_HTTP_Test_Application1_LocalCT
+{
+ var integer vl_connObjIdx, i, j;
+
+ f_EPTF_HTTP_Transport_debug(%definitionId & ": Starting ...");
+
+ if (v_portMode)
+ {
+ f_EPTF_HTTP_Transport_debug(%definitionId & ": Port mode");
+
+ if (v_globalMode)
+ {
+ f_EPTF_HTTP_Transport_debug(%definitionId & ": One port for all entities");
+
+ vl_connObjIdx := f_EPTF_HTTP_LocalTransport_newPort(f_EPTF_HTTP_Test_Application1_createPort(0, v_iConnOpen, v_iConnClose));
+
+ if (v_iConnOpen) {
+ if (not f_EPTF_HTTP_Test_Application1_checkPortState(0, 0, IDLE, -1, false, false, false)) { f_EPTF_Base_stopAll(); }
+ v_portStates[0][0] := false;
+ }
+ else {
+ if (not f_EPTF_HTTP_Test_Application1_checkPortState(0, 0, OPENED, 1, true, true, false)) { f_EPTF_Base_stopAll(); }
+ v_portStates[0][0] := false;
+ };
+ }
+ else
+ {
+ f_EPTF_HTTP_Transport_debug(%definitionId & ": Different ports for entities");
+
+ for (i := 0; i < v_numEntities; i := i + 1)
+ {
+ vl_connObjIdx := f_EPTF_HTTP_LocalTransport_newPort(f_EPTF_HTTP_Test_Application1_createPort(i, v_iConnOpen, v_iConnClose));
+
+ if (v_iConnOpen) {
+ if (not f_EPTF_HTTP_Test_Application1_checkPortState(i, 0, IDLE, -1, false, false, false)) { f_EPTF_Base_stopAll(); }
+ v_portStates[i][0] := false;
+ }
+ else {
+ if (not f_EPTF_HTTP_Test_Application1_checkPortState(i, 0, OPENED, i+1, true, true, false)) { f_EPTF_Base_stopAll(); }
+ v_portStates[i][0] := false;
+ };
+ }
+ }
+ }
+ else
+ {
+ f_EPTF_HTTP_Transport_debug(%definitionId & ": Group mode");
+
+ if (v_globalMode)
+ {
+ f_EPTF_HTTP_Transport_debug(%definitionId & ": One port for all entities");
+
+ vl_connObjIdx := f_EPTF_HTTP_LocalTransport_newPortGroup(f_EPTF_HTTP_Test_Application1_createGroup(0, v_numOfPorts, v_iConnOpen, v_iConnClose));
+
+ if (v_iConnOpen) {
+ for (i := 0; i < v_numOfPorts; i := i + 1) {
+ if (not f_EPTF_HTTP_Test_Application1_checkPortState(0, i, IDLE, -1, false, false, false)) { f_EPTF_Base_stopAll(); }
+ v_portStates[0][i] := false;
+ }
+ }
+ else {
+ for (i := 0; i < v_numOfPorts; i := i + 1) {
+ if (not f_EPTF_HTTP_Test_Application1_checkPortState(0, i, OPENED, i+1, true, true, false)) { f_EPTF_Base_stopAll(); }
+ v_portStates[0][i] := false;
+ }
+ };
+ }
+ else
+ {
+ f_EPTF_HTTP_Transport_debug(%definitionId & ": Different ports for entities");
+
+ for (i := 0; i < v_numEntities; i := i + 1) {
+ vl_connObjIdx := f_EPTF_HTTP_LocalTransport_newPortGroup(f_EPTF_HTTP_Test_Application1_createGroup(i, v_numOfPorts, v_iConnOpen, v_iConnClose));
+
+ if (v_iConnOpen) {
+ for (j := 0; j < v_numOfPorts; j := j + 1) {
+ if (not f_EPTF_HTTP_Test_Application1_checkPortState(i, j, IDLE, -1, false, false, false)) { f_EPTF_Base_stopAll(); }
+ v_portStates[i][j] := false;
+ }
+ }
+ else {
+ for (j := 0; j < v_numOfPorts; j := j + 1) {
+ if (not f_EPTF_HTTP_Test_Application1_checkPortState(i, j, OPENED, (i*v_numOfPorts)+j+1, true, true, false)) { f_EPTF_Base_stopAll(); }
+ v_portStates[i][j] := false;
+ }
+ };
+ }
+ }
+ }
+}
+
+function f_EPTF_HTTP_Test_Application1_LocalBehavior(
+ in integer pl_tcIdx,
+ in integer pl_selfid,
+ in integer pl_numEntities,
+ in boolean pl_portMode,
+ in boolean pl_globalMode,
+ in integer pl_numOfPorts,
+ in boolean pl_iConnOpen,
+ in boolean pl_iConnClose,
+ in float pl_runningTime,
+ in float pl_responderRunningTime)
+runs on EPTF_HTTP_Test_Application1_LocalCT
+{
+ f_EPTF_HTTP_debug("### " & %definitionId & "()");
+
+ var integer vl_noIntWarning, vl_egIdx, vl_scIdx, vl_TCIdx;
+ var EPTF_IntegerList vl_noIntListWarning;
+ var charstring vl_prefix := "HTTP1_";
+ var charstring vl_name := vl_prefix & "APPL." & int2str(pl_selfid);
+ var charstring vl_tcname := vl_prefix & "SendReceive";
+
+ v_tcIdx := pl_tcIdx;
+
+ v_numEntities := pl_numEntities;
+ v_portMode := pl_portMode;
+ v_globalMode := pl_globalMode;
+ v_numOfPorts := pl_numOfPorts;
+ v_iConnOpen := pl_iConnOpen;
+ v_iConnClose := pl_iConnClose;
+
+ // Initialize applib
+ f_EPTF_HTTP_init(vl_name, pl_selfid, vl_prefix);
+
+ // Application steps
+ vl_noIntWarning := f_EPTF_LGenBase_declareFunction("RecordAnswer",
+ {testStepFunction := refers(f_EPTF_HTTP_Test_Application1_step_recordAnswer)});
+ vl_noIntWarning := f_EPTF_LGenBase_declareFunction("WrongState",
+ {testStepFunction := refers(f_EPTF_HTTP_Test_Application1_step_wrongState)});
+ vl_noIntWarning := f_EPTF_LGenBase_declareFunction("RightState",
+ {testStepFunction := refers(f_EPTF_HTTP_Test_Application1_step_rightState)});
+ vl_noIntWarning := f_EPTF_LGenBase_declareFunction("CheckState",
+ {testStepFunction := refers(f_EPTF_HTTP_Test_Application1_step_checkPortState)});
+ vl_noIntWarning := f_EPTF_LGenBase_declareFunction("DisableState",
+ {testStepFunction := refers(f_EPTF_HTTP_Test_Application1_step_disableStateCheck)});
+ vl_noIntWarning := f_EPTF_LGenBase_declareFunction("EnableState",
+ {testStepFunction := refers(f_EPTF_HTTP_Test_Application1_step_enableStateCheck)});
+
+ // Initialize transport
+ vl_noIntWarning := f_EPTF_HTTP_LocalTransport_init_CT(vl_name,
+ refers(f_EPTF_HTTP_messageReceived),
+ refers(f_EPTF_HTTP_eventReceived),
+ refers(f_EPTF_HTTP_socketErrorReceived));
+
+ f_EPTF_HTTP_setSendRequestFunction(refers(f_EPTF_HTTP_LocalTransport_sendMessage));
+ f_EPTF_HTTP_setConnectionCloseFunction(refers(f_EPTF_HTTP_LocalTransport_connectionClose));
+ f_EPTF_HTTP_setConnectionOpenFunction(refers(f_EPTF_HTTP_LocalTransport_connectionOpen));
+ f_EPTF_HTTP_setConnectionHalfCloseFunction(refers(f_EPTF_HTTP_LocalTransport_connectionHalfClose));
+ f_EPTF_HTTP_setClosePortOfUserFunction(refers(f_EPTF_HTTP_LocalTransport_closePortOfUser));
+ f_EPTF_HTTP_setFreePortOfUserFunction(refers(f_EPTF_HTTP_LocalTransport_freePortOfUser));
+
+ f_EPTF_Var_newInt("NumberOfReceivedAnswers", 0, v_sizeofAnswers_idx);
+
+ if (pl_tcIdx == 16) { // TC 16 is the index of the reconnect test traffic case (no state check performed)
+ vl_noIntListWarning := f_EPTF_LGenBase_TcMgmt_declareCompactFsmTables(
+ f_EPTF_HTTP_Test_Application1_HTTP1_CreateBasicFSM_Local_RECONNECTTEST(vl_tcname & "FSM"));
+ } else {
+ vl_noIntListWarning := f_EPTF_LGenBase_TcMgmt_declareCompactFsmTables(
+ f_EPTF_HTTP_Test_Application1_HTTP1_CreateBasicFSM_Local(vl_tcname & "FSM"));
+ }
+
+
+ f_EPTF_HTTP_Test_Application1_createScenarios(pl_selfid, pl_numEntities, vl_egIdx, vl_scIdx, vl_TCIdx, pl_globalMode, false);
+
+ f_EPTF_HTTP_debug("numEntities: "&log2str(pl_numEntities)&"eGrpIdx: "&log2str(vl_egIdx)&" scIdx: "&log2str(vl_scIdx));
+
+ f_EPTF_HTTP_debug("getEGrpBaseOffset: "&log2str(f_EPTF_LGenBase_getEGrpBaseOffset(vl_egIdx)));
+
+ f_EPTF_HTTP_Test_Application1_HTTP1_createConnectionObjects();
+
+ f_EPTF_LGenBase_enableScenarioOnEntityGroup(vl_egIdx, vl_scIdx, true);
+
+ f_EPTF_HTTP_debug("Entering main altstep ...");
+
+ timer t_guard := pl_runningTime;
+ t_guard.start;
+
+ alt {
+ [] t_guard.timeout { f_EPTF_HTTP_debug("Timer timed out!"); }
+ }
+
+ f_EPTF_LGenBase_stopScenarioByIdx(vl_egIdx, vl_scIdx);
+
+ f_EPTF_HTTP_debug("Responses: " & log2str(v_HTTP1_strList));
+
+ if (pl_tcIdx != 16) { // TC 16 is the index of the reconnect test traffic case (no state check performed)
+ var integer vl_nofStarts := f_EPTF_LGenBase_getTcStarts(vl_TCIdx);
+ var integer vl_nofSucc := f_EPTF_LGenBase_getTcSuccesses(vl_TCIdx);
+ var integer vl_nofFails := f_EPTF_LGenBase_getTcFails(vl_TCIdx);
+
+ f_EPTF_HTTP_debug("Number of starts: " & int2str(vl_nofStarts));
+ f_EPTF_HTTP_debug("Number of successful: " & int2str(vl_nofSucc));
+ f_EPTF_HTTP_debug("Number of fails: " & int2str(vl_nofFails));
+
+ if (vl_nofStarts != vl_nofSucc + vl_nofFails)
+ {
+ //wait for pending
+ timer t_wait := 2.0;
+ t_wait.start;
+ t_wait.timeout;
+ }
+
+ f_EPTF_HTTP_Test_Application1_checkResponses(pl_selfid, vl_nofSucc);
+ }
+
+ f_EPTF_HTTP_debug("Quitting load generator ...");
+
+ setverdict(pass);
+
+ f_EPTF_Base_cleanup_CT();
+}
+
+function f_EPTF_HTTP_Test_Application1_RemoteBehavior(
+ in integer pl_selfid,
+ in integer pl_numEntities,
+ in boolean pl_globalMode,
+ in float pl_runningTime,
+ in float pl_responderRunningTime)
+runs on EPTF_HTTP_Test_Application1_RemoteCT
+{
+ f_EPTF_HTTP_debug("### " & %definitionId & "()");
+
+ var integer vl_noIntWarning, vl_egIdx, vl_scIdx, vl_tcIdx;
+ var charstring vl_prefix := "HTTP1_";
+ var charstring vl_name := vl_prefix & "APPL." & int2str(pl_selfid);
+ var charstring vl_tcname := vl_prefix & "SendReceive";
+
+ log("Applib init ...");
+
+ // Initialize applib
+ f_EPTF_HTTP_init(vl_name, pl_selfid, vl_prefix);
+
+ log("Steps ...");
+
+ // Application steps
+ vl_noIntWarning := f_EPTF_LGenBase_declareFunction("RecordAnswer",
+ {testStepFunction := refers(f_EPTF_HTTP_Test_Application1_step_recordAnswer)});
+ vl_noIntWarning := f_EPTF_LGenBase_declareFunction("WrongState",
+ {testStepFunction := refers(f_EPTF_HTTP_Test_Application1_step_wrongState)});
+ vl_noIntWarning := f_EPTF_LGenBase_declareFunction("RightState",
+ {testStepFunction := refers(f_EPTF_HTTP_Test_Application1_step_rightState)});
+ //f_EPTF_LGenBase_declareFunction("CheckState",
+ // {testStepFunction := refers(f_EPTF_HTTP_Test_Application1_step_checkPortState)});
+ vl_noIntWarning := f_EPTF_LGenBase_declareFunction("DisableState",
+ {testStepFunction := refers(f_EPTF_HTTP_Test_Application1_step_disableStateCheck)});
+ vl_noIntWarning := f_EPTF_LGenBase_declareFunction("EnableState",
+ {testStepFunction := refers(f_EPTF_HTTP_Test_Application1_step_enableStateCheck)});
+
+ log("Remote init ...");
+
+ // Initialize transport
+ vl_noIntWarning := f_EPTF_HTTP_RemoteTransport_init_CT(vl_name,
+ refers(f_EPTF_HTTP_messageReceived),
+ refers(f_EPTF_HTTP_eventReceived),
+ refers(f_EPTF_HTTP_socketErrorReceived));
+
+ log("Reset funcs ...");
+
+ f_EPTF_HTTP_setSendRequestFunction(refers(f_EPTF_HTTP_RemoteTransport_sendMessage));
+ f_EPTF_HTTP_setConnectionCloseFunction(refers(f_EPTF_HTTP_RemoteTransport_connectionClose));
+ f_EPTF_HTTP_setConnectionOpenFunction(refers(f_EPTF_HTTP_RemoteTransport_connectionOpen));
+ f_EPTF_HTTP_setConnectionHalfCloseFunction(refers(f_EPTF_HTTP_RemoteTransport_connectionHalfClose));
+ f_EPTF_HTTP_setClosePortOfUserFunction(refers(f_EPTF_HTTP_RemoteTransport_closePortOfUser));
+ f_EPTF_HTTP_setFreePortOfUserFunction(refers(f_EPTF_HTTP_RemoteTransport_freePortOfUser));
+
+ f_EPTF_Var_newInt("NumberOfReceivedAnswers", 0, v_sizeofAnswers_idx);
+
+ //f_EPTF_HTTP_Test_Application1_HTTP1_createConnectionObjects();
+
+ log("FSM ...");
+
+ var EPTF_IntegerList vl_noIntListWarning := f_EPTF_LGenBase_TcMgmt_declareCompactFsmTables(
+ f_EPTF_HTTP_Test_Application1_HTTP1_CreateBasicFSM_Remote(vl_tcname & "FSM"));
+
+ log("Scaneraios ...");
+
+ f_EPTF_HTTP_Test_Application1_createScenarios(pl_selfid, pl_numEntities, vl_egIdx, vl_scIdx, vl_tcIdx, pl_globalMode, true);
+
+ log("Enable scenarios ...");
+
+ f_EPTF_LGenBase_enableScenarioOnEntityGroup(vl_egIdx, vl_scIdx, true);
+
+ f_EPTF_HTTP_debug("Entity context database: " & log2str(v_EPTF_HTTP_contexts));
+
+ f_EPTF_HTTP_debug("Entering main altstep ...");
+
+ timer t_guard := pl_runningTime;
+ t_guard.start;
+
+ alt {
+ [] t_guard.timeout { f_EPTF_HTTP_debug("Timer timed out!"); }
+ }
+
+ f_EPTF_LGenBase_stopScenarioByIdx(vl_egIdx, vl_scIdx);
+
+ //f_EPTF_HTTP_RemoteTransport_cleanup_CT();
+
+ f_EPTF_HTTP_debug("Responses: " & log2str(v_HTTP1_strList));
+
+ var integer vl_nofStarts := f_EPTF_LGenBase_getTcStarts(vl_tcIdx);
+ var integer vl_nofSucc := f_EPTF_LGenBase_getTcSuccesses(vl_tcIdx);
+ var integer vl_nofFails := f_EPTF_LGenBase_getTcFails(vl_tcIdx);
+
+ f_EPTF_HTTP_debug("Number of starts: " & int2str(vl_nofStarts));
+ f_EPTF_HTTP_debug("Number of successful: " & int2str(vl_nofSucc));
+ f_EPTF_HTTP_debug("Number of fails: " & int2str(vl_nofFails));
+
+ f_EPTF_HTTP_Test_Application1_checkResponses(pl_selfid, vl_nofSucc);
+
+ f_EPTF_HTTP_debug("Quitting load generator ...");
+
+ f_EPTF_Base_cleanup_CT();
+
+ setverdict(pass);
+}
+
+function f_EPTF_HTTP_Test_Application1_Mapper_Behavior(
+ in EPTF_HTTP_Test_Application1_RemoteCTList pl_comps,
+ in integer pl_tcIdx,
+ in integer pl_numEntities,
+ in boolean pl_portMode,
+ in boolean pl_globalMode,
+ in integer pl_numOfPorts,
+ in boolean pl_iConnOpen,
+ in boolean pl_iConnClose,
+ in float pl_runningTime)
+runs on EPTF_HTTP_Test_Application1_MapperCT
+{
+ f_EPTF_HTTP_Transport_debug("### " & %definitionId & "()");
+
+ v_tcIdx := pl_tcIdx;
+
+ v_numEntities := 2*pl_numEntities; // wired in for two lgens only
+ v_portMode := pl_portMode;
+ v_globalMode := pl_globalMode;
+ v_numOfPorts := pl_numOfPorts;
+ v_iConnOpen := pl_iConnOpen;
+ v_iConnClose := pl_iConnClose;
+
+ var integer i, j, vl_initResult :=
+ f_EPTF_HTTP_Mapper_init_CT("HTTP1_MAPPER");
+
+ var EPTF_HTTP_Mapper_RoutingList vl_rInfo;
+
+ f_EPTF_HTTP_Test_Application1_HTTP1_createConnectionObjects();
+
+ // set routing
+ if (pl_globalMode)
+ {
+ var EPTF_IntegerList vl_comps := {};
+ for (i := 0; i < sizeof(pl_comps); i := i + 1) {
+ vl_comps[i] := f_EPTF_Base_upcast(pl_comps[i]);
+ }
+
+ vl_rInfo := {{0, vl_comps}};
+ f_EPTF_HTTP_Transport_debug("Routing info: " & log2str(vl_rInfo));
+ }
+ else {
+
+ var integer vl_size := sizeof(v_EPTF_HTTP_Transport_portDB); // better with FBQ but ok for test
+ var integer vl_psize := float2int(int2float(vl_size) / int2float(sizeof(pl_comps)));
+
+ log(vl_size);
+ log(vl_psize);
+
+ if (vl_size == 0) { vl_size := 1; };
+
+ for (j:= 0; j < sizeof(pl_comps); j := j + 1)
+ {
+ for (i := j*vl_psize; i < (j+1)*vl_psize; i := i + 1)
+ {
+ vl_rInfo[i].groupId := i;
+ vl_rInfo[i].compIdList := { f_EPTF_Base_upcast(pl_comps[j]) };
+ }
+ }
+ f_EPTF_HTTP_Transport_debug("Routing info: " & log2str(vl_rInfo));
+ }
+
+ f_EPTF_HTTP_Mapper_setRouting(vl_rInfo);
+
+ f_EPTF_HTTP_Transport_debug("Entering main altstep ...");
+
+ timer t_guard := pl_runningTime;
+ t_guard.start;
+
+ alt {
+ [] t_guard.timeout { f_EPTF_HTTP_Transport_debug("Timer timed out!"); }
+ }
+
+ setverdict(pass);
+
+ f_EPTF_HTTP_Transport_debug("Quitting mapper ...");
+
+ //f_EPTF_Base_stopRemote(mtc);
+ f_EPTF_Base_cleanup_CT();
+}
+
+template EPTF_HTTP_Transport_PortGroup t_expectedPortGroup1 := {
+ name := "MyGroup",
+
+ baseLocalHostInformation := { "127.0.0.1", 4000 },
+ baseRemoteHostInformation := { "127.0.0.1", 5000 },
+
+ currentPortId := ?,
+
+ numberOfPorts := 2,
+ localportStep := 1,
+ remoteportStep := 0,
+
+ portDatabase := {
+ {
+ groupIndex := 0,
+ portIndex := 0,
+ connectionId := -1,
+ sessionId := -1,
+ portId := -1,
+ localhostInfoIdx := 0,
+ remotehostInfoIdx := 0,
+ state := IDLE,
+ portType := OUTGOING_PORT,
+ buffer := false,
+ messageBuffer := omit
+ },
+ {
+ groupIndex := 0,
+ portIndex := 1,
+ connectionId := -1,
+ sessionId := -1,
+ portId := -1,
+ localhostInfoIdx := 1,
+ remotehostInfoIdx := 0,
+ state := IDLE,
+ portType := OUTGOING_PORT,
+ buffer := false,
+ messageBuffer := omit
+ }
+ },
+
+ listeningPortIdx := -1,
+
+ defaultFIdx := 0,
+
+ portQueue := ?,
+ portStateQueue := ?,
+
+ useSSL := false,
+ instantConnOpen := true,
+ instantConnClose := true,
+ buffer := false
+};
+
+template EPTF_HTTP_Transport_PortGroup t_expectedPortGroup4 modifies t_expectedPortGroup1 := {
+ name := "MyPort",
+
+ numberOfPorts := 1,
+ localportStep := 0,
+ remoteportStep := 0,
+
+ portDatabase := {
+ {
+ groupIndex := 1,
+ portIndex := 0,
+ connectionId := -1,
+ sessionId := -1,
+ portId := -1,
+ localhostInfoIdx := 0,
+ remotehostInfoIdx := 0,
+ state := IDLE,
+ portType := OUTGOING_PORT,
+ buffer := false,
+ messageBuffer := omit
+ }
+ },
+
+ defaultFIdx := 2
+}
+
+template EPTF_HTTP_Transport_PortGroup t_expectedPortGroup5 modifies t_expectedPortGroup1 := {
+ name := "MyPort2",
+
+ numberOfPorts := 1,
+ localportStep := 0,
+ remoteportStep := 0,
+
+ portDatabase := {
+ {
+ groupIndex := 2,
+ portIndex := 0,
+ connectionId := -1,
+ sessionId := -1,
+ portId := -1,
+ localhostInfoIdx := 0,
+ remotehostInfoIdx := 0,
+ state := IDLE,
+ portType := OUTGOING_PORT,
+ buffer := false,
+ messageBuffer := omit
+ }
+ },
+
+ defaultFIdx := 2
+}
+
+template EPTF_HTTP_Transport_PortGroup t_expectedPortGroup2 modifies t_expectedPortGroup1 := {
+ numberOfPorts := 3,
+ portDatabase := {
+ {
+ groupIndex := 0,
+ portIndex := 0,
+ connectionId := -1,
+ sessionId := -1,
+ portId := -1,
+ localhostInfoIdx := 0,
+ remotehostInfoIdx := 0,
+ state := IDLE,
+ portType := OUTGOING_PORT,
+ buffer := false,
+ messageBuffer := omit
+ },
+ {
+ groupIndex := 0,
+ portIndex := 1,
+ connectionId := -1,
+ sessionId := -1,
+ portId := -1,
+ localhostInfoIdx := 1,
+ remotehostInfoIdx := 0,
+ state := IDLE,
+ portType := OUTGOING_PORT,
+ buffer := false,
+ messageBuffer := omit
+ },
+ {
+ groupIndex := 0,
+ portIndex := 2,
+ connectionId := -1,
+ sessionId := -1,
+ portId := -1,
+ localhostInfoIdx := 2,
+ remotehostInfoIdx := 0,
+ state := IDLE,
+ portType := OUTGOING_PORT,
+ buffer := false,
+ messageBuffer := omit
+ }
+ }
+};
+
+template EPTF_HTTP_Transport_PortGroup t_expectedPortGroup3 modifies t_expectedPortGroup1 := {
+ portDatabase := {
+ {
+ groupIndex := -1,
+ portIndex := -1,
+ connectionId := -1,
+ sessionId := -1,
+ portId := -1,
+ localhostInfoIdx := -1,
+ remotehostInfoIdx := -1,
+ state := IDLE,
+ portType := OUTGOING_PORT,
+ buffer := false,
+ messageBuffer := omit
+ },
+ {
+ groupIndex := 0,
+ portIndex := 1,
+ connectionId := -1,
+ sessionId := -1,
+ portId := -1,
+ localhostInfoIdx := 1,
+ remotehostInfoIdx := 0,
+ state := IDLE,
+ portType := OUTGOING_PORT,
+ buffer := false,
+ messageBuffer := omit
+ },
+ {
+ groupIndex := 0,
+ portIndex := 2,
+ connectionId := -1,
+ sessionId := -1,
+ portId := -1,
+ localhostInfoIdx := 2,
+ remotehostInfoIdx := 0,
+ state := IDLE,
+ portType := OUTGOING_PORT,
+ buffer := false,
+ messageBuffer := omit
+ }
+ }
+};
+
+template EPTF_HTTP_Transport_PortGroupList t_expectedPortDB1(
+ template EPTF_HTTP_Transport_PortGroupList pl_groups) := pl_groups;
+
+
+function f_EPTF_HTTP_Test_Application1_Mapper_Behavior_CheckRandomAPI(
+ in float pl_runningTime)
+runs on EPTF_HTTP_Test_Application1_MapperCT
+{
+ f_EPTF_HTTP_Transport_debug("### " & %definitionId & "()");
+
+ var boolean vl_pass := true;
+ var integer i, j, vl_initResult :=
+ f_EPTF_HTTP_Mapper_init_CT("HTTP1_MAPPER");
+
+ f_EPTF_HTTP_Transport_debug("Entering main altstep ...");
+
+ timer t_guard := pl_runningTime;
+ t_guard.start;
+
+ alt {
+ [] t_guard.timeout { f_EPTF_HTTP_Transport_debug("Timer timed out!"); }
+ }
+
+ f_EPTF_HTTP_Mapper_cleanup_CT();
+
+ f_EPTF_HTTP_Transport_debug("Quitting mapper ...");
+
+ if (vl_pass) { setverdict(pass); };
+}
+
+function f_EPTF_HTTP_Test_Application1_Mapper_Behavior_CheckAPI(
+ in float pl_runningTime)
+runs on EPTF_HTTP_Test_Application1_MapperCT
+{
+ f_EPTF_HTTP_Transport_debug("### " & %definitionId & "()");
+
+ var boolean vl_pass := true;
+ var integer i, j, vl_initResult :=
+ f_EPTF_HTTP_Mapper_init_CT("HTTP1_MAPPER");
+
+ var EPTF_HTTP_Test_Valid vl_validation;
+ timer t_guard := pl_runningTime;
+ t_guard.start;
+
+ alt {
+ [] v_validation_PCO.receive(EPTF_HTTP_Test_Valid:?) -> value vl_validation
+ {
+ select (vl_validation.step) {
+ case (0)
+ {
+ log(v_EPTF_HTTP_Transport_portDB);
+
+ if (not match(v_EPTF_HTTP_Transport_portDB, t_expectedPortDB1({ t_expectedPortGroup1 }))) {
+ log("Database inconsistency after addition to v_EPTF_HTTP_Transport_portDB!");
+ log(match(v_EPTF_HTTP_Transport_portDB, t_expectedPortDB1({ t_expectedPortGroup1 })));
+ vl_pass := false;
+ setverdict(fail);
+ }
+
+ v_validation_PCO.send(EPTF_HTTP_Test_Status:READY);
+ }
+ case (1)
+ {
+ log(v_EPTF_HTTP_Transport_portDB);
+
+ if (not match(v_EPTF_HTTP_Transport_portDB, t_expectedPortDB1({ t_expectedPortGroup2 }))) {
+ log("Database inconsistency after addition to v_EPTF_HTTP_Transport_portDB!");
+ log(match(v_EPTF_HTTP_Transport_portDB, t_expectedPortDB1({ t_expectedPortGroup2 })));
+ vl_pass := false;
+ setverdict(fail);
+ }
+ }
+ case (2)
+ {
+ log(v_EPTF_HTTP_Transport_portDB);
+
+ if (not match(v_EPTF_HTTP_Transport_portDB, t_expectedPortDB1({ t_expectedPortGroup3 }))) {
+ log("Database inconsistency after delete to v_EPTF_HTTP_Transport_portDB!");
+ log(match(v_EPTF_HTTP_Transport_portDB, t_expectedPortDB1({ t_expectedPortGroup3 })));
+ vl_pass := false;
+ setverdict(fail);
+ }
+ }
+ case (3)
+ {
+ log(v_EPTF_HTTP_Transport_portDB);
+
+ if (not match(v_EPTF_HTTP_Transport_portDB, t_expectedPortDB1({ t_expectedPortGroup3, t_expectedPortGroup4, t_expectedPortGroup5 }))) {
+ log("Database inconsistency after addition to v_EPTF_HTTP_Transport_portDB!");
+ log(match(v_EPTF_HTTP_Transport_portDB, t_expectedPortDB1({ t_expectedPortGroup3, t_expectedPortGroup4, t_expectedPortGroup5 })));
+ vl_pass := false;
+ setverdict(fail);
+ }
+ }
+ }
+
+ v_validation_PCO.send(EPTF_HTTP_Test_Status:READY)
+ repeat;
+ }
+ [] v_validation_PCO.receive{repeat;}
+ [] t_guard.timeout { f_EPTF_HTTP_Transport_debug("Timer timed out!"); }
+ }
+
+ f_EPTF_HTTP_Mapper_cleanup_CT();
+
+ f_EPTF_HTTP_Transport_debug("Quitting mapper ...");
+
+ if (vl_pass) { setverdict(pass); };
+}
+
+function f_EPTF_HTTP_Test_Application1_HTTP1_CreateBasicFSM_Local(
+ in charstring pl_name)
+runs on EPTF_HTTP_Test_Application1_LocalCT
+return EPTF_LGenBase_TcMgmt_CompactFsmTableDeclaratorList
+{
+ return {
+ { name := pl_name,
+ stateList := { "idle", "wait" },
+ timerList := { { name := "TIMEOUT", startValue := 1.0 } },
+ table := {
+/*
+ // TC tarted event
+ {
+ eventToListen := { c_EPTF_LGenBase_behavior, c_EPTF_LGenBase_inputName_testMgmt_trafficCaseStarted, fsm },
+ cellRow := {
+ // state == idle
+ { {
+ { "RightState", { stepContextArgs := { 0 } } },
+ { c_EPTf_EPTF_HTTP_Test_Application1_stepName_openConnection, { stepContextArgs := {} } },
+ { "CheckState", { stepContextArgs := { 0 } } }
+ }, omit, omit },
+ // state == wait
+ { {
+ { "WrongState", { stepContextArgs := { 0 } } }
+ }, omit, "idle" }
+ }
+ },
+ */
+ // start TC event
+ {
+ eventToListen := { c_EPTF_LGenBase_behavior, c_EPTF_LGenBase_inputName_testMgmt_startTC, fsm },
+ cellRow := {
+ // state == idle
+ { {
+ { "RightState", { stepContextArgs := { 1 } } },
+ { c_EPTF_HTTP_stepName_sendRequest, { stepContextArgs := {} } },
+ { "CheckState", { stepContextArgs := { 1 } } }
+ }, omit, "wait" },
+ // state == wait
+ { {
+ { "WrongState", { stepContextArgs := { 1 } } }
+ }, omit, "idle" }
+ }
+ },
+
+ // answer OK event
+ {
+ eventToListen := { c_EPTF_HTTP_myBName, c_EPTF_HTTP_inputName_responseCharReceived, fsm },
+ cellRow := {
+ // state == idle
+ { {
+ { "WrongState", { stepContextArgs := { 2 } } }
+ }, omit, omit },
+ // state == wait
+ { {
+ { "RightState", { stepContextArgs := { 2 } } },
+ { "RecordAnswer", { stepContextArgs := {} } },
+ { "CheckState", { stepContextArgs := { 2 } } },
+ { c_EPTF_LGenBase_StepFunction_trafficSuccess, { stepContextArgs := {} } }
+ }, omit, "idle" }
+ }
+ },
+
+ // timeout event
+ {
+ eventToListen := { c_EPTF_LGenBase_specialBName_timerTimeout, "TIMEOUT", fsm },
+ cellRow := {
+ // state == idle
+ { {
+ { "WrongState", { stepContextArgs := { 3 } } }
+ }, omit, "idle" },
+ // state == wait
+ { {
+ { "RightState", { stepContextArgs := { 3 } } },
+ { c_EPTF_HTTP_stepName_handleTimeout, { stepContextArgs := {} } },
+ { c_EPTF_HTTP_stepName_cleanUpContext, { stepContextArgs := {} } },
+ { c_EPTF_LGenBase_StepFunction_trafficFailed, { stepContextArgs := {} } }
+ }, omit, "idle" }
+ }
+ },
+
+ // connection closed event
+ {
+ eventToListen := { c_EPTF_HTTP_myBName, c_EPTF_HTTP_inputName_connectionClosed, fsm },
+ cellRow := {
+ // state == idle
+ { {
+ { "DisableState", { stepContextArgs := { } } }
+ }, omit, omit },
+ // state == wait
+ { {
+ { "DisableState", { stepContextArgs := { } } }
+ }, omit, omit }
+ }
+ },
+
+ // connection opened event
+ {
+ eventToListen := { c_EPTF_HTTP_myBName, c_EPTF_HTTP_inputName_connectionOpened, fsm },
+ cellRow := {
+ // state == idle
+ { {
+ { "EnableState", { stepContextArgs := { } } }
+ }, omit, omit },
+ // state == wait
+ { {
+ { "EnableState", { stepContextArgs := { } } }
+ }, omit, omit }
+ }
+ },
+
+ // stop TC event
+ {
+ eventToListen := { c_EPTF_LGenBase_behavior, c_EPTF_LGenBase_inputName_testMgmt_stopTC, fsm },
+ cellRow := {
+ // state == idle
+ { {
+ { c_EPTF_HTTP_stepName_cleanUpContext, { stepContextArgs := {} } } ,
+ { c_EPTF_LGenBase_StepFunction_entityStopped, { stepContextArgs := { } } }
+ }, omit, "idle" },
+ // state == wait
+ { {
+ { c_EPTF_HTTP_stepName_cleanUpContext, { stepContextArgs := {} } } ,
+ { c_EPTF_LGenBase_StepFunction_entityStopped, { stepContextArgs := { } } }
+ }, omit, "idle" }
+ }
+ }
+ }
+ }
+ }
+}
+
+function f_EPTF_HTTP_Test_Application1_HTTP1_CreateBasicFSM_Local_RECONNECTTEST(
+ in charstring pl_name)
+runs on EPTF_HTTP_Test_Application1_LocalCT
+return EPTF_LGenBase_TcMgmt_CompactFsmTableDeclaratorList
+{
+ return {
+ { name := pl_name,
+ stateList := { "idle", "wait" },
+ timerList := { { name := "TIMEOUT", startValue := 1.0 } },
+ table := {
+/*
+ // TC tarted event
+ {
+ eventToListen := { c_EPTF_LGenBase_behavior, c_EPTF_LGenBase_inputName_testMgmt_trafficCaseStarted, fsm },
+ cellRow := {
+ // state == idle
+ { {
+ { "RightState", { stepContextArgs := { 0 } } },
+ { c_EPTf_EPTF_HTTP_Test_Application1_stepName_openConnection, { stepContextArgs := {} } },
+ { "CheckState", { stepContextArgs := { 0 } } }
+ }, omit, omit },
+ // state == wait
+ { {
+ { "WrongState", { stepContextArgs := { 0 } } }
+ }, omit, "idle" }
+ }
+ },
+ */
+ // start TC event
+ {
+ eventToListen := { c_EPTF_LGenBase_behavior, c_EPTF_LGenBase_inputName_testMgmt_startTC, fsm },
+ cellRow := {
+ // state == idle
+ { {
+ { "RightState", { stepContextArgs := { 1 } } },
+ { c_EPTF_HTTP_stepName_sendRequest, { stepContextArgs := {} } }//,
+ //{ "CheckState", { stepContextArgs := { 1 } } }
+ }, omit, "wait" },
+ // state == wait
+ { {
+ { "WrongState", { stepContextArgs := { 1 } } }
+ }, omit, "idle" }
+ }
+ },
+
+ // answer OK event
+ {
+ eventToListen := { c_EPTF_HTTP_myBName, c_EPTF_HTTP_inputName_responseCharReceived, fsm },
+ cellRow := {
+ // state == idle
+ { {
+ { "WrongState", { stepContextArgs := { 2 } } }
+ }, omit, omit },
+ // state == wait
+ { {
+ { "RightState", { stepContextArgs := { 2 } } },
+ { "RecordAnswer", { stepContextArgs := {} } },
+ //{ "CheckState", { stepContextArgs := { 2 } } },
+ { c_EPTF_LGenBase_StepFunction_trafficSuccess, { stepContextArgs := {} } }
+ }, omit, "idle" }
+ }
+ },
+
+ // timeout event
+ {
+ eventToListen := { c_EPTF_LGenBase_specialBName_timerTimeout, "TIMEOUT", fsm },
+ cellRow := {
+ // state == idle
+ { {
+ { "WrongState", { stepContextArgs := { 3 } } }
+ }, omit, "idle" },
+ // state == wait
+ { {
+ { "RightState", { stepContextArgs := { 3 } } },
+ { c_EPTF_HTTP_stepName_cleanUpContext, { stepContextArgs := {} } } ,
+ { c_EPTF_HTTP_stepName_handleTimeout, { stepContextArgs := {} } },
+ { c_EPTF_LGenBase_StepFunction_trafficFailed, { stepContextArgs := {} } }
+ }, omit, "idle" }
+ }
+ },
+
+ // connection closed event
+ {
+ eventToListen := { c_EPTF_HTTP_myBName, c_EPTF_HTTP_inputName_connectionClosed, fsm },
+ cellRow := {
+ // state == idle
+ { {
+ { "DisableState", { stepContextArgs := { } } }
+ }, omit, omit },
+ // state == wait
+ { {
+ { "DisableState", { stepContextArgs := { } } }
+ }, omit, omit }
+ }
+ },
+
+ // connection opened event
+ {
+ eventToListen := { c_EPTF_HTTP_myBName, c_EPTF_HTTP_inputName_connectionOpened, fsm },
+ cellRow := {
+ // state == idle
+ { {
+ { "EnableState", { stepContextArgs := { } } }
+ }, omit, omit },
+ // state == wait
+ { {
+ { "EnableState", { stepContextArgs := { } } }
+ }, omit, omit }
+ }
+ },
+
+ // stop TC event
+ {
+ eventToListen := { c_EPTF_LGenBase_behavior, c_EPTF_LGenBase_inputName_testMgmt_stopTC, fsm },
+ cellRow := {
+ // state == idle
+ { {
+ { c_EPTF_HTTP_stepName_cleanUpContext, { stepContextArgs := {} } } ,
+ { c_EPTF_LGenBase_StepFunction_entityStopped, { stepContextArgs := { } } }
+ }, omit, "idle" },
+ // state == wait
+ { {
+ { c_EPTF_HTTP_stepName_cleanUpContext, { stepContextArgs := {} } } ,
+ { c_EPTF_LGenBase_StepFunction_entityStopped, { stepContextArgs := { } } }
+ }, omit, "idle" }
+ }
+ }
+ }
+ }
+ }
+}
+
+function f_EPTF_HTTP_Test_Application1_HTTP1_CreateBasicFSM_Remote(
+ in charstring pl_name)
+runs on EPTF_HTTP_Test_Application1_RemoteCT
+return EPTF_LGenBase_TcMgmt_CompactFsmTableDeclaratorList
+{
+ return {
+ { name := pl_name,
+ stateList := { "idle", "wait" },
+ timerList := { { name := "TIMEOUT", startValue := 1.0 } },
+ table := {
+/*
+ // TC tarted event
+ {
+ eventToListen := { c_EPTF_LGenBase_behavior, c_EPTF_LGenBase_inputName_testMgmt_trafficCaseStarted, fsm },
+ cellRow := {
+ // state == idle
+ { {
+ { "RightState", { stepContextArgs := { 0 } } },
+ { c_EPTf_EPTF_HTTP_Test_Application1_stepName_openConnection, { stepContextArgs := {} } },
+ { "CheckState", { stepContextArgs := { 0 } } }
+ }, omit, omit },
+ // state == wait
+ { {
+ { "WrongState", { stepContextArgs := { 0 } } }
+ }, omit, "idle" }
+ }
+ },
+ */
+ // start TC event
+ {
+ eventToListen := { c_EPTF_LGenBase_behavior, c_EPTF_LGenBase_inputName_testMgmt_startTC, fsm },
+ cellRow := {
+ // state == idle
+ { {
+ { "RightState", { stepContextArgs := { 1 } } },
+ { c_EPTF_HTTP_stepName_sendRequest, { stepContextArgs := {} } }//,
+ //{ "CheckState", { stepContextArgs := { 1 } } }
+ }, omit, "wait" },
+ // state == wait
+ { {
+ { "WrongState", { stepContextArgs := { 1 } } }
+ }, omit, "idle" }
+ }
+ },
+
+ // answer OK event
+ {
+ eventToListen := { c_EPTF_HTTP_myBName, c_EPTF_HTTP_inputName_responseCharReceived, fsm },
+ cellRow := {
+ // state == idle
+ { {
+ { "WrongState", { stepContextArgs := { 2 } } }
+ }, omit, omit },
+ // state == wait
+ { {
+ { "RightState", { stepContextArgs := { 2 } } },
+ { "RecordAnswer", { stepContextArgs := {} } },
+ //{ "CheckState", { stepContextArgs := { 2 } } },
+ { c_EPTF_LGenBase_StepFunction_trafficSuccess, { stepContextArgs := {} } }
+ }, omit, "idle" }
+ }
+ },
+
+ // timeout event
+ {
+ eventToListen := { c_EPTF_LGenBase_specialBName_timerTimeout, "TIMEOUT", fsm },
+ cellRow := {
+ // state == idle
+ { {
+ { "WrongState", { stepContextArgs := { 3 } } }
+ }, omit, "idle" },
+ // state == wait
+ { {
+ { "RightState", { stepContextArgs := { 3 } } },
+ { c_EPTF_HTTP_stepName_handleTimeout, { stepContextArgs := {} } },
+ { c_EPTF_HTTP_stepName_cleanUpContext, { stepContextArgs := {} } } ,
+ { c_EPTF_LGenBase_StepFunction_trafficFailed, { stepContextArgs := {} } }
+ }, omit, "idle" }
+ }
+ },
+
+ // connection closed event
+ {
+ eventToListen := { c_EPTF_HTTP_myBName, c_EPTF_HTTP_inputName_connectionClosed, fsm },
+ cellRow := {
+ // state == idle
+ { {
+ { "DisableState", { stepContextArgs := { } } }
+ }, omit, omit },
+ // state == wait
+ { {
+ { "DisableState", { stepContextArgs := { } } }
+ }, omit, omit }
+ }
+ },
+
+ // connection opened event
+ {
+ eventToListen := { c_EPTF_HTTP_myBName, c_EPTF_HTTP_inputName_connectionOpened, fsm },
+ cellRow := {
+ // state == idle
+ { {
+ { "EnableState", { stepContextArgs := { } } }
+ }, omit, omit },
+ // state == wait
+ { {
+ { "EnableState", { stepContextArgs := { } } }
+ }, omit, omit }
+ }
+ },
+
+ // stop TC event
+ {
+ eventToListen := { c_EPTF_LGenBase_behavior, c_EPTF_LGenBase_inputName_testMgmt_stopTC, fsm },
+ cellRow := {
+ // state == idle
+ { {
+ { c_EPTF_HTTP_stepName_cleanUpContext, { stepContextArgs := {} } } ,
+ { c_EPTF_LGenBase_StepFunction_entityStopped, { stepContextArgs := { } } }
+ }, omit, "idle" },
+ // state == wait
+ { {
+ { c_EPTF_HTTP_stepName_cleanUpContext, { stepContextArgs := {} } } ,
+ { c_EPTF_LGenBase_StepFunction_entityStopped, { stepContextArgs := { } } }
+ }, omit, "idle" }
+ }
+ }
+ }
+ }
+ }
+}
+
+}
diff --git a/test/EPTF_Applib_HTTP_Test_Definitions.ttcn b/test/EPTF_Applib_HTTP_Test_Definitions.ttcn
new file mode 100644
index 0000000..bfde76e
--- /dev/null
+++ b/test/EPTF_Applib_HTTP_Test_Definitions.ttcn
@@ -0,0 +1,105 @@
+///////////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2000-2018 Ericsson Telecom AB
+//
+// All rights reserved. This program and the accompanying materials
+// are made available under the terms of the Eclipse Public License v1.0
+// which accompanies this distribution, and is available at
+// http://www.eclipse.org/legal/epl-v10.html
+///////////////////////////////////////////////////////////////////////////////
+//
+// File: EPTF_Applib_HTTP_Test_Definitions.ttcn
+// Rev: <RnXnn>
+// Prodnr: CNL 113 618
+// Updated: 2009-01-08
+// Contact: http://ttcn.ericsson.se
+///////////////////////////////////////////////////////////////////////////////
+
+///////////////////////////////////////////////////////////
+// Module: EPTF_Applib_HTTP_Test_Definitions
+//
+// Purpose:
+// Definitions of EPTF HTTP Application Library test cases
+//
+// Module Parameters:
+// -
+//
+// Module depends on:
+// <EPTF_CLL_Base_Definitions>
+//
+// <HTTPmsg_Types>
+//
+// <IPL4asp_Types>
+//
+// <EPTF_Applib_HTTP_Responder>
+//
+// <EPTF_Applib_HTTP_Test_Application1_Definitions>
+//
+// Current Owner:
+// EAKOPER
+//
+// Last Review Date:
+// 2009-01-09
+//
+// Detailed Comments:
+// -
+//
+///////////////////////////////////////////////////////////
+module EPTF_Applib_HTTP_Test_Definitions {
+
+//=========================================================================
+// Import Part
+//=========================================================================
+import from EPTF_CLL_Base_Definitions all;
+import from EPTF_CLL_Variable_Definitions all;
+
+import from HTTPmsg_Types all;
+import from IPL4asp_Types all;
+
+import from EPTF_Applib_HTTP_Test_Responder all;
+import from EPTF_Applib_HTTP_Test_Application1_Definitions all;
+
+//=========================================================================
+// Types
+//=========================================================================
+
+type component EPTF_HTTP_Test_CT extends EPTF_Base_CT, EPTF_Var_CT
+{
+ var EPTF_HTTP_Test_Responder_CT v_HTTP_Responder_comp;
+ var EPTF_HTTP_Test_Application1_MapperCT v_HTTP_Mapper1_comp;
+ var EPTF_HTTP_Test_Application1_LocalCTList v_HTTP_Local1_comps;
+ var EPTF_HTTP_Test_Application1_RemoteCTList v_HTTP_Remote1_comps;
+ var EPTF_HTTP_Test_Application1_MapperCT v_HTTP_Mapper2_comp;
+
+ var boolean v_isRemote_appl1, v_isRemote_appl2;
+ var integer v_numberOfLGens1, v_numberOfLGens2;
+
+ var integer v_nofAnswers := -1;
+
+ var octetstring v_HTTP_oct;
+ var HTTPMessage v_HTTP_msg;
+
+ var float v_randState;
+
+ port EPTF_HTTP_Test_CM_PT v_CM_PCO;
+}
+
+type component EPTF_HTTP_Test_LocalAPI_CT
+ extends EPTF_HTTP_Test_Application1_LocalCT, EPTF_HTTP_Test_CT
+{
+ var ASP_RecvFrom v_ASP_RecvFrom;
+ var ASP_Event v_ASP_Event;
+ var integer v_noIntWarning;
+}
+
+type component EPTF_HTTP_Test_RemoteAPI_CT
+ extends EPTF_HTTP_Test_Application1_RemoteCT, EPTF_HTTP_Test_CT
+{
+ var ASP_RecvFrom v_ASP_RecvFrom;
+ var ASP_Event v_ASP_Event;
+ var integer v_noIntWarning;
+ var boolean v_noBoolWarning;
+
+ port EPTF_HTTP_Test_Validation_PT v_validation_PCO;
+}
+}
diff --git a/test/EPTF_Applib_HTTP_Test_Functions.ttcn b/test/EPTF_Applib_HTTP_Test_Functions.ttcn
new file mode 100644
index 0000000..2ef6d1a
--- /dev/null
+++ b/test/EPTF_Applib_HTTP_Test_Functions.ttcn
@@ -0,0 +1,422 @@
+///////////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2000-2018 Ericsson Telecom AB
+//
+// All rights reserved. This program and the accompanying materials
+// are made available under the terms of the Eclipse Public License v1.0
+// which accompanies this distribution, and is available at
+// http://www.eclipse.org/legal/epl-v10.html
+///////////////////////////////////////////////////////////////////////////////
+//
+// File: EPTF_Applib_HTTP_Test_Functions.ttcn
+// Rev: <RnXnn>
+// Prodnr: CNL 113 618
+// Updated: 2009-01-08
+// Contact: http://ttcn.ericsson.se
+///////////////////////////////////////////////////////////////////////////////
+
+///////////////////////////////////////////////////////////
+// Module: EPTF_Applib_HTTP_Test_Functions
+//
+// Purpose:
+// Functions of EPTF HTTP Application Library test cases
+//
+// Module Parameters:
+// -
+//
+// Module depends on:
+// <EPTF_CLL_HashMapInt2Int_Functions>
+//
+// <EPTF_CLL_FBQ_Functions>
+//
+// <IPL4asp_Types>
+//
+// <HTTPmsg_Types>
+//
+// <EPTF_CLL_Base_Functions>
+//
+// <EPTF_HTTP_Transport_Definitions>
+//
+// <EPTF_HTTP_Transport_Functionss>
+//
+// <EPTF_Applib_HTTP_Test_Responder>
+//
+// <EPTF_Applib_HTTP_Test_Application1_Definitions>
+//
+// <EPTF_Applib_HTTP_Test_Application1_Functions>
+//
+// <TCCMaths_GenericTypes>
+//
+// Current Owner:
+// EAKOPER
+//
+// Last Review Date:
+// 2009-01-09
+//
+// Detailed Comments:
+// -
+//
+///////////////////////////////////////////////////////////
+module EPTF_Applib_HTTP_Test_Functions {
+
+//=========================================================================
+// Import Part
+//=========================================================================
+import from EPTF_CLL_HashMapInt2Int_Functions all;
+import from EPTF_CLL_FBQ_Functions all;
+import from HTTPmsg_Types all;
+import from EPTF_CLL_Base_Functions all;
+
+import from EPTF_HTTP_Transport_Definitions all;
+import from EPTF_HTTP_Transport_Functions all;
+
+import from EPTF_Applib_HTTP_Test_Definitions all;
+import from EPTF_Applib_HTTP_Test_Responder all;
+import from EPTF_Applib_HTTP_Test_Application1_Definitions all;
+import from EPTF_Applib_HTTP_Test_Application1_Functions all;
+
+import from TCCMaths_GenericTypes all;
+
+//=========================================================================
+// Functions
+//=========================================================================
+/*
+function f_myRandom() runs on EPTF_HTTP_Test_CT return float
+{
+ var float vl_randVal := 1.0 / int2float(tsp_rangeHi) + 0.5 * rnd() / int2float(tsp_rangeHi);
+ v_randState := v_randState + vl_randVal;
+
+ if (v_randState >= 1.0) { v_randState := v_randState - 1.0; };
+
+ return v_randState;
+}
+*/
+
+function f_EPTF_HTTP_Test_checkConfig()
+runs on EPTF_HTTP_Test_CT return boolean
+{
+ if (not isvalue(v_numberOfLGens1)) {
+ log("Parameter v_numberOfLGens1 not value!");
+ return false;
+ }
+
+ if (not isvalue(v_numberOfLGens2)) {
+ log("Parameter v_numberOfLGens2 not value!");
+ return false;
+ }
+
+ if (v_numberOfLGens1 < 0) {
+ log("Parameter tsp_numberOfLGens1 must be at least zero (now: ", v_numberOfLGens1, ")");
+ return false;
+ }
+
+ if (v_numberOfLGens2 < 0) {
+ log("Parameter tsp_numberOfLGens2 must be at least zero (now: ", v_numberOfLGens2, ")");
+ return false;
+ }
+
+ return true;
+}
+
+function f_EPTF_HTTP_Test_createResponder(
+ in integer pl_tcId,
+ in float pl_runningTime)
+runs on EPTF_HTTP_Test_CT
+{
+ log("--- Creating responder ... ");
+
+ v_HTTP_Responder_comp := EPTF_HTTP_Test_Responder_CT.create("HTTP_Responder");
+ connect(v_HTTP_Responder_comp:v_CM_PCO, self:v_CM_PCO);
+ v_HTTP_Responder_comp.start(f_EPTF_HTTP_Test_Responder_behavior(pl_tcId, pl_runningTime));
+
+ timer tl_guard;
+ tl_guard.start(5.0);
+ alt {
+ [] v_CM_PCO.receive {tl_guard.stop}
+ [] tl_guard.timeout {f_EPTF_Base_stopAll()}
+ }
+}
+
+function f_EPTF_HTTP_Test_createApplConfig1(
+ in integer pl_tcIdx,
+ in integer pl_numEntities,
+ in float pl_runningTime,
+ in float pl_responderRunningTime,
+ in boolean pl_portMode,
+ in boolean pl_globalMode,
+ in integer pl_numOfPorts,
+ in boolean pl_iConnOpen,
+ in boolean pl_iConnClose)
+runs on EPTF_HTTP_Test_CT
+{
+ log("--- Creating Application 1 configuration ... ");
+
+ if (v_numberOfLGens1 == 0) {
+ log("WARNING! Application 1 disabled!");
+ return;
+ }
+
+ var integer i;
+ var charstring vl_name;
+
+ v_isRemote_appl1 := v_numberOfLGens1 > 1;
+ log(" Remote transport: ", v_isRemote_appl1);
+
+ if (v_isRemote_appl1)
+ {
+ vl_name := "APPL1_MAPPER";
+ log(" Creating mapper: ", vl_name);
+
+ v_HTTP_Mapper1_comp := EPTF_HTTP_Test_Application1_MapperCT.create(vl_name);
+ }
+
+ for (i := 0; i < v_numberOfLGens1; i := i + 1)
+ {
+ vl_name := "APPL1_LGEN_" & int2str(i);
+
+ if (v_isRemote_appl1)
+ {
+
+ log(" Creating REMOTE lgen: ", vl_name);
+ v_HTTP_Remote1_comps[i] := EPTF_HTTP_Test_Application1_RemoteCT.create(vl_name);
+
+ connect(v_HTTP_Remote1_comps[i]:v_EPTF_HTTP_RemoteTransport_commPort,
+ v_HTTP_Mapper1_comp:v_EPTF_HTTP_Mapper_commPort);
+
+ v_HTTP_Remote1_comps[i].start(f_EPTF_HTTP_Test_Application1_RemoteBehavior(
+ i, pl_numEntities,
+ pl_globalMode, pl_runningTime, pl_responderRunningTime));
+ }
+ else
+ {
+ log(" Creating LOCAL lgen: ", vl_name);
+ v_HTTP_Local1_comps[i] := EPTF_HTTP_Test_Application1_LocalCT.create(vl_name);
+ v_HTTP_Local1_comps[i].start(f_EPTF_HTTP_Test_Application1_LocalBehavior(pl_tcIdx,
+ i, pl_numEntities,
+ pl_portMode, pl_globalMode, pl_numOfPorts, pl_iConnOpen, pl_iConnClose,
+ pl_runningTime, pl_responderRunningTime));
+ }
+ }
+
+ if (v_isRemote_appl1)
+ {
+ v_HTTP_Mapper1_comp.start(f_EPTF_HTTP_Test_Application1_Mapper_Behavior(
+ v_HTTP_Remote1_comps, pl_tcIdx, pl_numEntities, pl_portMode,
+ pl_globalMode, pl_numOfPorts, pl_iConnOpen, pl_iConnClose,
+ 2.0*pl_runningTime));
+ }
+}
+
+// checks state of a port in a group (pl_group, pl_port)
+// pl_state - port state
+// pl_connId - connection id
+// pl_c2g - should be in connection id 2 group id HashMap
+// pl_c2p - should be in connection id 2 port id HashMap
+// pl_busyState - should be busy in portStateQueue (meaning free/busy for sending)
+// return true if state is valid, false otherwise
+function f_EPTF_HTTP_Test_checkPortState(
+ in integer pl_group,
+ in integer pl_port,
+ in EPTF_HTTP_Transport_ConnectionState pl_state,
+ in integer pl_connId,
+ in boolean pl_c2g,
+ in boolean pl_c2p,
+ in boolean pl_busyState)
+runs on EPTF_HTTP_Test_LocalAPI_CT return boolean
+{
+ var boolean vl_found;
+ var integer vl_result, vl_connId;
+ var EPTF_HTTP_Transport_ConnectionState vl_state;
+
+ if (pl_group == -1 or pl_group >= sizeof(v_EPTF_HTTP_Transport_portDB)) {
+ log("Port database (GROUP) is wrong!");
+ setverdict(fail);
+ return false;
+ }
+
+ if (pl_port == -1 or pl_port >= sizeof(v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase)) {
+ log("Port database (PORT) is wrong!");
+ setverdict(fail);
+ return false;
+ }
+
+ vl_state := v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[pl_port].state;
+ if (vl_state != pl_state)
+ {
+ log("Inconsistent port state: ", vl_state, " instead of: ", pl_state);
+ setverdict(fail);
+ return false;
+ }
+
+ vl_connId := v_EPTF_HTTP_Transport_portDB[pl_group].portDatabase[pl_port].connectionId;
+ if (vl_connId != pl_connId)
+ {
+ log("Inconsistent connnection id: ", vl_connId, "instead of: ", pl_connId);
+ setverdict(fail);
+ return false;
+ }
+
+ vl_found := f_EPTF_int2int_HashMap_Find(v_EPTF_HTTP_Transport_connId2GroupId_HM,
+ vl_connId, vl_result);
+
+ if (vl_found != pl_c2g) {
+ if (pl_c2g) {
+ log("Group id not found in Conn2Grp HM for connection (",
+ vl_connId, "), but it should be there!");
+ } else {
+ log("Group id found in Conn2Grp HM for connection (",
+ vl_connId, "), but it shouldn't be there!");
+ }
+
+ setverdict(fail);
+ return false;
+ }
+
+ vl_found := f_EPTF_int2int_HashMap_Find(v_EPTF_HTTP_Transport_connId2PortId_HM,
+ vl_connId, vl_result);
+
+ if (vl_found != pl_c2p) {
+ if (pl_c2p) {
+ log("Port id not found in Conn2Grp HM for connection (",
+ vl_connId, "), but it should be there!");
+ } else {
+ log("Port id found in Conn2Grp HM for connection (",
+ vl_connId, "), but it shouldn't be there!");
+ }
+
+ setverdict(fail);
+ return false;
+ }
+
+ vl_found := f_EPTF_FBQ_itemIsBusy(pl_port, v_EPTF_HTTP_Transport_portDB[pl_group].portStateQueue);
+ if (pl_busyState != vl_found) {
+ if (vl_found) {
+ log("Port is busy for sending!");
+ }
+ else {
+ log("Port is free for sending!");
+ }
+
+ return false;
+ }
+
+ return true;
+}
+
+function f_EPTF_HTTP_Test_DummyHTTPRequest(
+ in charstring pl_body)
+return octetstring
+{
+ var HTTPMessage vl_outgoingMessage := {
+ request := {
+ client_id:= omit,
+ method:= "GET",
+ uri:= "http://responder.com",
+ version_major := 1,
+ version_minor := 1,
+ header:= {{"Content-Length", int2str(lengthof(pl_body)) }},
+ body:= pl_body
+ }
+ }
+
+ log("HTTP message: ", vl_outgoingMessage);
+
+ return enc_HTTPMessage(vl_outgoingMessage);
+}
+
+function f_EPTF_HTTP_Test_bufferTest(in integer pl_size, in integer pl_offset)
+runs on EPTF_HTTP_Test_LocalAPI_CT
+{
+ var EPTF_HTTP_RingBuffer vl_buffer;
+ var integer vl_int := 0;
+ var boolean vl_busy := false;
+ var IntegerList vl_list := {};
+ var IntegerList vl_listExpected := {};
+ var integer vl_headIdx := -1;
+
+ f_EPTF_HTTP_RingBuffer_init(vl_buffer, pl_size, 0);
+
+ vl_buffer.nextSeqNum := pl_offset;
+ vl_buffer.waitForSeqNum := pl_offset;
+
+
+ for(var integer i := 0; i < pl_size; i := i + 1)
+ {
+ vl_listExpected[sizeof(vl_listExpected)] := (i + pl_offset) mod pl_size;
+ }
+
+ vl_listExpected[sizeof(vl_listExpected)] := -1;
+
+ for(var integer i := 0; i < pl_size + 1; i := i + 1)
+ {
+ vl_list[sizeof(vl_list)] := f_EPTF_HTTP_RingBuffer_getNext(vl_buffer)
+ }
+
+ if (vl_list != vl_listExpected)
+ {
+ setverdict(fail);
+ log("Error: getting sequence number. Expected: ", vl_listExpected, " got: ", vl_list);
+ log(vl_buffer);
+ }
+
+ for(var integer i := pl_size - 1; i > 0; i := i - 1)
+ {
+ f_EPTF_HTTP_RingBuffer_setElementBusy(vl_buffer, (i + pl_offset) mod pl_size);
+ vl_busy := f_EPTF_HTTP_RingBuffer_isHeadBusy(vl_buffer) or vl_busy;
+ }
+
+ if (vl_busy)
+ {
+ log("Error: header should be free");
+ log(vl_buffer);
+ setverdict(fail);
+ }
+
+ f_EPTF_HTTP_RingBuffer_setElementBusy(vl_buffer, pl_offset);
+
+ while (f_EPTF_HTTP_RingBuffer_isHeadBusy(vl_buffer))
+ {
+ vl_list[sizeof(vl_list)] := f_EPTF_HTTP_RingBuffer_getHeadIdx(vl_buffer);
+ f_EPTF_HTTP_RingBuffer_freeHead(vl_buffer);
+ }
+
+ for (var integer i := 0; i < pl_size; i := i + 1)
+ {
+ vl_listExpected[sizeof(vl_listExpected)] := (i + pl_offset) mod pl_size;
+ }
+
+ if (vl_list != vl_listExpected)
+ {
+ setverdict(fail);
+ log("Error: reading out buffer. Expected: ", vl_listExpected, " got: ", vl_list);
+ log(vl_buffer);
+ }
+
+ vl_headIdx := f_EPTF_HTTP_RingBuffer_getHeadIdx(vl_buffer);
+
+ if (vl_headIdx != pl_offset)
+ {
+ log("Error: head index: ", vl_headIdx, " expected: ", pl_offset);
+ log(vl_buffer);
+ setverdict(fail);
+ }
+
+ vl_int := f_EPTF_HTTP_RingBuffer_getNext(vl_buffer);
+
+ if (pl_offset != vl_int)
+ {
+ log("Error: next sequence number: ", vl_int, " expected: ", pl_offset);
+ log(vl_buffer);
+ setverdict(fail);
+ }
+
+ if (f_EPTF_int2int_HashMap_Size(vl_buffer.isSlotBusyHM) != 0)
+ {
+ log("Error: size of busy slot hash map should be 0.");
+ f_EPTF_int2int_HashMap_DumpByID(vl_buffer.isSlotBusyHM);
+ setverdict(fail);
+ }
+
+ f_EPTF_HTTP_RingBuffer_erase(vl_buffer, 0)
+}
+}
diff --git a/test/EPTF_Applib_HTTP_Test_Responder.ttcn b/test/EPTF_Applib_HTTP_Test_Responder.ttcn
new file mode 100644
index 0000000..6ba8aca
--- /dev/null
+++ b/test/EPTF_Applib_HTTP_Test_Responder.ttcn
@@ -0,0 +1,230 @@
+///////////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2000-2018 Ericsson Telecom AB
+//
+// All rights reserved. This program and the accompanying materials
+// are made available under the terms of the Eclipse Public License v1.0
+// which accompanies this distribution, and is available at
+// http://www.eclipse.org/legal/epl-v10.html
+///////////////////////////////////////////////////////////////////////////////
+//
+// File: EPTF_Applib_HTTP_Test_Responder.ttcn
+// Rev: <RnXnn>
+// Prodnr: CNL 113 618
+// Updated: 2009-01-08
+// Contact: http://ttcn.ericsson.se
+///////////////////////////////////////////////////////////////////////////////
+
+///////////////////////////////////////////////////////////
+// Module: EPTF_Applib_HTTP_Test_Responder
+//
+// Purpose:
+// This module contains the functions to simulate a HTTP
+// responder node for tests
+//
+// Module Parameters:
+// -
+//
+// Module depends on:
+// <HTTPmsg_Types>
+//
+// <IPL4asp_Types>
+//
+// <IPL4asp_PortType>
+//
+// <EPTF_CLL_Common_Definitions>
+//
+// Current Owner:
+// EAKOPER
+//
+// Last Review Date:
+// 2009-01-09
+//
+// Detailed Comments:
+// -
+//
+///////////////////////////////////////////////////////////
+
+module EPTF_Applib_HTTP_Test_Responder {
+
+//=========================================================================
+// Import Part
+//=========================================================================
+import from HTTPmsg_Types all;
+import from IPL4asp_Types all;
+import from IPL4asp_PortType all;
+import from EPTF_CLL_Common_Definitions all;
+
+//=========================================================================
+// Module parameters
+//=========================================================================
+modulepar charstring tsp_EPTF_HTTP_Test_Responder_host := "159.107.193.33";
+modulepar integer tsp_EPTF_HTTP_Test_Responder_port := 4000;
+
+//=========================================================================
+// Component types
+//=========================================================================
+type component EPTF_HTTP_Test_Responder_CT {
+ port IPL4asp_PT v_IPL4_PCO;
+ port EPTF_HTTP_Test_CM_PT v_CM_PCO;
+
+ var EPTF_HTTP_Test_Responder_HostInformationList v_hostDatabase := {};
+ var EPTF_IntegerList v_connIds := {};
+
+ var ASP_RecvFrom v_ASP_RecvFrom;
+ var ASP_Event v_ASP_Event;
+
+ var HTTPMessage v_HTTP_msg;
+
+ var integer v_intNoWarn;
+}
+
+//=========================================================================
+// Types
+//=========================================================================
+
+type port EPTF_HTTP_Test_CM_PT message {
+ inout charstring
+} with {extension "internal"}
+
+type record EPTF_HTTP_Test_Responder_HostInformation {
+ charstring hostIPAddress ,
+ integer hostPort
+}
+
+type record of EPTF_HTTP_Test_Responder_HostInformation EPTF_HTTP_Test_Responder_HostInformationList;
+
+//=========================================================================
+// Functions
+//=========================================================================
+function f_EPTF_HTTP_Test_Responder_init(
+ in EPTF_HTTP_Test_Responder_HostInformationList pl_hosts)
+runs on EPTF_HTTP_Test_Responder_CT return boolean
+{
+ var Result vl_result;
+ var integer i;
+
+ map(self:v_IPL4_PCO, system:v_IPL4_PCO);
+
+ v_hostDatabase := pl_hosts;
+
+ for (i := 0; i < sizeof(v_hostDatabase); i := i + 1)
+ {
+ vl_result := f_IPL4_listen(v_IPL4_PCO,
+ v_hostDatabase[i].hostIPAddress, v_hostDatabase[i].hostPort, { tcp := {} });
+
+ if (vl_result.errorCode == omit) {
+ log("Listening successful on: ", v_hostDatabase[i], " (", vl_result.connId, ")");
+ v_connIds[i] := vl_result.connId;
+ } else {
+ log("Listening failed on: ", v_hostDatabase[i], " (", vl_result, ")");
+ return false;
+ }
+ }
+
+ return true;
+}
+
+function f_EPTF_HTTP_Test_Responder_uninit()
+runs on EPTF_HTTP_Test_Responder_CT
+{
+ var Result vl_result;
+ var integer i;
+
+ for (i := 0; i < sizeof(v_connIds); i := i + 1)
+ {
+ vl_result := f_IPL4_close(v_IPL4_PCO, v_connIds[i], { tcp := {} });
+ }
+
+ v_hostDatabase := {};
+ v_connIds := {};
+
+ unmap(self:v_IPL4_PCO, system:v_IPL4_PCO);
+}
+
+function f_EPTF_HTTP_Test_dummyHTTPResponse(
+ in charstring pl_body)
+return octetstring
+{
+ var HTTPMessage vl_outgoingMessage := {
+ response := {
+ client_id := omit,
+ version_major := 1,
+ version_minor := 1,
+ statuscode := 200,
+ statustext := "OK",
+ header:= {{"Content-Length", int2str(lengthof(pl_body)) }},
+ body:= pl_body
+ }
+ }
+
+ log("HTTP message: ", vl_outgoingMessage);
+
+ return enc_HTTPMessage(vl_outgoingMessage);
+}
+
+function f_EPTF_HTTP_Test_Responder_behavior(
+ in integer pl_tcId,
+ in float pl_runningTime)
+runs on EPTF_HTTP_Test_Responder_CT
+{
+ log("<< Starting HTTP responder! >>");
+
+ timer t_guard := pl_runningTime;
+
+ var EPTF_HTTP_Test_Responder_HostInformationList vl_hList;
+ var ASP_Send vl_send;
+
+ // provide initial data according to TC
+ vl_hList := { { tsp_EPTF_HTTP_Test_Responder_host, tsp_EPTF_HTTP_Test_Responder_port + pl_tcId } };
+
+ // initialize component
+ if (not f_EPTF_HTTP_Test_Responder_init(vl_hList)) {
+ log("HTTP responder failed during initialization!");
+
+ f_EPTF_HTTP_Test_Responder_uninit();
+ setverdict(fail);
+ return
+ }
+
+ v_CM_PCO.send("Hello, I'm ready! :-)");
+
+ t_guard.start;
+ alt {
+ [] v_IPL4_PCO.receive(ASP_RecvFrom:?) -> value v_ASP_RecvFrom {
+ log("ASP receive from: ", v_ASP_RecvFrom);
+
+ v_intNoWarn := dec_HTTPMessage(v_ASP_RecvFrom.msg, v_HTTP_msg, false);
+ log("HTTP payload: ", v_HTTP_msg);
+
+ vl_send := {
+ v_ASP_RecvFrom.connId, {tcp := {}},
+ f_EPTF_HTTP_Test_dummyHTTPResponse(v_HTTP_msg.request.body)
+ };
+
+ v_IPL4_PCO.send(vl_send);
+
+ repeat;
+ }
+ [] v_IPL4_PCO.receive(ASP_Event:?) -> value v_ASP_Event {
+ log("ASP event: ", v_ASP_Event);
+ log(v_IPL4_PCO);
+ repeat;
+ }
+ [] v_IPL4_PCO.receive {
+ log("Invalid message received!");
+ repeat;
+ }
+ [] t_guard.timeout {
+ log("Timer timed out!");
+ }
+ }
+
+ f_EPTF_HTTP_Test_Responder_uninit();
+
+ log("<< Stopping HTTP responder! >>");
+
+ setverdict(pass);
+}
+
+}
diff --git a/test/EPTF_Applib_HTTP_Test_Templates.ttcn b/test/EPTF_Applib_HTTP_Test_Templates.ttcn
new file mode 100644
index 0000000..ed9ad83
--- /dev/null
+++ b/test/EPTF_Applib_HTTP_Test_Templates.ttcn
@@ -0,0 +1,42 @@
+///////////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2000-2018 Ericsson Telecom AB
+//
+// All rights reserved. This program and the accompanying materials
+// are made available under the terms of the Eclipse Public License v1.0
+// which accompanies this distribution, and is available at
+// http://www.eclipse.org/legal/epl-v10.html
+///////////////////////////////////////////////////////////////////////////////
+//
+// File: EPTF_Applib_HTTP_Test_Templates.ttcn
+// Rev: <RnXnn>
+// Prodnr: CNL 113 618
+// Updated: 2009-01-08
+// Contact: http://ttcn.ericsson.se
+///////////////////////////////////////////////////////////////////////////////
+
+///////////////////////////////////////////////////////////
+// Module: EPTF_Applib_HTTP_Test_Templates
+//
+// Purpose:
+// Templates of the EPTF HTTP application library test cases
+//
+// Module Parameters:
+// -
+//
+// Module depends on:
+// -
+//
+// Current Owner:
+// EAKOPER
+//
+// Last Review Date:
+// 2009-01-09
+//
+// Detailed Comments:
+// -
+//
+///////////////////////////////////////////////////////////
+module EPTF_Applib_HTTP_Test_Templates {
+
+}
diff --git a/test/EPTF_Applib_HTTP_Test_Testcases.ttcn b/test/EPTF_Applib_HTTP_Test_Testcases.ttcn
new file mode 100644
index 0000000..0d483d0
--- /dev/null
+++ b/test/EPTF_Applib_HTTP_Test_Testcases.ttcn
@@ -0,0 +1,2233 @@
+///////////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2000-2018 Ericsson Telecom AB
+//
+// All rights reserved. This program and the accompanying materials
+// are made available under the terms of the Eclipse Public License v1.0
+// which accompanies this distribution, and is available at
+// http://www.eclipse.org/legal/epl-v10.html
+///////////////////////////////////////////////////////////////////////////////
+//
+// File: EPTF_Applib_HTTP_Test_Testcases.ttcn
+// Rev: <RnXnn>
+// Prodnr: CNL 113 618
+// Updated: 2009-01-08
+// Contact: http://ttcn.ericsson.se
+///////////////////////////////////////////////////////////////////////////////
+
+///////////////////////////////////////////////////////////
+// Module: EPTF_Applib_HTTP_Test_Testcases
+//
+// Purpose:
+// HTTP application library testcases
+//
+// Module Parameters:
+// tsp_EPTF_HTTP_Test_Responder_host - *charstring* - host IP address of responder component
+// tsp_EPTF_HTTP_Test_Application1_host - *charstring* - host IP address of application1 component
+// tsp_Application2_host - *charstring* - host IP address of application2 component
+// tsp_EPTF_HTTP_Test_Responder_port - *charstring* - host port of responder component
+// tsp_EPTF_HTTP_Test_NonExistent_host - *charstring* - a non existent host IP address
+//
+// Module depends on:
+// <EPTF_CLL_HashMapInt2Int_Functions>
+//
+// <EPTF_CLL_HashMapStr2Int_Functions>
+//
+// <EPTF_CLL_FBQ_Functions>
+//
+// <EPTF_CLL_Base_Functions>
+//
+// <EPTF_CLL_Logging_Definitions>
+//
+// <EPTF_CLL_Logging_Functions>
+//
+// <IPL4asp_Types>
+//
+// <EPTF_HTTP_Definitions>
+//
+// <EPTF_HTTP_Functions>
+//
+// <EPTF_HTTP_Transport_Definitions>
+//
+// <EPTF_HTTP_Transport_Functions>
+//
+// <EPTF_Applib_HTTP_Test_Application1_Definitions>
+//
+// <EPTF_Applib_HTTP_Test_Application1_Functions>
+//
+// <EPTF_Applib_HTTP_Test_Definitions>
+//
+// <EPTF_Applib_HTTP_Test_Functions>
+//
+// <EPTF_Applib_HTTP_Test_Templates>
+//
+//
+// Current Owner:
+// EAKOPER
+//
+// Last Review Date:
+// 2009-01-09
+//
+// Detailed Comments:
+// -
+//
+///////////////////////////////////////////////////////////
+module EPTF_Applib_HTTP_Test_Testcases {
+
+//=========================================================================
+// Import Part
+//=========================================================================
+import from EPTF_CLL_HashMapInt2Int_Functions all;
+import from EPTF_CLL_HashMapStr2Int_Functions all;
+import from EPTF_CLL_FBQ_Functions all;
+import from EPTF_CLL_Base_Functions all;
+import from EPTF_CLL_Variable_Functions all;
+import from EPTF_CLL_Logging_Definitions all;
+import from EPTF_CLL_Logging_Functions all;
+import from IPL4asp_Types all;
+
+import from EPTF_HTTP_Definitions all;
+import from EPTF_HTTP_Functions all;
+import from EPTF_HTTP_Transport_Definitions all;
+import from EPTF_HTTP_Transport_Functions all;
+
+import from EPTF_Applib_HTTP_Test_Application1_Definitions all;
+import from EPTF_Applib_HTTP_Test_Application1_Functions all;
+import from EPTF_Applib_HTTP_Test_Definitions all;
+import from EPTF_Applib_HTTP_Test_Functions all;
+import from EPTF_Applib_HTTP_Test_Templates all;
+
+//=========================================================================
+// Module paramers
+//=========================================================================
+modulepar charstring tsp_EPTF_HTTP_Test_Responder_host := "159.107.193.33";
+modulepar integer tsp_EPTF_HTTP_Test_Responder_port := 4000;
+modulepar charstring tsp_EPTF_HTTP_Test_Application1_host := "159.107.193.33";
+modulepar integer tsp_EPTF_HTTP_Test_Application1_port := 5000;
+modulepar charstring tsp_EPTF_HTTP_Test_NonExistent_host := "159.1.1.1";
+
+//modulepar integer tsp_runningTime := 60;
+//modulepar integer tsp_QPS := 500;
+//modulepar integer tsp_rangeHi := 3000;
+
+//=========================================================================
+// Testcases
+//=========================================================================
+
+////=========================================================================
+// test of new port connection object
+// test of creation, deletion, database consistency and open/close
+testcase tc_EPTF_HTTP_Test_test1()
+runs on EPTF_HTTP_Test_LocalAPI_CT
+{
+ log("==============================");
+ log("<< Starting test case 1 ... >>");
+ log("==============================");
+ log("");
+
+ var EPTF_HTTP_HostInformation vl_local, vl_remote;
+ var integer vl_group, vl_dummy;
+ var boolean vl_pass := true;
+
+ // init base component
+ vl_dummy := f_EPTF_HTTP_LocalTransport_init_CT("EPTF_HTTP_Transport");
+
+ if ("LALA.0" != f_EPTF_HTTP_LocalTransport_createUniqueGroupName("LALA")) {
+ log("Creation of unique name failed");
+ vl_pass := false;
+ setverdict(fail);
+ }
+
+ // init testcase
+ vl_local := { "127.0.0.1", 5000 };
+ vl_remote := { "127.0.0.1", 4000 };
+
+ vl_group := f_EPTF_HTTP_LocalTransport_newPort(
+ {"MyLittlePorty", vl_local, vl_remote, true, false, false, omit});
+
+ if (vl_pass and vl_group != 0) {
+ log("Wrong group id acquired! (", vl_group, ")");
+ vl_pass := false;
+ setverdict(fail);
+ }
+
+ // check local host information in database
+ if (vl_pass and not f_EPTF_str2int_HashMap_Find(v_EPTF_HTTP_Transport_localHostHashMap,
+ vl_local.hostIPAddress&int2str(vl_local.hostPort),
+ vl_dummy))
+ {
+ log("Adding local host information to database has failed! (", vl_local, ")");
+ vl_pass := false;
+ setverdict(fail);
+ }
+
+ // check remote host information in database
+ if (vl_pass and not f_EPTF_str2int_HashMap_Find(v_EPTF_HTTP_Transport_remoteHostHashMap,
+ vl_local.hostIPAddress&int2str(vl_remote.hostPort),
+ vl_dummy))
+ {
+ log("Adding remote host information to database has failed! (", vl_remote, ")");
+ vl_pass := false;
+ setverdict(fail);
+ }
+
+ // Check created database
+ if (vl_pass)
+ {
+ template EPTF_HTTP_Transport_PortGroupList t_expectedPortDB1 := { {
+ name := "MyLittlePorty",
+ baseLocalHostInformation := vl_local,
+ baseRemoteHostInformation := vl_remote,
+
+ currentPortId := ?,
+
+ numberOfPorts := 1,
+ localportStep := 0,
+ remoteportStep := 0,
+
+ portDatabase := {
+ {
+ groupIndex := 0,
+ portIndex := 0,
+ connectionId := -1,
+ sessionId := ?,
+ portId := -1,
+ localhostInfoIdx := 0,
+ remotehostInfoIdx := 0,
+ state := IDLE,
+ portType := OUTGOING_PORT,
+ buffer := false,
+ messageBuffer := omit
+ }
+ },
+
+ listeningPortIdx := -1,
+
+ defaultFIdx := 1,
+
+ portQueue := ?,
+ portStateQueue := ?,
+
+ useSSL := false,
+ instantConnOpen := true,
+ instantConnClose := false,
+ buffer := false
+ } };
+
+ if (not match(v_EPTF_HTTP_Transport_portDB, t_expectedPortDB1)) {
+ log("Database inconsistency after addition to v_EPTF_HTTP_Transport_portDB!");
+ log(match(v_EPTF_HTTP_Transport_portDB, t_expectedPortDB1));
+ vl_pass := false;
+ setverdict(fail);
+ }
+ }
+
+ if (vl_pass)
+ {
+ template EPTF_HTTP_Transport_PortGroupList t_expectedPortDB2 := { {
+ name := "",
+ baseLocalHostInformation := { "", -1 },
+ baseRemoteHostInformation := { "", -1 },
+
+ currentPortId := ?,
+ numberOfPorts := 0,
+ localportStep := -1,
+ remoteportStep := -1,
+
+ portDatabase := { },
+
+ listeningPortIdx := -1,
+
+ defaultFIdx := -1,
+
+ portQueue := ?,
+ portStateQueue := ?,
+
+ useSSL := false,
+ instantConnOpen := false,
+ instantConnClose := false,
+ buffer := false
+ } };
+
+ f_EPTF_HTTP_LocalTransport_deletePort(vl_group);
+
+ if (not match(v_EPTF_HTTP_Transport_portDB, t_expectedPortDB2)) {
+ log("Database inconsistency after deletion from v_EPTF_HTTP_Transport_portDB!");
+ log(match(v_EPTF_HTTP_Transport_portDB, t_expectedPortDB2));
+ vl_pass := false;
+ setverdict(fail);
+ }
+
+ // check local host information in database (must not be deleted after removal of port)
+ if (vl_pass and not f_EPTF_str2int_HashMap_Find(v_EPTF_HTTP_Transport_localHostHashMap,
+ vl_local.hostIPAddress&int2str(vl_local.hostPort),
+ vl_dummy))
+ {
+ log("Local host information has been removed from database! (", vl_local, ")");
+ vl_pass := false;
+ setverdict(fail);
+ }
+
+ // check remote host information in database (must not be deleted after removal of port)
+ if (vl_pass and not f_EPTF_str2int_HashMap_Find(v_EPTF_HTTP_Transport_remoteHostHashMap,
+ vl_local.hostIPAddress&int2str(vl_remote.hostPort),
+ vl_dummy))
+ {
+ log("Remote host information has been removed from database! (", vl_remote, ")");
+ vl_pass := false;
+ setverdict(fail);
+ }
+ }
+ var integer vl_sessionId := 1;
+ if (vl_pass and f_EPTF_HTTP_LocalTransport_connectionOpen(vl_group, vl_sessionId)) {
+ log("Connection open successful after deletion of connection object!");
+ vl_pass := false;
+ setverdict(fail);
+ }
+
+ if (vl_pass) {
+ f_EPTF_HTTP_LocalTransport_connectionClose(vl_group); // no ret value, check no dynamic error
+ f_EPTF_HTTP_LocalTransport_deletePort(vl_group);
+ }
+
+ if (f_EPTF_FBQ_itemIsBusy(vl_group, v_EPTF_HTTP_Transport_groupQueue)) {
+ log("Group not deleted properly!");
+ vl_pass := false;
+ setverdict(fail);
+ }
+
+f_EPTF_Base_cleanup_CT();
+
+ if (vl_pass) { setverdict(pass); };
+
+}
+
+////=========================================================================
+// test of new group connection object
+// test of creation, deletion, database consistency and open/close
+testcase tc_EPTF_HTTP_Test_test2()
+runs on EPTF_HTTP_Test_LocalAPI_CT
+{
+ log("==============================");
+ log("<< Starting test case 2 ... >>");
+ log("==============================");
+ log("");
+
+ var EPTF_HTTP_HostInformation vl_local, vl_remote;
+ var integer vl_group, vl_dummy;
+ var boolean vl_pass := true;
+
+ // init base component
+ v_noIntWarning := f_EPTF_HTTP_LocalTransport_init_CT("EPTF_HTTP_Transport");
+
+ // init testcase
+ vl_local := { "127.0.0.1", 5000 };
+ vl_remote := { "127.0.0.1", 4000 };
+
+ vl_group := f_EPTF_HTTP_LocalTransport_newPortGroup(
+ {"MyLittleGroupy", vl_local, vl_remote, 3, 2, 0, true, false, false, omit});
+
+ if (vl_pass and vl_group != 0) {
+ log("Wrong group id acquired! (", vl_group, ")");
+ vl_pass := false;
+ setverdict(fail);
+ }
+
+ // check local host information in database
+ if (vl_pass and not f_EPTF_str2int_HashMap_Find(v_EPTF_HTTP_Transport_localHostHashMap,
+ vl_local.hostIPAddress&int2str(vl_local.hostPort),
+ vl_dummy))
+ {
+ log("Adding local host information to database has failed! (", vl_local, ")");
+ vl_pass := false;
+ setverdict(fail);
+ }
+
+ // check remote host information in database
+ if (vl_pass and not f_EPTF_str2int_HashMap_Find(v_EPTF_HTTP_Transport_remoteHostHashMap,
+ vl_local.hostIPAddress&int2str(vl_remote.hostPort),
+ vl_dummy))
+ {
+ log("Adding remote host information to database has failed! (", vl_remote, ")");
+ vl_pass := false;
+ setverdict(fail);
+ }
+
+ // Check created database
+ if (vl_pass)
+ {
+ template EPTF_HTTP_Transport_PortGroupList t_expectedPortDB1 := { {
+ name := "MyLittleGroupy",
+ baseLocalHostInformation := vl_local,
+ baseRemoteHostInformation := vl_remote,
+
+ currentPortId := ?,
+
+ numberOfPorts := 3,
+ localportStep := 2,
+ remoteportStep := 0,
+
+ portDatabase := {
+ {
+ groupIndex := 0,
+ portIndex := 0,
+ connectionId := -1,
+ sessionId := -1,
+ portId := -1,
+ localhostInfoIdx := 0,
+ remotehostInfoIdx := 0,
+ state := IDLE,
+ portType := OUTGOING_PORT,
+ buffer := false,
+ messageBuffer := omit
+ },
+ {
+ groupIndex := 0,
+ portIndex := 1,
+ connectionId := -1,
+ sessionId := -1,
+ portId := -1,
+ localhostInfoIdx := 1,
+ remotehostInfoIdx := 0,
+ state := IDLE,
+ portType := OUTGOING_PORT,
+ buffer := false,
+ messageBuffer := omit
+ },
+ {
+ groupIndex := 0,
+ portIndex := 2,
+ connectionId := -1,
+ sessionId := -1,
+ portId := -1,
+ localhostInfoIdx := 2,
+ remotehostInfoIdx := 0,
+ state := IDLE,
+ portType := OUTGOING_PORT,
+ buffer := false,
+ messageBuffer := omit
+ }
+ },
+
+ listeningPortIdx := -1,
+
+ defaultFIdx := 0,
+
+ portQueue := ?,
+ portStateQueue := ?,
+
+ useSSL := false,
+ instantConnOpen := true,
+ instantConnClose := false,
+ buffer := false
+ } };
+
+ if (not match(v_EPTF_HTTP_Transport_portDB, t_expectedPortDB1)) {
+ log("Database inconsistency after addition to v_EPTF_HTTP_Transport_portDB!");
+ log(match(v_EPTF_HTTP_Transport_portDB, t_expectedPortDB1));
+ vl_pass := false;
+ setverdict(fail);
+ }
+ }
+
+ if (vl_pass)
+ {
+ template EPTF_HTTP_Transport_PortGroupList t_expectedPortDB2 := { {
+ name := "",
+ baseLocalHostInformation := { "", -1 },
+ baseRemoteHostInformation := { "", -1 },
+
+ currentPortId := ?,
+
+ numberOfPorts := 0,
+ localportStep := -1,
+ remoteportStep := -1,
+
+ portDatabase := { },
+
+ listeningPortIdx := -1,
+
+ defaultFIdx := -1,
+
+ portQueue := ?,
+ portStateQueue := ?,
+
+ useSSL := false,
+ instantConnOpen := false,
+ instantConnClose := false,
+ buffer := false
+ } };
+
+ f_EPTF_HTTP_LocalTransport_deletePort(vl_group);
+
+ if (not match(v_EPTF_HTTP_Transport_portDB, t_expectedPortDB2)) {
+ log("Database inconsistency after deletion from v_EPTF_HTTP_Transport_portDB!");
+ log(match(v_EPTF_HTTP_Transport_portDB, t_expectedPortDB2));
+ vl_pass := false;
+ setverdict(fail);
+ }
+
+ // check local host information in database (must not be deleted after removal of port)
+ if (vl_pass and not f_EPTF_str2int_HashMap_Find(v_EPTF_HTTP_Transport_localHostHashMap,
+ vl_local.hostIPAddress&int2str(vl_local.hostPort),
+ vl_dummy))
+ {
+ log("Local host information has been removed from database! (", vl_local, ")");
+ vl_pass := false;
+ setverdict(fail);
+ }
+
+ // check remote host information in database (must not be deleted after removal of port)
+ if (vl_pass and not f_EPTF_str2int_HashMap_Find(v_EPTF_HTTP_Transport_remoteHostHashMap,
+ vl_local.hostIPAddress&int2str(vl_remote.hostPort),
+ vl_dummy))
+ {
+ log("Remote host information has been removed from database! (", vl_remote, ")");
+ vl_pass := false;
+ setverdict(fail);
+ }
+ }
+ var integer vl_sessionId := 1;
+ if (vl_pass and f_EPTF_HTTP_LocalTransport_connectionOpen(vl_group, vl_sessionId)) {
+ log("Connection open successful after deletion of connection object!");
+ vl_pass := false;
+ setverdict(fail);
+ }
+
+ if (vl_pass) {
+ f_EPTF_HTTP_LocalTransport_connectionClose(vl_group); // no ret value, check no dznamic errorohh
+ f_EPTF_HTTP_LocalTransport_deletePortGroup(vl_group);
+ }
+
+ if (f_EPTF_FBQ_itemIsBusy(vl_group, v_EPTF_HTTP_Transport_groupQueue)) {
+ log("Group not deleted properly!");
+ vl_pass := false;
+ setverdict(fail);
+ }
+
+ f_EPTF_Base_cleanup_CT();
+
+ if (vl_pass) { setverdict(pass); };
+}
+testcase tc_EPTF_HTTP_Test_test3()
+runs on EPTF_HTTP_Test_RemoteAPI_CT
+{
+ log("==============================");
+ log("<< Starting test case 3 ... >>");
+ log("==============================");
+ log("");
+
+ timer t_guard := 2.0;
+ timer t_wait := 1.0;
+
+ f_EPTF_HTTP_init(
+ "APPL1_LGEN",
+ 1,
+ "HTTP1_",
+ 0); //, pl_bind, pl_reset, pl_unbind);
+
+ // Initialize transport
+ v_noIntWarning := f_EPTF_HTTP_RemoteTransport_init_CT("RemoteVagyokRagyogok",
+ refers(f_EPTF_HTTP_messageReceived),
+ refers(f_EPTF_HTTP_eventReceived),
+ refers(f_EPTF_HTTP_socketErrorReceived));
+
+ f_EPTF_HTTP_setSendRequestFunction(refers(f_EPTF_HTTP_RemoteTransport_sendMessage));
+ f_EPTF_HTTP_setConnectionCloseFunction(refers(f_EPTF_HTTP_RemoteTransport_connectionClose));
+ f_EPTF_HTTP_setConnectionOpenFunction(refers(f_EPTF_HTTP_RemoteTransport_connectionOpen));
+ f_EPTF_HTTP_setConnectionHalfCloseFunction(refers(f_EPTF_HTTP_RemoteTransport_connectionHalfClose));
+
+ var EPTF_HTTP_Test_Application1_MapperCT vl_mapper_comp;
+
+ vl_mapper_comp := EPTF_HTTP_Test_Application1_MapperCT.create("MapperVagyokRagyogok");
+
+ connect(self:v_EPTF_HTTP_RemoteTransport_commPort,
+ vl_mapper_comp:v_EPTF_HTTP_Mapper_commPort);
+ connect(self:v_validation_PCO,
+ vl_mapper_comp:v_validation_PCO);
+
+ vl_mapper_comp.start(
+ f_EPTF_HTTP_Test_Application1_Mapper_Behavior_CheckAPI(10.0));
+
+ var EPTF_HTTP_Transport_GroupMode vl_group := {
+ name := "MyGroup",
+
+ localHostInformation := { "127.0.0.1", 4000 },
+ remoteHostInformation := { "127.0.0.1", 5000 },
+
+ numberOfPorts := 2,
+ localportStep := 1,
+ remoteportStep := 0,
+
+ instantConnOpen := true,
+ instantConnClose := true,
+ useSSL := false,
+ userFunctions := omit
+ };
+
+ var EPTF_HTTP_Transport_PortMode vl_port :=
+ {
+ name := "MyPort",
+ localHostInformation := { "127.0.0.1", 4000 },
+ remoteHostInformation := { "127.0.0.1", 5000 },
+ instantConnOpen := true,
+ instantConnClose := true,
+ useSSL := false,
+ userFunctions := omit
+ };
+
+ var integer vl_groupId;
+ var boolean vl_pass := true;
+ vl_groupId := f_EPTF_HTTP_RemoteTransport_newPortGroup(vl_group)
+
+ if (vl_pass and vl_groupId != 0) {
+ log("Group creation unsuccessful! Acquired id: ", vl_groupId);
+ setverdict(fail);
+ vl_pass := false;
+ }
+
+ if (vl_pass) {
+ f_EPTF_HTTP_RemoteTransport_deletePortGroup(vl_groupId);
+ vl_groupId := f_EPTF_HTTP_RemoteTransport_newPortGroup(vl_group);
+
+ if (vl_groupId != 0) {
+ log("Group creation unsuccessful! Acquired id: ", vl_groupId)
+ setverdict(fail);
+ vl_pass := false;
+ }
+ }
+
+ v_validation_PCO.send(EPTF_HTTP_Test_Valid:{0, vl_groupId})
+ t_guard.start;
+ alt{
+ [] v_validation_PCO.receive(EPTF_HTTP_Test_Status:READY){t_guard.stop;}
+ [] t_guard.timeout{
+ log("Validation timer timeout! ");
+ setverdict(fail);
+ }
+ }
+ // Mapper side validation 1 comes here
+
+ if (vl_pass) {
+ if (not f_EPTF_HTTP_RemoteTransport_addPortToGroup(vl_groupId)) {
+ log("Port addition unsuccessful to group: ", vl_groupId);
+ setverdict(fail);
+ vl_pass := false;
+ }
+ }
+
+ v_validation_PCO.send(EPTF_HTTP_Test_Valid:{1, vl_groupId})
+ t_guard.start;
+ alt{
+ [] v_validation_PCO.receive(EPTF_HTTP_Test_Status:READY){t_guard.stop;}
+ [] t_guard.timeout{
+ log("Validation timer timeout! ");
+ setverdict(fail);
+ }
+ }
+
+ // Mapper side validation 2 comes here
+
+ if (vl_pass) {
+ f_EPTF_HTTP_RemoteTransport_removePortFromGroup(vl_groupId);
+ }
+
+ t_wait.start;
+ t_wait.timeout;
+
+ v_validation_PCO.send(EPTF_HTTP_Test_Valid:{2, vl_groupId})
+ t_guard.start;
+ alt{
+ [] v_validation_PCO.receive(EPTF_HTTP_Test_Status:READY){t_guard.stop;}
+ [] t_guard.timeout{
+ log("Validation timer timeout! ");
+ setverdict(fail);
+ }
+ }
+
+ // Mapper side validation 3 comes here
+
+ if (vl_pass) {
+ vl_groupId := f_EPTF_HTTP_RemoteTransport_newPort(vl_port)
+
+ if (vl_groupId != 1) {
+ log("Port creation unsuccessful! Acquired id: ", vl_groupId);
+ setverdict(fail);
+ vl_pass := false;
+ }
+ }
+
+ if (vl_pass) {
+ f_EPTF_HTTP_RemoteTransport_deletePort(vl_groupId);
+ vl_groupId := f_EPTF_HTTP_RemoteTransport_newPort(vl_port);
+
+ if (vl_groupId != 1) {
+ log("Port recreation unsuccessful!");
+ setverdict(fail);
+ vl_pass := false;
+ }
+ }
+
+ if (vl_pass) {
+ vl_port.name := "MyPort2";
+ vl_groupId := f_EPTF_HTTP_RemoteTransport_newPort(vl_port);
+
+ if (vl_groupId != 2) {
+ log("Port creation unsuccessful!");
+ setverdict(fail);
+ vl_pass := false;
+ }
+ }
+
+ v_validation_PCO.send(EPTF_HTTP_Test_Valid:{3, vl_groupId})
+ t_guard.start;
+ alt{
+ [] v_validation_PCO.receive(EPTF_HTTP_Test_Status:READY){t_guard.stop;}
+ [] t_guard.timeout{
+ log("Validation timer timeout! ");
+ setverdict(fail);
+ }
+ }
+
+ f_EPTF_Base_cleanup_CT();
+
+ setverdict(pass);
+
+}
+
+// test random remote API usage
+// no validation, testcase passes if it stops without errors
+testcase tc_EPTF_HTTP_Test_test4()
+runs on EPTF_HTTP_Test_RemoteAPI_CT
+{
+ log("==============================");
+ log("<< Starting test case 4 ... >>");
+ log("==============================");
+ log("");
+
+ f_EPTF_HTTP_init(
+ "APPL1_LGEN",
+ 1,
+ "HTTP1_",
+ 0); //, pl_bind, pl_reset, pl_unbind);
+
+ // Initialize transport
+
+ v_noIntWarning := f_EPTF_HTTP_RemoteTransport_init_CT("RemoteVagyokRagyogok",
+ refers(f_EPTF_HTTP_messageReceived),
+ refers(f_EPTF_HTTP_eventReceived),
+ refers(f_EPTF_HTTP_socketErrorReceived));
+
+ f_EPTF_HTTP_setSendRequestFunction(refers(f_EPTF_HTTP_RemoteTransport_sendMessage));
+ f_EPTF_HTTP_setConnectionCloseFunction(refers(f_EPTF_HTTP_RemoteTransport_connectionClose));
+ f_EPTF_HTTP_setConnectionOpenFunction(refers(f_EPTF_HTTP_RemoteTransport_connectionOpen));
+ f_EPTF_HTTP_setConnectionHalfCloseFunction(refers(f_EPTF_HTTP_RemoteTransport_connectionHalfClose));
+
+ var EPTF_HTTP_Test_Application1_MapperCT vl_mapper_comp;
+
+ vl_mapper_comp := EPTF_HTTP_Test_Application1_MapperCT.create("MapperVagyokRagyogok");
+
+ connect(self:v_EPTF_HTTP_RemoteTransport_commPort,
+ vl_mapper_comp:v_EPTF_HTTP_Mapper_commPort);
+
+ vl_mapper_comp.start(
+ f_EPTF_HTTP_Test_Application1_Mapper_Behavior_CheckRandomAPI(10.0));
+
+ var EPTF_HTTP_Transport_GroupMode vl_group := {
+ name := omit,
+
+ localHostInformation := { "127.0.0.1", 4000 },
+ remoteHostInformation := { "127.0.0.1", 5000 },
+
+ numberOfPorts := 2,
+ localportStep := 1,
+ remoteportStep := 0,
+
+ instantConnOpen := true,
+ instantConnClose := true,
+ useSSL := false,
+ userFunctions := omit
+ };
+
+ var EPTF_HTTP_Transport_PortMode vl_port :=
+ {
+ name := omit,
+ localHostInformation := { "127.0.0.1", 4000 },
+ remoteHostInformation := { "127.0.0.1", 5000 },
+ instantConnOpen := true,
+ instantConnClose := true,
+ useSSL := false,
+ userFunctions := omit
+ };
+
+ var integer i, op;
+ var integer vl_grpId, vl_hPort := 0;
+
+ for (i := 0; i < 1000; i := i + 1)
+ {
+ op := float2int(12.999 * rnd());
+
+ select(op)
+ {
+ case (0) { // new group
+ vl_group.numberOfPorts := float2int(5.0 * rnd()) + 1;
+ vl_group.localportStep := float2int(2.0 * rnd()) + 1;
+
+ if (f_EPTF_HTTP_RemoteTransport_newPortGroup(vl_group) != -1) {
+ vl_hPort := vl_hPort + 1;
+ }
+ }
+ case (1) { // new port
+ if (f_EPTF_HTTP_RemoteTransport_newPort(vl_port) != -1) {
+ vl_hPort := vl_hPort + 1;
+ }
+ }
+ case (2) { // delete group
+ if (vl_hPort > 0) { vl_hPort := vl_hPort - 1; };
+
+ vl_grpId := float2int(1.2 * rnd() * int2float(vl_hPort)); // 1.2 for chance to have bad IDs
+ f_EPTF_HTTP_RemoteTransport_deletePortGroup(vl_grpId);
+ }
+ case (3) { // delete port
+ if (vl_hPort > 0) { vl_hPort := vl_hPort - 1; };
+
+ vl_grpId := float2int(1.2 * rnd() * int2float(vl_hPort)); // 1.2 for chance to have bad IDs
+ f_EPTF_HTTP_RemoteTransport_deletePort(vl_grpId);
+ }
+ case (4) { // add port to group
+ vl_grpId := float2int(rnd() * int2float(vl_hPort));
+ v_noBoolWarning :=
+ f_EPTF_HTTP_RemoteTransport_addPortToGroup(vl_grpId);
+ }
+ case (5) { // remove port from port
+ vl_grpId := float2int(rnd() * int2float(vl_hPort));
+ f_EPTF_HTTP_RemoteTransport_removePortFromGroup(vl_grpId);
+ }
+ case (6) { // remove port from port again
+ vl_grpId := float2int(rnd() * int2float(vl_hPort));
+ f_EPTF_HTTP_RemoteTransport_removePortFromGroup(vl_grpId);
+ }
+ case (7) { // remove port from port again
+ vl_grpId := float2int(rnd() * int2float(vl_hPort));
+ var integer vl_sessionId := 1;
+ v_noBoolWarning :=
+ f_EPTF_HTTP_RemoteTransport_connectionOpen(vl_grpId,vl_sessionId);
+ }
+ case (8) { // remove port from port again
+ vl_grpId := float2int(rnd() * int2float(vl_hPort));
+ f_EPTF_HTTP_RemoteTransport_connectionClose(vl_grpId);
+ }
+ case (9) { // remove port from port again
+ vl_grpId := float2int(rnd() * int2float(vl_hPort));
+ f_EPTF_HTTP_RemoteTransport_connectionHalfClose(vl_grpId);
+ }
+ case (10) { // remove port from port again
+ vl_grpId := float2int(rnd() * int2float(vl_hPort));
+ f_EPTF_HTTP_RemoteTransport_sendMessage(vl_grpId, 0, char2oct("ABCD"));
+ }
+ case (11) { // close port of user
+ vl_grpId := float2int(rnd() * int2float(vl_hPort));
+ f_EPTF_HTTP_RemoteTransport_closePortOfUser(vl_grpId, 0);
+ }
+ case (12) { // free port of user
+ vl_grpId := float2int(rnd() * int2float(vl_hPort));
+ f_EPTF_HTTP_RemoteTransport_freePortOfUser(vl_grpId, 0);
+ }
+ case else {
+ log("Wrong operation!");
+ }
+ }
+ }
+
+ f_EPTF_Base_cleanup_CT();
+
+ setverdict(pass);
+}
+
+////=========================================================================
+// real connection test for port object
+// instant open / close / open for single port
+testcase tc_EPTF_HTTP_Test_test5()
+runs on EPTF_HTTP_Test_LocalAPI_CT
+{
+ log("==============================");
+ log("<< Starting test case 5 ... >>");
+ log("==============================");
+ log("");
+
+ var EPTF_HTTP_HostInformation vl_local, vl_remote;
+ var integer vl_group, vl_dummy, vl_tcIdx := 5;
+ var boolean vl_bNoW, vl_pass := true;
+
+ // create components
+ f_EPTF_HTTP_Test_createResponder(vl_tcIdx, 12.0);
+
+ // init base component
+ v_noIntWarning := f_EPTF_HTTP_LocalTransport_init_CT("EPTF_HTTP_Transport");
+
+ // init testcase
+ vl_local := { tsp_EPTF_HTTP_Test_Application1_host, tsp_EPTF_HTTP_Test_Application1_port };
+ vl_remote := { tsp_EPTF_HTTP_Test_Responder_host, tsp_EPTF_HTTP_Test_Responder_port + vl_tcIdx };
+
+ vl_group := f_EPTF_HTTP_LocalTransport_newPort( // connection set to open instantly
+ {"MyLittlePorty", vl_local, vl_remote, false, false, false, omit});
+
+ if (vl_pass and vl_group != 0) {
+ log("Wrong group id acquired! (", vl_group, ")");
+ vl_pass := false;
+ setverdict(fail);
+ }
+
+ if (vl_pass and not f_EPTF_HTTP_Test_checkPortState(vl_group, 0, OPENED, 1, true, true, false)) {
+ vl_pass := false;
+ setverdict(fail);
+ }
+
+
+ if (vl_pass) {
+ log("Starting altstep!");
+
+ var integer vl_actionCnt := 0;
+ timer t_action := 1.0;
+ timer t_guard := 12.0;
+ t_action.start;
+ t_guard.start;
+ alt {
+/* [] IPL4_PCO.receive(ASP_RecvFrom:?) -> value v_ASP_RecvFrom {
+ log("ASP receive from: ", v_ASP_RecvFrom);
+ repeat;
+ }
+ [] IPL4_PCO.receive(ASP_Event:?) -> value v_ASP_Event {
+ log("ASP event: ", v_ASP_Event);
+ repeat;
+ }
+ [] IPL4_PCO.receive {
+ log("Invalid message received!");
+ repeat;
+ }*/
+ [] t_action.timeout {
+ if (vl_actionCnt == 0) { // reopen connection
+ var integer vl_sessionId := 1;
+ vl_bNoW := f_EPTF_HTTP_LocalTransport_connectionOpen(vl_group, vl_sessionId);
+
+ if (not f_EPTF_HTTP_Test_checkPortState(vl_group, 0, OPENED, 1, true, true, false)) {
+ vl_pass := false;
+ setverdict(fail);
+ } else {
+ t_action.start;
+ }
+ }
+ else
+ if (vl_actionCnt == 1) { // send message
+
+ v_HTTP_oct := f_EPTF_HTTP_Test_DummyHTTPRequest("AABBCC");
+ f_EPTF_HTTP_LocalTransport_sendMessage(vl_group, 0, v_HTTP_oct);
+ //var integer vl_dec := dec_HTTPMessage(v_HTTP_oct, v_HTTP_msg);
+ //log("Sending (", vl_dec, "): ", v_HTTP_msg);
+
+ if (not f_EPTF_HTTP_Test_checkPortState(vl_group, 0, OPENED, 1, true, true, true)) {
+ vl_pass := false;
+ setverdict(fail);
+ } else {
+ t_action.start;
+ }
+ }
+ else
+ if (vl_actionCnt == 2) { // send message
+
+ v_HTTP_oct := f_EPTF_HTTP_Test_DummyHTTPRequest("CCBBAA");
+ f_EPTF_HTTP_LocalTransport_sendMessage(vl_group, 1, v_HTTP_oct);
+ //var integer vl_dec := dec_HTTPMessage(v_HTTP_oct, v_HTTP_msg);
+ //log("Sending (", vl_dec, "): ", v_HTTP_msg);
+
+ if (not f_EPTF_HTTP_Test_checkPortState(vl_group, 0, OPENED, 1, true, true, true)) {
+ vl_pass := false;
+ setverdict(fail);
+ } else {
+ t_action.start;
+ }
+ }
+ else
+ if (vl_actionCnt == 3) { // half close connection
+ f_EPTF_HTTP_LocalTransport_connectionHalfClose(vl_group);
+
+ if (not f_EPTF_HTTP_Test_checkPortState(vl_group, 0, HALFCLOSED, 1, true, true, true)) {
+ vl_pass := false;
+ setverdict(fail);
+ } else {
+ t_action.start;
+ }
+ }
+ else
+ if (vl_actionCnt == 4) { // rehalf close connection
+ f_EPTF_HTTP_LocalTransport_connectionHalfClose(vl_group);
+
+ if (not f_EPTF_HTTP_Test_checkPortState(vl_group, 0, HALFCLOSED, 1, true, true, true)) {
+ vl_pass := false;
+ setverdict(fail);
+ } else {
+ t_action.start;
+ }
+ }
+ else
+ if (vl_actionCnt == 5) { // close connection
+ f_EPTF_HTTP_LocalTransport_connectionClose(vl_group);
+
+ if (not f_EPTF_HTTP_Test_checkPortState(vl_group, 0, IDLE, -1, false, false, false)) {
+ vl_pass := false;
+ setverdict(fail);
+ } else {
+ t_action.start;
+ }
+ }
+ else
+ if (vl_actionCnt == 6) { // reclose connection
+ f_EPTF_HTTP_LocalTransport_connectionClose(vl_group);
+
+ if (not f_EPTF_HTTP_Test_checkPortState(vl_group, 0, IDLE, -1, false, false, false)) {
+ vl_pass := false;
+ setverdict(fail);
+ }
+
+ //t_action.start;
+ }
+
+ vl_actionCnt := vl_actionCnt + 1;
+
+ repeat;
+ }
+ [] t_guard.timeout {
+ log("Timer timed out!");
+ }
+ }
+
+ }
+
+ if (vl_pass) {
+ f_EPTF_HTTP_LocalTransport_closeConnection_defaultGroup(vl_group);
+ f_EPTF_HTTP_LocalTransport_deletePort(vl_group);
+
+ if (f_EPTF_FBQ_itemIsBusy(vl_group, v_EPTF_HTTP_Transport_groupQueue)) {
+ log("Group not deleted properly!");
+ vl_pass := false;
+ setverdict(fail);
+ }
+ }
+
+ f_EPTF_Base_cleanup_CT();
+
+ if (vl_pass) { setverdict(pass); };
+}
+
+////=========================================================================
+// real connection test for port object
+// instant open / close / open for single port
+testcase tc_EPTF_HTTP_Test_test6()
+runs on EPTF_HTTP_Test_LocalAPI_CT
+{
+ log("==============================");
+ log("<< Starting test case 6 ... >>");
+ log("==============================");
+ log("");
+
+ var EPTF_HTTP_HostInformation vl_local, vl_remote;
+ var integer i, vl_group, vl_dummy, vl_tcIdx := 6;
+ var boolean vl_bNoW, vl_pass := true;
+
+ // create components
+ f_EPTF_HTTP_Test_createResponder(vl_tcIdx, 12.0);
+
+ // init base component
+ v_noIntWarning := f_EPTF_HTTP_LocalTransport_init_CT("EPTF_HTTP_Transport");
+
+ // init testcase
+ vl_local := { tsp_EPTF_HTTP_Test_Application1_host, tsp_EPTF_HTTP_Test_Application1_port + 1 };
+ vl_remote := { tsp_EPTF_HTTP_Test_Responder_host, tsp_EPTF_HTTP_Test_Responder_port + vl_tcIdx };
+
+ vl_group := f_EPTF_HTTP_LocalTransport_newPortGroup( // connection set to open instantly
+ {"MyLittleGroupy", vl_local, vl_remote, 3, 1, 0, false, false, false, omit});
+
+ if (vl_pass and vl_group != 0) {
+ log("Wrong group id acquired! (", vl_group, ")");
+ vl_pass := false;
+ setverdict(fail);
+ }
+
+ for (i := 0; i < 3; i := i + 1) {
+ if (vl_pass and not f_EPTF_HTTP_Test_checkPortState(vl_group, i, OPENED, i + 1, true, true, false)) {
+ vl_pass := false; i := 3;
+ setverdict(fail);
+ }
+ }
+
+ if (vl_pass) {
+ log("Starting altstep!");
+
+ var integer vl_actionCnt := 0;
+ timer t_action := 1.0;
+ timer t_guard := 12.0;
+ t_action.start;
+ t_guard.start;
+ alt {
+/* [] IPL4_PCO.receive(ASP_RecvFrom:?) -> value v_ASP_RecvFrom {
+ log("ASP receive from: ", v_ASP_RecvFrom);
+ repeat;
+ }
+ [] IPL4_PCO.receive(ASP_Event:?) -> value v_ASP_Event {
+ log("ASP event: ", v_ASP_Event);
+ repeat;
+ }
+ [] IPL4_PCO.receive {
+ log("Invalid message received!");
+ repeat;
+ }*/
+ [] t_action.timeout {
+ if (vl_actionCnt == 0) { // reopen connection
+ log("Action: ", vl_actionCnt+1);
+ var integer vl_sessionId := 1;
+ vl_bNoW := f_EPTF_HTTP_LocalTransport_connectionOpen(vl_group, vl_sessionId);
+
+ for (i := 0; i < 3; i := i + 1) {
+ if (not f_EPTF_HTTP_Test_checkPortState(vl_group, i, OPENED, i + 1, true, true, false)) {
+ vl_pass := false; i := 3;
+ setverdict(fail);
+ }
+ }
+ if (vl_pass) { t_action.start; }
+ }
+ else
+ if (vl_actionCnt == 1) { // reopen connection
+ log("Action: ", vl_actionCnt+1);
+ for (i := 0; i < 4; i := i + 1) {
+ v_HTTP_oct := f_EPTF_HTTP_Test_DummyHTTPRequest("AABBCC" & int2str(i));
+ f_EPTF_HTTP_LocalTransport_sendMessage(vl_group, vl_actionCnt, v_HTTP_oct);
+ //var integer vl_dec := dec_HTTPMessage(v_HTTP_oct, v_HTTP_msg);
+ //log("Sending (", vl_dec, "): ", v_HTTP_msg);
+
+ }
+
+ for (i := 0; i < 3; i := i + 1) {
+ if (not f_EPTF_HTTP_Test_checkPortState(vl_group, i, OPENED, i + 1, true, true, true)) {
+ vl_pass := false; i := 3;
+ setverdict(fail);
+ }
+ }
+ if (vl_pass) { t_action.start; }
+ }
+ else
+ if (vl_actionCnt == 2) { // half close connection
+ log("Action: ", vl_actionCnt+1);
+ f_EPTF_HTTP_LocalTransport_connectionHalfClose(vl_group);
+
+ for (i := 0; i < 3; i := i + 1) {
+ if (not f_EPTF_HTTP_Test_checkPortState(vl_group, i, HALFCLOSED, i + 1, true, true, true)) {
+ vl_pass := false; i := 3;
+ setverdict(fail);
+ }
+ }
+ if (vl_pass) { t_action.start; }
+ }
+ else
+ if (vl_actionCnt == 3) { // re half close connection
+ log("Action: ", vl_actionCnt+1);
+ f_EPTF_HTTP_LocalTransport_connectionHalfClose(vl_group);
+
+ for (i := 0; i < 3; i := i + 1) {
+ if (not f_EPTF_HTTP_Test_checkPortState(vl_group, i, HALFCLOSED, i + 1, true, true, true)) {
+ vl_pass := false; i := 3;
+ setverdict(fail);
+ }
+ }
+ if (vl_pass) { t_action.start; }
+ }
+ else
+ if (vl_actionCnt == 4) { // close connection
+ log("Action: ", vl_actionCnt+1);
+ f_EPTF_HTTP_LocalTransport_closeConnection_defaultGroup(vl_group);
+
+ for (i := 0; i < 3; i := i + 1) {
+ if (not f_EPTF_HTTP_Test_checkPortState(vl_group, i, IDLE, -1, false, false, false)) {
+ vl_pass := false; i := 3;
+ setverdict(fail);
+ }
+ }
+ if (vl_pass) { t_action.start; }
+ }
+ else
+ if (vl_actionCnt == 5) { // reclose connection
+ log("Action: ", vl_actionCnt+1);
+ f_EPTF_HTTP_LocalTransport_connectionClose(vl_group);
+
+ for (i := 0; i < 3; i := i + 1) {
+ if (not f_EPTF_HTTP_Test_checkPortState(vl_group, i, IDLE, -1, false, false, false)) {
+ vl_pass := false; i := 3;
+ setverdict(fail);
+ }
+ }
+
+ //t_action.start;
+ }
+
+ vl_actionCnt := vl_actionCnt + 1;
+
+ repeat;
+ }
+ [] t_guard.timeout {
+ log("Timer timed out!");
+ }
+ }
+
+ }
+
+ if (vl_pass) {
+ f_EPTF_HTTP_LocalTransport_connectionClose(vl_group);
+ f_EPTF_HTTP_LocalTransport_deletePortGroup(vl_group);
+
+ if (f_EPTF_FBQ_itemIsBusy(vl_group, v_EPTF_HTTP_Transport_groupQueue)) {
+ log("Group not deleted properly!");
+ vl_pass := false;
+ setverdict(fail);
+ }
+ }
+
+ f_EPTF_Base_cleanup_CT();
+
+ if (vl_pass) { setverdict(pass); };
+}
+
+// Creates 20 entity and a single global port to send against HTTP responder
+// Test case passes if sent messages bodies are received from HTTP responder
+// and if state transitions are performed properly
+// Instant connection open and close disabled
+// LocalTransport mode
+// Responder runs for 10.0 seconds -> will stop during test
+// LoadGen(s) run for 13.0 secodns -> receive conn close events after 10.0 seconds
+// mtc runs for 15.0 seconds
+testcase tc_EPTF_HTTP_Test_test7()
+runs on EPTF_HTTP_Test_CT
+{
+ log("==============================");
+ log("<< Starting test case 7 ... >>");
+ log("==============================");
+ log("");
+
+ // set config
+ v_numberOfLGens1 := 1;
+ v_numberOfLGens2 := 0;
+
+ f_EPTF_Base_init_CT("MTC Base");
+
+ // check config
+ if (not f_EPTF_HTTP_Test_checkConfig()) { log("Wrong config!"); setverdict(fail); }
+ else
+ {
+ // create components
+ var float vl_rRunTime := 14.0;
+ f_EPTF_HTTP_Test_createResponder(7, vl_rRunTime);
+ f_EPTF_HTTP_Test_createApplConfig1(7, 20, 13.0, vl_rRunTime, true, true, -1, false, false);
+ //f_createApplConfig2();
+ }
+
+ timer t_guard := 20.0;
+ t_guard.start;
+ t_guard.timeout;
+
+ f_EPTF_Base_cleanup_CT();
+}
+
+// Creates 20 entity with single ports to send against HTTP responder
+// Test case passes if sent messages bodies are received from HTTP responder
+// and if state transitions are performed properly
+// Instant connection open and close disabled
+// LocalTransport mode
+// Responder runs for 10.0 seconds -> will stop during test
+// LoadGen(s) run for 13.0 secodns -> receive conn close events after 10.0 seconds
+// mtc runs for 15.0 seconds
+testcase tc_EPTF_HTTP_Test_test8()
+runs on EPTF_HTTP_Test_CT
+{
+ log("==============================");
+ log("<< Starting test case 8 ... >>");
+ log("==============================");
+ log("");
+
+ // set config
+ v_numberOfLGens1 := 1;
+ v_numberOfLGens2 := 0;
+
+ f_EPTF_Base_init_CT("MTC Base");
+
+ // check config
+ if (not f_EPTF_HTTP_Test_checkConfig()) { log("Wrong config!"); setverdict(fail); }
+ else
+ {
+ // create components
+ var float vl_rRunTime := 14.0;
+ f_EPTF_HTTP_Test_createResponder(8, vl_rRunTime);
+ f_EPTF_HTTP_Test_createApplConfig1(8, 20, 13.0, vl_rRunTime, true, false, -1, false, false);
+ //f_createApplConfig2();
+ }
+
+ timer t_guard := 15.0;
+ t_guard.start;
+ t_guard.timeout;
+
+ f_EPTF_Base_cleanup_CT();
+}
+
+// Creates 20 entity and a single global port group containing to ports
+// to send against HTTP responder
+// Test case passes if sent messages bodies are received from HTTP responder
+// and if state transitions are performed properly
+// Instant connection open and close disabled
+// LocalTransport mode
+// Responder runs for 10.0 seconds -> will stop during test
+// LoadGen(s) run for 13.0 secodns -> receive conn close events after 10.0 seconds
+// mtc runs for 15.0 seconds
+testcase tc_EPTF_HTTP_Test_test9()
+runs on EPTF_HTTP_Test_CT
+{
+ log("==============================");
+ log("<< Starting test case 9 ... >>");
+ log("==============================");
+ log("");
+
+ // set config
+ v_numberOfLGens1 := 1;
+ v_numberOfLGens2 := 0;
+
+ f_EPTF_Base_init_CT("MTC Base");
+
+ // check config
+ if (not f_EPTF_HTTP_Test_checkConfig()) { log("Wrong config!"); setverdict(fail); }
+ else
+ {
+ // create components
+ var float vl_rRunTime := 14.0;
+ f_EPTF_HTTP_Test_createResponder(9, vl_rRunTime);
+ f_EPTF_HTTP_Test_createApplConfig1(9, 20, 13.0, vl_rRunTime, false, true, 2, false, false);
+ //f_createApplConfig2();
+ }
+
+ timer t_guard := 15.0;
+ t_guard.start;
+ t_guard.timeout;
+
+ f_EPTF_Base_cleanup_CT();
+}
+
+// Creates 20 entity with global port groups containing two port
+// to send against HTTP responder
+// Test case passes if sent messages bodies are received from HTTP responder
+// and if state transitions are performed properly
+// Instant connection open and close disabled
+// LocalTransport mode
+// Responder runs for 10.0 seconds -> will stop during test
+// LoadGen(s) run for 13.0 secodns -> receive conn close events after 10.0 seconds
+// mtc runs for 15.0 seconds
+testcase tc_EPTF_HTTP_Test_test10()
+runs on EPTF_HTTP_Test_CT
+{
+ log("===============================");
+ log("<< Starting test case 10 ... >>");
+ log("===============================");
+ log("");
+
+ // set config
+ v_numberOfLGens1 := 1;
+ v_numberOfLGens2 := 0;
+
+ f_EPTF_Base_init_CT("MTC Base");
+
+ // check config
+ if (not f_EPTF_HTTP_Test_checkConfig()) { log("Wrong config!"); setverdict(fail); }
+ else
+ {
+ // create components
+ var float vl_rRunTime := 14.0;
+ f_EPTF_HTTP_Test_createResponder(10, vl_rRunTime);
+ f_EPTF_HTTP_Test_createApplConfig1(10, 20, 13.0, vl_rRunTime, false, false, 2, false, false);
+ //f_createApplConfig2();
+ }
+
+ timer t_guard := 15.0;
+ t_guard.start;
+ t_guard.timeout;
+
+ f_EPTF_Base_cleanup_CT();
+}
+
+// Creates 20 entity with single ports to send against HTTP responder
+// Test case passes if sent messages bodies are received from HTTP responder
+// and if state transitions are performed properly
+// Instant connection open and close enabled
+// LocalTransport mode
+// Responder runs for 10.0 seconds -> will stop during test
+// LoadGen(s) run for 13.0 secodns -> receive conn close events after 10.0 seconds
+// mtc runs for 15.0 seconds
+testcase tc_EPTF_HTTP_Test_test11()
+runs on EPTF_HTTP_Test_CT
+{
+ log("===============================");
+ log("<< Starting test case 11 ... >>");
+ log("===============================");
+ log("");
+
+ // set config
+ v_numberOfLGens1 := 1;
+ v_numberOfLGens2 := 0;
+
+ f_EPTF_Base_init_CT("MTC Base");
+
+ // check config
+ if (not f_EPTF_HTTP_Test_checkConfig()) { log("Wrong config!"); setverdict(fail); }
+ else
+ {
+ // create components
+ var float vl_rRunTime := 11.0;
+ f_EPTF_HTTP_Test_createResponder(11, vl_rRunTime);
+ f_EPTF_HTTP_Test_createApplConfig1(11, 20, 10.0, vl_rRunTime, true, false, -1, true, true);
+ //f_createApplConfig2();
+ }
+
+ timer t_guard := 15.0;
+ t_guard.start;
+ t_guard.timeout;
+
+ f_EPTF_Base_cleanup_CT();
+}
+
+// Creates 20 entity and a single global port group containing to ports
+// to send against HTTP responder
+// Test case passes if sent messages bodies are received from HTTP responder
+// and if state transitions are performed properly
+// Instant connection open and close enabled
+// LocalTransport mode
+// Responder runs for 11.0 seconds -> will not stop during test
+// LoadGen(s) run for 10.0 secodns -> doesn't receive conn close events after 10.0 seconds
+// mtc runs for 15.0 seconds
+testcase tc_EPTF_HTTP_Test_test12()
+runs on EPTF_HTTP_Test_CT
+{
+ log("===============================");
+ log("<< Starting test case 12 ... >>");
+ log("===============================");
+ log("");
+
+ // set config
+ v_numberOfLGens1 := 1;
+ v_numberOfLGens2 := 0;
+
+ f_EPTF_Base_init_CT("MTC Base");
+
+ // check config
+ if (not f_EPTF_HTTP_Test_checkConfig()) { log("Wrong config!"); setverdict(fail); }
+ else
+ {
+ // create components
+ var float vl_rRunTime := 11.0;
+ f_EPTF_HTTP_Test_createResponder(12, vl_rRunTime);
+ f_EPTF_HTTP_Test_createApplConfig1(12, 20, 10.0, vl_rRunTime, false, true, 20, true, true);
+ //f_createApplConfig2();
+ }
+
+ timer t_guard := 15.0;
+ t_guard.start;
+ t_guard.timeout;
+
+ f_EPTF_Base_cleanup_CT();
+}
+
+// Creates 20 entity with global port groups containing two port
+// to send against HTTP responder
+// Test case passes if sent messages bodies are received from HTTP responder
+// and if state transitions are performed properly
+// Instant connection open and close disabled
+// LocalTransport mode
+// Responder runs for 11.0 seconds -> will not stop during test
+// LoadGen(s) run for 10.0 secodns -> doesn't receive conn close events after 10.0 seconds
+// mtc runs for 15.0 seconds
+testcase tc_EPTF_HTTP_Test_test13()
+runs on EPTF_HTTP_Test_CT
+{
+ log("===============================");
+ log("<< Starting test case 13 ... >>");
+ log("===============================");
+ log("");
+
+ // set config
+ v_numberOfLGens1 := 1;
+ v_numberOfLGens2 := 0;
+
+ f_EPTF_Base_init_CT("MTC Base");
+
+ // check config
+ if (not f_EPTF_HTTP_Test_checkConfig()) { log("Wrong config!"); setverdict(fail); }
+ else
+ {
+ // create components
+ var float vl_rRunTime := 11.0;
+ f_EPTF_HTTP_Test_createResponder(13, vl_rRunTime);
+ f_EPTF_HTTP_Test_createApplConfig1(13, 20, 10.0, vl_rRunTime, false, false, 2, true, true);
+ //f_createApplConfig2();
+ }
+
+ timer t_guard := 15.0;
+ t_guard.start;
+ t_guard.timeout;
+
+ f_EPTF_Base_cleanup_CT();
+}
+
+// Creates 20 entity with global port groups containing two port
+// to send against HTTP responder
+// Test case passes if sent messages bodies are received from HTTP responder
+// and if state transitions are performed properly
+// Instant connection open and close disabled
+// RemoteTransport mode
+// Responder runs for 10.0 seconds -> will stop during test
+// LoadGen(s) run for 13.0 secodns -> receive conn close events after 10.0 seconds
+// mtc runs for 15.0 seconds
+testcase tc_EPTF_HTTP_Test_test14()
+runs on EPTF_HTTP_Test_CT
+{
+ log("==============================");
+ log("<< Starting test case 14 ... >>");
+ log("==============================");
+ log("");
+
+ // set config
+ v_numberOfLGens1 := 2;
+ v_numberOfLGens2 := 0;
+
+ f_EPTF_Base_init_CT("MTC Base");
+
+ // check config
+ if (not f_EPTF_HTTP_Test_checkConfig()) { log("Wrong config!"); setverdict(fail); }
+ else
+ {
+ // create components
+ var float vl_rRunTime := 5.0;
+ f_EPTF_HTTP_Test_createResponder(14, vl_rRunTime + 0.5);
+ f_EPTF_HTTP_Test_createApplConfig1(14, 5, vl_rRunTime, vl_rRunTime + 0.5, false, false, 2, false, false);
+ }
+
+ timer t_guard := 15.0;
+ t_guard.start;
+ t_guard.timeout;
+ f_EPTF_Base_cleanup_CT();
+}
+
+template EPTF_HTTP_Transport_PortInfoList t_expectedPorts1 := {
+ {
+ groupIndex := 0,
+ portIndex := 0,
+ connectionId := 1,
+ sessionId := 100,
+ portId := -1,
+ localhostInfoIdx := 0,
+ remotehostInfoIdx := 0,
+ state := OPENED,
+ portType := OUTGOING_PORT,
+ buffer := false,
+ messageBuffer := omit
+ },
+ {
+ groupIndex := 0,
+ portIndex := 1,
+ connectionId := -1,
+ sessionId := -1,
+ portId := -1,
+ localhostInfoIdx := 1,
+ remotehostInfoIdx := 0,
+ state := IDLE,
+ portType := OUTGOING_PORT,
+ buffer := false,
+ messageBuffer := omit
+ },
+ {
+ groupIndex := 0,
+ portIndex := 2,
+ connectionId := -1,
+ sessionId := -1,
+ portId := -1,
+ localhostInfoIdx := 2,
+ remotehostInfoIdx := 0,
+ state := IDLE,
+ portType := OUTGOING_PORT,
+ buffer := false,
+ messageBuffer := omit
+ }
+}
+
+template EPTF_HTTP_Transport_PortInfoList t_expectedPorts2 := {
+ {
+ groupIndex := 0,
+ portIndex := 0,
+ connectionId := -1,
+ sessionId := -1,
+ portId := -1,
+ localhostInfoIdx := 0,
+ remotehostInfoIdx := 0,
+ state := IDLE,
+ portType := OUTGOING_PORT,
+ buffer := false,
+ messageBuffer := omit
+ },
+ {
+ groupIndex := 0,
+ portIndex := 1,
+ connectionId := -1,
+ sessionId := -1,
+ portId := -1,
+ localhostInfoIdx := 1,
+ remotehostInfoIdx := 0,
+ state := IDLE,
+ portType := OUTGOING_PORT,
+ buffer := false,
+ messageBuffer := omit
+ },
+ {
+ groupIndex := 0,
+ portIndex := 2,
+ connectionId := -1,
+ sessionId := -1,
+ portId := -1,
+ localhostInfoIdx := 2,
+ remotehostInfoIdx := 0,
+ state := IDLE,
+ portType := OUTGOING_PORT,
+ buffer := false,
+ messageBuffer := omit
+ }
+}
+
+template EPTF_HTTP_Transport_PortInfoList t_expectedPorts3 := {
+ {
+ groupIndex := 0,
+ portIndex := 0,
+ connectionId := -1,
+ sessionId := -1,
+ portId := -1,
+ localhostInfoIdx := 0,
+ remotehostInfoIdx := 0,
+ state := IDLE,
+ portType := OUTGOING_PORT,
+ buffer := false,
+ messageBuffer := omit
+ },
+ {
+ groupIndex := 0,
+ portIndex := 1,
+ connectionId := 2,
+ sessionId := 200,
+ portId := -1,
+ localhostInfoIdx := 1,
+ remotehostInfoIdx := 0,
+ state := OPENED,
+ portType := OUTGOING_PORT,
+ buffer := false,
+ messageBuffer := omit
+ },
+ {
+ groupIndex := 0,
+ portIndex := 2,
+ connectionId := -1,
+ sessionId := -1,
+ portId := -1,
+ localhostInfoIdx := 2,
+ remotehostInfoIdx := 0,
+ state := IDLE,
+ portType := OUTGOING_PORT,
+ buffer := false,
+ messageBuffer := omit
+ }
+}
+
+template EPTF_HTTP_Transport_PortInfoList t_expectedPorts4 := {
+ {
+ groupIndex := 0,
+ portIndex := 0,
+ connectionId := -1,
+ sessionId := -1,
+ portId := -1,
+ localhostInfoIdx := 0,
+ remotehostInfoIdx := 0,
+ state := IDLE,
+ portType := OUTGOING_PORT,
+ buffer := false,
+ messageBuffer := omit
+ },
+ {
+ groupIndex := 0,
+ portIndex := 1,
+ connectionId := 2,
+ sessionId := -1,
+ portId := -1,
+ localhostInfoIdx := 1,
+ remotehostInfoIdx := 0,
+ state := OPENED,
+ portType := OUTGOING_PORT,
+ buffer := false,
+ messageBuffer := omit
+ },
+ {
+ groupIndex := 0,
+ portIndex := 2,
+ connectionId := -1,
+ sessionId := -1,
+ portId := -1,
+ localhostInfoIdx := 2,
+ remotehostInfoIdx := 0,
+ state := IDLE,
+ portType := OUTGOING_PORT,
+ buffer := false,
+ messageBuffer := omit
+ }
+}
+
+////=========================================================================
+// test new close and free port of user API
+// local API
+testcase tc_EPTF_HTTP_Test_test15()
+runs on EPTF_HTTP_Test_LocalAPI_CT
+{
+ log("==============================");
+ log("<< Starting test case 15 ... >>");
+ log("==============================");
+ log("");
+
+ var EPTF_HTTP_HostInformation vl_local, vl_remote;
+ var integer i, vl_group, vl_dummy, vl_tcIdx := 15;
+ var boolean vl_pass := true;
+
+ // create components
+ f_EPTF_HTTP_Test_createResponder(vl_tcIdx, 12.0);
+
+ // init base component
+ v_noIntWarning := f_EPTF_HTTP_LocalTransport_init_CT("EPTF_HTTP_Transport");
+
+ // init testcase
+ vl_local := { tsp_EPTF_HTTP_Test_Application1_host, tsp_EPTF_HTTP_Test_Application1_port + 3*10 + 100 * vl_tcIdx };
+ vl_remote := { tsp_EPTF_HTTP_Test_Responder_host, tsp_EPTF_HTTP_Test_Responder_port + vl_tcIdx };
+
+ vl_group := f_EPTF_HTTP_LocalTransport_newPortGroup( // connection set to open instantly
+ {"MyLittleGroupy", vl_local, vl_remote, 3, 1, 0, true, false, false, omit});
+
+ v_HTTP_oct := f_EPTF_HTTP_Test_DummyHTTPRequest("AABBCC");
+ f_EPTF_HTTP_LocalTransport_sendMessage(vl_group, 100, v_HTTP_oct);
+ log("Port DB #1", v_EPTF_HTTP_Transport_portDB);
+
+ if (not match(v_EPTF_HTTP_Transport_portDB[vl_group].portDatabase, t_expectedPorts1)) {
+ log("Database inconsistency after sending on port group!");
+ log(match(v_EPTF_HTTP_Transport_portDB[vl_group].portDatabase, t_expectedPorts1));
+ vl_pass := false;
+ setverdict(fail);
+ }
+
+ if (vl_pass)
+ {
+ f_EPTF_HTTP_LocalTransport_closePortOfUser(vl_group, 100);
+ log("Port DB #2", v_EPTF_HTTP_Transport_portDB);
+
+ if (not match(v_EPTF_HTTP_Transport_portDB[vl_group].portDatabase, t_expectedPorts2)) {
+ log("Database inconsistency after closing port of user!");
+ log(match(v_EPTF_HTTP_Transport_portDB[vl_group].portDatabase, t_expectedPorts2));
+ vl_pass := false;
+ setverdict(fail);
+ }
+ }
+
+ if (vl_pass)
+ {
+ v_HTTP_oct := f_EPTF_HTTP_Test_DummyHTTPRequest("CCBBAA");
+ f_EPTF_HTTP_LocalTransport_sendMessage(vl_group, 200, v_HTTP_oct);
+ log("Port DB #3", v_EPTF_HTTP_Transport_portDB);
+
+ if (not match(v_EPTF_HTTP_Transport_portDB[vl_group].portDatabase, t_expectedPorts3)) {
+ log("Database inconsistency after sending on port group!");
+ log(match(v_EPTF_HTTP_Transport_portDB[vl_group].portDatabase, t_expectedPorts3));
+ vl_pass := false;
+ setverdict(fail);
+ }
+ }
+
+ if (vl_pass)
+ {
+ f_EPTF_HTTP_LocalTransport_freePortOfUser(vl_group, 200);
+ log("Port DB #4", v_EPTF_HTTP_Transport_portDB);
+
+ if (not match(v_EPTF_HTTP_Transport_portDB[vl_group].portDatabase, t_expectedPorts4)) {
+ log("Database inconsistency after freeing port of user!");
+ log(match(v_EPTF_HTTP_Transport_portDB[vl_group].portDatabase, t_expectedPorts4));
+ vl_pass := false;
+ setverdict(fail);
+ }
+ }
+
+ f_EPTF_HTTP_LocalTransport_deletePort(vl_group);
+
+ f_EPTF_Base_cleanup_CT();
+
+ if (vl_pass) { setverdict(pass); };
+}
+
+// Creates 20 entity and a single global port group containing to ports
+// to send against HTTP responder
+// Test case passes if reconnection to the Responder is successful
+// after the Responder is explicitly shut and restarted
+// Instant connection open enabled and instant connection close enabled
+// LocalTransport mode
+testcase tc_EPTF_HTTP_Test_test16()
+runs on EPTF_HTTP_Test_CT
+{
+ log("==============================");
+ log("<< Starting test case 16 ... >>");
+ log("==============================");
+ log("");
+
+ var boolean vl_pass := true;
+
+ // set config
+ v_numberOfLGens1 := 1;
+ v_numberOfLGens2 := 0;
+
+ f_EPTF_Base_init_CT("MTC Base");
+ f_EPTF_Var_init_CT("MTC Var");
+
+ var float vl_rRunTime := 5.5;
+ var float vl_serverDownTime := 2.1;
+
+ // check config
+ if (not f_EPTF_HTTP_Test_checkConfig()) { log("Wrong config!"); setverdict(fail); }
+ else
+ {
+ // create components
+ f_EPTF_HTTP_Test_createResponder(16, vl_rRunTime);
+ f_EPTF_HTTP_Test_createApplConfig1(16, 20,
+ 2.0 * vl_rRunTime + vl_serverDownTime - 0.5, // application running time - 0.5 to surely die before responder dies for the 2nd time
+ 2.0 * vl_rRunTime + 1.0,
+ false, true, 20, true, true);
+
+ // 20 is the number of ports in the created group, on Rhea it must be greater then the number of sends as in instant connection
+ // opend and close mode, the ports are reused but they cannot be reopened again within a given (OS defined) time limit
+ }
+
+ timer t_guard := vl_rRunTime + 0.5;
+ t_guard.start;
+ t_guard.timeout;
+
+ // responder should die now
+ log("*** Responder must be dead now! ***");
+
+ f_EPTF_Var_subscribeRemote( // subscribe to the number of received answers EPTF variable
+ v_HTTP_Local1_comps[0], "NumberOfReceivedAnswers",
+ realtime,
+ v_nofAnswers, "MYNumberOfReceivedAnswers");
+
+ var integer vl_nofAnswers_current := f_EPTF_Var_getIntValue(v_nofAnswers);
+ log("Number of messages arrived to local lgen from responder (after first deth of responder): ", vl_nofAnswers_current);
+
+ if (vl_pass)
+ {
+ if (vl_nofAnswers_current != float2int(vl_rRunTime) + 1) { // first message at zero time + float2int(vl_rRunTime) messages (at 1 CPS)
+ log("Number of incoming messages from HTTP responder (", vl_nofAnswers_current,
+ ") are inconsistent with test case settings (Before Responder restart)!");
+ vl_pass := false;
+ setverdict(fail);
+ }
+ else
+ if (v_HTTP_Responder_comp.running) {
+ log("Responder is still alive! Test case error");
+ vl_pass := false;
+ setverdict(fail);
+ }
+ }
+
+ if (vl_pass)
+ {
+ t_guard.start(vl_serverDownTime); // wait X sec before restarting responder
+ t_guard.timeout;
+
+ // recreate responder
+ log("*** Responder is being restarted now! ***");
+
+ f_EPTF_HTTP_Test_createResponder(16, vl_rRunTime);
+
+ t_guard.start(vl_rRunTime + 1.0);
+ t_guard.timeout;
+
+ // responder should be dead now
+ log("*** Responder must be dead now again! ***");
+
+ vl_nofAnswers_current := f_EPTF_Var_getIntValue(v_nofAnswers);
+ log("Number of messages arrived to local lgen from responder (Second responder die)!: ", vl_nofAnswers_current);
+
+ if (vl_pass)
+ {
+ if (vl_nofAnswers_current != 2 * (float2int(vl_rRunTime) + 1) - 2) { // second part misses first and last message according to time configurations
+ log("Number of incoming messages from HTTP responder (", vl_nofAnswers_current,
+ ") are inconsistent with test case settings (After Responder restart)!");
+ vl_pass := false;
+ setverdict(fail);
+ }
+ }
+ }
+ f_EPTF_Base_cleanup_CT();
+}
+
+////=========================================================================
+// errornous connection test for port object
+// instant open / close / open for single port
+// connection is bad tsp_EPTF_HTTP_Test_NonExistent_host should be a non existent host
+// testcase will pass if connection is failed
+testcase tc_EPTF_HTTP_Test_test17()
+runs on EPTF_HTTP_Test_LocalAPI_CT
+{
+ log("==============================");
+ log("<< Starting test case 17 ... >>");
+ log("==============================");
+ log("");
+
+ var EPTF_HTTP_HostInformation vl_local, vl_remote;
+ var integer i, vl_group, vl_dummy, vl_tcIdx := 6;
+ var boolean vl_bNoW, vl_pass := true;
+
+ // create components
+ f_EPTF_HTTP_Test_createResponder(vl_tcIdx, 12.0);
+
+ // init base component
+ f_EPTF_HTTP_init(
+ "APPL1_LGEN",
+ 1,
+ "HTTP1_",
+ 0); //, pl_bind, pl_reset, pl_unbind);
+
+ v_noIntWarning := f_EPTF_HTTP_LocalTransport_init_CT(
+ "EPTF_HTTP_Transport",
+ refers(f_EPTF_HTTP_messageReceived),
+ refers(f_EPTF_HTTP_eventReceived),
+ refers(f_EPTF_HTTP_socketErrorReceived));
+
+ // init testcase
+ vl_local := { tsp_EPTF_HTTP_Test_NonExistent_host, tsp_EPTF_HTTP_Test_Application1_port + 1 };
+ vl_remote := { tsp_EPTF_HTTP_Test_NonExistent_host, tsp_EPTF_HTTP_Test_Responder_port + vl_tcIdx };
+
+ vl_group := f_EPTF_HTTP_LocalTransport_newPortGroup( // connection set to open instantly
+ {"MyLittleGroupy", vl_local, vl_remote, 3, 1, 0, true, true, false, omit});
+
+ if (vl_pass and vl_group != 0) {
+ log("Wrong group id acquired! (", vl_group, ")");
+ vl_pass := false;
+ setverdict(fail);
+ }
+
+ for (i := 0; i < 3; i := i + 1) {
+ if (vl_pass and not f_EPTF_HTTP_Test_checkPortState(vl_group, i, IDLE, -1, false, false, false)) {
+ vl_pass := false; i := 3;
+ setverdict(fail);
+ }
+ }
+
+ if (vl_pass) {
+ log("Starting altstep!");
+
+ var integer vl_actionCnt := 0;
+ timer t_action := 1.0;
+ timer t_guard := 12.0;
+ t_action.start;
+ t_guard.start;
+ alt {
+/* [] IPL4_PCO.receive(ASP_RecvFrom:?) -> value v_ASP_RecvFrom {
+ log("ASP receive from: ", v_ASP_RecvFrom);
+ repeat;
+ }
+ [] IPL4_PCO.receive(ASP_Event:?) -> value v_ASP_Event {
+ log("ASP event: ", v_ASP_Event);
+ repeat;
+ }
+ [] IPL4_PCO.receive {
+ log("Invalid message received!");
+ repeat;
+ }*/
+ [] t_action.timeout {
+ if (vl_actionCnt == 0) { // reopen connection
+ log("Action: ", vl_actionCnt+1);
+ var integer vl_sessionId := 1;
+ vl_bNoW := f_EPTF_HTTP_LocalTransport_connectionOpen(vl_group,vl_sessionId);
+
+ for (i := 0; i < 3; i := i + 1) {
+ if (not f_EPTF_HTTP_Test_checkPortState(vl_group, i, IDLE, -1, false, false, false)) {
+ vl_pass := false; i := 3;
+ setverdict(fail);
+ }
+ }
+ if (vl_pass) { t_action.start; }
+ }
+ else
+ if (vl_actionCnt == 1) { // reopen connection
+ log("Action: ", vl_actionCnt+1);
+ for (i := 0; i < 4; i := i + 1) {
+ v_HTTP_oct := f_EPTF_HTTP_Test_DummyHTTPRequest("AABBCC" & int2str(i));
+ f_EPTF_HTTP_LocalTransport_sendMessage(vl_group, vl_actionCnt, v_HTTP_oct);
+ //var integer vl_dec := dec_HTTPMessage(v_HTTP_oct, v_HTTP_msg);
+ //log("Sending (", vl_dec, "): ", v_HTTP_msg);
+
+ }
+
+ for (i := 0; i < 3; i := i + 1) {
+ if (not f_EPTF_HTTP_Test_checkPortState(vl_group, i, IDLE, -1, false, false, false)) {
+ vl_pass := false; i := 3;
+ setverdict(fail);
+ }
+ }
+ if (vl_pass) { t_action.start; }
+ }
+ else
+ if (vl_actionCnt == 2) { // half close connection
+ log("Action: ", vl_actionCnt+1);
+ f_EPTF_HTTP_LocalTransport_connectionHalfClose(vl_group);
+
+ for (i := 0; i < 3; i := i + 1) {
+ if (not f_EPTF_HTTP_Test_checkPortState(vl_group, i, IDLE, -1, false, false, false)) {
+ vl_pass := false; i := 3;
+ setverdict(fail);
+ }
+ }
+ if (vl_pass) { t_action.start; }
+ }
+ else
+ if (vl_actionCnt == 3) { // re half close connection
+ log("Action: ", vl_actionCnt+1);
+ f_EPTF_HTTP_LocalTransport_connectionHalfClose(vl_group);
+
+ for (i := 0; i < 3; i := i + 1) {
+ if (not f_EPTF_HTTP_Test_checkPortState(vl_group, i, IDLE, -1, false, false, false)) {
+ vl_pass := false; i := 3;
+ setverdict(fail);
+ }
+ }
+ if (vl_pass) { t_action.start; }
+ }
+ else
+ if (vl_actionCnt == 4) { // close connection
+ log("Action: ", vl_actionCnt+1);
+ f_EPTF_HTTP_LocalTransport_closeConnection_defaultGroup(vl_group);
+
+ for (i := 0; i < 3; i := i + 1) {
+ if (not f_EPTF_HTTP_Test_checkPortState(vl_group, i, IDLE, -1, false, false, false)) {
+ vl_pass := false; i := 3;
+ setverdict(fail);
+ }
+ }
+ if (vl_pass) { t_action.start; }
+ }
+ else
+ if (vl_actionCnt == 5) { // reclose connection
+ log("Action: ", vl_actionCnt+1);
+ f_EPTF_HTTP_LocalTransport_connectionClose(vl_group);
+
+ for (i := 0; i < 3; i := i + 1) {
+ if (not f_EPTF_HTTP_Test_checkPortState(vl_group, i, IDLE, -1, false, false, false)) {
+ vl_pass := false; i := 3;
+ setverdict(fail);
+ }
+ }
+
+ //t_action.start;
+ }
+
+ vl_actionCnt := vl_actionCnt + 1;
+
+ repeat;
+ }
+ [] t_guard.timeout {
+ log("Timer timed out!");
+ }
+ }
+
+ }
+
+ if (vl_pass) {
+ f_EPTF_HTTP_LocalTransport_connectionClose(vl_group);
+ f_EPTF_HTTP_LocalTransport_deletePortGroup(vl_group);
+
+ if (f_EPTF_FBQ_itemIsBusy(vl_group, v_EPTF_HTTP_Transport_groupQueue)) {
+ log("Group not deleted properly!");
+ vl_pass := false;
+ setverdict(fail);
+ }
+ }
+
+ f_EPTF_Base_cleanup_CT();
+
+ if (vl_pass) { setverdict(pass); };
+}
+
+testcase tc_EPTF_HTTP_Test_test18()
+runs on EPTF_HTTP_Test_LocalAPI_CT
+{
+ log("==============================");
+ log("<< Starting test case 18 ... >>");
+ log("==============================");
+ log("");
+
+ f_EPTF_int2int_HashMap_Init();
+ f_EPTF_Logging_init_CT("TEST_");
+ v_EPTF_HTTP_Transport_loggingMaskId :=
+ f_EPTF_Logging_registerComponentMasks(
+ tsp_EPTF_HTTP_Transport_loggingComponentMask,
+ c_EPTF_HTTP_Transport_loggingEventClasses,
+ EPTF_Logging_CLL);
+
+ setverdict(pass);
+ f_EPTF_HTTP_Test_bufferTest(5, 0);
+ f_EPTF_HTTP_Test_bufferTest(5, 3);
+ f_EPTF_HTTP_Test_bufferTest(5, 4);
+}
+
+testcase tc_EPTF_HTTP_Test_test19()
+runs on EPTF_HTTP_Test_LocalAPI_CT
+{
+ log("==============================");
+ log("<< Starting test case 19 ... >>");
+ log("==============================");
+ log("");
+
+ var EPTF_HTTP_setAuthData vl_EPTF_HTTP_setAuthData:={
+ method:="",
+ algorithm:="",
+ realm:="",
+ domain:=omit,
+ qopOptions:="",
+ password:="password"
+ };
+
+ f_EPTF_HTTP_setAuthData(vl_EPTF_HTTP_setAuthData);
+
+ setverdict(pass);
+
+ var charstring vl_authData := "Digest algorithm=MD5, cnonce=\"0a4f113b\", nc=00000001, nonce=\"NGExMTY0MDiDrxJA7/5a8Ya0lZvlaNXuEw==\", opaque=\"\", qop=auth-int, realm=\"access.telekom.de\", response=\"ef57ea40d83403357c16306cd6b811a2\", uri=\"/\", username=\"TASP-SOAP1\"";
+
+ var EPTF_HTTP_AuthDetails vl_authDetails := c_EPTF_HTTP_initAuthDetails;
+
+ var EPTF_HTTP_AuthDetails vl_authDetailsExpected := {
+ realm := "access.telekom.de",
+ qop := "auth-int",
+ nonce := "NGExMTY0MDiDrxJA7/5a8Ya0lZvlaNXuEw==",
+ cnonce := "0a4f113b",
+ opaque := c_EPTF_HTTP_initAuthDetails.opaque,
+ nonceCount := "00000001",
+ algorithm := "MD5",
+ response := "ef57ea40d83403357c16306cd6b811a2",
+ uri := "/",
+ username := "TASP-SOAP1",
+ password := c_EPTF_HTTP_initAuthDetails.password
+ }
+
+
+ f_EPTF_HTTP_getAuthParams(vl_authData, vl_authDetails);
+
+ if (vl_authDetails != vl_authDetailsExpected)
+ {
+ log("Error: retrieved: ", vl_authDetails, " expected: ", vl_authDetailsExpected);
+ setverdict(fail);
+ }
+
+/* var charstring vl_body := "<?xml version='1.0' ?>\n<env:Envelope xmlns:env=\"http://www.w3.org/2003/05/soap-envelope\"xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://www.w3.org/2003/05/soap-envelope soap-envelope.xml http://dummydomain.telekom.de/LISA/VoIPNotruf_1_00 VoIPNotruf_1_00.xsd\" >\n<env:Header><lisa:emergencyInformationRequest xmlns:lisa=\"http://dummydomain.telekom.de/LISA/VoIPNotruf_1_00\" env:role=\"next\" env:mustUnderstand=\"true\">\n<lisa:interfaceVersion>1</lisa:interfaceVersion>\n</lisa:emergencyInformationRequest>\n</env:Header>\n<env:Body><lisa:emergencyInformationRequestData xmlns:lisa=\"http://dummydomain.telekom.de/LISA/VoIPNotruf_1_00\">\n<lisa:emergencyNumber>110</lisa:emergencyNumber>\n<lisa:clientIPAddress>217.89.24.10</lisa:clientIPAddress>\n</lisa:emergencyInformationRequestData>\n</env:Body>\n</env:Envelope>"
+
+ if (not f_EPTF_HTTP_checkAuthData("POST", vl_authData, vl_body))
+ {
+ log("Error: auth data checking.");
+ setverdict(fail);
+ }*/
+}
+
+/*
+testcase tc_random() runs on EPTF_HTTP_Test_CT
+{
+ var EPTF_IntegerList vl_intList := {};
+ var EPTF_FloatList vl_floatList := {};
+ var integer vl_randval, i, j, vl_maxOccurance, vl_different, vl_curMax, vl_curOccurance;
+ var integer vl_allvalues := tsp_runningTime*tsp_QPS;
+ var float vl_maxNumber, vl_prev;
+ var integer vl_time;
+
+ v_randState := 0.0;
+
+ vl_time := f_time();
+
+ // generate random value
+ for (i := 0; i < vl_allvalues; i := i + 1)
+ {
+ vl_randval := float2int((int2float(tsp_rangeHi) - 0.001) * f_myRandom());
+ //log("Random value: ", vl_randval);
+
+ vl_intList[sizeof(vl_intList)] := vl_randval;
+ }
+
+ log("Generated list: ", vl_intList);
+
+
+ // convert to float because of bubble sort
+ for (i := 0; i < sizeof(vl_intList); i := i + 1) { vl_floatList[i] := int2float(vl_intList[i]); };
+ f_EPTF_StatMeasure_bubblesort(vl_floatList);
+
+ log("Generated list (BUBBLE): ", vl_floatList);
+
+ // sarch max occurance and its number and value of different numbers
+ vl_prev := vl_floatList[0];
+ vl_maxNumber := -1.0;
+ vl_maxOccurance := 0;
+ vl_different := 0;
+ vl_curMax := -1;
+ vl_curOccurance := 0;
+ for (j := 1; j < sizeof(vl_floatList); j := j + 1)
+ {
+ vl_curOccurance := vl_curOccurance + 1;
+
+ if (vl_floatList[j] != vl_prev) {
+ vl_different := vl_different + 1;
+
+ if (vl_curOccurance > vl_maxOccurance) {
+ vl_maxOccurance := vl_curOccurance;
+ vl_maxNumber := vl_prev;
+ }
+
+ vl_curOccurance := 0;
+ }
+
+ vl_prev := vl_floatList[j];
+ }
+
+ vl_time := f_time() - vl_time;
+
+ log("Running time: ", vl_time);
+ log("Max number and max occurance: ", float2int(vl_maxNumber), " / ", vl_maxOccurance,
+ " (ALL: " , vl_allvalues, " / DIFFERENT: ", vl_different, ")");
+}
+*/
+
+control {
+ execute(tc_EPTF_HTTP_Test_test1());
+ execute(tc_EPTF_HTTP_Test_test2());
+ execute(tc_EPTF_HTTP_Test_test3());
+ execute(tc_EPTF_HTTP_Test_test4());
+ execute(tc_EPTF_HTTP_Test_test5());
+ execute(tc_EPTF_HTTP_Test_test6());
+ execute(tc_EPTF_HTTP_Test_test7());
+ execute(tc_EPTF_HTTP_Test_test8());
+ execute(tc_EPTF_HTTP_Test_test9());
+ execute(tc_EPTF_HTTP_Test_test10());
+ execute(tc_EPTF_HTTP_Test_test11());
+ execute(tc_EPTF_HTTP_Test_test12());
+ execute(tc_EPTF_HTTP_Test_test13());
+ execute(tc_EPTF_HTTP_Test_test14());
+ execute(tc_EPTF_HTTP_Test_test15());
+ execute(tc_EPTF_HTTP_Test_test16());
+ execute(tc_EPTF_HTTP_Test_test17());
+ execute(tc_EPTF_HTTP_Test_test18());
+ execute(tc_EPTF_HTTP_Test_test19());
+}
+
+}

Back to the top