| /////////////////////////////////////////////////////////////////////////////// |
| // 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: SCTP_Daemon_Dynamic_Interface_Definitions.ttcn |
| // Description: IPDD <-> Testcase interface data and port types |
| // Rev: <RnXnn> |
| // Prodnr: CNL 113 630 |
| // Updated: 2012-11-10 |
| // Contact: http://ttcn.ericsson.se |
| |
| |
| 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)) |
| 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 |