Skip to content
Snippets Groups Projects

[TSD-30734] Update CLL with new f_IPL4_bind function

Merged József Gyürüsi requested to merge jgyrsi/titan.Libraries.CLL:master into master
1 file
+ 267
9
Compare changes
  • Side-by-side
  • Inline
///////////////////////////////////////////////////////////////////////////////
// //
// Copyright (c) 2000-2023 Ericsson Telecom AB //
// //
// All rights reserved. This program and the accompanying materials //
// are made available under the terms of the Eclipse Public License v2.0 //
// which accompanies this distribution, and is available at //
// https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html //
// Copyright (c) 2000-2023 Ericsson Telecom AB //
// //
// All rights reserved. This program and the accompanying materials //
// are made available under the terms of the Eclipse Public License v2.0 //
// which accompanies this distribution, and is available at //
// https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html //
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////
@@ -52,8 +52,11 @@
// Public functions:
// <f_EPTF_Transport_init>
// <f_EPTF_Transport_registerMsgLenCallback4LGenType>
// <f_EPTF_Transport_bind>
// <f_EPTF_Transport_connect>
// <f_EPTF_Transport_connectWithConnId>
// <f_EPTF_Transport_listen>
// <f_EPTF_Transport_listenWithConnId>
// <f_EPTF_Transport_setOpt>
// <f_EPTF_Transport_port_settings>
// <f_EPTF_Transport_close>
@@ -299,6 +302,116 @@ return integer
}
}
///////////////////////////////////////////////////////////
// Function: f_EPTF_Transport_bind
//
// Purpose:
// Function to bind to a socket
// The bound socket can be used to listen or connect to via the returned connId
//
// Parameters:
// pl_transportType - *in* - <EPTF_Transport_TransportType> - Testport type
// pl_proto - *in* <EPTF_TransportProtocol> - protocol
// pl_hostName - *in* <HostName> - local host
// pl_portNumber - *in* <PortNumber> - local port number
// pl_LGenType - *in* - *charstring* - LGen type
// pl_result - *out* - <Result> - result
// pl_automaticBuffering - *in* - *boolean* - buffering is automatic?
// pl_options - *in* - <OptionList> - additional options
// Return Value:
// *integer* - connection/socket ID, or -1 on error
//
// Errors:
// - invalid LGenType
///////////////////////////////////////////////////////////
public function f_EPTF_Transport_bind(
in EPTF_Transport_TransportType pl_transportType,
in ProtoTuple pl_proto,
in HostName pl_hostName,
in PortNumber pl_portNumber,
in charstring pl_LGenType,
out Result pl_result,
in boolean pl_automaticBuffering := false,
in OptionList pl_options := {})
runs on EPTF_TransportIPL4_CT
return integer
{
if (IPL4 != pl_transportType) {
f_EPTF_Base_assert(%definitionId&": The transport type "&log2str(pl_transportType)&
" is not supported in the IPL4 transport.", IPL4 == pl_transportType)
}
var integer vl_ret := -1
var integer vl_connInfofbqId := -1;
var integer vl_fbqId;
pl_result := f_IPL4_bind(IPL4_PCO, pl_hostName, pl_portNumber, pl_proto, pl_options);
f_EPTF_TransportIPL4_updateOutgoingStatistics(c_EPTF_TransportIPL4_outListen);
if (pl_result.errorCode == omit) //if not error
{
vl_connInfofbqId:= f_EPTF_FBQ_getOrCreateFreeSlot(v_EPTF_TransportIPL4_connInfoFreeBusyQueue);
f_EPTF_FBQ_moveFromFreeToBusyTail(vl_connInfofbqId,v_EPTF_TransportIPL4_connInfoFreeBusyQueue);
f_EPTF_int2int_HashMap_Insert(v_EPTF_TransportIPL4_connInfoHashMapId,pl_result.connId,vl_connInfofbqId);
v_EPTF_TransportIPL4_connInfoList[vl_connInfofbqId] := c_EPTF_TransportIPL4_connInfo_init;
v_EPTF_TransportIPL4_connInfoList[vl_connInfofbqId].uniqueId := pl_result.connId;
v_EPTF_TransportIPL4_connInfoList[vl_connInfofbqId].automaticBuffering := pl_automaticBuffering;
v_EPTF_TransportIPL4_connInfoList[vl_connInfofbqId].connectionState := NULL_VALUE; //will be overwritten by listen or connect
v_EPTF_TransportIPL4_connInfoList[vl_connInfofbqId].options := pl_options;
if (ischosen(pl_proto.sctp)) {
v_EPTF_TransportIPL4_connInfoList[vl_connInfofbqId].sctpInformation := pl_proto.sctp;
} else {
v_EPTF_TransportIPL4_connInfoList[vl_connInfofbqId].sctpInformation := omit;
}
if(pl_LGenType!="")
{
if (f_EPTF_str2int_HashMap_Find(v_EPTF_TransportIPL4_LGenTypesHashMapId,pl_LGenType,vl_fbqId))
{
v_EPTF_TransportIPL4_connInfoList[vl_connInfofbqId].LGenTypeId := vl_fbqId; //storing LGen type too
// call the connectionOpened callback of the LGenType if not null which may override uniqueId
if(v_EPTF_TransportIPL4_LGenInfoList[vl_fbqId].connOpenedFn != null) {
v_EPTF_TransportIPL4_LGenInfoList[vl_fbqId].connOpenedFn.apply(IPL4, pl_result.connId);
}
if ( null != v_EPTF_TransportIPL4_LGenInfoList[vl_fbqId].msgLenCalc.getMsgLenOldAPIFn ){
f_IPL4_setGetMsgLen(
IPL4_PCO,
pl_result.connId,
v_EPTF_TransportIPL4_LGenInfoList[vl_fbqId].msgLenCalc.getMsgLenOldAPIFn,
v_EPTF_TransportIPL4_LGenInfoList[vl_fbqId].msgLenCalc.getMsgLenOldArgs);
}
else if ( null != v_EPTF_TransportIPL4_LGenInfoList[vl_fbqId].msgLenCalc.getMsgLenNewFn){
var f_IPL4_getMsgLen vl_f := refers(f_EPTF_Transport_IPL4GetMsgLenWrapper)
f_IPL4_setGetMsgLen(
IPL4_PCO,
pl_result.connId,
vl_f,
{vl_fbqId});
} else {
//Do nothing
}
}
else
{
f_EPTF_TransportIPL4_warning("LGenType not found in the hashmap");
}
}
}
if(vl_connInfofbqId >= 0) {
vl_ret := v_EPTF_TransportIPL4_connInfoList[vl_connInfofbqId].uniqueId;
} else if (ispresent(pl_result.connId)){
vl_ret := pl_result.connId
}
return vl_ret
}
///////////////////////////////////////////////////////////
// Function: f_EPTF_Transport_connect
//
@@ -351,6 +464,59 @@ return integer
-1,
pl_options);
}
///////////////////////////////////////////////////////////
// Function: f_EPTF_Transport_connectWithConnId
//
// Purpose:
// Function to create a new connection to an already bound local address
//
// Parameters:
// pl_transportType - *in* - <EPTF_Transport_TransportType> - Testport type
// pl_proto - *in* <EPTF_TransportProtocol> - protocol
// pl_remoteHost - *in* <HostName> - remote host
// pl_remotePort - *in* <PortNumber> - remote port number
// pl_LGenType - *in* - *charstring* - LGen type
// pl_result - *out* - <Result> - result
// pl_automaticBuffering - *in* - *boolean* - buffering is automatic?
// pl_options - *in* - *OptionList* - additional options of the connection ex.: sctpAdditionalLocalAddresses to enable SCTP multihoming
// pl_connId - *in* - *integer* - connection ID
//
// Return Value:
// *integer* - connection/socket ID, or -1 on error
//
// Errors:
// - invalid LGenType
// - already listening on localHost:localPort
///////////////////////////////////////////////////////////
public function f_EPTF_Transport_connectWithConnId(
in EPTF_Transport_TransportType pl_transportType,
in ProtoTuple pl_proto,
in HostName pl_remoteHost,
in PortNumber pl_remotePort,
in charstring pl_LGenType,
out Result pl_result,
in boolean pl_automaticBuffering := false,
in OptionList pl_options := {},
in integer pl_connId)
runs on EPTF_TransportIPL4_CT
return integer
{
return f_EPTF_Transport_connect_priv(
pl_transportType,
pl_proto,
"",
0,
pl_remoteHost,
pl_remotePort,
pl_LGenType,
pl_result,
pl_automaticBuffering,
-1,
pl_options,
pl_connId);
}
///////////////////////////////////////////////////////////
// Function: f_EPTF_Transport_connect_priv
//
@@ -371,6 +537,7 @@ return integer
// pl_connInfofbqId - *in* - *integer* - if not -1 then this index will be
// reused. It points into the connection info DB.
// pl_options - *in* - *OptionList* - additional options
// pl_connId - *in* - *integer* - connection ID, if >0 local host/port are not used
//
// Return Value:
// *integer* - connection/socket ID, or -1 on error
@@ -390,7 +557,8 @@ private function f_EPTF_Transport_connect_priv(
out Result pl_result,
in boolean pl_automaticBuffering := false,
in integer pl_connInfofbqId := -1,
in OptionList pl_options := {})
in OptionList pl_options := {},
in integer pl_connId := -1)
runs on EPTF_TransportIPL4_CT
return integer
{
@@ -401,7 +569,7 @@ return integer
var integer vl_ret := -1
var integer vl_connInfofbqId := -1;
var integer vl_fbqId;
pl_result := f_IPL4_connect(IPL4_PCO, pl_remoteHost, pl_remotePort, pl_localHost, pl_localPort, 0, pl_proto, pl_options);
pl_result := f_IPL4_connect(IPL4_PCO, pl_remoteHost, pl_remotePort, pl_localHost, pl_localPort, pl_connId, pl_proto, pl_options);
f_EPTF_TransportIPL4_updateOutgoingStatistics(c_EPTF_TransportIPL4_outConnect);
@@ -502,6 +670,7 @@ return integer
// pl_LGenType - *in* - *charstring* - LGen type
// pl_result - *out* - <Result> - result
// pl_automaticBuffering - *in* - *boolean* - buffering is automatic?
// pl_options - *in* - <OptionList> - additional options
// Return Value:
// *integer* - connection/socket ID, or -1 on error
//
@@ -519,6 +688,95 @@ public function f_EPTF_Transport_listen(
in OptionList pl_options := {})
runs on EPTF_TransportIPL4_CT
return integer
{
return f_EPTF_Transport_listen_priv(
pl_transportType,
pl_proto,
pl_hostName,
pl_portNumber,
pl_LGenType,
pl_result,
pl_automaticBuffering,
pl_options);
}
///////////////////////////////////////////////////////////
// Function: f_EPTF_Transport_listenWithConnId
//
// Purpose:
// Function to listen on an already bound socket
//
// Parameters:
// pl_transportType - *in* - <EPTF_Transport_TransportType> - Testport type
// pl_proto - *in* <EPTF_TransportProtocol> - protocol
// pl_LGenType - *in* - *charstring* - LGen type
// pl_result - *out* - <Result> - result
// pl_automaticBuffering - *in* - *boolean* - buffering is automatic?
// pl_options - *in* - <OptionList> - additional options
// pl_connId - *in* - *integer* - connection ID
// Return Value:
// *integer* - connection/socket ID, or -1 on error
//
// Errors:
// - invalid LGenType
///////////////////////////////////////////////////////////
public function f_EPTF_Transport_listenWithConnId(
in EPTF_Transport_TransportType pl_transportType,
in ProtoTuple pl_proto,
in charstring pl_LGenType,
out Result pl_result,
in boolean pl_automaticBuffering := false,
in OptionList pl_options := {},
in integer pl_connId)
runs on EPTF_TransportIPL4_CT
return integer
{
return f_EPTF_Transport_listen_priv(
pl_transportType,
pl_proto,
"",
0,
pl_LGenType,
pl_result,
pl_automaticBuffering,
pl_options,
pl_connId);
}
///////////////////////////////////////////////////////////
// Function: f_EPTF_Transport_listen_priv
//
// Purpose:
// Function to listen on a socket
//
// Parameters:
// pl_transportType - *in* - <EPTF_Transport_TransportType> - Testport type
// pl_proto - *in* <EPTF_TransportProtocol> - protocol
// pl_hostName - *in* <HostName> - local host
// pl_portNumber - *in* <PortNumber> - local port number
// pl_LGenType - *in* - *charstring* - LGen type
// pl_result - *out* - <Result> - result
// pl_automaticBuffering - *in* - *boolean* - buffering is automatic?
// pl_options - *in* - <OptionList> - additional options
// pl_connId - *in* - *integer* - connection ID, if >0 local host/port are not used
// Return Value:
// *integer* - connection/socket ID, or -1 on error
//
// Errors:
// - invalid LGenType
///////////////////////////////////////////////////////////
private function f_EPTF_Transport_listen_priv(
in EPTF_Transport_TransportType pl_transportType,
in ProtoTuple pl_proto,
in HostName pl_hostName,
in PortNumber pl_portNumber,
in charstring pl_LGenType,
out Result pl_result,
in boolean pl_automaticBuffering := false,
in OptionList pl_options := {},
in integer pl_connId := -1)
runs on EPTF_TransportIPL4_CT
return integer
{
if (IPL4 != pl_transportType) {
f_EPTF_Base_assert(%definitionId&": The transport type "&log2str(pl_transportType)&
@@ -527,7 +785,7 @@ return integer
var integer vl_ret := -1
var integer vl_connInfofbqId := -1;
var integer vl_fbqId;
pl_result := f_IPL4_listen(IPL4_PCO, pl_hostName, pl_portNumber, pl_proto, pl_options);
pl_result := f_IPL4_listen(IPL4_PCO, pl_hostName, pl_portNumber, pl_proto, pl_options, pl_connId);
f_EPTF_TransportIPL4_updateOutgoingStatistics(c_EPTF_TransportIPL4_outListen);
Loading