blob: 1ece8537bc7b8c0fa0bee7ac0e83a2bcb6cc12b3 [file] [log] [blame]
///////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2000-2019 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
///////////////////////////////////////////////////////////////////////////////
//
// File: IP_Daemon_Dynamic_Interface_Definitions.ttcn
// Description: IPDD <-> Testcase interface data and port types
module IP_Daemon_Dynamic_Interface_Definitions
{
//=========================================================================
// Import Part
//=========================================================================
import from IPL4asp_Types all;
import from IPL4asp_PortType all;
//=========================================================================
// Data Types
//=========================================================================
type record IPDD_Message_with_ClientId {
integer client_id optional,
IPDD_Message msg
}
type union IPDD_Message {
// Both-way traffic
IPDD_Data ipdd_data, // send data
// Requests
IPDD_QueryConnections ipdd_queryConnections, // query the state of the active connections
IPDD_Listen ipdd_listen, // define a new server connection
IPDD_Connect ipdd_connect, // define a new client connection
IPDD_Close ipdd_close, // close a connection
IPDD_SubscribeToConnection ipdd_subscribeToConnection, // subscribe to an connection's events
// Indications
IPDD_Result ipdd_result, // result comes in response to Listen and Connect, and contains the new connectionId
IPDD_Connections ipdd_connections, // response to queryConnections
IPDD_ConnectionChanged ipdd_connectionChanged, // indicates the change of the state of a connection
IPDD_Connected ipdd_connected, // indicates that a client has been connected to one of our IP server
IPDD_Closed ipdd_closed // indicates that a connection has been closed
} with {
variant "TAG(
ipdd_data, messageType = 0;
ipdd_queryConnections, messageType = 1;
ipdd_listen, messageType = 2;
ipdd_connect, messageType = 3;
ipdd_close, messageType = 4;
ipdd_subscribeToConnection, messageType = 5;
ipdd_result, messageType = 100;
ipdd_connections, messageType = 101;
ipdd_connectionChanged, messageType = 102;
ipdd_connected, messageType = 103;
ipdd_closed, messageType = 104)"
}
group MainMessageTypes {
type record IPDD_Data {
integer messageType,
IPDD_INT32 connectionId,
boolean sctpAttributesPresent,
IPDD_SctpAttributes sctpAttributes optional,
integer dataLength (0..65526),
octetstring data
} with {
variant (sctpAttributesPresent) "FIELDLENGTH(8)"
variant (sctpAttributes) "PRESENCE (sctpAttributesPresent=true)"
variant (dataLength) "FIELDLENGTH(16)"
variant (dataLength) "LENGTHTO(data)"
}
type record IPDD_QueryConnections {
integer messageType
}
type record IPDD_Listen {
integer messageType,
IPDD_Interface localInterface,
ProtoTupleEnum proto,
boolean sctpProtoAttributesPresent,
IPDD_SctpProtoAttributes sctpProtoAttributes optional
} with {
variant (sctpProtoAttributesPresent) "FIELDLENGTH(8)"
variant (sctpProtoAttributes) "PRESENCE (sctpProtoAttributesPresent=true)"
}
type record IPDD_Connect {
integer messageType,
boolean autoReconnect,
boolean localInterfacePresent,
IPDD_Interface localInterface optional,
IPDD_Interface remoteInterface,
ProtoTupleEnum proto,
boolean sctpProtoAttributesPresent,
IPDD_SctpProtoAttributes sctpProtoAttributes optional
} with {
variant (autoReconnect, localInterfacePresent, sctpProtoAttributesPresent) "FIELDLENGTH(8)"
variant (localInterface) "PRESENCE (localInterfacePresent=true)"
variant (sctpProtoAttributes) "PRESENCE (sctpProtoAttributesPresent=true)"
}
type record IPDD_Close {
integer messageType,
IPDD_INT32 connectionId
}
type record IPDD_SubscribeToConnection {
integer messageType,
IPDD_INT32 connectionId
}
type record IPDD_Result {
integer messageType,
IPDD_INT32 connectionId,
boolean errorStatus,
charstring errorMessage optional
} with {
variant (errorStatus) "FIELDLENGTH(8)"
variant (errorMessage) "PRESENCE (errorStatus=true)"
}
type record IPDD_Connections {
integer messageType,
IPDD_ConnectionList connectionList
}
type record IPDD_ConnectionChanged {
integer messageType,
IPDD_INT32 connectionId,
boolean eventPresent,
IPDD_Event event optional,
boolean sctpStatePresent,
SAC_STATE sctpState optional
} with {
variant (eventPresent, sctpStatePresent, sctpState) "FIELDLENGTH(8)"
variant (event) "PRESENCE (eventPresent=true)"
variant (sctpState) "PRESENCE (sctpStatePresent=true)"
}
type record IPDD_Connected {
integer messageType,
IPDD_INT32 serverId,
IPDD_INT32 connectionId,
IPDD_Interface remoteInterface
}
type record IPDD_Closed {
integer messageType,
IPDD_INT32 connectionId
}
}
group SubTypes {
type integer IPDD_INT32 with {
variant "FIELDLENGTH(32), COMP(signbit)"
}
type integer IPDD_ULONG with {
variant "FIELDLENGTH(32), COMP(nosign)"
}
type record IPDD_SctpAttributes {
IPDD_ULONG sinfo_stream,
IPDD_ULONG sinfo_ppid
}
type enumerated ProtoTupleEnum {
udp,
tcp,
sctp,
ssl,
unspecified
} with {
variant "FIELDLENGTH(8)"
}
type record IPDD_SctpProtoAttributes {
boolean sinfo_streamAttributesPresent,
IPDD_ULONG sinfo_stream optional,
boolean sinfo_ppidPresent,
IPDD_ULONG sinfo_ppid optional,
boolean remSocksPresent,
IPDD_InterfaceList remSocks optional,
boolean assocIdPresent,
IPDD_ULONG assocId optional
} with {
variant (sinfo_streamAttributesPresent, sinfo_ppidPresent, remSocksPresent, assocIdPresent) "FIELDLENGTH(8)"
variant (sinfo_stream) "PRESENCE (sinfo_streamAttributesPresent=true)"
variant (sinfo_ppid) "PRESENCE (sinfo_ppidPresent=true)"
variant (remSocks) "PRESENCE (remSocksPresent=true)"
variant (assocId) "PRESENCE (assocIdPresent=true)"
}
type record IPDD_Event {
boolean errorCodePresent,
PortError errorCode optional,
boolean os_error_codePresent,
integer os_error_code optional,
integer os_error_textLength,
charstring os_error_text optional
} with {
variant (errorCodePresent, os_error_codePresent, os_error_textLength) "FIELDLENGTH(8)"
variant (errorCode) "PRESENCE (errorCodePresent=true)"
variant (os_error_code) "PRESENCE (os_error_codePresent=true)"
variant (os_error_textLength) "LENGTHTO (os_error_text)"
}
type record IPDD_Interface {
integer hostNameLength,
charstring hostName,
integer portNumber (0..65535) optional
} with {
variant (hostNameLength) "LENGTHTO(hostName)";
variant (portNumber) "FIELDLENGTH(16)";
}
type record of IPDD_Interface IPDD_InterfaceList;
type record IPDD_Connection {
IPDD_INT32 connectionId,
boolean serverConnection, // true := server, false: client
boolean autoReconnect,
boolean localInterfacePresent,
IPDD_Interface localInterface optional,
boolean remoteInterfacePresent,
IPDD_Interface remoteInterface optional,
ProtoTupleEnum proto,
boolean sctpProtoAttributesPresent,
IPDD_SctpProtoAttributes sctpProtoAttributes optional
} with {
variant (localInterface) "PRESENCE (localInterfacePresent=true)"
variant (remoteInterface) "PRESENCE (remoteInterfacePresent=true)"
variant (sctpProtoAttributes) "PRESENCE (sctpProtoAttributesPresent=true)"
variant (serverConnection, autoReconnect, localInterfacePresent, remoteInterfacePresent, sctpProtoAttributesPresent) "FIELDLENGTH(8)"; // take a byte to make debugging a little easier
}
type record of IPDD_Connection IPDD_ConnectionList;
type record IPDD_ConnectionConfig {
boolean serverConnection, // true := server, false: client
boolean autoReconnect,
IPDD_Interface localInterface optional,
IPDD_Interface remoteInterface optional
}
}
//=========================================================================
//Port Types
//=========================================================================
type port IPDD_Interface_PT message {
in ASP_Event;
inout IPDD_Message_with_ClientId
} with { extension "user IPL4asp_PT
in( ASP_Event -> ASP_Event: simple;
ASP_RecvFrom -> IPDD_Message_with_ClientId: function(f_dec_IPDD_Message);
ASP_ConnId_ReadyToRelease -> - : discard)
out(IPDD_Message_with_ClientId -> ASP_Send: function(f_enc_IPDD_Message))"
}
//=========================================================================
// Encoder and Decoder Functions
//=========================================================================
function f_IPDD_getMsgLen(in octetstring stream, inout ro_integer args) return integer {
var integer stream_length := lengthof(stream);
if (stream_length >=4) {
return oct2int(substr(stream,2,2));
}
return -1;
}
function f_dec_IPDD_Message(in ASP_RecvFrom aspTCP, out IPDD_Message_with_ClientId daemonMsg) return integer {
daemonMsg.client_id := aspTCP.connId;
daemonMsg.msg := dec_IPDD_Message(substr(aspTCP.msg, 4, lengthof(aspTCP.msg)-4));
return 0;
} with { extension "prototype(backtrack)" }
function f_enc_IPDD_Message(in IPDD_Message_with_ClientId sctpMsg, out ASP_Send aspTCP) return integer {
aspTCP.connId := sctpMsg.client_id;
var octetstring vl_encoded := enc_IPDD_Message(sctpMsg.msg);
// assemble TPKT here; TPKT:
// 1st octet: version
// 2nd octet: '00'O
// 3rd-4th octet: message length; used to separate the messages travelling on TCP
aspTCP.msg := '0300'O & int2oct((lengthof(vl_encoded) + 4), 2) & vl_encoded;
aspTCP.proto := {tcp:={}};
return 0;
} with { extension "prototype(backtrack)" }
// created automatically by compiler's RAW Encoder/Decoder code generator
external function enc_IPDD_Message(in IPDD_Message pdu) return octetstring
with { extension "prototype(convert) encode(RAW)" }
// created automatically by compiler's RAW Encoder/Decoder code generator
external function dec_IPDD_Message(in octetstring stream) return IPDD_Message
with { extension "prototype(convert) decode(RAW)" }
} with {encode "RAW"} // end of module