| // This C++ source file was generated by the TTCN-3 compiler |
| // of the TTCN-3 Test Executor version CRL 113 200/6 R6A |
| // for Lénárd Nagy (elnrnag@elx78355y6x) on Thu Oct 24 10:29:40 2019 |
| |
| // Copyright (c) 2000-2019 Ericsson Telecom AB |
| |
| // Do not edit this file unless you know what you are doing. |
| |
| /* Including header files */ |
| |
| #include "IsobusCMMessageTypes.hh" |
| |
| namespace IsobusCMMessageTypes { |
| |
| /* Prototypes of static functions */ |
| |
| static void pre_init_module(); |
| static void post_init_module(); |
| |
| /* Literal string constants */ |
| |
| static const unsigned char os_0_octets[] = { 16 }, |
| os_1_octets[] = { 17 }, |
| os_2_octets[] = { 19 }, |
| os_3_octets[] = { 32 }, |
| os_5_octets[] = { 33 }, |
| os_6_octets[] = { 34 }, |
| os_7_octets[] = { 35 }, |
| os_4_octets[] = { 255 }; |
| static const OCTETSTRING os_0(1, os_0_octets), |
| os_1(1, os_1_octets), |
| os_2(1, os_2_octets), |
| os_3(1, os_3_octets), |
| os_5(1, os_5_octets), |
| os_6(1, os_6_octets), |
| os_7(1, os_7_octets), |
| os_4(1, os_4_octets); |
| static const unsigned char module_checksum[] = { 0xf5, 0x67, 0x02, 0xbc, 0x33, 0x07, 0xbc, 0xd1, 0x80, 0xb3, 0xef, 0x1b, 0x59, 0x25, 0x7c, 0x3f }; |
| |
| /* Global variable definitions */ |
| |
| const TTCN_RAWdescriptor_t SEQ__NO_raw_ = {8,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN,NULL,false}; |
| const XERdescriptor_t SEQ__NO_xer_ = { {"SEQ_NO>\n", "SEQ_NO>\n"}, {8, 8}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t SEQ__NO_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t SEQ__NO_descr_ = { "@IsobusCMMessageTypes.SEQ_NO", &INTEGER_ber_, &SEQ__NO_raw_, &INTEGER_text_, &SEQ__NO_xer_, &INTEGER_json_, &SEQ__NO_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t NUMBER__OF__PACKETS_raw_ = {8,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN,NULL,false}; |
| const XERdescriptor_t NUMBER__OF__PACKETS_xer_ = { {"NUMBER_OF_PACKETS>\n", "NUMBER_OF_PACKETS>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t NUMBER__OF__PACKETS_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t NUMBER__OF__PACKETS_descr_ = { "@IsobusCMMessageTypes.NUMBER_OF_PACKETS", &INTEGER_ber_, &NUMBER__OF__PACKETS_raw_, &INTEGER_text_, &NUMBER__OF__PACKETS_xer_, &INTEGER_json_, &NUMBER__OF__PACKETS_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const XERdescriptor_t Ctrl_xer_ = { {"Ctrl>\n", "Ctrl>\n"}, {6, 6}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int Ctrl_oer_ext_arr_[0] = {}; |
| const int Ctrl_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t Ctrl_oer_ = { -1, TRUE, 1, FALSE, 0, 0, Ctrl_oer_ext_arr_, 0, Ctrl_oer_p_}; |
| const TTCN_Typedescriptor_t Ctrl_descr_ = { "@IsobusCMMessageTypes.Ctrl", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &Ctrl_xer_, &OCTETSTRING_json_, &Ctrl_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t RequestToSend_ctrl_raw_ = {8,SG_NO,ORDER_LSB,ORDER_MSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN,NULL,false}; |
| const XERdescriptor_t RequestToSend_ctrl_xer_ = { {"ctrl>\n", "ctrl>\n"}, {6, 6}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int RequestToSend_ctrl_oer_ext_arr_[0] = {}; |
| const int RequestToSend_ctrl_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t RequestToSend_ctrl_oer_ = { -1, TRUE, 1, FALSE, 0, 0, RequestToSend_ctrl_oer_ext_arr_, 0, RequestToSend_ctrl_oer_p_}; |
| const TTCN_Typedescriptor_t RequestToSend_ctrl_descr_ = { "@IsobusCMMessageTypes.RequestToSend.ctrl", &OCTETSTRING_ber_, &RequestToSend_ctrl_raw_, &OCTETSTRING_text_, &RequestToSend_ctrl_xer_, &OCTETSTRING_json_, &RequestToSend_ctrl_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const XERdescriptor_t RequestToSend_msgSizeInBytes_xer_ = { {"msgSizeInBytes>\n", "msgSizeInBytes>\n"}, {16, 16}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t RequestToSend_msgSizeInBytes_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t RequestToSend_msgSizeInBytes_descr_ = { "@IsobusCMMessageTypes.RequestToSend.msgSizeInBytes", &INTEGER_ber_, &IsobusMessageTypes::INT2_raw_, &INTEGER_text_, &RequestToSend_msgSizeInBytes_xer_, &INTEGER_json_, &RequestToSend_msgSizeInBytes_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const XERdescriptor_t RequestToSend_totalNumberOfPackets_xer_ = { {"totalNumberOfPackets>\n", "totalNumberOfPackets>\n"}, {22, 22}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t RequestToSend_totalNumberOfPackets_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t RequestToSend_totalNumberOfPackets_descr_ = { "@IsobusCMMessageTypes.RequestToSend.totalNumberOfPackets", &INTEGER_ber_, &NUMBER__OF__PACKETS_raw_, &INTEGER_text_, &RequestToSend_totalNumberOfPackets_xer_, &INTEGER_json_, &RequestToSend_totalNumberOfPackets_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const XERdescriptor_t RequestToSend_maxNoOfPacketsInResponseToCTS_xer_ = { {"maxNoOfPacketsInResponseToCTS>\n", "maxNoOfPacketsInResponseToCTS>\n"}, {31, 31}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t RequestToSend_maxNoOfPacketsInResponseToCTS_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t RequestToSend_maxNoOfPacketsInResponseToCTS_descr_ = { "@IsobusCMMessageTypes.RequestToSend.maxNoOfPacketsInResponseToCTS", &INTEGER_ber_, &General__Types::INT1_raw_, &INTEGER_text_, &RequestToSend_maxNoOfPacketsInResponseToCTS_xer_, &INTEGER_json_, &RequestToSend_maxNoOfPacketsInResponseToCTS_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const XERdescriptor_t RequestToSend_pgnOfMultiPacketMessage_xer_ = { {"pgnOfMultiPacketMessage>\n", "pgnOfMultiPacketMessage>\n"}, {25, 25}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t RequestToSend_pgnOfMultiPacketMessage_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t RequestToSend_pgnOfMultiPacketMessage_descr_ = { "@IsobusCMMessageTypes.RequestToSend.pgnOfMultiPacketMessage", &INTEGER_ber_, &IsobusMessageTypes::INT24nb_raw_, &INTEGER_text_, &RequestToSend_pgnOfMultiPacketMessage_xer_, &INTEGER_json_, &RequestToSend_pgnOfMultiPacketMessage_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t RequestToSend_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN,NULL,false}; |
| // No XER for RequestToSend |
| const TTCN_Typedescriptor_t RequestToSend_descr_ = { "@IsobusCMMessageTypes.RequestToSend", NULL, &RequestToSend_raw_, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t ClearToSend_ctrl_raw_ = {8,SG_NO,ORDER_LSB,ORDER_MSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN,NULL,false}; |
| const XERdescriptor_t ClearToSend_ctrl_xer_ = { {"ctrl>\n", "ctrl>\n"}, {6, 6}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int ClearToSend_ctrl_oer_ext_arr_[0] = {}; |
| const int ClearToSend_ctrl_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t ClearToSend_ctrl_oer_ = { -1, TRUE, 1, FALSE, 0, 0, ClearToSend_ctrl_oer_ext_arr_, 0, ClearToSend_ctrl_oer_p_}; |
| const TTCN_Typedescriptor_t ClearToSend_ctrl_descr_ = { "@IsobusCMMessageTypes.ClearToSend.ctrl", &OCTETSTRING_ber_, &ClearToSend_ctrl_raw_, &OCTETSTRING_text_, &ClearToSend_ctrl_xer_, &OCTETSTRING_json_, &ClearToSend_ctrl_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const XERdescriptor_t ClearToSend_totalNumberOfPackets_xer_ = { {"totalNumberOfPackets>\n", "totalNumberOfPackets>\n"}, {22, 22}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t ClearToSend_totalNumberOfPackets_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t ClearToSend_totalNumberOfPackets_descr_ = { "@IsobusCMMessageTypes.ClearToSend.totalNumberOfPackets", &INTEGER_ber_, &NUMBER__OF__PACKETS_raw_, &INTEGER_text_, &ClearToSend_totalNumberOfPackets_xer_, &INTEGER_json_, &ClearToSend_totalNumberOfPackets_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const XERdescriptor_t ClearToSend_nextPacketNumber_xer_ = { {"nextPacketNumber>\n", "nextPacketNumber>\n"}, {18, 18}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t ClearToSend_nextPacketNumber_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t ClearToSend_nextPacketNumber_descr_ = { "@IsobusCMMessageTypes.ClearToSend.nextPacketNumber", &INTEGER_ber_, &General__Types::INT1_raw_, &INTEGER_text_, &ClearToSend_nextPacketNumber_xer_, &INTEGER_json_, &ClearToSend_nextPacketNumber_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t ClearToSend_reserved4_raw_ = {8,SG_NO,ORDER_LSB,ORDER_MSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN,NULL,false}; |
| const XERdescriptor_t ClearToSend_reserved4_xer_ = { {"reserved4>\n", "reserved4>\n"}, {11, 11}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int ClearToSend_reserved4_oer_ext_arr_[0] = {}; |
| const int ClearToSend_reserved4_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t ClearToSend_reserved4_oer_ = { -1, TRUE, 1, FALSE, 0, 0, ClearToSend_reserved4_oer_ext_arr_, 0, ClearToSend_reserved4_oer_p_}; |
| const TTCN_Typedescriptor_t ClearToSend_reserved4_descr_ = { "@IsobusCMMessageTypes.ClearToSend.reserved4", &OCTETSTRING_ber_, &ClearToSend_reserved4_raw_, &OCTETSTRING_text_, &ClearToSend_reserved4_xer_, &OCTETSTRING_json_, &ClearToSend_reserved4_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t ClearToSend_reserved5_raw_ = {8,SG_NO,ORDER_LSB,ORDER_MSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN,NULL,false}; |
| const XERdescriptor_t ClearToSend_reserved5_xer_ = { {"reserved5>\n", "reserved5>\n"}, {11, 11}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int ClearToSend_reserved5_oer_ext_arr_[0] = {}; |
| const int ClearToSend_reserved5_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t ClearToSend_reserved5_oer_ = { -1, TRUE, 1, FALSE, 0, 0, ClearToSend_reserved5_oer_ext_arr_, 0, ClearToSend_reserved5_oer_p_}; |
| const TTCN_Typedescriptor_t ClearToSend_reserved5_descr_ = { "@IsobusCMMessageTypes.ClearToSend.reserved5", &OCTETSTRING_ber_, &ClearToSend_reserved5_raw_, &OCTETSTRING_text_, &ClearToSend_reserved5_xer_, &OCTETSTRING_json_, &ClearToSend_reserved5_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const XERdescriptor_t ClearToSend_pgnOfMultiPacketMessage_xer_ = { {"pgnOfMultiPacketMessage>\n", "pgnOfMultiPacketMessage>\n"}, {25, 25}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t ClearToSend_pgnOfMultiPacketMessage_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t ClearToSend_pgnOfMultiPacketMessage_descr_ = { "@IsobusCMMessageTypes.ClearToSend.pgnOfMultiPacketMessage", &INTEGER_ber_, &IsobusMessageTypes::INT24nb_raw_, &INTEGER_text_, &ClearToSend_pgnOfMultiPacketMessage_xer_, &INTEGER_json_, &ClearToSend_pgnOfMultiPacketMessage_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t ClearToSend_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN,NULL,false}; |
| // No XER for ClearToSend |
| const TTCN_Typedescriptor_t ClearToSend_descr_ = { "@IsobusCMMessageTypes.ClearToSend", NULL, &ClearToSend_raw_, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t EndOfMessageAcknowledgement_ctrl_raw_ = {8,SG_NO,ORDER_LSB,ORDER_MSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN,NULL,false}; |
| const XERdescriptor_t EndOfMessageAcknowledgement_ctrl_xer_ = { {"ctrl>\n", "ctrl>\n"}, {6, 6}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int EndOfMessageAcknowledgement_ctrl_oer_ext_arr_[0] = {}; |
| const int EndOfMessageAcknowledgement_ctrl_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t EndOfMessageAcknowledgement_ctrl_oer_ = { -1, TRUE, 1, FALSE, 0, 0, EndOfMessageAcknowledgement_ctrl_oer_ext_arr_, 0, EndOfMessageAcknowledgement_ctrl_oer_p_}; |
| const TTCN_Typedescriptor_t EndOfMessageAcknowledgement_ctrl_descr_ = { "@IsobusCMMessageTypes.EndOfMessageAcknowledgement.ctrl", &OCTETSTRING_ber_, &EndOfMessageAcknowledgement_ctrl_raw_, &OCTETSTRING_text_, &EndOfMessageAcknowledgement_ctrl_xer_, &OCTETSTRING_json_, &EndOfMessageAcknowledgement_ctrl_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const XERdescriptor_t EndOfMessageAcknowledgement_msgSizeInByte_xer_ = { {"msgSizeInByte>\n", "msgSizeInByte>\n"}, {15, 15}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t EndOfMessageAcknowledgement_msgSizeInByte_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t EndOfMessageAcknowledgement_msgSizeInByte_descr_ = { "@IsobusCMMessageTypes.EndOfMessageAcknowledgement.msgSizeInByte", &INTEGER_ber_, &IsobusMessageTypes::INT2_raw_, &INTEGER_text_, &EndOfMessageAcknowledgement_msgSizeInByte_xer_, &INTEGER_json_, &EndOfMessageAcknowledgement_msgSizeInByte_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const XERdescriptor_t EndOfMessageAcknowledgement_totalNumberOfPackets_xer_ = { {"totalNumberOfPackets>\n", "totalNumberOfPackets>\n"}, {22, 22}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t EndOfMessageAcknowledgement_totalNumberOfPackets_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t EndOfMessageAcknowledgement_totalNumberOfPackets_descr_ = { "@IsobusCMMessageTypes.EndOfMessageAcknowledgement.totalNumberOfPackets", &INTEGER_ber_, &NUMBER__OF__PACKETS_raw_, &INTEGER_text_, &EndOfMessageAcknowledgement_totalNumberOfPackets_xer_, &INTEGER_json_, &EndOfMessageAcknowledgement_totalNumberOfPackets_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t EndOfMessageAcknowledgement_reserved5_raw_ = {8,SG_NO,ORDER_LSB,ORDER_MSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN,NULL,false}; |
| const XERdescriptor_t EndOfMessageAcknowledgement_reserved5_xer_ = { {"reserved5>\n", "reserved5>\n"}, {11, 11}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int EndOfMessageAcknowledgement_reserved5_oer_ext_arr_[0] = {}; |
| const int EndOfMessageAcknowledgement_reserved5_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t EndOfMessageAcknowledgement_reserved5_oer_ = { -1, TRUE, 1, FALSE, 0, 0, EndOfMessageAcknowledgement_reserved5_oer_ext_arr_, 0, EndOfMessageAcknowledgement_reserved5_oer_p_}; |
| const TTCN_Typedescriptor_t EndOfMessageAcknowledgement_reserved5_descr_ = { "@IsobusCMMessageTypes.EndOfMessageAcknowledgement.reserved5", &OCTETSTRING_ber_, &EndOfMessageAcknowledgement_reserved5_raw_, &OCTETSTRING_text_, &EndOfMessageAcknowledgement_reserved5_xer_, &OCTETSTRING_json_, &EndOfMessageAcknowledgement_reserved5_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const XERdescriptor_t EndOfMessageAcknowledgement_pgnOfMultiPacketMessage_xer_ = { {"pgnOfMultiPacketMessage>\n", "pgnOfMultiPacketMessage>\n"}, {25, 25}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t EndOfMessageAcknowledgement_pgnOfMultiPacketMessage_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t EndOfMessageAcknowledgement_pgnOfMultiPacketMessage_descr_ = { "@IsobusCMMessageTypes.EndOfMessageAcknowledgement.pgnOfMultiPacketMessage", &INTEGER_ber_, &IsobusMessageTypes::INT24nb_raw_, &INTEGER_text_, &EndOfMessageAcknowledgement_pgnOfMultiPacketMessage_xer_, &INTEGER_json_, &EndOfMessageAcknowledgement_pgnOfMultiPacketMessage_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t EndOfMessageAcknowledgement_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN,NULL,false}; |
| // No XER for EndOfMessageAcknowledgement |
| const TTCN_Typedescriptor_t EndOfMessageAcknowledgement_descr_ = { "@IsobusCMMessageTypes.EndOfMessageAcknowledgement", NULL, &EndOfMessageAcknowledgement_raw_, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t e__ConnectionAbort__AbortReason_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,8,0,0,8,0,NULL,-1,CharCoding::UNKNOWN,NULL,false}; |
| // No XER for e__ConnectionAbort__AbortReason |
| const TTCN_Typedescriptor_t e__ConnectionAbort__AbortReason_descr_ = { "@IsobusCMMessageTypes.e_ConnectionAbort_AbortReason", NULL, &e__ConnectionAbort__AbortReason_raw_, NULL, NULL, &ENUMERATED_json_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t ConnectionAbort_ctrl_raw_ = {8,SG_NO,ORDER_LSB,ORDER_MSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN,NULL,false}; |
| const XERdescriptor_t ConnectionAbort_ctrl_xer_ = { {"ctrl>\n", "ctrl>\n"}, {6, 6}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int ConnectionAbort_ctrl_oer_ext_arr_[0] = {}; |
| const int ConnectionAbort_ctrl_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t ConnectionAbort_ctrl_oer_ = { -1, TRUE, 1, FALSE, 0, 0, ConnectionAbort_ctrl_oer_ext_arr_, 0, ConnectionAbort_ctrl_oer_p_}; |
| const TTCN_Typedescriptor_t ConnectionAbort_ctrl_descr_ = { "@IsobusCMMessageTypes.ConnectionAbort.ctrl", &OCTETSTRING_ber_, &ConnectionAbort_ctrl_raw_, &OCTETSTRING_text_, &ConnectionAbort_ctrl_xer_, &OCTETSTRING_json_, &ConnectionAbort_ctrl_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t ConnectionAbort_reserved3_raw_ = {8,SG_NO,ORDER_LSB,ORDER_MSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN,NULL,false}; |
| const XERdescriptor_t ConnectionAbort_reserved3_xer_ = { {"reserved3>\n", "reserved3>\n"}, {11, 11}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int ConnectionAbort_reserved3_oer_ext_arr_[0] = {}; |
| const int ConnectionAbort_reserved3_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t ConnectionAbort_reserved3_oer_ = { -1, TRUE, 1, FALSE, 0, 0, ConnectionAbort_reserved3_oer_ext_arr_, 0, ConnectionAbort_reserved3_oer_p_}; |
| const TTCN_Typedescriptor_t ConnectionAbort_reserved3_descr_ = { "@IsobusCMMessageTypes.ConnectionAbort.reserved3", &OCTETSTRING_ber_, &ConnectionAbort_reserved3_raw_, &OCTETSTRING_text_, &ConnectionAbort_reserved3_xer_, &OCTETSTRING_json_, &ConnectionAbort_reserved3_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t ConnectionAbort_reserved4_raw_ = {8,SG_NO,ORDER_LSB,ORDER_MSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN,NULL,false}; |
| const XERdescriptor_t ConnectionAbort_reserved4_xer_ = { {"reserved4>\n", "reserved4>\n"}, {11, 11}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int ConnectionAbort_reserved4_oer_ext_arr_[0] = {}; |
| const int ConnectionAbort_reserved4_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t ConnectionAbort_reserved4_oer_ = { -1, TRUE, 1, FALSE, 0, 0, ConnectionAbort_reserved4_oer_ext_arr_, 0, ConnectionAbort_reserved4_oer_p_}; |
| const TTCN_Typedescriptor_t ConnectionAbort_reserved4_descr_ = { "@IsobusCMMessageTypes.ConnectionAbort.reserved4", &OCTETSTRING_ber_, &ConnectionAbort_reserved4_raw_, &OCTETSTRING_text_, &ConnectionAbort_reserved4_xer_, &OCTETSTRING_json_, &ConnectionAbort_reserved4_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t ConnectionAbort_reserved5_raw_ = {8,SG_NO,ORDER_LSB,ORDER_MSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN,NULL,false}; |
| const XERdescriptor_t ConnectionAbort_reserved5_xer_ = { {"reserved5>\n", "reserved5>\n"}, {11, 11}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int ConnectionAbort_reserved5_oer_ext_arr_[0] = {}; |
| const int ConnectionAbort_reserved5_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t ConnectionAbort_reserved5_oer_ = { -1, TRUE, 1, FALSE, 0, 0, ConnectionAbort_reserved5_oer_ext_arr_, 0, ConnectionAbort_reserved5_oer_p_}; |
| const TTCN_Typedescriptor_t ConnectionAbort_reserved5_descr_ = { "@IsobusCMMessageTypes.ConnectionAbort.reserved5", &OCTETSTRING_ber_, &ConnectionAbort_reserved5_raw_, &OCTETSTRING_text_, &ConnectionAbort_reserved5_xer_, &OCTETSTRING_json_, &ConnectionAbort_reserved5_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const XERdescriptor_t ConnectionAbort_pgnOfMultiPacketMessage_xer_ = { {"pgnOfMultiPacketMessage>\n", "pgnOfMultiPacketMessage>\n"}, {25, 25}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t ConnectionAbort_pgnOfMultiPacketMessage_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t ConnectionAbort_pgnOfMultiPacketMessage_descr_ = { "@IsobusCMMessageTypes.ConnectionAbort.pgnOfMultiPacketMessage", &INTEGER_ber_, &IsobusMessageTypes::INT24nb_raw_, &INTEGER_text_, &ConnectionAbort_pgnOfMultiPacketMessage_xer_, &INTEGER_json_, &ConnectionAbort_pgnOfMultiPacketMessage_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t ConnectionAbort_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN,NULL,false}; |
| // No XER for ConnectionAbort |
| const TTCN_Typedescriptor_t ConnectionAbort_descr_ = { "@IsobusCMMessageTypes.ConnectionAbort", NULL, &ConnectionAbort_raw_, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t BroadcastAnnounce_ctrl_raw_ = {8,SG_NO,ORDER_LSB,ORDER_MSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN,NULL,false}; |
| const XERdescriptor_t BroadcastAnnounce_ctrl_xer_ = { {"ctrl>\n", "ctrl>\n"}, {6, 6}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int BroadcastAnnounce_ctrl_oer_ext_arr_[0] = {}; |
| const int BroadcastAnnounce_ctrl_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t BroadcastAnnounce_ctrl_oer_ = { -1, TRUE, 1, FALSE, 0, 0, BroadcastAnnounce_ctrl_oer_ext_arr_, 0, BroadcastAnnounce_ctrl_oer_p_}; |
| const TTCN_Typedescriptor_t BroadcastAnnounce_ctrl_descr_ = { "@IsobusCMMessageTypes.BroadcastAnnounce.ctrl", &OCTETSTRING_ber_, &BroadcastAnnounce_ctrl_raw_, &OCTETSTRING_text_, &BroadcastAnnounce_ctrl_xer_, &OCTETSTRING_json_, &BroadcastAnnounce_ctrl_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const XERdescriptor_t BroadcastAnnounce_msgSizeInByte_xer_ = { {"msgSizeInByte>\n", "msgSizeInByte>\n"}, {15, 15}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t BroadcastAnnounce_msgSizeInByte_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t BroadcastAnnounce_msgSizeInByte_descr_ = { "@IsobusCMMessageTypes.BroadcastAnnounce.msgSizeInByte", &INTEGER_ber_, &IsobusMessageTypes::INT2_raw_, &INTEGER_text_, &BroadcastAnnounce_msgSizeInByte_xer_, &INTEGER_json_, &BroadcastAnnounce_msgSizeInByte_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const XERdescriptor_t BroadcastAnnounce_totalNumberOfPackets_xer_ = { {"totalNumberOfPackets>\n", "totalNumberOfPackets>\n"}, {22, 22}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t BroadcastAnnounce_totalNumberOfPackets_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t BroadcastAnnounce_totalNumberOfPackets_descr_ = { "@IsobusCMMessageTypes.BroadcastAnnounce.totalNumberOfPackets", &INTEGER_ber_, &NUMBER__OF__PACKETS_raw_, &INTEGER_text_, &BroadcastAnnounce_totalNumberOfPackets_xer_, &INTEGER_json_, &BroadcastAnnounce_totalNumberOfPackets_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t BroadcastAnnounce_reserved5_raw_ = {8,SG_NO,ORDER_LSB,ORDER_MSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN,NULL,false}; |
| const XERdescriptor_t BroadcastAnnounce_reserved5_xer_ = { {"reserved5>\n", "reserved5>\n"}, {11, 11}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int BroadcastAnnounce_reserved5_oer_ext_arr_[0] = {}; |
| const int BroadcastAnnounce_reserved5_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t BroadcastAnnounce_reserved5_oer_ = { -1, TRUE, 1, FALSE, 0, 0, BroadcastAnnounce_reserved5_oer_ext_arr_, 0, BroadcastAnnounce_reserved5_oer_p_}; |
| const TTCN_Typedescriptor_t BroadcastAnnounce_reserved5_descr_ = { "@IsobusCMMessageTypes.BroadcastAnnounce.reserved5", &OCTETSTRING_ber_, &BroadcastAnnounce_reserved5_raw_, &OCTETSTRING_text_, &BroadcastAnnounce_reserved5_xer_, &OCTETSTRING_json_, &BroadcastAnnounce_reserved5_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const XERdescriptor_t BroadcastAnnounce_pgnOfMultiPacketMessage_xer_ = { {"pgnOfMultiPacketMessage>\n", "pgnOfMultiPacketMessage>\n"}, {25, 25}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t BroadcastAnnounce_pgnOfMultiPacketMessage_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t BroadcastAnnounce_pgnOfMultiPacketMessage_descr_ = { "@IsobusCMMessageTypes.BroadcastAnnounce.pgnOfMultiPacketMessage", &INTEGER_ber_, &IsobusMessageTypes::INT24nb_raw_, &INTEGER_text_, &BroadcastAnnounce_pgnOfMultiPacketMessage_xer_, &INTEGER_json_, &BroadcastAnnounce_pgnOfMultiPacketMessage_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t BroadcastAnnounce_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN,NULL,false}; |
| // No XER for BroadcastAnnounce |
| const TTCN_Typedescriptor_t BroadcastAnnounce_descr_ = { "@IsobusCMMessageTypes.BroadcastAnnounce", NULL, &BroadcastAnnounce_raw_, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t TP__CM_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN,NULL,false}; |
| // No XER for TP__CM |
| const TTCN_Typedescriptor_t TP__CM_descr_ = { "@IsobusCMMessageTypes.TP_CM", NULL, &TP__CM_raw_, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t ETP__MSG__SIZE_raw_ = {32,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN,NULL,false}; |
| const XERdescriptor_t ETP__MSG__SIZE_xer_ = { {"ETP_MSG_SIZE>\n", "ETP_MSG_SIZE>\n"}, {14, 14}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t ETP__MSG__SIZE_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t ETP__MSG__SIZE_descr_ = { "@IsobusCMMessageTypes.ETP_MSG_SIZE", &INTEGER_ber_, &ETP__MSG__SIZE_raw_, &INTEGER_text_, &ETP__MSG__SIZE_xer_, &INTEGER_json_, &ETP__MSG__SIZE_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t ExtendedMessageRequestToSend_ctrl_raw_ = {8,SG_NO,ORDER_LSB,ORDER_MSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN,NULL,false}; |
| const XERdescriptor_t ExtendedMessageRequestToSend_ctrl_xer_ = { {"ctrl>\n", "ctrl>\n"}, {6, 6}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int ExtendedMessageRequestToSend_ctrl_oer_ext_arr_[0] = {}; |
| const int ExtendedMessageRequestToSend_ctrl_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t ExtendedMessageRequestToSend_ctrl_oer_ = { -1, TRUE, 1, FALSE, 0, 0, ExtendedMessageRequestToSend_ctrl_oer_ext_arr_, 0, ExtendedMessageRequestToSend_ctrl_oer_p_}; |
| const TTCN_Typedescriptor_t ExtendedMessageRequestToSend_ctrl_descr_ = { "@IsobusCMMessageTypes.ExtendedMessageRequestToSend.ctrl", &OCTETSTRING_ber_, &ExtendedMessageRequestToSend_ctrl_raw_, &OCTETSTRING_text_, &ExtendedMessageRequestToSend_ctrl_xer_, &OCTETSTRING_json_, &ExtendedMessageRequestToSend_ctrl_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const XERdescriptor_t ExtendedMessageRequestToSend_msgSizeInBytes_xer_ = { {"msgSizeInBytes>\n", "msgSizeInBytes>\n"}, {16, 16}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t ExtendedMessageRequestToSend_msgSizeInBytes_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t ExtendedMessageRequestToSend_msgSizeInBytes_descr_ = { "@IsobusCMMessageTypes.ExtendedMessageRequestToSend.msgSizeInBytes", &INTEGER_ber_, &ETP__MSG__SIZE_raw_, &INTEGER_text_, &ExtendedMessageRequestToSend_msgSizeInBytes_xer_, &INTEGER_json_, &ExtendedMessageRequestToSend_msgSizeInBytes_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const XERdescriptor_t ExtendedMessageRequestToSend_pgnOfExtendedPacketedMessage_xer_ = { {"pgnOfExtendedPacketedMessage>\n", "pgnOfExtendedPacketedMessage>\n"}, {30, 30}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t ExtendedMessageRequestToSend_pgnOfExtendedPacketedMessage_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t ExtendedMessageRequestToSend_pgnOfExtendedPacketedMessage_descr_ = { "@IsobusCMMessageTypes.ExtendedMessageRequestToSend.pgnOfExtendedPacketedMessage", &INTEGER_ber_, &IsobusMessageTypes::INT24nb_raw_, &INTEGER_text_, &ExtendedMessageRequestToSend_pgnOfExtendedPacketedMessage_xer_, &INTEGER_json_, &ExtendedMessageRequestToSend_pgnOfExtendedPacketedMessage_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t ExtendedMessageRequestToSend_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN,NULL,false}; |
| // No XER for ExtendedMessageRequestToSend |
| const TTCN_Typedescriptor_t ExtendedMessageRequestToSend_descr_ = { "@IsobusCMMessageTypes.ExtendedMessageRequestToSend", NULL, &ExtendedMessageRequestToSend_raw_, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t ETP__NextPacketNumberToSend_raw_ = {32,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN,NULL,false}; |
| const XERdescriptor_t ETP__NextPacketNumberToSend_xer_ = { {"ETP_NextPacketNumberToSend>\n", "ETP_NextPacketNumberToSend>\n"}, {28, 28}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t ETP__NextPacketNumberToSend_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t ETP__NextPacketNumberToSend_descr_ = { "@IsobusCMMessageTypes.ETP_NextPacketNumberToSend", &INTEGER_ber_, &ETP__NextPacketNumberToSend_raw_, &INTEGER_text_, &ETP__NextPacketNumberToSend_xer_, &INTEGER_json_, &ETP__NextPacketNumberToSend_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t ExtendedMessageClearToSend_ctrl_raw_ = {8,SG_NO,ORDER_LSB,ORDER_MSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN,NULL,false}; |
| const XERdescriptor_t ExtendedMessageClearToSend_ctrl_xer_ = { {"ctrl>\n", "ctrl>\n"}, {6, 6}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int ExtendedMessageClearToSend_ctrl_oer_ext_arr_[0] = {}; |
| const int ExtendedMessageClearToSend_ctrl_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t ExtendedMessageClearToSend_ctrl_oer_ = { -1, TRUE, 1, FALSE, 0, 0, ExtendedMessageClearToSend_ctrl_oer_ext_arr_, 0, ExtendedMessageClearToSend_ctrl_oer_p_}; |
| const TTCN_Typedescriptor_t ExtendedMessageClearToSend_ctrl_descr_ = { "@IsobusCMMessageTypes.ExtendedMessageClearToSend.ctrl", &OCTETSTRING_ber_, &ExtendedMessageClearToSend_ctrl_raw_, &OCTETSTRING_text_, &ExtendedMessageClearToSend_ctrl_xer_, &OCTETSTRING_json_, &ExtendedMessageClearToSend_ctrl_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const XERdescriptor_t ExtendedMessageClearToSend_NumberOfPacketsToSend_xer_ = { {"NumberOfPacketsToSend>\n", "NumberOfPacketsToSend>\n"}, {23, 23}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t ExtendedMessageClearToSend_NumberOfPacketsToSend_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t ExtendedMessageClearToSend_NumberOfPacketsToSend_descr_ = { "@IsobusCMMessageTypes.ExtendedMessageClearToSend.NumberOfPacketsToSend", &INTEGER_ber_, &General__Types::INT1_raw_, &INTEGER_text_, &ExtendedMessageClearToSend_NumberOfPacketsToSend_xer_, &INTEGER_json_, &ExtendedMessageClearToSend_NumberOfPacketsToSend_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const XERdescriptor_t ExtendedMessageClearToSend_nextPacketNumberToSend_xer_ = { {"nextPacketNumberToSend>\n", "nextPacketNumberToSend>\n"}, {24, 24}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t ExtendedMessageClearToSend_nextPacketNumberToSend_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t ExtendedMessageClearToSend_nextPacketNumberToSend_descr_ = { "@IsobusCMMessageTypes.ExtendedMessageClearToSend.nextPacketNumberToSend", &INTEGER_ber_, &ETP__NextPacketNumberToSend_raw_, &INTEGER_text_, &ExtendedMessageClearToSend_nextPacketNumberToSend_xer_, &INTEGER_json_, &ExtendedMessageClearToSend_nextPacketNumberToSend_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const XERdescriptor_t ExtendedMessageClearToSend_pgnOfExtendedPacketedMessage_xer_ = { {"pgnOfExtendedPacketedMessage>\n", "pgnOfExtendedPacketedMessage>\n"}, {30, 30}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t ExtendedMessageClearToSend_pgnOfExtendedPacketedMessage_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t ExtendedMessageClearToSend_pgnOfExtendedPacketedMessage_descr_ = { "@IsobusCMMessageTypes.ExtendedMessageClearToSend.pgnOfExtendedPacketedMessage", &INTEGER_ber_, &IsobusMessageTypes::INT24nb_raw_, &INTEGER_text_, &ExtendedMessageClearToSend_pgnOfExtendedPacketedMessage_xer_, &INTEGER_json_, &ExtendedMessageClearToSend_pgnOfExtendedPacketedMessage_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t ExtendedMessageClearToSend_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN,NULL,false}; |
| // No XER for ExtendedMessageClearToSend |
| const TTCN_Typedescriptor_t ExtendedMessageClearToSend_descr_ = { "@IsobusCMMessageTypes.ExtendedMessageClearToSend", NULL, &ExtendedMessageClearToSend_raw_, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t ETP__NoPacketForOffset_raw_ = {8,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN,NULL,false}; |
| const XERdescriptor_t ETP__NoPacketForOffset_xer_ = { {"ETP_NoPacketForOffset>\n", "ETP_NoPacketForOffset>\n"}, {23, 23}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t ETP__NoPacketForOffset_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t ETP__NoPacketForOffset_descr_ = { "@IsobusCMMessageTypes.ETP_NoPacketForOffset", &INTEGER_ber_, &ETP__NoPacketForOffset_raw_, &INTEGER_text_, &ETP__NoPacketForOffset_xer_, &INTEGER_json_, &ETP__NoPacketForOffset_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t ExtendedMessageDataPacketOffset_ctrl_raw_ = {8,SG_NO,ORDER_LSB,ORDER_MSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN,NULL,false}; |
| const XERdescriptor_t ExtendedMessageDataPacketOffset_ctrl_xer_ = { {"ctrl>\n", "ctrl>\n"}, {6, 6}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int ExtendedMessageDataPacketOffset_ctrl_oer_ext_arr_[0] = {}; |
| const int ExtendedMessageDataPacketOffset_ctrl_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t ExtendedMessageDataPacketOffset_ctrl_oer_ = { -1, TRUE, 1, FALSE, 0, 0, ExtendedMessageDataPacketOffset_ctrl_oer_ext_arr_, 0, ExtendedMessageDataPacketOffset_ctrl_oer_p_}; |
| const TTCN_Typedescriptor_t ExtendedMessageDataPacketOffset_ctrl_descr_ = { "@IsobusCMMessageTypes.ExtendedMessageDataPacketOffset.ctrl", &OCTETSTRING_ber_, &ExtendedMessageDataPacketOffset_ctrl_raw_, &OCTETSTRING_text_, &ExtendedMessageDataPacketOffset_ctrl_xer_, &OCTETSTRING_json_, &ExtendedMessageDataPacketOffset_ctrl_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const XERdescriptor_t ExtendedMessageDataPacketOffset_numberOfPacketsToWhichToApplyTheOffset_xer_ = { {"numberOfPacketsToWhichToApplyTheOffset>\n", "numberOfPacketsToWhichToApplyTheOffset>\n"}, {40, 40}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t ExtendedMessageDataPacketOffset_numberOfPacketsToWhichToApplyTheOffset_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t ExtendedMessageDataPacketOffset_numberOfPacketsToWhichToApplyTheOffset_descr_ = { "@IsobusCMMessageTypes.ExtendedMessageDataPacketOffset.numberOfPacketsToWhichToApplyTheOffset", &INTEGER_ber_, &ETP__NoPacketForOffset_raw_, &INTEGER_text_, &ExtendedMessageDataPacketOffset_numberOfPacketsToWhichToApplyTheOffset_xer_, &INTEGER_json_, &ExtendedMessageDataPacketOffset_numberOfPacketsToWhichToApplyTheOffset_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const XERdescriptor_t ExtendedMessageDataPacketOffset_totalNumberOfPackets_xer_ = { {"totalNumberOfPackets>\n", "totalNumberOfPackets>\n"}, {22, 22}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t ExtendedMessageDataPacketOffset_totalNumberOfPackets_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t ExtendedMessageDataPacketOffset_totalNumberOfPackets_descr_ = { "@IsobusCMMessageTypes.ExtendedMessageDataPacketOffset.totalNumberOfPackets", &INTEGER_ber_, &NUMBER__OF__PACKETS_raw_, &INTEGER_text_, &ExtendedMessageDataPacketOffset_totalNumberOfPackets_xer_, &INTEGER_json_, &ExtendedMessageDataPacketOffset_totalNumberOfPackets_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const XERdescriptor_t ExtendedMessageDataPacketOffset_dataPacketOffset_xer_ = { {"dataPacketOffset>\n", "dataPacketOffset>\n"}, {18, 18}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t ExtendedMessageDataPacketOffset_dataPacketOffset_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t ExtendedMessageDataPacketOffset_dataPacketOffset_descr_ = { "@IsobusCMMessageTypes.ExtendedMessageDataPacketOffset.dataPacketOffset", &INTEGER_ber_, &ETP__NextPacketNumberToSend_raw_, &INTEGER_text_, &ExtendedMessageDataPacketOffset_dataPacketOffset_xer_, &INTEGER_json_, &ExtendedMessageDataPacketOffset_dataPacketOffset_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const XERdescriptor_t ExtendedMessageDataPacketOffset_pgnOfExtendedPacketedMessage_xer_ = { {"pgnOfExtendedPacketedMessage>\n", "pgnOfExtendedPacketedMessage>\n"}, {30, 30}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t ExtendedMessageDataPacketOffset_pgnOfExtendedPacketedMessage_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t ExtendedMessageDataPacketOffset_pgnOfExtendedPacketedMessage_descr_ = { "@IsobusCMMessageTypes.ExtendedMessageDataPacketOffset.pgnOfExtendedPacketedMessage", &INTEGER_ber_, &IsobusMessageTypes::INT24nb_raw_, &INTEGER_text_, &ExtendedMessageDataPacketOffset_pgnOfExtendedPacketedMessage_xer_, &INTEGER_json_, &ExtendedMessageDataPacketOffset_pgnOfExtendedPacketedMessage_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t ExtendedMessageDataPacketOffset_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN,NULL,false}; |
| // No XER for ExtendedMessageDataPacketOffset |
| const TTCN_Typedescriptor_t ExtendedMessageDataPacketOffset_descr_ = { "@IsobusCMMessageTypes.ExtendedMessageDataPacketOffset", NULL, &ExtendedMessageDataPacketOffset_raw_, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t ExtendedMessageEndOfMessageAcknowledgement_ctrl_raw_ = {8,SG_NO,ORDER_LSB,ORDER_MSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN,NULL,false}; |
| const XERdescriptor_t ExtendedMessageEndOfMessageAcknowledgement_ctrl_xer_ = { {"ctrl>\n", "ctrl>\n"}, {6, 6}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int ExtendedMessageEndOfMessageAcknowledgement_ctrl_oer_ext_arr_[0] = {}; |
| const int ExtendedMessageEndOfMessageAcknowledgement_ctrl_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t ExtendedMessageEndOfMessageAcknowledgement_ctrl_oer_ = { -1, TRUE, 1, FALSE, 0, 0, ExtendedMessageEndOfMessageAcknowledgement_ctrl_oer_ext_arr_, 0, ExtendedMessageEndOfMessageAcknowledgement_ctrl_oer_p_}; |
| const TTCN_Typedescriptor_t ExtendedMessageEndOfMessageAcknowledgement_ctrl_descr_ = { "@IsobusCMMessageTypes.ExtendedMessageEndOfMessageAcknowledgement.ctrl", &OCTETSTRING_ber_, &ExtendedMessageEndOfMessageAcknowledgement_ctrl_raw_, &OCTETSTRING_text_, &ExtendedMessageEndOfMessageAcknowledgement_ctrl_xer_, &OCTETSTRING_json_, &ExtendedMessageEndOfMessageAcknowledgement_ctrl_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const XERdescriptor_t ExtendedMessageEndOfMessageAcknowledgement_numberOfBytesTransferred_xer_ = { {"numberOfBytesTransferred>\n", "numberOfBytesTransferred>\n"}, {26, 26}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t ExtendedMessageEndOfMessageAcknowledgement_numberOfBytesTransferred_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t ExtendedMessageEndOfMessageAcknowledgement_numberOfBytesTransferred_descr_ = { "@IsobusCMMessageTypes.ExtendedMessageEndOfMessageAcknowledgement.numberOfBytesTransferred", &INTEGER_ber_, &ETP__MSG__SIZE_raw_, &INTEGER_text_, &ExtendedMessageEndOfMessageAcknowledgement_numberOfBytesTransferred_xer_, &INTEGER_json_, &ExtendedMessageEndOfMessageAcknowledgement_numberOfBytesTransferred_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const XERdescriptor_t ExtendedMessageEndOfMessageAcknowledgement_pgnOfExtendedPacketedMessage_xer_ = { {"pgnOfExtendedPacketedMessage>\n", "pgnOfExtendedPacketedMessage>\n"}, {30, 30}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t ExtendedMessageEndOfMessageAcknowledgement_pgnOfExtendedPacketedMessage_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t ExtendedMessageEndOfMessageAcknowledgement_pgnOfExtendedPacketedMessage_descr_ = { "@IsobusCMMessageTypes.ExtendedMessageEndOfMessageAcknowledgement.pgnOfExtendedPacketedMessage", &INTEGER_ber_, &IsobusMessageTypes::INT24nb_raw_, &INTEGER_text_, &ExtendedMessageEndOfMessageAcknowledgement_pgnOfExtendedPacketedMessage_xer_, &INTEGER_json_, &ExtendedMessageEndOfMessageAcknowledgement_pgnOfExtendedPacketedMessage_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t ExtendedMessageEndOfMessageAcknowledgement_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN,NULL,false}; |
| // No XER for ExtendedMessageEndOfMessageAcknowledgement |
| const TTCN_Typedescriptor_t ExtendedMessageEndOfMessageAcknowledgement_descr_ = { "@IsobusCMMessageTypes.ExtendedMessageEndOfMessageAcknowledgement", NULL, &ExtendedMessageEndOfMessageAcknowledgement_raw_, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t e__ETP__ConnectionAbort__AbortReason_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,8,0,0,8,0,NULL,-1,CharCoding::UNKNOWN,NULL,false}; |
| // No XER for e__ETP__ConnectionAbort__AbortReason |
| const TTCN_Typedescriptor_t e__ETP__ConnectionAbort__AbortReason_descr_ = { "@IsobusCMMessageTypes.e_ETP_ConnectionAbort_AbortReason", NULL, &e__ETP__ConnectionAbort__AbortReason_raw_, NULL, NULL, &ENUMERATED_json_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t ExtendedMessageConnectionAbort_ctrl_raw_ = {8,SG_NO,ORDER_LSB,ORDER_MSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN,NULL,false}; |
| const XERdescriptor_t ExtendedMessageConnectionAbort_ctrl_xer_ = { {"ctrl>\n", "ctrl>\n"}, {6, 6}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int ExtendedMessageConnectionAbort_ctrl_oer_ext_arr_[0] = {}; |
| const int ExtendedMessageConnectionAbort_ctrl_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t ExtendedMessageConnectionAbort_ctrl_oer_ = { -1, TRUE, 1, FALSE, 0, 0, ExtendedMessageConnectionAbort_ctrl_oer_ext_arr_, 0, ExtendedMessageConnectionAbort_ctrl_oer_p_}; |
| const TTCN_Typedescriptor_t ExtendedMessageConnectionAbort_ctrl_descr_ = { "@IsobusCMMessageTypes.ExtendedMessageConnectionAbort.ctrl", &OCTETSTRING_ber_, &ExtendedMessageConnectionAbort_ctrl_raw_, &OCTETSTRING_text_, &ExtendedMessageConnectionAbort_ctrl_xer_, &OCTETSTRING_json_, &ExtendedMessageConnectionAbort_ctrl_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t ExtendedMessageConnectionAbort_reserved3_raw_ = {8,SG_NO,ORDER_LSB,ORDER_MSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN,NULL,false}; |
| const XERdescriptor_t ExtendedMessageConnectionAbort_reserved3_xer_ = { {"reserved3>\n", "reserved3>\n"}, {11, 11}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int ExtendedMessageConnectionAbort_reserved3_oer_ext_arr_[0] = {}; |
| const int ExtendedMessageConnectionAbort_reserved3_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t ExtendedMessageConnectionAbort_reserved3_oer_ = { -1, TRUE, 1, FALSE, 0, 0, ExtendedMessageConnectionAbort_reserved3_oer_ext_arr_, 0, ExtendedMessageConnectionAbort_reserved3_oer_p_}; |
| const TTCN_Typedescriptor_t ExtendedMessageConnectionAbort_reserved3_descr_ = { "@IsobusCMMessageTypes.ExtendedMessageConnectionAbort.reserved3", &OCTETSTRING_ber_, &ExtendedMessageConnectionAbort_reserved3_raw_, &OCTETSTRING_text_, &ExtendedMessageConnectionAbort_reserved3_xer_, &OCTETSTRING_json_, &ExtendedMessageConnectionAbort_reserved3_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t ExtendedMessageConnectionAbort_reserved4_raw_ = {8,SG_NO,ORDER_LSB,ORDER_MSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN,NULL,false}; |
| const XERdescriptor_t ExtendedMessageConnectionAbort_reserved4_xer_ = { {"reserved4>\n", "reserved4>\n"}, {11, 11}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int ExtendedMessageConnectionAbort_reserved4_oer_ext_arr_[0] = {}; |
| const int ExtendedMessageConnectionAbort_reserved4_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t ExtendedMessageConnectionAbort_reserved4_oer_ = { -1, TRUE, 1, FALSE, 0, 0, ExtendedMessageConnectionAbort_reserved4_oer_ext_arr_, 0, ExtendedMessageConnectionAbort_reserved4_oer_p_}; |
| const TTCN_Typedescriptor_t ExtendedMessageConnectionAbort_reserved4_descr_ = { "@IsobusCMMessageTypes.ExtendedMessageConnectionAbort.reserved4", &OCTETSTRING_ber_, &ExtendedMessageConnectionAbort_reserved4_raw_, &OCTETSTRING_text_, &ExtendedMessageConnectionAbort_reserved4_xer_, &OCTETSTRING_json_, &ExtendedMessageConnectionAbort_reserved4_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t ExtendedMessageConnectionAbort_reserved5_raw_ = {8,SG_NO,ORDER_LSB,ORDER_MSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN,NULL,false}; |
| const XERdescriptor_t ExtendedMessageConnectionAbort_reserved5_xer_ = { {"reserved5>\n", "reserved5>\n"}, {11, 11}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int ExtendedMessageConnectionAbort_reserved5_oer_ext_arr_[0] = {}; |
| const int ExtendedMessageConnectionAbort_reserved5_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t ExtendedMessageConnectionAbort_reserved5_oer_ = { -1, TRUE, 1, FALSE, 0, 0, ExtendedMessageConnectionAbort_reserved5_oer_ext_arr_, 0, ExtendedMessageConnectionAbort_reserved5_oer_p_}; |
| const TTCN_Typedescriptor_t ExtendedMessageConnectionAbort_reserved5_descr_ = { "@IsobusCMMessageTypes.ExtendedMessageConnectionAbort.reserved5", &OCTETSTRING_ber_, &ExtendedMessageConnectionAbort_reserved5_raw_, &OCTETSTRING_text_, &ExtendedMessageConnectionAbort_reserved5_xer_, &OCTETSTRING_json_, &ExtendedMessageConnectionAbort_reserved5_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const XERdescriptor_t ExtendedMessageConnectionAbort_pgnOfExtendedPacketedMessage_xer_ = { {"pgnOfExtendedPacketedMessage>\n", "pgnOfExtendedPacketedMessage>\n"}, {30, 30}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t ExtendedMessageConnectionAbort_pgnOfExtendedPacketedMessage_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t ExtendedMessageConnectionAbort_pgnOfExtendedPacketedMessage_descr_ = { "@IsobusCMMessageTypes.ExtendedMessageConnectionAbort.pgnOfExtendedPacketedMessage", &INTEGER_ber_, &IsobusMessageTypes::INT24nb_raw_, &INTEGER_text_, &ExtendedMessageConnectionAbort_pgnOfExtendedPacketedMessage_xer_, &INTEGER_json_, &ExtendedMessageConnectionAbort_pgnOfExtendedPacketedMessage_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t ExtendedMessageConnectionAbort_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN,NULL,false}; |
| // No XER for ExtendedMessageConnectionAbort |
| const TTCN_Typedescriptor_t ExtendedMessageConnectionAbort_descr_ = { "@IsobusCMMessageTypes.ExtendedMessageConnectionAbort", NULL, &ExtendedMessageConnectionAbort_raw_, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t ETP__CM_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN,NULL,false}; |
| // No XER for ETP__CM |
| const TTCN_Typedescriptor_t ETP__CM_descr_ = { "@IsobusCMMessageTypes.ETP_CM", NULL, &ETP__CM_raw_, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const XERdescriptor_t TP__DT_seq__no_xer_ = { {"seq_no>\n", "seq_no>\n"}, {8, 8}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t TP__DT_seq__no_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t TP__DT_seq__no_descr_ = { "@IsobusCMMessageTypes.TP_DT.seq_no", &INTEGER_ber_, &SEQ__NO_raw_, &INTEGER_text_, &TP__DT_seq__no_xer_, &INTEGER_json_, &TP__DT_seq__no_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const XERdescriptor_t TP__DT_data_xer_ = { {"data>\n", "data>\n"}, {6, 6}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int TP__DT_data_oer_ext_arr_[0] = {}; |
| const int TP__DT_data_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t TP__DT_data_oer_ = { -1, TRUE, 7, FALSE, 0, 0, TP__DT_data_oer_ext_arr_, 0, TP__DT_data_oer_p_}; |
| const TTCN_Typedescriptor_t TP__DT_data_descr_ = { "@IsobusCMMessageTypes.TP_DT.data", &OCTETSTRING_ber_, &General__Types::OCT7_raw_, &OCTETSTRING_text_, &TP__DT_data_xer_, &OCTETSTRING_json_, &TP__DT_data_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t TP__DT_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN,NULL,false}; |
| // No XER for TP__DT |
| const TTCN_Typedescriptor_t TP__DT_descr_ = { "@IsobusCMMessageTypes.TP_DT", NULL, &TP__DT_raw_, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const XERdescriptor_t ETP__DT_seq__no_xer_ = { {"seq_no>\n", "seq_no>\n"}, {8, 8}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t ETP__DT_seq__no_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t ETP__DT_seq__no_descr_ = { "@IsobusCMMessageTypes.ETP_DT.seq_no", &INTEGER_ber_, &SEQ__NO_raw_, &INTEGER_text_, &ETP__DT_seq__no_xer_, &INTEGER_json_, &ETP__DT_seq__no_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const XERdescriptor_t ETP__DT_data_xer_ = { {"data>\n", "data>\n"}, {6, 6}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int ETP__DT_data_oer_ext_arr_[0] = {}; |
| const int ETP__DT_data_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t ETP__DT_data_oer_ = { -1, TRUE, 7, FALSE, 0, 0, ETP__DT_data_oer_ext_arr_, 0, ETP__DT_data_oer_p_}; |
| const TTCN_Typedescriptor_t ETP__DT_data_descr_ = { "@IsobusCMMessageTypes.ETP_DT.data", &OCTETSTRING_ber_, &General__Types::OCT7_raw_, &OCTETSTRING_text_, &ETP__DT_data_xer_, &OCTETSTRING_json_, &ETP__DT_data_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t ETP__DT_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN,NULL,false}; |
| // No XER for ETP__DT |
| const TTCN_Typedescriptor_t ETP__DT_descr_ = { "@IsobusCMMessageTypes.ETP_DT", NULL, &ETP__DT_raw_, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| TTCN_Module module_object("IsobusCMMessageTypes", __DATE__, __TIME__, module_checksum, pre_init_module, NULL, 0U, 4294967295U, 4294967295U, 4294967295U, NULL, 0LU, 0, post_init_module, NULL, NULL, NULL, NULL, NULL, NULL, NULL); |
| |
| static const RuntimeVersionChecker ver_checker( current_runtime_version.requires_major_version_6, |
| current_runtime_version.requires_minor_version_6, |
| current_runtime_version.requires_patch_level_0, current_runtime_version.requires_runtime_1); |
| |
| /* Member functions of C++ classes */ |
| |
| RequestToSend::RequestToSend() |
| { |
| } |
| |
| RequestToSend::RequestToSend(const OCTETSTRING& par_ctrl, |
| const INTEGER& par_msgSizeInBytes, |
| const INTEGER& par_totalNumberOfPackets, |
| const INTEGER& par_maxNoOfPacketsInResponseToCTS, |
| const INTEGER& par_pgnOfMultiPacketMessage) |
| : field_ctrl(par_ctrl), |
| field_msgSizeInBytes(par_msgSizeInBytes), |
| field_totalNumberOfPackets(par_totalNumberOfPackets), |
| field_maxNoOfPacketsInResponseToCTS(par_maxNoOfPacketsInResponseToCTS), |
| field_pgnOfMultiPacketMessage(par_pgnOfMultiPacketMessage) |
| { |
| } |
| |
| RequestToSend::RequestToSend(const RequestToSend& other_value) |
| { |
| if(!other_value.is_bound()) TTCN_error("Copying an unbound value of type @IsobusCMMessageTypes.RequestToSend."); |
| if (other_value.ctrl().is_bound()) field_ctrl = other_value.ctrl(); |
| else field_ctrl.clean_up(); |
| if (other_value.msgSizeInBytes().is_bound()) field_msgSizeInBytes = other_value.msgSizeInBytes(); |
| else field_msgSizeInBytes.clean_up(); |
| if (other_value.totalNumberOfPackets().is_bound()) field_totalNumberOfPackets = other_value.totalNumberOfPackets(); |
| else field_totalNumberOfPackets.clean_up(); |
| if (other_value.maxNoOfPacketsInResponseToCTS().is_bound()) field_maxNoOfPacketsInResponseToCTS = other_value.maxNoOfPacketsInResponseToCTS(); |
| else field_maxNoOfPacketsInResponseToCTS.clean_up(); |
| if (other_value.pgnOfMultiPacketMessage().is_bound()) field_pgnOfMultiPacketMessage = other_value.pgnOfMultiPacketMessage(); |
| else field_pgnOfMultiPacketMessage.clean_up(); |
| } |
| |
| void RequestToSend::clean_up() |
| { |
| field_ctrl.clean_up(); |
| field_msgSizeInBytes.clean_up(); |
| field_totalNumberOfPackets.clean_up(); |
| field_maxNoOfPacketsInResponseToCTS.clean_up(); |
| field_pgnOfMultiPacketMessage.clean_up(); |
| } |
| |
| const TTCN_Typedescriptor_t* RequestToSend::get_descriptor() const { return &RequestToSend_descr_; } |
| RequestToSend& RequestToSend::operator=(const RequestToSend& other_value) |
| { |
| if (this != &other_value) { |
| if(!other_value.is_bound()) TTCN_error("Assignment of an unbound value of type @IsobusCMMessageTypes.RequestToSend."); |
| if (other_value.ctrl().is_bound()) field_ctrl = other_value.ctrl(); |
| else field_ctrl.clean_up(); |
| if (other_value.msgSizeInBytes().is_bound()) field_msgSizeInBytes = other_value.msgSizeInBytes(); |
| else field_msgSizeInBytes.clean_up(); |
| if (other_value.totalNumberOfPackets().is_bound()) field_totalNumberOfPackets = other_value.totalNumberOfPackets(); |
| else field_totalNumberOfPackets.clean_up(); |
| if (other_value.maxNoOfPacketsInResponseToCTS().is_bound()) field_maxNoOfPacketsInResponseToCTS = other_value.maxNoOfPacketsInResponseToCTS(); |
| else field_maxNoOfPacketsInResponseToCTS.clean_up(); |
| if (other_value.pgnOfMultiPacketMessage().is_bound()) field_pgnOfMultiPacketMessage = other_value.pgnOfMultiPacketMessage(); |
| else field_pgnOfMultiPacketMessage.clean_up(); |
| } |
| return *this; |
| } |
| |
| boolean RequestToSend::operator==(const RequestToSend& other_value) const |
| { |
| return field_ctrl==other_value.field_ctrl |
| && field_msgSizeInBytes==other_value.field_msgSizeInBytes |
| && field_totalNumberOfPackets==other_value.field_totalNumberOfPackets |
| && field_maxNoOfPacketsInResponseToCTS==other_value.field_maxNoOfPacketsInResponseToCTS |
| && field_pgnOfMultiPacketMessage==other_value.field_pgnOfMultiPacketMessage; |
| } |
| |
| boolean RequestToSend::is_bound() const |
| { |
| return (field_ctrl.is_bound()) |
| || (field_msgSizeInBytes.is_bound()) |
| || (field_totalNumberOfPackets.is_bound()) |
| || (field_maxNoOfPacketsInResponseToCTS.is_bound()) |
| || (field_pgnOfMultiPacketMessage.is_bound()); |
| } |
| boolean RequestToSend::is_value() const |
| { |
| return field_ctrl.is_value() |
| && field_msgSizeInBytes.is_value() |
| && field_totalNumberOfPackets.is_value() |
| && field_maxNoOfPacketsInResponseToCTS.is_value() |
| && field_pgnOfMultiPacketMessage.is_value(); |
| } |
| void RequestToSend::log() const |
| { |
| if (!is_bound()) { |
| TTCN_Logger::log_event_unbound(); |
| return; |
| } |
| TTCN_Logger::log_event_str("{ ctrl := "); |
| field_ctrl.log(); |
| TTCN_Logger::log_event_str(", msgSizeInBytes := "); |
| field_msgSizeInBytes.log(); |
| TTCN_Logger::log_event_str(", totalNumberOfPackets := "); |
| field_totalNumberOfPackets.log(); |
| TTCN_Logger::log_event_str(", maxNoOfPacketsInResponseToCTS := "); |
| field_maxNoOfPacketsInResponseToCTS.log(); |
| TTCN_Logger::log_event_str(", pgnOfMultiPacketMessage := "); |
| field_pgnOfMultiPacketMessage.log(); |
| TTCN_Logger::log_event_str(" }"); |
| } |
| |
| void RequestToSend::set_param(Module_Param& param) |
| { |
| param.basic_check(Module_Param::BC_VALUE, "record value"); |
| switch (param.get_type()) { |
| case Module_Param::MP_Value_List: |
| if (5<param.get_size()) { |
| param.error("record value of type @IsobusCMMessageTypes.RequestToSend has 5 fields but list value has %d fields", (int)param.get_size()); |
| } |
| if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) ctrl().set_param(*param.get_elem(0)); |
| if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) msgSizeInBytes().set_param(*param.get_elem(1)); |
| if (param.get_size()>2 && param.get_elem(2)->get_type()!=Module_Param::MP_NotUsed) totalNumberOfPackets().set_param(*param.get_elem(2)); |
| if (param.get_size()>3 && param.get_elem(3)->get_type()!=Module_Param::MP_NotUsed) maxNoOfPacketsInResponseToCTS().set_param(*param.get_elem(3)); |
| if (param.get_size()>4 && param.get_elem(4)->get_type()!=Module_Param::MP_NotUsed) pgnOfMultiPacketMessage().set_param(*param.get_elem(4)); |
| break; |
| case Module_Param::MP_Assignment_List: { |
| Vector<bool> value_used(param.get_size()); |
| value_used.resize(param.get_size(), FALSE); |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "ctrl")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| ctrl().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "msgSizeInBytes")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| msgSizeInBytes().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "totalNumberOfPackets")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| totalNumberOfPackets().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "maxNoOfPacketsInResponseToCTS")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| maxNoOfPacketsInResponseToCTS().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "pgnOfMultiPacketMessage")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| pgnOfMultiPacketMessage().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| curr_param->error("Non existent field name in type @IsobusCMMessageTypes.RequestToSend: %s", curr_param->get_id()->get_name()); |
| break; |
| } |
| } break; |
| default: |
| param.type_error("record value", "@IsobusCMMessageTypes.RequestToSend"); |
| } |
| } |
| |
| void RequestToSend::set_implicit_omit() |
| { |
| if (ctrl().is_bound()) ctrl().set_implicit_omit(); |
| if (msgSizeInBytes().is_bound()) msgSizeInBytes().set_implicit_omit(); |
| if (totalNumberOfPackets().is_bound()) totalNumberOfPackets().set_implicit_omit(); |
| if (maxNoOfPacketsInResponseToCTS().is_bound()) maxNoOfPacketsInResponseToCTS().set_implicit_omit(); |
| if (pgnOfMultiPacketMessage().is_bound()) pgnOfMultiPacketMessage().set_implicit_omit(); |
| } |
| |
| void RequestToSend::encode_text(Text_Buf& text_buf) const |
| { |
| field_ctrl.encode_text(text_buf); |
| field_msgSizeInBytes.encode_text(text_buf); |
| field_totalNumberOfPackets.encode_text(text_buf); |
| field_maxNoOfPacketsInResponseToCTS.encode_text(text_buf); |
| field_pgnOfMultiPacketMessage.encode_text(text_buf); |
| } |
| |
| void RequestToSend::decode_text(Text_Buf& text_buf) |
| { |
| field_ctrl.decode_text(text_buf); |
| field_msgSizeInBytes.decode_text(text_buf); |
| field_totalNumberOfPackets.decode_text(text_buf); |
| field_maxNoOfPacketsInResponseToCTS.decode_text(text_buf); |
| field_pgnOfMultiPacketMessage.decode_text(text_buf); |
| } |
| |
| void RequestToSend::encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, TTCN_EncDec::coding_t p_coding, ...) const |
| { |
| va_list pvar; |
| va_start(pvar, p_coding); |
| switch(p_coding) { |
| case TTCN_EncDec::CT_BER: { |
| TTCN_EncDec_ErrorContext ec("While BER-encoding type '%s': ", p_td.name); |
| unsigned BER_coding=va_arg(pvar, unsigned); |
| BER_encode_chk_coding(BER_coding); |
| ASN_BER_TLV_t *tlv=BER_encode_TLV(p_td, BER_coding); |
| tlv->put_in_buffer(p_buf); |
| ASN_BER_TLV_t::destruct(tlv); |
| break;} |
| case TTCN_EncDec::CT_RAW: { |
| TTCN_EncDec_ErrorContext ec("While RAW-encoding type '%s': ", p_td.name); |
| if(!p_td.raw) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No RAW descriptor available for type '%s'.", p_td.name); |
| RAW_enc_tr_pos rp; |
| rp.level=0; |
| rp.pos=NULL; |
| RAW_enc_tree root(FALSE, NULL, &rp, 1, p_td.raw); |
| RAW_encode(p_td, root); |
| root.put_to_buf(p_buf); |
| break;} |
| case TTCN_EncDec::CT_TEXT: { |
| TTCN_EncDec_ErrorContext ec("While TEXT-encoding type '%s': ", p_td.name); |
| if(!p_td.text) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No TEXT descriptor available for type '%s'.", p_td.name); |
| TEXT_encode(p_td,p_buf); |
| break;} |
| case TTCN_EncDec::CT_XER: { |
| TTCN_EncDec_ErrorContext ec("While XER-encoding type '%s': ", p_td.name); |
| unsigned XER_coding=va_arg(pvar, unsigned); |
| XER_encode_chk_coding(XER_coding, p_td); |
| XER_encode(*(p_td.xer),p_buf, XER_coding, 0, 0, 0); |
| p_buf.put_c('\n'); |
| break;} |
| case TTCN_EncDec::CT_JSON: { |
| TTCN_EncDec_ErrorContext ec("While JSON-encoding type '%s': ", p_td.name); |
| if(!p_td.json) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No JSON descriptor available for type '%s'.", p_td.name); |
| JSON_Tokenizer tok(va_arg(pvar, int) != 0); |
| JSON_encode(p_td, tok); |
| p_buf.put_s(tok.get_buffer_length(), (const unsigned char*)tok.get_buffer()); |
| break;} |
| case TTCN_EncDec::CT_OER: { |
| TTCN_EncDec_ErrorContext ec("While OER-encoding type '%s': ", p_td.name); |
| if(!p_td.oer) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No OER descriptor available for type '%s'.", p_td.name); |
| OER_encode(p_td, p_buf); |
| break;} |
| default: |
| TTCN_error("Unknown coding method requested to encode type '%s'", p_td.name); |
| } |
| va_end(pvar); |
| } |
| |
| void RequestToSend::decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, TTCN_EncDec::coding_t p_coding, ...) |
| { |
| va_list pvar; |
| va_start(pvar, p_coding); |
| switch(p_coding) { |
| case TTCN_EncDec::CT_BER: { |
| TTCN_EncDec_ErrorContext ec("While BER-decoding type '%s': ", p_td.name); |
| unsigned L_form=va_arg(pvar, unsigned); |
| ASN_BER_TLV_t tlv; |
| BER_decode_str2TLV(p_buf, tlv, L_form); |
| BER_decode_TLV(p_td, tlv, L_form); |
| if(tlv.isComplete) p_buf.increase_pos(tlv.get_len()); |
| break;} |
| case TTCN_EncDec::CT_RAW: { |
| TTCN_EncDec_ErrorContext ec("While RAW-decoding type '%s': ", p_td.name); |
| if(!p_td.raw) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No RAW descriptor available for type '%s'.", p_td.name); |
| raw_order_t r_order; |
| switch(p_td.raw->top_bit_order) { |
| case TOP_BIT_LEFT: |
| r_order=ORDER_LSB; |
| break; |
| case TOP_BIT_RIGHT: |
| default: |
| r_order=ORDER_MSB; |
| } |
| int rawr = RAW_decode(p_td, p_buf, p_buf.get_len()*8, r_order); |
| if(rawr<0) switch (-rawr) { |
| case TTCN_EncDec::ET_INCOMPL_MSG: |
| case TTCN_EncDec::ET_LEN_ERR: |
| ec.error((TTCN_EncDec::error_type_t)-rawr, "Can not decode type '%s', because incomplete message was received", p_td.name); |
| break; |
| case 1: |
| default: |
| ec.error(TTCN_EncDec::ET_INVAL_MSG, "Can not decode type '%s', because invalid message was received", p_td.name); |
| break; |
| } |
| break;} |
| case TTCN_EncDec::CT_TEXT: { |
| Limit_Token_List limit; |
| TTCN_EncDec_ErrorContext ec("While TEXT-decoding type '%s': ", p_td.name); |
| if(!p_td.text) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No TEXT descriptor available for type '%s'.", p_td.name); |
| const unsigned char *b_data=p_buf.get_data(); |
| if(b_data[p_buf.get_len()-1]!='\0'){ |
| p_buf.set_pos(p_buf.get_len()); |
| p_buf.put_zero(8,ORDER_LSB); |
| p_buf.rewind(); |
| } |
| if(TEXT_decode(p_td,p_buf,limit)<0) |
| ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name); |
| break;} |
| case TTCN_EncDec::CT_XER: { |
| TTCN_EncDec_ErrorContext ec("While XER-decoding type '%s': ", p_td.name); |
| unsigned XER_coding=va_arg(pvar, unsigned); |
| XER_encode_chk_coding(XER_coding, p_td); |
| XmlReaderWrap reader(p_buf); |
| for (int rd_ok=reader.Read(); rd_ok==1; rd_ok=reader.Read()) { |
| if (reader.NodeType() == XML_READER_TYPE_ELEMENT) break; |
| } |
| XER_decode(*(p_td.xer), reader, XER_coding | XER_TOPLEVEL, XER_NONE, 0); |
| size_t bytes = reader.ByteConsumed(); |
| p_buf.set_pos(bytes); |
| break;} |
| case TTCN_EncDec::CT_JSON: { |
| TTCN_EncDec_ErrorContext ec("While JSON-decoding type '%s': ", p_td.name); |
| if(!p_td.json) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No JSON descriptor available for type '%s'.", p_td.name); |
| JSON_Tokenizer tok((const char*)p_buf.get_data(), p_buf.get_len()); |
| if(JSON_decode(p_td, tok, FALSE)<0) |
| ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name); |
| p_buf.set_pos(tok.get_buf_pos()); |
| break;} |
| case TTCN_EncDec::CT_OER: { |
| TTCN_EncDec_ErrorContext ec("While OER-decoding type '%s': ", p_td.name); |
| if(!p_td.oer) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No OER descriptor available for type '%s'.", p_td.name); |
| OER_struct p_oer; |
| OER_decode(p_td, p_buf, p_oer); |
| break;} |
| default: |
| TTCN_error("Unknown coding method requested to decode type '%s'", p_td.name); |
| } |
| va_end(pvar); |
| } |
| |
| int RequestToSend::RAW_decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int limit, raw_order_t top_bit_ord, boolean no_err, int, boolean, const RAW_Force_Omit* force_omit) |
| { (void)no_err; |
| int prepaddlength=p_buf.increase_pos_padd(p_td.raw->prepadding); |
| limit-=prepaddlength; |
| size_t last_decoded_pos = p_buf.get_pos_bit(); |
| int decoded_length = 0; |
| int decoded_field_length = 0; |
| raw_order_t local_top_order; |
| if(p_td.raw->top_bit_order==TOP_BIT_INHERITED)local_top_order=top_bit_ord; |
| else if(p_td.raw->top_bit_order==TOP_BIT_RIGHT)local_top_order=ORDER_MSB; |
| else local_top_order=ORDER_LSB; |
| RAW_Force_Omit field_0_force_omit(0, force_omit, RequestToSend_ctrl_descr_.raw->forceomit); |
| decoded_field_length = field_ctrl.RAW_decode(RequestToSend_ctrl_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_0_force_omit); |
| if (decoded_field_length < 0) return decoded_field_length; |
| decoded_length+=decoded_field_length; |
| limit-=decoded_field_length; |
| last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit()); |
| RAW_Force_Omit field_1_force_omit(1, force_omit, IsobusMessageTypes::INT2_descr_.raw->forceomit); |
| decoded_field_length = field_msgSizeInBytes.RAW_decode(IsobusMessageTypes::INT2_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_1_force_omit); |
| if (decoded_field_length < 0) return decoded_field_length; |
| decoded_length+=decoded_field_length; |
| limit-=decoded_field_length; |
| last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit()); |
| RAW_Force_Omit field_2_force_omit(2, force_omit, NUMBER__OF__PACKETS_descr_.raw->forceomit); |
| decoded_field_length = field_totalNumberOfPackets.RAW_decode(NUMBER__OF__PACKETS_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_2_force_omit); |
| if (decoded_field_length < 0) return decoded_field_length; |
| decoded_length+=decoded_field_length; |
| limit-=decoded_field_length; |
| last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit()); |
| RAW_Force_Omit field_3_force_omit(3, force_omit, General__Types::INT1_descr_.raw->forceomit); |
| decoded_field_length = field_maxNoOfPacketsInResponseToCTS.RAW_decode(General__Types::INT1_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_3_force_omit); |
| if (decoded_field_length < 0) return decoded_field_length; |
| decoded_length+=decoded_field_length; |
| limit-=decoded_field_length; |
| last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit()); |
| RAW_Force_Omit field_4_force_omit(4, force_omit, IsobusMessageTypes::PGN_descr_.raw->forceomit); |
| decoded_field_length = field_pgnOfMultiPacketMessage.RAW_decode(IsobusMessageTypes::PGN_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_4_force_omit); |
| if (decoded_field_length < 0) return decoded_field_length; |
| decoded_length+=decoded_field_length; |
| limit-=decoded_field_length; |
| last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit()); |
| p_buf.set_pos_bit(last_decoded_pos); |
| return decoded_length+prepaddlength+p_buf.increase_pos_padd(p_td.raw->padding); |
| } |
| |
| int RequestToSend::RAW_encode(const TTCN_Typedescriptor_t&, RAW_enc_tree& myleaf) const { |
| if (!is_bound()) TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_UNBOUND, "Encoding an unbound value."); |
| int encoded_length = 0; |
| myleaf.isleaf = FALSE; |
| myleaf.body.node.num_of_nodes = 5; |
| myleaf.body.node.nodes = init_nodes_of_enc_tree(5); |
| myleaf.body.node.nodes[0] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 0, RequestToSend_ctrl_descr_.raw); |
| myleaf.body.node.nodes[1] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 1, IsobusMessageTypes::INT2_descr_.raw); |
| myleaf.body.node.nodes[2] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 2, NUMBER__OF__PACKETS_descr_.raw); |
| myleaf.body.node.nodes[3] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 3, General__Types::INT1_descr_.raw); |
| myleaf.body.node.nodes[4] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 4, IsobusMessageTypes::PGN_descr_.raw); |
| encoded_length += field_ctrl.RAW_encode(RequestToSend_ctrl_descr_, *myleaf.body.node.nodes[0]); |
| encoded_length += field_msgSizeInBytes.RAW_encode(IsobusMessageTypes::INT2_descr_, *myleaf.body.node.nodes[1]); |
| encoded_length += field_totalNumberOfPackets.RAW_encode(NUMBER__OF__PACKETS_descr_, *myleaf.body.node.nodes[2]); |
| encoded_length += field_maxNoOfPacketsInResponseToCTS.RAW_encode(General__Types::INT1_descr_, *myleaf.body.node.nodes[3]); |
| encoded_length += field_pgnOfMultiPacketMessage.RAW_encode(IsobusMessageTypes::PGN_descr_, *myleaf.body.node.nodes[4]); |
| return myleaf.length = encoded_length; |
| } |
| |
| struct RequestToSend_template::single_value_struct { |
| OCTETSTRING_template field_ctrl; |
| INTEGER_template field_msgSizeInBytes; |
| INTEGER_template field_totalNumberOfPackets; |
| INTEGER_template field_maxNoOfPacketsInResponseToCTS; |
| INTEGER_template field_pgnOfMultiPacketMessage; |
| }; |
| |
| void RequestToSend_template::set_specific() |
| { |
| if (template_selection != SPECIFIC_VALUE) { |
| template_sel old_selection = template_selection; |
| clean_up(); |
| single_value = new single_value_struct; |
| set_selection(SPECIFIC_VALUE); |
| if (old_selection == ANY_VALUE || old_selection == ANY_OR_OMIT) { |
| single_value->field_ctrl = ANY_VALUE; |
| single_value->field_msgSizeInBytes = ANY_VALUE; |
| single_value->field_totalNumberOfPackets = ANY_VALUE; |
| single_value->field_maxNoOfPacketsInResponseToCTS = ANY_VALUE; |
| single_value->field_pgnOfMultiPacketMessage = ANY_VALUE; |
| } |
| } |
| } |
| |
| void RequestToSend_template::copy_value(const RequestToSend& other_value) |
| { |
| single_value = new single_value_struct; |
| if (other_value.ctrl().is_bound()) { |
| single_value->field_ctrl = other_value.ctrl(); |
| } else { |
| single_value->field_ctrl.clean_up(); |
| } |
| if (other_value.msgSizeInBytes().is_bound()) { |
| single_value->field_msgSizeInBytes = other_value.msgSizeInBytes(); |
| } else { |
| single_value->field_msgSizeInBytes.clean_up(); |
| } |
| if (other_value.totalNumberOfPackets().is_bound()) { |
| single_value->field_totalNumberOfPackets = other_value.totalNumberOfPackets(); |
| } else { |
| single_value->field_totalNumberOfPackets.clean_up(); |
| } |
| if (other_value.maxNoOfPacketsInResponseToCTS().is_bound()) { |
| single_value->field_maxNoOfPacketsInResponseToCTS = other_value.maxNoOfPacketsInResponseToCTS(); |
| } else { |
| single_value->field_maxNoOfPacketsInResponseToCTS.clean_up(); |
| } |
| if (other_value.pgnOfMultiPacketMessage().is_bound()) { |
| single_value->field_pgnOfMultiPacketMessage = other_value.pgnOfMultiPacketMessage(); |
| } else { |
| single_value->field_pgnOfMultiPacketMessage.clean_up(); |
| } |
| set_selection(SPECIFIC_VALUE); |
| } |
| |
| void RequestToSend_template::copy_template(const RequestToSend_template& other_value) |
| { |
| switch (other_value.template_selection) { |
| case SPECIFIC_VALUE: |
| single_value = new single_value_struct; |
| if (UNINITIALIZED_TEMPLATE != other_value.ctrl().get_selection()) { |
| single_value->field_ctrl = other_value.ctrl(); |
| } else { |
| single_value->field_ctrl.clean_up(); |
| } |
| if (UNINITIALIZED_TEMPLATE != other_value.msgSizeInBytes().get_selection()) { |
| single_value->field_msgSizeInBytes = other_value.msgSizeInBytes(); |
| } else { |
| single_value->field_msgSizeInBytes.clean_up(); |
| } |
| if (UNINITIALIZED_TEMPLATE != other_value.totalNumberOfPackets().get_selection()) { |
| single_value->field_totalNumberOfPackets = other_value.totalNumberOfPackets(); |
| } else { |
| single_value->field_totalNumberOfPackets.clean_up(); |
| } |
| if (UNINITIALIZED_TEMPLATE != other_value.maxNoOfPacketsInResponseToCTS().get_selection()) { |
| single_value->field_maxNoOfPacketsInResponseToCTS = other_value.maxNoOfPacketsInResponseToCTS(); |
| } else { |
| single_value->field_maxNoOfPacketsInResponseToCTS.clean_up(); |
| } |
| if (UNINITIALIZED_TEMPLATE != other_value.pgnOfMultiPacketMessage().get_selection()) { |
| single_value->field_pgnOfMultiPacketMessage = other_value.pgnOfMultiPacketMessage(); |
| } else { |
| single_value->field_pgnOfMultiPacketMessage.clean_up(); |
| } |
| case OMIT_VALUE: |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| break; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| value_list.n_values = other_value.value_list.n_values; |
| value_list.list_value = new RequestToSend_template[value_list.n_values]; |
| for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) |
| value_list.list_value[list_count].copy_template(other_value.value_list.list_value[list_count]); |
| break; |
| default: |
| TTCN_error("Copying an uninitialized/unsupported template of type @IsobusCMMessageTypes.RequestToSend."); |
| break; |
| } |
| set_selection(other_value); |
| } |
| |
| RequestToSend_template::RequestToSend_template() |
| { |
| } |
| |
| RequestToSend_template::RequestToSend_template(template_sel other_value) |
| : Base_Template(other_value) |
| { |
| check_single_selection(other_value); |
| } |
| |
| RequestToSend_template::RequestToSend_template(const RequestToSend& other_value) |
| { |
| copy_value(other_value); |
| } |
| |
| RequestToSend_template::RequestToSend_template(const OPTIONAL<RequestToSend>& other_value) |
| { |
| switch (other_value.get_selection()) { |
| case OPTIONAL_PRESENT: |
| copy_value((const RequestToSend&)other_value); |
| break; |
| case OPTIONAL_OMIT: |
| set_selection(OMIT_VALUE); |
| break; |
| default: |
| TTCN_error("Creating a template of type @IsobusCMMessageTypes.RequestToSend from an unbound optional field."); |
| } |
| } |
| |
| RequestToSend_template::RequestToSend_template(const RequestToSend_template& other_value) |
| : Base_Template() |
| { |
| copy_template(other_value); |
| } |
| |
| RequestToSend_template::~RequestToSend_template() |
| { |
| clean_up(); |
| } |
| |
| RequestToSend_template& RequestToSend_template::operator=(template_sel other_value) |
| { |
| check_single_selection(other_value); |
| clean_up(); |
| set_selection(other_value); |
| return *this; |
| } |
| |
| RequestToSend_template& RequestToSend_template::operator=(const RequestToSend& other_value) |
| { |
| clean_up(); |
| copy_value(other_value); |
| return *this; |
| } |
| |
| RequestToSend_template& RequestToSend_template::operator=(const OPTIONAL<RequestToSend>& other_value) |
| { |
| clean_up(); |
| switch (other_value.get_selection()) { |
| case OPTIONAL_PRESENT: |
| copy_value((const RequestToSend&)other_value); |
| break; |
| case OPTIONAL_OMIT: |
| set_selection(OMIT_VALUE); |
| break; |
| default: |
| TTCN_error("Assignment of an unbound optional field to a template of type @IsobusCMMessageTypes.RequestToSend."); |
| } |
| return *this; |
| } |
| |
| RequestToSend_template& RequestToSend_template::operator=(const RequestToSend_template& other_value) |
| { |
| if (&other_value != this) { |
| clean_up(); |
| copy_template(other_value); |
| } |
| return *this; |
| } |
| |
| boolean RequestToSend_template::match(const RequestToSend& other_value, boolean legacy) const |
| { |
| if (!other_value.is_bound()) return FALSE; |
| switch (template_selection) { |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| return TRUE; |
| case OMIT_VALUE: |
| return FALSE; |
| case SPECIFIC_VALUE: |
| if(!other_value.ctrl().is_bound()) return FALSE; |
| if(!single_value->field_ctrl.match(other_value.ctrl(), legacy))return FALSE; |
| if(!other_value.msgSizeInBytes().is_bound()) return FALSE; |
| if(!single_value->field_msgSizeInBytes.match(other_value.msgSizeInBytes(), legacy))return FALSE; |
| if(!other_value.totalNumberOfPackets().is_bound()) return FALSE; |
| if(!single_value->field_totalNumberOfPackets.match(other_value.totalNumberOfPackets(), legacy))return FALSE; |
| if(!other_value.maxNoOfPacketsInResponseToCTS().is_bound()) return FALSE; |
| if(!single_value->field_maxNoOfPacketsInResponseToCTS.match(other_value.maxNoOfPacketsInResponseToCTS(), legacy))return FALSE; |
| if(!other_value.pgnOfMultiPacketMessage().is_bound()) return FALSE; |
| if(!single_value->field_pgnOfMultiPacketMessage.match(other_value.pgnOfMultiPacketMessage(), legacy))return FALSE; |
| return TRUE; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) |
| if (value_list.list_value[list_count].match(other_value, legacy)) return template_selection == VALUE_LIST; |
| return template_selection == COMPLEMENTED_LIST; |
| default: |
| TTCN_error("Matching an uninitialized/unsupported template of type @IsobusCMMessageTypes.RequestToSend."); |
| } |
| return FALSE; |
| } |
| |
| boolean RequestToSend_template::is_bound() const |
| { |
| if (template_selection == UNINITIALIZED_TEMPLATE && !is_ifpresent) return FALSE; |
| if (template_selection != SPECIFIC_VALUE) return TRUE; |
| return single_value->field_ctrl.is_bound() |
| |
| ||single_value->field_msgSizeInBytes.is_bound() |
| |
| ||single_value->field_totalNumberOfPackets.is_bound() |
| |
| ||single_value->field_maxNoOfPacketsInResponseToCTS.is_bound() |
| |
| ||single_value->field_pgnOfMultiPacketMessage.is_bound() |
| ; |
| } |
| |
| boolean RequestToSend_template::is_value() const |
| { |
| if (template_selection != SPECIFIC_VALUE || is_ifpresent) return FALSE; |
| return single_value->field_ctrl.is_value() |
| &&single_value->field_msgSizeInBytes.is_value() |
| &&single_value->field_totalNumberOfPackets.is_value() |
| &&single_value->field_maxNoOfPacketsInResponseToCTS.is_value() |
| &&single_value->field_pgnOfMultiPacketMessage.is_value(); |
| } |
| |
| void RequestToSend_template::clean_up() |
| { |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| delete single_value; |
| break; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| delete [] value_list.list_value; |
| default: |
| break; |
| } |
| template_selection = UNINITIALIZED_TEMPLATE; |
| } |
| |
| RequestToSend RequestToSend_template::valueof() const |
| { |
| if (template_selection != SPECIFIC_VALUE || is_ifpresent) |
| TTCN_error("Performing a valueof or send operation on a non-specific template of type @IsobusCMMessageTypes.RequestToSend."); |
| RequestToSend ret_val; |
| if (single_value->field_ctrl.is_bound()) { |
| ret_val.ctrl() = single_value->field_ctrl.valueof(); |
| } |
| if (single_value->field_msgSizeInBytes.is_bound()) { |
| ret_val.msgSizeInBytes() = single_value->field_msgSizeInBytes.valueof(); |
| } |
| if (single_value->field_totalNumberOfPackets.is_bound()) { |
| ret_val.totalNumberOfPackets() = single_value->field_totalNumberOfPackets.valueof(); |
| } |
| if (single_value->field_maxNoOfPacketsInResponseToCTS.is_bound()) { |
| ret_val.maxNoOfPacketsInResponseToCTS() = single_value->field_maxNoOfPacketsInResponseToCTS.valueof(); |
| } |
| if (single_value->field_pgnOfMultiPacketMessage.is_bound()) { |
| ret_val.pgnOfMultiPacketMessage() = single_value->field_pgnOfMultiPacketMessage.valueof(); |
| } |
| return ret_val; |
| } |
| |
| void RequestToSend_template::set_type(template_sel template_type, unsigned int list_length) |
| { |
| if (template_type != VALUE_LIST && template_type != COMPLEMENTED_LIST) |
| TTCN_error("Setting an invalid list for a template of type @IsobusCMMessageTypes.RequestToSend."); |
| clean_up(); |
| set_selection(template_type); |
| value_list.n_values = list_length; |
| value_list.list_value = new RequestToSend_template[list_length]; |
| } |
| |
| RequestToSend_template& RequestToSend_template::list_item(unsigned int list_index) const |
| { |
| if (template_selection != VALUE_LIST && template_selection != COMPLEMENTED_LIST) |
| TTCN_error("Accessing a list element of a non-list template of type @IsobusCMMessageTypes.RequestToSend."); |
| if (list_index >= value_list.n_values) |
| TTCN_error("Index overflow in a value list template of type @IsobusCMMessageTypes.RequestToSend."); |
| return value_list.list_value[list_index]; |
| } |
| |
| OCTETSTRING_template& RequestToSend_template::ctrl() |
| { |
| set_specific(); |
| return single_value->field_ctrl; |
| } |
| |
| const OCTETSTRING_template& RequestToSend_template::ctrl() const |
| { |
| if (template_selection != SPECIFIC_VALUE) |
| TTCN_error("Accessing field ctrl of a non-specific template of type @IsobusCMMessageTypes.RequestToSend."); |
| return single_value->field_ctrl; |
| } |
| |
| INTEGER_template& RequestToSend_template::msgSizeInBytes() |
| { |
| set_specific(); |
| return single_value->field_msgSizeInBytes; |
| } |
| |
| const INTEGER_template& RequestToSend_template::msgSizeInBytes() const |
| { |
| if (template_selection != SPECIFIC_VALUE) |
| TTCN_error("Accessing field msgSizeInBytes of a non-specific template of type @IsobusCMMessageTypes.RequestToSend."); |
| return single_value->field_msgSizeInBytes; |
| } |
| |
| INTEGER_template& RequestToSend_template::totalNumberOfPackets() |
| { |
| set_specific(); |
| return single_value->field_totalNumberOfPackets; |
| } |
| |
| const INTEGER_template& RequestToSend_template::totalNumberOfPackets() const |
| { |
| if (template_selection != SPECIFIC_VALUE) |
| TTCN_error("Accessing field totalNumberOfPackets of a non-specific template of type @IsobusCMMessageTypes.RequestToSend."); |
| return single_value->field_totalNumberOfPackets; |
| } |
| |
| INTEGER_template& RequestToSend_template::maxNoOfPacketsInResponseToCTS() |
| { |
| set_specific(); |
| return single_value->field_maxNoOfPacketsInResponseToCTS; |
| } |
| |
| const INTEGER_template& RequestToSend_template::maxNoOfPacketsInResponseToCTS() const |
| { |
| if (template_selection != SPECIFIC_VALUE) |
| TTCN_error("Accessing field maxNoOfPacketsInResponseToCTS of a non-specific template of type @IsobusCMMessageTypes.RequestToSend."); |
| return single_value->field_maxNoOfPacketsInResponseToCTS; |
| } |
| |
| INTEGER_template& RequestToSend_template::pgnOfMultiPacketMessage() |
| { |
| set_specific(); |
| return single_value->field_pgnOfMultiPacketMessage; |
| } |
| |
| const INTEGER_template& RequestToSend_template::pgnOfMultiPacketMessage() const |
| { |
| if (template_selection != SPECIFIC_VALUE) |
| TTCN_error("Accessing field pgnOfMultiPacketMessage of a non-specific template of type @IsobusCMMessageTypes.RequestToSend."); |
| return single_value->field_pgnOfMultiPacketMessage; |
| } |
| |
| int RequestToSend_template::size_of() const |
| { |
| if (is_ifpresent) TTCN_error("Performing sizeof() operation on a template of type @IsobusCMMessageTypes.RequestToSend which has an ifpresent attribute."); |
| switch (template_selection) |
| { |
| case SPECIFIC_VALUE: |
| return 5; |
| case VALUE_LIST: |
| { |
| if (value_list.n_values<1) |
| TTCN_error("Internal error: Performing sizeof() operation on a template of type @IsobusCMMessageTypes.RequestToSend containing an empty list."); |
| int item_size = value_list.list_value[0].size_of(); |
| for (unsigned int l_idx = 1; l_idx < value_list.n_values; l_idx++) |
| { |
| if (value_list.list_value[l_idx].size_of()!=item_size) |
| TTCN_error("Performing sizeof() operation on a template of type @IsobusCMMessageTypes.RequestToSend containing a value list with different sizes."); |
| } |
| return item_size; |
| } |
| case OMIT_VALUE: |
| TTCN_error("Performing sizeof() operation on a template of type @IsobusCMMessageTypes.RequestToSend containing omit value."); |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| TTCN_error("Performing sizeof() operation on a template of type @IsobusCMMessageTypes.RequestToSend containing */? value."); |
| case COMPLEMENTED_LIST: |
| TTCN_error("Performing sizeof() operation on a template of type @IsobusCMMessageTypes.RequestToSend containing complemented list."); |
| default: |
| TTCN_error("Performing sizeof() operation on an uninitialized/unsupported template of type @IsobusCMMessageTypes.RequestToSend."); |
| } |
| return 0; |
| } |
| |
| void RequestToSend_template::log() const |
| { |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| TTCN_Logger::log_event_str("{ ctrl := "); |
| single_value->field_ctrl.log(); |
| TTCN_Logger::log_event_str(", msgSizeInBytes := "); |
| single_value->field_msgSizeInBytes.log(); |
| TTCN_Logger::log_event_str(", totalNumberOfPackets := "); |
| single_value->field_totalNumberOfPackets.log(); |
| TTCN_Logger::log_event_str(", maxNoOfPacketsInResponseToCTS := "); |
| single_value->field_maxNoOfPacketsInResponseToCTS.log(); |
| TTCN_Logger::log_event_str(", pgnOfMultiPacketMessage := "); |
| single_value->field_pgnOfMultiPacketMessage.log(); |
| TTCN_Logger::log_event_str(" }"); |
| break; |
| case COMPLEMENTED_LIST: |
| TTCN_Logger::log_event_str("complement"); |
| case VALUE_LIST: |
| TTCN_Logger::log_char('('); |
| for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) { |
| if (list_count > 0) TTCN_Logger::log_event_str(", "); |
| value_list.list_value[list_count].log(); |
| } |
| TTCN_Logger::log_char(')'); |
| break; |
| default: |
| log_generic(); |
| } |
| log_ifpresent(); |
| } |
| |
| void RequestToSend_template::log_match(const RequestToSend& match_value, boolean legacy) const |
| { |
| if(TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity()){ |
| if(match(match_value, legacy)){ |
| TTCN_Logger::print_logmatch_buffer(); |
| TTCN_Logger::log_event_str(" matched"); |
| } else{ |
| if (template_selection == SPECIFIC_VALUE) { |
| size_t previous_size = TTCN_Logger::get_logmatch_buffer_len(); |
| if(!single_value->field_ctrl.match(match_value.ctrl(), legacy)){ |
| TTCN_Logger::log_logmatch_info(".ctrl"); |
| single_value->field_ctrl.log_match(match_value.ctrl(), legacy); |
| TTCN_Logger::set_logmatch_buffer_len(previous_size); |
| } |
| if(!single_value->field_msgSizeInBytes.match(match_value.msgSizeInBytes(), legacy)){ |
| TTCN_Logger::log_logmatch_info(".msgSizeInBytes"); |
| single_value->field_msgSizeInBytes.log_match(match_value.msgSizeInBytes(), legacy); |
| TTCN_Logger::set_logmatch_buffer_len(previous_size); |
| } |
| if(!single_value->field_totalNumberOfPackets.match(match_value.totalNumberOfPackets(), legacy)){ |
| TTCN_Logger::log_logmatch_info(".totalNumberOfPackets"); |
| single_value->field_totalNumberOfPackets.log_match(match_value.totalNumberOfPackets(), legacy); |
| TTCN_Logger::set_logmatch_buffer_len(previous_size); |
| } |
| if(!single_value->field_maxNoOfPacketsInResponseToCTS.match(match_value.maxNoOfPacketsInResponseToCTS(), legacy)){ |
| TTCN_Logger::log_logmatch_info(".maxNoOfPacketsInResponseToCTS"); |
| single_value->field_maxNoOfPacketsInResponseToCTS.log_match(match_value.maxNoOfPacketsInResponseToCTS(), legacy); |
| TTCN_Logger::set_logmatch_buffer_len(previous_size); |
| } |
| if(!single_value->field_pgnOfMultiPacketMessage.match(match_value.pgnOfMultiPacketMessage(), legacy)){ |
| TTCN_Logger::log_logmatch_info(".pgnOfMultiPacketMessage"); |
| single_value->field_pgnOfMultiPacketMessage.log_match(match_value.pgnOfMultiPacketMessage(), legacy); |
| TTCN_Logger::set_logmatch_buffer_len(previous_size); |
| } |
| }else { |
| TTCN_Logger::print_logmatch_buffer(); |
| match_value.log(); |
| TTCN_Logger::log_event_str(" with "); |
| log(); |
| TTCN_Logger::log_event_str(" unmatched"); |
| } |
| } |
| return; |
| } |
| if (template_selection == SPECIFIC_VALUE) { |
| TTCN_Logger::log_event_str("{ ctrl := "); |
| single_value->field_ctrl.log_match(match_value.ctrl(), legacy); |
| TTCN_Logger::log_event_str(", msgSizeInBytes := "); |
| single_value->field_msgSizeInBytes.log_match(match_value.msgSizeInBytes(), legacy); |
| TTCN_Logger::log_event_str(", totalNumberOfPackets := "); |
| single_value->field_totalNumberOfPackets.log_match(match_value.totalNumberOfPackets(), legacy); |
| TTCN_Logger::log_event_str(", maxNoOfPacketsInResponseToCTS := "); |
| single_value->field_maxNoOfPacketsInResponseToCTS.log_match(match_value.maxNoOfPacketsInResponseToCTS(), legacy); |
| TTCN_Logger::log_event_str(", pgnOfMultiPacketMessage := "); |
| single_value->field_pgnOfMultiPacketMessage.log_match(match_value.pgnOfMultiPacketMessage(), legacy); |
| TTCN_Logger::log_event_str(" }"); |
| } else { |
| match_value.log(); |
| TTCN_Logger::log_event_str(" with "); |
| log(); |
| if (match(match_value, legacy)) TTCN_Logger::log_event_str(" matched"); |
| else TTCN_Logger::log_event_str(" unmatched"); |
| } |
| } |
| |
| void RequestToSend_template::encode_text(Text_Buf& text_buf) const |
| { |
| encode_text_base(text_buf); |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| single_value->field_ctrl.encode_text(text_buf); |
| single_value->field_msgSizeInBytes.encode_text(text_buf); |
| single_value->field_totalNumberOfPackets.encode_text(text_buf); |
| single_value->field_maxNoOfPacketsInResponseToCTS.encode_text(text_buf); |
| single_value->field_pgnOfMultiPacketMessage.encode_text(text_buf); |
| case OMIT_VALUE: |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| break; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| text_buf.push_int(value_list.n_values); |
| for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) |
| value_list.list_value[list_count].encode_text(text_buf); |
| break; |
| default: |
| TTCN_error("Text encoder: Encoding an uninitialized/unsupported template of type @IsobusCMMessageTypes.RequestToSend."); |
| } |
| } |
| |
| void RequestToSend_template::decode_text(Text_Buf& text_buf) |
| { |
| clean_up(); |
| decode_text_base(text_buf); |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| single_value = new single_value_struct; |
| single_value->field_ctrl.decode_text(text_buf); |
| single_value->field_msgSizeInBytes.decode_text(text_buf); |
| single_value->field_totalNumberOfPackets.decode_text(text_buf); |
| single_value->field_maxNoOfPacketsInResponseToCTS.decode_text(text_buf); |
| single_value->field_pgnOfMultiPacketMessage.decode_text(text_buf); |
| case OMIT_VALUE: |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| break; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| value_list.n_values = text_buf.pull_int().get_val(); |
| value_list.list_value = new RequestToSend_template[value_list.n_values]; |
| for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) |
| value_list.list_value[list_count].decode_text(text_buf); |
| break; |
| default: |
| TTCN_error("Text decoder: An unknown/unsupported selection was received in a template of type @IsobusCMMessageTypes.RequestToSend."); |
| } |
| } |
| |
| void RequestToSend_template::set_param(Module_Param& param) |
| { |
| param.basic_check(Module_Param::BC_TEMPLATE, "record template"); |
| switch (param.get_type()) { |
| case Module_Param::MP_Omit: |
| *this = OMIT_VALUE; |
| break; |
| case Module_Param::MP_Any: |
| *this = ANY_VALUE; |
| break; |
| case Module_Param::MP_AnyOrNone: |
| *this = ANY_OR_OMIT; |
| break; |
| case Module_Param::MP_List_Template: |
| case Module_Param::MP_ComplementList_Template: { |
| RequestToSend_template new_temp; |
| new_temp.set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : COMPLEMENTED_LIST, param.get_size()); |
| for (size_t p_i=0; p_i<param.get_size(); p_i++) { |
| new_temp.list_item(p_i).set_param(*param.get_elem(p_i)); |
| } |
| *this = new_temp; |
| break; } |
| case Module_Param::MP_Value_List: |
| if (5<param.get_size()) { |
| param.error("record template of type @IsobusCMMessageTypes.RequestToSend has 5 fields but list value has %d fields", (int)param.get_size()); |
| } |
| if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) ctrl().set_param(*param.get_elem(0)); |
| if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) msgSizeInBytes().set_param(*param.get_elem(1)); |
| if (param.get_size()>2 && param.get_elem(2)->get_type()!=Module_Param::MP_NotUsed) totalNumberOfPackets().set_param(*param.get_elem(2)); |
| if (param.get_size()>3 && param.get_elem(3)->get_type()!=Module_Param::MP_NotUsed) maxNoOfPacketsInResponseToCTS().set_param(*param.get_elem(3)); |
| if (param.get_size()>4 && param.get_elem(4)->get_type()!=Module_Param::MP_NotUsed) pgnOfMultiPacketMessage().set_param(*param.get_elem(4)); |
| break; |
| case Module_Param::MP_Assignment_List: { |
| Vector<bool> value_used(param.get_size()); |
| value_used.resize(param.get_size(), FALSE); |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "ctrl")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| ctrl().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "msgSizeInBytes")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| msgSizeInBytes().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "totalNumberOfPackets")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| totalNumberOfPackets().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "maxNoOfPacketsInResponseToCTS")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| maxNoOfPacketsInResponseToCTS().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "pgnOfMultiPacketMessage")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| pgnOfMultiPacketMessage().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| curr_param->error("Non existent field name in type @IsobusCMMessageTypes.RequestToSend: %s", curr_param->get_id()->get_name()); |
| break; |
| } |
| } break; |
| default: |
| param.type_error("record template", "@IsobusCMMessageTypes.RequestToSend"); |
| } |
| is_ifpresent = param.get_ifpresent(); |
| } |
| |
| void RequestToSend_template::check_restriction(template_res t_res, const char* t_name, boolean legacy) const |
| { |
| if (template_selection==UNINITIALIZED_TEMPLATE) return; |
| switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) { |
| case TR_OMIT: |
| if (template_selection==OMIT_VALUE) return; |
| case TR_VALUE: |
| if (template_selection!=SPECIFIC_VALUE || is_ifpresent) break; |
| single_value->field_ctrl.check_restriction(t_res, t_name ? t_name : "@IsobusCMMessageTypes.RequestToSend"); |
| single_value->field_msgSizeInBytes.check_restriction(t_res, t_name ? t_name : "@IsobusCMMessageTypes.RequestToSend"); |
| single_value->field_totalNumberOfPackets.check_restriction(t_res, t_name ? t_name : "@IsobusCMMessageTypes.RequestToSend"); |
| single_value->field_maxNoOfPacketsInResponseToCTS.check_restriction(t_res, t_name ? t_name : "@IsobusCMMessageTypes.RequestToSend"); |
| single_value->field_pgnOfMultiPacketMessage.check_restriction(t_res, t_name ? t_name : "@IsobusCMMessageTypes.RequestToSend"); |
| return; |
| case TR_PRESENT: |
| if (!match_omit(legacy)) return; |
| break; |
| default: |
| return; |
| } |
| TTCN_error("Restriction `%s' on template of type %s violated.", get_res_name(t_res), t_name ? t_name : "@IsobusCMMessageTypes.RequestToSend"); |
| } |
| |
| boolean RequestToSend_template::is_present(boolean legacy) const |
| { |
| if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE; |
| return !match_omit(legacy); |
| } |
| |
| boolean RequestToSend_template::match_omit(boolean legacy) const |
| { |
| if (is_ifpresent) return TRUE; |
| switch (template_selection) { |
| case OMIT_VALUE: |
| case ANY_OR_OMIT: |
| return TRUE; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| if (legacy) { |
| for (unsigned int l_idx=0; l_idx<value_list.n_values; l_idx++) |
| if (value_list.list_value[l_idx].match_omit()) |
| return template_selection==VALUE_LIST; |
| return template_selection==COMPLEMENTED_LIST; |
| } // else fall through |
| default: |
| return FALSE; |
| } |
| return FALSE; |
| } |
| |
| ClearToSend::ClearToSend() |
| { |
| } |
| |
| ClearToSend::ClearToSend(const OCTETSTRING& par_ctrl, |
| const INTEGER& par_totalNumberOfPackets, |
| const INTEGER& par_nextPacketNumber, |
| const OCTETSTRING& par_reserved4, |
| const OCTETSTRING& par_reserved5, |
| const INTEGER& par_pgnOfMultiPacketMessage) |
| : field_ctrl(par_ctrl), |
| field_totalNumberOfPackets(par_totalNumberOfPackets), |
| field_nextPacketNumber(par_nextPacketNumber), |
| field_reserved4(par_reserved4), |
| field_reserved5(par_reserved5), |
| field_pgnOfMultiPacketMessage(par_pgnOfMultiPacketMessage) |
| { |
| } |
| |
| ClearToSend::ClearToSend(const ClearToSend& other_value) |
| { |
| if(!other_value.is_bound()) TTCN_error("Copying an unbound value of type @IsobusCMMessageTypes.ClearToSend."); |
| if (other_value.ctrl().is_bound()) field_ctrl = other_value.ctrl(); |
| else field_ctrl.clean_up(); |
| if (other_value.totalNumberOfPackets().is_bound()) field_totalNumberOfPackets = other_value.totalNumberOfPackets(); |
| else field_totalNumberOfPackets.clean_up(); |
| if (other_value.nextPacketNumber().is_bound()) field_nextPacketNumber = other_value.nextPacketNumber(); |
| else field_nextPacketNumber.clean_up(); |
| if (other_value.reserved4().is_bound()) field_reserved4 = other_value.reserved4(); |
| else field_reserved4.clean_up(); |
| if (other_value.reserved5().is_bound()) field_reserved5 = other_value.reserved5(); |
| else field_reserved5.clean_up(); |
| if (other_value.pgnOfMultiPacketMessage().is_bound()) field_pgnOfMultiPacketMessage = other_value.pgnOfMultiPacketMessage(); |
| else field_pgnOfMultiPacketMessage.clean_up(); |
| } |
| |
| void ClearToSend::clean_up() |
| { |
| field_ctrl.clean_up(); |
| field_totalNumberOfPackets.clean_up(); |
| field_nextPacketNumber.clean_up(); |
| field_reserved4.clean_up(); |
| field_reserved5.clean_up(); |
| field_pgnOfMultiPacketMessage.clean_up(); |
| } |
| |
| const TTCN_Typedescriptor_t* ClearToSend::get_descriptor() const { return &ClearToSend_descr_; } |
| ClearToSend& ClearToSend::operator=(const ClearToSend& other_value) |
| { |
| if (this != &other_value) { |
| if(!other_value.is_bound()) TTCN_error("Assignment of an unbound value of type @IsobusCMMessageTypes.ClearToSend."); |
| if (other_value.ctrl().is_bound()) field_ctrl = other_value.ctrl(); |
| else field_ctrl.clean_up(); |
| if (other_value.totalNumberOfPackets().is_bound()) field_totalNumberOfPackets = other_value.totalNumberOfPackets(); |
| else field_totalNumberOfPackets.clean_up(); |
| if (other_value.nextPacketNumber().is_bound()) field_nextPacketNumber = other_value.nextPacketNumber(); |
| else field_nextPacketNumber.clean_up(); |
| if (other_value.reserved4().is_bound()) field_reserved4 = other_value.reserved4(); |
| else field_reserved4.clean_up(); |
| if (other_value.reserved5().is_bound()) field_reserved5 = other_value.reserved5(); |
| else field_reserved5.clean_up(); |
| if (other_value.pgnOfMultiPacketMessage().is_bound()) field_pgnOfMultiPacketMessage = other_value.pgnOfMultiPacketMessage(); |
| else field_pgnOfMultiPacketMessage.clean_up(); |
| } |
| return *this; |
| } |
| |
| boolean ClearToSend::operator==(const ClearToSend& other_value) const |
| { |
| return field_ctrl==other_value.field_ctrl |
| && field_totalNumberOfPackets==other_value.field_totalNumberOfPackets |
| && field_nextPacketNumber==other_value.field_nextPacketNumber |
| && field_reserved4==other_value.field_reserved4 |
| && field_reserved5==other_value.field_reserved5 |
| && field_pgnOfMultiPacketMessage==other_value.field_pgnOfMultiPacketMessage; |
| } |
| |
| boolean ClearToSend::is_bound() const |
| { |
| return (field_ctrl.is_bound()) |
| || (field_totalNumberOfPackets.is_bound()) |
| || (field_nextPacketNumber.is_bound()) |
| || (field_reserved4.is_bound()) |
| || (field_reserved5.is_bound()) |
| || (field_pgnOfMultiPacketMessage.is_bound()); |
| } |
| boolean ClearToSend::is_value() const |
| { |
| return field_ctrl.is_value() |
| && field_totalNumberOfPackets.is_value() |
| && field_nextPacketNumber.is_value() |
| && field_reserved4.is_value() |
| && field_reserved5.is_value() |
| && field_pgnOfMultiPacketMessage.is_value(); |
| } |
| void ClearToSend::log() const |
| { |
| if (!is_bound()) { |
| TTCN_Logger::log_event_unbound(); |
| return; |
| } |
| TTCN_Logger::log_event_str("{ ctrl := "); |
| field_ctrl.log(); |
| TTCN_Logger::log_event_str(", totalNumberOfPackets := "); |
| field_totalNumberOfPackets.log(); |
| TTCN_Logger::log_event_str(", nextPacketNumber := "); |
| field_nextPacketNumber.log(); |
| TTCN_Logger::log_event_str(", reserved4 := "); |
| field_reserved4.log(); |
| TTCN_Logger::log_event_str(", reserved5 := "); |
| field_reserved5.log(); |
| TTCN_Logger::log_event_str(", pgnOfMultiPacketMessage := "); |
| field_pgnOfMultiPacketMessage.log(); |
| TTCN_Logger::log_event_str(" }"); |
| } |
| |
| void ClearToSend::set_param(Module_Param& param) |
| { |
| param.basic_check(Module_Param::BC_VALUE, "record value"); |
| switch (param.get_type()) { |
| case Module_Param::MP_Value_List: |
| if (6<param.get_size()) { |
| param.error("record value of type @IsobusCMMessageTypes.ClearToSend has 6 fields but list value has %d fields", (int)param.get_size()); |
| } |
| if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) ctrl().set_param(*param.get_elem(0)); |
| if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) totalNumberOfPackets().set_param(*param.get_elem(1)); |
| if (param.get_size()>2 && param.get_elem(2)->get_type()!=Module_Param::MP_NotUsed) nextPacketNumber().set_param(*param.get_elem(2)); |
| if (param.get_size()>3 && param.get_elem(3)->get_type()!=Module_Param::MP_NotUsed) reserved4().set_param(*param.get_elem(3)); |
| if (param.get_size()>4 && param.get_elem(4)->get_type()!=Module_Param::MP_NotUsed) reserved5().set_param(*param.get_elem(4)); |
| if (param.get_size()>5 && param.get_elem(5)->get_type()!=Module_Param::MP_NotUsed) pgnOfMultiPacketMessage().set_param(*param.get_elem(5)); |
| break; |
| case Module_Param::MP_Assignment_List: { |
| Vector<bool> value_used(param.get_size()); |
| value_used.resize(param.get_size(), FALSE); |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "ctrl")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| ctrl().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "totalNumberOfPackets")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| totalNumberOfPackets().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "nextPacketNumber")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| nextPacketNumber().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "reserved4")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| reserved4().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "reserved5")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| reserved5().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "pgnOfMultiPacketMessage")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| pgnOfMultiPacketMessage().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| curr_param->error("Non existent field name in type @IsobusCMMessageTypes.ClearToSend: %s", curr_param->get_id()->get_name()); |
| break; |
| } |
| } break; |
| default: |
| param.type_error("record value", "@IsobusCMMessageTypes.ClearToSend"); |
| } |
| } |
| |
| void ClearToSend::set_implicit_omit() |
| { |
| if (ctrl().is_bound()) ctrl().set_implicit_omit(); |
| if (totalNumberOfPackets().is_bound()) totalNumberOfPackets().set_implicit_omit(); |
| if (nextPacketNumber().is_bound()) nextPacketNumber().set_implicit_omit(); |
| if (reserved4().is_bound()) reserved4().set_implicit_omit(); |
| if (reserved5().is_bound()) reserved5().set_implicit_omit(); |
| if (pgnOfMultiPacketMessage().is_bound()) pgnOfMultiPacketMessage().set_implicit_omit(); |
| } |
| |
| void ClearToSend::encode_text(Text_Buf& text_buf) const |
| { |
| field_ctrl.encode_text(text_buf); |
| field_totalNumberOfPackets.encode_text(text_buf); |
| field_nextPacketNumber.encode_text(text_buf); |
| field_reserved4.encode_text(text_buf); |
| field_reserved5.encode_text(text_buf); |
| field_pgnOfMultiPacketMessage.encode_text(text_buf); |
| } |
| |
| void ClearToSend::decode_text(Text_Buf& text_buf) |
| { |
| field_ctrl.decode_text(text_buf); |
| field_totalNumberOfPackets.decode_text(text_buf); |
| field_nextPacketNumber.decode_text(text_buf); |
| field_reserved4.decode_text(text_buf); |
| field_reserved5.decode_text(text_buf); |
| field_pgnOfMultiPacketMessage.decode_text(text_buf); |
| } |
| |
| void ClearToSend::encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, TTCN_EncDec::coding_t p_coding, ...) const |
| { |
| va_list pvar; |
| va_start(pvar, p_coding); |
| switch(p_coding) { |
| case TTCN_EncDec::CT_BER: { |
| TTCN_EncDec_ErrorContext ec("While BER-encoding type '%s': ", p_td.name); |
| unsigned BER_coding=va_arg(pvar, unsigned); |
| BER_encode_chk_coding(BER_coding); |
| ASN_BER_TLV_t *tlv=BER_encode_TLV(p_td, BER_coding); |
| tlv->put_in_buffer(p_buf); |
| ASN_BER_TLV_t::destruct(tlv); |
| break;} |
| case TTCN_EncDec::CT_RAW: { |
| TTCN_EncDec_ErrorContext ec("While RAW-encoding type '%s': ", p_td.name); |
| if(!p_td.raw) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No RAW descriptor available for type '%s'.", p_td.name); |
| RAW_enc_tr_pos rp; |
| rp.level=0; |
| rp.pos=NULL; |
| RAW_enc_tree root(FALSE, NULL, &rp, 1, p_td.raw); |
| RAW_encode(p_td, root); |
| root.put_to_buf(p_buf); |
| break;} |
| case TTCN_EncDec::CT_TEXT: { |
| TTCN_EncDec_ErrorContext ec("While TEXT-encoding type '%s': ", p_td.name); |
| if(!p_td.text) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No TEXT descriptor available for type '%s'.", p_td.name); |
| TEXT_encode(p_td,p_buf); |
| break;} |
| case TTCN_EncDec::CT_XER: { |
| TTCN_EncDec_ErrorContext ec("While XER-encoding type '%s': ", p_td.name); |
| unsigned XER_coding=va_arg(pvar, unsigned); |
| XER_encode_chk_coding(XER_coding, p_td); |
| XER_encode(*(p_td.xer),p_buf, XER_coding, 0, 0, 0); |
| p_buf.put_c('\n'); |
| break;} |
| case TTCN_EncDec::CT_JSON: { |
| TTCN_EncDec_ErrorContext ec("While JSON-encoding type '%s': ", p_td.name); |
| if(!p_td.json) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No JSON descriptor available for type '%s'.", p_td.name); |
| JSON_Tokenizer tok(va_arg(pvar, int) != 0); |
| JSON_encode(p_td, tok); |
| p_buf.put_s(tok.get_buffer_length(), (const unsigned char*)tok.get_buffer()); |
| break;} |
| case TTCN_EncDec::CT_OER: { |
| TTCN_EncDec_ErrorContext ec("While OER-encoding type '%s': ", p_td.name); |
| if(!p_td.oer) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No OER descriptor available for type '%s'.", p_td.name); |
| OER_encode(p_td, p_buf); |
| break;} |
| default: |
| TTCN_error("Unknown coding method requested to encode type '%s'", p_td.name); |
| } |
| va_end(pvar); |
| } |
| |
| void ClearToSend::decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, TTCN_EncDec::coding_t p_coding, ...) |
| { |
| va_list pvar; |
| va_start(pvar, p_coding); |
| switch(p_coding) { |
| case TTCN_EncDec::CT_BER: { |
| TTCN_EncDec_ErrorContext ec("While BER-decoding type '%s': ", p_td.name); |
| unsigned L_form=va_arg(pvar, unsigned); |
| ASN_BER_TLV_t tlv; |
| BER_decode_str2TLV(p_buf, tlv, L_form); |
| BER_decode_TLV(p_td, tlv, L_form); |
| if(tlv.isComplete) p_buf.increase_pos(tlv.get_len()); |
| break;} |
| case TTCN_EncDec::CT_RAW: { |
| TTCN_EncDec_ErrorContext ec("While RAW-decoding type '%s': ", p_td.name); |
| if(!p_td.raw) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No RAW descriptor available for type '%s'.", p_td.name); |
| raw_order_t r_order; |
| switch(p_td.raw->top_bit_order) { |
| case TOP_BIT_LEFT: |
| r_order=ORDER_LSB; |
| break; |
| case TOP_BIT_RIGHT: |
| default: |
| r_order=ORDER_MSB; |
| } |
| int rawr = RAW_decode(p_td, p_buf, p_buf.get_len()*8, r_order); |
| if(rawr<0) switch (-rawr) { |
| case TTCN_EncDec::ET_INCOMPL_MSG: |
| case TTCN_EncDec::ET_LEN_ERR: |
| ec.error((TTCN_EncDec::error_type_t)-rawr, "Can not decode type '%s', because incomplete message was received", p_td.name); |
| break; |
| case 1: |
| default: |
| ec.error(TTCN_EncDec::ET_INVAL_MSG, "Can not decode type '%s', because invalid message was received", p_td.name); |
| break; |
| } |
| break;} |
| case TTCN_EncDec::CT_TEXT: { |
| Limit_Token_List limit; |
| TTCN_EncDec_ErrorContext ec("While TEXT-decoding type '%s': ", p_td.name); |
| if(!p_td.text) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No TEXT descriptor available for type '%s'.", p_td.name); |
| const unsigned char *b_data=p_buf.get_data(); |
| if(b_data[p_buf.get_len()-1]!='\0'){ |
| p_buf.set_pos(p_buf.get_len()); |
| p_buf.put_zero(8,ORDER_LSB); |
| p_buf.rewind(); |
| } |
| if(TEXT_decode(p_td,p_buf,limit)<0) |
| ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name); |
| break;} |
| case TTCN_EncDec::CT_XER: { |
| TTCN_EncDec_ErrorContext ec("While XER-decoding type '%s': ", p_td.name); |
| unsigned XER_coding=va_arg(pvar, unsigned); |
| XER_encode_chk_coding(XER_coding, p_td); |
| XmlReaderWrap reader(p_buf); |
| for (int rd_ok=reader.Read(); rd_ok==1; rd_ok=reader.Read()) { |
| if (reader.NodeType() == XML_READER_TYPE_ELEMENT) break; |
| } |
| XER_decode(*(p_td.xer), reader, XER_coding | XER_TOPLEVEL, XER_NONE, 0); |
| size_t bytes = reader.ByteConsumed(); |
| p_buf.set_pos(bytes); |
| break;} |
| case TTCN_EncDec::CT_JSON: { |
| TTCN_EncDec_ErrorContext ec("While JSON-decoding type '%s': ", p_td.name); |
| if(!p_td.json) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No JSON descriptor available for type '%s'.", p_td.name); |
| JSON_Tokenizer tok((const char*)p_buf.get_data(), p_buf.get_len()); |
| if(JSON_decode(p_td, tok, FALSE)<0) |
| ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name); |
| p_buf.set_pos(tok.get_buf_pos()); |
| break;} |
| case TTCN_EncDec::CT_OER: { |
| TTCN_EncDec_ErrorContext ec("While OER-decoding type '%s': ", p_td.name); |
| if(!p_td.oer) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No OER descriptor available for type '%s'.", p_td.name); |
| OER_struct p_oer; |
| OER_decode(p_td, p_buf, p_oer); |
| break;} |
| default: |
| TTCN_error("Unknown coding method requested to decode type '%s'", p_td.name); |
| } |
| va_end(pvar); |
| } |
| |
| int ClearToSend::RAW_decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int limit, raw_order_t top_bit_ord, boolean no_err, int, boolean, const RAW_Force_Omit* force_omit) |
| { (void)no_err; |
| int prepaddlength=p_buf.increase_pos_padd(p_td.raw->prepadding); |
| limit-=prepaddlength; |
| size_t last_decoded_pos = p_buf.get_pos_bit(); |
| int decoded_length = 0; |
| int decoded_field_length = 0; |
| raw_order_t local_top_order; |
| if(p_td.raw->top_bit_order==TOP_BIT_INHERITED)local_top_order=top_bit_ord; |
| else if(p_td.raw->top_bit_order==TOP_BIT_RIGHT)local_top_order=ORDER_MSB; |
| else local_top_order=ORDER_LSB; |
| RAW_Force_Omit field_0_force_omit(0, force_omit, ClearToSend_ctrl_descr_.raw->forceomit); |
| decoded_field_length = field_ctrl.RAW_decode(ClearToSend_ctrl_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_0_force_omit); |
| if (decoded_field_length < 0) return decoded_field_length; |
| decoded_length+=decoded_field_length; |
| limit-=decoded_field_length; |
| last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit()); |
| RAW_Force_Omit field_1_force_omit(1, force_omit, NUMBER__OF__PACKETS_descr_.raw->forceomit); |
| decoded_field_length = field_totalNumberOfPackets.RAW_decode(NUMBER__OF__PACKETS_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_1_force_omit); |
| if (decoded_field_length < 0) return decoded_field_length; |
| decoded_length+=decoded_field_length; |
| limit-=decoded_field_length; |
| last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit()); |
| RAW_Force_Omit field_2_force_omit(2, force_omit, General__Types::INT1_descr_.raw->forceomit); |
| decoded_field_length = field_nextPacketNumber.RAW_decode(General__Types::INT1_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_2_force_omit); |
| if (decoded_field_length < 0) return decoded_field_length; |
| decoded_length+=decoded_field_length; |
| limit-=decoded_field_length; |
| last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit()); |
| RAW_Force_Omit field_3_force_omit(3, force_omit, ClearToSend_reserved4_descr_.raw->forceomit); |
| decoded_field_length = field_reserved4.RAW_decode(ClearToSend_reserved4_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_3_force_omit); |
| if (decoded_field_length < 0) return decoded_field_length; |
| decoded_length+=decoded_field_length; |
| limit-=decoded_field_length; |
| last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit()); |
| RAW_Force_Omit field_4_force_omit(4, force_omit, ClearToSend_reserved5_descr_.raw->forceomit); |
| decoded_field_length = field_reserved5.RAW_decode(ClearToSend_reserved5_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_4_force_omit); |
| if (decoded_field_length < 0) return decoded_field_length; |
| decoded_length+=decoded_field_length; |
| limit-=decoded_field_length; |
| last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit()); |
| RAW_Force_Omit field_5_force_omit(5, force_omit, IsobusMessageTypes::PGN_descr_.raw->forceomit); |
| decoded_field_length = field_pgnOfMultiPacketMessage.RAW_decode(IsobusMessageTypes::PGN_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_5_force_omit); |
| if (decoded_field_length < 0) return decoded_field_length; |
| decoded_length+=decoded_field_length; |
| limit-=decoded_field_length; |
| last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit()); |
| p_buf.set_pos_bit(last_decoded_pos); |
| return decoded_length+prepaddlength+p_buf.increase_pos_padd(p_td.raw->padding); |
| } |
| |
| int ClearToSend::RAW_encode(const TTCN_Typedescriptor_t&, RAW_enc_tree& myleaf) const { |
| if (!is_bound()) TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_UNBOUND, "Encoding an unbound value."); |
| int encoded_length = 0; |
| myleaf.isleaf = FALSE; |
| myleaf.body.node.num_of_nodes = 6; |
| myleaf.body.node.nodes = init_nodes_of_enc_tree(6); |
| myleaf.body.node.nodes[0] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 0, ClearToSend_ctrl_descr_.raw); |
| myleaf.body.node.nodes[1] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 1, NUMBER__OF__PACKETS_descr_.raw); |
| myleaf.body.node.nodes[2] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 2, General__Types::INT1_descr_.raw); |
| myleaf.body.node.nodes[3] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 3, ClearToSend_reserved4_descr_.raw); |
| myleaf.body.node.nodes[4] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 4, ClearToSend_reserved5_descr_.raw); |
| myleaf.body.node.nodes[5] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 5, IsobusMessageTypes::PGN_descr_.raw); |
| encoded_length += field_ctrl.RAW_encode(ClearToSend_ctrl_descr_, *myleaf.body.node.nodes[0]); |
| encoded_length += field_totalNumberOfPackets.RAW_encode(NUMBER__OF__PACKETS_descr_, *myleaf.body.node.nodes[1]); |
| encoded_length += field_nextPacketNumber.RAW_encode(General__Types::INT1_descr_, *myleaf.body.node.nodes[2]); |
| encoded_length += field_reserved4.RAW_encode(ClearToSend_reserved4_descr_, *myleaf.body.node.nodes[3]); |
| encoded_length += field_reserved5.RAW_encode(ClearToSend_reserved5_descr_, *myleaf.body.node.nodes[4]); |
| encoded_length += field_pgnOfMultiPacketMessage.RAW_encode(IsobusMessageTypes::PGN_descr_, *myleaf.body.node.nodes[5]); |
| return myleaf.length = encoded_length; |
| } |
| |
| struct ClearToSend_template::single_value_struct { |
| OCTETSTRING_template field_ctrl; |
| INTEGER_template field_totalNumberOfPackets; |
| INTEGER_template field_nextPacketNumber; |
| OCTETSTRING_template field_reserved4; |
| OCTETSTRING_template field_reserved5; |
| INTEGER_template field_pgnOfMultiPacketMessage; |
| }; |
| |
| void ClearToSend_template::set_specific() |
| { |
| if (template_selection != SPECIFIC_VALUE) { |
| template_sel old_selection = template_selection; |
| clean_up(); |
| single_value = new single_value_struct; |
| set_selection(SPECIFIC_VALUE); |
| if (old_selection == ANY_VALUE || old_selection == ANY_OR_OMIT) { |
| single_value->field_ctrl = ANY_VALUE; |
| single_value->field_totalNumberOfPackets = ANY_VALUE; |
| single_value->field_nextPacketNumber = ANY_VALUE; |
| single_value->field_reserved4 = ANY_VALUE; |
| single_value->field_reserved5 = ANY_VALUE; |
| single_value->field_pgnOfMultiPacketMessage = ANY_VALUE; |
| } |
| } |
| } |
| |
| void ClearToSend_template::copy_value(const ClearToSend& other_value) |
| { |
| single_value = new single_value_struct; |
| if (other_value.ctrl().is_bound()) { |
| single_value->field_ctrl = other_value.ctrl(); |
| } else { |
| single_value->field_ctrl.clean_up(); |
| } |
| if (other_value.totalNumberOfPackets().is_bound()) { |
| single_value->field_totalNumberOfPackets = other_value.totalNumberOfPackets(); |
| } else { |
| single_value->field_totalNumberOfPackets.clean_up(); |
| } |
| if (other_value.nextPacketNumber().is_bound()) { |
| single_value->field_nextPacketNumber = other_value.nextPacketNumber(); |
| } else { |
| single_value->field_nextPacketNumber.clean_up(); |
| } |
| if (other_value.reserved4().is_bound()) { |
| single_value->field_reserved4 = other_value.reserved4(); |
| } else { |
| single_value->field_reserved4.clean_up(); |
| } |
| if (other_value.reserved5().is_bound()) { |
| single_value->field_reserved5 = other_value.reserved5(); |
| } else { |
| single_value->field_reserved5.clean_up(); |
| } |
| if (other_value.pgnOfMultiPacketMessage().is_bound()) { |
| single_value->field_pgnOfMultiPacketMessage = other_value.pgnOfMultiPacketMessage(); |
| } else { |
| single_value->field_pgnOfMultiPacketMessage.clean_up(); |
| } |
| set_selection(SPECIFIC_VALUE); |
| } |
| |
| void ClearToSend_template::copy_template(const ClearToSend_template& other_value) |
| { |
| switch (other_value.template_selection) { |
| case SPECIFIC_VALUE: |
| single_value = new single_value_struct; |
| if (UNINITIALIZED_TEMPLATE != other_value.ctrl().get_selection()) { |
| single_value->field_ctrl = other_value.ctrl(); |
| } else { |
| single_value->field_ctrl.clean_up(); |
| } |
| if (UNINITIALIZED_TEMPLATE != other_value.totalNumberOfPackets().get_selection()) { |
| single_value->field_totalNumberOfPackets = other_value.totalNumberOfPackets(); |
| } else { |
| single_value->field_totalNumberOfPackets.clean_up(); |
| } |
| if (UNINITIALIZED_TEMPLATE != other_value.nextPacketNumber().get_selection()) { |
| single_value->field_nextPacketNumber = other_value.nextPacketNumber(); |
| } else { |
| single_value->field_nextPacketNumber.clean_up(); |
| } |
| if (UNINITIALIZED_TEMPLATE != other_value.reserved4().get_selection()) { |
| single_value->field_reserved4 = other_value.reserved4(); |
| } else { |
| single_value->field_reserved4.clean_up(); |
| } |
| if (UNINITIALIZED_TEMPLATE != other_value.reserved5().get_selection()) { |
| single_value->field_reserved5 = other_value.reserved5(); |
| } else { |
| single_value->field_reserved5.clean_up(); |
| } |
| if (UNINITIALIZED_TEMPLATE != other_value.pgnOfMultiPacketMessage().get_selection()) { |
| single_value->field_pgnOfMultiPacketMessage = other_value.pgnOfMultiPacketMessage(); |
| } else { |
| single_value->field_pgnOfMultiPacketMessage.clean_up(); |
| } |
| case OMIT_VALUE: |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| break; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| value_list.n_values = other_value.value_list.n_values; |
| value_list.list_value = new ClearToSend_template[value_list.n_values]; |
| for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) |
| value_list.list_value[list_count].copy_template(other_value.value_list.list_value[list_count]); |
| break; |
| default: |
| TTCN_error("Copying an uninitialized/unsupported template of type @IsobusCMMessageTypes.ClearToSend."); |
| break; |
| } |
| set_selection(other_value); |
| } |
| |
| ClearToSend_template::ClearToSend_template() |
| { |
| } |
| |
| ClearToSend_template::ClearToSend_template(template_sel other_value) |
| : Base_Template(other_value) |
| { |
| check_single_selection(other_value); |
| } |
| |
| ClearToSend_template::ClearToSend_template(const ClearToSend& other_value) |
| { |
| copy_value(other_value); |
| } |
| |
| ClearToSend_template::ClearToSend_template(const OPTIONAL<ClearToSend>& other_value) |
| { |
| switch (other_value.get_selection()) { |
| case OPTIONAL_PRESENT: |
| copy_value((const ClearToSend&)other_value); |
| break; |
| case OPTIONAL_OMIT: |
| set_selection(OMIT_VALUE); |
| break; |
| default: |
| TTCN_error("Creating a template of type @IsobusCMMessageTypes.ClearToSend from an unbound optional field."); |
| } |
| } |
| |
| ClearToSend_template::ClearToSend_template(const ClearToSend_template& other_value) |
| : Base_Template() |
| { |
| copy_template(other_value); |
| } |
| |
| ClearToSend_template::~ClearToSend_template() |
| { |
| clean_up(); |
| } |
| |
| ClearToSend_template& ClearToSend_template::operator=(template_sel other_value) |
| { |
| check_single_selection(other_value); |
| clean_up(); |
| set_selection(other_value); |
| return *this; |
| } |
| |
| ClearToSend_template& ClearToSend_template::operator=(const ClearToSend& other_value) |
| { |
| clean_up(); |
| copy_value(other_value); |
| return *this; |
| } |
| |
| ClearToSend_template& ClearToSend_template::operator=(const OPTIONAL<ClearToSend>& other_value) |
| { |
| clean_up(); |
| switch (other_value.get_selection()) { |
| case OPTIONAL_PRESENT: |
| copy_value((const ClearToSend&)other_value); |
| break; |
| case OPTIONAL_OMIT: |
| set_selection(OMIT_VALUE); |
| break; |
| default: |
| TTCN_error("Assignment of an unbound optional field to a template of type @IsobusCMMessageTypes.ClearToSend."); |
| } |
| return *this; |
| } |
| |
| ClearToSend_template& ClearToSend_template::operator=(const ClearToSend_template& other_value) |
| { |
| if (&other_value != this) { |
| clean_up(); |
| copy_template(other_value); |
| } |
| return *this; |
| } |
| |
| boolean ClearToSend_template::match(const ClearToSend& other_value, boolean legacy) const |
| { |
| if (!other_value.is_bound()) return FALSE; |
| switch (template_selection) { |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| return TRUE; |
| case OMIT_VALUE: |
| return FALSE; |
| case SPECIFIC_VALUE: |
| if(!other_value.ctrl().is_bound()) return FALSE; |
| if(!single_value->field_ctrl.match(other_value.ctrl(), legacy))return FALSE; |
| if(!other_value.totalNumberOfPackets().is_bound()) return FALSE; |
| if(!single_value->field_totalNumberOfPackets.match(other_value.totalNumberOfPackets(), legacy))return FALSE; |
| if(!other_value.nextPacketNumber().is_bound()) return FALSE; |
| if(!single_value->field_nextPacketNumber.match(other_value.nextPacketNumber(), legacy))return FALSE; |
| if(!other_value.reserved4().is_bound()) return FALSE; |
| if(!single_value->field_reserved4.match(other_value.reserved4(), legacy))return FALSE; |
| if(!other_value.reserved5().is_bound()) return FALSE; |
| if(!single_value->field_reserved5.match(other_value.reserved5(), legacy))return FALSE; |
| if(!other_value.pgnOfMultiPacketMessage().is_bound()) return FALSE; |
| if(!single_value->field_pgnOfMultiPacketMessage.match(other_value.pgnOfMultiPacketMessage(), legacy))return FALSE; |
| return TRUE; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) |
| if (value_list.list_value[list_count].match(other_value, legacy)) return template_selection == VALUE_LIST; |
| return template_selection == COMPLEMENTED_LIST; |
| default: |
| TTCN_error("Matching an uninitialized/unsupported template of type @IsobusCMMessageTypes.ClearToSend."); |
| } |
| return FALSE; |
| } |
| |
| boolean ClearToSend_template::is_bound() const |
| { |
| if (template_selection == UNINITIALIZED_TEMPLATE && !is_ifpresent) return FALSE; |
| if (template_selection != SPECIFIC_VALUE) return TRUE; |
| return single_value->field_ctrl.is_bound() |
| |
| ||single_value->field_totalNumberOfPackets.is_bound() |
| |
| ||single_value->field_nextPacketNumber.is_bound() |
| |
| ||single_value->field_reserved4.is_bound() |
| |
| ||single_value->field_reserved5.is_bound() |
| |
| ||single_value->field_pgnOfMultiPacketMessage.is_bound() |
| ; |
| } |
| |
| boolean ClearToSend_template::is_value() const |
| { |
| if (template_selection != SPECIFIC_VALUE || is_ifpresent) return FALSE; |
| return single_value->field_ctrl.is_value() |
| &&single_value->field_totalNumberOfPackets.is_value() |
| &&single_value->field_nextPacketNumber.is_value() |
| &&single_value->field_reserved4.is_value() |
| &&single_value->field_reserved5.is_value() |
| &&single_value->field_pgnOfMultiPacketMessage.is_value(); |
| } |
| |
| void ClearToSend_template::clean_up() |
| { |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| delete single_value; |
| break; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| delete [] value_list.list_value; |
| default: |
| break; |
| } |
| template_selection = UNINITIALIZED_TEMPLATE; |
| } |
| |
| ClearToSend ClearToSend_template::valueof() const |
| { |
| if (template_selection != SPECIFIC_VALUE || is_ifpresent) |
| TTCN_error("Performing a valueof or send operation on a non-specific template of type @IsobusCMMessageTypes.ClearToSend."); |
| ClearToSend ret_val; |
| if (single_value->field_ctrl.is_bound()) { |
| ret_val.ctrl() = single_value->field_ctrl.valueof(); |
| } |
| if (single_value->field_totalNumberOfPackets.is_bound()) { |
| ret_val.totalNumberOfPackets() = single_value->field_totalNumberOfPackets.valueof(); |
| } |
| if (single_value->field_nextPacketNumber.is_bound()) { |
| ret_val.nextPacketNumber() = single_value->field_nextPacketNumber.valueof(); |
| } |
| if (single_value->field_reserved4.is_bound()) { |
| ret_val.reserved4() = single_value->field_reserved4.valueof(); |
| } |
| if (single_value->field_reserved5.is_bound()) { |
| ret_val.reserved5() = single_value->field_reserved5.valueof(); |
| } |
| if (single_value->field_pgnOfMultiPacketMessage.is_bound()) { |
| ret_val.pgnOfMultiPacketMessage() = single_value->field_pgnOfMultiPacketMessage.valueof(); |
| } |
| return ret_val; |
| } |
| |
| void ClearToSend_template::set_type(template_sel template_type, unsigned int list_length) |
| { |
| if (template_type != VALUE_LIST && template_type != COMPLEMENTED_LIST) |
| TTCN_error("Setting an invalid list for a template of type @IsobusCMMessageTypes.ClearToSend."); |
| clean_up(); |
| set_selection(template_type); |
| value_list.n_values = list_length; |
| value_list.list_value = new ClearToSend_template[list_length]; |
| } |
| |
| ClearToSend_template& ClearToSend_template::list_item(unsigned int list_index) const |
| { |
| if (template_selection != VALUE_LIST && template_selection != COMPLEMENTED_LIST) |
| TTCN_error("Accessing a list element of a non-list template of type @IsobusCMMessageTypes.ClearToSend."); |
| if (list_index >= value_list.n_values) |
| TTCN_error("Index overflow in a value list template of type @IsobusCMMessageTypes.ClearToSend."); |
| return value_list.list_value[list_index]; |
| } |
| |
| OCTETSTRING_template& ClearToSend_template::ctrl() |
| { |
| set_specific(); |
| return single_value->field_ctrl; |
| } |
| |
| const OCTETSTRING_template& ClearToSend_template::ctrl() const |
| { |
| if (template_selection != SPECIFIC_VALUE) |
| TTCN_error("Accessing field ctrl of a non-specific template of type @IsobusCMMessageTypes.ClearToSend."); |
| return single_value->field_ctrl; |
| } |
| |
| INTEGER_template& ClearToSend_template::totalNumberOfPackets() |
| { |
| set_specific(); |
| return single_value->field_totalNumberOfPackets; |
| } |
| |
| const INTEGER_template& ClearToSend_template::totalNumberOfPackets() const |
| { |
| if (template_selection != SPECIFIC_VALUE) |
| TTCN_error("Accessing field totalNumberOfPackets of a non-specific template of type @IsobusCMMessageTypes.ClearToSend."); |
| return single_value->field_totalNumberOfPackets; |
| } |
| |
| INTEGER_template& ClearToSend_template::nextPacketNumber() |
| { |
| set_specific(); |
| return single_value->field_nextPacketNumber; |
| } |
| |
| const INTEGER_template& ClearToSend_template::nextPacketNumber() const |
| { |
| if (template_selection != SPECIFIC_VALUE) |
| TTCN_error("Accessing field nextPacketNumber of a non-specific template of type @IsobusCMMessageTypes.ClearToSend."); |
| return single_value->field_nextPacketNumber; |
| } |
| |
| OCTETSTRING_template& ClearToSend_template::reserved4() |
| { |
| set_specific(); |
| return single_value->field_reserved4; |
| } |
| |
| const OCTETSTRING_template& ClearToSend_template::reserved4() const |
| { |
| if (template_selection != SPECIFIC_VALUE) |
| TTCN_error("Accessing field reserved4 of a non-specific template of type @IsobusCMMessageTypes.ClearToSend."); |
| return single_value->field_reserved4; |
| } |
| |
| OCTETSTRING_template& ClearToSend_template::reserved5() |
| { |
| set_specific(); |
| return single_value->field_reserved5; |
| } |
| |
| const OCTETSTRING_template& ClearToSend_template::reserved5() const |
| { |
| if (template_selection != SPECIFIC_VALUE) |
| TTCN_error("Accessing field reserved5 of a non-specific template of type @IsobusCMMessageTypes.ClearToSend."); |
| return single_value->field_reserved5; |
| } |
| |
| INTEGER_template& ClearToSend_template::pgnOfMultiPacketMessage() |
| { |
| set_specific(); |
| return single_value->field_pgnOfMultiPacketMessage; |
| } |
| |
| const INTEGER_template& ClearToSend_template::pgnOfMultiPacketMessage() const |
| { |
| if (template_selection != SPECIFIC_VALUE) |
| TTCN_error("Accessing field pgnOfMultiPacketMessage of a non-specific template of type @IsobusCMMessageTypes.ClearToSend."); |
| return single_value->field_pgnOfMultiPacketMessage; |
| } |
| |
| int ClearToSend_template::size_of() const |
| { |
| if (is_ifpresent) TTCN_error("Performing sizeof() operation on a template of type @IsobusCMMessageTypes.ClearToSend which has an ifpresent attribute."); |
| switch (template_selection) |
| { |
| case SPECIFIC_VALUE: |
| return 6; |
| case VALUE_LIST: |
| { |
| if (value_list.n_values<1) |
| TTCN_error("Internal error: Performing sizeof() operation on a template of type @IsobusCMMessageTypes.ClearToSend containing an empty list."); |
| int item_size = value_list.list_value[0].size_of(); |
| for (unsigned int l_idx = 1; l_idx < value_list.n_values; l_idx++) |
| { |
| if (value_list.list_value[l_idx].size_of()!=item_size) |
| TTCN_error("Performing sizeof() operation on a template of type @IsobusCMMessageTypes.ClearToSend containing a value list with different sizes."); |
| } |
| return item_size; |
| } |
| case OMIT_VALUE: |
| TTCN_error("Performing sizeof() operation on a template of type @IsobusCMMessageTypes.ClearToSend containing omit value."); |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| TTCN_error("Performing sizeof() operation on a template of type @IsobusCMMessageTypes.ClearToSend containing */? value."); |
| case COMPLEMENTED_LIST: |
| TTCN_error("Performing sizeof() operation on a template of type @IsobusCMMessageTypes.ClearToSend containing complemented list."); |
| default: |
| TTCN_error("Performing sizeof() operation on an uninitialized/unsupported template of type @IsobusCMMessageTypes.ClearToSend."); |
| } |
| return 0; |
| } |
| |
| void ClearToSend_template::log() const |
| { |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| TTCN_Logger::log_event_str("{ ctrl := "); |
| single_value->field_ctrl.log(); |
| TTCN_Logger::log_event_str(", totalNumberOfPackets := "); |
| single_value->field_totalNumberOfPackets.log(); |
| TTCN_Logger::log_event_str(", nextPacketNumber := "); |
| single_value->field_nextPacketNumber.log(); |
| TTCN_Logger::log_event_str(", reserved4 := "); |
| single_value->field_reserved4.log(); |
| TTCN_Logger::log_event_str(", reserved5 := "); |
| single_value->field_reserved5.log(); |
| TTCN_Logger::log_event_str(", pgnOfMultiPacketMessage := "); |
| single_value->field_pgnOfMultiPacketMessage.log(); |
| TTCN_Logger::log_event_str(" }"); |
| break; |
| case COMPLEMENTED_LIST: |
| TTCN_Logger::log_event_str("complement"); |
| case VALUE_LIST: |
| TTCN_Logger::log_char('('); |
| for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) { |
| if (list_count > 0) TTCN_Logger::log_event_str(", "); |
| value_list.list_value[list_count].log(); |
| } |
| TTCN_Logger::log_char(')'); |
| break; |
| default: |
| log_generic(); |
| } |
| log_ifpresent(); |
| } |
| |
| void ClearToSend_template::log_match(const ClearToSend& match_value, boolean legacy) const |
| { |
| if(TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity()){ |
| if(match(match_value, legacy)){ |
| TTCN_Logger::print_logmatch_buffer(); |
| TTCN_Logger::log_event_str(" matched"); |
| } else{ |
| if (template_selection == SPECIFIC_VALUE) { |
| size_t previous_size = TTCN_Logger::get_logmatch_buffer_len(); |
| if(!single_value->field_ctrl.match(match_value.ctrl(), legacy)){ |
| TTCN_Logger::log_logmatch_info(".ctrl"); |
| single_value->field_ctrl.log_match(match_value.ctrl(), legacy); |
| TTCN_Logger::set_logmatch_buffer_len(previous_size); |
| } |
| if(!single_value->field_totalNumberOfPackets.match(match_value.totalNumberOfPackets(), legacy)){ |
| TTCN_Logger::log_logmatch_info(".totalNumberOfPackets"); |
| single_value->field_totalNumberOfPackets.log_match(match_value.totalNumberOfPackets(), legacy); |
| TTCN_Logger::set_logmatch_buffer_len(previous_size); |
| } |
| if(!single_value->field_nextPacketNumber.match(match_value.nextPacketNumber(), legacy)){ |
| TTCN_Logger::log_logmatch_info(".nextPacketNumber"); |
| single_value->field_nextPacketNumber.log_match(match_value.nextPacketNumber(), legacy); |
| TTCN_Logger::set_logmatch_buffer_len(previous_size); |
| } |
| if(!single_value->field_reserved4.match(match_value.reserved4(), legacy)){ |
| TTCN_Logger::log_logmatch_info(".reserved4"); |
| single_value->field_reserved4.log_match(match_value.reserved4(), legacy); |
| TTCN_Logger::set_logmatch_buffer_len(previous_size); |
| } |
| if(!single_value->field_reserved5.match(match_value.reserved5(), legacy)){ |
| TTCN_Logger::log_logmatch_info(".reserved5"); |
| single_value->field_reserved5.log_match(match_value.reserved5(), legacy); |
| TTCN_Logger::set_logmatch_buffer_len(previous_size); |
| } |
| if(!single_value->field_pgnOfMultiPacketMessage.match(match_value.pgnOfMultiPacketMessage(), legacy)){ |
| TTCN_Logger::log_logmatch_info(".pgnOfMultiPacketMessage"); |
| single_value->field_pgnOfMultiPacketMessage.log_match(match_value.pgnOfMultiPacketMessage(), legacy); |
| TTCN_Logger::set_logmatch_buffer_len(previous_size); |
| } |
| }else { |
| TTCN_Logger::print_logmatch_buffer(); |
| match_value.log(); |
| TTCN_Logger::log_event_str(" with "); |
| log(); |
| TTCN_Logger::log_event_str(" unmatched"); |
| } |
| } |
| return; |
| } |
| if (template_selection == SPECIFIC_VALUE) { |
| TTCN_Logger::log_event_str("{ ctrl := "); |
| single_value->field_ctrl.log_match(match_value.ctrl(), legacy); |
| TTCN_Logger::log_event_str(", totalNumberOfPackets := "); |
| single_value->field_totalNumberOfPackets.log_match(match_value.totalNumberOfPackets(), legacy); |
| TTCN_Logger::log_event_str(", nextPacketNumber := "); |
| single_value->field_nextPacketNumber.log_match(match_value.nextPacketNumber(), legacy); |
| TTCN_Logger::log_event_str(", reserved4 := "); |
| single_value->field_reserved4.log_match(match_value.reserved4(), legacy); |
| TTCN_Logger::log_event_str(", reserved5 := "); |
| single_value->field_reserved5.log_match(match_value.reserved5(), legacy); |
| TTCN_Logger::log_event_str(", pgnOfMultiPacketMessage := "); |
| single_value->field_pgnOfMultiPacketMessage.log_match(match_value.pgnOfMultiPacketMessage(), legacy); |
| TTCN_Logger::log_event_str(" }"); |
| } else { |
| match_value.log(); |
| TTCN_Logger::log_event_str(" with "); |
| log(); |
| if (match(match_value, legacy)) TTCN_Logger::log_event_str(" matched"); |
| else TTCN_Logger::log_event_str(" unmatched"); |
| } |
| } |
| |
| void ClearToSend_template::encode_text(Text_Buf& text_buf) const |
| { |
| encode_text_base(text_buf); |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| single_value->field_ctrl.encode_text(text_buf); |
| single_value->field_totalNumberOfPackets.encode_text(text_buf); |
| single_value->field_nextPacketNumber.encode_text(text_buf); |
| single_value->field_reserved4.encode_text(text_buf); |
| single_value->field_reserved5.encode_text(text_buf); |
| single_value->field_pgnOfMultiPacketMessage.encode_text(text_buf); |
| case OMIT_VALUE: |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| break; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| text_buf.push_int(value_list.n_values); |
| for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) |
| value_list.list_value[list_count].encode_text(text_buf); |
| break; |
| default: |
| TTCN_error("Text encoder: Encoding an uninitialized/unsupported template of type @IsobusCMMessageTypes.ClearToSend."); |
| } |
| } |
| |
| void ClearToSend_template::decode_text(Text_Buf& text_buf) |
| { |
| clean_up(); |
| decode_text_base(text_buf); |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| single_value = new single_value_struct; |
| single_value->field_ctrl.decode_text(text_buf); |
| single_value->field_totalNumberOfPackets.decode_text(text_buf); |
| single_value->field_nextPacketNumber.decode_text(text_buf); |
| single_value->field_reserved4.decode_text(text_buf); |
| single_value->field_reserved5.decode_text(text_buf); |
| single_value->field_pgnOfMultiPacketMessage.decode_text(text_buf); |
| case OMIT_VALUE: |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| break; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| value_list.n_values = text_buf.pull_int().get_val(); |
| value_list.list_value = new ClearToSend_template[value_list.n_values]; |
| for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) |
| value_list.list_value[list_count].decode_text(text_buf); |
| break; |
| default: |
| TTCN_error("Text decoder: An unknown/unsupported selection was received in a template of type @IsobusCMMessageTypes.ClearToSend."); |
| } |
| } |
| |
| void ClearToSend_template::set_param(Module_Param& param) |
| { |
| param.basic_check(Module_Param::BC_TEMPLATE, "record template"); |
| switch (param.get_type()) { |
| case Module_Param::MP_Omit: |
| *this = OMIT_VALUE; |
| break; |
| case Module_Param::MP_Any: |
| *this = ANY_VALUE; |
| break; |
| case Module_Param::MP_AnyOrNone: |
| *this = ANY_OR_OMIT; |
| break; |
| case Module_Param::MP_List_Template: |
| case Module_Param::MP_ComplementList_Template: { |
| ClearToSend_template new_temp; |
| new_temp.set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : COMPLEMENTED_LIST, param.get_size()); |
| for (size_t p_i=0; p_i<param.get_size(); p_i++) { |
| new_temp.list_item(p_i).set_param(*param.get_elem(p_i)); |
| } |
| *this = new_temp; |
| break; } |
| case Module_Param::MP_Value_List: |
| if (6<param.get_size()) { |
| param.error("record template of type @IsobusCMMessageTypes.ClearToSend has 6 fields but list value has %d fields", (int)param.get_size()); |
| } |
| if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) ctrl().set_param(*param.get_elem(0)); |
| if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) totalNumberOfPackets().set_param(*param.get_elem(1)); |
| if (param.get_size()>2 && param.get_elem(2)->get_type()!=Module_Param::MP_NotUsed) nextPacketNumber().set_param(*param.get_elem(2)); |
| if (param.get_size()>3 && param.get_elem(3)->get_type()!=Module_Param::MP_NotUsed) reserved4().set_param(*param.get_elem(3)); |
| if (param.get_size()>4 && param.get_elem(4)->get_type()!=Module_Param::MP_NotUsed) reserved5().set_param(*param.get_elem(4)); |
| if (param.get_size()>5 && param.get_elem(5)->get_type()!=Module_Param::MP_NotUsed) pgnOfMultiPacketMessage().set_param(*param.get_elem(5)); |
| break; |
| case Module_Param::MP_Assignment_List: { |
| Vector<bool> value_used(param.get_size()); |
| value_used.resize(param.get_size(), FALSE); |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "ctrl")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| ctrl().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "totalNumberOfPackets")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| totalNumberOfPackets().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "nextPacketNumber")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| nextPacketNumber().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "reserved4")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| reserved4().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "reserved5")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| reserved5().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "pgnOfMultiPacketMessage")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| pgnOfMultiPacketMessage().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| curr_param->error("Non existent field name in type @IsobusCMMessageTypes.ClearToSend: %s", curr_param->get_id()->get_name()); |
| break; |
| } |
| } break; |
| default: |
| param.type_error("record template", "@IsobusCMMessageTypes.ClearToSend"); |
| } |
| is_ifpresent = param.get_ifpresent(); |
| } |
| |
| void ClearToSend_template::check_restriction(template_res t_res, const char* t_name, boolean legacy) const |
| { |
| if (template_selection==UNINITIALIZED_TEMPLATE) return; |
| switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) { |
| case TR_OMIT: |
| if (template_selection==OMIT_VALUE) return; |
| case TR_VALUE: |
| if (template_selection!=SPECIFIC_VALUE || is_ifpresent) break; |
| single_value->field_ctrl.check_restriction(t_res, t_name ? t_name : "@IsobusCMMessageTypes.ClearToSend"); |
| single_value->field_totalNumberOfPackets.check_restriction(t_res, t_name ? t_name : "@IsobusCMMessageTypes.ClearToSend"); |
| single_value->field_nextPacketNumber.check_restriction(t_res, t_name ? t_name : "@IsobusCMMessageTypes.ClearToSend"); |
| single_value->field_reserved4.check_restriction(t_res, t_name ? t_name : "@IsobusCMMessageTypes.ClearToSend"); |
| single_value->field_reserved5.check_restriction(t_res, t_name ? t_name : "@IsobusCMMessageTypes.ClearToSend"); |
| single_value->field_pgnOfMultiPacketMessage.check_restriction(t_res, t_name ? t_name : "@IsobusCMMessageTypes.ClearToSend"); |
| return; |
| case TR_PRESENT: |
| if (!match_omit(legacy)) return; |
| break; |
| default: |
| return; |
| } |
| TTCN_error("Restriction `%s' on template of type %s violated.", get_res_name(t_res), t_name ? t_name : "@IsobusCMMessageTypes.ClearToSend"); |
| } |
| |
| boolean ClearToSend_template::is_present(boolean legacy) const |
| { |
| if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE; |
| return !match_omit(legacy); |
| } |
| |
| boolean ClearToSend_template::match_omit(boolean legacy) const |
| { |
| if (is_ifpresent) return TRUE; |
| switch (template_selection) { |
| case OMIT_VALUE: |
| case ANY_OR_OMIT: |
| return TRUE; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| if (legacy) { |
| for (unsigned int l_idx=0; l_idx<value_list.n_values; l_idx++) |
| if (value_list.list_value[l_idx].match_omit()) |
| return template_selection==VALUE_LIST; |
| return template_selection==COMPLEMENTED_LIST; |
| } // else fall through |
| default: |
| return FALSE; |
| } |
| return FALSE; |
| } |
| |
| EndOfMessageAcknowledgement::EndOfMessageAcknowledgement() |
| { |
| } |
| |
| EndOfMessageAcknowledgement::EndOfMessageAcknowledgement(const OCTETSTRING& par_ctrl, |
| const INTEGER& par_msgSizeInByte, |
| const INTEGER& par_totalNumberOfPackets, |
| const OCTETSTRING& par_reserved5, |
| const INTEGER& par_pgnOfMultiPacketMessage) |
| : field_ctrl(par_ctrl), |
| field_msgSizeInByte(par_msgSizeInByte), |
| field_totalNumberOfPackets(par_totalNumberOfPackets), |
| field_reserved5(par_reserved5), |
| field_pgnOfMultiPacketMessage(par_pgnOfMultiPacketMessage) |
| { |
| } |
| |
| EndOfMessageAcknowledgement::EndOfMessageAcknowledgement(const EndOfMessageAcknowledgement& other_value) |
| { |
| if(!other_value.is_bound()) TTCN_error("Copying an unbound value of type @IsobusCMMessageTypes.EndOfMessageAcknowledgement."); |
| if (other_value.ctrl().is_bound()) field_ctrl = other_value.ctrl(); |
| else field_ctrl.clean_up(); |
| if (other_value.msgSizeInByte().is_bound()) field_msgSizeInByte = other_value.msgSizeInByte(); |
| else field_msgSizeInByte.clean_up(); |
| if (other_value.totalNumberOfPackets().is_bound()) field_totalNumberOfPackets = other_value.totalNumberOfPackets(); |
| else field_totalNumberOfPackets.clean_up(); |
| if (other_value.reserved5().is_bound()) field_reserved5 = other_value.reserved5(); |
| else field_reserved5.clean_up(); |
| if (other_value.pgnOfMultiPacketMessage().is_bound()) field_pgnOfMultiPacketMessage = other_value.pgnOfMultiPacketMessage(); |
| else field_pgnOfMultiPacketMessage.clean_up(); |
| } |
| |
| void EndOfMessageAcknowledgement::clean_up() |
| { |
| field_ctrl.clean_up(); |
| field_msgSizeInByte.clean_up(); |
| field_totalNumberOfPackets.clean_up(); |
| field_reserved5.clean_up(); |
| field_pgnOfMultiPacketMessage.clean_up(); |
| } |
| |
| const TTCN_Typedescriptor_t* EndOfMessageAcknowledgement::get_descriptor() const { return &EndOfMessageAcknowledgement_descr_; } |
| EndOfMessageAcknowledgement& EndOfMessageAcknowledgement::operator=(const EndOfMessageAcknowledgement& other_value) |
| { |
| if (this != &other_value) { |
| if(!other_value.is_bound()) TTCN_error("Assignment of an unbound value of type @IsobusCMMessageTypes.EndOfMessageAcknowledgement."); |
| if (other_value.ctrl().is_bound()) field_ctrl = other_value.ctrl(); |
| else field_ctrl.clean_up(); |
| if (other_value.msgSizeInByte().is_bound()) field_msgSizeInByte = other_value.msgSizeInByte(); |
| else field_msgSizeInByte.clean_up(); |
| if (other_value.totalNumberOfPackets().is_bound()) field_totalNumberOfPackets = other_value.totalNumberOfPackets(); |
| else field_totalNumberOfPackets.clean_up(); |
| if (other_value.reserved5().is_bound()) field_reserved5 = other_value.reserved5(); |
| else field_reserved5.clean_up(); |
| if (other_value.pgnOfMultiPacketMessage().is_bound()) field_pgnOfMultiPacketMessage = other_value.pgnOfMultiPacketMessage(); |
| else field_pgnOfMultiPacketMessage.clean_up(); |
| } |
| return *this; |
| } |
| |
| boolean EndOfMessageAcknowledgement::operator==(const EndOfMessageAcknowledgement& other_value) const |
| { |
| return field_ctrl==other_value.field_ctrl |
| && field_msgSizeInByte==other_value.field_msgSizeInByte |
| && field_totalNumberOfPackets==other_value.field_totalNumberOfPackets |
| && field_reserved5==other_value.field_reserved5 |
| && field_pgnOfMultiPacketMessage==other_value.field_pgnOfMultiPacketMessage; |
| } |
| |
| boolean EndOfMessageAcknowledgement::is_bound() const |
| { |
| return (field_ctrl.is_bound()) |
| || (field_msgSizeInByte.is_bound()) |
| || (field_totalNumberOfPackets.is_bound()) |
| || (field_reserved5.is_bound()) |
| || (field_pgnOfMultiPacketMessage.is_bound()); |
| } |
| boolean EndOfMessageAcknowledgement::is_value() const |
| { |
| return field_ctrl.is_value() |
| && field_msgSizeInByte.is_value() |
| && field_totalNumberOfPackets.is_value() |
| && field_reserved5.is_value() |
| && field_pgnOfMultiPacketMessage.is_value(); |
| } |
| void EndOfMessageAcknowledgement::log() const |
| { |
| if (!is_bound()) { |
| TTCN_Logger::log_event_unbound(); |
| return; |
| } |
| TTCN_Logger::log_event_str("{ ctrl := "); |
| field_ctrl.log(); |
| TTCN_Logger::log_event_str(", msgSizeInByte := "); |
| field_msgSizeInByte.log(); |
| TTCN_Logger::log_event_str(", totalNumberOfPackets := "); |
| field_totalNumberOfPackets.log(); |
| TTCN_Logger::log_event_str(", reserved5 := "); |
| field_reserved5.log(); |
| TTCN_Logger::log_event_str(", pgnOfMultiPacketMessage := "); |
| field_pgnOfMultiPacketMessage.log(); |
| TTCN_Logger::log_event_str(" }"); |
| } |
| |
| void EndOfMessageAcknowledgement::set_param(Module_Param& param) |
| { |
| param.basic_check(Module_Param::BC_VALUE, "record value"); |
| switch (param.get_type()) { |
| case Module_Param::MP_Value_List: |
| if (5<param.get_size()) { |
| param.error("record value of type @IsobusCMMessageTypes.EndOfMessageAcknowledgement has 5 fields but list value has %d fields", (int)param.get_size()); |
| } |
| if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) ctrl().set_param(*param.get_elem(0)); |
| if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) msgSizeInByte().set_param(*param.get_elem(1)); |
| if (param.get_size()>2 && param.get_elem(2)->get_type()!=Module_Param::MP_NotUsed) totalNumberOfPackets().set_param(*param.get_elem(2)); |
| if (param.get_size()>3 && param.get_elem(3)->get_type()!=Module_Param::MP_NotUsed) reserved5().set_param(*param.get_elem(3)); |
| if (param.get_size()>4 && param.get_elem(4)->get_type()!=Module_Param::MP_NotUsed) pgnOfMultiPacketMessage().set_param(*param.get_elem(4)); |
| break; |
| case Module_Param::MP_Assignment_List: { |
| Vector<bool> value_used(param.get_size()); |
| value_used.resize(param.get_size(), FALSE); |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "ctrl")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| ctrl().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "msgSizeInByte")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| msgSizeInByte().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "totalNumberOfPackets")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| totalNumberOfPackets().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "reserved5")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| reserved5().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "pgnOfMultiPacketMessage")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| pgnOfMultiPacketMessage().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| curr_param->error("Non existent field name in type @IsobusCMMessageTypes.EndOfMessageAcknowledgement: %s", curr_param->get_id()->get_name()); |
| break; |
| } |
| } break; |
| default: |
| param.type_error("record value", "@IsobusCMMessageTypes.EndOfMessageAcknowledgement"); |
| } |
| } |
| |
| void EndOfMessageAcknowledgement::set_implicit_omit() |
| { |
| if (ctrl().is_bound()) ctrl().set_implicit_omit(); |
| if (msgSizeInByte().is_bound()) msgSizeInByte().set_implicit_omit(); |
| if (totalNumberOfPackets().is_bound()) totalNumberOfPackets().set_implicit_omit(); |
| if (reserved5().is_bound()) reserved5().set_implicit_omit(); |
| if (pgnOfMultiPacketMessage().is_bound()) pgnOfMultiPacketMessage().set_implicit_omit(); |
| } |
| |
| void EndOfMessageAcknowledgement::encode_text(Text_Buf& text_buf) const |
| { |
| field_ctrl.encode_text(text_buf); |
| field_msgSizeInByte.encode_text(text_buf); |
| field_totalNumberOfPackets.encode_text(text_buf); |
| field_reserved5.encode_text(text_buf); |
| field_pgnOfMultiPacketMessage.encode_text(text_buf); |
| } |
| |
| void EndOfMessageAcknowledgement::decode_text(Text_Buf& text_buf) |
| { |
| field_ctrl.decode_text(text_buf); |
| field_msgSizeInByte.decode_text(text_buf); |
| field_totalNumberOfPackets.decode_text(text_buf); |
| field_reserved5.decode_text(text_buf); |
| field_pgnOfMultiPacketMessage.decode_text(text_buf); |
| } |
| |
| void EndOfMessageAcknowledgement::encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, TTCN_EncDec::coding_t p_coding, ...) const |
| { |
| va_list pvar; |
| va_start(pvar, p_coding); |
| switch(p_coding) { |
| case TTCN_EncDec::CT_BER: { |
| TTCN_EncDec_ErrorContext ec("While BER-encoding type '%s': ", p_td.name); |
| unsigned BER_coding=va_arg(pvar, unsigned); |
| BER_encode_chk_coding(BER_coding); |
| ASN_BER_TLV_t *tlv=BER_encode_TLV(p_td, BER_coding); |
| tlv->put_in_buffer(p_buf); |
| ASN_BER_TLV_t::destruct(tlv); |
| break;} |
| case TTCN_EncDec::CT_RAW: { |
| TTCN_EncDec_ErrorContext ec("While RAW-encoding type '%s': ", p_td.name); |
| if(!p_td.raw) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No RAW descriptor available for type '%s'.", p_td.name); |
| RAW_enc_tr_pos rp; |
| rp.level=0; |
| rp.pos=NULL; |
| RAW_enc_tree root(FALSE, NULL, &rp, 1, p_td.raw); |
| RAW_encode(p_td, root); |
| root.put_to_buf(p_buf); |
| break;} |
| case TTCN_EncDec::CT_TEXT: { |
| TTCN_EncDec_ErrorContext ec("While TEXT-encoding type '%s': ", p_td.name); |
| if(!p_td.text) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No TEXT descriptor available for type '%s'.", p_td.name); |
| TEXT_encode(p_td,p_buf); |
| break;} |
| case TTCN_EncDec::CT_XER: { |
| TTCN_EncDec_ErrorContext ec("While XER-encoding type '%s': ", p_td.name); |
| unsigned XER_coding=va_arg(pvar, unsigned); |
| XER_encode_chk_coding(XER_coding, p_td); |
| XER_encode(*(p_td.xer),p_buf, XER_coding, 0, 0, 0); |
| p_buf.put_c('\n'); |
| break;} |
| case TTCN_EncDec::CT_JSON: { |
| TTCN_EncDec_ErrorContext ec("While JSON-encoding type '%s': ", p_td.name); |
| if(!p_td.json) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No JSON descriptor available for type '%s'.", p_td.name); |
| JSON_Tokenizer tok(va_arg(pvar, int) != 0); |
| JSON_encode(p_td, tok); |
| p_buf.put_s(tok.get_buffer_length(), (const unsigned char*)tok.get_buffer()); |
| break;} |
| case TTCN_EncDec::CT_OER: { |
| TTCN_EncDec_ErrorContext ec("While OER-encoding type '%s': ", p_td.name); |
| if(!p_td.oer) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No OER descriptor available for type '%s'.", p_td.name); |
| OER_encode(p_td, p_buf); |
| break;} |
| default: |
| TTCN_error("Unknown coding method requested to encode type '%s'", p_td.name); |
| } |
| va_end(pvar); |
| } |
| |
| void EndOfMessageAcknowledgement::decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, TTCN_EncDec::coding_t p_coding, ...) |
| { |
| va_list pvar; |
| va_start(pvar, p_coding); |
| switch(p_coding) { |
| case TTCN_EncDec::CT_BER: { |
| TTCN_EncDec_ErrorContext ec("While BER-decoding type '%s': ", p_td.name); |
| unsigned L_form=va_arg(pvar, unsigned); |
| ASN_BER_TLV_t tlv; |
| BER_decode_str2TLV(p_buf, tlv, L_form); |
| BER_decode_TLV(p_td, tlv, L_form); |
| if(tlv.isComplete) p_buf.increase_pos(tlv.get_len()); |
| break;} |
| case TTCN_EncDec::CT_RAW: { |
| TTCN_EncDec_ErrorContext ec("While RAW-decoding type '%s': ", p_td.name); |
| if(!p_td.raw) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No RAW descriptor available for type '%s'.", p_td.name); |
| raw_order_t r_order; |
| switch(p_td.raw->top_bit_order) { |
| case TOP_BIT_LEFT: |
| r_order=ORDER_LSB; |
| break; |
| case TOP_BIT_RIGHT: |
| default: |
| r_order=ORDER_MSB; |
| } |
| int rawr = RAW_decode(p_td, p_buf, p_buf.get_len()*8, r_order); |
| if(rawr<0) switch (-rawr) { |
| case TTCN_EncDec::ET_INCOMPL_MSG: |
| case TTCN_EncDec::ET_LEN_ERR: |
| ec.error((TTCN_EncDec::error_type_t)-rawr, "Can not decode type '%s', because incomplete message was received", p_td.name); |
| break; |
| case 1: |
| default: |
| ec.error(TTCN_EncDec::ET_INVAL_MSG, "Can not decode type '%s', because invalid message was received", p_td.name); |
| break; |
| } |
| break;} |
| case TTCN_EncDec::CT_TEXT: { |
| Limit_Token_List limit; |
| TTCN_EncDec_ErrorContext ec("While TEXT-decoding type '%s': ", p_td.name); |
| if(!p_td.text) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No TEXT descriptor available for type '%s'.", p_td.name); |
| const unsigned char *b_data=p_buf.get_data(); |
| if(b_data[p_buf.get_len()-1]!='\0'){ |
| p_buf.set_pos(p_buf.get_len()); |
| p_buf.put_zero(8,ORDER_LSB); |
| p_buf.rewind(); |
| } |
| if(TEXT_decode(p_td,p_buf,limit)<0) |
| ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name); |
| break;} |
| case TTCN_EncDec::CT_XER: { |
| TTCN_EncDec_ErrorContext ec("While XER-decoding type '%s': ", p_td.name); |
| unsigned XER_coding=va_arg(pvar, unsigned); |
| XER_encode_chk_coding(XER_coding, p_td); |
| XmlReaderWrap reader(p_buf); |
| for (int rd_ok=reader.Read(); rd_ok==1; rd_ok=reader.Read()) { |
| if (reader.NodeType() == XML_READER_TYPE_ELEMENT) break; |
| } |
| XER_decode(*(p_td.xer), reader, XER_coding | XER_TOPLEVEL, XER_NONE, 0); |
| size_t bytes = reader.ByteConsumed(); |
| p_buf.set_pos(bytes); |
| break;} |
| case TTCN_EncDec::CT_JSON: { |
| TTCN_EncDec_ErrorContext ec("While JSON-decoding type '%s': ", p_td.name); |
| if(!p_td.json) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No JSON descriptor available for type '%s'.", p_td.name); |
| JSON_Tokenizer tok((const char*)p_buf.get_data(), p_buf.get_len()); |
| if(JSON_decode(p_td, tok, FALSE)<0) |
| ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name); |
| p_buf.set_pos(tok.get_buf_pos()); |
| break;} |
| case TTCN_EncDec::CT_OER: { |
| TTCN_EncDec_ErrorContext ec("While OER-decoding type '%s': ", p_td.name); |
| if(!p_td.oer) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No OER descriptor available for type '%s'.", p_td.name); |
| OER_struct p_oer; |
| OER_decode(p_td, p_buf, p_oer); |
| break;} |
| default: |
| TTCN_error("Unknown coding method requested to decode type '%s'", p_td.name); |
| } |
| va_end(pvar); |
| } |
| |
| int EndOfMessageAcknowledgement::RAW_decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int limit, raw_order_t top_bit_ord, boolean no_err, int, boolean, const RAW_Force_Omit* force_omit) |
| { (void)no_err; |
| int prepaddlength=p_buf.increase_pos_padd(p_td.raw->prepadding); |
| limit-=prepaddlength; |
| size_t last_decoded_pos = p_buf.get_pos_bit(); |
| int decoded_length = 0; |
| int decoded_field_length = 0; |
| raw_order_t local_top_order; |
| if(p_td.raw->top_bit_order==TOP_BIT_INHERITED)local_top_order=top_bit_ord; |
| else if(p_td.raw->top_bit_order==TOP_BIT_RIGHT)local_top_order=ORDER_MSB; |
| else local_top_order=ORDER_LSB; |
| RAW_Force_Omit field_0_force_omit(0, force_omit, EndOfMessageAcknowledgement_ctrl_descr_.raw->forceomit); |
| decoded_field_length = field_ctrl.RAW_decode(EndOfMessageAcknowledgement_ctrl_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_0_force_omit); |
| if (decoded_field_length < 0) return decoded_field_length; |
| decoded_length+=decoded_field_length; |
| limit-=decoded_field_length; |
| last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit()); |
| RAW_Force_Omit field_1_force_omit(1, force_omit, IsobusMessageTypes::INT2_descr_.raw->forceomit); |
| decoded_field_length = field_msgSizeInByte.RAW_decode(IsobusMessageTypes::INT2_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_1_force_omit); |
| if (decoded_field_length < 0) return decoded_field_length; |
| decoded_length+=decoded_field_length; |
| limit-=decoded_field_length; |
| last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit()); |
| RAW_Force_Omit field_2_force_omit(2, force_omit, NUMBER__OF__PACKETS_descr_.raw->forceomit); |
| decoded_field_length = field_totalNumberOfPackets.RAW_decode(NUMBER__OF__PACKETS_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_2_force_omit); |
| if (decoded_field_length < 0) return decoded_field_length; |
| decoded_length+=decoded_field_length; |
| limit-=decoded_field_length; |
| last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit()); |
| RAW_Force_Omit field_3_force_omit(3, force_omit, EndOfMessageAcknowledgement_reserved5_descr_.raw->forceomit); |
| decoded_field_length = field_reserved5.RAW_decode(EndOfMessageAcknowledgement_reserved5_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_3_force_omit); |
| if (decoded_field_length < 0) return decoded_field_length; |
| decoded_length+=decoded_field_length; |
| limit-=decoded_field_length; |
| last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit()); |
| RAW_Force_Omit field_4_force_omit(4, force_omit, IsobusMessageTypes::PGN_descr_.raw->forceomit); |
| decoded_field_length = field_pgnOfMultiPacketMessage.RAW_decode(IsobusMessageTypes::PGN_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_4_force_omit); |
| if (decoded_field_length < 0) return decoded_field_length; |
| decoded_length+=decoded_field_length; |
| limit-=decoded_field_length; |
| last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit()); |
| p_buf.set_pos_bit(last_decoded_pos); |
| return decoded_length+prepaddlength+p_buf.increase_pos_padd(p_td.raw->padding); |
| } |
| |
| int EndOfMessageAcknowledgement::RAW_encode(const TTCN_Typedescriptor_t&, RAW_enc_tree& myleaf) const { |
| if (!is_bound()) TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_UNBOUND, "Encoding an unbound value."); |
| int encoded_length = 0; |
| myleaf.isleaf = FALSE; |
| myleaf.body.node.num_of_nodes = 5; |
| myleaf.body.node.nodes = init_nodes_of_enc_tree(5); |
| myleaf.body.node.nodes[0] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 0, EndOfMessageAcknowledgement_ctrl_descr_.raw); |
| myleaf.body.node.nodes[1] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 1, IsobusMessageTypes::INT2_descr_.raw); |
| myleaf.body.node.nodes[2] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 2, NUMBER__OF__PACKETS_descr_.raw); |
| myleaf.body.node.nodes[3] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 3, EndOfMessageAcknowledgement_reserved5_descr_.raw); |
| myleaf.body.node.nodes[4] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 4, IsobusMessageTypes::PGN_descr_.raw); |
| encoded_length += field_ctrl.RAW_encode(EndOfMessageAcknowledgement_ctrl_descr_, *myleaf.body.node.nodes[0]); |
| encoded_length += field_msgSizeInByte.RAW_encode(IsobusMessageTypes::INT2_descr_, *myleaf.body.node.nodes[1]); |
| encoded_length += field_totalNumberOfPackets.RAW_encode(NUMBER__OF__PACKETS_descr_, *myleaf.body.node.nodes[2]); |
| encoded_length += field_reserved5.RAW_encode(EndOfMessageAcknowledgement_reserved5_descr_, *myleaf.body.node.nodes[3]); |
| encoded_length += field_pgnOfMultiPacketMessage.RAW_encode(IsobusMessageTypes::PGN_descr_, *myleaf.body.node.nodes[4]); |
| return myleaf.length = encoded_length; |
| } |
| |
| struct EndOfMessageAcknowledgement_template::single_value_struct { |
| OCTETSTRING_template field_ctrl; |
| INTEGER_template field_msgSizeInByte; |
| INTEGER_template field_totalNumberOfPackets; |
| OCTETSTRING_template field_reserved5; |
| INTEGER_template field_pgnOfMultiPacketMessage; |
| }; |
| |
| void EndOfMessageAcknowledgement_template::set_specific() |
| { |
| if (template_selection != SPECIFIC_VALUE) { |
| template_sel old_selection = template_selection; |
| clean_up(); |
| single_value = new single_value_struct; |
| set_selection(SPECIFIC_VALUE); |
| if (old_selection == ANY_VALUE || old_selection == ANY_OR_OMIT) { |
| single_value->field_ctrl = ANY_VALUE; |
| single_value->field_msgSizeInByte = ANY_VALUE; |
| single_value->field_totalNumberOfPackets = ANY_VALUE; |
| single_value->field_reserved5 = ANY_VALUE; |
| single_value->field_pgnOfMultiPacketMessage = ANY_VALUE; |
| } |
| } |
| } |
| |
| void EndOfMessageAcknowledgement_template::copy_value(const EndOfMessageAcknowledgement& other_value) |
| { |
| single_value = new single_value_struct; |
| if (other_value.ctrl().is_bound()) { |
| single_value->field_ctrl = other_value.ctrl(); |
| } else { |
| single_value->field_ctrl.clean_up(); |
| } |
| if (other_value.msgSizeInByte().is_bound()) { |
| single_value->field_msgSizeInByte = other_value.msgSizeInByte(); |
| } else { |
| single_value->field_msgSizeInByte.clean_up(); |
| } |
| if (other_value.totalNumberOfPackets().is_bound()) { |
| single_value->field_totalNumberOfPackets = other_value.totalNumberOfPackets(); |
| } else { |
| single_value->field_totalNumberOfPackets.clean_up(); |
| } |
| if (other_value.reserved5().is_bound()) { |
| single_value->field_reserved5 = other_value.reserved5(); |
| } else { |
| single_value->field_reserved5.clean_up(); |
| } |
| if (other_value.pgnOfMultiPacketMessage().is_bound()) { |
| single_value->field_pgnOfMultiPacketMessage = other_value.pgnOfMultiPacketMessage(); |
| } else { |
| single_value->field_pgnOfMultiPacketMessage.clean_up(); |
| } |
| set_selection(SPECIFIC_VALUE); |
| } |
| |
| void EndOfMessageAcknowledgement_template::copy_template(const EndOfMessageAcknowledgement_template& other_value) |
| { |
| switch (other_value.template_selection) { |
| case SPECIFIC_VALUE: |
| single_value = new single_value_struct; |
| if (UNINITIALIZED_TEMPLATE != other_value.ctrl().get_selection()) { |
| single_value->field_ctrl = other_value.ctrl(); |
| } else { |
| single_value->field_ctrl.clean_up(); |
| } |
| if (UNINITIALIZED_TEMPLATE != other_value.msgSizeInByte().get_selection()) { |
| single_value->field_msgSizeInByte = other_value.msgSizeInByte(); |
| } else { |
| single_value->field_msgSizeInByte.clean_up(); |
| } |
| if (UNINITIALIZED_TEMPLATE != other_value.totalNumberOfPackets().get_selection()) { |
| single_value->field_totalNumberOfPackets = other_value.totalNumberOfPackets(); |
| } else { |
| single_value->field_totalNumberOfPackets.clean_up(); |
| } |
| if (UNINITIALIZED_TEMPLATE != other_value.reserved5().get_selection()) { |
| single_value->field_reserved5 = other_value.reserved5(); |
| } else { |
| single_value->field_reserved5.clean_up(); |
| } |
| if (UNINITIALIZED_TEMPLATE != other_value.pgnOfMultiPacketMessage().get_selection()) { |
| single_value->field_pgnOfMultiPacketMessage = other_value.pgnOfMultiPacketMessage(); |
| } else { |
| single_value->field_pgnOfMultiPacketMessage.clean_up(); |
| } |
| case OMIT_VALUE: |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| break; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| value_list.n_values = other_value.value_list.n_values; |
| value_list.list_value = new EndOfMessageAcknowledgement_template[value_list.n_values]; |
| for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) |
| value_list.list_value[list_count].copy_template(other_value.value_list.list_value[list_count]); |
| break; |
| default: |
| TTCN_error("Copying an uninitialized/unsupported template of type @IsobusCMMessageTypes.EndOfMessageAcknowledgement."); |
| break; |
| } |
| set_selection(other_value); |
| } |
| |
| EndOfMessageAcknowledgement_template::EndOfMessageAcknowledgement_template() |
| { |
| } |
| |
| EndOfMessageAcknowledgement_template::EndOfMessageAcknowledgement_template(template_sel other_value) |
| : Base_Template(other_value) |
| { |
| check_single_selection(other_value); |
| } |
| |
| EndOfMessageAcknowledgement_template::EndOfMessageAcknowledgement_template(const EndOfMessageAcknowledgement& other_value) |
| { |
| copy_value(other_value); |
| } |
| |
| EndOfMessageAcknowledgement_template::EndOfMessageAcknowledgement_template(const OPTIONAL<EndOfMessageAcknowledgement>& other_value) |
| { |
| switch (other_value.get_selection()) { |
| case OPTIONAL_PRESENT: |
| copy_value((const EndOfMessageAcknowledgement&)other_value); |
| break; |
| case OPTIONAL_OMIT: |
| set_selection(OMIT_VALUE); |
| break; |
| default: |
| TTCN_error("Creating a template of type @IsobusCMMessageTypes.EndOfMessageAcknowledgement from an unbound optional field."); |
| } |
| } |
| |
| EndOfMessageAcknowledgement_template::EndOfMessageAcknowledgement_template(const EndOfMessageAcknowledgement_template& other_value) |
| : Base_Template() |
| { |
| copy_template(other_value); |
| } |
| |
| EndOfMessageAcknowledgement_template::~EndOfMessageAcknowledgement_template() |
| { |
| clean_up(); |
| } |
| |
| EndOfMessageAcknowledgement_template& EndOfMessageAcknowledgement_template::operator=(template_sel other_value) |
| { |
| check_single_selection(other_value); |
| clean_up(); |
| set_selection(other_value); |
| return *this; |
| } |
| |
| EndOfMessageAcknowledgement_template& EndOfMessageAcknowledgement_template::operator=(const EndOfMessageAcknowledgement& other_value) |
| { |
| clean_up(); |
| copy_value(other_value); |
| return *this; |
| } |
| |
| EndOfMessageAcknowledgement_template& EndOfMessageAcknowledgement_template::operator=(const OPTIONAL<EndOfMessageAcknowledgement>& other_value) |
| { |
| clean_up(); |
| switch (other_value.get_selection()) { |
| case OPTIONAL_PRESENT: |
| copy_value((const EndOfMessageAcknowledgement&)other_value); |
| break; |
| case OPTIONAL_OMIT: |
| set_selection(OMIT_VALUE); |
| break; |
| default: |
| TTCN_error("Assignment of an unbound optional field to a template of type @IsobusCMMessageTypes.EndOfMessageAcknowledgement."); |
| } |
| return *this; |
| } |
| |
| EndOfMessageAcknowledgement_template& EndOfMessageAcknowledgement_template::operator=(const EndOfMessageAcknowledgement_template& other_value) |
| { |
| if (&other_value != this) { |
| clean_up(); |
| copy_template(other_value); |
| } |
| return *this; |
| } |
| |
| boolean EndOfMessageAcknowledgement_template::match(const EndOfMessageAcknowledgement& other_value, boolean legacy) const |
| { |
| if (!other_value.is_bound()) return FALSE; |
| switch (template_selection) { |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| return TRUE; |
| case OMIT_VALUE: |
| return FALSE; |
| case SPECIFIC_VALUE: |
| if(!other_value.ctrl().is_bound()) return FALSE; |
| if(!single_value->field_ctrl.match(other_value.ctrl(), legacy))return FALSE; |
| if(!other_value.msgSizeInByte().is_bound()) return FALSE; |
| if(!single_value->field_msgSizeInByte.match(other_value.msgSizeInByte(), legacy))return FALSE; |
| if(!other_value.totalNumberOfPackets().is_bound()) return FALSE; |
| if(!single_value->field_totalNumberOfPackets.match(other_value.totalNumberOfPackets(), legacy))return FALSE; |
| if(!other_value.reserved5().is_bound()) return FALSE; |
| if(!single_value->field_reserved5.match(other_value.reserved5(), legacy))return FALSE; |
| if(!other_value.pgnOfMultiPacketMessage().is_bound()) return FALSE; |
| if(!single_value->field_pgnOfMultiPacketMessage.match(other_value.pgnOfMultiPacketMessage(), legacy))return FALSE; |
| return TRUE; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) |
| if (value_list.list_value[list_count].match(other_value, legacy)) return template_selection == VALUE_LIST; |
| return template_selection == COMPLEMENTED_LIST; |
| default: |
| TTCN_error("Matching an uninitialized/unsupported template of type @IsobusCMMessageTypes.EndOfMessageAcknowledgement."); |
| } |
| return FALSE; |
| } |
| |
| boolean EndOfMessageAcknowledgement_template::is_bound() const |
| { |
| if (template_selection == UNINITIALIZED_TEMPLATE && !is_ifpresent) return FALSE; |
| if (template_selection != SPECIFIC_VALUE) return TRUE; |
| return single_value->field_ctrl.is_bound() |
| |
| ||single_value->field_msgSizeInByte.is_bound() |
| |
| ||single_value->field_totalNumberOfPackets.is_bound() |
| |
| ||single_value->field_reserved5.is_bound() |
| |
| ||single_value->field_pgnOfMultiPacketMessage.is_bound() |
| ; |
| } |
| |
| boolean EndOfMessageAcknowledgement_template::is_value() const |
| { |
| if (template_selection != SPECIFIC_VALUE || is_ifpresent) return FALSE; |
| return single_value->field_ctrl.is_value() |
| &&single_value->field_msgSizeInByte.is_value() |
| &&single_value->field_totalNumberOfPackets.is_value() |
| &&single_value->field_reserved5.is_value() |
| &&single_value->field_pgnOfMultiPacketMessage.is_value(); |
| } |
| |
| void EndOfMessageAcknowledgement_template::clean_up() |
| { |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| delete single_value; |
| break; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| delete [] value_list.list_value; |
| default: |
| break; |
| } |
| template_selection = UNINITIALIZED_TEMPLATE; |
| } |
| |
| EndOfMessageAcknowledgement EndOfMessageAcknowledgement_template::valueof() const |
| { |
| if (template_selection != SPECIFIC_VALUE || is_ifpresent) |
| TTCN_error("Performing a valueof or send operation on a non-specific template of type @IsobusCMMessageTypes.EndOfMessageAcknowledgement."); |
| EndOfMessageAcknowledgement ret_val; |
| if (single_value->field_ctrl.is_bound()) { |
| ret_val.ctrl() = single_value->field_ctrl.valueof(); |
| } |
| if (single_value->field_msgSizeInByte.is_bound()) { |
| ret_val.msgSizeInByte() = single_value->field_msgSizeInByte.valueof(); |
| } |
| if (single_value->field_totalNumberOfPackets.is_bound()) { |
| ret_val.totalNumberOfPackets() = single_value->field_totalNumberOfPackets.valueof(); |
| } |
| if (single_value->field_reserved5.is_bound()) { |
| ret_val.reserved5() = single_value->field_reserved5.valueof(); |
| } |
| if (single_value->field_pgnOfMultiPacketMessage.is_bound()) { |
| ret_val.pgnOfMultiPacketMessage() = single_value->field_pgnOfMultiPacketMessage.valueof(); |
| } |
| return ret_val; |
| } |
| |
| void EndOfMessageAcknowledgement_template::set_type(template_sel template_type, unsigned int list_length) |
| { |
| if (template_type != VALUE_LIST && template_type != COMPLEMENTED_LIST) |
| TTCN_error("Setting an invalid list for a template of type @IsobusCMMessageTypes.EndOfMessageAcknowledgement."); |
| clean_up(); |
| set_selection(template_type); |
| value_list.n_values = list_length; |
| value_list.list_value = new EndOfMessageAcknowledgement_template[list_length]; |
| } |
| |
| EndOfMessageAcknowledgement_template& EndOfMessageAcknowledgement_template::list_item(unsigned int list_index) const |
| { |
| if (template_selection != VALUE_LIST && template_selection != COMPLEMENTED_LIST) |
| TTCN_error("Accessing a list element of a non-list template of type @IsobusCMMessageTypes.EndOfMessageAcknowledgement."); |
| if (list_index >= value_list.n_values) |
| TTCN_error("Index overflow in a value list template of type @IsobusCMMessageTypes.EndOfMessageAcknowledgement."); |
| return value_list.list_value[list_index]; |
| } |
| |
| OCTETSTRING_template& EndOfMessageAcknowledgement_template::ctrl() |
| { |
| set_specific(); |
| return single_value->field_ctrl; |
| } |
| |
| const OCTETSTRING_template& EndOfMessageAcknowledgement_template::ctrl() const |
| { |
| if (template_selection != SPECIFIC_VALUE) |
| TTCN_error("Accessing field ctrl of a non-specific template of type @IsobusCMMessageTypes.EndOfMessageAcknowledgement."); |
| return single_value->field_ctrl; |
| } |
| |
| INTEGER_template& EndOfMessageAcknowledgement_template::msgSizeInByte() |
| { |
| set_specific(); |
| return single_value->field_msgSizeInByte; |
| } |
| |
| const INTEGER_template& EndOfMessageAcknowledgement_template::msgSizeInByte() const |
| { |
| if (template_selection != SPECIFIC_VALUE) |
| TTCN_error("Accessing field msgSizeInByte of a non-specific template of type @IsobusCMMessageTypes.EndOfMessageAcknowledgement."); |
| return single_value->field_msgSizeInByte; |
| } |
| |
| INTEGER_template& EndOfMessageAcknowledgement_template::totalNumberOfPackets() |
| { |
| set_specific(); |
| return single_value->field_totalNumberOfPackets; |
| } |
| |
| const INTEGER_template& EndOfMessageAcknowledgement_template::totalNumberOfPackets() const |
| { |
| if (template_selection != SPECIFIC_VALUE) |
| TTCN_error("Accessing field totalNumberOfPackets of a non-specific template of type @IsobusCMMessageTypes.EndOfMessageAcknowledgement."); |
| return single_value->field_totalNumberOfPackets; |
| } |
| |
| OCTETSTRING_template& EndOfMessageAcknowledgement_template::reserved5() |
| { |
| set_specific(); |
| return single_value->field_reserved5; |
| } |
| |
| const OCTETSTRING_template& EndOfMessageAcknowledgement_template::reserved5() const |
| { |
| if (template_selection != SPECIFIC_VALUE) |
| TTCN_error("Accessing field reserved5 of a non-specific template of type @IsobusCMMessageTypes.EndOfMessageAcknowledgement."); |
| return single_value->field_reserved5; |
| } |
| |
| INTEGER_template& EndOfMessageAcknowledgement_template::pgnOfMultiPacketMessage() |
| { |
| set_specific(); |
| return single_value->field_pgnOfMultiPacketMessage; |
| } |
| |
| const INTEGER_template& EndOfMessageAcknowledgement_template::pgnOfMultiPacketMessage() const |
| { |
| if (template_selection != SPECIFIC_VALUE) |
| TTCN_error("Accessing field pgnOfMultiPacketMessage of a non-specific template of type @IsobusCMMessageTypes.EndOfMessageAcknowledgement."); |
| return single_value->field_pgnOfMultiPacketMessage; |
| } |
| |
| int EndOfMessageAcknowledgement_template::size_of() const |
| { |
| if (is_ifpresent) TTCN_error("Performing sizeof() operation on a template of type @IsobusCMMessageTypes.EndOfMessageAcknowledgement which has an ifpresent attribute."); |
| switch (template_selection) |
| { |
| case SPECIFIC_VALUE: |
| return 5; |
| case VALUE_LIST: |
| { |
| if (value_list.n_values<1) |
| TTCN_error("Internal error: Performing sizeof() operation on a template of type @IsobusCMMessageTypes.EndOfMessageAcknowledgement containing an empty list."); |
| int item_size = value_list.list_value[0].size_of(); |
| for (unsigned int l_idx = 1; l_idx < value_list.n_values; l_idx++) |
| { |
| if (value_list.list_value[l_idx].size_of()!=item_size) |
| TTCN_error("Performing sizeof() operation on a template of type @IsobusCMMessageTypes.EndOfMessageAcknowledgement containing a value list with different sizes."); |
| } |
| return item_size; |
| } |
| case OMIT_VALUE: |
| TTCN_error("Performing sizeof() operation on a template of type @IsobusCMMessageTypes.EndOfMessageAcknowledgement containing omit value."); |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| TTCN_error("Performing sizeof() operation on a template of type @IsobusCMMessageTypes.EndOfMessageAcknowledgement containing */? value."); |
| case COMPLEMENTED_LIST: |
| TTCN_error("Performing sizeof() operation on a template of type @IsobusCMMessageTypes.EndOfMessageAcknowledgement containing complemented list."); |
| default: |
| TTCN_error("Performing sizeof() operation on an uninitialized/unsupported template of type @IsobusCMMessageTypes.EndOfMessageAcknowledgement."); |
| } |
| return 0; |
| } |
| |
| void EndOfMessageAcknowledgement_template::log() const |
| { |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| TTCN_Logger::log_event_str("{ ctrl := "); |
| single_value->field_ctrl.log(); |
| TTCN_Logger::log_event_str(", msgSizeInByte := "); |
| single_value->field_msgSizeInByte.log(); |
| TTCN_Logger::log_event_str(", totalNumberOfPackets := "); |
| single_value->field_totalNumberOfPackets.log(); |
| TTCN_Logger::log_event_str(", reserved5 := "); |
| single_value->field_reserved5.log(); |
| TTCN_Logger::log_event_str(", pgnOfMultiPacketMessage := "); |
| single_value->field_pgnOfMultiPacketMessage.log(); |
| TTCN_Logger::log_event_str(" }"); |
| break; |
| case COMPLEMENTED_LIST: |
| TTCN_Logger::log_event_str("complement"); |
| case VALUE_LIST: |
| TTCN_Logger::log_char('('); |
| for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) { |
| if (list_count > 0) TTCN_Logger::log_event_str(", "); |
| value_list.list_value[list_count].log(); |
| } |
| TTCN_Logger::log_char(')'); |
| break; |
| default: |
| log_generic(); |
| } |
| log_ifpresent(); |
| } |
| |
| void EndOfMessageAcknowledgement_template::log_match(const EndOfMessageAcknowledgement& match_value, boolean legacy) const |
| { |
| if(TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity()){ |
| if(match(match_value, legacy)){ |
| TTCN_Logger::print_logmatch_buffer(); |
| TTCN_Logger::log_event_str(" matched"); |
| } else{ |
| if (template_selection == SPECIFIC_VALUE) { |
| size_t previous_size = TTCN_Logger::get_logmatch_buffer_len(); |
| if(!single_value->field_ctrl.match(match_value.ctrl(), legacy)){ |
| TTCN_Logger::log_logmatch_info(".ctrl"); |
| single_value->field_ctrl.log_match(match_value.ctrl(), legacy); |
| TTCN_Logger::set_logmatch_buffer_len(previous_size); |
| } |
| if(!single_value->field_msgSizeInByte.match(match_value.msgSizeInByte(), legacy)){ |
| TTCN_Logger::log_logmatch_info(".msgSizeInByte"); |
| single_value->field_msgSizeInByte.log_match(match_value.msgSizeInByte(), legacy); |
| TTCN_Logger::set_logmatch_buffer_len(previous_size); |
| } |
| if(!single_value->field_totalNumberOfPackets.match(match_value.totalNumberOfPackets(), legacy)){ |
| TTCN_Logger::log_logmatch_info(".totalNumberOfPackets"); |
| single_value->field_totalNumberOfPackets.log_match(match_value.totalNumberOfPackets(), legacy); |
| TTCN_Logger::set_logmatch_buffer_len(previous_size); |
| } |
| if(!single_value->field_reserved5.match(match_value.reserved5(), legacy)){ |
| TTCN_Logger::log_logmatch_info(".reserved5"); |
| single_value->field_reserved5.log_match(match_value.reserved5(), legacy); |
| TTCN_Logger::set_logmatch_buffer_len(previous_size); |
| } |
| if(!single_value->field_pgnOfMultiPacketMessage.match(match_value.pgnOfMultiPacketMessage(), legacy)){ |
| TTCN_Logger::log_logmatch_info(".pgnOfMultiPacketMessage"); |
| single_value->field_pgnOfMultiPacketMessage.log_match(match_value.pgnOfMultiPacketMessage(), legacy); |
| TTCN_Logger::set_logmatch_buffer_len(previous_size); |
| } |
| }else { |
| TTCN_Logger::print_logmatch_buffer(); |
| match_value.log(); |
| TTCN_Logger::log_event_str(" with "); |
| log(); |
| TTCN_Logger::log_event_str(" unmatched"); |
| } |
| } |
| return; |
| } |
| if (template_selection == SPECIFIC_VALUE) { |
| TTCN_Logger::log_event_str("{ ctrl := "); |
| single_value->field_ctrl.log_match(match_value.ctrl(), legacy); |
| TTCN_Logger::log_event_str(", msgSizeInByte := "); |
| single_value->field_msgSizeInByte.log_match(match_value.msgSizeInByte(), legacy); |
| TTCN_Logger::log_event_str(", totalNumberOfPackets := "); |
| single_value->field_totalNumberOfPackets.log_match(match_value.totalNumberOfPackets(), legacy); |
| TTCN_Logger::log_event_str(", reserved5 := "); |
| single_value->field_reserved5.log_match(match_value.reserved5(), legacy); |
| TTCN_Logger::log_event_str(", pgnOfMultiPacketMessage := "); |
| single_value->field_pgnOfMultiPacketMessage.log_match(match_value.pgnOfMultiPacketMessage(), legacy); |
| TTCN_Logger::log_event_str(" }"); |
| } else { |
| match_value.log(); |
| TTCN_Logger::log_event_str(" with "); |
| log(); |
| if (match(match_value, legacy)) TTCN_Logger::log_event_str(" matched"); |
| else TTCN_Logger::log_event_str(" unmatched"); |
| } |
| } |
| |
| void EndOfMessageAcknowledgement_template::encode_text(Text_Buf& text_buf) const |
| { |
| encode_text_base(text_buf); |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| single_value->field_ctrl.encode_text(text_buf); |
| single_value->field_msgSizeInByte.encode_text(text_buf); |
| single_value->field_totalNumberOfPackets.encode_text(text_buf); |
| single_value->field_reserved5.encode_text(text_buf); |
| single_value->field_pgnOfMultiPacketMessage.encode_text(text_buf); |
| case OMIT_VALUE: |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| break; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| text_buf.push_int(value_list.n_values); |
| for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) |
| value_list.list_value[list_count].encode_text(text_buf); |
| break; |
| default: |
| TTCN_error("Text encoder: Encoding an uninitialized/unsupported template of type @IsobusCMMessageTypes.EndOfMessageAcknowledgement."); |
| } |
| } |
| |
| void EndOfMessageAcknowledgement_template::decode_text(Text_Buf& text_buf) |
| { |
| clean_up(); |
| decode_text_base(text_buf); |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| single_value = new single_value_struct; |
| single_value->field_ctrl.decode_text(text_buf); |
| single_value->field_msgSizeInByte.decode_text(text_buf); |
| single_value->field_totalNumberOfPackets.decode_text(text_buf); |
| single_value->field_reserved5.decode_text(text_buf); |
| single_value->field_pgnOfMultiPacketMessage.decode_text(text_buf); |
| case OMIT_VALUE: |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| break; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| value_list.n_values = text_buf.pull_int().get_val(); |
| value_list.list_value = new EndOfMessageAcknowledgement_template[value_list.n_values]; |
| for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) |
| value_list.list_value[list_count].decode_text(text_buf); |
| break; |
| default: |
| TTCN_error("Text decoder: An unknown/unsupported selection was received in a template of type @IsobusCMMessageTypes.EndOfMessageAcknowledgement."); |
| } |
| } |
| |
| void EndOfMessageAcknowledgement_template::set_param(Module_Param& param) |
| { |
| param.basic_check(Module_Param::BC_TEMPLATE, "record template"); |
| switch (param.get_type()) { |
| case Module_Param::MP_Omit: |
| *this = OMIT_VALUE; |
| break; |
| case Module_Param::MP_Any: |
| *this = ANY_VALUE; |
| break; |
| case Module_Param::MP_AnyOrNone: |
| *this = ANY_OR_OMIT; |
| break; |
| case Module_Param::MP_List_Template: |
| case Module_Param::MP_ComplementList_Template: { |
| EndOfMessageAcknowledgement_template new_temp; |
| new_temp.set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : COMPLEMENTED_LIST, param.get_size()); |
| for (size_t p_i=0; p_i<param.get_size(); p_i++) { |
| new_temp.list_item(p_i).set_param(*param.get_elem(p_i)); |
| } |
| *this = new_temp; |
| break; } |
| case Module_Param::MP_Value_List: |
| if (5<param.get_size()) { |
| param.error("record template of type @IsobusCMMessageTypes.EndOfMessageAcknowledgement has 5 fields but list value has %d fields", (int)param.get_size()); |
| } |
| if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) ctrl().set_param(*param.get_elem(0)); |
| if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) msgSizeInByte().set_param(*param.get_elem(1)); |
| if (param.get_size()>2 && param.get_elem(2)->get_type()!=Module_Param::MP_NotUsed) totalNumberOfPackets().set_param(*param.get_elem(2)); |
| if (param.get_size()>3 && param.get_elem(3)->get_type()!=Module_Param::MP_NotUsed) reserved5().set_param(*param.get_elem(3)); |
| if (param.get_size()>4 && param.get_elem(4)->get_type()!=Module_Param::MP_NotUsed) pgnOfMultiPacketMessage().set_param(*param.get_elem(4)); |
| break; |
| case Module_Param::MP_Assignment_List: { |
| Vector<bool> value_used(param.get_size()); |
| value_used.resize(param.get_size(), FALSE); |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "ctrl")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| ctrl().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "msgSizeInByte")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| msgSizeInByte().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "totalNumberOfPackets")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| totalNumberOfPackets().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "reserved5")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| reserved5().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "pgnOfMultiPacketMessage")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| pgnOfMultiPacketMessage().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| curr_param->error("Non existent field name in type @IsobusCMMessageTypes.EndOfMessageAcknowledgement: %s", curr_param->get_id()->get_name()); |
| break; |
| } |
| } break; |
| default: |
| param.type_error("record template", "@IsobusCMMessageTypes.EndOfMessageAcknowledgement"); |
| } |
| is_ifpresent = param.get_ifpresent(); |
| } |
| |
| void EndOfMessageAcknowledgement_template::check_restriction(template_res t_res, const char* t_name, boolean legacy) const |
| { |
| if (template_selection==UNINITIALIZED_TEMPLATE) return; |
| switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) { |
| case TR_OMIT: |
| if (template_selection==OMIT_VALUE) return; |
| case TR_VALUE: |
| if (template_selection!=SPECIFIC_VALUE || is_ifpresent) break; |
| single_value->field_ctrl.check_restriction(t_res, t_name ? t_name : "@IsobusCMMessageTypes.EndOfMessageAcknowledgement"); |
| single_value->field_msgSizeInByte.check_restriction(t_res, t_name ? t_name : "@IsobusCMMessageTypes.EndOfMessageAcknowledgement"); |
| single_value->field_totalNumberOfPackets.check_restriction(t_res, t_name ? t_name : "@IsobusCMMessageTypes.EndOfMessageAcknowledgement"); |
| single_value->field_reserved5.check_restriction(t_res, t_name ? t_name : "@IsobusCMMessageTypes.EndOfMessageAcknowledgement"); |
| single_value->field_pgnOfMultiPacketMessage.check_restriction(t_res, t_name ? t_name : "@IsobusCMMessageTypes.EndOfMessageAcknowledgement"); |
| return; |
| case TR_PRESENT: |
| if (!match_omit(legacy)) return; |
| break; |
| default: |
| return; |
| } |
| TTCN_error("Restriction `%s' on template of type %s violated.", get_res_name(t_res), t_name ? t_name : "@IsobusCMMessageTypes.EndOfMessageAcknowledgement"); |
| } |
| |
| boolean EndOfMessageAcknowledgement_template::is_present(boolean legacy) const |
| { |
| if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE; |
| return !match_omit(legacy); |
| } |
| |
| boolean EndOfMessageAcknowledgement_template::match_omit(boolean legacy) const |
| { |
| if (is_ifpresent) return TRUE; |
| switch (template_selection) { |
| case OMIT_VALUE: |
| case ANY_OR_OMIT: |
| return TRUE; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| if (legacy) { |
| for (unsigned int l_idx=0; l_idx<value_list.n_values; l_idx++) |
| if (value_list.list_value[l_idx].match_omit()) |
| return template_selection==VALUE_LIST; |
| return template_selection==COMPLEMENTED_LIST; |
| } // else fall through |
| default: |
| return FALSE; |
| } |
| return FALSE; |
| } |
| |
| e__ConnectionAbort__AbortReason::e__ConnectionAbort__AbortReason() |
| { |
| enum_value = UNBOUND_VALUE; |
| } |
| |
| e__ConnectionAbort__AbortReason::e__ConnectionAbort__AbortReason(int other_value) |
| { |
| if (!is_valid_enum(other_value)) TTCN_error("Initializing a variable of enumerated type @IsobusCMMessageTypes.e_ConnectionAbort_AbortReason with invalid numeric value %d.", other_value); |
| enum_value = (enum_type)other_value; |
| } |
| |
| e__ConnectionAbort__AbortReason::e__ConnectionAbort__AbortReason(enum_type other_value) |
| { |
| enum_value = other_value; |
| } |
| |
| e__ConnectionAbort__AbortReason::e__ConnectionAbort__AbortReason(const e__ConnectionAbort__AbortReason& other_value) |
| : Base_Type() |
| { |
| if (other_value.enum_value == UNBOUND_VALUE) TTCN_error("Copying an unbound value of enumerated type @IsobusCMMessageTypes.e_ConnectionAbort_AbortReason."); |
| enum_value = other_value.enum_value; |
| } |
| |
| e__ConnectionAbort__AbortReason& e__ConnectionAbort__AbortReason::operator=(int other_value) |
| { |
| if (!is_valid_enum(other_value)) TTCN_error("Assigning unknown numeric value %d to a variable of enumerated type @IsobusCMMessageTypes.e_ConnectionAbort_AbortReason.", other_value); |
| enum_value = (enum_type)other_value; |
| return *this; |
| } |
| |
| e__ConnectionAbort__AbortReason& e__ConnectionAbort__AbortReason::operator=(enum_type other_value) |
| { |
| enum_value = other_value; |
| return *this; |
| } |
| |
| e__ConnectionAbort__AbortReason& e__ConnectionAbort__AbortReason::operator=(const e__ConnectionAbort__AbortReason& other_value) |
| { |
| if (other_value.enum_value == UNBOUND_VALUE) TTCN_error("Assignment of an unbound value of enumerated type @IsobusCMMessageTypes.e_ConnectionAbort_AbortReason."); |
| enum_value = other_value.enum_value; |
| return *this; |
| } |
| |
| boolean e__ConnectionAbort__AbortReason::operator==(enum_type other_value) const |
| { |
| if (enum_value == UNBOUND_VALUE) TTCN_error("The left operand of comparison is an unbound value of enumerated type @IsobusCMMessageTypes.e_ConnectionAbort_AbortReason."); |
| return enum_value == other_value; |
| } |
| |
| boolean e__ConnectionAbort__AbortReason::operator==(const e__ConnectionAbort__AbortReason& other_value) const |
| { |
| if (enum_value == UNBOUND_VALUE) TTCN_error("The left operand of comparison is an unbound value of enumerated type @IsobusCMMessageTypes.e_ConnectionAbort_AbortReason."); |
| if (other_value.enum_value == UNBOUND_VALUE) TTCN_error("The right operand of comparison is an unbound value of enumerated type @IsobusCMMessageTypes.e_ConnectionAbort_AbortReason."); |
| return enum_value == other_value.enum_value; |
| } |
| |
| boolean e__ConnectionAbort__AbortReason::operator<(enum_type other_value) const |
| { |
| if (enum_value == UNBOUND_VALUE) TTCN_error("The left operand of comparison is an unbound value of enumerated type @IsobusCMMessageTypes.e_ConnectionAbort_AbortReason."); |
| return enum_value < other_value; |
| } |
| |
| boolean e__ConnectionAbort__AbortReason::operator<(const e__ConnectionAbort__AbortReason& other_value) const |
| { |
| if (enum_value == UNBOUND_VALUE) TTCN_error("The left operand of comparison is an unbound value of enumerated type @IsobusCMMessageTypes.e_ConnectionAbort_AbortReason."); |
| if (other_value.enum_value == UNBOUND_VALUE) TTCN_error("The right operand of comparison is an unbound value of enumerated type @IsobusCMMessageTypes.e_ConnectionAbort_AbortReason."); |
| return enum_value < other_value.enum_value; |
| } |
| |
| boolean e__ConnectionAbort__AbortReason::operator>(enum_type other_value) const |
| { |
| if (enum_value == UNBOUND_VALUE) TTCN_error("The left operand of comparison is an unbound value of enumerated type @IsobusCMMessageTypes.e_ConnectionAbort_AbortReason."); |
| return enum_value > other_value; |
| } |
| |
| boolean e__ConnectionAbort__AbortReason::operator>(const e__ConnectionAbort__AbortReason& other_value) const |
| { |
| if (enum_value == UNBOUND_VALUE) TTCN_error("The left operand of comparison is an unbound value of enumerated type @IsobusCMMessageTypes.e_ConnectionAbort_AbortReason."); |
| if (other_value.enum_value == UNBOUND_VALUE) TTCN_error("The right operand of comparison is an unbound value of enumerated type @IsobusCMMessageTypes.e_ConnectionAbort_AbortReason."); |
| return enum_value > other_value.enum_value; |
| } |
| |
| const char *e__ConnectionAbort__AbortReason::enum_to_str(enum_type enum_par) |
| { |
| switch (enum_par) { |
| case alreadyInOneOrMoreConnectionManagedSessionsAndCannotSupportAnother: return "alreadyInOneOrMoreConnectionManagedSessionsAndCannotSupportAnother"; |
| case systemResourcesWereNeededForAnotherTaskSoThisConnectionManagedSessionWasTerminated: return "systemResourcesWereNeededForAnotherTaskSoThisConnectionManagedSessionWasTerminated"; |
| case aTimeoutOccurredAndThisIsTheConnectionAbortToCloseTheSession: return "aTimeoutOccurredAndThisIsTheConnectionAbortToCloseTheSession"; |
| case cts__MessagesReceivedWhenDataTransferIsInProgress: return "cts_MessagesReceivedWhenDataTransferIsInProgress"; |
| case maximumRetransmitRequestLimitReached: return "maximumRetransmitRequestLimitReached"; |
| case unexpectedDataTransferPacket: return "unexpectedDataTransferPacket"; |
| case badSequenceNumber: return "badSequenceNumber"; |
| case duplicateSequenceNumber: return "duplicateSequenceNumber"; |
| case iso__11783__7__error__code__251: return "iso_11783_7_error_code_251"; |
| case iso__11783__7__error__code__252: return "iso_11783_7_error_code_252"; |
| case iso__11783__7__error__code__253: return "iso_11783_7_error_code_253"; |
| case iso__11783__7__error__code__254: return "iso_11783_7_error_code_254"; |
| case iso__11783__7__error__code__255: return "iso_11783_7_error_code_255"; |
| default: return "<unknown>"; |
| } |
| } |
| |
| e__ConnectionAbort__AbortReason::enum_type e__ConnectionAbort__AbortReason::str_to_enum(const char *str_par) |
| { |
| if (!strcmp(str_par, "alreadyInOneOrMoreConnectionManagedSessionsAndCannotSupportAnother")) return alreadyInOneOrMoreConnectionManagedSessionsAndCannotSupportAnother; |
| else if (!strcmp(str_par, "systemResourcesWereNeededForAnotherTaskSoThisConnectionManagedSessionWasTerminated")) return systemResourcesWereNeededForAnotherTaskSoThisConnectionManagedSessionWasTerminated; |
| else if (!strcmp(str_par, "aTimeoutOccurredAndThisIsTheConnectionAbortToCloseTheSession")) return aTimeoutOccurredAndThisIsTheConnectionAbortToCloseTheSession; |
| else if (!strcmp(str_par, "cts_MessagesReceivedWhenDataTransferIsInProgress")) return cts__MessagesReceivedWhenDataTransferIsInProgress; |
| else if (!strcmp(str_par, "maximumRetransmitRequestLimitReached")) return maximumRetransmitRequestLimitReached; |
| else if (!strcmp(str_par, "unexpectedDataTransferPacket")) return unexpectedDataTransferPacket; |
| else if (!strcmp(str_par, "badSequenceNumber")) return badSequenceNumber; |
| else if (!strcmp(str_par, "duplicateSequenceNumber")) return duplicateSequenceNumber; |
| else if (!strcmp(str_par, "iso_11783_7_error_code_251")) return iso__11783__7__error__code__251; |
| else if (!strcmp(str_par, "iso_11783_7_error_code_252")) return iso__11783__7__error__code__252; |
| else if (!strcmp(str_par, "iso_11783_7_error_code_253")) return iso__11783__7__error__code__253; |
| else if (!strcmp(str_par, "iso_11783_7_error_code_254")) return iso__11783__7__error__code__254; |
| else if (!strcmp(str_par, "iso_11783_7_error_code_255")) return iso__11783__7__error__code__255; |
| else return UNKNOWN_VALUE; |
| } |
| |
| boolean e__ConnectionAbort__AbortReason::is_valid_enum(int int_par) |
| { |
| switch (int_par) { |
| case 1: |
| case 2: |
| case 3: |
| case 4: |
| case 5: |
| case 6: |
| case 7: |
| case 8: |
| case 251: |
| case 252: |
| case 253: |
| case 254: |
| case 255: |
| return TRUE; |
| default: |
| return FALSE; |
| } |
| } |
| |
| int e__ConnectionAbort__AbortReason::enum2int(enum_type enum_par) |
| { |
| if (enum_par==UNBOUND_VALUE || enum_par==UNKNOWN_VALUE) TTCN_error("The argument of function enum2int() is an %s value of enumerated type @IsobusCMMessageTypes.e_ConnectionAbort_AbortReason.", enum_par==UNBOUND_VALUE?"unbound":"invalid"); |
| return enum_par; |
| } |
| |
| int e__ConnectionAbort__AbortReason::enum2int(const e__ConnectionAbort__AbortReason& enum_par) |
| { |
| if (enum_par.enum_value==UNBOUND_VALUE || enum_par.enum_value==UNKNOWN_VALUE) TTCN_error("The argument of function enum2int() is an %s value of enumerated type @IsobusCMMessageTypes.e_ConnectionAbort_AbortReason.", enum_par==UNBOUND_VALUE?"unbound":"invalid"); |
| return enum_par.enum_value; |
| } |
| |
| void e__ConnectionAbort__AbortReason::int2enum(int int_val) |
| { |
| if (!is_valid_enum(int_val)) TTCN_error("Assigning invalid numeric value %d to a variable of enumerated type @IsobusCMMessageTypes.e_ConnectionAbort_AbortReason.", int_val); |
| enum_value = (enum_type)int_val; |
| } |
| |
| e__ConnectionAbort__AbortReason::operator e__ConnectionAbort__AbortReason::enum_type() const |
| { |
| if (enum_value == UNBOUND_VALUE) TTCN_error("Using the value of an unbound variable of enumerated type @IsobusCMMessageTypes.e_ConnectionAbort_AbortReason."); |
| return enum_value; |
| } |
| |
| void e__ConnectionAbort__AbortReason::log() const |
| { |
| if (enum_value != UNBOUND_VALUE) TTCN_Logger::log_event_enum(enum_to_str(enum_value), enum_value); |
| else TTCN_Logger::log_event_unbound(); |
| } |
| |
| void e__ConnectionAbort__AbortReason::set_param(Module_Param& param) |
| { |
| param.basic_check(Module_Param::BC_VALUE, "enumerated value"); |
| if (param.get_type()!=Module_Param::MP_Enumerated) param.type_error("enumerated value", "@IsobusCMMessageTypes.e_ConnectionAbort_AbortReason"); |
| enum_value = str_to_enum(param.get_enumerated()); |
| if (!is_valid_enum(enum_value)) { |
| param.error("Invalid enumerated value for type @IsobusCMMessageTypes.e_ConnectionAbort_AbortReason."); |
| } |
| } |
| |
| void e__ConnectionAbort__AbortReason::encode_text(Text_Buf& text_buf) const |
| { |
| if (enum_value == UNBOUND_VALUE) TTCN_error("Text encoder: Encoding an unbound value of enumerated type @IsobusCMMessageTypes.e_ConnectionAbort_AbortReason."); |
| text_buf.push_int(enum_value); |
| } |
| |
| void e__ConnectionAbort__AbortReason::decode_text(Text_Buf& text_buf) |
| { |
| enum_value = (enum_type)text_buf.pull_int().get_val(); |
| if (!is_valid_enum(enum_value)) TTCN_error("Text decoder: Unknown numeric value %d was received for enumerated type @IsobusCMMessageTypes.e_ConnectionAbort_AbortReason.", enum_value); |
| } |
| |
| void e__ConnectionAbort__AbortReason::encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, TTCN_EncDec::coding_t p_coding, ...) const |
| { |
| va_list pvar; |
| va_start(pvar, p_coding); |
| switch(p_coding) { |
| case TTCN_EncDec::CT_BER: { |
| TTCN_EncDec_ErrorContext ec("While BER-encoding type '%s': ", p_td.name); |
| unsigned BER_coding=va_arg(pvar, unsigned); |
| BER_encode_chk_coding(BER_coding); |
| ASN_BER_TLV_t *tlv=BER_encode_TLV(p_td, BER_coding); |
| tlv->put_in_buffer(p_buf); |
| ASN_BER_TLV_t::destruct(tlv); |
| break;} |
| case TTCN_EncDec::CT_RAW: { |
| TTCN_EncDec_ErrorContext ec("While RAW-encoding type '%s': ", p_td.name); |
| if(!p_td.raw) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No RAW descriptor available for type '%s'.", p_td.name); |
| RAW_enc_tr_pos rp; |
| rp.level=0; |
| rp.pos=NULL; |
| RAW_enc_tree root(TRUE, NULL, &rp, 1, p_td.raw); |
| RAW_encode(p_td, root); |
| root.put_to_buf(p_buf); |
| break;} |
| case TTCN_EncDec::CT_TEXT: { |
| TTCN_EncDec_ErrorContext ec("While TEXT-encoding type '%s': ", p_td.name); |
| if(!p_td.text) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No TEXT descriptor available for type '%s'.", p_td.name); |
| TEXT_encode(p_td,p_buf); |
| break;} |
| case TTCN_EncDec::CT_XER: { |
| TTCN_EncDec_ErrorContext ec("While XER-encoding type '%s': ", p_td.name); |
| unsigned XER_coding=va_arg(pvar, unsigned); |
| XER_encode_chk_coding(XER_coding, p_td); |
| XER_encode(*(p_td.xer),p_buf, XER_coding, 0, 0, 0); |
| p_buf.put_c('\n'); |
| break;} |
| case TTCN_EncDec::CT_JSON: { |
| TTCN_EncDec_ErrorContext ec("While JSON-encoding type '%s': ", p_td.name); |
| if(!p_td.json) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No JSON descriptor available for type '%s'.", p_td.name); |
| JSON_Tokenizer tok(va_arg(pvar, int) != 0); |
| JSON_encode(p_td, tok); |
| p_buf.put_s(tok.get_buffer_length(), (const unsigned char*)tok.get_buffer()); |
| break;} |
| case TTCN_EncDec::CT_OER: { |
| TTCN_EncDec_ErrorContext ec("While OER-encoding type '%s': ", p_td.name); |
| if(!p_td.oer) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No OER descriptor available for type '%s'.", p_td.name); |
| OER_encode(p_td, p_buf); |
| break;} |
| default: |
| TTCN_error("Unknown coding method requested to encode type '%s'", p_td.name); |
| } |
| va_end(pvar); |
| } |
| |
| void e__ConnectionAbort__AbortReason::decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, TTCN_EncDec::coding_t p_coding, ...) |
| { |
| va_list pvar; |
| va_start(pvar, p_coding); |
| switch(p_coding) { |
| case TTCN_EncDec::CT_BER: { |
| TTCN_EncDec_ErrorContext ec("While BER-decoding type '%s': ", p_td.name); |
| unsigned L_form=va_arg(pvar, unsigned); |
| ASN_BER_TLV_t tlv; |
| BER_decode_str2TLV(p_buf, tlv, L_form); |
| BER_decode_TLV(p_td, tlv, L_form); |
| if(tlv.isComplete) p_buf.increase_pos(tlv.get_len()); |
| break;} |
| case TTCN_EncDec::CT_RAW: { |
| TTCN_EncDec_ErrorContext ec("While RAW-decoding type '%s': ", p_td.name); |
| if(!p_td.raw) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No RAW descriptor available for type '%s'.", p_td.name); |
| raw_order_t r_order; |
| switch(p_td.raw->top_bit_order) { |
| case TOP_BIT_LEFT: |
| r_order=ORDER_LSB; |
| break; |
| case TOP_BIT_RIGHT: |
| default: |
| r_order=ORDER_MSB; |
| } |
| int rawr = RAW_decode(p_td, p_buf, p_buf.get_len()*8, r_order); |
| if(rawr<0) switch (-rawr) { |
| case TTCN_EncDec::ET_INCOMPL_MSG: |
| case TTCN_EncDec::ET_LEN_ERR: |
| ec.error((TTCN_EncDec::error_type_t)-rawr, "Can not decode type '%s', because incomplete message was received", p_td.name); |
| break; |
| case 1: |
| default: |
| ec.error(TTCN_EncDec::ET_INVAL_MSG, "Can not decode type '%s', because invalid message was received", p_td.name); |
| break; |
| } |
| break;} |
| case TTCN_EncDec::CT_TEXT: { |
| Limit_Token_List limit; |
| TTCN_EncDec_ErrorContext ec("While TEXT-decoding type '%s': ", p_td.name); |
| if(!p_td.text) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No TEXT descriptor available for type '%s'.", p_td.name); |
| const unsigned char *b_data=p_buf.get_data(); |
| if(b_data[p_buf.get_len()-1]!='\0'){ |
| p_buf.set_pos(p_buf.get_len()); |
| p_buf.put_zero(8,ORDER_LSB); |
| p_buf.rewind(); |
| } |
| if(TEXT_decode(p_td,p_buf,limit)<0) |
| ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name); |
| break;} |
| case TTCN_EncDec::CT_XER: { |
| TTCN_EncDec_ErrorContext ec("While XER-decoding type '%s': ", p_td.name); |
| unsigned XER_coding=va_arg(pvar, unsigned); |
| XER_encode_chk_coding(XER_coding, p_td); |
| XmlReaderWrap reader(p_buf); |
| for (int rd_ok=reader.Read(); rd_ok==1; rd_ok=reader.Read()) { |
| if (reader.NodeType() == XML_READER_TYPE_ELEMENT) break; |
| } |
| XER_decode(*(p_td.xer), reader, XER_coding | XER_TOPLEVEL, XER_NONE, 0); |
| size_t bytes = reader.ByteConsumed(); |
| p_buf.set_pos(bytes); |
| break;} |
| case TTCN_EncDec::CT_JSON: { |
| TTCN_EncDec_ErrorContext ec("While JSON-decoding type '%s': ", p_td.name); |
| if(!p_td.json) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No JSON descriptor available for type '%s'.", p_td.name); |
| JSON_Tokenizer tok((const char*)p_buf.get_data(), p_buf.get_len()); |
| if(JSON_decode(p_td, tok, FALSE)<0) |
| ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name); |
| p_buf.set_pos(tok.get_buf_pos()); |
| break;} |
| case TTCN_EncDec::CT_OER: { |
| TTCN_EncDec_ErrorContext ec("While OER-decoding type '%s': ", p_td.name); |
| if(!p_td.oer) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No OER descriptor available for type '%s'.", p_td.name); |
| OER_struct p_oer; |
| OER_decode(p_td, p_buf, p_oer); |
| break;} |
| default: |
| TTCN_error("Unknown coding method requested to decode type '%s'", p_td.name); |
| } |
| va_end(pvar); |
| } |
| |
| int e__ConnectionAbort__AbortReason::RAW_decode(const TTCN_Typedescriptor_t& p_td,TTCN_Buffer& p_buf,int limit, raw_order_t top_bit_ord, boolean no_err, int, boolean, const RAW_Force_Omit*) |
| { |
| int decoded_value = 0; |
| int decoded_length = RAW_decode_enum_type(p_td, p_buf, limit, top_bit_ord, decoded_value, 8, no_err); |
| if (decoded_length < 0) return decoded_length; |
| if (is_valid_enum(decoded_value)) enum_value = (enum_type)decoded_value; |
| else { |
| if(no_err){ |
| return -1; |
| } else { |
| TTCN_EncDec_ErrorContext::error |
| (TTCN_EncDec::ET_ENC_ENUM, "Invalid enum value '%d' for '%s': ",decoded_value, p_td.name); |
| enum_value = UNKNOWN_VALUE; |
| } |
| } |
| return decoded_length; |
| } |
| |
| int e__ConnectionAbort__AbortReason::RAW_encode(const TTCN_Typedescriptor_t& p_td, RAW_enc_tree& myleaf) const |
| { |
| return RAW_encode_enum_type(p_td, myleaf, (int)enum_value, 8); |
| } |
| |
| void e__ConnectionAbort__AbortReason_template::copy_template(const e__ConnectionAbort__AbortReason_template& other_value) |
| { |
| set_selection(other_value); |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| single_value = other_value.single_value; |
| break; |
| case OMIT_VALUE: |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| break; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| value_list.n_values = other_value.value_list.n_values; |
| value_list.list_value = new e__ConnectionAbort__AbortReason_template[value_list.n_values]; |
| for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) |
| value_list.list_value[list_count].copy_template(other_value.value_list.list_value[list_count]); |
| break; |
| default: |
| TTCN_error("Copying an uninitialized/unsupported template of enumerated type @IsobusCMMessageTypes.e_ConnectionAbort_AbortReason."); |
| } |
| } |
| |
| e__ConnectionAbort__AbortReason_template::e__ConnectionAbort__AbortReason_template() |
| { |
| } |
| |
| e__ConnectionAbort__AbortReason_template::e__ConnectionAbort__AbortReason_template(template_sel other_value) |
| : Base_Template(other_value) |
| { |
| check_single_selection(other_value); |
| } |
| |
| e__ConnectionAbort__AbortReason_template::e__ConnectionAbort__AbortReason_template(int other_value) |
| : Base_Template(SPECIFIC_VALUE) |
| { |
| if (!e__ConnectionAbort__AbortReason::is_valid_enum(other_value)) TTCN_error("Initializing a template of enumerated type @IsobusCMMessageTypes.e_ConnectionAbort_AbortReason with unknown numeric value %d.", other_value); |
| single_value = (e__ConnectionAbort__AbortReason::enum_type)other_value; |
| } |
| |
| e__ConnectionAbort__AbortReason_template::e__ConnectionAbort__AbortReason_template(e__ConnectionAbort__AbortReason::enum_type other_value) |
| : Base_Template(SPECIFIC_VALUE) |
| { |
| single_value = other_value; |
| } |
| |
| e__ConnectionAbort__AbortReason_template::e__ConnectionAbort__AbortReason_template(const e__ConnectionAbort__AbortReason& other_value) |
| : Base_Template(SPECIFIC_VALUE) |
| { |
| if (other_value.enum_value == e__ConnectionAbort__AbortReason::UNBOUND_VALUE) TTCN_error("Creating a template from an unbound value of enumerated type @IsobusCMMessageTypes.e_ConnectionAbort_AbortReason."); |
| single_value = other_value.enum_value; |
| } |
| |
| e__ConnectionAbort__AbortReason_template::e__ConnectionAbort__AbortReason_template(const OPTIONAL<e__ConnectionAbort__AbortReason>& other_value) |
| { |
| switch (other_value.get_selection()) { |
| case OPTIONAL_PRESENT: |
| set_selection(SPECIFIC_VALUE); |
| single_value = (e__ConnectionAbort__AbortReason::enum_type)(const e__ConnectionAbort__AbortReason&)other_value; |
| break; |
| case OPTIONAL_OMIT: |
| set_selection(OMIT_VALUE); |
| break; |
| default: |
| TTCN_error("Creating a template of enumerated type @IsobusCMMessageTypes.e_ConnectionAbort_AbortReason from an unbound optional field."); |
| } |
| } |
| |
| e__ConnectionAbort__AbortReason_template::e__ConnectionAbort__AbortReason_template(const e__ConnectionAbort__AbortReason_template& other_value) |
| : Base_Template() |
| { |
| copy_template(other_value); |
| } |
| |
| e__ConnectionAbort__AbortReason_template::~e__ConnectionAbort__AbortReason_template() |
| { |
| clean_up(); |
| } |
| |
| boolean e__ConnectionAbort__AbortReason_template::is_bound() const |
| { |
| if (template_selection == UNINITIALIZED_TEMPLATE && !is_ifpresent) return FALSE; |
| return TRUE; |
| } |
| |
| boolean e__ConnectionAbort__AbortReason_template::is_value() const |
| { |
| if (template_selection != SPECIFIC_VALUE || is_ifpresent) return FALSE; |
| return single_value != e__ConnectionAbort__AbortReason::UNBOUND_VALUE; |
| } |
| |
| void e__ConnectionAbort__AbortReason_template::clean_up() |
| { |
| if (template_selection == VALUE_LIST || template_selection == COMPLEMENTED_LIST) delete [] value_list.list_value; |
| template_selection = UNINITIALIZED_TEMPLATE; |
| } |
| |
| e__ConnectionAbort__AbortReason_template& e__ConnectionAbort__AbortReason_template::operator=(template_sel other_value) |
| { |
| check_single_selection(other_value); |
| clean_up(); |
| set_selection(other_value); |
| return *this; |
| } |
| |
| e__ConnectionAbort__AbortReason_template& e__ConnectionAbort__AbortReason_template::operator=(int other_value) |
| { |
| if (!e__ConnectionAbort__AbortReason::is_valid_enum(other_value)) TTCN_warning("Assigning unknown numeric value %d to a template of enumerated type @IsobusCMMessageTypes.e_ConnectionAbort_AbortReason.", other_value); |
| clean_up(); |
| set_selection(SPECIFIC_VALUE); |
| single_value = (e__ConnectionAbort__AbortReason::enum_type)other_value; |
| return *this; |
| } |
| |
| e__ConnectionAbort__AbortReason_template& e__ConnectionAbort__AbortReason_template::operator=(e__ConnectionAbort__AbortReason::enum_type other_value) |
| { |
| clean_up(); |
| set_selection(SPECIFIC_VALUE); |
| single_value = other_value; |
| return *this; |
| } |
| |
| e__ConnectionAbort__AbortReason_template& e__ConnectionAbort__AbortReason_template::operator=(const e__ConnectionAbort__AbortReason& other_value) |
| { |
| if (other_value.enum_value == e__ConnectionAbort__AbortReason::UNBOUND_VALUE) TTCN_error("Assignment of an unbound value of enumerated type @IsobusCMMessageTypes.e_ConnectionAbort_AbortReason to a template."); |
| clean_up(); |
| set_selection(SPECIFIC_VALUE); |
| single_value = other_value.enum_value; |
| return *this; |
| } |
| |
| e__ConnectionAbort__AbortReason_template& e__ConnectionAbort__AbortReason_template::operator=(const OPTIONAL<e__ConnectionAbort__AbortReason>& other_value) |
| { |
| clean_up(); |
| switch (other_value.get_selection()) { |
| case OPTIONAL_PRESENT: |
| set_selection(SPECIFIC_VALUE); |
| single_value = (e__ConnectionAbort__AbortReason::enum_type)(const e__ConnectionAbort__AbortReason&)other_value; |
| break; |
| case OPTIONAL_OMIT: |
| set_selection(OMIT_VALUE); |
| break; |
| default: |
| TTCN_error("Assignment of an unbound optional field to a template of enumerated type @IsobusCMMessageTypes.e_ConnectionAbort_AbortReason."); |
| } |
| return *this; |
| } |
| |
| e__ConnectionAbort__AbortReason_template& e__ConnectionAbort__AbortReason_template::operator=(const e__ConnectionAbort__AbortReason_template& other_value) |
| { |
| if (&other_value != this) { |
| clean_up(); |
| copy_template(other_value); |
| } |
| return *this; |
| } |
| |
| boolean e__ConnectionAbort__AbortReason_template::match(e__ConnectionAbort__AbortReason::enum_type other_value, boolean) const |
| { |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| return single_value == other_value; |
| case OMIT_VALUE: |
| return FALSE; |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| return TRUE; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) |
| if (value_list.list_value[list_count].match(other_value)) return template_selection == VALUE_LIST; |
| return template_selection == COMPLEMENTED_LIST; |
| default: |
| TTCN_error("Matching an uninitialized/unsupported template of enumerated type @IsobusCMMessageTypes.e_ConnectionAbort_AbortReason."); |
| } |
| return FALSE; |
| } |
| |
| boolean e__ConnectionAbort__AbortReason_template::match(const e__ConnectionAbort__AbortReason& other_value, boolean) const |
| { |
| if (other_value.enum_value == e__ConnectionAbort__AbortReason::UNBOUND_VALUE) TTCN_error("Matching a template of enumerated type @IsobusCMMessageTypes.e_ConnectionAbort_AbortReason with an unbound value."); |
| return match(other_value.enum_value); |
| } |
| |
| e__ConnectionAbort__AbortReason::enum_type e__ConnectionAbort__AbortReason_template::valueof() const |
| { |
| if (template_selection != SPECIFIC_VALUE || is_ifpresent) TTCN_error("Performing a valueof or send operation on a non-specific template of enumerated type @IsobusCMMessageTypes.e_ConnectionAbort_AbortReason."); |
| return single_value; |
| } |
| |
| void e__ConnectionAbort__AbortReason_template::set_type(template_sel template_type, unsigned int list_length) |
| { |
| if (template_type != VALUE_LIST && template_type != COMPLEMENTED_LIST) TTCN_error("Setting an invalid list type for a template of enumerated type @IsobusCMMessageTypes.e_ConnectionAbort_AbortReason."); |
| clean_up(); |
| set_selection(template_type); |
| value_list.n_values = list_length; |
| value_list.list_value = new e__ConnectionAbort__AbortReason_template[list_length]; |
| } |
| |
| e__ConnectionAbort__AbortReason_template& e__ConnectionAbort__AbortReason_template::list_item(unsigned int list_index) |
| { |
| if (template_selection != VALUE_LIST && template_selection != COMPLEMENTED_LIST) TTCN_error("Accessing a list element in a non-list template of enumerated type @IsobusCMMessageTypes.e_ConnectionAbort_AbortReason."); |
| if (list_index >= value_list.n_values) TTCN_error("Index overflow in a value list template of enumerated type @IsobusCMMessageTypes.e_ConnectionAbort_AbortReason."); |
| return value_list.list_value[list_index]; |
| } |
| |
| void e__ConnectionAbort__AbortReason_template::log() const |
| { |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| TTCN_Logger::log_event_enum(e__ConnectionAbort__AbortReason::enum_to_str(single_value), single_value); |
| break; |
| case COMPLEMENTED_LIST: |
| TTCN_Logger::log_event_str("complement"); |
| case VALUE_LIST: |
| TTCN_Logger::log_char('('); |
| for (unsigned int elem_count = 0; elem_count < value_list.n_values; elem_count++) { |
| if (elem_count > 0) TTCN_Logger::log_event_str(", "); |
| value_list.list_value[elem_count].log(); |
| } |
| TTCN_Logger::log_char(')'); |
| break; |
| default: |
| log_generic(); |
| } |
| log_ifpresent(); |
| } |
| |
| void e__ConnectionAbort__AbortReason_template::log_match(const e__ConnectionAbort__AbortReason& match_value, boolean) const |
| { |
| match_value.log(); |
| TTCN_Logger::log_event_str(" with "); |
| log(); |
| if (match(match_value)) TTCN_Logger::log_event_str(" matched"); |
| else TTCN_Logger::log_event_str(" unmatched"); |
| } |
| |
| void e__ConnectionAbort__AbortReason_template::encode_text(Text_Buf& text_buf) const |
| { |
| encode_text_base(text_buf); |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| text_buf.push_int(single_value); |
| case OMIT_VALUE: |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| break; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| text_buf.push_int(value_list.n_values); |
| for (unsigned int elem_count = 0; elem_count < value_list.n_values; elem_count++) |
| value_list.list_value[elem_count].encode_text(text_buf); |
| break; |
| default: |
| TTCN_error("Text encoder: Encoding an uninitialized/unsupported template of enumerated type @IsobusCMMessageTypes.e_ConnectionAbort_AbortReason."); |
| } |
| } |
| |
| void e__ConnectionAbort__AbortReason_template::decode_text(Text_Buf& text_buf) |
| { |
| clean_up(); |
| decode_text_base(text_buf); |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| single_value = (e__ConnectionAbort__AbortReason::enum_type)text_buf.pull_int().get_val(); |
| if (!e__ConnectionAbort__AbortReason::is_valid_enum(single_value)) TTCN_error("Text decoder: Unknown numeric value %d was received for a template of enumerated type @IsobusCMMessageTypes.e_ConnectionAbort_AbortReason.", single_value); |
| case OMIT_VALUE: |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| break; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| value_list.n_values = text_buf.pull_int().get_val(); |
| value_list.list_value = new e__ConnectionAbort__AbortReason_template[value_list.n_values]; |
| for (unsigned int elem_count = 0; elem_count < value_list.n_values; elem_count++) |
| value_list.list_value[elem_count].decode_text(text_buf); |
| break; |
| default: |
| TTCN_error("Text decoder: An unknown/unsupported selection was received for a template of enumerated type @IsobusCMMessageTypes.e_ConnectionAbort_AbortReason."); |
| } |
| } |
| |
| boolean e__ConnectionAbort__AbortReason_template::is_present(boolean legacy) const |
| { |
| if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE; |
| return !match_omit(legacy); |
| } |
| |
| boolean e__ConnectionAbort__AbortReason_template::match_omit(boolean legacy) const |
| { |
| if (is_ifpresent) return TRUE; |
| switch (template_selection) { |
| case OMIT_VALUE: |
| case ANY_OR_OMIT: |
| return TRUE; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| if (legacy) { |
| for (unsigned int i=0; i<value_list.n_values; i++) |
| if (value_list.list_value[i].match_omit()) |
| return template_selection==VALUE_LIST; |
| return template_selection==COMPLEMENTED_LIST; |
| } // else fall through |
| default: |
| return FALSE; |
| } |
| return FALSE; |
| } |
| |
| void e__ConnectionAbort__AbortReason_template::set_param(Module_Param& param) |
| { |
| param.basic_check(Module_Param::BC_TEMPLATE, "enumerated template"); |
| Module_Param_Ptr m_p = ¶m; |
| switch (m_p->get_type()) { |
| case Module_Param::MP_Omit: |
| *this = OMIT_VALUE; |
| break; |
| case Module_Param::MP_Any: |
| *this = ANY_VALUE; |
| break; |
| case Module_Param::MP_AnyOrNone: |
| *this = ANY_OR_OMIT; |
| break; |
| case Module_Param::MP_List_Template: |
| case Module_Param::MP_ComplementList_Template: { |
| e__ConnectionAbort__AbortReason_template new_temp; |
| new_temp.set_type(m_p->get_type()==Module_Param::MP_List_Template ? VALUE_LIST : COMPLEMENTED_LIST, m_p->get_size()); |
| for (size_t p_i=0; p_i<m_p->get_size(); p_i++) { |
| new_temp.list_item(p_i).set_param(*m_p->get_elem(p_i)); |
| } |
| *this = new_temp; |
| break; } |
| case Module_Param::MP_Enumerated: { |
| e__ConnectionAbort__AbortReason::enum_type enum_val = e__ConnectionAbort__AbortReason::str_to_enum(m_p->get_enumerated()); |
| if (!e__ConnectionAbort__AbortReason::is_valid_enum(enum_val)) { |
| param.error("Invalid enumerated value for type @IsobusCMMessageTypes.e_ConnectionAbort_AbortReason."); |
| } |
| *this = enum_val; |
| } break; |
| default: |
| param.type_error("enumerated template", "@IsobusCMMessageTypes.e_ConnectionAbort_AbortReason"); |
| } |
| is_ifpresent = param.get_ifpresent(); |
| } |
| |
| void e__ConnectionAbort__AbortReason_template::check_restriction(template_res t_res, const char* t_name, |
| boolean legacy) const |
| { |
| if (template_selection==UNINITIALIZED_TEMPLATE) return; |
| switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) { |
| case TR_VALUE: |
| if (!is_ifpresent && template_selection==SPECIFIC_VALUE) return; |
| break; |
| case TR_OMIT: |
| if (!is_ifpresent && (template_selection==OMIT_VALUE || template_selection==SPECIFIC_VALUE)) return; |
| break; |
| case TR_PRESENT: |
| if (!match_omit(legacy)) return; |
| break; |
| default: |
| return; |
| } |
| TTCN_error("Restriction `%s' on template of type %s violated.", get_res_name(t_res), t_name ? t_name : "@IsobusCMMessageTypes.e_ConnectionAbort_AbortReason"); |
| } |
| |
| ConnectionAbort::ConnectionAbort() |
| { |
| } |
| |
| ConnectionAbort::ConnectionAbort(const OCTETSTRING& par_ctrl, |
| const e__ConnectionAbort__AbortReason& par_connectionAbortReason, |
| const OCTETSTRING& par_reserved3, |
| const OCTETSTRING& par_reserved4, |
| const OCTETSTRING& par_reserved5, |
| const INTEGER& par_pgnOfMultiPacketMessage) |
| : field_ctrl(par_ctrl), |
| field_connectionAbortReason(par_connectionAbortReason), |
| field_reserved3(par_reserved3), |
| field_reserved4(par_reserved4), |
| field_reserved5(par_reserved5), |
| field_pgnOfMultiPacketMessage(par_pgnOfMultiPacketMessage) |
| { |
| } |
| |
| ConnectionAbort::ConnectionAbort(const ConnectionAbort& other_value) |
| { |
| if(!other_value.is_bound()) TTCN_error("Copying an unbound value of type @IsobusCMMessageTypes.ConnectionAbort."); |
| if (other_value.ctrl().is_bound()) field_ctrl = other_value.ctrl(); |
| else field_ctrl.clean_up(); |
| if (other_value.connectionAbortReason().is_bound()) field_connectionAbortReason = other_value.connectionAbortReason(); |
| else field_connectionAbortReason.clean_up(); |
| if (other_value.reserved3().is_bound()) field_reserved3 = other_value.reserved3(); |
| else field_reserved3.clean_up(); |
| if (other_value.reserved4().is_bound()) field_reserved4 = other_value.reserved4(); |
| else field_reserved4.clean_up(); |
| if (other_value.reserved5().is_bound()) field_reserved5 = other_value.reserved5(); |
| else field_reserved5.clean_up(); |
| if (other_value.pgnOfMultiPacketMessage().is_bound()) field_pgnOfMultiPacketMessage = other_value.pgnOfMultiPacketMessage(); |
| else field_pgnOfMultiPacketMessage.clean_up(); |
| } |
| |
| void ConnectionAbort::clean_up() |
| { |
| field_ctrl.clean_up(); |
| field_connectionAbortReason.clean_up(); |
| field_reserved3.clean_up(); |
| field_reserved4.clean_up(); |
| field_reserved5.clean_up(); |
| field_pgnOfMultiPacketMessage.clean_up(); |
| } |
| |
| const TTCN_Typedescriptor_t* ConnectionAbort::get_descriptor() const { return &ConnectionAbort_descr_; } |
| ConnectionAbort& ConnectionAbort::operator=(const ConnectionAbort& other_value) |
| { |
| if (this != &other_value) { |
| if(!other_value.is_bound()) TTCN_error("Assignment of an unbound value of type @IsobusCMMessageTypes.ConnectionAbort."); |
| if (other_value.ctrl().is_bound()) field_ctrl = other_value.ctrl(); |
| else field_ctrl.clean_up(); |
| if (other_value.connectionAbortReason().is_bound()) field_connectionAbortReason = other_value.connectionAbortReason(); |
| else field_connectionAbortReason.clean_up(); |
| if (other_value.reserved3().is_bound()) field_reserved3 = other_value.reserved3(); |
| else field_reserved3.clean_up(); |
| if (other_value.reserved4().is_bound()) field_reserved4 = other_value.reserved4(); |
| else field_reserved4.clean_up(); |
| if (other_value.reserved5().is_bound()) field_reserved5 = other_value.reserved5(); |
| else field_reserved5.clean_up(); |
| if (other_value.pgnOfMultiPacketMessage().is_bound()) field_pgnOfMultiPacketMessage = other_value.pgnOfMultiPacketMessage(); |
| else field_pgnOfMultiPacketMessage.clean_up(); |
| } |
| return *this; |
| } |
| |
| boolean ConnectionAbort::operator==(const ConnectionAbort& other_value) const |
| { |
| return field_ctrl==other_value.field_ctrl |
| && field_connectionAbortReason==other_value.field_connectionAbortReason |
| && field_reserved3==other_value.field_reserved3 |
| && field_reserved4==other_value.field_reserved4 |
| && field_reserved5==other_value.field_reserved5 |
| && field_pgnOfMultiPacketMessage==other_value.field_pgnOfMultiPacketMessage; |
| } |
| |
| boolean ConnectionAbort::is_bound() const |
| { |
| return (field_ctrl.is_bound()) |
| || (field_connectionAbortReason.is_bound()) |
| || (field_reserved3.is_bound()) |
| || (field_reserved4.is_bound()) |
| || (field_reserved5.is_bound()) |
| || (field_pgnOfMultiPacketMessage.is_bound()); |
| } |
| boolean ConnectionAbort::is_value() const |
| { |
| return field_ctrl.is_value() |
| && field_connectionAbortReason.is_value() |
| && field_reserved3.is_value() |
| && field_reserved4.is_value() |
| && field_reserved5.is_value() |
| && field_pgnOfMultiPacketMessage.is_value(); |
| } |
| void ConnectionAbort::log() const |
| { |
| if (!is_bound()) { |
| TTCN_Logger::log_event_unbound(); |
| return; |
| } |
| TTCN_Logger::log_event_str("{ ctrl := "); |
| field_ctrl.log(); |
| TTCN_Logger::log_event_str(", connectionAbortReason := "); |
| field_connectionAbortReason.log(); |
| TTCN_Logger::log_event_str(", reserved3 := "); |
| field_reserved3.log(); |
| TTCN_Logger::log_event_str(", reserved4 := "); |
| field_reserved4.log(); |
| TTCN_Logger::log_event_str(", reserved5 := "); |
| field_reserved5.log(); |
| TTCN_Logger::log_event_str(", pgnOfMultiPacketMessage := "); |
| field_pgnOfMultiPacketMessage.log(); |
| TTCN_Logger::log_event_str(" }"); |
| } |
| |
| void ConnectionAbort::set_param(Module_Param& param) |
| { |
| param.basic_check(Module_Param::BC_VALUE, "record value"); |
| switch (param.get_type()) { |
| case Module_Param::MP_Value_List: |
| if (6<param.get_size()) { |
| param.error("record value of type @IsobusCMMessageTypes.ConnectionAbort has 6 fields but list value has %d fields", (int)param.get_size()); |
| } |
| if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) ctrl().set_param(*param.get_elem(0)); |
| if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) connectionAbortReason().set_param(*param.get_elem(1)); |
| if (param.get_size()>2 && param.get_elem(2)->get_type()!=Module_Param::MP_NotUsed) reserved3().set_param(*param.get_elem(2)); |
| if (param.get_size()>3 && param.get_elem(3)->get_type()!=Module_Param::MP_NotUsed) reserved4().set_param(*param.get_elem(3)); |
| if (param.get_size()>4 && param.get_elem(4)->get_type()!=Module_Param::MP_NotUsed) reserved5().set_param(*param.get_elem(4)); |
| if (param.get_size()>5 && param.get_elem(5)->get_type()!=Module_Param::MP_NotUsed) pgnOfMultiPacketMessage().set_param(*param.get_elem(5)); |
| break; |
| case Module_Param::MP_Assignment_List: { |
| Vector<bool> value_used(param.get_size()); |
| value_used.resize(param.get_size(), FALSE); |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "ctrl")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| ctrl().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "connectionAbortReason")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| connectionAbortReason().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "reserved3")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| reserved3().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "reserved4")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| reserved4().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "reserved5")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| reserved5().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "pgnOfMultiPacketMessage")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| pgnOfMultiPacketMessage().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| curr_param->error("Non existent field name in type @IsobusCMMessageTypes.ConnectionAbort: %s", curr_param->get_id()->get_name()); |
| break; |
| } |
| } break; |
| default: |
| param.type_error("record value", "@IsobusCMMessageTypes.ConnectionAbort"); |
| } |
| } |
| |
| void ConnectionAbort::set_implicit_omit() |
| { |
| if (ctrl().is_bound()) ctrl().set_implicit_omit(); |
| if (connectionAbortReason().is_bound()) connectionAbortReason().set_implicit_omit(); |
| if (reserved3().is_bound()) reserved3().set_implicit_omit(); |
| if (reserved4().is_bound()) reserved4().set_implicit_omit(); |
| if (reserved5().is_bound()) reserved5().set_implicit_omit(); |
| if (pgnOfMultiPacketMessage().is_bound()) pgnOfMultiPacketMessage().set_implicit_omit(); |
| } |
| |
| void ConnectionAbort::encode_text(Text_Buf& text_buf) const |
| { |
| field_ctrl.encode_text(text_buf); |
| field_connectionAbortReason.encode_text(text_buf); |
| field_reserved3.encode_text(text_buf); |
| field_reserved4.encode_text(text_buf); |
| field_reserved5.encode_text(text_buf); |
| field_pgnOfMultiPacketMessage.encode_text(text_buf); |
| } |
| |
| void ConnectionAbort::decode_text(Text_Buf& text_buf) |
| { |
| field_ctrl.decode_text(text_buf); |
| field_connectionAbortReason.decode_text(text_buf); |
| field_reserved3.decode_text(text_buf); |
| field_reserved4.decode_text(text_buf); |
| field_reserved5.decode_text(text_buf); |
| field_pgnOfMultiPacketMessage.decode_text(text_buf); |
| } |
| |
| void ConnectionAbort::encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, TTCN_EncDec::coding_t p_coding, ...) const |
| { |
| va_list pvar; |
| va_start(pvar, p_coding); |
| switch(p_coding) { |
| case TTCN_EncDec::CT_BER: { |
| TTCN_EncDec_ErrorContext ec("While BER-encoding type '%s': ", p_td.name); |
| unsigned BER_coding=va_arg(pvar, unsigned); |
| BER_encode_chk_coding(BER_coding); |
| ASN_BER_TLV_t *tlv=BER_encode_TLV(p_td, BER_coding); |
| tlv->put_in_buffer(p_buf); |
| ASN_BER_TLV_t::destruct(tlv); |
| break;} |
| case TTCN_EncDec::CT_RAW: { |
| TTCN_EncDec_ErrorContext ec("While RAW-encoding type '%s': ", p_td.name); |
| if(!p_td.raw) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No RAW descriptor available for type '%s'.", p_td.name); |
| RAW_enc_tr_pos rp; |
| rp.level=0; |
| rp.pos=NULL; |
| RAW_enc_tree root(FALSE, NULL, &rp, 1, p_td.raw); |
| RAW_encode(p_td, root); |
| root.put_to_buf(p_buf); |
| break;} |
| case TTCN_EncDec::CT_TEXT: { |
| TTCN_EncDec_ErrorContext ec("While TEXT-encoding type '%s': ", p_td.name); |
| if(!p_td.text) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No TEXT descriptor available for type '%s'.", p_td.name); |
| TEXT_encode(p_td,p_buf); |
| break;} |
| case TTCN_EncDec::CT_XER: { |
| TTCN_EncDec_ErrorContext ec("While XER-encoding type '%s': ", p_td.name); |
| unsigned XER_coding=va_arg(pvar, unsigned); |
| XER_encode_chk_coding(XER_coding, p_td); |
| XER_encode(*(p_td.xer),p_buf, XER_coding, 0, 0, 0); |
| p_buf.put_c('\n'); |
| break;} |
| case TTCN_EncDec::CT_JSON: { |
| TTCN_EncDec_ErrorContext ec("While JSON-encoding type '%s': ", p_td.name); |
| if(!p_td.json) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No JSON descriptor available for type '%s'.", p_td.name); |
| JSON_Tokenizer tok(va_arg(pvar, int) != 0); |
| JSON_encode(p_td, tok); |
| p_buf.put_s(tok.get_buffer_length(), (const unsigned char*)tok.get_buffer()); |
| break;} |
| case TTCN_EncDec::CT_OER: { |
| TTCN_EncDec_ErrorContext ec("While OER-encoding type '%s': ", p_td.name); |
| if(!p_td.oer) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No OER descriptor available for type '%s'.", p_td.name); |
| OER_encode(p_td, p_buf); |
| break;} |
| default: |
| TTCN_error("Unknown coding method requested to encode type '%s'", p_td.name); |
| } |
| va_end(pvar); |
| } |
| |
| void ConnectionAbort::decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, TTCN_EncDec::coding_t p_coding, ...) |
| { |
| va_list pvar; |
| va_start(pvar, p_coding); |
| switch(p_coding) { |
| case TTCN_EncDec::CT_BER: { |
| TTCN_EncDec_ErrorContext ec("While BER-decoding type '%s': ", p_td.name); |
| unsigned L_form=va_arg(pvar, unsigned); |
| ASN_BER_TLV_t tlv; |
| BER_decode_str2TLV(p_buf, tlv, L_form); |
| BER_decode_TLV(p_td, tlv, L_form); |
| if(tlv.isComplete) p_buf.increase_pos(tlv.get_len()); |
| break;} |
| case TTCN_EncDec::CT_RAW: { |
| TTCN_EncDec_ErrorContext ec("While RAW-decoding type '%s': ", p_td.name); |
| if(!p_td.raw) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No RAW descriptor available for type '%s'.", p_td.name); |
| raw_order_t r_order; |
| switch(p_td.raw->top_bit_order) { |
| case TOP_BIT_LEFT: |
| r_order=ORDER_LSB; |
| break; |
| case TOP_BIT_RIGHT: |
| default: |
| r_order=ORDER_MSB; |
| } |
| int rawr = RAW_decode(p_td, p_buf, p_buf.get_len()*8, r_order); |
| if(rawr<0) switch (-rawr) { |
| case TTCN_EncDec::ET_INCOMPL_MSG: |
| case TTCN_EncDec::ET_LEN_ERR: |
| ec.error((TTCN_EncDec::error_type_t)-rawr, "Can not decode type '%s', because incomplete message was received", p_td.name); |
| break; |
| case 1: |
| default: |
| ec.error(TTCN_EncDec::ET_INVAL_MSG, "Can not decode type '%s', because invalid message was received", p_td.name); |
| break; |
| } |
| break;} |
| case TTCN_EncDec::CT_TEXT: { |
| Limit_Token_List limit; |
| TTCN_EncDec_ErrorContext ec("While TEXT-decoding type '%s': ", p_td.name); |
| if(!p_td.text) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No TEXT descriptor available for type '%s'.", p_td.name); |
| const unsigned char *b_data=p_buf.get_data(); |
| if(b_data[p_buf.get_len()-1]!='\0'){ |
| p_buf.set_pos(p_buf.get_len()); |
| p_buf.put_zero(8,ORDER_LSB); |
| p_buf.rewind(); |
| } |
| if(TEXT_decode(p_td,p_buf,limit)<0) |
| ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name); |
| break;} |
| case TTCN_EncDec::CT_XER: { |
| TTCN_EncDec_ErrorContext ec("While XER-decoding type '%s': ", p_td.name); |
| unsigned XER_coding=va_arg(pvar, unsigned); |
| XER_encode_chk_coding(XER_coding, p_td); |
| XmlReaderWrap reader(p_buf); |
| for (int rd_ok=reader.Read(); rd_ok==1; rd_ok=reader.Read()) { |
| if (reader.NodeType() == XML_READER_TYPE_ELEMENT) break; |
| } |
| XER_decode(*(p_td.xer), reader, XER_coding | XER_TOPLEVEL, XER_NONE, 0); |
| size_t bytes = reader.ByteConsumed(); |
| p_buf.set_pos(bytes); |
| break;} |
| case TTCN_EncDec::CT_JSON: { |
| TTCN_EncDec_ErrorContext ec("While JSON-decoding type '%s': ", p_td.name); |
| if(!p_td.json) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No JSON descriptor available for type '%s'.", p_td.name); |
| JSON_Tokenizer tok((const char*)p_buf.get_data(), p_buf.get_len()); |
| if(JSON_decode(p_td, tok, FALSE)<0) |
| ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name); |
| p_buf.set_pos(tok.get_buf_pos()); |
| break;} |
| case TTCN_EncDec::CT_OER: { |
| TTCN_EncDec_ErrorContext ec("While OER-decoding type '%s': ", p_td.name); |
| if(!p_td.oer) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No OER descriptor available for type '%s'.", p_td.name); |
| OER_struct p_oer; |
| OER_decode(p_td, p_buf, p_oer); |
| break;} |
| default: |
| TTCN_error("Unknown coding method requested to decode type '%s'", p_td.name); |
| } |
| va_end(pvar); |
| } |
| |
| int ConnectionAbort::RAW_decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int limit, raw_order_t top_bit_ord, boolean no_err, int, boolean, const RAW_Force_Omit* force_omit) |
| { (void)no_err; |
| int prepaddlength=p_buf.increase_pos_padd(p_td.raw->prepadding); |
| limit-=prepaddlength; |
| size_t last_decoded_pos = p_buf.get_pos_bit(); |
| int decoded_length = 0; |
| int decoded_field_length = 0; |
| raw_order_t local_top_order; |
| if(p_td.raw->top_bit_order==TOP_BIT_INHERITED)local_top_order=top_bit_ord; |
| else if(p_td.raw->top_bit_order==TOP_BIT_RIGHT)local_top_order=ORDER_MSB; |
| else local_top_order=ORDER_LSB; |
| RAW_Force_Omit field_0_force_omit(0, force_omit, ConnectionAbort_ctrl_descr_.raw->forceomit); |
| decoded_field_length = field_ctrl.RAW_decode(ConnectionAbort_ctrl_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_0_force_omit); |
| if (decoded_field_length < 0) return decoded_field_length; |
| decoded_length+=decoded_field_length; |
| limit-=decoded_field_length; |
| last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit()); |
| RAW_Force_Omit field_1_force_omit(1, force_omit, e__ConnectionAbort__AbortReason_descr_.raw->forceomit); |
| decoded_field_length = field_connectionAbortReason.RAW_decode(e__ConnectionAbort__AbortReason_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_1_force_omit); |
| if (decoded_field_length < 0) return decoded_field_length; |
| decoded_length+=decoded_field_length; |
| limit-=decoded_field_length; |
| last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit()); |
| RAW_Force_Omit field_2_force_omit(2, force_omit, ConnectionAbort_reserved3_descr_.raw->forceomit); |
| decoded_field_length = field_reserved3.RAW_decode(ConnectionAbort_reserved3_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_2_force_omit); |
| if (decoded_field_length < 0) return decoded_field_length; |
| decoded_length+=decoded_field_length; |
| limit-=decoded_field_length; |
| last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit()); |
| RAW_Force_Omit field_3_force_omit(3, force_omit, ConnectionAbort_reserved4_descr_.raw->forceomit); |
| decoded_field_length = field_reserved4.RAW_decode(ConnectionAbort_reserved4_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_3_force_omit); |
| if (decoded_field_length < 0) return decoded_field_length; |
| decoded_length+=decoded_field_length; |
| limit-=decoded_field_length; |
| last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit()); |
| RAW_Force_Omit field_4_force_omit(4, force_omit, ConnectionAbort_reserved5_descr_.raw->forceomit); |
| decoded_field_length = field_reserved5.RAW_decode(ConnectionAbort_reserved5_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_4_force_omit); |
| if (decoded_field_length < 0) return decoded_field_length; |
| decoded_length+=decoded_field_length; |
| limit-=decoded_field_length; |
| last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit()); |
| RAW_Force_Omit field_5_force_omit(5, force_omit, IsobusMessageTypes::PGN_descr_.raw->forceomit); |
| decoded_field_length = field_pgnOfMultiPacketMessage.RAW_decode(IsobusMessageTypes::PGN_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_5_force_omit); |
| if (decoded_field_length < 0) return decoded_field_length; |
| decoded_length+=decoded_field_length; |
| limit-=decoded_field_length; |
| last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit()); |
| p_buf.set_pos_bit(last_decoded_pos); |
| return decoded_length+prepaddlength+p_buf.increase_pos_padd(p_td.raw->padding); |
| } |
| |
| int ConnectionAbort::RAW_encode(const TTCN_Typedescriptor_t&, RAW_enc_tree& myleaf) const { |
| if (!is_bound()) TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_UNBOUND, "Encoding an unbound value."); |
| int encoded_length = 0; |
| myleaf.isleaf = FALSE; |
| myleaf.body.node.num_of_nodes = 6; |
| myleaf.body.node.nodes = init_nodes_of_enc_tree(6); |
| myleaf.body.node.nodes[0] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 0, ConnectionAbort_ctrl_descr_.raw); |
| myleaf.body.node.nodes[1] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 1, e__ConnectionAbort__AbortReason_descr_.raw); |
| myleaf.body.node.nodes[2] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 2, ConnectionAbort_reserved3_descr_.raw); |
| myleaf.body.node.nodes[3] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 3, ConnectionAbort_reserved4_descr_.raw); |
| myleaf.body.node.nodes[4] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 4, ConnectionAbort_reserved5_descr_.raw); |
| myleaf.body.node.nodes[5] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 5, IsobusMessageTypes::PGN_descr_.raw); |
| encoded_length += field_ctrl.RAW_encode(ConnectionAbort_ctrl_descr_, *myleaf.body.node.nodes[0]); |
| encoded_length += field_connectionAbortReason.RAW_encode(e__ConnectionAbort__AbortReason_descr_, *myleaf.body.node.nodes[1]); |
| encoded_length += field_reserved3.RAW_encode(ConnectionAbort_reserved3_descr_, *myleaf.body.node.nodes[2]); |
| encoded_length += field_reserved4.RAW_encode(ConnectionAbort_reserved4_descr_, *myleaf.body.node.nodes[3]); |
| encoded_length += field_reserved5.RAW_encode(ConnectionAbort_reserved5_descr_, *myleaf.body.node.nodes[4]); |
| encoded_length += field_pgnOfMultiPacketMessage.RAW_encode(IsobusMessageTypes::PGN_descr_, *myleaf.body.node.nodes[5]); |
| return myleaf.length = encoded_length; |
| } |
| |
| struct ConnectionAbort_template::single_value_struct { |
| OCTETSTRING_template field_ctrl; |
| e__ConnectionAbort__AbortReason_template field_connectionAbortReason; |
| OCTETSTRING_template field_reserved3; |
| OCTETSTRING_template field_reserved4; |
| OCTETSTRING_template field_reserved5; |
| INTEGER_template field_pgnOfMultiPacketMessage; |
| }; |
| |
| void ConnectionAbort_template::set_specific() |
| { |
| if (template_selection != SPECIFIC_VALUE) { |
| template_sel old_selection = template_selection; |
| clean_up(); |
| single_value = new single_value_struct; |
| set_selection(SPECIFIC_VALUE); |
| if (old_selection == ANY_VALUE || old_selection == ANY_OR_OMIT) { |
| single_value->field_ctrl = ANY_VALUE; |
| single_value->field_connectionAbortReason = ANY_VALUE; |
| single_value->field_reserved3 = ANY_VALUE; |
| single_value->field_reserved4 = ANY_VALUE; |
| single_value->field_reserved5 = ANY_VALUE; |
| single_value->field_pgnOfMultiPacketMessage = ANY_VALUE; |
| } |
| } |
| } |
| |
| void ConnectionAbort_template::copy_value(const ConnectionAbort& other_value) |
| { |
| single_value = new single_value_struct; |
| if (other_value.ctrl().is_bound()) { |
| single_value->field_ctrl = other_value.ctrl(); |
| } else { |
| single_value->field_ctrl.clean_up(); |
| } |
| if (other_value.connectionAbortReason().is_bound()) { |
| single_value->field_connectionAbortReason = other_value.connectionAbortReason(); |
| } else { |
| single_value->field_connectionAbortReason.clean_up(); |
| } |
| if (other_value.reserved3().is_bound()) { |
| single_value->field_reserved3 = other_value.reserved3(); |
| } else { |
| single_value->field_reserved3.clean_up(); |
| } |
| if (other_value.reserved4().is_bound()) { |
| single_value->field_reserved4 = other_value.reserved4(); |
| } else { |
| single_value->field_reserved4.clean_up(); |
| } |
| if (other_value.reserved5().is_bound()) { |
| single_value->field_reserved5 = other_value.reserved5(); |
| } else { |
| single_value->field_reserved5.clean_up(); |
| } |
| if (other_value.pgnOfMultiPacketMessage().is_bound()) { |
| single_value->field_pgnOfMultiPacketMessage = other_value.pgnOfMultiPacketMessage(); |
| } else { |
| single_value->field_pgnOfMultiPacketMessage.clean_up(); |
| } |
| set_selection(SPECIFIC_VALUE); |
| } |
| |
| void ConnectionAbort_template::copy_template(const ConnectionAbort_template& other_value) |
| { |
| switch (other_value.template_selection) { |
| case SPECIFIC_VALUE: |
| single_value = new single_value_struct; |
| if (UNINITIALIZED_TEMPLATE != other_value.ctrl().get_selection()) { |
| single_value->field_ctrl = other_value.ctrl(); |
| } else { |
| single_value->field_ctrl.clean_up(); |
| } |
| if (UNINITIALIZED_TEMPLATE != other_value.connectionAbortReason().get_selection()) { |
| single_value->field_connectionAbortReason = other_value.connectionAbortReason(); |
| } else { |
| single_value->field_connectionAbortReason.clean_up(); |
| } |
| if (UNINITIALIZED_TEMPLATE != other_value.reserved3().get_selection()) { |
| single_value->field_reserved3 = other_value.reserved3(); |
| } else { |
| single_value->field_reserved3.clean_up(); |
| } |
| if (UNINITIALIZED_TEMPLATE != other_value.reserved4().get_selection()) { |
| single_value->field_reserved4 = other_value.reserved4(); |
| } else { |
| single_value->field_reserved4.clean_up(); |
| } |
| if (UNINITIALIZED_TEMPLATE != other_value.reserved5().get_selection()) { |
| single_value->field_reserved5 = other_value.reserved5(); |
| } else { |
| single_value->field_reserved5.clean_up(); |
| } |
| if (UNINITIALIZED_TEMPLATE != other_value.pgnOfMultiPacketMessage().get_selection()) { |
| single_value->field_pgnOfMultiPacketMessage = other_value.pgnOfMultiPacketMessage(); |
| } else { |
| single_value->field_pgnOfMultiPacketMessage.clean_up(); |
| } |
| case OMIT_VALUE: |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| break; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| value_list.n_values = other_value.value_list.n_values; |
| value_list.list_value = new ConnectionAbort_template[value_list.n_values]; |
| for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) |
| value_list.list_value[list_count].copy_template(other_value.value_list.list_value[list_count]); |
| break; |
| default: |
| TTCN_error("Copying an uninitialized/unsupported template of type @IsobusCMMessageTypes.ConnectionAbort."); |
| break; |
| } |
| set_selection(other_value); |
| } |
| |
| ConnectionAbort_template::ConnectionAbort_template() |
| { |
| } |
| |
| ConnectionAbort_template::ConnectionAbort_template(template_sel other_value) |
| : Base_Template(other_value) |
| { |
| check_single_selection(other_value); |
| } |
| |
| ConnectionAbort_template::ConnectionAbort_template(const ConnectionAbort& other_value) |
| { |
| copy_value(other_value); |
| } |
| |
| ConnectionAbort_template::ConnectionAbort_template(const OPTIONAL<ConnectionAbort>& other_value) |
| { |
| switch (other_value.get_selection()) { |
| case OPTIONAL_PRESENT: |
| copy_value((const ConnectionAbort&)other_value); |
| break; |
| case OPTIONAL_OMIT: |
| set_selection(OMIT_VALUE); |
| break; |
| default: |
| TTCN_error("Creating a template of type @IsobusCMMessageTypes.ConnectionAbort from an unbound optional field."); |
| } |
| } |
| |
| ConnectionAbort_template::ConnectionAbort_template(const ConnectionAbort_template& other_value) |
| : Base_Template() |
| { |
| copy_template(other_value); |
| } |
| |
| ConnectionAbort_template::~ConnectionAbort_template() |
| { |
| clean_up(); |
| } |
| |
| ConnectionAbort_template& ConnectionAbort_template::operator=(template_sel other_value) |
| { |
| check_single_selection(other_value); |
| clean_up(); |
| set_selection(other_value); |
| return *this; |
| } |
| |
| ConnectionAbort_template& ConnectionAbort_template::operator=(const ConnectionAbort& other_value) |
| { |
| clean_up(); |
| copy_value(other_value); |
| return *this; |
| } |
| |
| ConnectionAbort_template& ConnectionAbort_template::operator=(const OPTIONAL<ConnectionAbort>& other_value) |
| { |
| clean_up(); |
| switch (other_value.get_selection()) { |
| case OPTIONAL_PRESENT: |
| copy_value((const ConnectionAbort&)other_value); |
| break; |
| case OPTIONAL_OMIT: |
| set_selection(OMIT_VALUE); |
| break; |
| default: |
| TTCN_error("Assignment of an unbound optional field to a template of type @IsobusCMMessageTypes.ConnectionAbort."); |
| } |
| return *this; |
| } |
| |
| ConnectionAbort_template& ConnectionAbort_template::operator=(const ConnectionAbort_template& other_value) |
| { |
| if (&other_value != this) { |
| clean_up(); |
| copy_template(other_value); |
| } |
| return *this; |
| } |
| |
| boolean ConnectionAbort_template::match(const ConnectionAbort& other_value, boolean legacy) const |
| { |
| if (!other_value.is_bound()) return FALSE; |
| switch (template_selection) { |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| return TRUE; |
| case OMIT_VALUE: |
| return FALSE; |
| case SPECIFIC_VALUE: |
| if(!other_value.ctrl().is_bound()) return FALSE; |
| if(!single_value->field_ctrl.match(other_value.ctrl(), legacy))return FALSE; |
| if(!other_value.connectionAbortReason().is_bound()) return FALSE; |
| if(!single_value->field_connectionAbortReason.match(other_value.connectionAbortReason(), legacy))return FALSE; |
| if(!other_value.reserved3().is_bound()) return FALSE; |
| if(!single_value->field_reserved3.match(other_value.reserved3(), legacy))return FALSE; |
| if(!other_value.reserved4().is_bound()) return FALSE; |
| if(!single_value->field_reserved4.match(other_value.reserved4(), legacy))return FALSE; |
| if(!other_value.reserved5().is_bound()) return FALSE; |
| if(!single_value->field_reserved5.match(other_value.reserved5(), legacy))return FALSE; |
| if(!other_value.pgnOfMultiPacketMessage().is_bound()) return FALSE; |
| if(!single_value->field_pgnOfMultiPacketMessage.match(other_value.pgnOfMultiPacketMessage(), legacy))return FALSE; |
| return TRUE; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) |
| if (value_list.list_value[list_count].match(other_value, legacy)) return template_selection == VALUE_LIST; |
| return template_selection == COMPLEMENTED_LIST; |
| default: |
| TTCN_error("Matching an uninitialized/unsupported template of type @IsobusCMMessageTypes.ConnectionAbort."); |
| } |
| return FALSE; |
| } |
| |
| boolean ConnectionAbort_template::is_bound() const |
| { |
| if (template_selection == UNINITIALIZED_TEMPLATE && !is_ifpresent) return FALSE; |
| if (template_selection != SPECIFIC_VALUE) return TRUE; |
| return single_value->field_ctrl.is_bound() |
| |
| ||single_value->field_connectionAbortReason.is_bound() |
| |
| ||single_value->field_reserved3.is_bound() |
| |
| ||single_value->field_reserved4.is_bound() |
| |
| ||single_value->field_reserved5.is_bound() |
| |
| ||single_value->field_pgnOfMultiPacketMessage.is_bound() |
| ; |
| } |
| |
| boolean ConnectionAbort_template::is_value() const |
| { |
| if (template_selection != SPECIFIC_VALUE || is_ifpresent) return FALSE; |
| return single_value->field_ctrl.is_value() |
| &&single_value->field_connectionAbortReason.is_value() |
| &&single_value->field_reserved3.is_value() |
| &&single_value->field_reserved4.is_value() |
| &&single_value->field_reserved5.is_value() |
| &&single_value->field_pgnOfMultiPacketMessage.is_value(); |
| } |
| |
| void ConnectionAbort_template::clean_up() |
| { |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| delete single_value; |
| break; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| delete [] value_list.list_value; |
| default: |
| break; |
| } |
| template_selection = UNINITIALIZED_TEMPLATE; |
| } |
| |
| ConnectionAbort ConnectionAbort_template::valueof() const |
| { |
| if (template_selection != SPECIFIC_VALUE || is_ifpresent) |
| TTCN_error("Performing a valueof or send operation on a non-specific template of type @IsobusCMMessageTypes.ConnectionAbort."); |
| ConnectionAbort ret_val; |
| if (single_value->field_ctrl.is_bound()) { |
| ret_val.ctrl() = single_value->field_ctrl.valueof(); |
| } |
| if (single_value->field_connectionAbortReason.is_bound()) { |
| ret_val.connectionAbortReason() = single_value->field_connectionAbortReason.valueof(); |
| } |
| if (single_value->field_reserved3.is_bound()) { |
| ret_val.reserved3() = single_value->field_reserved3.valueof(); |
| } |
| if (single_value->field_reserved4.is_bound()) { |
| ret_val.reserved4() = single_value->field_reserved4.valueof(); |
| } |
| if (single_value->field_reserved5.is_bound()) { |
| ret_val.reserved5() = single_value->field_reserved5.valueof(); |
| } |
| if (single_value->field_pgnOfMultiPacketMessage.is_bound()) { |
| ret_val.pgnOfMultiPacketMessage() = single_value->field_pgnOfMultiPacketMessage.valueof(); |
| } |
| return ret_val; |
| } |
| |
| void ConnectionAbort_template::set_type(template_sel template_type, unsigned int list_length) |
| { |
| if (template_type != VALUE_LIST && template_type != COMPLEMENTED_LIST) |
| TTCN_error("Setting an invalid list for a template of type @IsobusCMMessageTypes.ConnectionAbort."); |
| clean_up(); |
| set_selection(template_type); |
| value_list.n_values = list_length; |
| value_list.list_value = new ConnectionAbort_template[list_length]; |
| } |
| |
| ConnectionAbort_template& ConnectionAbort_template::list_item(unsigned int list_index) const |
| { |
| if (template_selection != VALUE_LIST && template_selection != COMPLEMENTED_LIST) |
| TTCN_error("Accessing a list element of a non-list template of type @IsobusCMMessageTypes.ConnectionAbort."); |
| if (list_index >= value_list.n_values) |
| TTCN_error("Index overflow in a value list template of type @IsobusCMMessageTypes.ConnectionAbort."); |
| return value_list.list_value[list_index]; |
| } |
| |
| OCTETSTRING_template& ConnectionAbort_template::ctrl() |
| { |
| set_specific(); |
| return single_value->field_ctrl; |
| } |
| |
| const OCTETSTRING_template& ConnectionAbort_template::ctrl() const |
| { |
| if (template_selection != SPECIFIC_VALUE) |
| TTCN_error("Accessing field ctrl of a non-specific template of type @IsobusCMMessageTypes.ConnectionAbort."); |
| return single_value->field_ctrl; |
| } |
| |
| e__ConnectionAbort__AbortReason_template& ConnectionAbort_template::connectionAbortReason() |
| { |
| set_specific(); |
| return single_value->field_connectionAbortReason; |
| } |
| |
| const e__ConnectionAbort__AbortReason_template& ConnectionAbort_template::connectionAbortReason() const |
| { |
| if (template_selection != SPECIFIC_VALUE) |
| TTCN_error("Accessing field connectionAbortReason of a non-specific template of type @IsobusCMMessageTypes.ConnectionAbort."); |
| return single_value->field_connectionAbortReason; |
| } |
| |
| OCTETSTRING_template& ConnectionAbort_template::reserved3() |
| { |
| set_specific(); |
| return single_value->field_reserved3; |
| } |
| |
| const OCTETSTRING_template& ConnectionAbort_template::reserved3() const |
| { |
| if (template_selection != SPECIFIC_VALUE) |
| TTCN_error("Accessing field reserved3 of a non-specific template of type @IsobusCMMessageTypes.ConnectionAbort."); |
| return single_value->field_reserved3; |
| } |
| |
| OCTETSTRING_template& ConnectionAbort_template::reserved4() |
| { |
| set_specific(); |
| return single_value->field_reserved4; |
| } |
| |
| const OCTETSTRING_template& ConnectionAbort_template::reserved4() const |
| { |
| if (template_selection != SPECIFIC_VALUE) |
| TTCN_error("Accessing field reserved4 of a non-specific template of type @IsobusCMMessageTypes.ConnectionAbort."); |
| return single_value->field_reserved4; |
| } |
| |
| OCTETSTRING_template& ConnectionAbort_template::reserved5() |
| { |
| set_specific(); |
| return single_value->field_reserved5; |
| } |
| |
| const OCTETSTRING_template& ConnectionAbort_template::reserved5() const |
| { |
| if (template_selection != SPECIFIC_VALUE) |
| TTCN_error("Accessing field reserved5 of a non-specific template of type @IsobusCMMessageTypes.ConnectionAbort."); |
| return single_value->field_reserved5; |
| } |
| |
| INTEGER_template& ConnectionAbort_template::pgnOfMultiPacketMessage() |
| { |
| set_specific(); |
| return single_value->field_pgnOfMultiPacketMessage; |
| } |
| |
| const INTEGER_template& ConnectionAbort_template::pgnOfMultiPacketMessage() const |
| { |
| if (template_selection != SPECIFIC_VALUE) |
| TTCN_error("Accessing field pgnOfMultiPacketMessage of a non-specific template of type @IsobusCMMessageTypes.ConnectionAbort."); |
| return single_value->field_pgnOfMultiPacketMessage; |
| } |
| |
| int ConnectionAbort_template::size_of() const |
| { |
| if (is_ifpresent) TTCN_error("Performing sizeof() operation on a template of type @IsobusCMMessageTypes.ConnectionAbort which has an ifpresent attribute."); |
| switch (template_selection) |
| { |
| case SPECIFIC_VALUE: |
| return 6; |
| case VALUE_LIST: |
| { |
| if (value_list.n_values<1) |
| TTCN_error("Internal error: Performing sizeof() operation on a template of type @IsobusCMMessageTypes.ConnectionAbort containing an empty list."); |
| int item_size = value_list.list_value[0].size_of(); |
| for (unsigned int l_idx = 1; l_idx < value_list.n_values; l_idx++) |
| { |
| if (value_list.list_value[l_idx].size_of()!=item_size) |
| TTCN_error("Performing sizeof() operation on a template of type @IsobusCMMessageTypes.ConnectionAbort containing a value list with different sizes."); |
| } |
| return item_size; |
| } |
| case OMIT_VALUE: |
| TTCN_error("Performing sizeof() operation on a template of type @IsobusCMMessageTypes.ConnectionAbort containing omit value."); |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| TTCN_error("Performing sizeof() operation on a template of type @IsobusCMMessageTypes.ConnectionAbort containing */? value."); |
| case COMPLEMENTED_LIST: |
| TTCN_error("Performing sizeof() operation on a template of type @IsobusCMMessageTypes.ConnectionAbort containing complemented list."); |
| default: |
| TTCN_error("Performing sizeof() operation on an uninitialized/unsupported template of type @IsobusCMMessageTypes.ConnectionAbort."); |
| } |
| return 0; |
| } |
| |
| void ConnectionAbort_template::log() const |
| { |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| TTCN_Logger::log_event_str("{ ctrl := "); |
| single_value->field_ctrl.log(); |
| TTCN_Logger::log_event_str(", connectionAbortReason := "); |
| single_value->field_connectionAbortReason.log(); |
| TTCN_Logger::log_event_str(", reserved3 := "); |
| single_value->field_reserved3.log(); |
| TTCN_Logger::log_event_str(", reserved4 := "); |
| single_value->field_reserved4.log(); |
| TTCN_Logger::log_event_str(", reserved5 := "); |
| single_value->field_reserved5.log(); |
| TTCN_Logger::log_event_str(", pgnOfMultiPacketMessage := "); |
| single_value->field_pgnOfMultiPacketMessage.log(); |
| TTCN_Logger::log_event_str(" }"); |
| break; |
| case COMPLEMENTED_LIST: |
| TTCN_Logger::log_event_str("complement"); |
| case VALUE_LIST: |
| TTCN_Logger::log_char('('); |
| for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) { |
| if (list_count > 0) TTCN_Logger::log_event_str(", "); |
| value_list.list_value[list_count].log(); |
| } |
| TTCN_Logger::log_char(')'); |
| break; |
| default: |
| log_generic(); |
| } |
| log_ifpresent(); |
| } |
| |
| void ConnectionAbort_template::log_match(const ConnectionAbort& match_value, boolean legacy) const |
| { |
| if(TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity()){ |
| if(match(match_value, legacy)){ |
| TTCN_Logger::print_logmatch_buffer(); |
| TTCN_Logger::log_event_str(" matched"); |
| } else{ |
| if (template_selection == SPECIFIC_VALUE) { |
| size_t previous_size = TTCN_Logger::get_logmatch_buffer_len(); |
| if(!single_value->field_ctrl.match(match_value.ctrl(), legacy)){ |
| TTCN_Logger::log_logmatch_info(".ctrl"); |
| single_value->field_ctrl.log_match(match_value.ctrl(), legacy); |
| TTCN_Logger::set_logmatch_buffer_len(previous_size); |
| } |
| if(!single_value->field_connectionAbortReason.match(match_value.connectionAbortReason(), legacy)){ |
| TTCN_Logger::log_logmatch_info(".connectionAbortReason"); |
| single_value->field_connectionAbortReason.log_match(match_value.connectionAbortReason(), legacy); |
| TTCN_Logger::set_logmatch_buffer_len(previous_size); |
| } |
| if(!single_value->field_reserved3.match(match_value.reserved3(), legacy)){ |
| TTCN_Logger::log_logmatch_info(".reserved3"); |
| single_value->field_reserved3.log_match(match_value.reserved3(), legacy); |
| TTCN_Logger::set_logmatch_buffer_len(previous_size); |
| } |
| if(!single_value->field_reserved4.match(match_value.reserved4(), legacy)){ |
| TTCN_Logger::log_logmatch_info(".reserved4"); |
| single_value->field_reserved4.log_match(match_value.reserved4(), legacy); |
| TTCN_Logger::set_logmatch_buffer_len(previous_size); |
| } |
| if(!single_value->field_reserved5.match(match_value.reserved5(), legacy)){ |
| TTCN_Logger::log_logmatch_info(".reserved5"); |
| single_value->field_reserved5.log_match(match_value.reserved5(), legacy); |
| TTCN_Logger::set_logmatch_buffer_len(previous_size); |
| } |
| if(!single_value->field_pgnOfMultiPacketMessage.match(match_value.pgnOfMultiPacketMessage(), legacy)){ |
| TTCN_Logger::log_logmatch_info(".pgnOfMultiPacketMessage"); |
| single_value->field_pgnOfMultiPacketMessage.log_match(match_value.pgnOfMultiPacketMessage(), legacy); |
| TTCN_Logger::set_logmatch_buffer_len(previous_size); |
| } |
| }else { |
| TTCN_Logger::print_logmatch_buffer(); |
| match_value.log(); |
| TTCN_Logger::log_event_str(" with "); |
| log(); |
| TTCN_Logger::log_event_str(" unmatched"); |
| } |
| } |
| return; |
| } |
| if (template_selection == SPECIFIC_VALUE) { |
| TTCN_Logger::log_event_str("{ ctrl := "); |
| single_value->field_ctrl.log_match(match_value.ctrl(), legacy); |
| TTCN_Logger::log_event_str(", connectionAbortReason := "); |
| single_value->field_connectionAbortReason.log_match(match_value.connectionAbortReason(), legacy); |
| TTCN_Logger::log_event_str(", reserved3 := "); |
| single_value->field_reserved3.log_match(match_value.reserved3(), legacy); |
| TTCN_Logger::log_event_str(", reserved4 := "); |
| single_value->field_reserved4.log_match(match_value.reserved4(), legacy); |
| TTCN_Logger::log_event_str(", reserved5 := "); |
| single_value->field_reserved5.log_match(match_value.reserved5(), legacy); |
| TTCN_Logger::log_event_str(", pgnOfMultiPacketMessage := "); |
| single_value->field_pgnOfMultiPacketMessage.log_match(match_value.pgnOfMultiPacketMessage(), legacy); |
| TTCN_Logger::log_event_str(" }"); |
| } else { |
| match_value.log(); |
| TTCN_Logger::log_event_str(" with "); |
| log(); |
| if (match(match_value, legacy)) TTCN_Logger::log_event_str(" matched"); |
| else TTCN_Logger::log_event_str(" unmatched"); |
| } |
| } |
| |
| void ConnectionAbort_template::encode_text(Text_Buf& text_buf) const |
| { |
| encode_text_base(text_buf); |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| single_value->field_ctrl.encode_text(text_buf); |
| single_value->field_connectionAbortReason.encode_text(text_buf); |
| single_value->field_reserved3.encode_text(text_buf); |
| single_value->field_reserved4.encode_text(text_buf); |
| single_value->field_reserved5.encode_text(text_buf); |
| single_value->field_pgnOfMultiPacketMessage.encode_text(text_buf); |
| case OMIT_VALUE: |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| break; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| text_buf.push_int(value_list.n_values); |
| for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) |
| value_list.list_value[list_count].encode_text(text_buf); |
| break; |
| default: |
| TTCN_error("Text encoder: Encoding an uninitialized/unsupported template of type @IsobusCMMessageTypes.ConnectionAbort."); |
| } |
| } |
| |
| void ConnectionAbort_template::decode_text(Text_Buf& text_buf) |
| { |
| clean_up(); |
| decode_text_base(text_buf); |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| single_value = new single_value_struct; |
| single_value->field_ctrl.decode_text(text_buf); |
| single_value->field_connectionAbortReason.decode_text(text_buf); |
| single_value->field_reserved3.decode_text(text_buf); |
| single_value->field_reserved4.decode_text(text_buf); |
| single_value->field_reserved5.decode_text(text_buf); |
| single_value->field_pgnOfMultiPacketMessage.decode_text(text_buf); |
| case OMIT_VALUE: |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| break; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| value_list.n_values = text_buf.pull_int().get_val(); |
| value_list.list_value = new ConnectionAbort_template[value_list.n_values]; |
| for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) |
| value_list.list_value[list_count].decode_text(text_buf); |
| break; |
| default: |
| TTCN_error("Text decoder: An unknown/unsupported selection was received in a template of type @IsobusCMMessageTypes.ConnectionAbort."); |
| } |
| } |
| |
| void ConnectionAbort_template::set_param(Module_Param& param) |
| { |
| param.basic_check(Module_Param::BC_TEMPLATE, "record template"); |
| switch (param.get_type()) { |
| case Module_Param::MP_Omit: |
| *this = OMIT_VALUE; |
| break; |
| case Module_Param::MP_Any: |
| *this = ANY_VALUE; |
| break; |
| case Module_Param::MP_AnyOrNone: |
| *this = ANY_OR_OMIT; |
| break; |
| case Module_Param::MP_List_Template: |
| case Module_Param::MP_ComplementList_Template: { |
| ConnectionAbort_template new_temp; |
| new_temp.set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : COMPLEMENTED_LIST, param.get_size()); |
| for (size_t p_i=0; p_i<param.get_size(); p_i++) { |
| new_temp.list_item(p_i).set_param(*param.get_elem(p_i)); |
| } |
| *this = new_temp; |
| break; } |
| case Module_Param::MP_Value_List: |
| if (6<param.get_size()) { |
| param.error("record template of type @IsobusCMMessageTypes.ConnectionAbort has 6 fields but list value has %d fields", (int)param.get_size()); |
| } |
| if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) ctrl().set_param(*param.get_elem(0)); |
| if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) connectionAbortReason().set_param(*param.get_elem(1)); |
| if (param.get_size()>2 && param.get_elem(2)->get_type()!=Module_Param::MP_NotUsed) reserved3().set_param(*param.get_elem(2)); |
| if (param.get_size()>3 && param.get_elem(3)->get_type()!=Module_Param::MP_NotUsed) reserved4().set_param(*param.get_elem(3)); |
| if (param.get_size()>4 && param.get_elem(4)->get_type()!=Module_Param::MP_NotUsed) reserved5().set_param(*param.get_elem(4)); |
| if (param.get_size()>5 && param.get_elem(5)->get_type()!=Module_Param::MP_NotUsed) pgnOfMultiPacketMessage().set_param(*param.get_elem(5)); |
| break; |
| case Module_Param::MP_Assignment_List: { |
| Vector<bool> value_used(param.get_size()); |
| value_used.resize(param.get_size(), FALSE); |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "ctrl")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| ctrl().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "connectionAbortReason")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| connectionAbortReason().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "reserved3")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| reserved3().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "reserved4")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| reserved4().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "reserved5")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| reserved5().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "pgnOfMultiPacketMessage")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| pgnOfMultiPacketMessage().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| curr_param->error("Non existent field name in type @IsobusCMMessageTypes.ConnectionAbort: %s", curr_param->get_id()->get_name()); |
| break; |
| } |
| } break; |
| default: |
| param.type_error("record template", "@IsobusCMMessageTypes.ConnectionAbort"); |
| } |
| is_ifpresent = param.get_ifpresent(); |
| } |
| |
| void ConnectionAbort_template::check_restriction(template_res t_res, const char* t_name, boolean legacy) const |
| { |
| if (template_selection==UNINITIALIZED_TEMPLATE) return; |
| switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) { |
| case TR_OMIT: |
| if (template_selection==OMIT_VALUE) return; |
| case TR_VALUE: |
| if (template_selection!=SPECIFIC_VALUE || is_ifpresent) break; |
| single_value->field_ctrl.check_restriction(t_res, t_name ? t_name : "@IsobusCMMessageTypes.ConnectionAbort"); |
| single_value->field_connectionAbortReason.check_restriction(t_res, t_name ? t_name : "@IsobusCMMessageTypes.ConnectionAbort"); |
| single_value->field_reserved3.check_restriction(t_res, t_name ? t_name : "@IsobusCMMessageTypes.ConnectionAbort"); |
| single_value->field_reserved4.check_restriction(t_res, t_name ? t_name : "@IsobusCMMessageTypes.ConnectionAbort"); |
| single_value->field_reserved5.check_restriction(t_res, t_name ? t_name : "@IsobusCMMessageTypes.ConnectionAbort"); |
| single_value->field_pgnOfMultiPacketMessage.check_restriction(t_res, t_name ? t_name : "@IsobusCMMessageTypes.ConnectionAbort"); |
| return; |
| case TR_PRESENT: |
| if (!match_omit(legacy)) return; |
| break; |
| default: |
| return; |
| } |
| TTCN_error("Restriction `%s' on template of type %s violated.", get_res_name(t_res), t_name ? t_name : "@IsobusCMMessageTypes.ConnectionAbort"); |
| } |
| |
| boolean ConnectionAbort_template::is_present(boolean legacy) const |
| { |
| if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE; |
| return !match_omit(legacy); |
| } |
| |
| boolean ConnectionAbort_template::match_omit(boolean legacy) const |
| { |
| if (is_ifpresent) return TRUE; |
| switch (template_selection) { |
| case OMIT_VALUE: |
| case ANY_OR_OMIT: |
| return TRUE; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| if (legacy) { |
| for (unsigned int l_idx=0; l_idx<value_list.n_values; l_idx++) |
| if (value_list.list_value[l_idx].match_omit()) |
| return template_selection==VALUE_LIST; |
| return template_selection==COMPLEMENTED_LIST; |
| } // else fall through |
| default: |
| return FALSE; |
| } |
| return FALSE; |
| } |
| |
| BroadcastAnnounce::BroadcastAnnounce() |
| { |
| } |
| |
| BroadcastAnnounce::BroadcastAnnounce(const OCTETSTRING& par_ctrl, |
| const INTEGER& par_msgSizeInByte, |
| const INTEGER& par_totalNumberOfPackets, |
| const OCTETSTRING& par_reserved5, |
| const INTEGER& par_pgnOfMultiPacketMessage) |
| : field_ctrl(par_ctrl), |
| field_msgSizeInByte(par_msgSizeInByte), |
| field_totalNumberOfPackets(par_totalNumberOfPackets), |
| field_reserved5(par_reserved5), |
| field_pgnOfMultiPacketMessage(par_pgnOfMultiPacketMessage) |
| { |
| } |
| |
| BroadcastAnnounce::BroadcastAnnounce(const BroadcastAnnounce& other_value) |
| { |
| if(!other_value.is_bound()) TTCN_error("Copying an unbound value of type @IsobusCMMessageTypes.BroadcastAnnounce."); |
| if (other_value.ctrl().is_bound()) field_ctrl = other_value.ctrl(); |
| else field_ctrl.clean_up(); |
| if (other_value.msgSizeInByte().is_bound()) field_msgSizeInByte = other_value.msgSizeInByte(); |
| else field_msgSizeInByte.clean_up(); |
| if (other_value.totalNumberOfPackets().is_bound()) field_totalNumberOfPackets = other_value.totalNumberOfPackets(); |
| else field_totalNumberOfPackets.clean_up(); |
| if (other_value.reserved5().is_bound()) field_reserved5 = other_value.reserved5(); |
| else field_reserved5.clean_up(); |
| if (other_value.pgnOfMultiPacketMessage().is_bound()) field_pgnOfMultiPacketMessage = other_value.pgnOfMultiPacketMessage(); |
| else field_pgnOfMultiPacketMessage.clean_up(); |
| } |
| |
| void BroadcastAnnounce::clean_up() |
| { |
| field_ctrl.clean_up(); |
| field_msgSizeInByte.clean_up(); |
| field_totalNumberOfPackets.clean_up(); |
| field_reserved5.clean_up(); |
| field_pgnOfMultiPacketMessage.clean_up(); |
| } |
| |
| const TTCN_Typedescriptor_t* BroadcastAnnounce::get_descriptor() const { return &BroadcastAnnounce_descr_; } |
| BroadcastAnnounce& BroadcastAnnounce::operator=(const BroadcastAnnounce& other_value) |
| { |
| if (this != &other_value) { |
| if(!other_value.is_bound()) TTCN_error("Assignment of an unbound value of type @IsobusCMMessageTypes.BroadcastAnnounce."); |
| if (other_value.ctrl().is_bound()) field_ctrl = other_value.ctrl(); |
| else field_ctrl.clean_up(); |
| if (other_value.msgSizeInByte().is_bound()) field_msgSizeInByte = other_value.msgSizeInByte(); |
| else field_msgSizeInByte.clean_up(); |
| if (other_value.totalNumberOfPackets().is_bound()) field_totalNumberOfPackets = other_value.totalNumberOfPackets(); |
| else field_totalNumberOfPackets.clean_up(); |
| if (other_value.reserved5().is_bound()) field_reserved5 = other_value.reserved5(); |
| else field_reserved5.clean_up(); |
| if (other_value.pgnOfMultiPacketMessage().is_bound()) field_pgnOfMultiPacketMessage = other_value.pgnOfMultiPacketMessage(); |
| else field_pgnOfMultiPacketMessage.clean_up(); |
| } |
| return *this; |
| } |
| |
| boolean BroadcastAnnounce::operator==(const BroadcastAnnounce& other_value) const |
| { |
| return field_ctrl==other_value.field_ctrl |
| && field_msgSizeInByte==other_value.field_msgSizeInByte |
| && field_totalNumberOfPackets==other_value.field_totalNumberOfPackets |
| && field_reserved5==other_value.field_reserved5 |
| && field_pgnOfMultiPacketMessage==other_value.field_pgnOfMultiPacketMessage; |
| } |
| |
| boolean BroadcastAnnounce::is_bound() const |
| { |
| return (field_ctrl.is_bound()) |
| || (field_msgSizeInByte.is_bound()) |
| || (field_totalNumberOfPackets.is_bound()) |
| || (field_reserved5.is_bound()) |
| || (field_pgnOfMultiPacketMessage.is_bound()); |
| } |
| boolean BroadcastAnnounce::is_value() const |
| { |
| return field_ctrl.is_value() |
| && field_msgSizeInByte.is_value() |
| && field_totalNumberOfPackets.is_value() |
| && field_reserved5.is_value() |
| && field_pgnOfMultiPacketMessage.is_value(); |
| } |
| void BroadcastAnnounce::log() const |
| { |
| if (!is_bound()) { |
| TTCN_Logger::log_event_unbound(); |
| return; |
| } |
| TTCN_Logger::log_event_str("{ ctrl := "); |
| field_ctrl.log(); |
| TTCN_Logger::log_event_str(", msgSizeInByte := "); |
| field_msgSizeInByte.log(); |
| TTCN_Logger::log_event_str(", totalNumberOfPackets := "); |
| field_totalNumberOfPackets.log(); |
| TTCN_Logger::log_event_str(", reserved5 := "); |
| field_reserved5.log(); |
| TTCN_Logger::log_event_str(", pgnOfMultiPacketMessage := "); |
| field_pgnOfMultiPacketMessage.log(); |
| TTCN_Logger::log_event_str(" }"); |
| } |
| |
| void BroadcastAnnounce::set_param(Module_Param& param) |
| { |
| param.basic_check(Module_Param::BC_VALUE, "record value"); |
| switch (param.get_type()) { |
| case Module_Param::MP_Value_List: |
| if (5<param.get_size()) { |
| param.error("record value of type @IsobusCMMessageTypes.BroadcastAnnounce has 5 fields but list value has %d fields", (int)param.get_size()); |
| } |
| if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) ctrl().set_param(*param.get_elem(0)); |
| if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) msgSizeInByte().set_param(*param.get_elem(1)); |
| if (param.get_size()>2 && param.get_elem(2)->get_type()!=Module_Param::MP_NotUsed) totalNumberOfPackets().set_param(*param.get_elem(2)); |
| if (param.get_size()>3 && param.get_elem(3)->get_type()!=Module_Param::MP_NotUsed) reserved5().set_param(*param.get_elem(3)); |
| if (param.get_size()>4 && param.get_elem(4)->get_type()!=Module_Param::MP_NotUsed) pgnOfMultiPacketMessage().set_param(*param.get_elem(4)); |
| break; |
| case Module_Param::MP_Assignment_List: { |
| Vector<bool> value_used(param.get_size()); |
| value_used.resize(param.get_size(), FALSE); |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "ctrl")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| ctrl().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "msgSizeInByte")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| msgSizeInByte().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "totalNumberOfPackets")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| totalNumberOfPackets().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "reserved5")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| reserved5().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "pgnOfMultiPacketMessage")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| pgnOfMultiPacketMessage().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| curr_param->error("Non existent field name in type @IsobusCMMessageTypes.BroadcastAnnounce: %s", curr_param->get_id()->get_name()); |
| break; |
| } |
| } break; |
| default: |
| param.type_error("record value", "@IsobusCMMessageTypes.BroadcastAnnounce"); |
| } |
| } |
| |
| void BroadcastAnnounce::set_implicit_omit() |
| { |
| if (ctrl().is_bound()) ctrl().set_implicit_omit(); |
| if (msgSizeInByte().is_bound()) msgSizeInByte().set_implicit_omit(); |
| if (totalNumberOfPackets().is_bound()) totalNumberOfPackets().set_implicit_omit(); |
| if (reserved5().is_bound()) reserved5().set_implicit_omit(); |
| if (pgnOfMultiPacketMessage().is_bound()) pgnOfMultiPacketMessage().set_implicit_omit(); |
| } |
| |
| void BroadcastAnnounce::encode_text(Text_Buf& text_buf) const |
| { |
| field_ctrl.encode_text(text_buf); |
| field_msgSizeInByte.encode_text(text_buf); |
| field_totalNumberOfPackets.encode_text(text_buf); |
| field_reserved5.encode_text(text_buf); |
| field_pgnOfMultiPacketMessage.encode_text(text_buf); |
| } |
| |
| void BroadcastAnnounce::decode_text(Text_Buf& text_buf) |
| { |
| field_ctrl.decode_text(text_buf); |
| field_msgSizeInByte.decode_text(text_buf); |
| field_totalNumberOfPackets.decode_text(text_buf); |
| field_reserved5.decode_text(text_buf); |
| field_pgnOfMultiPacketMessage.decode_text(text_buf); |
| } |
| |
| void BroadcastAnnounce::encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, TTCN_EncDec::coding_t p_coding, ...) const |
| { |
| va_list pvar; |
| va_start(pvar, p_coding); |
| switch(p_coding) { |
| case TTCN_EncDec::CT_BER: { |
| TTCN_EncDec_ErrorContext ec("While BER-encoding type '%s': ", p_td.name); |
| unsigned BER_coding=va_arg(pvar, unsigned); |
| BER_encode_chk_coding(BER_coding); |
| ASN_BER_TLV_t *tlv=BER_encode_TLV(p_td, BER_coding); |
| tlv->put_in_buffer(p_buf); |
| ASN_BER_TLV_t::destruct(tlv); |
| break;} |
| case TTCN_EncDec::CT_RAW: { |
| TTCN_EncDec_ErrorContext ec("While RAW-encoding type '%s': ", p_td.name); |
| if(!p_td.raw) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No RAW descriptor available for type '%s'.", p_td.name); |
| RAW_enc_tr_pos rp; |
| rp.level=0; |
| rp.pos=NULL; |
| RAW_enc_tree root(FALSE, NULL, &rp, 1, p_td.raw); |
| RAW_encode(p_td, root); |
| root.put_to_buf(p_buf); |
| break;} |
| case TTCN_EncDec::CT_TEXT: { |
| TTCN_EncDec_ErrorContext ec("While TEXT-encoding type '%s': ", p_td.name); |
| if(!p_td.text) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No TEXT descriptor available for type '%s'.", p_td.name); |
| TEXT_encode(p_td,p_buf); |
| break;} |
| case TTCN_EncDec::CT_XER: { |
| TTCN_EncDec_ErrorContext ec("While XER-encoding type '%s': ", p_td.name); |
| unsigned XER_coding=va_arg(pvar, unsigned); |
| XER_encode_chk_coding(XER_coding, p_td); |
| XER_encode(*(p_td.xer),p_buf, XER_coding, 0, 0, 0); |
| p_buf.put_c('\n'); |
| break;} |
| case TTCN_EncDec::CT_JSON: { |
| TTCN_EncDec_ErrorContext ec("While JSON-encoding type '%s': ", p_td.name); |
| if(!p_td.json) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No JSON descriptor available for type '%s'.", p_td.name); |
| JSON_Tokenizer tok(va_arg(pvar, int) != 0); |
| JSON_encode(p_td, tok); |
| p_buf.put_s(tok.get_buffer_length(), (const unsigned char*)tok.get_buffer()); |
| break;} |
| case TTCN_EncDec::CT_OER: { |
| TTCN_EncDec_ErrorContext ec("While OER-encoding type '%s': ", p_td.name); |
| if(!p_td.oer) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No OER descriptor available for type '%s'.", p_td.name); |
| OER_encode(p_td, p_buf); |
| break;} |
| default: |
| TTCN_error("Unknown coding method requested to encode type '%s'", p_td.name); |
| } |
| va_end(pvar); |
| } |
| |
| void BroadcastAnnounce::decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, TTCN_EncDec::coding_t p_coding, ...) |
| { |
| va_list pvar; |
| va_start(pvar, p_coding); |
| switch(p_coding) { |
| case TTCN_EncDec::CT_BER: { |
| TTCN_EncDec_ErrorContext ec("While BER-decoding type '%s': ", p_td.name); |
| unsigned L_form=va_arg(pvar, unsigned); |
| ASN_BER_TLV_t tlv; |
| BER_decode_str2TLV(p_buf, tlv, L_form); |
| BER_decode_TLV(p_td, tlv, L_form); |
| if(tlv.isComplete) p_buf.increase_pos(tlv.get_len()); |
| break;} |
| case TTCN_EncDec::CT_RAW: { |
| TTCN_EncDec_ErrorContext ec("While RAW-decoding type '%s': ", p_td.name); |
| if(!p_td.raw) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No RAW descriptor available for type '%s'.", p_td.name); |
| raw_order_t r_order; |
| switch(p_td.raw->top_bit_order) { |
| case TOP_BIT_LEFT: |
| r_order=ORDER_LSB; |
| break; |
| case TOP_BIT_RIGHT: |
| default: |
| r_order=ORDER_MSB; |
| } |
| int rawr = RAW_decode(p_td, p_buf, p_buf.get_len()*8, r_order); |
| if(rawr<0) switch (-rawr) { |
| case TTCN_EncDec::ET_INCOMPL_MSG: |
| case TTCN_EncDec::ET_LEN_ERR: |
| ec.error((TTCN_EncDec::error_type_t)-rawr, "Can not decode type '%s', because incomplete message was received", p_td.name); |
| break; |
| case 1: |
| default: |
| ec.error(TTCN_EncDec::ET_INVAL_MSG, "Can not decode type '%s', because invalid message was received", p_td.name); |
| break; |
| } |
| break;} |
| case TTCN_EncDec::CT_TEXT: { |
| Limit_Token_List limit; |
| TTCN_EncDec_ErrorContext ec("While TEXT-decoding type '%s': ", p_td.name); |
| if(!p_td.text) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No TEXT descriptor available for type '%s'.", p_td.name); |
| const unsigned char *b_data=p_buf.get_data(); |
| if(b_data[p_buf.get_len()-1]!='\0'){ |
| p_buf.set_pos(p_buf.get_len()); |
| p_buf.put_zero(8,ORDER_LSB); |
| p_buf.rewind(); |
| } |
| if(TEXT_decode(p_td,p_buf,limit)<0) |
| ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name); |
| break;} |
| case TTCN_EncDec::CT_XER: { |
| TTCN_EncDec_ErrorContext ec("While XER-decoding type '%s': ", p_td.name); |
| unsigned XER_coding=va_arg(pvar, unsigned); |
| XER_encode_chk_coding(XER_coding, p_td); |
| XmlReaderWrap reader(p_buf); |
| for (int rd_ok=reader.Read(); rd_ok==1; rd_ok=reader.Read()) { |
| if (reader.NodeType() == XML_READER_TYPE_ELEMENT) break; |
| } |
| XER_decode(*(p_td.xer), reader, XER_coding | XER_TOPLEVEL, XER_NONE, 0); |
| size_t bytes = reader.ByteConsumed(); |
| p_buf.set_pos(bytes); |
| break;} |
| case TTCN_EncDec::CT_JSON: { |
| TTCN_EncDec_ErrorContext ec("While JSON-decoding type '%s': ", p_td.name); |
| if(!p_td.json) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No JSON descriptor available for type '%s'.", p_td.name); |
| JSON_Tokenizer tok((const char*)p_buf.get_data(), p_buf.get_len()); |
| if(JSON_decode(p_td, tok, FALSE)<0) |
| ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name); |
| p_buf.set_pos(tok.get_buf_pos()); |
| break;} |
| case TTCN_EncDec::CT_OER: { |
| TTCN_EncDec_ErrorContext ec("While OER-decoding type '%s': ", p_td.name); |
| if(!p_td.oer) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No OER descriptor available for type '%s'.", p_td.name); |
| OER_struct p_oer; |
| OER_decode(p_td, p_buf, p_oer); |
| break;} |
| default: |
| TTCN_error("Unknown coding method requested to decode type '%s'", p_td.name); |
| } |
| va_end(pvar); |
| } |
| |
| int BroadcastAnnounce::RAW_decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int limit, raw_order_t top_bit_ord, boolean no_err, int, boolean, const RAW_Force_Omit* force_omit) |
| { (void)no_err; |
| int prepaddlength=p_buf.increase_pos_padd(p_td.raw->prepadding); |
| limit-=prepaddlength; |
| size_t last_decoded_pos = p_buf.get_pos_bit(); |
| int decoded_length = 0; |
| int decoded_field_length = 0; |
| raw_order_t local_top_order; |
| if(p_td.raw->top_bit_order==TOP_BIT_INHERITED)local_top_order=top_bit_ord; |
| else if(p_td.raw->top_bit_order==TOP_BIT_RIGHT)local_top_order=ORDER_MSB; |
| else local_top_order=ORDER_LSB; |
| RAW_Force_Omit field_0_force_omit(0, force_omit, BroadcastAnnounce_ctrl_descr_.raw->forceomit); |
| decoded_field_length = field_ctrl.RAW_decode(BroadcastAnnounce_ctrl_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_0_force_omit); |
| if (decoded_field_length < 0) return decoded_field_length; |
| decoded_length+=decoded_field_length; |
| limit-=decoded_field_length; |
| last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit()); |
| RAW_Force_Omit field_1_force_omit(1, force_omit, IsobusMessageTypes::INT2_descr_.raw->forceomit); |
| decoded_field_length = field_msgSizeInByte.RAW_decode(IsobusMessageTypes::INT2_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_1_force_omit); |
| if (decoded_field_length < 0) return decoded_field_length; |
| decoded_length+=decoded_field_length; |
| limit-=decoded_field_length; |
| last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit()); |
| RAW_Force_Omit field_2_force_omit(2, force_omit, NUMBER__OF__PACKETS_descr_.raw->forceomit); |
| decoded_field_length = field_totalNumberOfPackets.RAW_decode(NUMBER__OF__PACKETS_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_2_force_omit); |
| if (decoded_field_length < 0) return decoded_field_length; |
| decoded_length+=decoded_field_length; |
| limit-=decoded_field_length; |
| last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit()); |
| RAW_Force_Omit field_3_force_omit(3, force_omit, BroadcastAnnounce_reserved5_descr_.raw->forceomit); |
| decoded_field_length = field_reserved5.RAW_decode(BroadcastAnnounce_reserved5_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_3_force_omit); |
| if (decoded_field_length < 0) return decoded_field_length; |
| decoded_length+=decoded_field_length; |
| limit-=decoded_field_length; |
| last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit()); |
| RAW_Force_Omit field_4_force_omit(4, force_omit, IsobusMessageTypes::PGN_descr_.raw->forceomit); |
| decoded_field_length = field_pgnOfMultiPacketMessage.RAW_decode(IsobusMessageTypes::PGN_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_4_force_omit); |
| if (decoded_field_length < 0) return decoded_field_length; |
| decoded_length+=decoded_field_length; |
| limit-=decoded_field_length; |
| last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit()); |
| p_buf.set_pos_bit(last_decoded_pos); |
| return decoded_length+prepaddlength+p_buf.increase_pos_padd(p_td.raw->padding); |
| } |
| |
| int BroadcastAnnounce::RAW_encode(const TTCN_Typedescriptor_t&, RAW_enc_tree& myleaf) const { |
| if (!is_bound()) TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_UNBOUND, "Encoding an unbound value."); |
| int encoded_length = 0; |
| myleaf.isleaf = FALSE; |
| myleaf.body.node.num_of_nodes = 5; |
| myleaf.body.node.nodes = init_nodes_of_enc_tree(5); |
| myleaf.body.node.nodes[0] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 0, BroadcastAnnounce_ctrl_descr_.raw); |
| myleaf.body.node.nodes[1] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 1, IsobusMessageTypes::INT2_descr_.raw); |
| myleaf.body.node.nodes[2] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 2, NUMBER__OF__PACKETS_descr_.raw); |
| myleaf.body.node.nodes[3] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 3, BroadcastAnnounce_reserved5_descr_.raw); |
| myleaf.body.node.nodes[4] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 4, IsobusMessageTypes::PGN_descr_.raw); |
| encoded_length += field_ctrl.RAW_encode(BroadcastAnnounce_ctrl_descr_, *myleaf.body.node.nodes[0]); |
| encoded_length += field_msgSizeInByte.RAW_encode(IsobusMessageTypes::INT2_descr_, *myleaf.body.node.nodes[1]); |
| encoded_length += field_totalNumberOfPackets.RAW_encode(NUMBER__OF__PACKETS_descr_, *myleaf.body.node.nodes[2]); |
| encoded_length += field_reserved5.RAW_encode(BroadcastAnnounce_reserved5_descr_, *myleaf.body.node.nodes[3]); |
| encoded_length += field_pgnOfMultiPacketMessage.RAW_encode(IsobusMessageTypes::PGN_descr_, *myleaf.body.node.nodes[4]); |
| return myleaf.length = encoded_length; |
| } |
| |
| struct BroadcastAnnounce_template::single_value_struct { |
| OCTETSTRING_template field_ctrl; |
| INTEGER_template field_msgSizeInByte; |
| INTEGER_template field_totalNumberOfPackets; |
| OCTETSTRING_template field_reserved5; |
| INTEGER_template field_pgnOfMultiPacketMessage; |
| }; |
| |
| void BroadcastAnnounce_template::set_specific() |
| { |
| if (template_selection != SPECIFIC_VALUE) { |
| template_sel old_selection = template_selection; |
| clean_up(); |
| single_value = new single_value_struct; |
| set_selection(SPECIFIC_VALUE); |
| if (old_selection == ANY_VALUE || old_selection == ANY_OR_OMIT) { |
| single_value->field_ctrl = ANY_VALUE; |
| single_value->field_msgSizeInByte = ANY_VALUE; |
| single_value->field_totalNumberOfPackets = ANY_VALUE; |
| single_value->field_reserved5 = ANY_VALUE; |
| single_value->field_pgnOfMultiPacketMessage = ANY_VALUE; |
| } |
| } |
| } |
| |
| void BroadcastAnnounce_template::copy_value(const BroadcastAnnounce& other_value) |
| { |
| single_value = new single_value_struct; |
| if (other_value.ctrl().is_bound()) { |
| single_value->field_ctrl = other_value.ctrl(); |
| } else { |
| single_value->field_ctrl.clean_up(); |
| } |
| if (other_value.msgSizeInByte().is_bound()) { |
| single_value->field_msgSizeInByte = other_value.msgSizeInByte(); |
| } else { |
| single_value->field_msgSizeInByte.clean_up(); |
| } |
| if (other_value.totalNumberOfPackets().is_bound()) { |
| single_value->field_totalNumberOfPackets = other_value.totalNumberOfPackets(); |
| } else { |
| single_value->field_totalNumberOfPackets.clean_up(); |
| } |
| if (other_value.reserved5().is_bound()) { |
| single_value->field_reserved5 = other_value.reserved5(); |
| } else { |
| single_value->field_reserved5.clean_up(); |
| } |
| if (other_value.pgnOfMultiPacketMessage().is_bound()) { |
| single_value->field_pgnOfMultiPacketMessage = other_value.pgnOfMultiPacketMessage(); |
| } else { |
| single_value->field_pgnOfMultiPacketMessage.clean_up(); |
| } |
| set_selection(SPECIFIC_VALUE); |
| } |
| |
| void BroadcastAnnounce_template::copy_template(const BroadcastAnnounce_template& other_value) |
| { |
| switch (other_value.template_selection) { |
| case SPECIFIC_VALUE: |
| single_value = new single_value_struct; |
| if (UNINITIALIZED_TEMPLATE != other_value.ctrl().get_selection()) { |
| single_value->field_ctrl = other_value.ctrl(); |
| } else { |
| single_value->field_ctrl.clean_up(); |
| } |
| if (UNINITIALIZED_TEMPLATE != other_value.msgSizeInByte().get_selection()) { |
| single_value->field_msgSizeInByte = other_value.msgSizeInByte(); |
| } else { |
| single_value->field_msgSizeInByte.clean_up(); |
| } |
| if (UNINITIALIZED_TEMPLATE != other_value.totalNumberOfPackets().get_selection()) { |
| single_value->field_totalNumberOfPackets = other_value.totalNumberOfPackets(); |
| } else { |
| single_value->field_totalNumberOfPackets.clean_up(); |
| } |
| if (UNINITIALIZED_TEMPLATE != other_value.reserved5().get_selection()) { |
| single_value->field_reserved5 = other_value.reserved5(); |
| } else { |
| single_value->field_reserved5.clean_up(); |
| } |
| if (UNINITIALIZED_TEMPLATE != other_value.pgnOfMultiPacketMessage().get_selection()) { |
| single_value->field_pgnOfMultiPacketMessage = other_value.pgnOfMultiPacketMessage(); |
| } else { |
| single_value->field_pgnOfMultiPacketMessage.clean_up(); |
| } |
| case OMIT_VALUE: |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| break; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| value_list.n_values = other_value.value_list.n_values; |
| value_list.list_value = new BroadcastAnnounce_template[value_list.n_values]; |
| for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) |
| value_list.list_value[list_count].copy_template(other_value.value_list.list_value[list_count]); |
| break; |
| default: |
| TTCN_error("Copying an uninitialized/unsupported template of type @IsobusCMMessageTypes.BroadcastAnnounce."); |
| break; |
| } |
| set_selection(other_value); |
| } |
| |
| BroadcastAnnounce_template::BroadcastAnnounce_template() |
| { |
| } |
| |
| BroadcastAnnounce_template::BroadcastAnnounce_template(template_sel other_value) |
| : Base_Template(other_value) |
| { |
| check_single_selection(other_value); |
| } |
| |
| BroadcastAnnounce_template::BroadcastAnnounce_template(const BroadcastAnnounce& other_value) |
| { |
| copy_value(other_value); |
| } |
| |
| BroadcastAnnounce_template::BroadcastAnnounce_template(const OPTIONAL<BroadcastAnnounce>& other_value) |
| { |
| switch (other_value.get_selection()) { |
| case OPTIONAL_PRESENT: |
| copy_value((const BroadcastAnnounce&)other_value); |
| break; |
| case OPTIONAL_OMIT: |
| set_selection(OMIT_VALUE); |
| break; |
| default: |
| TTCN_error("Creating a template of type @IsobusCMMessageTypes.BroadcastAnnounce from an unbound optional field."); |
| } |
| } |
| |
| BroadcastAnnounce_template::BroadcastAnnounce_template(const BroadcastAnnounce_template& other_value) |
| : Base_Template() |
| { |
| copy_template(other_value); |
| } |
| |
| BroadcastAnnounce_template::~BroadcastAnnounce_template() |
| { |
| clean_up(); |
| } |
| |
| BroadcastAnnounce_template& BroadcastAnnounce_template::operator=(template_sel other_value) |
| { |
| check_single_selection(other_value); |
| clean_up(); |
| set_selection(other_value); |
| return *this; |
| } |
| |
| BroadcastAnnounce_template& BroadcastAnnounce_template::operator=(const BroadcastAnnounce& other_value) |
| { |
| clean_up(); |
| copy_value(other_value); |
| return *this; |
| } |
| |
| BroadcastAnnounce_template& BroadcastAnnounce_template::operator=(const OPTIONAL<BroadcastAnnounce>& other_value) |
| { |
| clean_up(); |
| switch (other_value.get_selection()) { |
| case OPTIONAL_PRESENT: |
| copy_value((const BroadcastAnnounce&)other_value); |
| break; |
| case OPTIONAL_OMIT: |
| set_selection(OMIT_VALUE); |
| break; |
| default: |
| TTCN_error("Assignment of an unbound optional field to a template of type @IsobusCMMessageTypes.BroadcastAnnounce."); |
| } |
| return *this; |
| } |
| |
| BroadcastAnnounce_template& BroadcastAnnounce_template::operator=(const BroadcastAnnounce_template& other_value) |
| { |
| if (&other_value != this) { |
| clean_up(); |
| copy_template(other_value); |
| } |
| return *this; |
| } |
| |
| boolean BroadcastAnnounce_template::match(const BroadcastAnnounce& other_value, boolean legacy) const |
| { |
| if (!other_value.is_bound()) return FALSE; |
| switch (template_selection) { |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| return TRUE; |
| case OMIT_VALUE: |
| return FALSE; |
| case SPECIFIC_VALUE: |
| if(!other_value.ctrl().is_bound()) return FALSE; |
| if(!single_value->field_ctrl.match(other_value.ctrl(), legacy))return FALSE; |
| if(!other_value.msgSizeInByte().is_bound()) return FALSE; |
| if(!single_value->field_msgSizeInByte.match(other_value.msgSizeInByte(), legacy))return FALSE; |
| if(!other_value.totalNumberOfPackets().is_bound()) return FALSE; |
| if(!single_value->field_totalNumberOfPackets.match(other_value.totalNumberOfPackets(), legacy))return FALSE; |
| if(!other_value.reserved5().is_bound()) return FALSE; |
| if(!single_value->field_reserved5.match(other_value.reserved5(), legacy))return FALSE; |
| if(!other_value.pgnOfMultiPacketMessage().is_bound()) return FALSE; |
| if(!single_value->field_pgnOfMultiPacketMessage.match(other_value.pgnOfMultiPacketMessage(), legacy))return FALSE; |
| return TRUE; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) |
| if (value_list.list_value[list_count].match(other_value, legacy)) return template_selection == VALUE_LIST; |
| return template_selection == COMPLEMENTED_LIST; |
| default: |
| TTCN_error("Matching an uninitialized/unsupported template of type @IsobusCMMessageTypes.BroadcastAnnounce."); |
| } |
| return FALSE; |
| } |
| |
| boolean BroadcastAnnounce_template::is_bound() const |
| { |
| if (template_selection == UNINITIALIZED_TEMPLATE && !is_ifpresent) return FALSE; |
| if (template_selection != SPECIFIC_VALUE) return TRUE; |
| return single_value->field_ctrl.is_bound() |
| |
| ||single_value->field_msgSizeInByte.is_bound() |
| |
| ||single_value->field_totalNumberOfPackets.is_bound() |
| |
| ||single_value->field_reserved5.is_bound() |
| |
| ||single_value->field_pgnOfMultiPacketMessage.is_bound() |
| ; |
| } |
| |
| boolean BroadcastAnnounce_template::is_value() const |
| { |
| if (template_selection != SPECIFIC_VALUE || is_ifpresent) return FALSE; |
| return single_value->field_ctrl.is_value() |
| &&single_value->field_msgSizeInByte.is_value() |
| &&single_value->field_totalNumberOfPackets.is_value() |
| &&single_value->field_reserved5.is_value() |
| &&single_value->field_pgnOfMultiPacketMessage.is_value(); |
| } |
| |
| void BroadcastAnnounce_template::clean_up() |
| { |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| delete single_value; |
| break; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| delete [] value_list.list_value; |
| default: |
| break; |
| } |
| template_selection = UNINITIALIZED_TEMPLATE; |
| } |
| |
| BroadcastAnnounce BroadcastAnnounce_template::valueof() const |
| { |
| if (template_selection != SPECIFIC_VALUE || is_ifpresent) |
| TTCN_error("Performing a valueof or send operation on a non-specific template of type @IsobusCMMessageTypes.BroadcastAnnounce."); |
| BroadcastAnnounce ret_val; |
| if (single_value->field_ctrl.is_bound()) { |
| ret_val.ctrl() = single_value->field_ctrl.valueof(); |
| } |
| if (single_value->field_msgSizeInByte.is_bound()) { |
| ret_val.msgSizeInByte() = single_value->field_msgSizeInByte.valueof(); |
| } |
| if (single_value->field_totalNumberOfPackets.is_bound()) { |
| ret_val.totalNumberOfPackets() = single_value->field_totalNumberOfPackets.valueof(); |
| } |
| if (single_value->field_reserved5.is_bound()) { |
| ret_val.reserved5() = single_value->field_reserved5.valueof(); |
| } |
| if (single_value->field_pgnOfMultiPacketMessage.is_bound()) { |
| ret_val.pgnOfMultiPacketMessage() = single_value->field_pgnOfMultiPacketMessage.valueof(); |
| } |
| return ret_val; |
| } |
| |
| void BroadcastAnnounce_template::set_type(template_sel template_type, unsigned int list_length) |
| { |
| if (template_type != VALUE_LIST && template_type != COMPLEMENTED_LIST) |
| TTCN_error("Setting an invalid list for a template of type @IsobusCMMessageTypes.BroadcastAnnounce."); |
| clean_up(); |
| set_selection(template_type); |
| value_list.n_values = list_length; |
| value_list.list_value = new BroadcastAnnounce_template[list_length]; |
| } |
| |
| BroadcastAnnounce_template& BroadcastAnnounce_template::list_item(unsigned int list_index) const |
| { |
| if (template_selection != VALUE_LIST && template_selection != COMPLEMENTED_LIST) |
| TTCN_error("Accessing a list element of a non-list template of type @IsobusCMMessageTypes.BroadcastAnnounce."); |
| if (list_index >= value_list.n_values) |
| TTCN_error("Index overflow in a value list template of type @IsobusCMMessageTypes.BroadcastAnnounce."); |
| return value_list.list_value[list_index]; |
| } |
| |
| OCTETSTRING_template& BroadcastAnnounce_template::ctrl() |
| { |
| set_specific(); |
| return single_value->field_ctrl; |
| } |
| |
| const OCTETSTRING_template& BroadcastAnnounce_template::ctrl() const |
| { |
| if (template_selection != SPECIFIC_VALUE) |
| TTCN_error("Accessing field ctrl of a non-specific template of type @IsobusCMMessageTypes.BroadcastAnnounce."); |
| return single_value->field_ctrl; |
| } |
| |
| INTEGER_template& BroadcastAnnounce_template::msgSizeInByte() |
| { |
| set_specific(); |
| return single_value->field_msgSizeInByte; |
| } |
| |
| const INTEGER_template& BroadcastAnnounce_template::msgSizeInByte() const |
| { |
| if (template_selection != SPECIFIC_VALUE) |
| TTCN_error("Accessing field msgSizeInByte of a non-specific template of type @IsobusCMMessageTypes.BroadcastAnnounce."); |
| return single_value->field_msgSizeInByte; |
| } |
| |
| INTEGER_template& BroadcastAnnounce_template::totalNumberOfPackets() |
| { |
| set_specific(); |
| return single_value->field_totalNumberOfPackets; |
| } |
| |
| const INTEGER_template& BroadcastAnnounce_template::totalNumberOfPackets() const |
| { |
| if (template_selection != SPECIFIC_VALUE) |
| TTCN_error("Accessing field totalNumberOfPackets of a non-specific template of type @IsobusCMMessageTypes.BroadcastAnnounce."); |
| return single_value->field_totalNumberOfPackets; |
| } |
| |
| OCTETSTRING_template& BroadcastAnnounce_template::reserved5() |
| { |
| set_specific(); |
| return single_value->field_reserved5; |
| } |
| |
| const OCTETSTRING_template& BroadcastAnnounce_template::reserved5() const |
| { |
| if (template_selection != SPECIFIC_VALUE) |
| TTCN_error("Accessing field reserved5 of a non-specific template of type @IsobusCMMessageTypes.BroadcastAnnounce."); |
| return single_value->field_reserved5; |
| } |
| |
| INTEGER_template& BroadcastAnnounce_template::pgnOfMultiPacketMessage() |
| { |
| set_specific(); |
| return single_value->field_pgnOfMultiPacketMessage; |
| } |
| |
| const INTEGER_template& BroadcastAnnounce_template::pgnOfMultiPacketMessage() const |
| { |
| if (template_selection != SPECIFIC_VALUE) |
| TTCN_error("Accessing field pgnOfMultiPacketMessage of a non-specific template of type @IsobusCMMessageTypes.BroadcastAnnounce."); |
| return single_value->field_pgnOfMultiPacketMessage; |
| } |
| |
| int BroadcastAnnounce_template::size_of() const |
| { |
| if (is_ifpresent) TTCN_error("Performing sizeof() operation on a template of type @IsobusCMMessageTypes.BroadcastAnnounce which has an ifpresent attribute."); |
| switch (template_selection) |
| { |
| case SPECIFIC_VALUE: |
| return 5; |
| case VALUE_LIST: |
| { |
| if (value_list.n_values<1) |
| TTCN_error("Internal error: Performing sizeof() operation on a template of type @IsobusCMMessageTypes.BroadcastAnnounce containing an empty list."); |
| int item_size = value_list.list_value[0].size_of(); |
| for (unsigned int l_idx = 1; l_idx < value_list.n_values; l_idx++) |
| { |
| if (value_list.list_value[l_idx].size_of()!=item_size) |
| TTCN_error("Performing sizeof() operation on a template of type @IsobusCMMessageTypes.BroadcastAnnounce containing a value list with different sizes."); |
| } |
| return item_size; |
| } |
| case OMIT_VALUE: |
| TTCN_error("Performing sizeof() operation on a template of type @IsobusCMMessageTypes.BroadcastAnnounce containing omit value."); |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| TTCN_error("Performing sizeof() operation on a template of type @IsobusCMMessageTypes.BroadcastAnnounce containing */? value."); |
| case COMPLEMENTED_LIST: |
| TTCN_error("Performing sizeof() operation on a template of type @IsobusCMMessageTypes.BroadcastAnnounce containing complemented list."); |
| default: |
| TTCN_error("Performing sizeof() operation on an uninitialized/unsupported template of type @IsobusCMMessageTypes.BroadcastAnnounce."); |
| } |
| return 0; |
| } |
| |
| void BroadcastAnnounce_template::log() const |
| { |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| TTCN_Logger::log_event_str("{ ctrl := "); |
| single_value->field_ctrl.log(); |
| TTCN_Logger::log_event_str(", msgSizeInByte := "); |
| single_value->field_msgSizeInByte.log(); |
| TTCN_Logger::log_event_str(", totalNumberOfPackets := "); |
| single_value->field_totalNumberOfPackets.log(); |
| TTCN_Logger::log_event_str(", reserved5 := "); |
| single_value->field_reserved5.log(); |
| TTCN_Logger::log_event_str(", pgnOfMultiPacketMessage := "); |
| single_value->field_pgnOfMultiPacketMessage.log(); |
| TTCN_Logger::log_event_str(" }"); |
| break; |
| case COMPLEMENTED_LIST: |
| TTCN_Logger::log_event_str("complement"); |
| case VALUE_LIST: |
| TTCN_Logger::log_char('('); |
| for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) { |
| if (list_count > 0) TTCN_Logger::log_event_str(", "); |
| value_list.list_value[list_count].log(); |
| } |
| TTCN_Logger::log_char(')'); |
| break; |
| default: |
| log_generic(); |
| } |
| log_ifpresent(); |
| } |
| |
| void BroadcastAnnounce_template::log_match(const BroadcastAnnounce& match_value, boolean legacy) const |
| { |
| if(TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity()){ |
| if(match(match_value, legacy)){ |
| TTCN_Logger::print_logmatch_buffer(); |
| TTCN_Logger::log_event_str(" matched"); |
| } else{ |
| if (template_selection == SPECIFIC_VALUE) { |
| size_t previous_size = TTCN_Logger::get_logmatch_buffer_len(); |
| if(!single_value->field_ctrl.match(match_value.ctrl(), legacy)){ |
| TTCN_Logger::log_logmatch_info(".ctrl"); |
| single_value->field_ctrl.log_match(match_value.ctrl(), legacy); |
| TTCN_Logger::set_logmatch_buffer_len(previous_size); |
| } |
| if(!single_value->field_msgSizeInByte.match(match_value.msgSizeInByte(), legacy)){ |
| TTCN_Logger::log_logmatch_info(".msgSizeInByte"); |
| single_value->field_msgSizeInByte.log_match(match_value.msgSizeInByte(), legacy); |
| TTCN_Logger::set_logmatch_buffer_len(previous_size); |
| } |
| if(!single_value->field_totalNumberOfPackets.match(match_value.totalNumberOfPackets(), legacy)){ |
| TTCN_Logger::log_logmatch_info(".totalNumberOfPackets"); |
| single_value->field_totalNumberOfPackets.log_match(match_value.totalNumberOfPackets(), legacy); |
| TTCN_Logger::set_logmatch_buffer_len(previous_size); |
| } |
| if(!single_value->field_reserved5.match(match_value.reserved5(), legacy)){ |
| TTCN_Logger::log_logmatch_info(".reserved5"); |
| single_value->field_reserved5.log_match(match_value.reserved5(), legacy); |
| TTCN_Logger::set_logmatch_buffer_len(previous_size); |
| } |
| if(!single_value->field_pgnOfMultiPacketMessage.match(match_value.pgnOfMultiPacketMessage(), legacy)){ |
| TTCN_Logger::log_logmatch_info(".pgnOfMultiPacketMessage"); |
| single_value->field_pgnOfMultiPacketMessage.log_match(match_value.pgnOfMultiPacketMessage(), legacy); |
| TTCN_Logger::set_logmatch_buffer_len(previous_size); |
| } |
| }else { |
| TTCN_Logger::print_logmatch_buffer(); |
| match_value.log(); |
| TTCN_Logger::log_event_str(" with "); |
| log(); |
| TTCN_Logger::log_event_str(" unmatched"); |
| } |
| } |
| return; |
| } |
| if (template_selection == SPECIFIC_VALUE) { |
| TTCN_Logger::log_event_str("{ ctrl := "); |
| single_value->field_ctrl.log_match(match_value.ctrl(), legacy); |
| TTCN_Logger::log_event_str(", msgSizeInByte := "); |
| single_value->field_msgSizeInByte.log_match(match_value.msgSizeInByte(), legacy); |
| TTCN_Logger::log_event_str(", totalNumberOfPackets := "); |
| single_value->field_totalNumberOfPackets.log_match(match_value.totalNumberOfPackets(), legacy); |
| TTCN_Logger::log_event_str(", reserved5 := "); |
| single_value->field_reserved5.log_match(match_value.reserved5(), legacy); |
| TTCN_Logger::log_event_str(", pgnOfMultiPacketMessage := "); |
| single_value->field_pgnOfMultiPacketMessage.log_match(match_value.pgnOfMultiPacketMessage(), legacy); |
| TTCN_Logger::log_event_str(" }"); |
| } else { |
| match_value.log(); |
| TTCN_Logger::log_event_str(" with "); |
| log(); |
| if (match(match_value, legacy)) TTCN_Logger::log_event_str(" matched"); |
| else TTCN_Logger::log_event_str(" unmatched"); |
| } |
| } |
| |
| void BroadcastAnnounce_template::encode_text(Text_Buf& text_buf) const |
| { |
| encode_text_base(text_buf); |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| single_value->field_ctrl.encode_text(text_buf); |
| single_value->field_msgSizeInByte.encode_text(text_buf); |
| single_value->field_totalNumberOfPackets.encode_text(text_buf); |
| single_value->field_reserved5.encode_text(text_buf); |
| single_value->field_pgnOfMultiPacketMessage.encode_text(text_buf); |
| case OMIT_VALUE: |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| break; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| text_buf.push_int(value_list.n_values); |
| for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) |
| value_list.list_value[list_count].encode_text(text_buf); |
| break; |
| default: |
| TTCN_error("Text encoder: Encoding an uninitialized/unsupported template of type @IsobusCMMessageTypes.BroadcastAnnounce."); |
| } |
| } |
| |
| void BroadcastAnnounce_template::decode_text(Text_Buf& text_buf) |
| { |
| clean_up(); |
| decode_text_base(text_buf); |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| single_value = new single_value_struct; |
| single_value->field_ctrl.decode_text(text_buf); |
| single_value->field_msgSizeInByte.decode_text(text_buf); |
| single_value->field_totalNumberOfPackets.decode_text(text_buf); |
| single_value->field_reserved5.decode_text(text_buf); |
| single_value->field_pgnOfMultiPacketMessage.decode_text(text_buf); |
| case OMIT_VALUE: |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| break; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| value_list.n_values = text_buf.pull_int().get_val(); |
| value_list.list_value = new BroadcastAnnounce_template[value_list.n_values]; |
| for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) |
| value_list.list_value[list_count].decode_text(text_buf); |
| break; |
| default: |
| TTCN_error("Text decoder: An unknown/unsupported selection was received in a template of type @IsobusCMMessageTypes.BroadcastAnnounce."); |
| } |
| } |
| |
| void BroadcastAnnounce_template::set_param(Module_Param& param) |
| { |
| param.basic_check(Module_Param::BC_TEMPLATE, "record template"); |
| switch (param.get_type()) { |
| case Module_Param::MP_Omit: |
| *this = OMIT_VALUE; |
| break; |
| case Module_Param::MP_Any: |
| *this = ANY_VALUE; |
| break; |
| case Module_Param::MP_AnyOrNone: |
| *this = ANY_OR_OMIT; |
| break; |
| case Module_Param::MP_List_Template: |
| case Module_Param::MP_ComplementList_Template: { |
| BroadcastAnnounce_template new_temp; |
| new_temp.set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : COMPLEMENTED_LIST, param.get_size()); |
| for (size_t p_i=0; p_i<param.get_size(); p_i++) { |
| new_temp.list_item(p_i).set_param(*param.get_elem(p_i)); |
| } |
| *this = new_temp; |
| break; } |
| case Module_Param::MP_Value_List: |
| if (5<param.get_size()) { |
| param.error("record template of type @IsobusCMMessageTypes.BroadcastAnnounce has 5 fields but list value has %d fields", (int)param.get_size()); |
| } |
| if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) ctrl().set_param(*param.get_elem(0)); |
| if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) msgSizeInByte().set_param(*param.get_elem(1)); |
| if (param.get_size()>2 && param.get_elem(2)->get_type()!=Module_Param::MP_NotUsed) totalNumberOfPackets().set_param(*param.get_elem(2)); |
| if (param.get_size()>3 && param.get_elem(3)->get_type()!=Module_Param::MP_NotUsed) reserved5().set_param(*param.get_elem(3)); |
| if (param.get_size()>4 && param.get_elem(4)->get_type()!=Module_Param::MP_NotUsed) pgnOfMultiPacketMessage().set_param(*param.get_elem(4)); |
| break; |
| case Module_Param::MP_Assignment_List: { |
| Vector<bool> value_used(param.get_size()); |
| value_used.resize(param.get_size(), FALSE); |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "ctrl")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| ctrl().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "msgSizeInByte")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| msgSizeInByte().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "totalNumberOfPackets")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| totalNumberOfPackets().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "reserved5")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| reserved5().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "pgnOfMultiPacketMessage")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| pgnOfMultiPacketMessage().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| curr_param->error("Non existent field name in type @IsobusCMMessageTypes.BroadcastAnnounce: %s", curr_param->get_id()->get_name()); |
| break; |
| } |
| } break; |
| default: |
| param.type_error("record template", "@IsobusCMMessageTypes.BroadcastAnnounce"); |
| } |
| is_ifpresent = param.get_ifpresent(); |
| } |
| |
| void BroadcastAnnounce_template::check_restriction(template_res t_res, const char* t_name, boolean legacy) const |
| { |
| if (template_selection==UNINITIALIZED_TEMPLATE) return; |
| switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) { |
| case TR_OMIT: |
| if (template_selection==OMIT_VALUE) return; |
| case TR_VALUE: |
| if (template_selection!=SPECIFIC_VALUE || is_ifpresent) break; |
| single_value->field_ctrl.check_restriction(t_res, t_name ? t_name : "@IsobusCMMessageTypes.BroadcastAnnounce"); |
| single_value->field_msgSizeInByte.check_restriction(t_res, t_name ? t_name : "@IsobusCMMessageTypes.BroadcastAnnounce"); |
| single_value->field_totalNumberOfPackets.check_restriction(t_res, t_name ? t_name : "@IsobusCMMessageTypes.BroadcastAnnounce"); |
| single_value->field_reserved5.check_restriction(t_res, t_name ? t_name : "@IsobusCMMessageTypes.BroadcastAnnounce"); |
| single_value->field_pgnOfMultiPacketMessage.check_restriction(t_res, t_name ? t_name : "@IsobusCMMessageTypes.BroadcastAnnounce"); |
| return; |
| case TR_PRESENT: |
| if (!match_omit(legacy)) return; |
| break; |
| default: |
| return; |
| } |
| TTCN_error("Restriction `%s' on template of type %s violated.", get_res_name(t_res), t_name ? t_name : "@IsobusCMMessageTypes.BroadcastAnnounce"); |
| } |
| |
| boolean BroadcastAnnounce_template::is_present(boolean legacy) const |
| { |
| if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE; |
| return !match_omit(legacy); |
| } |
| |
| boolean BroadcastAnnounce_template::match_omit(boolean legacy) const |
| { |
| if (is_ifpresent) return TRUE; |
| switch (template_selection) { |
| case OMIT_VALUE: |
| case ANY_OR_OMIT: |
| return TRUE; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| if (legacy) { |
| for (unsigned int l_idx=0; l_idx<value_list.n_values; l_idx++) |
| if (value_list.list_value[l_idx].match_omit()) |
| return template_selection==VALUE_LIST; |
| return template_selection==COMPLEMENTED_LIST; |
| } // else fall through |
| default: |
| return FALSE; |
| } |
| return FALSE; |
| } |
| |
| void TP__CM::copy_value(const TP__CM& other_value) |
| { |
| switch (other_value.union_selection) { |
| case ALT_requestToSend: |
| field_requestToSend = new RequestToSend(*other_value.field_requestToSend); |
| break; |
| case ALT_clearToSend: |
| field_clearToSend = new ClearToSend(*other_value.field_clearToSend); |
| break; |
| case ALT_endOfMessageAcknowledgement: |
| field_endOfMessageAcknowledgement = new EndOfMessageAcknowledgement(*other_value.field_endOfMessageAcknowledgement); |
| break; |
| case ALT_broadcastAnnounce: |
| field_broadcastAnnounce = new BroadcastAnnounce(*other_value.field_broadcastAnnounce); |
| break; |
| case ALT_connectionAbort: |
| field_connectionAbort = new ConnectionAbort(*other_value.field_connectionAbort); |
| break; |
| default: |
| TTCN_error("Assignment of an unbound union value of type @IsobusCMMessageTypes.TP_CM."); |
| } |
| union_selection = other_value.union_selection; |
| } |
| |
| TP__CM::TP__CM() |
| { |
| union_selection = UNBOUND_VALUE; |
| } |
| |
| TP__CM::TP__CM(const TP__CM& other_value) |
| : Base_Type(){ |
| copy_value(other_value); |
| } |
| |
| TP__CM::~TP__CM() |
| { |
| clean_up(); |
| } |
| |
| TP__CM& TP__CM::operator=(const TP__CM& other_value) |
| { |
| if (this != &other_value) { |
| clean_up(); |
| copy_value(other_value); |
| } |
| return *this; |
| } |
| |
| boolean TP__CM::operator==(const TP__CM& other_value) const |
| { |
| if (union_selection == UNBOUND_VALUE) TTCN_error("The left operand of comparison is an unbound value of union type @IsobusCMMessageTypes.TP_CM."); |
| if (other_value.union_selection == UNBOUND_VALUE) TTCN_error("The right operand of comparison is an unbound value of union type @IsobusCMMessageTypes.TP_CM."); |
| if (union_selection != other_value.union_selection) return FALSE; |
| switch (union_selection) { |
| case ALT_requestToSend: |
| return *field_requestToSend == *other_value.field_requestToSend; |
| case ALT_clearToSend: |
| return *field_clearToSend == *other_value.field_clearToSend; |
| case ALT_endOfMessageAcknowledgement: |
| return *field_endOfMessageAcknowledgement == *other_value.field_endOfMessageAcknowledgement; |
| case ALT_broadcastAnnounce: |
| return *field_broadcastAnnounce == *other_value.field_broadcastAnnounce; |
| case ALT_connectionAbort: |
| return *field_connectionAbort == *other_value.field_connectionAbort; |
| default: |
| return FALSE; |
| } |
| } |
| |
| RequestToSend& TP__CM::requestToSend() |
| { |
| if (union_selection != ALT_requestToSend) { |
| clean_up(); |
| field_requestToSend = new RequestToSend; |
| union_selection = ALT_requestToSend; |
| } |
| return *field_requestToSend; |
| } |
| |
| const RequestToSend& TP__CM::requestToSend() const |
| { |
| if (union_selection != ALT_requestToSend) TTCN_error("Using non-selected field requestToSend in a value of union type @IsobusCMMessageTypes.TP_CM."); |
| return *field_requestToSend; |
| } |
| |
| ClearToSend& TP__CM::clearToSend() |
| { |
| if (union_selection != ALT_clearToSend) { |
| clean_up(); |
| field_clearToSend = new ClearToSend; |
| union_selection = ALT_clearToSend; |
| } |
| return *field_clearToSend; |
| } |
| |
| const ClearToSend& TP__CM::clearToSend() const |
| { |
| if (union_selection != ALT_clearToSend) TTCN_error("Using non-selected field clearToSend in a value of union type @IsobusCMMessageTypes.TP_CM."); |
| return *field_clearToSend; |
| } |
| |
| EndOfMessageAcknowledgement& TP__CM::endOfMessageAcknowledgement() |
| { |
| if (union_selection != ALT_endOfMessageAcknowledgement) { |
| clean_up(); |
| field_endOfMessageAcknowledgement = new EndOfMessageAcknowledgement; |
| union_selection = ALT_endOfMessageAcknowledgement; |
| } |
| return *field_endOfMessageAcknowledgement; |
| } |
| |
| const EndOfMessageAcknowledgement& TP__CM::endOfMessageAcknowledgement() const |
| { |
| if (union_selection != ALT_endOfMessageAcknowledgement) TTCN_error("Using non-selected field endOfMessageAcknowledgement in a value of union type @IsobusCMMessageTypes.TP_CM."); |
| return *field_endOfMessageAcknowledgement; |
| } |
| |
| BroadcastAnnounce& TP__CM::broadcastAnnounce() |
| { |
| if (union_selection != ALT_broadcastAnnounce) { |
| clean_up(); |
| field_broadcastAnnounce = new BroadcastAnnounce; |
| union_selection = ALT_broadcastAnnounce; |
| } |
| return *field_broadcastAnnounce; |
| } |
| |
| const BroadcastAnnounce& TP__CM::broadcastAnnounce() const |
| { |
| if (union_selection != ALT_broadcastAnnounce) TTCN_error("Using non-selected field broadcastAnnounce in a value of union type @IsobusCMMessageTypes.TP_CM."); |
| return *field_broadcastAnnounce; |
| } |
| |
| ConnectionAbort& TP__CM::connectionAbort() |
| { |
| if (union_selection != ALT_connectionAbort) { |
| clean_up(); |
| field_connectionAbort = new ConnectionAbort; |
| union_selection = ALT_connectionAbort; |
| } |
| return *field_connectionAbort; |
| } |
| |
| const ConnectionAbort& TP__CM::connectionAbort() const |
| { |
| if (union_selection != ALT_connectionAbort) TTCN_error("Using non-selected field connectionAbort in a value of union type @IsobusCMMessageTypes.TP_CM."); |
| return *field_connectionAbort; |
| } |
| |
| boolean TP__CM::ischosen(union_selection_type checked_selection) const |
| { |
| if (checked_selection == UNBOUND_VALUE) TTCN_error("Internal error: Performing ischosen() operation on an invalid field of union type @IsobusCMMessageTypes.TP_CM."); |
| return union_selection == checked_selection; |
| } |
| |
| boolean TP__CM::is_bound() const |
| { |
| return union_selection != UNBOUND_VALUE; |
| } |
| |
| boolean TP__CM::is_value() const |
| { |
| switch (union_selection) { |
| case UNBOUND_VALUE: return FALSE; |
| case ALT_requestToSend: return field_requestToSend->is_value(); |
| case ALT_clearToSend: return field_clearToSend->is_value(); |
| case ALT_endOfMessageAcknowledgement: return field_endOfMessageAcknowledgement->is_value(); |
| case ALT_broadcastAnnounce: return field_broadcastAnnounce->is_value(); |
| case ALT_connectionAbort: return field_connectionAbort->is_value(); |
| default: TTCN_error("Invalid selection in union is_bound");} |
| } |
| |
| void TP__CM::clean_up() |
| { |
| switch (union_selection) { |
| case ALT_requestToSend: |
| delete field_requestToSend; |
| break; |
| case ALT_clearToSend: |
| delete field_clearToSend; |
| break; |
| case ALT_endOfMessageAcknowledgement: |
| delete field_endOfMessageAcknowledgement; |
| break; |
| case ALT_broadcastAnnounce: |
| delete field_broadcastAnnounce; |
| break; |
| case ALT_connectionAbort: |
| delete field_connectionAbort; |
| break; |
| default: |
| break; |
| } |
| union_selection = UNBOUND_VALUE; |
| } |
| |
| void TP__CM::log() const |
| { |
| switch (union_selection) { |
| case ALT_requestToSend: |
| TTCN_Logger::log_event_str("{ requestToSend := "); |
| field_requestToSend->log(); |
| TTCN_Logger::log_event_str(" }"); |
| break; |
| case ALT_clearToSend: |
| TTCN_Logger::log_event_str("{ clearToSend := "); |
| field_clearToSend->log(); |
| TTCN_Logger::log_event_str(" }"); |
| break; |
| case ALT_endOfMessageAcknowledgement: |
| TTCN_Logger::log_event_str("{ endOfMessageAcknowledgement := "); |
| field_endOfMessageAcknowledgement->log(); |
| TTCN_Logger::log_event_str(" }"); |
| break; |
| case ALT_broadcastAnnounce: |
| TTCN_Logger::log_event_str("{ broadcastAnnounce := "); |
| field_broadcastAnnounce->log(); |
| TTCN_Logger::log_event_str(" }"); |
| break; |
| case ALT_connectionAbort: |
| TTCN_Logger::log_event_str("{ connectionAbort := "); |
| field_connectionAbort->log(); |
| TTCN_Logger::log_event_str(" }"); |
| break; |
| default: |
| TTCN_Logger::log_event_unbound(); |
| } |
| } |
| |
| void TP__CM::set_param(Module_Param& param) |
| { |
| param.basic_check(Module_Param::BC_VALUE, "union value"); |
| Module_Param_Ptr m_p = ¶m; |
| if (m_p->get_type()==Module_Param::MP_Value_List && m_p->get_size()==0) return; |
| if (m_p->get_type()!=Module_Param::MP_Assignment_List) { |
| param.error("union value with field name was expected"); |
| } |
| Module_Param* mp_last = m_p->get_elem(m_p->get_size()-1); |
| char* last_name = mp_last->get_id()->get_name(); |
| if (!strcmp(last_name, "requestToSend")) { |
| requestToSend().set_param(*mp_last); |
| if (!requestToSend().is_bound()) clean_up(); |
| return; |
| } |
| if (!strcmp(last_name, "clearToSend")) { |
| clearToSend().set_param(*mp_last); |
| if (!clearToSend().is_bound()) clean_up(); |
| return; |
| } |
| if (!strcmp(last_name, "endOfMessageAcknowledgement")) { |
| endOfMessageAcknowledgement().set_param(*mp_last); |
| if (!endOfMessageAcknowledgement().is_bound()) clean_up(); |
| return; |
| } |
| if (!strcmp(last_name, "broadcastAnnounce")) { |
| broadcastAnnounce().set_param(*mp_last); |
| if (!broadcastAnnounce().is_bound()) clean_up(); |
| return; |
| } |
| if (!strcmp(last_name, "connectionAbort")) { |
| connectionAbort().set_param(*mp_last); |
| if (!connectionAbort().is_bound()) clean_up(); |
| return; |
| } |
| mp_last->error("Field %s does not exist in type @IsobusCMMessageTypes.TP_CM.", last_name); |
| } |
| |
| void TP__CM::set_implicit_omit() |
| { |
| switch (union_selection) { |
| case ALT_requestToSend: |
| field_requestToSend->set_implicit_omit(); break; |
| case ALT_clearToSend: |
| field_clearToSend->set_implicit_omit(); break; |
| case ALT_endOfMessageAcknowledgement: |
| field_endOfMessageAcknowledgement->set_implicit_omit(); break; |
| case ALT_broadcastAnnounce: |
| field_broadcastAnnounce->set_implicit_omit(); break; |
| case ALT_connectionAbort: |
| field_connectionAbort->set_implicit_omit(); break; |
| default: break; |
| } |
| } |
| |
| void TP__CM::encode_text(Text_Buf& text_buf) const |
| { |
| text_buf.push_int(union_selection); |
| switch (union_selection) { |
| case ALT_requestToSend: |
| field_requestToSend->encode_text(text_buf); |
| break; |
| case ALT_clearToSend: |
| field_clearToSend->encode_text(text_buf); |
| break; |
| case ALT_endOfMessageAcknowledgement: |
| field_endOfMessageAcknowledgement->encode_text(text_buf); |
| break; |
| case ALT_broadcastAnnounce: |
| field_broadcastAnnounce->encode_text(text_buf); |
| break; |
| case ALT_connectionAbort: |
| field_connectionAbort->encode_text(text_buf); |
| break; |
| default: |
| TTCN_error("Text encoder: Encoding an unbound value of union type @IsobusCMMessageTypes.TP_CM."); |
| } |
| } |
| |
| void TP__CM::decode_text(Text_Buf& text_buf) |
| { |
| switch ((union_selection_type)text_buf.pull_int().get_val()) { |
| case ALT_requestToSend: |
| requestToSend().decode_text(text_buf); |
| break; |
| case ALT_clearToSend: |
| clearToSend().decode_text(text_buf); |
| break; |
| case ALT_endOfMessageAcknowledgement: |
| endOfMessageAcknowledgement().decode_text(text_buf); |
| break; |
| case ALT_broadcastAnnounce: |
| broadcastAnnounce().decode_text(text_buf); |
| break; |
| case ALT_connectionAbort: |
| connectionAbort().decode_text(text_buf); |
| break; |
| default: |
| TTCN_error("Text decoder: Unrecognized union selector was received for type @IsobusCMMessageTypes.TP_CM."); |
| } |
| } |
| |
| void TP__CM::encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, TTCN_EncDec::coding_t p_coding, ...) const |
| { |
| va_list pvar; |
| va_start(pvar, p_coding); |
| switch(p_coding) { |
| case TTCN_EncDec::CT_BER: { |
| TTCN_EncDec_ErrorContext ec("While BER-encoding type '%s': ", p_td.name); |
| unsigned BER_coding=va_arg(pvar, unsigned); |
| BER_encode_chk_coding(BER_coding); |
| ASN_BER_TLV_t *tlv=BER_encode_TLV(p_td, BER_coding); |
| tlv->put_in_buffer(p_buf); |
| ASN_BER_TLV_t::destruct(tlv); |
| break;} |
| case TTCN_EncDec::CT_RAW: { |
| TTCN_EncDec_ErrorContext ec("While RAW-encoding type '%s': ", p_td.name); |
| if(!p_td.raw) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No RAW descriptor available for type '%s'.", p_td.name); |
| RAW_enc_tr_pos rp; |
| rp.level=0; |
| rp.pos=NULL; |
| RAW_enc_tree root(TRUE, NULL, &rp, 1, p_td.raw); |
| RAW_encode(p_td, root); |
| root.put_to_buf(p_buf); |
| break;} |
| case TTCN_EncDec::CT_TEXT: { |
| TTCN_EncDec_ErrorContext ec("While TEXT-encoding type '%s': ", p_td.name); |
| if(!p_td.text) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No TEXT descriptor available for type '%s'.", p_td.name); |
| TEXT_encode(p_td,p_buf); |
| break;} |
| case TTCN_EncDec::CT_XER: { |
| TTCN_EncDec_ErrorContext ec("While XER-encoding type '%s': ", p_td.name); |
| unsigned XER_coding=va_arg(pvar, unsigned); |
| XER_encode_chk_coding(XER_coding, p_td); |
| XER_encode(*(p_td.xer),p_buf, XER_coding, 0, 0, 0); |
| p_buf.put_c('\n'); |
| break;} |
| case TTCN_EncDec::CT_JSON: { |
| TTCN_EncDec_ErrorContext ec("While JSON-encoding type '%s': ", p_td.name); |
| if(!p_td.json) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No JSON descriptor available for type '%s'.", p_td.name); |
| JSON_Tokenizer tok(va_arg(pvar, int) != 0); |
| JSON_encode(p_td, tok); |
| p_buf.put_s(tok.get_buffer_length(), (const unsigned char*)tok.get_buffer()); |
| break;} |
| case TTCN_EncDec::CT_OER: { |
| TTCN_EncDec_ErrorContext ec("While OER-encoding type '%s': ", p_td.name); |
| if(!p_td.oer) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No OER descriptor available for type '%s'.", p_td.name); |
| OER_encode(p_td, p_buf); |
| break;} |
| default: |
| TTCN_error("Unknown coding method requested to encode type '%s'", p_td.name); |
| } |
| va_end(pvar); |
| } |
| |
| void TP__CM::decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, TTCN_EncDec::coding_t p_coding, ...) |
| { |
| va_list pvar; |
| va_start(pvar, p_coding); |
| switch(p_coding) { |
| case TTCN_EncDec::CT_BER: { |
| TTCN_EncDec_ErrorContext ec("While BER-decoding type '%s': ", p_td.name); |
| unsigned L_form=va_arg(pvar, unsigned); |
| ASN_BER_TLV_t tlv; |
| BER_decode_str2TLV(p_buf, tlv, L_form); |
| BER_decode_TLV(p_td, tlv, L_form); |
| if(tlv.isComplete) p_buf.increase_pos(tlv.get_len()); |
| break;} |
| case TTCN_EncDec::CT_RAW: { |
| TTCN_EncDec_ErrorContext ec("While RAW-decoding type '%s': ", p_td.name); |
| if(!p_td.raw) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No RAW descriptor available for type '%s'.", p_td.name); |
| raw_order_t r_order; |
| switch(p_td.raw->top_bit_order) { |
| case TOP_BIT_LEFT: |
| r_order=ORDER_LSB; |
| break; |
| case TOP_BIT_RIGHT: |
| default: |
| r_order=ORDER_MSB; |
| } |
| int rawr = RAW_decode(p_td, p_buf, p_buf.get_len()*8, r_order); |
| if(rawr<0) switch (-rawr) { |
| case TTCN_EncDec::ET_INCOMPL_MSG: |
| case TTCN_EncDec::ET_LEN_ERR: |
| ec.error((TTCN_EncDec::error_type_t)-rawr, "Can not decode type '%s', because incomplete message was received", p_td.name); |
| break; |
| case 1: |
| default: |
| ec.error(TTCN_EncDec::ET_INVAL_MSG, "Can not decode type '%s', because invalid message was received", p_td.name); |
| break; |
| } |
| break;} |
| case TTCN_EncDec::CT_TEXT: { |
| Limit_Token_List limit; |
| TTCN_EncDec_ErrorContext ec("While TEXT-decoding type '%s': ", p_td.name); |
| if(!p_td.text) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No TEXT descriptor available for type '%s'.", p_td.name); |
| const unsigned char *b_data=p_buf.get_data(); |
| if(b_data[p_buf.get_len()-1]!='\0'){ |
| p_buf.set_pos(p_buf.get_len()); |
| p_buf.put_zero(8,ORDER_LSB); |
| p_buf.rewind(); |
| } |
| if(TEXT_decode(p_td,p_buf,limit)<0) |
| ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name); |
| break;} |
| case TTCN_EncDec::CT_XER: { |
| TTCN_EncDec_ErrorContext ec("While XER-decoding type '%s': ", p_td.name); |
| unsigned XER_coding=va_arg(pvar, unsigned); |
| XER_encode_chk_coding(XER_coding, p_td); |
| XmlReaderWrap reader(p_buf); |
| for (int rd_ok=reader.Read(); rd_ok==1; rd_ok=reader.Read()) { |
| if (reader.NodeType() == XML_READER_TYPE_ELEMENT) break; |
| } |
| XER_decode(*(p_td.xer), reader, XER_coding | XER_TOPLEVEL, XER_NONE, 0); |
| size_t bytes = reader.ByteConsumed(); |
| p_buf.set_pos(bytes); |
| break;} |
| case TTCN_EncDec::CT_JSON: { |
| TTCN_EncDec_ErrorContext ec("While JSON-decoding type '%s': ", p_td.name); |
| if(!p_td.json) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No JSON descriptor available for type '%s'.", p_td.name); |
| JSON_Tokenizer tok((const char*)p_buf.get_data(), p_buf.get_len()); |
| if(JSON_decode(p_td, tok, FALSE)<0) |
| ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name); |
| p_buf.set_pos(tok.get_buf_pos()); |
| break;} |
| case TTCN_EncDec::CT_OER: { |
| TTCN_EncDec_ErrorContext ec("While OER-decoding type '%s': ", p_td.name); |
| if(!p_td.oer) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No OER descriptor available for type '%s'.", p_td.name); |
| OER_struct p_oer; |
| OER_decode(p_td, p_buf, p_oer); |
| break;} |
| default: |
| TTCN_error("Unknown coding method requested to decode type '%s'", p_td.name); |
| } |
| va_end(pvar); |
| } |
| |
| int TP__CM::RAW_decode( |
| const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int limit, |
| raw_order_t top_bit_ord, boolean no_err, int sel_field, boolean, const RAW_Force_Omit* force_omit) |
| { |
| int prepaddlength=p_buf.increase_pos_padd(p_td.raw->prepadding); |
| limit-=prepaddlength; |
| int decoded_length=0; |
| int starting_pos=p_buf.get_pos_bit(); |
| if(sel_field!=-1){ |
| switch(sel_field){ |
| case 0: { |
| RAW_Force_Omit field_force_omit(0, force_omit, RequestToSend_descr_.raw->forceomit); |
| decoded_length = requestToSend().RAW_decode(RequestToSend_descr_, p_buf, limit, top_bit_ord, no_err, -1, TRUE, &field_force_omit); |
| break; } |
| case 1: { |
| RAW_Force_Omit field_force_omit(1, force_omit, ClearToSend_descr_.raw->forceomit); |
| decoded_length = clearToSend().RAW_decode(ClearToSend_descr_, p_buf, limit, top_bit_ord, no_err, -1, TRUE, &field_force_omit); |
| break; } |
| case 2: { |
| RAW_Force_Omit field_force_omit(2, force_omit, EndOfMessageAcknowledgement_descr_.raw->forceomit); |
| decoded_length = endOfMessageAcknowledgement().RAW_decode(EndOfMessageAcknowledgement_descr_, p_buf, limit, top_bit_ord, no_err, -1, TRUE, &field_force_omit); |
| break; } |
| case 3: { |
| RAW_Force_Omit field_force_omit(3, force_omit, BroadcastAnnounce_descr_.raw->forceomit); |
| decoded_length = broadcastAnnounce().RAW_decode(BroadcastAnnounce_descr_, p_buf, limit, top_bit_ord, no_err, -1, TRUE, &field_force_omit); |
| break; } |
| case 4: { |
| RAW_Force_Omit field_force_omit(4, force_omit, ConnectionAbort_descr_.raw->forceomit); |
| decoded_length = connectionAbort().RAW_decode(ConnectionAbort_descr_, p_buf, limit, top_bit_ord, no_err, -1, TRUE, &field_force_omit); |
| break; } |
| default: break; |
| } |
| return decoded_length + p_buf.increase_pos_padd(p_td.raw->padding) + prepaddlength; |
| } else { |
| boolean already_failed = FALSE; |
| already_failed = FALSE; |
| if (!already_failed) { |
| OCTETSTRING temporal_0; |
| int decoded_0_length; |
| p_buf.set_pos_bit(starting_pos + 0); |
| decoded_0_length = temporal_0.RAW_decode(RequestToSend_ctrl_descr_, p_buf, limit, top_bit_ord, TRUE); |
| if (decoded_0_length > 0) { |
| if (temporal_0 == os_0) { |
| p_buf.set_pos_bit(starting_pos); |
| RAW_Force_Omit field_force_omit(0, force_omit, RequestToSend_descr_.raw->forceomit); |
| decoded_length = requestToSend().RAW_decode(RequestToSend_descr_, p_buf, limit, top_bit_ord, TRUE, -1, TRUE, &field_force_omit); |
| if (decoded_length > 0) { |
| if ((*field_requestToSend).ctrl() == os_0) { |
| return decoded_length + p_buf.increase_pos_padd(p_td.raw->padding) + prepaddlength; |
| }else already_failed = TRUE; |
| } |
| } |
| } |
| } |
| already_failed = FALSE; |
| if (!already_failed) { |
| OCTETSTRING temporal_1; |
| int decoded_1_length; |
| p_buf.set_pos_bit(starting_pos + 0); |
| decoded_1_length = temporal_1.RAW_decode(ClearToSend_ctrl_descr_, p_buf, limit, top_bit_ord, TRUE); |
| if (decoded_1_length > 0) { |
| if (temporal_1 == os_1) { |
| p_buf.set_pos_bit(starting_pos); |
| RAW_Force_Omit field_force_omit(1, force_omit, ClearToSend_descr_.raw->forceomit); |
| decoded_length = clearToSend().RAW_decode(ClearToSend_descr_, p_buf, limit, top_bit_ord, TRUE, -1, TRUE, &field_force_omit); |
| if (decoded_length > 0) { |
| if ((*field_clearToSend).ctrl() == os_1) { |
| return decoded_length + p_buf.increase_pos_padd(p_td.raw->padding) + prepaddlength; |
| }else already_failed = TRUE; |
| } |
| } |
| } |
| } |
| already_failed = FALSE; |
| if (!already_failed) { |
| OCTETSTRING temporal_2; |
| int decoded_2_length; |
| p_buf.set_pos_bit(starting_pos + 0); |
| decoded_2_length = temporal_2.RAW_decode(EndOfMessageAcknowledgement_ctrl_descr_, p_buf, limit, top_bit_ord, TRUE); |
| if (decoded_2_length > 0) { |
| if (temporal_2 == os_2) { |
| p_buf.set_pos_bit(starting_pos); |
| RAW_Force_Omit field_force_omit(2, force_omit, EndOfMessageAcknowledgement_descr_.raw->forceomit); |
| decoded_length = endOfMessageAcknowledgement().RAW_decode(EndOfMessageAcknowledgement_descr_, p_buf, limit, top_bit_ord, TRUE, -1, TRUE, &field_force_omit); |
| if (decoded_length > 0) { |
| if ((*field_endOfMessageAcknowledgement).ctrl() == os_2) { |
| return decoded_length + p_buf.increase_pos_padd(p_td.raw->padding) + prepaddlength; |
| }else already_failed = TRUE; |
| } |
| } |
| } |
| } |
| already_failed = FALSE; |
| if (!already_failed) { |
| OCTETSTRING temporal_3; |
| int decoded_3_length; |
| p_buf.set_pos_bit(starting_pos + 0); |
| decoded_3_length = temporal_3.RAW_decode(BroadcastAnnounce_ctrl_descr_, p_buf, limit, top_bit_ord, TRUE); |
| if (decoded_3_length > 0) { |
| if (temporal_3 == os_3) { |
| p_buf.set_pos_bit(starting_pos); |
| RAW_Force_Omit field_force_omit(3, force_omit, BroadcastAnnounce_descr_.raw->forceomit); |
| decoded_length = broadcastAnnounce().RAW_decode(BroadcastAnnounce_descr_, p_buf, limit, top_bit_ord, TRUE, -1, TRUE, &field_force_omit); |
| if (decoded_length > 0) { |
| if ((*field_broadcastAnnounce).ctrl() == os_3) { |
| return decoded_length + p_buf.increase_pos_padd(p_td.raw->padding) + prepaddlength; |
| }else already_failed = TRUE; |
| } |
| } |
| } |
| } |
| already_failed = FALSE; |
| if (!already_failed) { |
| OCTETSTRING temporal_4; |
| int decoded_4_length; |
| p_buf.set_pos_bit(starting_pos + 0); |
| decoded_4_length = temporal_4.RAW_decode(ConnectionAbort_ctrl_descr_, p_buf, limit, top_bit_ord, TRUE); |
| if (decoded_4_length > 0) { |
| if (temporal_4 == os_4) { |
| p_buf.set_pos_bit(starting_pos); |
| RAW_Force_Omit field_force_omit(4, force_omit, ConnectionAbort_descr_.raw->forceomit); |
| decoded_length = connectionAbort().RAW_decode(ConnectionAbort_descr_, p_buf, limit, top_bit_ord, TRUE, -1, TRUE, &field_force_omit); |
| if (decoded_length > 0) { |
| if ((*field_connectionAbort).ctrl() == os_4) { |
| return decoded_length + p_buf.increase_pos_padd(p_td.raw->padding) + prepaddlength; |
| }else already_failed = TRUE; |
| } |
| } |
| } |
| } |
| } |
| clean_up(); |
| return -1; |
| } |
| |
| int TP__CM::RAW_encode(const TTCN_Typedescriptor_t&, RAW_enc_tree& myleaf) const |
| { |
| int encoded_length = 0; |
| myleaf.isleaf = FALSE; |
| myleaf.body.node.num_of_nodes = 5; myleaf.body.node.nodes = init_nodes_of_enc_tree(5); |
| memset(myleaf.body.node.nodes, 0, 5 * sizeof(RAW_enc_tree *)); |
| switch (union_selection) { |
| case ALT_requestToSend: |
| myleaf.body.node.nodes[0] = new RAW_enc_tree(TRUE, &myleaf, &myleaf.curr_pos, 0, RequestToSend_descr_.raw); |
| encoded_length = field_requestToSend->RAW_encode(RequestToSend_descr_, *myleaf.body.node.nodes[0]); |
| myleaf.body.node.nodes[0]->coding_descr = &RequestToSend_descr_; |
| if ((*field_requestToSend).ctrl() != os_0) { |
| RAW_enc_tree* temp_leaf; |
| { |
| RAW_enc_tr_pos pr_pos0; |
| pr_pos0.level=myleaf.curr_pos.level+2; |
| int new_pos0[]={0,0}; |
| pr_pos0.pos=init_new_tree_pos(myleaf.curr_pos,2,new_pos0); |
| temp_leaf = myleaf.get_node(pr_pos0); |
| if(temp_leaf != NULL){ |
| os_0.RAW_encode(RequestToSend_ctrl_descr_,*temp_leaf); |
| } else { |
| TTCN_EncDec_ErrorContext::error |
| (TTCN_EncDec::ET_OMITTED_TAG, "Encoding a tagged, but omitted value."); |
| } |
| free_tree_pos(pr_pos0.pos); |
| } |
| } |
| break; |
| case ALT_clearToSend: |
| myleaf.body.node.nodes[1] = new RAW_enc_tree(TRUE, &myleaf, &myleaf.curr_pos, 1, ClearToSend_descr_.raw); |
| encoded_length = field_clearToSend->RAW_encode(ClearToSend_descr_, *myleaf.body.node.nodes[1]); |
| myleaf.body.node.nodes[1]->coding_descr = &ClearToSend_descr_; |
| if ((*field_clearToSend).ctrl() != os_1) { |
| RAW_enc_tree* temp_leaf; |
| { |
| RAW_enc_tr_pos pr_pos0; |
| pr_pos0.level=myleaf.curr_pos.level+2; |
| int new_pos0[]={1,0}; |
| pr_pos0.pos=init_new_tree_pos(myleaf.curr_pos,2,new_pos0); |
| temp_leaf = myleaf.get_node(pr_pos0); |
| if(temp_leaf != NULL){ |
| os_1.RAW_encode(ClearToSend_ctrl_descr_,*temp_leaf); |
| } else { |
| TTCN_EncDec_ErrorContext::error |
| (TTCN_EncDec::ET_OMITTED_TAG, "Encoding a tagged, but omitted value."); |
| } |
| free_tree_pos(pr_pos0.pos); |
| } |
| } |
| break; |
| case ALT_endOfMessageAcknowledgement: |
| myleaf.body.node.nodes[2] = new RAW_enc_tree(TRUE, &myleaf, &myleaf.curr_pos, 2, EndOfMessageAcknowledgement_descr_.raw); |
| encoded_length = field_endOfMessageAcknowledgement->RAW_encode(EndOfMessageAcknowledgement_descr_, *myleaf.body.node.nodes[2]); |
| myleaf.body.node.nodes[2]->coding_descr = &EndOfMessageAcknowledgement_descr_; |
| if ((*field_endOfMessageAcknowledgement).ctrl() != os_2) { |
| RAW_enc_tree* temp_leaf; |
| { |
| RAW_enc_tr_pos pr_pos0; |
| pr_pos0.level=myleaf.curr_pos.level+2; |
| int new_pos0[]={2,0}; |
| pr_pos0.pos=init_new_tree_pos(myleaf.curr_pos,2,new_pos0); |
| temp_leaf = myleaf.get_node(pr_pos0); |
| if(temp_leaf != NULL){ |
| os_2.RAW_encode(EndOfMessageAcknowledgement_ctrl_descr_,*temp_leaf); |
| } else { |
| TTCN_EncDec_ErrorContext::error |
| (TTCN_EncDec::ET_OMITTED_TAG, "Encoding a tagged, but omitted value."); |
| } |
| free_tree_pos(pr_pos0.pos); |
| } |
| } |
| break; |
| case ALT_broadcastAnnounce: |
| myleaf.body.node.nodes[3] = new RAW_enc_tree(TRUE, &myleaf, &myleaf.curr_pos, 3, BroadcastAnnounce_descr_.raw); |
| encoded_length = field_broadcastAnnounce->RAW_encode(BroadcastAnnounce_descr_, *myleaf.body.node.nodes[3]); |
| myleaf.body.node.nodes[3]->coding_descr = &BroadcastAnnounce_descr_; |
| if ((*field_broadcastAnnounce).ctrl() != os_3) { |
| RAW_enc_tree* temp_leaf; |
| { |
| RAW_enc_tr_pos pr_pos0; |
| pr_pos0.level=myleaf.curr_pos.level+2; |
| int new_pos0[]={3,0}; |
| pr_pos0.pos=init_new_tree_pos(myleaf.curr_pos,2,new_pos0); |
| temp_leaf = myleaf.get_node(pr_pos0); |
| if(temp_leaf != NULL){ |
| os_3.RAW_encode(BroadcastAnnounce_ctrl_descr_,*temp_leaf); |
| } else { |
| TTCN_EncDec_ErrorContext::error |
| (TTCN_EncDec::ET_OMITTED_TAG, "Encoding a tagged, but omitted value."); |
| } |
| free_tree_pos(pr_pos0.pos); |
| } |
| } |
| break; |
| case ALT_connectionAbort: |
| myleaf.body.node.nodes[4] = new RAW_enc_tree(TRUE, &myleaf, &myleaf.curr_pos, 4, ConnectionAbort_descr_.raw); |
| encoded_length = field_connectionAbort->RAW_encode(ConnectionAbort_descr_, *myleaf.body.node.nodes[4]); |
| myleaf.body.node.nodes[4]->coding_descr = &ConnectionAbort_descr_; |
| if ((*field_connectionAbort).ctrl() != os_4) { |
| RAW_enc_tree* temp_leaf; |
| { |
| RAW_enc_tr_pos pr_pos0; |
| pr_pos0.level=myleaf.curr_pos.level+2; |
| int new_pos0[]={4,0}; |
| pr_pos0.pos=init_new_tree_pos(myleaf.curr_pos,2,new_pos0); |
| temp_leaf = myleaf.get_node(pr_pos0); |
| if(temp_leaf != NULL){ |
| os_4.RAW_encode(ConnectionAbort_ctrl_descr_,*temp_leaf); |
| } else { |
| TTCN_EncDec_ErrorContext::error |
| (TTCN_EncDec::ET_OMITTED_TAG, "Encoding a tagged, but omitted value."); |
| } |
| free_tree_pos(pr_pos0.pos); |
| } |
| } |
| break; |
| default: |
| TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_UNBOUND, "Encoding an unbound value."); |
| } |
| return encoded_length; |
| } |
| |
| void TP__CM_template::copy_value(const TP__CM& other_value) |
| { |
| single_value.union_selection = other_value.get_selection(); |
| switch (single_value.union_selection) { |
| case TP__CM::ALT_requestToSend: |
| single_value.field_requestToSend = new RequestToSend_template(other_value.requestToSend()); |
| break; |
| case TP__CM::ALT_clearToSend: |
| single_value.field_clearToSend = new ClearToSend_template(other_value.clearToSend()); |
| break; |
| case TP__CM::ALT_endOfMessageAcknowledgement: |
| single_value.field_endOfMessageAcknowledgement = new EndOfMessageAcknowledgement_template(other_value.endOfMessageAcknowledgement()); |
| break; |
| case TP__CM::ALT_broadcastAnnounce: |
| single_value.field_broadcastAnnounce = new BroadcastAnnounce_template(other_value.broadcastAnnounce()); |
| break; |
| case TP__CM::ALT_connectionAbort: |
| single_value.field_connectionAbort = new ConnectionAbort_template(other_value.connectionAbort()); |
| break; |
| default: |
| TTCN_error("Initializing a template with an unbound value of type @IsobusCMMessageTypes.TP_CM."); |
| } |
| set_selection(SPECIFIC_VALUE); |
| } |
| |
| void TP__CM_template::copy_template(const TP__CM_template& other_value) |
| { |
| switch (other_value.template_selection) { |
| case SPECIFIC_VALUE: |
| single_value.union_selection = other_value.single_value.union_selection; |
| switch (single_value.union_selection) { |
| case TP__CM::ALT_requestToSend: |
| single_value.field_requestToSend = new RequestToSend_template(*other_value.single_value.field_requestToSend); |
| break; |
| case TP__CM::ALT_clearToSend: |
| single_value.field_clearToSend = new ClearToSend_template(*other_value.single_value.field_clearToSend); |
| break; |
| case TP__CM::ALT_endOfMessageAcknowledgement: |
| single_value.field_endOfMessageAcknowledgement = new EndOfMessageAcknowledgement_template(*other_value.single_value.field_endOfMessageAcknowledgement); |
| break; |
| case TP__CM::ALT_broadcastAnnounce: |
| single_value.field_broadcastAnnounce = new BroadcastAnnounce_template(*other_value.single_value.field_broadcastAnnounce); |
| break; |
| case TP__CM::ALT_connectionAbort: |
| single_value.field_connectionAbort = new ConnectionAbort_template(*other_value.single_value.field_connectionAbort); |
| break; |
| default: |
| TTCN_error("Internal error: Invalid union selector in a specific value when copying a template of type @IsobusCMMessageTypes.TP_CM."); |
| } |
| case OMIT_VALUE: |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| break; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| value_list.n_values = other_value.value_list.n_values; |
| value_list.list_value = new TP__CM_template[value_list.n_values]; |
| for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) |
| value_list.list_value[list_count].copy_template(other_value.value_list.list_value[list_count]); |
| break; |
| default: |
| TTCN_error("Copying an uninitialized template of union type @IsobusCMMessageTypes.TP_CM."); |
| } |
| set_selection(other_value); |
| } |
| |
| TP__CM_template::TP__CM_template() |
| { |
| } |
| |
| TP__CM_template::TP__CM_template(template_sel other_value) |
| : Base_Template(other_value) |
| { |
| check_single_selection(other_value); |
| } |
| |
| TP__CM_template::TP__CM_template(const TP__CM& other_value) |
| { |
| copy_value(other_value); |
| } |
| |
| TP__CM_template::TP__CM_template(const OPTIONAL<TP__CM>& other_value) |
| { |
| switch (other_value.get_selection()) { |
| case OPTIONAL_PRESENT: |
| copy_value((const TP__CM&)other_value); |
| break; |
| case OPTIONAL_OMIT: |
| set_selection(OMIT_VALUE); |
| break; |
| default: |
| TTCN_error("Creating a template of union type @IsobusCMMessageTypes.TP_CM from an unbound optional field."); |
| } |
| } |
| |
| TP__CM_template::TP__CM_template(const TP__CM_template& other_value) |
| : Base_Template(){ |
| copy_template(other_value); |
| } |
| |
| TP__CM_template::~TP__CM_template() |
| { |
| clean_up(); |
| } |
| |
| void TP__CM_template::clean_up() |
| { |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| switch (single_value.union_selection) { |
| case TP__CM::ALT_requestToSend: |
| delete single_value.field_requestToSend; |
| break; |
| case TP__CM::ALT_clearToSend: |
| delete single_value.field_clearToSend; |
| break; |
| case TP__CM::ALT_endOfMessageAcknowledgement: |
| delete single_value.field_endOfMessageAcknowledgement; |
| break; |
| case TP__CM::ALT_broadcastAnnounce: |
| delete single_value.field_broadcastAnnounce; |
| break; |
| case TP__CM::ALT_connectionAbort: |
| delete single_value.field_connectionAbort; |
| default: |
| break; |
| } |
| break; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| delete [] value_list.list_value; |
| default: |
| break; |
| } |
| template_selection = UNINITIALIZED_TEMPLATE; |
| } |
| |
| TP__CM_template& TP__CM_template::operator=(template_sel other_value) |
| { |
| check_single_selection(other_value); |
| clean_up(); |
| set_selection(other_value); |
| return *this; |
| } |
| |
| TP__CM_template& TP__CM_template::operator=(const TP__CM& other_value) |
| { |
| clean_up(); |
| copy_value(other_value); |
| return *this; |
| } |
| |
| TP__CM_template& TP__CM_template::operator=(const OPTIONAL<TP__CM>& other_value) |
| { |
| clean_up(); |
| switch (other_value.get_selection()) { |
| case OPTIONAL_PRESENT: |
| copy_value((const TP__CM&)other_value); |
| break; |
| case OPTIONAL_OMIT: |
| set_selection(OMIT_VALUE); |
| break; |
| default: |
| TTCN_error("Assignment of an unbound optional field to a template of union type @IsobusCMMessageTypes.TP_CM."); |
| } |
| return *this; |
| } |
| |
| TP__CM_template& TP__CM_template::operator=(const TP__CM_template& other_value) |
| { |
| if (&other_value != this) { |
| clean_up(); |
| copy_template(other_value); |
| } |
| return *this; |
| } |
| |
| boolean TP__CM_template::match(const TP__CM& other_value, boolean legacy) const |
| { |
| if (!other_value.is_bound()) return FALSE; |
| switch (template_selection) { |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| return TRUE; |
| case OMIT_VALUE: |
| return FALSE; |
| case SPECIFIC_VALUE: |
| { |
| TP__CM::union_selection_type value_selection = other_value.get_selection(); |
| if (value_selection == TP__CM::UNBOUND_VALUE) return FALSE; |
| if (value_selection != single_value.union_selection) return FALSE; |
| switch (value_selection) { |
| case TP__CM::ALT_requestToSend: |
| return single_value.field_requestToSend->match(other_value.requestToSend(), legacy); |
| case TP__CM::ALT_clearToSend: |
| return single_value.field_clearToSend->match(other_value.clearToSend(), legacy); |
| case TP__CM::ALT_endOfMessageAcknowledgement: |
| return single_value.field_endOfMessageAcknowledgement->match(other_value.endOfMessageAcknowledgement(), legacy); |
| case TP__CM::ALT_broadcastAnnounce: |
| return single_value.field_broadcastAnnounce->match(other_value.broadcastAnnounce(), legacy); |
| case TP__CM::ALT_connectionAbort: |
| return single_value.field_connectionAbort->match(other_value.connectionAbort(), legacy); |
| default: |
| TTCN_error("Internal error: Invalid selector in a specific value when matching a template of union type @IsobusCMMessageTypes.TP_CM."); |
| } |
| } |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) |
| if (value_list.list_value[list_count].match(other_value, legacy)) return template_selection == VALUE_LIST; |
| return template_selection == COMPLEMENTED_LIST; |
| default: |
| TTCN_error ("Matching an uninitialized template of union type @IsobusCMMessageTypes.TP_CM."); |
| } |
| return FALSE; |
| } |
| |
| boolean TP__CM_template::is_value() const |
| { |
| if (template_selection != SPECIFIC_VALUE || is_ifpresent) return FALSE; |
| switch (single_value.union_selection) { |
| case TP__CM::ALT_requestToSend: |
| return single_value.field_requestToSend->is_value(); |
| case TP__CM::ALT_clearToSend: |
| return single_value.field_clearToSend->is_value(); |
| case TP__CM::ALT_endOfMessageAcknowledgement: |
| return single_value.field_endOfMessageAcknowledgement->is_value(); |
| case TP__CM::ALT_broadcastAnnounce: |
| return single_value.field_broadcastAnnounce->is_value(); |
| case TP__CM::ALT_connectionAbort: |
| return single_value.field_connectionAbort->is_value(); |
| default: |
| TTCN_error("Internal error: Invalid selector in a specific value when performing is_value operation on a template of union type @IsobusCMMessageTypes.TP_CM."); |
| } |
| } |
| |
| TP__CM TP__CM_template::valueof() const |
| { |
| if (template_selection != SPECIFIC_VALUE || is_ifpresent) |
| TTCN_error("Performing a valueof or send operation on a non-specific template of union type @IsobusCMMessageTypes.TP_CM."); |
| TP__CM ret_val; |
| switch (single_value.union_selection) { |
| case TP__CM::ALT_requestToSend: |
| ret_val.requestToSend() = single_value.field_requestToSend->valueof(); |
| break; |
| case TP__CM::ALT_clearToSend: |
| ret_val.clearToSend() = single_value.field_clearToSend->valueof(); |
| break; |
| case TP__CM::ALT_endOfMessageAcknowledgement: |
| ret_val.endOfMessageAcknowledgement() = single_value.field_endOfMessageAcknowledgement->valueof(); |
| break; |
| case TP__CM::ALT_broadcastAnnounce: |
| ret_val.broadcastAnnounce() = single_value.field_broadcastAnnounce->valueof(); |
| break; |
| case TP__CM::ALT_connectionAbort: |
| ret_val.connectionAbort() = single_value.field_connectionAbort->valueof(); |
| break; |
| default: |
| TTCN_error("Internal error: Invalid selector in a specific value when performing valueof operation on a template of union type @IsobusCMMessageTypes.TP_CM."); |
| } |
| return ret_val; |
| } |
| |
| TP__CM_template& TP__CM_template::list_item(unsigned int list_index) const |
| { |
| if (template_selection != VALUE_LIST && template_selection != COMPLEMENTED_LIST) TTCN_error("Internal error: Accessing a list element of a non-list template of union type @IsobusCMMessageTypes.TP_CM."); |
| if (list_index >= value_list.n_values) TTCN_error("Internal error: Index overflow in a value list template of union type @IsobusCMMessageTypes.TP_CM."); |
| return value_list.list_value[list_index]; |
| } |
| void TP__CM_template::set_type(template_sel template_type, unsigned int list_length) |
| { |
| if (template_type != VALUE_LIST && template_type != COMPLEMENTED_LIST) TTCN_error ("Internal error: Setting an invalid list for a template of union type @IsobusCMMessageTypes.TP_CM."); |
| clean_up(); |
| set_selection(template_type); |
| value_list.n_values = list_length; |
| value_list.list_value = new TP__CM_template[list_length]; |
| } |
| |
| RequestToSend_template& TP__CM_template::requestToSend() |
| { |
| if (template_selection != SPECIFIC_VALUE || single_value.union_selection != TP__CM::ALT_requestToSend) { |
| template_sel old_selection = template_selection; |
| clean_up(); |
| if (old_selection == ANY_VALUE || old_selection == ANY_OR_OMIT) single_value.field_requestToSend = new RequestToSend_template(ANY_VALUE); |
| else single_value.field_requestToSend = new RequestToSend_template; |
| single_value.union_selection = TP__CM::ALT_requestToSend; |
| set_selection(SPECIFIC_VALUE); |
| } |
| return *single_value.field_requestToSend; |
| } |
| |
| const RequestToSend_template& TP__CM_template::requestToSend() const |
| { |
| if (template_selection != SPECIFIC_VALUE) TTCN_error("Accessing field requestToSend in a non-specific template of union type @IsobusCMMessageTypes.TP_CM."); |
| if (single_value.union_selection != TP__CM::ALT_requestToSend) TTCN_error("Accessing non-selected field requestToSend in a template of union type @IsobusCMMessageTypes.TP_CM."); |
| return *single_value.field_requestToSend; |
| } |
| |
| ClearToSend_template& TP__CM_template::clearToSend() |
| { |
| if (template_selection != SPECIFIC_VALUE || single_value.union_selection != TP__CM::ALT_clearToSend) { |
| template_sel old_selection = template_selection; |
| clean_up(); |
| if (old_selection == ANY_VALUE || old_selection == ANY_OR_OMIT) single_value.field_clearToSend = new ClearToSend_template(ANY_VALUE); |
| else single_value.field_clearToSend = new ClearToSend_template; |
| single_value.union_selection = TP__CM::ALT_clearToSend; |
| set_selection(SPECIFIC_VALUE); |
| } |
| return *single_value.field_clearToSend; |
| } |
| |
| const ClearToSend_template& TP__CM_template::clearToSend() const |
| { |
| if (template_selection != SPECIFIC_VALUE) TTCN_error("Accessing field clearToSend in a non-specific template of union type @IsobusCMMessageTypes.TP_CM."); |
| if (single_value.union_selection != TP__CM::ALT_clearToSend) TTCN_error("Accessing non-selected field clearToSend in a template of union type @IsobusCMMessageTypes.TP_CM."); |
| return *single_value.field_clearToSend; |
| } |
| |
| EndOfMessageAcknowledgement_template& TP__CM_template::endOfMessageAcknowledgement() |
| { |
| if (template_selection != SPECIFIC_VALUE || single_value.union_selection != TP__CM::ALT_endOfMessageAcknowledgement) { |
| template_sel old_selection = template_selection; |
| clean_up(); |
| if (old_selection == ANY_VALUE || old_selection == ANY_OR_OMIT) single_value.field_endOfMessageAcknowledgement = new EndOfMessageAcknowledgement_template(ANY_VALUE); |
| else single_value.field_endOfMessageAcknowledgement = new EndOfMessageAcknowledgement_template; |
| single_value.union_selection = TP__CM::ALT_endOfMessageAcknowledgement; |
| set_selection(SPECIFIC_VALUE); |
| } |
| return *single_value.field_endOfMessageAcknowledgement; |
| } |
| |
| const EndOfMessageAcknowledgement_template& TP__CM_template::endOfMessageAcknowledgement() const |
| { |
| if (template_selection != SPECIFIC_VALUE) TTCN_error("Accessing field endOfMessageAcknowledgement in a non-specific template of union type @IsobusCMMessageTypes.TP_CM."); |
| if (single_value.union_selection != TP__CM::ALT_endOfMessageAcknowledgement) TTCN_error("Accessing non-selected field endOfMessageAcknowledgement in a template of union type @IsobusCMMessageTypes.TP_CM."); |
| return *single_value.field_endOfMessageAcknowledgement; |
| } |
| |
| BroadcastAnnounce_template& TP__CM_template::broadcastAnnounce() |
| { |
| if (template_selection != SPECIFIC_VALUE || single_value.union_selection != TP__CM::ALT_broadcastAnnounce) { |
| template_sel old_selection = template_selection; |
| clean_up(); |
| if (old_selection == ANY_VALUE || old_selection == ANY_OR_OMIT) single_value.field_broadcastAnnounce = new BroadcastAnnounce_template(ANY_VALUE); |
| else single_value.field_broadcastAnnounce = new BroadcastAnnounce_template; |
| single_value.union_selection = TP__CM::ALT_broadcastAnnounce; |
| set_selection(SPECIFIC_VALUE); |
| } |
| return *single_value.field_broadcastAnnounce; |
| } |
| |
| const BroadcastAnnounce_template& TP__CM_template::broadcastAnnounce() const |
| { |
| if (template_selection != SPECIFIC_VALUE) TTCN_error("Accessing field broadcastAnnounce in a non-specific template of union type @IsobusCMMessageTypes.TP_CM."); |
| if (single_value.union_selection != TP__CM::ALT_broadcastAnnounce) TTCN_error("Accessing non-selected field broadcastAnnounce in a template of union type @IsobusCMMessageTypes.TP_CM."); |
| return *single_value.field_broadcastAnnounce; |
| } |
| |
| ConnectionAbort_template& TP__CM_template::connectionAbort() |
| { |
| if (template_selection != SPECIFIC_VALUE || single_value.union_selection != TP__CM::ALT_connectionAbort) { |
| template_sel old_selection = template_selection; |
| clean_up(); |
| if (old_selection == ANY_VALUE || old_selection == ANY_OR_OMIT) single_value.field_connectionAbort = new ConnectionAbort_template(ANY_VALUE); |
| else single_value.field_connectionAbort = new ConnectionAbort_template; |
| single_value.union_selection = TP__CM::ALT_connectionAbort; |
| set_selection(SPECIFIC_VALUE); |
| } |
| return *single_value.field_connectionAbort; |
| } |
| |
| const ConnectionAbort_template& TP__CM_template::connectionAbort() const |
| { |
| if (template_selection != SPECIFIC_VALUE) TTCN_error("Accessing field connectionAbort in a non-specific template of union type @IsobusCMMessageTypes.TP_CM."); |
| if (single_value.union_selection != TP__CM::ALT_connectionAbort) TTCN_error("Accessing non-selected field connectionAbort in a template of union type @IsobusCMMessageTypes.TP_CM."); |
| return *single_value.field_connectionAbort; |
| } |
| |
| boolean TP__CM_template::ischosen(TP__CM::union_selection_type checked_selection) const |
| { |
| if (checked_selection == TP__CM::UNBOUND_VALUE) TTCN_error("Internal error: Performing ischosen() operation on an invalid field of union type @IsobusCMMessageTypes.TP_CM."); |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| if (single_value.union_selection == TP__CM::UNBOUND_VALUE) TTCN_error("Internal error: Invalid selector in a specific value when performing ischosen() operation on a template of union type @IsobusCMMessageTypes.TP_CM."); |
| return single_value.union_selection == checked_selection; |
| case VALUE_LIST: |
| { |
| if (value_list.n_values < 1) |
| TTCN_error("Internal error: Performing ischosen() operation on a template of union type @IsobusCMMessageTypes.TP_CM containing an empty list."); |
| boolean ret_val = value_list.list_value[0].ischosen(checked_selection); |
| for (unsigned int list_count = 1; ret_val == TRUE && list_count < value_list.n_values; list_count++) { |
| ret_val = value_list.list_value[list_count].ischosen(checked_selection); |
| } |
| return ret_val; |
| } |
| default: |
| return FALSE; |
| } |
| return FALSE; |
| } |
| |
| void TP__CM_template::log() const |
| { |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| switch (single_value.union_selection) { |
| case TP__CM::ALT_requestToSend: |
| TTCN_Logger::log_event_str("{ requestToSend := "); |
| single_value.field_requestToSend->log(); |
| TTCN_Logger::log_event_str(" }"); |
| break; |
| case TP__CM::ALT_clearToSend: |
| TTCN_Logger::log_event_str("{ clearToSend := "); |
| single_value.field_clearToSend->log(); |
| TTCN_Logger::log_event_str(" }"); |
| break; |
| case TP__CM::ALT_endOfMessageAcknowledgement: |
| TTCN_Logger::log_event_str("{ endOfMessageAcknowledgement := "); |
| single_value.field_endOfMessageAcknowledgement->log(); |
| TTCN_Logger::log_event_str(" }"); |
| break; |
| case TP__CM::ALT_broadcastAnnounce: |
| TTCN_Logger::log_event_str("{ broadcastAnnounce := "); |
| single_value.field_broadcastAnnounce->log(); |
| TTCN_Logger::log_event_str(" }"); |
| break; |
| case TP__CM::ALT_connectionAbort: |
| TTCN_Logger::log_event_str("{ connectionAbort := "); |
| single_value.field_connectionAbort->log(); |
| TTCN_Logger::log_event_str(" }"); |
| break; |
| default: |
| TTCN_Logger::log_event_str("<invalid selector>"); |
| } |
| break; |
| case COMPLEMENTED_LIST: |
| TTCN_Logger::log_event_str("complement"); |
| case VALUE_LIST: |
| TTCN_Logger::log_char('('); |
| for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) { |
| if (list_count > 0) TTCN_Logger::log_event_str(", "); |
| value_list.list_value[list_count].log(); |
| } |
| TTCN_Logger::log_char(')'); |
| break; |
| default: |
| log_generic(); |
| } |
| log_ifpresent(); |
| } |
| |
| void TP__CM_template::log_match(const TP__CM& match_value, boolean legacy) const |
| { |
| if(TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity() && match(match_value, legacy)){ |
| TTCN_Logger::print_logmatch_buffer(); |
| TTCN_Logger::log_event_str(" matched"); |
| return; |
| } |
| if (template_selection == SPECIFIC_VALUE && single_value.union_selection == match_value.get_selection()) { |
| switch (single_value.union_selection) { |
| case TP__CM::ALT_requestToSend: |
| if(TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity()){ |
| TTCN_Logger::log_logmatch_info(".requestToSend"); |
| single_value.field_requestToSend->log_match(match_value.requestToSend(), legacy); |
| } else { |
| TTCN_Logger::log_event_str("{ requestToSend := "); |
| single_value.field_requestToSend->log_match(match_value.requestToSend(), legacy); |
| TTCN_Logger::log_event_str(" }"); |
| } |
| break; |
| case TP__CM::ALT_clearToSend: |
| if(TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity()){ |
| TTCN_Logger::log_logmatch_info(".clearToSend"); |
| single_value.field_clearToSend->log_match(match_value.clearToSend(), legacy); |
| } else { |
| TTCN_Logger::log_event_str("{ clearToSend := "); |
| single_value.field_clearToSend->log_match(match_value.clearToSend(), legacy); |
| TTCN_Logger::log_event_str(" }"); |
| } |
| break; |
| case TP__CM::ALT_endOfMessageAcknowledgement: |
| if(TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity()){ |
| TTCN_Logger::log_logmatch_info(".endOfMessageAcknowledgement"); |
| single_value.field_endOfMessageAcknowledgement->log_match(match_value.endOfMessageAcknowledgement(), legacy); |
| } else { |
| TTCN_Logger::log_event_str("{ endOfMessageAcknowledgement := "); |
| single_value.field_endOfMessageAcknowledgement->log_match(match_value.endOfMessageAcknowledgement(), legacy); |
| TTCN_Logger::log_event_str(" }"); |
| } |
| break; |
| case TP__CM::ALT_broadcastAnnounce: |
| if(TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity()){ |
| TTCN_Logger::log_logmatch_info(".broadcastAnnounce"); |
| single_value.field_broadcastAnnounce->log_match(match_value.broadcastAnnounce(), legacy); |
| } else { |
| TTCN_Logger::log_event_str("{ broadcastAnnounce := "); |
| single_value.field_broadcastAnnounce->log_match(match_value.broadcastAnnounce(), legacy); |
| TTCN_Logger::log_event_str(" }"); |
| } |
| break; |
| case TP__CM::ALT_connectionAbort: |
| if(TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity()){ |
| TTCN_Logger::log_logmatch_info(".connectionAbort"); |
| single_value.field_connectionAbort->log_match(match_value.connectionAbort(), legacy); |
| } else { |
| TTCN_Logger::log_event_str("{ connectionAbort := "); |
| single_value.field_connectionAbort->log_match(match_value.connectionAbort(), legacy); |
| TTCN_Logger::log_event_str(" }"); |
| } |
| break; |
| default: |
| TTCN_Logger::print_logmatch_buffer(); |
| TTCN_Logger::log_event_str("<invalid selector>"); |
| } |
| } else { |
| TTCN_Logger::print_logmatch_buffer(); |
| match_value.log(); |
| TTCN_Logger::log_event_str(" with "); |
| log(); |
| if (match(match_value, legacy)) TTCN_Logger::log_event_str(" matched"); |
| else TTCN_Logger::log_event_str(" unmatched"); |
| } |
| } |
| |
| void TP__CM_template::encode_text(Text_Buf& text_buf) const |
| { |
| encode_text_base(text_buf); |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| text_buf.push_int(single_value.union_selection); |
| switch (single_value.union_selection) { |
| case TP__CM::ALT_requestToSend: |
| single_value.field_requestToSend->encode_text(text_buf); |
| break; |
| case TP__CM::ALT_clearToSend: |
| single_value.field_clearToSend->encode_text(text_buf); |
| break; |
| case TP__CM::ALT_endOfMessageAcknowledgement: |
| single_value.field_endOfMessageAcknowledgement->encode_text(text_buf); |
| break; |
| case TP__CM::ALT_broadcastAnnounce: |
| single_value.field_broadcastAnnounce->encode_text(text_buf); |
| break; |
| case TP__CM::ALT_connectionAbort: |
| single_value.field_connectionAbort->encode_text(text_buf); |
| break; |
| default: |
| TTCN_error("Internal error: Invalid selector in a specific value when encoding a template of union type @IsobusCMMessageTypes.TP_CM."); |
| } |
| case OMIT_VALUE: |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| break; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| text_buf.push_int(value_list.n_values); |
| for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) |
| value_list.list_value[list_count].encode_text(text_buf); |
| break; |
| default: |
| TTCN_error("Text encoder: Encoding an uninitialized template of type @IsobusCMMessageTypes.TP_CM."); |
| } |
| } |
| |
| void TP__CM_template::decode_text(Text_Buf& text_buf) |
| { |
| clean_up(); |
| decode_text_base(text_buf); |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| { |
| single_value.union_selection = TP__CM::UNBOUND_VALUE; |
| TP__CM::union_selection_type new_selection = (TP__CM::union_selection_type)text_buf.pull_int().get_val(); |
| switch (new_selection) { |
| case TP__CM::ALT_requestToSend: |
| single_value.field_requestToSend = new RequestToSend_template; |
| single_value.field_requestToSend->decode_text(text_buf); |
| break; |
| case TP__CM::ALT_clearToSend: |
| single_value.field_clearToSend = new ClearToSend_template; |
| single_value.field_clearToSend->decode_text(text_buf); |
| break; |
| case TP__CM::ALT_endOfMessageAcknowledgement: |
| single_value.field_endOfMessageAcknowledgement = new EndOfMessageAcknowledgement_template; |
| single_value.field_endOfMessageAcknowledgement->decode_text(text_buf); |
| break; |
| case TP__CM::ALT_broadcastAnnounce: |
| single_value.field_broadcastAnnounce = new BroadcastAnnounce_template; |
| single_value.field_broadcastAnnounce->decode_text(text_buf); |
| break; |
| case TP__CM::ALT_connectionAbort: |
| single_value.field_connectionAbort = new ConnectionAbort_template; |
| single_value.field_connectionAbort->decode_text(text_buf); |
| break; |
| default: |
| TTCN_error("Text decoder: Unrecognized union selector was received for a template of type @IsobusCMMessageTypes.TP_CM."); |
| } |
| single_value.union_selection = new_selection; |
| } |
| case OMIT_VALUE: |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| break; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| value_list.n_values = text_buf.pull_int().get_val(); |
| value_list.list_value = new TP__CM_template[value_list.n_values]; |
| for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) |
| value_list.list_value[list_count].decode_text(text_buf); |
| break; |
| default: |
| TTCN_error("Text decoder: Unrecognized selector was received in a template of type @IsobusCMMessageTypes.TP_CM."); |
| } |
| } |
| |
| boolean TP__CM_template::is_present(boolean legacy) const |
| { |
| if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE; |
| return !match_omit(legacy); |
| } |
| |
| boolean TP__CM_template::match_omit(boolean legacy) const |
| { |
| if (is_ifpresent) return TRUE; |
| switch (template_selection) { |
| case OMIT_VALUE: |
| case ANY_OR_OMIT: |
| return TRUE; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| if (legacy) { |
| for (unsigned int v_idx=0; v_idx<value_list.n_values; v_idx++) |
| if (value_list.list_value[v_idx].match_omit()) |
| return template_selection==VALUE_LIST; |
| return template_selection==COMPLEMENTED_LIST; |
| } // else fall through |
| default: |
| return FALSE; |
| } |
| return FALSE; |
| } |
| |
| void TP__CM_template::set_param(Module_Param& param) |
| { |
| if (dynamic_cast<Module_Param_Name*>(param.get_id()) != NULL && |
| param.get_id()->next_name()) { |
| char* param_field = param.get_id()->get_current_name(); |
| if (param_field[0] >= '0' && param_field[0] <= '9') { |
| param.error("Unexpected array index in module parameter, expected a valid field" |
| " name for union template type `@IsobusCMMessageTypes.TP_CM'"); |
| } |
| if (strcmp("requestToSend", param_field) == 0) { |
| requestToSend().set_param(param); |
| return; |
| } else if (strcmp("clearToSend", param_field) == 0) { |
| clearToSend().set_param(param); |
| return; |
| } else if (strcmp("endOfMessageAcknowledgement", param_field) == 0) { |
| endOfMessageAcknowledgement().set_param(param); |
| return; |
| } else if (strcmp("broadcastAnnounce", param_field) == 0) { |
| broadcastAnnounce().set_param(param); |
| return; |
| } else if (strcmp("connectionAbort", param_field) == 0) { |
| connectionAbort().set_param(param); |
| return; |
| } else param.error("Field `%s' not found in union template type `@IsobusCMMessageTypes.TP_CM'", param_field); |
| } |
| param.basic_check(Module_Param::BC_TEMPLATE, "union template"); |
| Module_Param_Ptr m_p = ¶m; |
| switch (m_p->get_type()) { |
| case Module_Param::MP_Omit: |
| *this = OMIT_VALUE; |
| break; |
| case Module_Param::MP_Any: |
| *this = ANY_VALUE; |
| break; |
| case Module_Param::MP_AnyOrNone: |
| *this = ANY_OR_OMIT; |
| break; |
| case Module_Param::MP_List_Template: |
| case Module_Param::MP_ComplementList_Template: { |
| TP__CM_template new_temp; |
| new_temp.set_type(m_p->get_type()==Module_Param::MP_List_Template ? VALUE_LIST : COMPLEMENTED_LIST, m_p->get_size()); |
| for (size_t p_i=0; p_i<m_p->get_size(); p_i++) { |
| new_temp.list_item(p_i).set_param(*m_p->get_elem(p_i)); |
| } |
| *this = new_temp; |
| break; } |
| case Module_Param::MP_Value_List: |
| if (m_p->get_size()==0) break; |
| param.type_error("union template", "@IsobusCMMessageTypes.TP_CM"); |
| break; |
| case Module_Param::MP_Assignment_List: { |
| Module_Param* mp_last = m_p->get_elem(m_p->get_size()-1); |
| char* last_name = mp_last->get_id()->get_name(); |
| if (!strcmp(last_name, "requestToSend")) { |
| requestToSend().set_param(*mp_last); |
| break; |
| } |
| if (!strcmp(last_name, "clearToSend")) { |
| clearToSend().set_param(*mp_last); |
| break; |
| } |
| if (!strcmp(last_name, "endOfMessageAcknowledgement")) { |
| endOfMessageAcknowledgement().set_param(*mp_last); |
| break; |
| } |
| if (!strcmp(last_name, "broadcastAnnounce")) { |
| broadcastAnnounce().set_param(*mp_last); |
| break; |
| } |
| if (!strcmp(last_name, "connectionAbort")) { |
| connectionAbort().set_param(*mp_last); |
| break; |
| } |
| mp_last->error("Field %s does not exist in type @IsobusCMMessageTypes.TP_CM.", last_name); |
| } break; |
| default: |
| param.type_error("union template", "@IsobusCMMessageTypes.TP_CM"); |
| } |
| is_ifpresent = param.get_ifpresent(); |
| } |
| |
| void TP__CM_template::check_restriction(template_res t_res, const char* t_name, boolean legacy) const |
| { |
| if (template_selection==UNINITIALIZED_TEMPLATE) return; |
| switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) { |
| case TR_OMIT: |
| if (template_selection==OMIT_VALUE) return; |
| case TR_VALUE: |
| if (template_selection!=SPECIFIC_VALUE || is_ifpresent) break; |
| switch (single_value.union_selection) { |
| case TP__CM::ALT_requestToSend: |
| single_value.field_requestToSend->check_restriction(t_res, t_name ? t_name : "@IsobusCMMessageTypes.TP_CM"); |
| return; |
| case TP__CM::ALT_clearToSend: |
| single_value.field_clearToSend->check_restriction(t_res, t_name ? t_name : "@IsobusCMMessageTypes.TP_CM"); |
| return; |
| case TP__CM::ALT_endOfMessageAcknowledgement: |
| single_value.field_endOfMessageAcknowledgement->check_restriction(t_res, t_name ? t_name : "@IsobusCMMessageTypes.TP_CM"); |
| return; |
| case TP__CM::ALT_broadcastAnnounce: |
| single_value.field_broadcastAnnounce->check_restriction(t_res, t_name ? t_name : "@IsobusCMMessageTypes.TP_CM"); |
| return; |
| case TP__CM::ALT_connectionAbort: |
| single_value.field_connectionAbort->check_restriction(t_res, t_name ? t_name : "@IsobusCMMessageTypes.TP_CM"); |
| return; |
| default: |
| TTCN_error("Internal error: Invalid selector in a specific value when performing check_restriction operation on a template of union type @IsobusCMMessageTypes.TP_CM."); |
| } |
| case TR_PRESENT: |
| if (!match_omit(legacy)) return; |
| break; |
| default: |
| return; |
| } |
| TTCN_error("Restriction `%s' on template of type %s violated.", get_res_name(t_res), t_name ? t_name : "@IsobusCMMessageTypes.TP_CM"); |
| } |
| |
| ExtendedMessageRequestToSend::ExtendedMessageRequestToSend() |
| { |
| } |
| |
| ExtendedMessageRequestToSend::ExtendedMessageRequestToSend(const OCTETSTRING& par_ctrl, |
| const INTEGER& par_msgSizeInBytes, |
| const INTEGER& par_pgnOfExtendedPacketedMessage) |
| : field_ctrl(par_ctrl), |
| field_msgSizeInBytes(par_msgSizeInBytes), |
| field_pgnOfExtendedPacketedMessage(par_pgnOfExtendedPacketedMessage) |
| { |
| } |
| |
| ExtendedMessageRequestToSend::ExtendedMessageRequestToSend(const ExtendedMessageRequestToSend& other_value) |
| { |
| if(!other_value.is_bound()) TTCN_error("Copying an unbound value of type @IsobusCMMessageTypes.ExtendedMessageRequestToSend."); |
| if (other_value.ctrl().is_bound()) field_ctrl = other_value.ctrl(); |
| else field_ctrl.clean_up(); |
| if (other_value.msgSizeInBytes().is_bound()) field_msgSizeInBytes = other_value.msgSizeInBytes(); |
| else field_msgSizeInBytes.clean_up(); |
| if (other_value.pgnOfExtendedPacketedMessage().is_bound()) field_pgnOfExtendedPacketedMessage = other_value.pgnOfExtendedPacketedMessage(); |
| else field_pgnOfExtendedPacketedMessage.clean_up(); |
| } |
| |
| void ExtendedMessageRequestToSend::clean_up() |
| { |
| field_ctrl.clean_up(); |
| field_msgSizeInBytes.clean_up(); |
| field_pgnOfExtendedPacketedMessage.clean_up(); |
| } |
| |
| const TTCN_Typedescriptor_t* ExtendedMessageRequestToSend::get_descriptor() const { return &ExtendedMessageRequestToSend_descr_; } |
| ExtendedMessageRequestToSend& ExtendedMessageRequestToSend::operator=(const ExtendedMessageRequestToSend& other_value) |
| { |
| if (this != &other_value) { |
| if(!other_value.is_bound()) TTCN_error("Assignment of an unbound value of type @IsobusCMMessageTypes.ExtendedMessageRequestToSend."); |
| if (other_value.ctrl().is_bound()) field_ctrl = other_value.ctrl(); |
| else field_ctrl.clean_up(); |
| if (other_value.msgSizeInBytes().is_bound()) field_msgSizeInBytes = other_value.msgSizeInBytes(); |
| else field_msgSizeInBytes.clean_up(); |
| if (other_value.pgnOfExtendedPacketedMessage().is_bound()) field_pgnOfExtendedPacketedMessage = other_value.pgnOfExtendedPacketedMessage(); |
| else field_pgnOfExtendedPacketedMessage.clean_up(); |
| } |
| return *this; |
| } |
| |
| boolean ExtendedMessageRequestToSend::operator==(const ExtendedMessageRequestToSend& other_value) const |
| { |
| return field_ctrl==other_value.field_ctrl |
| && field_msgSizeInBytes==other_value.field_msgSizeInBytes |
| && field_pgnOfExtendedPacketedMessage==other_value.field_pgnOfExtendedPacketedMessage; |
| } |
| |
| boolean ExtendedMessageRequestToSend::is_bound() const |
| { |
| return (field_ctrl.is_bound()) |
| || (field_msgSizeInBytes.is_bound()) |
| || (field_pgnOfExtendedPacketedMessage.is_bound()); |
| } |
| boolean ExtendedMessageRequestToSend::is_value() const |
| { |
| return field_ctrl.is_value() |
| && field_msgSizeInBytes.is_value() |
| && field_pgnOfExtendedPacketedMessage.is_value(); |
| } |
| void ExtendedMessageRequestToSend::log() const |
| { |
| if (!is_bound()) { |
| TTCN_Logger::log_event_unbound(); |
| return; |
| } |
| TTCN_Logger::log_event_str("{ ctrl := "); |
| field_ctrl.log(); |
| TTCN_Logger::log_event_str(", msgSizeInBytes := "); |
| field_msgSizeInBytes.log(); |
| TTCN_Logger::log_event_str(", pgnOfExtendedPacketedMessage := "); |
| field_pgnOfExtendedPacketedMessage.log(); |
| TTCN_Logger::log_event_str(" }"); |
| } |
| |
| void ExtendedMessageRequestToSend::set_param(Module_Param& param) |
| { |
| param.basic_check(Module_Param::BC_VALUE, "record value"); |
| switch (param.get_type()) { |
| case Module_Param::MP_Value_List: |
| if (3<param.get_size()) { |
| param.error("record value of type @IsobusCMMessageTypes.ExtendedMessageRequestToSend has 3 fields but list value has %d fields", (int)param.get_size()); |
| } |
| if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) ctrl().set_param(*param.get_elem(0)); |
| if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) msgSizeInBytes().set_param(*param.get_elem(1)); |
| if (param.get_size()>2 && param.get_elem(2)->get_type()!=Module_Param::MP_NotUsed) pgnOfExtendedPacketedMessage().set_param(*param.get_elem(2)); |
| break; |
| case Module_Param::MP_Assignment_List: { |
| Vector<bool> value_used(param.get_size()); |
| value_used.resize(param.get_size(), FALSE); |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "ctrl")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| ctrl().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "msgSizeInBytes")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| msgSizeInBytes().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "pgnOfExtendedPacketedMessage")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| pgnOfExtendedPacketedMessage().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| curr_param->error("Non existent field name in type @IsobusCMMessageTypes.ExtendedMessageRequestToSend: %s", curr_param->get_id()->get_name()); |
| break; |
| } |
| } break; |
| default: |
| param.type_error("record value", "@IsobusCMMessageTypes.ExtendedMessageRequestToSend"); |
| } |
| } |
| |
| void ExtendedMessageRequestToSend::set_implicit_omit() |
| { |
| if (ctrl().is_bound()) ctrl().set_implicit_omit(); |
| if (msgSizeInBytes().is_bound()) msgSizeInBytes().set_implicit_omit(); |
| if (pgnOfExtendedPacketedMessage().is_bound()) pgnOfExtendedPacketedMessage().set_implicit_omit(); |
| } |
| |
| void ExtendedMessageRequestToSend::encode_text(Text_Buf& text_buf) const |
| { |
| field_ctrl.encode_text(text_buf); |
| field_msgSizeInBytes.encode_text(text_buf); |
| field_pgnOfExtendedPacketedMessage.encode_text(text_buf); |
| } |
| |
| void ExtendedMessageRequestToSend::decode_text(Text_Buf& text_buf) |
| { |
| field_ctrl.decode_text(text_buf); |
| field_msgSizeInBytes.decode_text(text_buf); |
| field_pgnOfExtendedPacketedMessage.decode_text(text_buf); |
| } |
| |
| void ExtendedMessageRequestToSend::encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, TTCN_EncDec::coding_t p_coding, ...) const |
| { |
| va_list pvar; |
| va_start(pvar, p_coding); |
| switch(p_coding) { |
| case TTCN_EncDec::CT_BER: { |
| TTCN_EncDec_ErrorContext ec("While BER-encoding type '%s': ", p_td.name); |
| unsigned BER_coding=va_arg(pvar, unsigned); |
| BER_encode_chk_coding(BER_coding); |
| ASN_BER_TLV_t *tlv=BER_encode_TLV(p_td, BER_coding); |
| tlv->put_in_buffer(p_buf); |
| ASN_BER_TLV_t::destruct(tlv); |
| break;} |
| case TTCN_EncDec::CT_RAW: { |
| TTCN_EncDec_ErrorContext ec("While RAW-encoding type '%s': ", p_td.name); |
| if(!p_td.raw) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No RAW descriptor available for type '%s'.", p_td.name); |
| RAW_enc_tr_pos rp; |
| rp.level=0; |
| rp.pos=NULL; |
| RAW_enc_tree root(FALSE, NULL, &rp, 1, p_td.raw); |
| RAW_encode(p_td, root); |
| root.put_to_buf(p_buf); |
| break;} |
| case TTCN_EncDec::CT_TEXT: { |
| TTCN_EncDec_ErrorContext ec("While TEXT-encoding type '%s': ", p_td.name); |
| if(!p_td.text) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No TEXT descriptor available for type '%s'.", p_td.name); |
| TEXT_encode(p_td,p_buf); |
| break;} |
| case TTCN_EncDec::CT_XER: { |
| TTCN_EncDec_ErrorContext ec("While XER-encoding type '%s': ", p_td.name); |
| unsigned XER_coding=va_arg(pvar, unsigned); |
| XER_encode_chk_coding(XER_coding, p_td); |
| XER_encode(*(p_td.xer),p_buf, XER_coding, 0, 0, 0); |
| p_buf.put_c('\n'); |
| break;} |
| case TTCN_EncDec::CT_JSON: { |
| TTCN_EncDec_ErrorContext ec("While JSON-encoding type '%s': ", p_td.name); |
| if(!p_td.json) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No JSON descriptor available for type '%s'.", p_td.name); |
| JSON_Tokenizer tok(va_arg(pvar, int) != 0); |
| JSON_encode(p_td, tok); |
| p_buf.put_s(tok.get_buffer_length(), (const unsigned char*)tok.get_buffer()); |
| break;} |
| case TTCN_EncDec::CT_OER: { |
| TTCN_EncDec_ErrorContext ec("While OER-encoding type '%s': ", p_td.name); |
| if(!p_td.oer) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No OER descriptor available for type '%s'.", p_td.name); |
| OER_encode(p_td, p_buf); |
| break;} |
| default: |
| TTCN_error("Unknown coding method requested to encode type '%s'", p_td.name); |
| } |
| va_end(pvar); |
| } |
| |
| void ExtendedMessageRequestToSend::decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, TTCN_EncDec::coding_t p_coding, ...) |
| { |
| va_list pvar; |
| va_start(pvar, p_coding); |
| switch(p_coding) { |
| case TTCN_EncDec::CT_BER: { |
| TTCN_EncDec_ErrorContext ec("While BER-decoding type '%s': ", p_td.name); |
| unsigned L_form=va_arg(pvar, unsigned); |
| ASN_BER_TLV_t tlv; |
| BER_decode_str2TLV(p_buf, tlv, L_form); |
| BER_decode_TLV(p_td, tlv, L_form); |
| if(tlv.isComplete) p_buf.increase_pos(tlv.get_len()); |
| break;} |
| case TTCN_EncDec::CT_RAW: { |
| TTCN_EncDec_ErrorContext ec("While RAW-decoding type '%s': ", p_td.name); |
| if(!p_td.raw) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No RAW descriptor available for type '%s'.", p_td.name); |
| raw_order_t r_order; |
| switch(p_td.raw->top_bit_order) { |
| case TOP_BIT_LEFT: |
| r_order=ORDER_LSB; |
| break; |
| case TOP_BIT_RIGHT: |
| default: |
| r_order=ORDER_MSB; |
| } |
| int rawr = RAW_decode(p_td, p_buf, p_buf.get_len()*8, r_order); |
| if(rawr<0) switch (-rawr) { |
| case TTCN_EncDec::ET_INCOMPL_MSG: |
| case TTCN_EncDec::ET_LEN_ERR: |
| ec.error((TTCN_EncDec::error_type_t)-rawr, "Can not decode type '%s', because incomplete message was received", p_td.name); |
| break; |
| case 1: |
| default: |
| ec.error(TTCN_EncDec::ET_INVAL_MSG, "Can not decode type '%s', because invalid message was received", p_td.name); |
| break; |
| } |
| break;} |
| case TTCN_EncDec::CT_TEXT: { |
| Limit_Token_List limit; |
| TTCN_EncDec_ErrorContext ec("While TEXT-decoding type '%s': ", p_td.name); |
| if(!p_td.text) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No TEXT descriptor available for type '%s'.", p_td.name); |
| const unsigned char *b_data=p_buf.get_data(); |
| if(b_data[p_buf.get_len()-1]!='\0'){ |
| p_buf.set_pos(p_buf.get_len()); |
| p_buf.put_zero(8,ORDER_LSB); |
| p_buf.rewind(); |
| } |
| if(TEXT_decode(p_td,p_buf,limit)<0) |
| ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name); |
| break;} |
| case TTCN_EncDec::CT_XER: { |
| TTCN_EncDec_ErrorContext ec("While XER-decoding type '%s': ", p_td.name); |
| unsigned XER_coding=va_arg(pvar, unsigned); |
| XER_encode_chk_coding(XER_coding, p_td); |
| XmlReaderWrap reader(p_buf); |
| for (int rd_ok=reader.Read(); rd_ok==1; rd_ok=reader.Read()) { |
| if (reader.NodeType() == XML_READER_TYPE_ELEMENT) break; |
| } |
| XER_decode(*(p_td.xer), reader, XER_coding | XER_TOPLEVEL, XER_NONE, 0); |
| size_t bytes = reader.ByteConsumed(); |
| p_buf.set_pos(bytes); |
| break;} |
| case TTCN_EncDec::CT_JSON: { |
| TTCN_EncDec_ErrorContext ec("While JSON-decoding type '%s': ", p_td.name); |
| if(!p_td.json) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No JSON descriptor available for type '%s'.", p_td.name); |
| JSON_Tokenizer tok((const char*)p_buf.get_data(), p_buf.get_len()); |
| if(JSON_decode(p_td, tok, FALSE)<0) |
| ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name); |
| p_buf.set_pos(tok.get_buf_pos()); |
| break;} |
| case TTCN_EncDec::CT_OER: { |
| TTCN_EncDec_ErrorContext ec("While OER-decoding type '%s': ", p_td.name); |
| if(!p_td.oer) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No OER descriptor available for type '%s'.", p_td.name); |
| OER_struct p_oer; |
| OER_decode(p_td, p_buf, p_oer); |
| break;} |
| default: |
| TTCN_error("Unknown coding method requested to decode type '%s'", p_td.name); |
| } |
| va_end(pvar); |
| } |
| |
| int ExtendedMessageRequestToSend::RAW_decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int limit, raw_order_t top_bit_ord, boolean no_err, int, boolean, const RAW_Force_Omit* force_omit) |
| { (void)no_err; |
| int prepaddlength=p_buf.increase_pos_padd(p_td.raw->prepadding); |
| limit-=prepaddlength; |
| size_t last_decoded_pos = p_buf.get_pos_bit(); |
| int decoded_length = 0; |
| int decoded_field_length = 0; |
| raw_order_t local_top_order; |
| if(p_td.raw->top_bit_order==TOP_BIT_INHERITED)local_top_order=top_bit_ord; |
| else if(p_td.raw->top_bit_order==TOP_BIT_RIGHT)local_top_order=ORDER_MSB; |
| else local_top_order=ORDER_LSB; |
| RAW_Force_Omit field_0_force_omit(0, force_omit, ExtendedMessageRequestToSend_ctrl_descr_.raw->forceomit); |
| decoded_field_length = field_ctrl.RAW_decode(ExtendedMessageRequestToSend_ctrl_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_0_force_omit); |
| if (decoded_field_length < 0) return decoded_field_length; |
| decoded_length+=decoded_field_length; |
| limit-=decoded_field_length; |
| last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit()); |
| RAW_Force_Omit field_1_force_omit(1, force_omit, ETP__MSG__SIZE_descr_.raw->forceomit); |
| decoded_field_length = field_msgSizeInBytes.RAW_decode(ETP__MSG__SIZE_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_1_force_omit); |
| if (decoded_field_length < 0) return decoded_field_length; |
| decoded_length+=decoded_field_length; |
| limit-=decoded_field_length; |
| last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit()); |
| RAW_Force_Omit field_2_force_omit(2, force_omit, IsobusMessageTypes::PGN_descr_.raw->forceomit); |
| decoded_field_length = field_pgnOfExtendedPacketedMessage.RAW_decode(IsobusMessageTypes::PGN_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_2_force_omit); |
| if (decoded_field_length < 0) return decoded_field_length; |
| decoded_length+=decoded_field_length; |
| limit-=decoded_field_length; |
| last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit()); |
| p_buf.set_pos_bit(last_decoded_pos); |
| return decoded_length+prepaddlength+p_buf.increase_pos_padd(p_td.raw->padding); |
| } |
| |
| int ExtendedMessageRequestToSend::RAW_encode(const TTCN_Typedescriptor_t&, RAW_enc_tree& myleaf) const { |
| if (!is_bound()) TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_UNBOUND, "Encoding an unbound value."); |
| int encoded_length = 0; |
| myleaf.isleaf = FALSE; |
| myleaf.body.node.num_of_nodes = 3; |
| myleaf.body.node.nodes = init_nodes_of_enc_tree(3); |
| myleaf.body.node.nodes[0] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 0, ExtendedMessageRequestToSend_ctrl_descr_.raw); |
| myleaf.body.node.nodes[1] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 1, ETP__MSG__SIZE_descr_.raw); |
| myleaf.body.node.nodes[2] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 2, IsobusMessageTypes::PGN_descr_.raw); |
| encoded_length += field_ctrl.RAW_encode(ExtendedMessageRequestToSend_ctrl_descr_, *myleaf.body.node.nodes[0]); |
| encoded_length += field_msgSizeInBytes.RAW_encode(ETP__MSG__SIZE_descr_, *myleaf.body.node.nodes[1]); |
| encoded_length += field_pgnOfExtendedPacketedMessage.RAW_encode(IsobusMessageTypes::PGN_descr_, *myleaf.body.node.nodes[2]); |
| return myleaf.length = encoded_length; |
| } |
| |
| struct ExtendedMessageRequestToSend_template::single_value_struct { |
| OCTETSTRING_template field_ctrl; |
| INTEGER_template field_msgSizeInBytes; |
| INTEGER_template field_pgnOfExtendedPacketedMessage; |
| }; |
| |
| void ExtendedMessageRequestToSend_template::set_specific() |
| { |
| if (template_selection != SPECIFIC_VALUE) { |
| template_sel old_selection = template_selection; |
| clean_up(); |
| single_value = new single_value_struct; |
| set_selection(SPECIFIC_VALUE); |
| if (old_selection == ANY_VALUE || old_selection == ANY_OR_OMIT) { |
| single_value->field_ctrl = ANY_VALUE; |
| single_value->field_msgSizeInBytes = ANY_VALUE; |
| single_value->field_pgnOfExtendedPacketedMessage = ANY_VALUE; |
| } |
| } |
| } |
| |
| void ExtendedMessageRequestToSend_template::copy_value(const ExtendedMessageRequestToSend& other_value) |
| { |
| single_value = new single_value_struct; |
| if (other_value.ctrl().is_bound()) { |
| single_value->field_ctrl = other_value.ctrl(); |
| } else { |
| single_value->field_ctrl.clean_up(); |
| } |
| if (other_value.msgSizeInBytes().is_bound()) { |
| single_value->field_msgSizeInBytes = other_value.msgSizeInBytes(); |
| } else { |
| single_value->field_msgSizeInBytes.clean_up(); |
| } |
| if (other_value.pgnOfExtendedPacketedMessage().is_bound()) { |
| single_value->field_pgnOfExtendedPacketedMessage = other_value.pgnOfExtendedPacketedMessage(); |
| } else { |
| single_value->field_pgnOfExtendedPacketedMessage.clean_up(); |
| } |
| set_selection(SPECIFIC_VALUE); |
| } |
| |
| void ExtendedMessageRequestToSend_template::copy_template(const ExtendedMessageRequestToSend_template& other_value) |
| { |
| switch (other_value.template_selection) { |
| case SPECIFIC_VALUE: |
| single_value = new single_value_struct; |
| if (UNINITIALIZED_TEMPLATE != other_value.ctrl().get_selection()) { |
| single_value->field_ctrl = other_value.ctrl(); |
| } else { |
| single_value->field_ctrl.clean_up(); |
| } |
| if (UNINITIALIZED_TEMPLATE != other_value.msgSizeInBytes().get_selection()) { |
| single_value->field_msgSizeInBytes = other_value.msgSizeInBytes(); |
| } else { |
| single_value->field_msgSizeInBytes.clean_up(); |
| } |
| if (UNINITIALIZED_TEMPLATE != other_value.pgnOfExtendedPacketedMessage().get_selection()) { |
| single_value->field_pgnOfExtendedPacketedMessage = other_value.pgnOfExtendedPacketedMessage(); |
| } else { |
| single_value->field_pgnOfExtendedPacketedMessage.clean_up(); |
| } |
| case OMIT_VALUE: |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| break; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| value_list.n_values = other_value.value_list.n_values; |
| value_list.list_value = new ExtendedMessageRequestToSend_template[value_list.n_values]; |
| for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) |
| value_list.list_value[list_count].copy_template(other_value.value_list.list_value[list_count]); |
| break; |
| default: |
| TTCN_error("Copying an uninitialized/unsupported template of type @IsobusCMMessageTypes.ExtendedMessageRequestToSend."); |
| break; |
| } |
| set_selection(other_value); |
| } |
| |
| ExtendedMessageRequestToSend_template::ExtendedMessageRequestToSend_template() |
| { |
| } |
| |
| ExtendedMessageRequestToSend_template::ExtendedMessageRequestToSend_template(template_sel other_value) |
| : Base_Template(other_value) |
| { |
| check_single_selection(other_value); |
| } |
| |
| ExtendedMessageRequestToSend_template::ExtendedMessageRequestToSend_template(const ExtendedMessageRequestToSend& other_value) |
| { |
| copy_value(other_value); |
| } |
| |
| ExtendedMessageRequestToSend_template::ExtendedMessageRequestToSend_template(const OPTIONAL<ExtendedMessageRequestToSend>& other_value) |
| { |
| switch (other_value.get_selection()) { |
| case OPTIONAL_PRESENT: |
| copy_value((const ExtendedMessageRequestToSend&)other_value); |
| break; |
| case OPTIONAL_OMIT: |
| set_selection(OMIT_VALUE); |
| break; |
| default: |
| TTCN_error("Creating a template of type @IsobusCMMessageTypes.ExtendedMessageRequestToSend from an unbound optional field."); |
| } |
| } |
| |
| ExtendedMessageRequestToSend_template::ExtendedMessageRequestToSend_template(const ExtendedMessageRequestToSend_template& other_value) |
| : Base_Template() |
| { |
| copy_template(other_value); |
| } |
| |
| ExtendedMessageRequestToSend_template::~ExtendedMessageRequestToSend_template() |
| { |
| clean_up(); |
| } |
| |
| ExtendedMessageRequestToSend_template& ExtendedMessageRequestToSend_template::operator=(template_sel other_value) |
| { |
| check_single_selection(other_value); |
| clean_up(); |
| set_selection(other_value); |
| return *this; |
| } |
| |
| ExtendedMessageRequestToSend_template& ExtendedMessageRequestToSend_template::operator=(const ExtendedMessageRequestToSend& other_value) |
| { |
| clean_up(); |
| copy_value(other_value); |
| return *this; |
| } |
| |
| ExtendedMessageRequestToSend_template& ExtendedMessageRequestToSend_template::operator=(const OPTIONAL<ExtendedMessageRequestToSend>& other_value) |
| { |
| clean_up(); |
| switch (other_value.get_selection()) { |
| case OPTIONAL_PRESENT: |
| copy_value((const ExtendedMessageRequestToSend&)other_value); |
| break; |
| case OPTIONAL_OMIT: |
| set_selection(OMIT_VALUE); |
| break; |
| default: |
| TTCN_error("Assignment of an unbound optional field to a template of type @IsobusCMMessageTypes.ExtendedMessageRequestToSend."); |
| } |
| return *this; |
| } |
| |
| ExtendedMessageRequestToSend_template& ExtendedMessageRequestToSend_template::operator=(const ExtendedMessageRequestToSend_template& other_value) |
| { |
| if (&other_value != this) { |
| clean_up(); |
| copy_template(other_value); |
| } |
| return *this; |
| } |
| |
| boolean ExtendedMessageRequestToSend_template::match(const ExtendedMessageRequestToSend& other_value, boolean legacy) const |
| { |
| if (!other_value.is_bound()) return FALSE; |
| switch (template_selection) { |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| return TRUE; |
| case OMIT_VALUE: |
| return FALSE; |
| case SPECIFIC_VALUE: |
| if(!other_value.ctrl().is_bound()) return FALSE; |
| if(!single_value->field_ctrl.match(other_value.ctrl(), legacy))return FALSE; |
| if(!other_value.msgSizeInBytes().is_bound()) return FALSE; |
| if(!single_value->field_msgSizeInBytes.match(other_value.msgSizeInBytes(), legacy))return FALSE; |
| if(!other_value.pgnOfExtendedPacketedMessage().is_bound()) return FALSE; |
| if(!single_value->field_pgnOfExtendedPacketedMessage.match(other_value.pgnOfExtendedPacketedMessage(), legacy))return FALSE; |
| return TRUE; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) |
| if (value_list.list_value[list_count].match(other_value, legacy)) return template_selection == VALUE_LIST; |
| return template_selection == COMPLEMENTED_LIST; |
| default: |
| TTCN_error("Matching an uninitialized/unsupported template of type @IsobusCMMessageTypes.ExtendedMessageRequestToSend."); |
| } |
| return FALSE; |
| } |
| |
| boolean ExtendedMessageRequestToSend_template::is_bound() const |
| { |
| if (template_selection == UNINITIALIZED_TEMPLATE && !is_ifpresent) return FALSE; |
| if (template_selection != SPECIFIC_VALUE) return TRUE; |
| return single_value->field_ctrl.is_bound() |
| |
| ||single_value->field_msgSizeInBytes.is_bound() |
| |
| ||single_value->field_pgnOfExtendedPacketedMessage.is_bound() |
| ; |
| } |
| |
| boolean ExtendedMessageRequestToSend_template::is_value() const |
| { |
| if (template_selection != SPECIFIC_VALUE || is_ifpresent) return FALSE; |
| return single_value->field_ctrl.is_value() |
| &&single_value->field_msgSizeInBytes.is_value() |
| &&single_value->field_pgnOfExtendedPacketedMessage.is_value(); |
| } |
| |
| void ExtendedMessageRequestToSend_template::clean_up() |
| { |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| delete single_value; |
| break; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| delete [] value_list.list_value; |
| default: |
| break; |
| } |
| template_selection = UNINITIALIZED_TEMPLATE; |
| } |
| |
| ExtendedMessageRequestToSend ExtendedMessageRequestToSend_template::valueof() const |
| { |
| if (template_selection != SPECIFIC_VALUE || is_ifpresent) |
| TTCN_error("Performing a valueof or send operation on a non-specific template of type @IsobusCMMessageTypes.ExtendedMessageRequestToSend."); |
| ExtendedMessageRequestToSend ret_val; |
| if (single_value->field_ctrl.is_bound()) { |
| ret_val.ctrl() = single_value->field_ctrl.valueof(); |
| } |
| if (single_value->field_msgSizeInBytes.is_bound()) { |
| ret_val.msgSizeInBytes() = single_value->field_msgSizeInBytes.valueof(); |
| } |
| if (single_value->field_pgnOfExtendedPacketedMessage.is_bound()) { |
| ret_val.pgnOfExtendedPacketedMessage() = single_value->field_pgnOfExtendedPacketedMessage.valueof(); |
| } |
| return ret_val; |
| } |
| |
| void ExtendedMessageRequestToSend_template::set_type(template_sel template_type, unsigned int list_length) |
| { |
| if (template_type != VALUE_LIST && template_type != COMPLEMENTED_LIST) |
| TTCN_error("Setting an invalid list for a template of type @IsobusCMMessageTypes.ExtendedMessageRequestToSend."); |
| clean_up(); |
| set_selection(template_type); |
| value_list.n_values = list_length; |
| value_list.list_value = new ExtendedMessageRequestToSend_template[list_length]; |
| } |
| |
| ExtendedMessageRequestToSend_template& ExtendedMessageRequestToSend_template::list_item(unsigned int list_index) const |
| { |
| if (template_selection != VALUE_LIST && template_selection != COMPLEMENTED_LIST) |
| TTCN_error("Accessing a list element of a non-list template of type @IsobusCMMessageTypes.ExtendedMessageRequestToSend."); |
| if (list_index >= value_list.n_values) |
| TTCN_error("Index overflow in a value list template of type @IsobusCMMessageTypes.ExtendedMessageRequestToSend."); |
| return value_list.list_value[list_index]; |
| } |
| |
| OCTETSTRING_template& ExtendedMessageRequestToSend_template::ctrl() |
| { |
| set_specific(); |
| return single_value->field_ctrl; |
| } |
| |
| const OCTETSTRING_template& ExtendedMessageRequestToSend_template::ctrl() const |
| { |
| if (template_selection != SPECIFIC_VALUE) |
| TTCN_error("Accessing field ctrl of a non-specific template of type @IsobusCMMessageTypes.ExtendedMessageRequestToSend."); |
| return single_value->field_ctrl; |
| } |
| |
| INTEGER_template& ExtendedMessageRequestToSend_template::msgSizeInBytes() |
| { |
| set_specific(); |
| return single_value->field_msgSizeInBytes; |
| } |
| |
| const INTEGER_template& ExtendedMessageRequestToSend_template::msgSizeInBytes() const |
| { |
| if (template_selection != SPECIFIC_VALUE) |
| TTCN_error("Accessing field msgSizeInBytes of a non-specific template of type @IsobusCMMessageTypes.ExtendedMessageRequestToSend."); |
| return single_value->field_msgSizeInBytes; |
| } |
| |
| INTEGER_template& ExtendedMessageRequestToSend_template::pgnOfExtendedPacketedMessage() |
| { |
| set_specific(); |
| return single_value->field_pgnOfExtendedPacketedMessage; |
| } |
| |
| const INTEGER_template& ExtendedMessageRequestToSend_template::pgnOfExtendedPacketedMessage() const |
| { |
| if (template_selection != SPECIFIC_VALUE) |
| TTCN_error("Accessing field pgnOfExtendedPacketedMessage of a non-specific template of type @IsobusCMMessageTypes.ExtendedMessageRequestToSend."); |
| return single_value->field_pgnOfExtendedPacketedMessage; |
| } |
| |
| int ExtendedMessageRequestToSend_template::size_of() const |
| { |
| if (is_ifpresent) TTCN_error("Performing sizeof() operation on a template of type @IsobusCMMessageTypes.ExtendedMessageRequestToSend which has an ifpresent attribute."); |
| switch (template_selection) |
| { |
| case SPECIFIC_VALUE: |
| return 3; |
| case VALUE_LIST: |
| { |
| if (value_list.n_values<1) |
| TTCN_error("Internal error: Performing sizeof() operation on a template of type @IsobusCMMessageTypes.ExtendedMessageRequestToSend containing an empty list."); |
| int item_size = value_list.list_value[0].size_of(); |
| for (unsigned int l_idx = 1; l_idx < value_list.n_values; l_idx++) |
| { |
| if (value_list.list_value[l_idx].size_of()!=item_size) |
| TTCN_error("Performing sizeof() operation on a template of type @IsobusCMMessageTypes.ExtendedMessageRequestToSend containing a value list with different sizes."); |
| } |
| return item_size; |
| } |
| case OMIT_VALUE: |
| TTCN_error("Performing sizeof() operation on a template of type @IsobusCMMessageTypes.ExtendedMessageRequestToSend containing omit value."); |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| TTCN_error("Performing sizeof() operation on a template of type @IsobusCMMessageTypes.ExtendedMessageRequestToSend containing */? value."); |
| case COMPLEMENTED_LIST: |
| TTCN_error("Performing sizeof() operation on a template of type @IsobusCMMessageTypes.ExtendedMessageRequestToSend containing complemented list."); |
| default: |
| TTCN_error("Performing sizeof() operation on an uninitialized/unsupported template of type @IsobusCMMessageTypes.ExtendedMessageRequestToSend."); |
| } |
| return 0; |
| } |
| |
| void ExtendedMessageRequestToSend_template::log() const |
| { |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| TTCN_Logger::log_event_str("{ ctrl := "); |
| single_value->field_ctrl.log(); |
| TTCN_Logger::log_event_str(", msgSizeInBytes := "); |
| single_value->field_msgSizeInBytes.log(); |
| TTCN_Logger::log_event_str(", pgnOfExtendedPacketedMessage := "); |
| single_value->field_pgnOfExtendedPacketedMessage.log(); |
| TTCN_Logger::log_event_str(" }"); |
| break; |
| case COMPLEMENTED_LIST: |
| TTCN_Logger::log_event_str("complement"); |
| case VALUE_LIST: |
| TTCN_Logger::log_char('('); |
| for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) { |
| if (list_count > 0) TTCN_Logger::log_event_str(", "); |
| value_list.list_value[list_count].log(); |
| } |
| TTCN_Logger::log_char(')'); |
| break; |
| default: |
| log_generic(); |
| } |
| log_ifpresent(); |
| } |
| |
| void ExtendedMessageRequestToSend_template::log_match(const ExtendedMessageRequestToSend& match_value, boolean legacy) const |
| { |
| if(TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity()){ |
| if(match(match_value, legacy)){ |
| TTCN_Logger::print_logmatch_buffer(); |
| TTCN_Logger::log_event_str(" matched"); |
| } else{ |
| if (template_selection == SPECIFIC_VALUE) { |
| size_t previous_size = TTCN_Logger::get_logmatch_buffer_len(); |
| if(!single_value->field_ctrl.match(match_value.ctrl(), legacy)){ |
| TTCN_Logger::log_logmatch_info(".ctrl"); |
| single_value->field_ctrl.log_match(match_value.ctrl(), legacy); |
| TTCN_Logger::set_logmatch_buffer_len(previous_size); |
| } |
| if(!single_value->field_msgSizeInBytes.match(match_value.msgSizeInBytes(), legacy)){ |
| TTCN_Logger::log_logmatch_info(".msgSizeInBytes"); |
| single_value->field_msgSizeInBytes.log_match(match_value.msgSizeInBytes(), legacy); |
| TTCN_Logger::set_logmatch_buffer_len(previous_size); |
| } |
| if(!single_value->field_pgnOfExtendedPacketedMessage.match(match_value.pgnOfExtendedPacketedMessage(), legacy)){ |
| TTCN_Logger::log_logmatch_info(".pgnOfExtendedPacketedMessage"); |
| single_value->field_pgnOfExtendedPacketedMessage.log_match(match_value.pgnOfExtendedPacketedMessage(), legacy); |
| TTCN_Logger::set_logmatch_buffer_len(previous_size); |
| } |
| }else { |
| TTCN_Logger::print_logmatch_buffer(); |
| match_value.log(); |
| TTCN_Logger::log_event_str(" with "); |
| log(); |
| TTCN_Logger::log_event_str(" unmatched"); |
| } |
| } |
| return; |
| } |
| if (template_selection == SPECIFIC_VALUE) { |
| TTCN_Logger::log_event_str("{ ctrl := "); |
| single_value->field_ctrl.log_match(match_value.ctrl(), legacy); |
| TTCN_Logger::log_event_str(", msgSizeInBytes := "); |
| single_value->field_msgSizeInBytes.log_match(match_value.msgSizeInBytes(), legacy); |
| TTCN_Logger::log_event_str(", pgnOfExtendedPacketedMessage := "); |
| single_value->field_pgnOfExtendedPacketedMessage.log_match(match_value.pgnOfExtendedPacketedMessage(), legacy); |
| TTCN_Logger::log_event_str(" }"); |
| } else { |
| match_value.log(); |
| TTCN_Logger::log_event_str(" with "); |
| log(); |
| if (match(match_value, legacy)) TTCN_Logger::log_event_str(" matched"); |
| else TTCN_Logger::log_event_str(" unmatched"); |
| } |
| } |
| |
| void ExtendedMessageRequestToSend_template::encode_text(Text_Buf& text_buf) const |
| { |
| encode_text_base(text_buf); |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| single_value->field_ctrl.encode_text(text_buf); |
| single_value->field_msgSizeInBytes.encode_text(text_buf); |
| single_value->field_pgnOfExtendedPacketedMessage.encode_text(text_buf); |
| case OMIT_VALUE: |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| break; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| text_buf.push_int(value_list.n_values); |
| for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) |
| value_list.list_value[list_count].encode_text(text_buf); |
| break; |
| default: |
| TTCN_error("Text encoder: Encoding an uninitialized/unsupported template of type @IsobusCMMessageTypes.ExtendedMessageRequestToSend."); |
| } |
| } |
| |
| void ExtendedMessageRequestToSend_template::decode_text(Text_Buf& text_buf) |
| { |
| clean_up(); |
| decode_text_base(text_buf); |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| single_value = new single_value_struct; |
| single_value->field_ctrl.decode_text(text_buf); |
| single_value->field_msgSizeInBytes.decode_text(text_buf); |
| single_value->field_pgnOfExtendedPacketedMessage.decode_text(text_buf); |
| case OMIT_VALUE: |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| break; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| value_list.n_values = text_buf.pull_int().get_val(); |
| value_list.list_value = new ExtendedMessageRequestToSend_template[value_list.n_values]; |
| for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) |
| value_list.list_value[list_count].decode_text(text_buf); |
| break; |
| default: |
| TTCN_error("Text decoder: An unknown/unsupported selection was received in a template of type @IsobusCMMessageTypes.ExtendedMessageRequestToSend."); |
| } |
| } |
| |
| void ExtendedMessageRequestToSend_template::set_param(Module_Param& param) |
| { |
| param.basic_check(Module_Param::BC_TEMPLATE, "record template"); |
| switch (param.get_type()) { |
| case Module_Param::MP_Omit: |
| *this = OMIT_VALUE; |
| break; |
| case Module_Param::MP_Any: |
| *this = ANY_VALUE; |
| break; |
| case Module_Param::MP_AnyOrNone: |
| *this = ANY_OR_OMIT; |
| break; |
| case Module_Param::MP_List_Template: |
| case Module_Param::MP_ComplementList_Template: { |
| ExtendedMessageRequestToSend_template new_temp; |
| new_temp.set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : COMPLEMENTED_LIST, param.get_size()); |
| for (size_t p_i=0; p_i<param.get_size(); p_i++) { |
| new_temp.list_item(p_i).set_param(*param.get_elem(p_i)); |
| } |
| *this = new_temp; |
| break; } |
| case Module_Param::MP_Value_List: |
| if (3<param.get_size()) { |
| param.error("record template of type @IsobusCMMessageTypes.ExtendedMessageRequestToSend has 3 fields but list value has %d fields", (int)param.get_size()); |
| } |
| if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) ctrl().set_param(*param.get_elem(0)); |
| if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) msgSizeInBytes().set_param(*param.get_elem(1)); |
| if (param.get_size()>2 && param.get_elem(2)->get_type()!=Module_Param::MP_NotUsed) pgnOfExtendedPacketedMessage().set_param(*param.get_elem(2)); |
| break; |
| case Module_Param::MP_Assignment_List: { |
| Vector<bool> value_used(param.get_size()); |
| value_used.resize(param.get_size(), FALSE); |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "ctrl")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| ctrl().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "msgSizeInBytes")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| msgSizeInBytes().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "pgnOfExtendedPacketedMessage")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| pgnOfExtendedPacketedMessage().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| curr_param->error("Non existent field name in type @IsobusCMMessageTypes.ExtendedMessageRequestToSend: %s", curr_param->get_id()->get_name()); |
| break; |
| } |
| } break; |
| default: |
| param.type_error("record template", "@IsobusCMMessageTypes.ExtendedMessageRequestToSend"); |
| } |
| is_ifpresent = param.get_ifpresent(); |
| } |
| |
| void ExtendedMessageRequestToSend_template::check_restriction(template_res t_res, const char* t_name, boolean legacy) const |
| { |
| if (template_selection==UNINITIALIZED_TEMPLATE) return; |
| switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) { |
| case TR_OMIT: |
| if (template_selection==OMIT_VALUE) return; |
| case TR_VALUE: |
| if (template_selection!=SPECIFIC_VALUE || is_ifpresent) break; |
| single_value->field_ctrl.check_restriction(t_res, t_name ? t_name : "@IsobusCMMessageTypes.ExtendedMessageRequestToSend"); |
| single_value->field_msgSizeInBytes.check_restriction(t_res, t_name ? t_name : "@IsobusCMMessageTypes.ExtendedMessageRequestToSend"); |
| single_value->field_pgnOfExtendedPacketedMessage.check_restriction(t_res, t_name ? t_name : "@IsobusCMMessageTypes.ExtendedMessageRequestToSend"); |
| return; |
| case TR_PRESENT: |
| if (!match_omit(legacy)) return; |
| break; |
| default: |
| return; |
| } |
| TTCN_error("Restriction `%s' on template of type %s violated.", get_res_name(t_res), t_name ? t_name : "@IsobusCMMessageTypes.ExtendedMessageRequestToSend"); |
| } |
| |
| boolean ExtendedMessageRequestToSend_template::is_present(boolean legacy) const |
| { |
| if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE; |
| return !match_omit(legacy); |
| } |
| |
| boolean ExtendedMessageRequestToSend_template::match_omit(boolean legacy) const |
| { |
| if (is_ifpresent) return TRUE; |
| switch (template_selection) { |
| case OMIT_VALUE: |
| case ANY_OR_OMIT: |
| return TRUE; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| if (legacy) { |
| for (unsigned int l_idx=0; l_idx<value_list.n_values; l_idx++) |
| if (value_list.list_value[l_idx].match_omit()) |
| return template_selection==VALUE_LIST; |
| return template_selection==COMPLEMENTED_LIST; |
| } // else fall through |
| default: |
| return FALSE; |
| } |
| return FALSE; |
| } |
| |
| ExtendedMessageClearToSend::ExtendedMessageClearToSend() |
| { |
| } |
| |
| ExtendedMessageClearToSend::ExtendedMessageClearToSend(const OCTETSTRING& par_ctrl, |
| const INTEGER& par_NumberOfPacketsToSend, |
| const INTEGER& par_nextPacketNumberToSend, |
| const INTEGER& par_pgnOfExtendedPacketedMessage) |
| : field_ctrl(par_ctrl), |
| field_NumberOfPacketsToSend(par_NumberOfPacketsToSend), |
| field_nextPacketNumberToSend(par_nextPacketNumberToSend), |
| field_pgnOfExtendedPacketedMessage(par_pgnOfExtendedPacketedMessage) |
| { |
| } |
| |
| ExtendedMessageClearToSend::ExtendedMessageClearToSend(const ExtendedMessageClearToSend& other_value) |
| { |
| if(!other_value.is_bound()) TTCN_error("Copying an unbound value of type @IsobusCMMessageTypes.ExtendedMessageClearToSend."); |
| if (other_value.ctrl().is_bound()) field_ctrl = other_value.ctrl(); |
| else field_ctrl.clean_up(); |
| if (other_value.NumberOfPacketsToSend().is_bound()) field_NumberOfPacketsToSend = other_value.NumberOfPacketsToSend(); |
| else field_NumberOfPacketsToSend.clean_up(); |
| if (other_value.nextPacketNumberToSend().is_bound()) field_nextPacketNumberToSend = other_value.nextPacketNumberToSend(); |
| else field_nextPacketNumberToSend.clean_up(); |
| if (other_value.pgnOfExtendedPacketedMessage().is_bound()) field_pgnOfExtendedPacketedMessage = other_value.pgnOfExtendedPacketedMessage(); |
| else field_pgnOfExtendedPacketedMessage.clean_up(); |
| } |
| |
| void ExtendedMessageClearToSend::clean_up() |
| { |
| field_ctrl.clean_up(); |
| field_NumberOfPacketsToSend.clean_up(); |
| field_nextPacketNumberToSend.clean_up(); |
| field_pgnOfExtendedPacketedMessage.clean_up(); |
| } |
| |
| const TTCN_Typedescriptor_t* ExtendedMessageClearToSend::get_descriptor() const { return &ExtendedMessageClearToSend_descr_; } |
| ExtendedMessageClearToSend& ExtendedMessageClearToSend::operator=(const ExtendedMessageClearToSend& other_value) |
| { |
| if (this != &other_value) { |
| if(!other_value.is_bound()) TTCN_error("Assignment of an unbound value of type @IsobusCMMessageTypes.ExtendedMessageClearToSend."); |
| if (other_value.ctrl().is_bound()) field_ctrl = other_value.ctrl(); |
| else field_ctrl.clean_up(); |
| if (other_value.NumberOfPacketsToSend().is_bound()) field_NumberOfPacketsToSend = other_value.NumberOfPacketsToSend(); |
| else field_NumberOfPacketsToSend.clean_up(); |
| if (other_value.nextPacketNumberToSend().is_bound()) field_nextPacketNumberToSend = other_value.nextPacketNumberToSend(); |
| else field_nextPacketNumberToSend.clean_up(); |
| if (other_value.pgnOfExtendedPacketedMessage().is_bound()) field_pgnOfExtendedPacketedMessage = other_value.pgnOfExtendedPacketedMessage(); |
| else field_pgnOfExtendedPacketedMessage.clean_up(); |
| } |
| return *this; |
| } |
| |
| boolean ExtendedMessageClearToSend::operator==(const ExtendedMessageClearToSend& other_value) const |
| { |
| return field_ctrl==other_value.field_ctrl |
| && field_NumberOfPacketsToSend==other_value.field_NumberOfPacketsToSend |
| && field_nextPacketNumberToSend==other_value.field_nextPacketNumberToSend |
| && field_pgnOfExtendedPacketedMessage==other_value.field_pgnOfExtendedPacketedMessage; |
| } |
| |
| boolean ExtendedMessageClearToSend::is_bound() const |
| { |
| return (field_ctrl.is_bound()) |
| || (field_NumberOfPacketsToSend.is_bound()) |
| || (field_nextPacketNumberToSend.is_bound()) |
| || (field_pgnOfExtendedPacketedMessage.is_bound()); |
| } |
| boolean ExtendedMessageClearToSend::is_value() const |
| { |
| return field_ctrl.is_value() |
| && field_NumberOfPacketsToSend.is_value() |
| && field_nextPacketNumberToSend.is_value() |
| && field_pgnOfExtendedPacketedMessage.is_value(); |
| } |
| void ExtendedMessageClearToSend::log() const |
| { |
| if (!is_bound()) { |
| TTCN_Logger::log_event_unbound(); |
| return; |
| } |
| TTCN_Logger::log_event_str("{ ctrl := "); |
| field_ctrl.log(); |
| TTCN_Logger::log_event_str(", NumberOfPacketsToSend := "); |
| field_NumberOfPacketsToSend.log(); |
| TTCN_Logger::log_event_str(", nextPacketNumberToSend := "); |
| field_nextPacketNumberToSend.log(); |
| TTCN_Logger::log_event_str(", pgnOfExtendedPacketedMessage := "); |
| field_pgnOfExtendedPacketedMessage.log(); |
| TTCN_Logger::log_event_str(" }"); |
| } |
| |
| void ExtendedMessageClearToSend::set_param(Module_Param& param) |
| { |
| param.basic_check(Module_Param::BC_VALUE, "record value"); |
| switch (param.get_type()) { |
| case Module_Param::MP_Value_List: |
| if (4<param.get_size()) { |
| param.error("record value of type @IsobusCMMessageTypes.ExtendedMessageClearToSend has 4 fields but list value has %d fields", (int)param.get_size()); |
| } |
| if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) ctrl().set_param(*param.get_elem(0)); |
| if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) NumberOfPacketsToSend().set_param(*param.get_elem(1)); |
| if (param.get_size()>2 && param.get_elem(2)->get_type()!=Module_Param::MP_NotUsed) nextPacketNumberToSend().set_param(*param.get_elem(2)); |
| if (param.get_size()>3 && param.get_elem(3)->get_type()!=Module_Param::MP_NotUsed) pgnOfExtendedPacketedMessage().set_param(*param.get_elem(3)); |
| break; |
| case Module_Param::MP_Assignment_List: { |
| Vector<bool> value_used(param.get_size()); |
| value_used.resize(param.get_size(), FALSE); |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "ctrl")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| ctrl().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "NumberOfPacketsToSend")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| NumberOfPacketsToSend().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "nextPacketNumberToSend")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| nextPacketNumberToSend().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "pgnOfExtendedPacketedMessage")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| pgnOfExtendedPacketedMessage().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| curr_param->error("Non existent field name in type @IsobusCMMessageTypes.ExtendedMessageClearToSend: %s", curr_param->get_id()->get_name()); |
| break; |
| } |
| } break; |
| default: |
| param.type_error("record value", "@IsobusCMMessageTypes.ExtendedMessageClearToSend"); |
| } |
| } |
| |
| void ExtendedMessageClearToSend::set_implicit_omit() |
| { |
| if (ctrl().is_bound()) ctrl().set_implicit_omit(); |
| if (NumberOfPacketsToSend().is_bound()) NumberOfPacketsToSend().set_implicit_omit(); |
| if (nextPacketNumberToSend().is_bound()) nextPacketNumberToSend().set_implicit_omit(); |
| if (pgnOfExtendedPacketedMessage().is_bound()) pgnOfExtendedPacketedMessage().set_implicit_omit(); |
| } |
| |
| void ExtendedMessageClearToSend::encode_text(Text_Buf& text_buf) const |
| { |
| field_ctrl.encode_text(text_buf); |
| field_NumberOfPacketsToSend.encode_text(text_buf); |
| field_nextPacketNumberToSend.encode_text(text_buf); |
| field_pgnOfExtendedPacketedMessage.encode_text(text_buf); |
| } |
| |
| void ExtendedMessageClearToSend::decode_text(Text_Buf& text_buf) |
| { |
| field_ctrl.decode_text(text_buf); |
| field_NumberOfPacketsToSend.decode_text(text_buf); |
| field_nextPacketNumberToSend.decode_text(text_buf); |
| field_pgnOfExtendedPacketedMessage.decode_text(text_buf); |
| } |
| |
| void ExtendedMessageClearToSend::encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, TTCN_EncDec::coding_t p_coding, ...) const |
| { |
| va_list pvar; |
| va_start(pvar, p_coding); |
| switch(p_coding) { |
| case TTCN_EncDec::CT_BER: { |
| TTCN_EncDec_ErrorContext ec("While BER-encoding type '%s': ", p_td.name); |
| unsigned BER_coding=va_arg(pvar, unsigned); |
| BER_encode_chk_coding(BER_coding); |
| ASN_BER_TLV_t *tlv=BER_encode_TLV(p_td, BER_coding); |
| tlv->put_in_buffer(p_buf); |
| ASN_BER_TLV_t::destruct(tlv); |
| break;} |
| case TTCN_EncDec::CT_RAW: { |
| TTCN_EncDec_ErrorContext ec("While RAW-encoding type '%s': ", p_td.name); |
| if(!p_td.raw) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No RAW descriptor available for type '%s'.", p_td.name); |
| RAW_enc_tr_pos rp; |
| rp.level=0; |
| rp.pos=NULL; |
| RAW_enc_tree root(FALSE, NULL, &rp, 1, p_td.raw); |
| RAW_encode(p_td, root); |
| root.put_to_buf(p_buf); |
| break;} |
| case TTCN_EncDec::CT_TEXT: { |
| TTCN_EncDec_ErrorContext ec("While TEXT-encoding type '%s': ", p_td.name); |
| if(!p_td.text) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No TEXT descriptor available for type '%s'.", p_td.name); |
| TEXT_encode(p_td,p_buf); |
| break;} |
| case TTCN_EncDec::CT_XER: { |
| TTCN_EncDec_ErrorContext ec("While XER-encoding type '%s': ", p_td.name); |
| unsigned XER_coding=va_arg(pvar, unsigned); |
| XER_encode_chk_coding(XER_coding, p_td); |
| XER_encode(*(p_td.xer),p_buf, XER_coding, 0, 0, 0); |
| p_buf.put_c('\n'); |
| break;} |
| case TTCN_EncDec::CT_JSON: { |
| TTCN_EncDec_ErrorContext ec("While JSON-encoding type '%s': ", p_td.name); |
| if(!p_td.json) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No JSON descriptor available for type '%s'.", p_td.name); |
| JSON_Tokenizer tok(va_arg(pvar, int) != 0); |
| JSON_encode(p_td, tok); |
| p_buf.put_s(tok.get_buffer_length(), (const unsigned char*)tok.get_buffer()); |
| break;} |
| case TTCN_EncDec::CT_OER: { |
| TTCN_EncDec_ErrorContext ec("While OER-encoding type '%s': ", p_td.name); |
| if(!p_td.oer) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No OER descriptor available for type '%s'.", p_td.name); |
| OER_encode(p_td, p_buf); |
| break;} |
| default: |
| TTCN_error("Unknown coding method requested to encode type '%s'", p_td.name); |
| } |
| va_end(pvar); |
| } |
| |
| void ExtendedMessageClearToSend::decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, TTCN_EncDec::coding_t p_coding, ...) |
| { |
| va_list pvar; |
| va_start(pvar, p_coding); |
| switch(p_coding) { |
| case TTCN_EncDec::CT_BER: { |
| TTCN_EncDec_ErrorContext ec("While BER-decoding type '%s': ", p_td.name); |
| unsigned L_form=va_arg(pvar, unsigned); |
| ASN_BER_TLV_t tlv; |
| BER_decode_str2TLV(p_buf, tlv, L_form); |
| BER_decode_TLV(p_td, tlv, L_form); |
| if(tlv.isComplete) p_buf.increase_pos(tlv.get_len()); |
| break;} |
| case TTCN_EncDec::CT_RAW: { |
| TTCN_EncDec_ErrorContext ec("While RAW-decoding type '%s': ", p_td.name); |
| if(!p_td.raw) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No RAW descriptor available for type '%s'.", p_td.name); |
| raw_order_t r_order; |
| switch(p_td.raw->top_bit_order) { |
| case TOP_BIT_LEFT: |
| r_order=ORDER_LSB; |
| break; |
| case TOP_BIT_RIGHT: |
| default: |
| r_order=ORDER_MSB; |
| } |
| int rawr = RAW_decode(p_td, p_buf, p_buf.get_len()*8, r_order); |
| if(rawr<0) switch (-rawr) { |
| case TTCN_EncDec::ET_INCOMPL_MSG: |
| case TTCN_EncDec::ET_LEN_ERR: |
| ec.error((TTCN_EncDec::error_type_t)-rawr, "Can not decode type '%s', because incomplete message was received", p_td.name); |
| break; |
| case 1: |
| default: |
| ec.error(TTCN_EncDec::ET_INVAL_MSG, "Can not decode type '%s', because invalid message was received", p_td.name); |
| break; |
| } |
| break;} |
| case TTCN_EncDec::CT_TEXT: { |
| Limit_Token_List limit; |
| TTCN_EncDec_ErrorContext ec("While TEXT-decoding type '%s': ", p_td.name); |
| if(!p_td.text) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No TEXT descriptor available for type '%s'.", p_td.name); |
| const unsigned char *b_data=p_buf.get_data(); |
| if(b_data[p_buf.get_len()-1]!='\0'){ |
| p_buf.set_pos(p_buf.get_len()); |
| p_buf.put_zero(8,ORDER_LSB); |
| p_buf.rewind(); |
| } |
| if(TEXT_decode(p_td,p_buf,limit)<0) |
| ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name); |
| break;} |
| case TTCN_EncDec::CT_XER: { |
| TTCN_EncDec_ErrorContext ec("While XER-decoding type '%s': ", p_td.name); |
| unsigned XER_coding=va_arg(pvar, unsigned); |
| XER_encode_chk_coding(XER_coding, p_td); |
| XmlReaderWrap reader(p_buf); |
| for (int rd_ok=reader.Read(); rd_ok==1; rd_ok=reader.Read()) { |
| if (reader.NodeType() == XML_READER_TYPE_ELEMENT) break; |
| } |
| XER_decode(*(p_td.xer), reader, XER_coding | XER_TOPLEVEL, XER_NONE, 0); |
| size_t bytes = reader.ByteConsumed(); |
| p_buf.set_pos(bytes); |
| break;} |
| case TTCN_EncDec::CT_JSON: { |
| TTCN_EncDec_ErrorContext ec("While JSON-decoding type '%s': ", p_td.name); |
| if(!p_td.json) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No JSON descriptor available for type '%s'.", p_td.name); |
| JSON_Tokenizer tok((const char*)p_buf.get_data(), p_buf.get_len()); |
| if(JSON_decode(p_td, tok, FALSE)<0) |
| ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name); |
| p_buf.set_pos(tok.get_buf_pos()); |
| break;} |
| case TTCN_EncDec::CT_OER: { |
| TTCN_EncDec_ErrorContext ec("While OER-decoding type '%s': ", p_td.name); |
| if(!p_td.oer) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No OER descriptor available for type '%s'.", p_td.name); |
| OER_struct p_oer; |
| OER_decode(p_td, p_buf, p_oer); |
| break;} |
| default: |
| TTCN_error("Unknown coding method requested to decode type '%s'", p_td.name); |
| } |
| va_end(pvar); |
| } |
| |
| int ExtendedMessageClearToSend::RAW_decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int limit, raw_order_t top_bit_ord, boolean no_err, int, boolean, const RAW_Force_Omit* force_omit) |
| { (void)no_err; |
| int prepaddlength=p_buf.increase_pos_padd(p_td.raw->prepadding); |
| limit-=prepaddlength; |
| size_t last_decoded_pos = p_buf.get_pos_bit(); |
| int decoded_length = 0; |
| int decoded_field_length = 0; |
| raw_order_t local_top_order; |
| if(p_td.raw->top_bit_order==TOP_BIT_INHERITED)local_top_order=top_bit_ord; |
| else if(p_td.raw->top_bit_order==TOP_BIT_RIGHT)local_top_order=ORDER_MSB; |
| else local_top_order=ORDER_LSB; |
| RAW_Force_Omit field_0_force_omit(0, force_omit, ExtendedMessageClearToSend_ctrl_descr_.raw->forceomit); |
| decoded_field_length = field_ctrl.RAW_decode(ExtendedMessageClearToSend_ctrl_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_0_force_omit); |
| if (decoded_field_length < 0) return decoded_field_length; |
| decoded_length+=decoded_field_length; |
| limit-=decoded_field_length; |
| last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit()); |
| RAW_Force_Omit field_1_force_omit(1, force_omit, General__Types::INT1_descr_.raw->forceomit); |
| decoded_field_length = field_NumberOfPacketsToSend.RAW_decode(General__Types::INT1_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_1_force_omit); |
| if (decoded_field_length < 0) return decoded_field_length; |
| decoded_length+=decoded_field_length; |
| limit-=decoded_field_length; |
| last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit()); |
| RAW_Force_Omit field_2_force_omit(2, force_omit, ETP__NextPacketNumberToSend_descr_.raw->forceomit); |
| decoded_field_length = field_nextPacketNumberToSend.RAW_decode(ETP__NextPacketNumberToSend_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_2_force_omit); |
| if (decoded_field_length < 0) return decoded_field_length; |
| decoded_length+=decoded_field_length; |
| limit-=decoded_field_length; |
| last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit()); |
| RAW_Force_Omit field_3_force_omit(3, force_omit, IsobusMessageTypes::PGN_descr_.raw->forceomit); |
| decoded_field_length = field_pgnOfExtendedPacketedMessage.RAW_decode(IsobusMessageTypes::PGN_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_3_force_omit); |
| if (decoded_field_length < 0) return decoded_field_length; |
| decoded_length+=decoded_field_length; |
| limit-=decoded_field_length; |
| last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit()); |
| p_buf.set_pos_bit(last_decoded_pos); |
| return decoded_length+prepaddlength+p_buf.increase_pos_padd(p_td.raw->padding); |
| } |
| |
| int ExtendedMessageClearToSend::RAW_encode(const TTCN_Typedescriptor_t&, RAW_enc_tree& myleaf) const { |
| if (!is_bound()) TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_UNBOUND, "Encoding an unbound value."); |
| int encoded_length = 0; |
| myleaf.isleaf = FALSE; |
| myleaf.body.node.num_of_nodes = 4; |
| myleaf.body.node.nodes = init_nodes_of_enc_tree(4); |
| myleaf.body.node.nodes[0] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 0, ExtendedMessageClearToSend_ctrl_descr_.raw); |
| myleaf.body.node.nodes[1] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 1, General__Types::INT1_descr_.raw); |
| myleaf.body.node.nodes[2] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 2, ETP__NextPacketNumberToSend_descr_.raw); |
| myleaf.body.node.nodes[3] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 3, IsobusMessageTypes::PGN_descr_.raw); |
| encoded_length += field_ctrl.RAW_encode(ExtendedMessageClearToSend_ctrl_descr_, *myleaf.body.node.nodes[0]); |
| encoded_length += field_NumberOfPacketsToSend.RAW_encode(General__Types::INT1_descr_, *myleaf.body.node.nodes[1]); |
| encoded_length += field_nextPacketNumberToSend.RAW_encode(ETP__NextPacketNumberToSend_descr_, *myleaf.body.node.nodes[2]); |
| encoded_length += field_pgnOfExtendedPacketedMessage.RAW_encode(IsobusMessageTypes::PGN_descr_, *myleaf.body.node.nodes[3]); |
| return myleaf.length = encoded_length; |
| } |
| |
| struct ExtendedMessageClearToSend_template::single_value_struct { |
| OCTETSTRING_template field_ctrl; |
| INTEGER_template field_NumberOfPacketsToSend; |
| INTEGER_template field_nextPacketNumberToSend; |
| INTEGER_template field_pgnOfExtendedPacketedMessage; |
| }; |
| |
| void ExtendedMessageClearToSend_template::set_specific() |
| { |
| if (template_selection != SPECIFIC_VALUE) { |
| template_sel old_selection = template_selection; |
| clean_up(); |
| single_value = new single_value_struct; |
| set_selection(SPECIFIC_VALUE); |
| if (old_selection == ANY_VALUE || old_selection == ANY_OR_OMIT) { |
| single_value->field_ctrl = ANY_VALUE; |
| single_value->field_NumberOfPacketsToSend = ANY_VALUE; |
| single_value->field_nextPacketNumberToSend = ANY_VALUE; |
| single_value->field_pgnOfExtendedPacketedMessage = ANY_VALUE; |
| } |
| } |
| } |
| |
| void ExtendedMessageClearToSend_template::copy_value(const ExtendedMessageClearToSend& other_value) |
| { |
| single_value = new single_value_struct; |
| if (other_value.ctrl().is_bound()) { |
| single_value->field_ctrl = other_value.ctrl(); |
| } else { |
| single_value->field_ctrl.clean_up(); |
| } |
| if (other_value.NumberOfPacketsToSend().is_bound()) { |
| single_value->field_NumberOfPacketsToSend = other_value.NumberOfPacketsToSend(); |
| } else { |
| single_value->field_NumberOfPacketsToSend.clean_up(); |
| } |
| if (other_value.nextPacketNumberToSend().is_bound()) { |
| single_value->field_nextPacketNumberToSend = other_value.nextPacketNumberToSend(); |
| } else { |
| single_value->field_nextPacketNumberToSend.clean_up(); |
| } |
| if (other_value.pgnOfExtendedPacketedMessage().is_bound()) { |
| single_value->field_pgnOfExtendedPacketedMessage = other_value.pgnOfExtendedPacketedMessage(); |
| } else { |
| single_value->field_pgnOfExtendedPacketedMessage.clean_up(); |
| } |
| set_selection(SPECIFIC_VALUE); |
| } |
| |
| void ExtendedMessageClearToSend_template::copy_template(const ExtendedMessageClearToSend_template& other_value) |
| { |
| switch (other_value.template_selection) { |
| case SPECIFIC_VALUE: |
| single_value = new single_value_struct; |
| if (UNINITIALIZED_TEMPLATE != other_value.ctrl().get_selection()) { |
| single_value->field_ctrl = other_value.ctrl(); |
| } else { |
| single_value->field_ctrl.clean_up(); |
| } |
| if (UNINITIALIZED_TEMPLATE != other_value.NumberOfPacketsToSend().get_selection()) { |
| single_value->field_NumberOfPacketsToSend = other_value.NumberOfPacketsToSend(); |
| } else { |
| single_value->field_NumberOfPacketsToSend.clean_up(); |
| } |
| if (UNINITIALIZED_TEMPLATE != other_value.nextPacketNumberToSend().get_selection()) { |
| single_value->field_nextPacketNumberToSend = other_value.nextPacketNumberToSend(); |
| } else { |
| single_value->field_nextPacketNumberToSend.clean_up(); |
| } |
| if (UNINITIALIZED_TEMPLATE != other_value.pgnOfExtendedPacketedMessage().get_selection()) { |
| single_value->field_pgnOfExtendedPacketedMessage = other_value.pgnOfExtendedPacketedMessage(); |
| } else { |
| single_value->field_pgnOfExtendedPacketedMessage.clean_up(); |
| } |
| case OMIT_VALUE: |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| break; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| value_list.n_values = other_value.value_list.n_values; |
| value_list.list_value = new ExtendedMessageClearToSend_template[value_list.n_values]; |
| for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) |
| value_list.list_value[list_count].copy_template(other_value.value_list.list_value[list_count]); |
| break; |
| default: |
| TTCN_error("Copying an uninitialized/unsupported template of type @IsobusCMMessageTypes.ExtendedMessageClearToSend."); |
| break; |
| } |
| set_selection(other_value); |
| } |
| |
| ExtendedMessageClearToSend_template::ExtendedMessageClearToSend_template() |
| { |
| } |
| |
| ExtendedMessageClearToSend_template::ExtendedMessageClearToSend_template(template_sel other_value) |
| : Base_Template(other_value) |
| { |
| check_single_selection(other_value); |
| } |
| |
| ExtendedMessageClearToSend_template::ExtendedMessageClearToSend_template(const ExtendedMessageClearToSend& other_value) |
| { |
| copy_value(other_value); |
| } |
| |
| ExtendedMessageClearToSend_template::ExtendedMessageClearToSend_template(const OPTIONAL<ExtendedMessageClearToSend>& other_value) |
| { |
| switch (other_value.get_selection()) { |
| case OPTIONAL_PRESENT: |
| copy_value((const ExtendedMessageClearToSend&)other_value); |
| break; |
| case OPTIONAL_OMIT: |
| set_selection(OMIT_VALUE); |
| break; |
| default: |
| TTCN_error("Creating a template of type @IsobusCMMessageTypes.ExtendedMessageClearToSend from an unbound optional field."); |
| } |
| } |
| |
| ExtendedMessageClearToSend_template::ExtendedMessageClearToSend_template(const ExtendedMessageClearToSend_template& other_value) |
| : Base_Template() |
| { |
| copy_template(other_value); |
| } |
| |
| ExtendedMessageClearToSend_template::~ExtendedMessageClearToSend_template() |
| { |
| clean_up(); |
| } |
| |
| ExtendedMessageClearToSend_template& ExtendedMessageClearToSend_template::operator=(template_sel other_value) |
| { |
| check_single_selection(other_value); |
| clean_up(); |
| set_selection(other_value); |
| return *this; |
| } |
| |
| ExtendedMessageClearToSend_template& ExtendedMessageClearToSend_template::operator=(const ExtendedMessageClearToSend& other_value) |
| { |
| clean_up(); |
| copy_value(other_value); |
| return *this; |
| } |
| |
| ExtendedMessageClearToSend_template& ExtendedMessageClearToSend_template::operator=(const OPTIONAL<ExtendedMessageClearToSend>& other_value) |
| { |
| clean_up(); |
| switch (other_value.get_selection()) { |
| case OPTIONAL_PRESENT: |
| copy_value((const ExtendedMessageClearToSend&)other_value); |
| break; |
| case OPTIONAL_OMIT: |
| set_selection(OMIT_VALUE); |
| break; |
| default: |
| TTCN_error("Assignment of an unbound optional field to a template of type @IsobusCMMessageTypes.ExtendedMessageClearToSend."); |
| } |
| return *this; |
| } |
| |
| ExtendedMessageClearToSend_template& ExtendedMessageClearToSend_template::operator=(const ExtendedMessageClearToSend_template& other_value) |
| { |
| if (&other_value != this) { |
| clean_up(); |
| copy_template(other_value); |
| } |
| return *this; |
| } |
| |
| boolean ExtendedMessageClearToSend_template::match(const ExtendedMessageClearToSend& other_value, boolean legacy) const |
| { |
| if (!other_value.is_bound()) return FALSE; |
| switch (template_selection) { |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| return TRUE; |
| case OMIT_VALUE: |
| return FALSE; |
| case SPECIFIC_VALUE: |
| if(!other_value.ctrl().is_bound()) return FALSE; |
| if(!single_value->field_ctrl.match(other_value.ctrl(), legacy))return FALSE; |
| if(!other_value.NumberOfPacketsToSend().is_bound()) return FALSE; |
| if(!single_value->field_NumberOfPacketsToSend.match(other_value.NumberOfPacketsToSend(), legacy))return FALSE; |
| if(!other_value.nextPacketNumberToSend().is_bound()) return FALSE; |
| if(!single_value->field_nextPacketNumberToSend.match(other_value.nextPacketNumberToSend(), legacy))return FALSE; |
| if(!other_value.pgnOfExtendedPacketedMessage().is_bound()) return FALSE; |
| if(!single_value->field_pgnOfExtendedPacketedMessage.match(other_value.pgnOfExtendedPacketedMessage(), legacy))return FALSE; |
| return TRUE; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) |
| if (value_list.list_value[list_count].match(other_value, legacy)) return template_selection == VALUE_LIST; |
| return template_selection == COMPLEMENTED_LIST; |
| default: |
| TTCN_error("Matching an uninitialized/unsupported template of type @IsobusCMMessageTypes.ExtendedMessageClearToSend."); |
| } |
| return FALSE; |
| } |
| |
| boolean ExtendedMessageClearToSend_template::is_bound() const |
| { |
| if (template_selection == UNINITIALIZED_TEMPLATE && !is_ifpresent) return FALSE; |
| if (template_selection != SPECIFIC_VALUE) return TRUE; |
| return single_value->field_ctrl.is_bound() |
| |
| ||single_value->field_NumberOfPacketsToSend.is_bound() |
| |
| ||single_value->field_nextPacketNumberToSend.is_bound() |
| |
| ||single_value->field_pgnOfExtendedPacketedMessage.is_bound() |
| ; |
| } |
| |
| boolean ExtendedMessageClearToSend_template::is_value() const |
| { |
| if (template_selection != SPECIFIC_VALUE || is_ifpresent) return FALSE; |
| return single_value->field_ctrl.is_value() |
| &&single_value->field_NumberOfPacketsToSend.is_value() |
| &&single_value->field_nextPacketNumberToSend.is_value() |
| &&single_value->field_pgnOfExtendedPacketedMessage.is_value(); |
| } |
| |
| void ExtendedMessageClearToSend_template::clean_up() |
| { |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| delete single_value; |
| break; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| delete [] value_list.list_value; |
| default: |
| break; |
| } |
| template_selection = UNINITIALIZED_TEMPLATE; |
| } |
| |
| ExtendedMessageClearToSend ExtendedMessageClearToSend_template::valueof() const |
| { |
| if (template_selection != SPECIFIC_VALUE || is_ifpresent) |
| TTCN_error("Performing a valueof or send operation on a non-specific template of type @IsobusCMMessageTypes.ExtendedMessageClearToSend."); |
| ExtendedMessageClearToSend ret_val; |
| if (single_value->field_ctrl.is_bound()) { |
| ret_val.ctrl() = single_value->field_ctrl.valueof(); |
| } |
| if (single_value->field_NumberOfPacketsToSend.is_bound()) { |
| ret_val.NumberOfPacketsToSend() = single_value->field_NumberOfPacketsToSend.valueof(); |
| } |
| if (single_value->field_nextPacketNumberToSend.is_bound()) { |
| ret_val.nextPacketNumberToSend() = single_value->field_nextPacketNumberToSend.valueof(); |
| } |
| if (single_value->field_pgnOfExtendedPacketedMessage.is_bound()) { |
| ret_val.pgnOfExtendedPacketedMessage() = single_value->field_pgnOfExtendedPacketedMessage.valueof(); |
| } |
| return ret_val; |
| } |
| |
| void ExtendedMessageClearToSend_template::set_type(template_sel template_type, unsigned int list_length) |
| { |
| if (template_type != VALUE_LIST && template_type != COMPLEMENTED_LIST) |
| TTCN_error("Setting an invalid list for a template of type @IsobusCMMessageTypes.ExtendedMessageClearToSend."); |
| clean_up(); |
| set_selection(template_type); |
| value_list.n_values = list_length; |
| value_list.list_value = new ExtendedMessageClearToSend_template[list_length]; |
| } |
| |
| ExtendedMessageClearToSend_template& ExtendedMessageClearToSend_template::list_item(unsigned int list_index) const |
| { |
| if (template_selection != VALUE_LIST && template_selection != COMPLEMENTED_LIST) |
| TTCN_error("Accessing a list element of a non-list template of type @IsobusCMMessageTypes.ExtendedMessageClearToSend."); |
| if (list_index >= value_list.n_values) |
| TTCN_error("Index overflow in a value list template of type @IsobusCMMessageTypes.ExtendedMessageClearToSend."); |
| return value_list.list_value[list_index]; |
| } |
| |
| OCTETSTRING_template& ExtendedMessageClearToSend_template::ctrl() |
| { |
| set_specific(); |
| return single_value->field_ctrl; |
| } |
| |
| const OCTETSTRING_template& ExtendedMessageClearToSend_template::ctrl() const |
| { |
| if (template_selection != SPECIFIC_VALUE) |
| TTCN_error("Accessing field ctrl of a non-specific template of type @IsobusCMMessageTypes.ExtendedMessageClearToSend."); |
| return single_value->field_ctrl; |
| } |
| |
| INTEGER_template& ExtendedMessageClearToSend_template::NumberOfPacketsToSend() |
| { |
| set_specific(); |
| return single_value->field_NumberOfPacketsToSend; |
| } |
| |
| const INTEGER_template& ExtendedMessageClearToSend_template::NumberOfPacketsToSend() const |
| { |
| if (template_selection != SPECIFIC_VALUE) |
| TTCN_error("Accessing field NumberOfPacketsToSend of a non-specific template of type @IsobusCMMessageTypes.ExtendedMessageClearToSend."); |
| return single_value->field_NumberOfPacketsToSend; |
| } |
| |
| INTEGER_template& ExtendedMessageClearToSend_template::nextPacketNumberToSend() |
| { |
| set_specific(); |
| return single_value->field_nextPacketNumberToSend; |
| } |
| |
| const INTEGER_template& ExtendedMessageClearToSend_template::nextPacketNumberToSend() const |
| { |
| if (template_selection != SPECIFIC_VALUE) |
| TTCN_error("Accessing field nextPacketNumberToSend of a non-specific template of type @IsobusCMMessageTypes.ExtendedMessageClearToSend."); |
| return single_value->field_nextPacketNumberToSend; |
| } |
| |
| INTEGER_template& ExtendedMessageClearToSend_template::pgnOfExtendedPacketedMessage() |
| { |
| set_specific(); |
| return single_value->field_pgnOfExtendedPacketedMessage; |
| } |
| |
| const INTEGER_template& ExtendedMessageClearToSend_template::pgnOfExtendedPacketedMessage() const |
| { |
| if (template_selection != SPECIFIC_VALUE) |
| TTCN_error("Accessing field pgnOfExtendedPacketedMessage of a non-specific template of type @IsobusCMMessageTypes.ExtendedMessageClearToSend."); |
| return single_value->field_pgnOfExtendedPacketedMessage; |
| } |
| |
| int ExtendedMessageClearToSend_template::size_of() const |
| { |
| if (is_ifpresent) TTCN_error("Performing sizeof() operation on a template of type @IsobusCMMessageTypes.ExtendedMessageClearToSend which has an ifpresent attribute."); |
| switch (template_selection) |
| { |
| case SPECIFIC_VALUE: |
| return 4; |
| case VALUE_LIST: |
| { |
| if (value_list.n_values<1) |
| TTCN_error("Internal error: Performing sizeof() operation on a template of type @IsobusCMMessageTypes.ExtendedMessageClearToSend containing an empty list."); |
| int item_size = value_list.list_value[0].size_of(); |
| for (unsigned int l_idx = 1; l_idx < value_list.n_values; l_idx++) |
| { |
| if (value_list.list_value[l_idx].size_of()!=item_size) |
| TTCN_error("Performing sizeof() operation on a template of type @IsobusCMMessageTypes.ExtendedMessageClearToSend containing a value list with different sizes."); |
| } |
| return item_size; |
| } |
| case OMIT_VALUE: |
| TTCN_error("Performing sizeof() operation on a template of type @IsobusCMMessageTypes.ExtendedMessageClearToSend containing omit value."); |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| TTCN_error("Performing sizeof() operation on a template of type @IsobusCMMessageTypes.ExtendedMessageClearToSend containing */? value."); |
| case COMPLEMENTED_LIST: |
| TTCN_error("Performing sizeof() operation on a template of type @IsobusCMMessageTypes.ExtendedMessageClearToSend containing complemented list."); |
| default: |
| TTCN_error("Performing sizeof() operation on an uninitialized/unsupported template of type @IsobusCMMessageTypes.ExtendedMessageClearToSend."); |
| } |
| return 0; |
| } |
| |
| void ExtendedMessageClearToSend_template::log() const |
| { |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| TTCN_Logger::log_event_str("{ ctrl := "); |
| single_value->field_ctrl.log(); |
| TTCN_Logger::log_event_str(", NumberOfPacketsToSend := "); |
| single_value->field_NumberOfPacketsToSend.log(); |
| TTCN_Logger::log_event_str(", nextPacketNumberToSend := "); |
| single_value->field_nextPacketNumberToSend.log(); |
| TTCN_Logger::log_event_str(", pgnOfExtendedPacketedMessage := "); |
| single_value->field_pgnOfExtendedPacketedMessage.log(); |
| TTCN_Logger::log_event_str(" }"); |
| break; |
| case COMPLEMENTED_LIST: |
| TTCN_Logger::log_event_str("complement"); |
| case VALUE_LIST: |
| TTCN_Logger::log_char('('); |
| for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) { |
| if (list_count > 0) TTCN_Logger::log_event_str(", "); |
| value_list.list_value[list_count].log(); |
| } |
| TTCN_Logger::log_char(')'); |
| break; |
| default: |
| log_generic(); |
| } |
| log_ifpresent(); |
| } |
| |
| void ExtendedMessageClearToSend_template::log_match(const ExtendedMessageClearToSend& match_value, boolean legacy) const |
| { |
| if(TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity()){ |
| if(match(match_value, legacy)){ |
| TTCN_Logger::print_logmatch_buffer(); |
| TTCN_Logger::log_event_str(" matched"); |
| } else{ |
| if (template_selection == SPECIFIC_VALUE) { |
| size_t previous_size = TTCN_Logger::get_logmatch_buffer_len(); |
| if(!single_value->field_ctrl.match(match_value.ctrl(), legacy)){ |
| TTCN_Logger::log_logmatch_info(".ctrl"); |
| single_value->field_ctrl.log_match(match_value.ctrl(), legacy); |
| TTCN_Logger::set_logmatch_buffer_len(previous_size); |
| } |
| if(!single_value->field_NumberOfPacketsToSend.match(match_value.NumberOfPacketsToSend(), legacy)){ |
| TTCN_Logger::log_logmatch_info(".NumberOfPacketsToSend"); |
| single_value->field_NumberOfPacketsToSend.log_match(match_value.NumberOfPacketsToSend(), legacy); |
| TTCN_Logger::set_logmatch_buffer_len(previous_size); |
| } |
| if(!single_value->field_nextPacketNumberToSend.match(match_value.nextPacketNumberToSend(), legacy)){ |
| TTCN_Logger::log_logmatch_info(".nextPacketNumberToSend"); |
| single_value->field_nextPacketNumberToSend.log_match(match_value.nextPacketNumberToSend(), legacy); |
| TTCN_Logger::set_logmatch_buffer_len(previous_size); |
| } |
| if(!single_value->field_pgnOfExtendedPacketedMessage.match(match_value.pgnOfExtendedPacketedMessage(), legacy)){ |
| TTCN_Logger::log_logmatch_info(".pgnOfExtendedPacketedMessage"); |
| single_value->field_pgnOfExtendedPacketedMessage.log_match(match_value.pgnOfExtendedPacketedMessage(), legacy); |
| TTCN_Logger::set_logmatch_buffer_len(previous_size); |
| } |
| }else { |
| TTCN_Logger::print_logmatch_buffer(); |
| match_value.log(); |
| TTCN_Logger::log_event_str(" with "); |
| log(); |
| TTCN_Logger::log_event_str(" unmatched"); |
| } |
| } |
| return; |
| } |
| if (template_selection == SPECIFIC_VALUE) { |
| TTCN_Logger::log_event_str("{ ctrl := "); |
| single_value->field_ctrl.log_match(match_value.ctrl(), legacy); |
| TTCN_Logger::log_event_str(", NumberOfPacketsToSend := "); |
| single_value->field_NumberOfPacketsToSend.log_match(match_value.NumberOfPacketsToSend(), legacy); |
| TTCN_Logger::log_event_str(", nextPacketNumberToSend := "); |
| single_value->field_nextPacketNumberToSend.log_match(match_value.nextPacketNumberToSend(), legacy); |
| TTCN_Logger::log_event_str(", pgnOfExtendedPacketedMessage := "); |
| single_value->field_pgnOfExtendedPacketedMessage.log_match(match_value.pgnOfExtendedPacketedMessage(), legacy); |
| TTCN_Logger::log_event_str(" }"); |
| } else { |
| match_value.log(); |
| TTCN_Logger::log_event_str(" with "); |
| log(); |
| if (match(match_value, legacy)) TTCN_Logger::log_event_str(" matched"); |
| else TTCN_Logger::log_event_str(" unmatched"); |
| } |
| } |
| |
| void ExtendedMessageClearToSend_template::encode_text(Text_Buf& text_buf) const |
| { |
| encode_text_base(text_buf); |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| single_value->field_ctrl.encode_text(text_buf); |
| single_value->field_NumberOfPacketsToSend.encode_text(text_buf); |
| single_value->field_nextPacketNumberToSend.encode_text(text_buf); |
| single_value->field_pgnOfExtendedPacketedMessage.encode_text(text_buf); |
| case OMIT_VALUE: |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| break; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| text_buf.push_int(value_list.n_values); |
| for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) |
| value_list.list_value[list_count].encode_text(text_buf); |
| break; |
| default: |
| TTCN_error("Text encoder: Encoding an uninitialized/unsupported template of type @IsobusCMMessageTypes.ExtendedMessageClearToSend."); |
| } |
| } |
| |
| void ExtendedMessageClearToSend_template::decode_text(Text_Buf& text_buf) |
| { |
| clean_up(); |
| decode_text_base(text_buf); |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| single_value = new single_value_struct; |
| single_value->field_ctrl.decode_text(text_buf); |
| single_value->field_NumberOfPacketsToSend.decode_text(text_buf); |
| single_value->field_nextPacketNumberToSend.decode_text(text_buf); |
| single_value->field_pgnOfExtendedPacketedMessage.decode_text(text_buf); |
| case OMIT_VALUE: |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| break; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| value_list.n_values = text_buf.pull_int().get_val(); |
| value_list.list_value = new ExtendedMessageClearToSend_template[value_list.n_values]; |
| for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) |
| value_list.list_value[list_count].decode_text(text_buf); |
| break; |
| default: |
| TTCN_error("Text decoder: An unknown/unsupported selection was received in a template of type @IsobusCMMessageTypes.ExtendedMessageClearToSend."); |
| } |
| } |
| |
| void ExtendedMessageClearToSend_template::set_param(Module_Param& param) |
| { |
| param.basic_check(Module_Param::BC_TEMPLATE, "record template"); |
| switch (param.get_type()) { |
| case Module_Param::MP_Omit: |
| *this = OMIT_VALUE; |
| break; |
| case Module_Param::MP_Any: |
| *this = ANY_VALUE; |
| break; |
| case Module_Param::MP_AnyOrNone: |
| *this = ANY_OR_OMIT; |
| break; |
| case Module_Param::MP_List_Template: |
| case Module_Param::MP_ComplementList_Template: { |
| ExtendedMessageClearToSend_template new_temp; |
| new_temp.set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : COMPLEMENTED_LIST, param.get_size()); |
| for (size_t p_i=0; p_i<param.get_size(); p_i++) { |
| new_temp.list_item(p_i).set_param(*param.get_elem(p_i)); |
| } |
| *this = new_temp; |
| break; } |
| case Module_Param::MP_Value_List: |
| if (4<param.get_size()) { |
| param.error("record template of type @IsobusCMMessageTypes.ExtendedMessageClearToSend has 4 fields but list value has %d fields", (int)param.get_size()); |
| } |
| if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) ctrl().set_param(*param.get_elem(0)); |
| if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) NumberOfPacketsToSend().set_param(*param.get_elem(1)); |
| if (param.get_size()>2 && param.get_elem(2)->get_type()!=Module_Param::MP_NotUsed) nextPacketNumberToSend().set_param(*param.get_elem(2)); |
| if (param.get_size()>3 && param.get_elem(3)->get_type()!=Module_Param::MP_NotUsed) pgnOfExtendedPacketedMessage().set_param(*param.get_elem(3)); |
| break; |
| case Module_Param::MP_Assignment_List: { |
| Vector<bool> value_used(param.get_size()); |
| value_used.resize(param.get_size(), FALSE); |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "ctrl")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| ctrl().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "NumberOfPacketsToSend")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| NumberOfPacketsToSend().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "nextPacketNumberToSend")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| nextPacketNumberToSend().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "pgnOfExtendedPacketedMessage")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| pgnOfExtendedPacketedMessage().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| curr_param->error("Non existent field name in type @IsobusCMMessageTypes.ExtendedMessageClearToSend: %s", curr_param->get_id()->get_name()); |
| break; |
| } |
| } break; |
| default: |
| param.type_error("record template", "@IsobusCMMessageTypes.ExtendedMessageClearToSend"); |
| } |
| is_ifpresent = param.get_ifpresent(); |
| } |
| |
| void ExtendedMessageClearToSend_template::check_restriction(template_res t_res, const char* t_name, boolean legacy) const |
| { |
| if (template_selection==UNINITIALIZED_TEMPLATE) return; |
| switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) { |
| case TR_OMIT: |
| if (template_selection==OMIT_VALUE) return; |
| case TR_VALUE: |
| if (template_selection!=SPECIFIC_VALUE || is_ifpresent) break; |
| single_value->field_ctrl.check_restriction(t_res, t_name ? t_name : "@IsobusCMMessageTypes.ExtendedMessageClearToSend"); |
| single_value->field_NumberOfPacketsToSend.check_restriction(t_res, t_name ? t_name : "@IsobusCMMessageTypes.ExtendedMessageClearToSend"); |
| single_value->field_nextPacketNumberToSend.check_restriction(t_res, t_name ? t_name : "@IsobusCMMessageTypes.ExtendedMessageClearToSend"); |
| single_value->field_pgnOfExtendedPacketedMessage.check_restriction(t_res, t_name ? t_name : "@IsobusCMMessageTypes.ExtendedMessageClearToSend"); |
| return; |
| case TR_PRESENT: |
| if (!match_omit(legacy)) return; |
| break; |
| default: |
| return; |
| } |
| TTCN_error("Restriction `%s' on template of type %s violated.", get_res_name(t_res), t_name ? t_name : "@IsobusCMMessageTypes.ExtendedMessageClearToSend"); |
| } |
| |
| boolean ExtendedMessageClearToSend_template::is_present(boolean legacy) const |
| { |
| if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE; |
| return !match_omit(legacy); |
| } |
| |
| boolean ExtendedMessageClearToSend_template::match_omit(boolean legacy) const |
| { |
| if (is_ifpresent) return TRUE; |
| switch (template_selection) { |
| case OMIT_VALUE: |
| case ANY_OR_OMIT: |
| return TRUE; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| if (legacy) { |
| for (unsigned int l_idx=0; l_idx<value_list.n_values; l_idx++) |
| if (value_list.list_value[l_idx].match_omit()) |
| return template_selection==VALUE_LIST; |
| return template_selection==COMPLEMENTED_LIST; |
| } // else fall through |
| default: |
| return FALSE; |
| } |
| return FALSE; |
| } |
| |
| ExtendedMessageDataPacketOffset::ExtendedMessageDataPacketOffset() |
| { |
| } |
| |
| ExtendedMessageDataPacketOffset::ExtendedMessageDataPacketOffset(const OCTETSTRING& par_ctrl, |
| const INTEGER& par_numberOfPacketsToWhichToApplyTheOffset, |
| const INTEGER& par_totalNumberOfPackets, |
| const INTEGER& par_dataPacketOffset, |
| const INTEGER& par_pgnOfExtendedPacketedMessage) |
| : field_ctrl(par_ctrl), |
| field_numberOfPacketsToWhichToApplyTheOffset(par_numberOfPacketsToWhichToApplyTheOffset), |
| field_totalNumberOfPackets(par_totalNumberOfPackets), |
| field_dataPacketOffset(par_dataPacketOffset), |
| field_pgnOfExtendedPacketedMessage(par_pgnOfExtendedPacketedMessage) |
| { |
| } |
| |
| ExtendedMessageDataPacketOffset::ExtendedMessageDataPacketOffset(const ExtendedMessageDataPacketOffset& other_value) |
| { |
| if(!other_value.is_bound()) TTCN_error("Copying an unbound value of type @IsobusCMMessageTypes.ExtendedMessageDataPacketOffset."); |
| if (other_value.ctrl().is_bound()) field_ctrl = other_value.ctrl(); |
| else field_ctrl.clean_up(); |
| if (other_value.numberOfPacketsToWhichToApplyTheOffset().is_bound()) field_numberOfPacketsToWhichToApplyTheOffset = other_value.numberOfPacketsToWhichToApplyTheOffset(); |
| else field_numberOfPacketsToWhichToApplyTheOffset.clean_up(); |
| if (other_value.totalNumberOfPackets().is_bound()) field_totalNumberOfPackets = other_value.totalNumberOfPackets(); |
| else field_totalNumberOfPackets.clean_up(); |
| if (other_value.dataPacketOffset().is_bound()) field_dataPacketOffset = other_value.dataPacketOffset(); |
| else field_dataPacketOffset.clean_up(); |
| if (other_value.pgnOfExtendedPacketedMessage().is_bound()) field_pgnOfExtendedPacketedMessage = other_value.pgnOfExtendedPacketedMessage(); |
| else field_pgnOfExtendedPacketedMessage.clean_up(); |
| } |
| |
| void ExtendedMessageDataPacketOffset::clean_up() |
| { |
| field_ctrl.clean_up(); |
| field_numberOfPacketsToWhichToApplyTheOffset.clean_up(); |
| field_totalNumberOfPackets.clean_up(); |
| field_dataPacketOffset.clean_up(); |
| field_pgnOfExtendedPacketedMessage.clean_up(); |
| } |
| |
| const TTCN_Typedescriptor_t* ExtendedMessageDataPacketOffset::get_descriptor() const { return &ExtendedMessageDataPacketOffset_descr_; } |
| ExtendedMessageDataPacketOffset& ExtendedMessageDataPacketOffset::operator=(const ExtendedMessageDataPacketOffset& other_value) |
| { |
| if (this != &other_value) { |
| if(!other_value.is_bound()) TTCN_error("Assignment of an unbound value of type @IsobusCMMessageTypes.ExtendedMessageDataPacketOffset."); |
| if (other_value.ctrl().is_bound()) field_ctrl = other_value.ctrl(); |
| else field_ctrl.clean_up(); |
| if (other_value.numberOfPacketsToWhichToApplyTheOffset().is_bound()) field_numberOfPacketsToWhichToApplyTheOffset = other_value.numberOfPacketsToWhichToApplyTheOffset(); |
| else field_numberOfPacketsToWhichToApplyTheOffset.clean_up(); |
| if (other_value.totalNumberOfPackets().is_bound()) field_totalNumberOfPackets = other_value.totalNumberOfPackets(); |
| else field_totalNumberOfPackets.clean_up(); |
| if (other_value.dataPacketOffset().is_bound()) field_dataPacketOffset = other_value.dataPacketOffset(); |
| else field_dataPacketOffset.clean_up(); |
| if (other_value.pgnOfExtendedPacketedMessage().is_bound()) field_pgnOfExtendedPacketedMessage = other_value.pgnOfExtendedPacketedMessage(); |
| else field_pgnOfExtendedPacketedMessage.clean_up(); |
| } |
| return *this; |
| } |
| |
| boolean ExtendedMessageDataPacketOffset::operator==(const ExtendedMessageDataPacketOffset& other_value) const |
| { |
| return field_ctrl==other_value.field_ctrl |
| && field_numberOfPacketsToWhichToApplyTheOffset==other_value.field_numberOfPacketsToWhichToApplyTheOffset |
| && field_totalNumberOfPackets==other_value.field_totalNumberOfPackets |
| && field_dataPacketOffset==other_value.field_dataPacketOffset |
| && field_pgnOfExtendedPacketedMessage==other_value.field_pgnOfExtendedPacketedMessage; |
| } |
| |
| boolean ExtendedMessageDataPacketOffset::is_bound() const |
| { |
| return (field_ctrl.is_bound()) |
| || (field_numberOfPacketsToWhichToApplyTheOffset.is_bound()) |
| || (field_totalNumberOfPackets.is_bound()) |
| || (field_dataPacketOffset.is_bound()) |
| || (field_pgnOfExtendedPacketedMessage.is_bound()); |
| } |
| boolean ExtendedMessageDataPacketOffset::is_value() const |
| { |
| return field_ctrl.is_value() |
| && field_numberOfPacketsToWhichToApplyTheOffset.is_value() |
| && field_totalNumberOfPackets.is_value() |
| && field_dataPacketOffset.is_value() |
| && field_pgnOfExtendedPacketedMessage.is_value(); |
| } |
| void ExtendedMessageDataPacketOffset::log() const |
| { |
| if (!is_bound()) { |
| TTCN_Logger::log_event_unbound(); |
| return; |
| } |
| TTCN_Logger::log_event_str("{ ctrl := "); |
| field_ctrl.log(); |
| TTCN_Logger::log_event_str(", numberOfPacketsToWhichToApplyTheOffset := "); |
| field_numberOfPacketsToWhichToApplyTheOffset.log(); |
| TTCN_Logger::log_event_str(", totalNumberOfPackets := "); |
| field_totalNumberOfPackets.log(); |
| TTCN_Logger::log_event_str(", dataPacketOffset := "); |
| field_dataPacketOffset.log(); |
| TTCN_Logger::log_event_str(", pgnOfExtendedPacketedMessage := "); |
| field_pgnOfExtendedPacketedMessage.log(); |
| TTCN_Logger::log_event_str(" }"); |
| } |
| |
| void ExtendedMessageDataPacketOffset::set_param(Module_Param& param) |
| { |
| param.basic_check(Module_Param::BC_VALUE, "record value"); |
| switch (param.get_type()) { |
| case Module_Param::MP_Value_List: |
| if (5<param.get_size()) { |
| param.error("record value of type @IsobusCMMessageTypes.ExtendedMessageDataPacketOffset has 5 fields but list value has %d fields", (int)param.get_size()); |
| } |
| if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) ctrl().set_param(*param.get_elem(0)); |
| if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) numberOfPacketsToWhichToApplyTheOffset().set_param(*param.get_elem(1)); |
| if (param.get_size()>2 && param.get_elem(2)->get_type()!=Module_Param::MP_NotUsed) totalNumberOfPackets().set_param(*param.get_elem(2)); |
| if (param.get_size()>3 && param.get_elem(3)->get_type()!=Module_Param::MP_NotUsed) dataPacketOffset().set_param(*param.get_elem(3)); |
| if (param.get_size()>4 && param.get_elem(4)->get_type()!=Module_Param::MP_NotUsed) pgnOfExtendedPacketedMessage().set_param(*param.get_elem(4)); |
| break; |
| case Module_Param::MP_Assignment_List: { |
| Vector<bool> value_used(param.get_size()); |
| value_used.resize(param.get_size(), FALSE); |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "ctrl")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| ctrl().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "numberOfPacketsToWhichToApplyTheOffset")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| numberOfPacketsToWhichToApplyTheOffset().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "totalNumberOfPackets")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| totalNumberOfPackets().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "dataPacketOffset")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| dataPacketOffset().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "pgnOfExtendedPacketedMessage")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| pgnOfExtendedPacketedMessage().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| curr_param->error("Non existent field name in type @IsobusCMMessageTypes.ExtendedMessageDataPacketOffset: %s", curr_param->get_id()->get_name()); |
| break; |
| } |
| } break; |
| default: |
| param.type_error("record value", "@IsobusCMMessageTypes.ExtendedMessageDataPacketOffset"); |
| } |
| } |
| |
| void ExtendedMessageDataPacketOffset::set_implicit_omit() |
| { |
| if (ctrl().is_bound()) ctrl().set_implicit_omit(); |
| if (numberOfPacketsToWhichToApplyTheOffset().is_bound()) numberOfPacketsToWhichToApplyTheOffset().set_implicit_omit(); |
| if (totalNumberOfPackets().is_bound()) totalNumberOfPackets().set_implicit_omit(); |
| if (dataPacketOffset().is_bound()) dataPacketOffset().set_implicit_omit(); |
| if (pgnOfExtendedPacketedMessage().is_bound()) pgnOfExtendedPacketedMessage().set_implicit_omit(); |
| } |
| |
| void ExtendedMessageDataPacketOffset::encode_text(Text_Buf& text_buf) const |
| { |
| field_ctrl.encode_text(text_buf); |
| field_numberOfPacketsToWhichToApplyTheOffset.encode_text(text_buf); |
| field_totalNumberOfPackets.encode_text(text_buf); |
| field_dataPacketOffset.encode_text(text_buf); |
| field_pgnOfExtendedPacketedMessage.encode_text(text_buf); |
| } |
| |
| void ExtendedMessageDataPacketOffset::decode_text(Text_Buf& text_buf) |
| { |
| field_ctrl.decode_text(text_buf); |
| field_numberOfPacketsToWhichToApplyTheOffset.decode_text(text_buf); |
| field_totalNumberOfPackets.decode_text(text_buf); |
| field_dataPacketOffset.decode_text(text_buf); |
| field_pgnOfExtendedPacketedMessage.decode_text(text_buf); |
| } |
| |
| void ExtendedMessageDataPacketOffset::encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, TTCN_EncDec::coding_t p_coding, ...) const |
| { |
| va_list pvar; |
| va_start(pvar, p_coding); |
| switch(p_coding) { |
| case TTCN_EncDec::CT_BER: { |
| TTCN_EncDec_ErrorContext ec("While BER-encoding type '%s': ", p_td.name); |
| unsigned BER_coding=va_arg(pvar, unsigned); |
| BER_encode_chk_coding(BER_coding); |
| ASN_BER_TLV_t *tlv=BER_encode_TLV(p_td, BER_coding); |
| tlv->put_in_buffer(p_buf); |
| ASN_BER_TLV_t::destruct(tlv); |
| break;} |
| case TTCN_EncDec::CT_RAW: { |
| TTCN_EncDec_ErrorContext ec("While RAW-encoding type '%s': ", p_td.name); |
| if(!p_td.raw) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No RAW descriptor available for type '%s'.", p_td.name); |
| RAW_enc_tr_pos rp; |
| rp.level=0; |
| rp.pos=NULL; |
| RAW_enc_tree root(FALSE, NULL, &rp, 1, p_td.raw); |
| RAW_encode(p_td, root); |
| root.put_to_buf(p_buf); |
| break;} |
| case TTCN_EncDec::CT_TEXT: { |
| TTCN_EncDec_ErrorContext ec("While TEXT-encoding type '%s': ", p_td.name); |
| if(!p_td.text) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No TEXT descriptor available for type '%s'.", p_td.name); |
| TEXT_encode(p_td,p_buf); |
| break;} |
| case TTCN_EncDec::CT_XER: { |
| TTCN_EncDec_ErrorContext ec("While XER-encoding type '%s': ", p_td.name); |
| unsigned XER_coding=va_arg(pvar, unsigned); |
| XER_encode_chk_coding(XER_coding, p_td); |
| XER_encode(*(p_td.xer),p_buf, XER_coding, 0, 0, 0); |
| p_buf.put_c('\n'); |
| break;} |
| case TTCN_EncDec::CT_JSON: { |
| TTCN_EncDec_ErrorContext ec("While JSON-encoding type '%s': ", p_td.name); |
| if(!p_td.json) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No JSON descriptor available for type '%s'.", p_td.name); |
| JSON_Tokenizer tok(va_arg(pvar, int) != 0); |
| JSON_encode(p_td, tok); |
| p_buf.put_s(tok.get_buffer_length(), (const unsigned char*)tok.get_buffer()); |
| break;} |
| case TTCN_EncDec::CT_OER: { |
| TTCN_EncDec_ErrorContext ec("While OER-encoding type '%s': ", p_td.name); |
| if(!p_td.oer) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No OER descriptor available for type '%s'.", p_td.name); |
| OER_encode(p_td, p_buf); |
| break;} |
| default: |
| TTCN_error("Unknown coding method requested to encode type '%s'", p_td.name); |
| } |
| va_end(pvar); |
| } |
| |
| void ExtendedMessageDataPacketOffset::decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, TTCN_EncDec::coding_t p_coding, ...) |
| { |
| va_list pvar; |
| va_start(pvar, p_coding); |
| switch(p_coding) { |
| case TTCN_EncDec::CT_BER: { |
| TTCN_EncDec_ErrorContext ec("While BER-decoding type '%s': ", p_td.name); |
| unsigned L_form=va_arg(pvar, unsigned); |
| ASN_BER_TLV_t tlv; |
| BER_decode_str2TLV(p_buf, tlv, L_form); |
| BER_decode_TLV(p_td, tlv, L_form); |
| if(tlv.isComplete) p_buf.increase_pos(tlv.get_len()); |
| break;} |
| case TTCN_EncDec::CT_RAW: { |
| TTCN_EncDec_ErrorContext ec("While RAW-decoding type '%s': ", p_td.name); |
| if(!p_td.raw) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No RAW descriptor available for type '%s'.", p_td.name); |
| raw_order_t r_order; |
| switch(p_td.raw->top_bit_order) { |
| case TOP_BIT_LEFT: |
| r_order=ORDER_LSB; |
| break; |
| case TOP_BIT_RIGHT: |
| default: |
| r_order=ORDER_MSB; |
| } |
| int rawr = RAW_decode(p_td, p_buf, p_buf.get_len()*8, r_order); |
| if(rawr<0) switch (-rawr) { |
| case TTCN_EncDec::ET_INCOMPL_MSG: |
| case TTCN_EncDec::ET_LEN_ERR: |
| ec.error((TTCN_EncDec::error_type_t)-rawr, "Can not decode type '%s', because incomplete message was received", p_td.name); |
| break; |
| case 1: |
| default: |
| ec.error(TTCN_EncDec::ET_INVAL_MSG, "Can not decode type '%s', because invalid message was received", p_td.name); |
| break; |
| } |
| break;} |
| case TTCN_EncDec::CT_TEXT: { |
| Limit_Token_List limit; |
| TTCN_EncDec_ErrorContext ec("While TEXT-decoding type '%s': ", p_td.name); |
| if(!p_td.text) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No TEXT descriptor available for type '%s'.", p_td.name); |
| const unsigned char *b_data=p_buf.get_data(); |
| if(b_data[p_buf.get_len()-1]!='\0'){ |
| p_buf.set_pos(p_buf.get_len()); |
| p_buf.put_zero(8,ORDER_LSB); |
| p_buf.rewind(); |
| } |
| if(TEXT_decode(p_td,p_buf,limit)<0) |
| ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name); |
| break;} |
| case TTCN_EncDec::CT_XER: { |
| TTCN_EncDec_ErrorContext ec("While XER-decoding type '%s': ", p_td.name); |
| unsigned XER_coding=va_arg(pvar, unsigned); |
| XER_encode_chk_coding(XER_coding, p_td); |
| XmlReaderWrap reader(p_buf); |
| for (int rd_ok=reader.Read(); rd_ok==1; rd_ok=reader.Read()) { |
| if (reader.NodeType() == XML_READER_TYPE_ELEMENT) break; |
| } |
| XER_decode(*(p_td.xer), reader, XER_coding | XER_TOPLEVEL, XER_NONE, 0); |
| size_t bytes = reader.ByteConsumed(); |
| p_buf.set_pos(bytes); |
| break;} |
| case TTCN_EncDec::CT_JSON: { |
| TTCN_EncDec_ErrorContext ec("While JSON-decoding type '%s': ", p_td.name); |
| if(!p_td.json) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No JSON descriptor available for type '%s'.", p_td.name); |
| JSON_Tokenizer tok((const char*)p_buf.get_data(), p_buf.get_len()); |
| if(JSON_decode(p_td, tok, FALSE)<0) |
| ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name); |
| p_buf.set_pos(tok.get_buf_pos()); |
| break;} |
| case TTCN_EncDec::CT_OER: { |
| TTCN_EncDec_ErrorContext ec("While OER-decoding type '%s': ", p_td.name); |
| if(!p_td.oer) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No OER descriptor available for type '%s'.", p_td.name); |
| OER_struct p_oer; |
| OER_decode(p_td, p_buf, p_oer); |
| break;} |
| default: |
| TTCN_error("Unknown coding method requested to decode type '%s'", p_td.name); |
| } |
| va_end(pvar); |
| } |
| |
| int ExtendedMessageDataPacketOffset::RAW_decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int limit, raw_order_t top_bit_ord, boolean no_err, int, boolean, const RAW_Force_Omit* force_omit) |
| { (void)no_err; |
| int prepaddlength=p_buf.increase_pos_padd(p_td.raw->prepadding); |
| limit-=prepaddlength; |
| size_t last_decoded_pos = p_buf.get_pos_bit(); |
| int decoded_length = 0; |
| int decoded_field_length = 0; |
| raw_order_t local_top_order; |
| if(p_td.raw->top_bit_order==TOP_BIT_INHERITED)local_top_order=top_bit_ord; |
| else if(p_td.raw->top_bit_order==TOP_BIT_RIGHT)local_top_order=ORDER_MSB; |
| else local_top_order=ORDER_LSB; |
| RAW_Force_Omit field_0_force_omit(0, force_omit, ExtendedMessageDataPacketOffset_ctrl_descr_.raw->forceomit); |
| decoded_field_length = field_ctrl.RAW_decode(ExtendedMessageDataPacketOffset_ctrl_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_0_force_omit); |
| if (decoded_field_length < 0) return decoded_field_length; |
| decoded_length+=decoded_field_length; |
| limit-=decoded_field_length; |
| last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit()); |
| RAW_Force_Omit field_1_force_omit(1, force_omit, ETP__NoPacketForOffset_descr_.raw->forceomit); |
| decoded_field_length = field_numberOfPacketsToWhichToApplyTheOffset.RAW_decode(ETP__NoPacketForOffset_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_1_force_omit); |
| if (decoded_field_length < 0) return decoded_field_length; |
| decoded_length+=decoded_field_length; |
| limit-=decoded_field_length; |
| last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit()); |
| RAW_Force_Omit field_2_force_omit(2, force_omit, NUMBER__OF__PACKETS_descr_.raw->forceomit); |
| decoded_field_length = field_totalNumberOfPackets.RAW_decode(NUMBER__OF__PACKETS_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_2_force_omit); |
| if (decoded_field_length < 0) return decoded_field_length; |
| decoded_length+=decoded_field_length; |
| limit-=decoded_field_length; |
| last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit()); |
| RAW_Force_Omit field_3_force_omit(3, force_omit, ETP__NextPacketNumberToSend_descr_.raw->forceomit); |
| decoded_field_length = field_dataPacketOffset.RAW_decode(ETP__NextPacketNumberToSend_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_3_force_omit); |
| if (decoded_field_length < 0) return decoded_field_length; |
| decoded_length+=decoded_field_length; |
| limit-=decoded_field_length; |
| last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit()); |
| RAW_Force_Omit field_4_force_omit(4, force_omit, IsobusMessageTypes::PGN_descr_.raw->forceomit); |
| decoded_field_length = field_pgnOfExtendedPacketedMessage.RAW_decode(IsobusMessageTypes::PGN_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_4_force_omit); |
| if (decoded_field_length < 0) return decoded_field_length; |
| decoded_length+=decoded_field_length; |
| limit-=decoded_field_length; |
| last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit()); |
| p_buf.set_pos_bit(last_decoded_pos); |
| return decoded_length+prepaddlength+p_buf.increase_pos_padd(p_td.raw->padding); |
| } |
| |
| int ExtendedMessageDataPacketOffset::RAW_encode(const TTCN_Typedescriptor_t&, RAW_enc_tree& myleaf) const { |
| if (!is_bound()) TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_UNBOUND, "Encoding an unbound value."); |
| int encoded_length = 0; |
| myleaf.isleaf = FALSE; |
| myleaf.body.node.num_of_nodes = 5; |
| myleaf.body.node.nodes = init_nodes_of_enc_tree(5); |
| myleaf.body.node.nodes[0] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 0, ExtendedMessageDataPacketOffset_ctrl_descr_.raw); |
| myleaf.body.node.nodes[1] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 1, ETP__NoPacketForOffset_descr_.raw); |
| myleaf.body.node.nodes[2] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 2, NUMBER__OF__PACKETS_descr_.raw); |
| myleaf.body.node.nodes[3] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 3, ETP__NextPacketNumberToSend_descr_.raw); |
| myleaf.body.node.nodes[4] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 4, IsobusMessageTypes::PGN_descr_.raw); |
| encoded_length += field_ctrl.RAW_encode(ExtendedMessageDataPacketOffset_ctrl_descr_, *myleaf.body.node.nodes[0]); |
| encoded_length += field_numberOfPacketsToWhichToApplyTheOffset.RAW_encode(ETP__NoPacketForOffset_descr_, *myleaf.body.node.nodes[1]); |
| encoded_length += field_totalNumberOfPackets.RAW_encode(NUMBER__OF__PACKETS_descr_, *myleaf.body.node.nodes[2]); |
| encoded_length += field_dataPacketOffset.RAW_encode(ETP__NextPacketNumberToSend_descr_, *myleaf.body.node.nodes[3]); |
| encoded_length += field_pgnOfExtendedPacketedMessage.RAW_encode(IsobusMessageTypes::PGN_descr_, *myleaf.body.node.nodes[4]); |
| return myleaf.length = encoded_length; |
| } |
| |
| struct ExtendedMessageDataPacketOffset_template::single_value_struct { |
| OCTETSTRING_template field_ctrl; |
| INTEGER_template field_numberOfPacketsToWhichToApplyTheOffset; |
| INTEGER_template field_totalNumberOfPackets; |
| INTEGER_template field_dataPacketOffset; |
| INTEGER_template field_pgnOfExtendedPacketedMessage; |
| }; |
| |
| void ExtendedMessageDataPacketOffset_template::set_specific() |
| { |
| if (template_selection != SPECIFIC_VALUE) { |
| template_sel old_selection = template_selection; |
| clean_up(); |
| single_value = new single_value_struct; |
| set_selection(SPECIFIC_VALUE); |
| if (old_selection == ANY_VALUE || old_selection == ANY_OR_OMIT) { |
| single_value->field_ctrl = ANY_VALUE; |
| single_value->field_numberOfPacketsToWhichToApplyTheOffset = ANY_VALUE; |
| single_value->field_totalNumberOfPackets = ANY_VALUE; |
| single_value->field_dataPacketOffset = ANY_VALUE; |
| single_value->field_pgnOfExtendedPacketedMessage = ANY_VALUE; |
| } |
| } |
| } |
| |
| void ExtendedMessageDataPacketOffset_template::copy_value(const ExtendedMessageDataPacketOffset& other_value) |
| { |
| single_value = new single_value_struct; |
| if (other_value.ctrl().is_bound()) { |
| single_value->field_ctrl = other_value.ctrl(); |
| } else { |
| single_value->field_ctrl.clean_up(); |
| } |
| if (other_value.numberOfPacketsToWhichToApplyTheOffset().is_bound()) { |
| single_value->field_numberOfPacketsToWhichToApplyTheOffset = other_value.numberOfPacketsToWhichToApplyTheOffset(); |
| } else { |
| single_value->field_numberOfPacketsToWhichToApplyTheOffset.clean_up(); |
| } |
| if (other_value.totalNumberOfPackets().is_bound()) { |
| single_value->field_totalNumberOfPackets = other_value.totalNumberOfPackets(); |
| } else { |
| single_value->field_totalNumberOfPackets.clean_up(); |
| } |
| if (other_value.dataPacketOffset().is_bound()) { |
| single_value->field_dataPacketOffset = other_value.dataPacketOffset(); |
| } else { |
| single_value->field_dataPacketOffset.clean_up(); |
| } |
| if (other_value.pgnOfExtendedPacketedMessage().is_bound()) { |
| single_value->field_pgnOfExtendedPacketedMessage = other_value.pgnOfExtendedPacketedMessage(); |
| } else { |
| single_value->field_pgnOfExtendedPacketedMessage.clean_up(); |
| } |
| set_selection(SPECIFIC_VALUE); |
| } |
| |
| void ExtendedMessageDataPacketOffset_template::copy_template(const ExtendedMessageDataPacketOffset_template& other_value) |
| { |
| switch (other_value.template_selection) { |
| case SPECIFIC_VALUE: |
| single_value = new single_value_struct; |
| if (UNINITIALIZED_TEMPLATE != other_value.ctrl().get_selection()) { |
| single_value->field_ctrl = other_value.ctrl(); |
| } else { |
| single_value->field_ctrl.clean_up(); |
| } |
| if (UNINITIALIZED_TEMPLATE != other_value.numberOfPacketsToWhichToApplyTheOffset().get_selection()) { |
| single_value->field_numberOfPacketsToWhichToApplyTheOffset = other_value.numberOfPacketsToWhichToApplyTheOffset(); |
| } else { |
| single_value->field_numberOfPacketsToWhichToApplyTheOffset.clean_up(); |
| } |
| if (UNINITIALIZED_TEMPLATE != other_value.totalNumberOfPackets().get_selection()) { |
| single_value->field_totalNumberOfPackets = other_value.totalNumberOfPackets(); |
| } else { |
| single_value->field_totalNumberOfPackets.clean_up(); |
| } |
| if (UNINITIALIZED_TEMPLATE != other_value.dataPacketOffset().get_selection()) { |
| single_value->field_dataPacketOffset = other_value.dataPacketOffset(); |
| } else { |
| single_value->field_dataPacketOffset.clean_up(); |
| } |
| if (UNINITIALIZED_TEMPLATE != other_value.pgnOfExtendedPacketedMessage().get_selection()) { |
| single_value->field_pgnOfExtendedPacketedMessage = other_value.pgnOfExtendedPacketedMessage(); |
| } else { |
| single_value->field_pgnOfExtendedPacketedMessage.clean_up(); |
| } |
| case OMIT_VALUE: |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| break; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| value_list.n_values = other_value.value_list.n_values; |
| value_list.list_value = new ExtendedMessageDataPacketOffset_template[value_list.n_values]; |
| for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) |
| value_list.list_value[list_count].copy_template(other_value.value_list.list_value[list_count]); |
| break; |
| default: |
| TTCN_error("Copying an uninitialized/unsupported template of type @IsobusCMMessageTypes.ExtendedMessageDataPacketOffset."); |
| break; |
| } |
| set_selection(other_value); |
| } |
| |
| ExtendedMessageDataPacketOffset_template::ExtendedMessageDataPacketOffset_template() |
| { |
| } |
| |
| ExtendedMessageDataPacketOffset_template::ExtendedMessageDataPacketOffset_template(template_sel other_value) |
| : Base_Template(other_value) |
| { |
| check_single_selection(other_value); |
| } |
| |
| ExtendedMessageDataPacketOffset_template::ExtendedMessageDataPacketOffset_template(const ExtendedMessageDataPacketOffset& other_value) |
| { |
| copy_value(other_value); |
| } |
| |
| ExtendedMessageDataPacketOffset_template::ExtendedMessageDataPacketOffset_template(const OPTIONAL<ExtendedMessageDataPacketOffset>& other_value) |
| { |
| switch (other_value.get_selection()) { |
| case OPTIONAL_PRESENT: |
| copy_value((const ExtendedMessageDataPacketOffset&)other_value); |
| break; |
| case OPTIONAL_OMIT: |
| set_selection(OMIT_VALUE); |
| break; |
| default: |
| TTCN_error("Creating a template of type @IsobusCMMessageTypes.ExtendedMessageDataPacketOffset from an unbound optional field."); |
| } |
| } |
| |
| ExtendedMessageDataPacketOffset_template::ExtendedMessageDataPacketOffset_template(const ExtendedMessageDataPacketOffset_template& other_value) |
| : Base_Template() |
| { |
| copy_template(other_value); |
| } |
| |
| ExtendedMessageDataPacketOffset_template::~ExtendedMessageDataPacketOffset_template() |
| { |
| clean_up(); |
| } |
| |
| ExtendedMessageDataPacketOffset_template& ExtendedMessageDataPacketOffset_template::operator=(template_sel other_value) |
| { |
| check_single_selection(other_value); |
| clean_up(); |
| set_selection(other_value); |
| return *this; |
| } |
| |
| ExtendedMessageDataPacketOffset_template& ExtendedMessageDataPacketOffset_template::operator=(const ExtendedMessageDataPacketOffset& other_value) |
| { |
| clean_up(); |
| copy_value(other_value); |
| return *this; |
| } |
| |
| ExtendedMessageDataPacketOffset_template& ExtendedMessageDataPacketOffset_template::operator=(const OPTIONAL<ExtendedMessageDataPacketOffset>& other_value) |
| { |
| clean_up(); |
| switch (other_value.get_selection()) { |
| case OPTIONAL_PRESENT: |
| copy_value((const ExtendedMessageDataPacketOffset&)other_value); |
| break; |
| case OPTIONAL_OMIT: |
| set_selection(OMIT_VALUE); |
| break; |
| default: |
| TTCN_error("Assignment of an unbound optional field to a template of type @IsobusCMMessageTypes.ExtendedMessageDataPacketOffset."); |
| } |
| return *this; |
| } |
| |
| ExtendedMessageDataPacketOffset_template& ExtendedMessageDataPacketOffset_template::operator=(const ExtendedMessageDataPacketOffset_template& other_value) |
| { |
| if (&other_value != this) { |
| clean_up(); |
| copy_template(other_value); |
| } |
| return *this; |
| } |
| |
| boolean ExtendedMessageDataPacketOffset_template::match(const ExtendedMessageDataPacketOffset& other_value, boolean legacy) const |
| { |
| if (!other_value.is_bound()) return FALSE; |
| switch (template_selection) { |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| return TRUE; |
| case OMIT_VALUE: |
| return FALSE; |
| case SPECIFIC_VALUE: |
| if(!other_value.ctrl().is_bound()) return FALSE; |
| if(!single_value->field_ctrl.match(other_value.ctrl(), legacy))return FALSE; |
| if(!other_value.numberOfPacketsToWhichToApplyTheOffset().is_bound()) return FALSE; |
| if(!single_value->field_numberOfPacketsToWhichToApplyTheOffset.match(other_value.numberOfPacketsToWhichToApplyTheOffset(), legacy))return FALSE; |
| if(!other_value.totalNumberOfPackets().is_bound()) return FALSE; |
| if(!single_value->field_totalNumberOfPackets.match(other_value.totalNumberOfPackets(), legacy))return FALSE; |
| if(!other_value.dataPacketOffset().is_bound()) return FALSE; |
| if(!single_value->field_dataPacketOffset.match(other_value.dataPacketOffset(), legacy))return FALSE; |
| if(!other_value.pgnOfExtendedPacketedMessage().is_bound()) return FALSE; |
| if(!single_value->field_pgnOfExtendedPacketedMessage.match(other_value.pgnOfExtendedPacketedMessage(), legacy))return FALSE; |
| return TRUE; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) |
| if (value_list.list_value[list_count].match(other_value, legacy)) return template_selection == VALUE_LIST; |
| return template_selection == COMPLEMENTED_LIST; |
| default: |
| TTCN_error("Matching an uninitialized/unsupported template of type @IsobusCMMessageTypes.ExtendedMessageDataPacketOffset."); |
| } |
| return FALSE; |
| } |
| |
| boolean ExtendedMessageDataPacketOffset_template::is_bound() const |
| { |
| if (template_selection == UNINITIALIZED_TEMPLATE && !is_ifpresent) return FALSE; |
| if (template_selection != SPECIFIC_VALUE) return TRUE; |
| return single_value->field_ctrl.is_bound() |
| |
| ||single_value->field_numberOfPacketsToWhichToApplyTheOffset.is_bound() |
| |
| ||single_value->field_totalNumberOfPackets.is_bound() |
| |
| ||single_value->field_dataPacketOffset.is_bound() |
| |
| ||single_value->field_pgnOfExtendedPacketedMessage.is_bound() |
| ; |
| } |
| |
| boolean ExtendedMessageDataPacketOffset_template::is_value() const |
| { |
| if (template_selection != SPECIFIC_VALUE || is_ifpresent) return FALSE; |
| return single_value->field_ctrl.is_value() |
| &&single_value->field_numberOfPacketsToWhichToApplyTheOffset.is_value() |
| &&single_value->field_totalNumberOfPackets.is_value() |
| &&single_value->field_dataPacketOffset.is_value() |
| &&single_value->field_pgnOfExtendedPacketedMessage.is_value(); |
| } |
| |
| void ExtendedMessageDataPacketOffset_template::clean_up() |
| { |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| delete single_value; |
| break; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| delete [] value_list.list_value; |
| default: |
| break; |
| } |
| template_selection = UNINITIALIZED_TEMPLATE; |
| } |
| |
| ExtendedMessageDataPacketOffset ExtendedMessageDataPacketOffset_template::valueof() const |
| { |
| if (template_selection != SPECIFIC_VALUE || is_ifpresent) |
| TTCN_error("Performing a valueof or send operation on a non-specific template of type @IsobusCMMessageTypes.ExtendedMessageDataPacketOffset."); |
| ExtendedMessageDataPacketOffset ret_val; |
| if (single_value->field_ctrl.is_bound()) { |
| ret_val.ctrl() = single_value->field_ctrl.valueof(); |
| } |
| if (single_value->field_numberOfPacketsToWhichToApplyTheOffset.is_bound()) { |
| ret_val.numberOfPacketsToWhichToApplyTheOffset() = single_value->field_numberOfPacketsToWhichToApplyTheOffset.valueof(); |
| } |
| if (single_value->field_totalNumberOfPackets.is_bound()) { |
| ret_val.totalNumberOfPackets() = single_value->field_totalNumberOfPackets.valueof(); |
| } |
| if (single_value->field_dataPacketOffset.is_bound()) { |
| ret_val.dataPacketOffset() = single_value->field_dataPacketOffset.valueof(); |
| } |
| if (single_value->field_pgnOfExtendedPacketedMessage.is_bound()) { |
| ret_val.pgnOfExtendedPacketedMessage() = single_value->field_pgnOfExtendedPacketedMessage.valueof(); |
| } |
| return ret_val; |
| } |
| |
| void ExtendedMessageDataPacketOffset_template::set_type(template_sel template_type, unsigned int list_length) |
| { |
| if (template_type != VALUE_LIST && template_type != COMPLEMENTED_LIST) |
| TTCN_error("Setting an invalid list for a template of type @IsobusCMMessageTypes.ExtendedMessageDataPacketOffset."); |
| clean_up(); |
| set_selection(template_type); |
| value_list.n_values = list_length; |
| value_list.list_value = new ExtendedMessageDataPacketOffset_template[list_length]; |
| } |
| |
| ExtendedMessageDataPacketOffset_template& ExtendedMessageDataPacketOffset_template::list_item(unsigned int list_index) const |
| { |
| if (template_selection != VALUE_LIST && template_selection != COMPLEMENTED_LIST) |
| TTCN_error("Accessing a list element of a non-list template of type @IsobusCMMessageTypes.ExtendedMessageDataPacketOffset."); |
| if (list_index >= value_list.n_values) |
| TTCN_error("Index overflow in a value list template of type @IsobusCMMessageTypes.ExtendedMessageDataPacketOffset."); |
| return value_list.list_value[list_index]; |
| } |
| |
| OCTETSTRING_template& ExtendedMessageDataPacketOffset_template::ctrl() |
| { |
| set_specific(); |
| return single_value->field_ctrl; |
| } |
| |
| const OCTETSTRING_template& ExtendedMessageDataPacketOffset_template::ctrl() const |
| { |
| if (template_selection != SPECIFIC_VALUE) |
| TTCN_error("Accessing field ctrl of a non-specific template of type @IsobusCMMessageTypes.ExtendedMessageDataPacketOffset."); |
| return single_value->field_ctrl; |
| } |
| |
| INTEGER_template& ExtendedMessageDataPacketOffset_template::numberOfPacketsToWhichToApplyTheOffset() |
| { |
| set_specific(); |
| return single_value->field_numberOfPacketsToWhichToApplyTheOffset; |
| } |
| |
| const INTEGER_template& ExtendedMessageDataPacketOffset_template::numberOfPacketsToWhichToApplyTheOffset() const |
| { |
| if (template_selection != SPECIFIC_VALUE) |
| TTCN_error("Accessing field numberOfPacketsToWhichToApplyTheOffset of a non-specific template of type @IsobusCMMessageTypes.ExtendedMessageDataPacketOffset."); |
| return single_value->field_numberOfPacketsToWhichToApplyTheOffset; |
| } |
| |
| INTEGER_template& ExtendedMessageDataPacketOffset_template::totalNumberOfPackets() |
| { |
| set_specific(); |
| return single_value->field_totalNumberOfPackets; |
| } |
| |
| const INTEGER_template& ExtendedMessageDataPacketOffset_template::totalNumberOfPackets() const |
| { |
| if (template_selection != SPECIFIC_VALUE) |
| TTCN_error("Accessing field totalNumberOfPackets of a non-specific template of type @IsobusCMMessageTypes.ExtendedMessageDataPacketOffset."); |
| return single_value->field_totalNumberOfPackets; |
| } |
| |
| INTEGER_template& ExtendedMessageDataPacketOffset_template::dataPacketOffset() |
| { |
| set_specific(); |
| return single_value->field_dataPacketOffset; |
| } |
| |
| const INTEGER_template& ExtendedMessageDataPacketOffset_template::dataPacketOffset() const |
| { |
| if (template_selection != SPECIFIC_VALUE) |
| TTCN_error("Accessing field dataPacketOffset of a non-specific template of type @IsobusCMMessageTypes.ExtendedMessageDataPacketOffset."); |
| return single_value->field_dataPacketOffset; |
| } |
| |
| INTEGER_template& ExtendedMessageDataPacketOffset_template::pgnOfExtendedPacketedMessage() |
| { |
| set_specific(); |
| return single_value->field_pgnOfExtendedPacketedMessage; |
| } |
| |
| const INTEGER_template& ExtendedMessageDataPacketOffset_template::pgnOfExtendedPacketedMessage() const |
| { |
| if (template_selection != SPECIFIC_VALUE) |
| TTCN_error("Accessing field pgnOfExtendedPacketedMessage of a non-specific template of type @IsobusCMMessageTypes.ExtendedMessageDataPacketOffset."); |
| return single_value->field_pgnOfExtendedPacketedMessage; |
| } |
| |
| int ExtendedMessageDataPacketOffset_template::size_of() const |
| { |
| if (is_ifpresent) TTCN_error("Performing sizeof() operation on a template of type @IsobusCMMessageTypes.ExtendedMessageDataPacketOffset which has an ifpresent attribute."); |
| switch (template_selection) |
| { |
| case SPECIFIC_VALUE: |
| return 5; |
| case VALUE_LIST: |
| { |
| if (value_list.n_values<1) |
| TTCN_error("Internal error: Performing sizeof() operation on a template of type @IsobusCMMessageTypes.ExtendedMessageDataPacketOffset containing an empty list."); |
| int item_size = value_list.list_value[0].size_of(); |
| for (unsigned int l_idx = 1; l_idx < value_list.n_values; l_idx++) |
| { |
| if (value_list.list_value[l_idx].size_of()!=item_size) |
| TTCN_error("Performing sizeof() operation on a template of type @IsobusCMMessageTypes.ExtendedMessageDataPacketOffset containing a value list with different sizes."); |
| } |
| return item_size; |
| } |
| case OMIT_VALUE: |
| TTCN_error("Performing sizeof() operation on a template of type @IsobusCMMessageTypes.ExtendedMessageDataPacketOffset containing omit value."); |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| TTCN_error("Performing sizeof() operation on a template of type @IsobusCMMessageTypes.ExtendedMessageDataPacketOffset containing */? value."); |
| case COMPLEMENTED_LIST: |
| TTCN_error("Performing sizeof() operation on a template of type @IsobusCMMessageTypes.ExtendedMessageDataPacketOffset containing complemented list."); |
| default: |
| TTCN_error("Performing sizeof() operation on an uninitialized/unsupported template of type @IsobusCMMessageTypes.ExtendedMessageDataPacketOffset."); |
| } |
| return 0; |
| } |
| |
| void ExtendedMessageDataPacketOffset_template::log() const |
| { |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| TTCN_Logger::log_event_str("{ ctrl := "); |
| single_value->field_ctrl.log(); |
| TTCN_Logger::log_event_str(", numberOfPacketsToWhichToApplyTheOffset := "); |
| single_value->field_numberOfPacketsToWhichToApplyTheOffset.log(); |
| TTCN_Logger::log_event_str(", totalNumberOfPackets := "); |
| single_value->field_totalNumberOfPackets.log(); |
| TTCN_Logger::log_event_str(", dataPacketOffset := "); |
| single_value->field_dataPacketOffset.log(); |
| TTCN_Logger::log_event_str(", pgnOfExtendedPacketedMessage := "); |
| single_value->field_pgnOfExtendedPacketedMessage.log(); |
| TTCN_Logger::log_event_str(" }"); |
| break; |
| case COMPLEMENTED_LIST: |
| TTCN_Logger::log_event_str("complement"); |
| case VALUE_LIST: |
| TTCN_Logger::log_char('('); |
| for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) { |
| if (list_count > 0) TTCN_Logger::log_event_str(", "); |
| value_list.list_value[list_count].log(); |
| } |
| TTCN_Logger::log_char(')'); |
| break; |
| default: |
| log_generic(); |
| } |
| log_ifpresent(); |
| } |
| |
| void ExtendedMessageDataPacketOffset_template::log_match(const ExtendedMessageDataPacketOffset& match_value, boolean legacy) const |
| { |
| if(TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity()){ |
| if(match(match_value, legacy)){ |
| TTCN_Logger::print_logmatch_buffer(); |
| TTCN_Logger::log_event_str(" matched"); |
| } else{ |
| if (template_selection == SPECIFIC_VALUE) { |
| size_t previous_size = TTCN_Logger::get_logmatch_buffer_len(); |
| if(!single_value->field_ctrl.match(match_value.ctrl(), legacy)){ |
| TTCN_Logger::log_logmatch_info(".ctrl"); |
| single_value->field_ctrl.log_match(match_value.ctrl(), legacy); |
| TTCN_Logger::set_logmatch_buffer_len(previous_size); |
| } |
| if(!single_value->field_numberOfPacketsToWhichToApplyTheOffset.match(match_value.numberOfPacketsToWhichToApplyTheOffset(), legacy)){ |
| TTCN_Logger::log_logmatch_info(".numberOfPacketsToWhichToApplyTheOffset"); |
| single_value->field_numberOfPacketsToWhichToApplyTheOffset.log_match(match_value.numberOfPacketsToWhichToApplyTheOffset(), legacy); |
| TTCN_Logger::set_logmatch_buffer_len(previous_size); |
| } |
| if(!single_value->field_totalNumberOfPackets.match(match_value.totalNumberOfPackets(), legacy)){ |
| TTCN_Logger::log_logmatch_info(".totalNumberOfPackets"); |
| single_value->field_totalNumberOfPackets.log_match(match_value.totalNumberOfPackets(), legacy); |
| TTCN_Logger::set_logmatch_buffer_len(previous_size); |
| } |
| if(!single_value->field_dataPacketOffset.match(match_value.dataPacketOffset(), legacy)){ |
| TTCN_Logger::log_logmatch_info(".dataPacketOffset"); |
| single_value->field_dataPacketOffset.log_match(match_value.dataPacketOffset(), legacy); |
| TTCN_Logger::set_logmatch_buffer_len(previous_size); |
| } |
| if(!single_value->field_pgnOfExtendedPacketedMessage.match(match_value.pgnOfExtendedPacketedMessage(), legacy)){ |
| TTCN_Logger::log_logmatch_info(".pgnOfExtendedPacketedMessage"); |
| single_value->field_pgnOfExtendedPacketedMessage.log_match(match_value.pgnOfExtendedPacketedMessage(), legacy); |
| TTCN_Logger::set_logmatch_buffer_len(previous_size); |
| } |
| }else { |
| TTCN_Logger::print_logmatch_buffer(); |
| match_value.log(); |
| TTCN_Logger::log_event_str(" with "); |
| log(); |
| TTCN_Logger::log_event_str(" unmatched"); |
| } |
| } |
| return; |
| } |
| if (template_selection == SPECIFIC_VALUE) { |
| TTCN_Logger::log_event_str("{ ctrl := "); |
| single_value->field_ctrl.log_match(match_value.ctrl(), legacy); |
| TTCN_Logger::log_event_str(", numberOfPacketsToWhichToApplyTheOffset := "); |
| single_value->field_numberOfPacketsToWhichToApplyTheOffset.log_match(match_value.numberOfPacketsToWhichToApplyTheOffset(), legacy); |
| TTCN_Logger::log_event_str(", totalNumberOfPackets := "); |
| single_value->field_totalNumberOfPackets.log_match(match_value.totalNumberOfPackets(), legacy); |
| TTCN_Logger::log_event_str(", dataPacketOffset := "); |
| single_value->field_dataPacketOffset.log_match(match_value.dataPacketOffset(), legacy); |
| TTCN_Logger::log_event_str(", pgnOfExtendedPacketedMessage := "); |
| single_value->field_pgnOfExtendedPacketedMessage.log_match(match_value.pgnOfExtendedPacketedMessage(), legacy); |
| TTCN_Logger::log_event_str(" }"); |
| } else { |
| match_value.log(); |
| TTCN_Logger::log_event_str(" with "); |
| log(); |
| if (match(match_value, legacy)) TTCN_Logger::log_event_str(" matched"); |
| else TTCN_Logger::log_event_str(" unmatched"); |
| } |
| } |
| |
| void ExtendedMessageDataPacketOffset_template::encode_text(Text_Buf& text_buf) const |
| { |
| encode_text_base(text_buf); |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| single_value->field_ctrl.encode_text(text_buf); |
| single_value->field_numberOfPacketsToWhichToApplyTheOffset.encode_text(text_buf); |
| single_value->field_totalNumberOfPackets.encode_text(text_buf); |
| single_value->field_dataPacketOffset.encode_text(text_buf); |
| single_value->field_pgnOfExtendedPacketedMessage.encode_text(text_buf); |
| case OMIT_VALUE: |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| break; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| text_buf.push_int(value_list.n_values); |
| for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) |
| value_list.list_value[list_count].encode_text(text_buf); |
| break; |
| default: |
| TTCN_error("Text encoder: Encoding an uninitialized/unsupported template of type @IsobusCMMessageTypes.ExtendedMessageDataPacketOffset."); |
| } |
| } |
| |
| void ExtendedMessageDataPacketOffset_template::decode_text(Text_Buf& text_buf) |
| { |
| clean_up(); |
| decode_text_base(text_buf); |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| single_value = new single_value_struct; |
| single_value->field_ctrl.decode_text(text_buf); |
| single_value->field_numberOfPacketsToWhichToApplyTheOffset.decode_text(text_buf); |
| single_value->field_totalNumberOfPackets.decode_text(text_buf); |
| single_value->field_dataPacketOffset.decode_text(text_buf); |
| single_value->field_pgnOfExtendedPacketedMessage.decode_text(text_buf); |
| case OMIT_VALUE: |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| break; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| value_list.n_values = text_buf.pull_int().get_val(); |
| value_list.list_value = new ExtendedMessageDataPacketOffset_template[value_list.n_values]; |
| for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) |
| value_list.list_value[list_count].decode_text(text_buf); |
| break; |
| default: |
| TTCN_error("Text decoder: An unknown/unsupported selection was received in a template of type @IsobusCMMessageTypes.ExtendedMessageDataPacketOffset."); |
| } |
| } |
| |
| void ExtendedMessageDataPacketOffset_template::set_param(Module_Param& param) |
| { |
| param.basic_check(Module_Param::BC_TEMPLATE, "record template"); |
| switch (param.get_type()) { |
| case Module_Param::MP_Omit: |
| *this = OMIT_VALUE; |
| break; |
| case Module_Param::MP_Any: |
| *this = ANY_VALUE; |
| break; |
| case Module_Param::MP_AnyOrNone: |
| *this = ANY_OR_OMIT; |
| break; |
| case Module_Param::MP_List_Template: |
| case Module_Param::MP_ComplementList_Template: { |
| ExtendedMessageDataPacketOffset_template new_temp; |
| new_temp.set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : COMPLEMENTED_LIST, param.get_size()); |
| for (size_t p_i=0; p_i<param.get_size(); p_i++) { |
| new_temp.list_item(p_i).set_param(*param.get_elem(p_i)); |
| } |
| *this = new_temp; |
| break; } |
| case Module_Param::MP_Value_List: |
| if (5<param.get_size()) { |
| param.error("record template of type @IsobusCMMessageTypes.ExtendedMessageDataPacketOffset has 5 fields but list value has %d fields", (int)param.get_size()); |
| } |
| if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) ctrl().set_param(*param.get_elem(0)); |
| if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) numberOfPacketsToWhichToApplyTheOffset().set_param(*param.get_elem(1)); |
| if (param.get_size()>2 && param.get_elem(2)->get_type()!=Module_Param::MP_NotUsed) totalNumberOfPackets().set_param(*param.get_elem(2)); |
| if (param.get_size()>3 && param.get_elem(3)->get_type()!=Module_Param::MP_NotUsed) dataPacketOffset().set_param(*param.get_elem(3)); |
| if (param.get_size()>4 && param.get_elem(4)->get_type()!=Module_Param::MP_NotUsed) pgnOfExtendedPacketedMessage().set_param(*param.get_elem(4)); |
| break; |
| case Module_Param::MP_Assignment_List: { |
| Vector<bool> value_used(param.get_size()); |
| value_used.resize(param.get_size(), FALSE); |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "ctrl")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| ctrl().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "numberOfPacketsToWhichToApplyTheOffset")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| numberOfPacketsToWhichToApplyTheOffset().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "totalNumberOfPackets")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| totalNumberOfPackets().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "dataPacketOffset")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| dataPacketOffset().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "pgnOfExtendedPacketedMessage")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| pgnOfExtendedPacketedMessage().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| curr_param->error("Non existent field name in type @IsobusCMMessageTypes.ExtendedMessageDataPacketOffset: %s", curr_param->get_id()->get_name()); |
| break; |
| } |
| } break; |
| default: |
| param.type_error("record template", "@IsobusCMMessageTypes.ExtendedMessageDataPacketOffset"); |
| } |
| is_ifpresent = param.get_ifpresent(); |
| } |
| |
| void ExtendedMessageDataPacketOffset_template::check_restriction(template_res t_res, const char* t_name, boolean legacy) const |
| { |
| if (template_selection==UNINITIALIZED_TEMPLATE) return; |
| switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) { |
| case TR_OMIT: |
| if (template_selection==OMIT_VALUE) return; |
| case TR_VALUE: |
| if (template_selection!=SPECIFIC_VALUE || is_ifpresent) break; |
| single_value->field_ctrl.check_restriction(t_res, t_name ? t_name : "@IsobusCMMessageTypes.ExtendedMessageDataPacketOffset"); |
| single_value->field_numberOfPacketsToWhichToApplyTheOffset.check_restriction(t_res, t_name ? t_name : "@IsobusCMMessageTypes.ExtendedMessageDataPacketOffset"); |
| single_value->field_totalNumberOfPackets.check_restriction(t_res, t_name ? t_name : "@IsobusCMMessageTypes.ExtendedMessageDataPacketOffset"); |
| single_value->field_dataPacketOffset.check_restriction(t_res, t_name ? t_name : "@IsobusCMMessageTypes.ExtendedMessageDataPacketOffset"); |
| single_value->field_pgnOfExtendedPacketedMessage.check_restriction(t_res, t_name ? t_name : "@IsobusCMMessageTypes.ExtendedMessageDataPacketOffset"); |
| return; |
| case TR_PRESENT: |
| if (!match_omit(legacy)) return; |
| break; |
| default: |
| return; |
| } |
| TTCN_error("Restriction `%s' on template of type %s violated.", get_res_name(t_res), t_name ? t_name : "@IsobusCMMessageTypes.ExtendedMessageDataPacketOffset"); |
| } |
| |
| boolean ExtendedMessageDataPacketOffset_template::is_present(boolean legacy) const |
| { |
| if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE; |
| return !match_omit(legacy); |
| } |
| |
| boolean ExtendedMessageDataPacketOffset_template::match_omit(boolean legacy) const |
| { |
| if (is_ifpresent) return TRUE; |
| switch (template_selection) { |
| case OMIT_VALUE: |
| case ANY_OR_OMIT: |
| return TRUE; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| if (legacy) { |
| for (unsigned int l_idx=0; l_idx<value_list.n_values; l_idx++) |
| if (value_list.list_value[l_idx].match_omit()) |
| return template_selection==VALUE_LIST; |
| return template_selection==COMPLEMENTED_LIST; |
| } // else fall through |
| default: |
| return FALSE; |
| } |
| return FALSE; |
| } |
| |
| ExtendedMessageEndOfMessageAcknowledgement::ExtendedMessageEndOfMessageAcknowledgement() |
| { |
| } |
| |
| ExtendedMessageEndOfMessageAcknowledgement::ExtendedMessageEndOfMessageAcknowledgement(const OCTETSTRING& par_ctrl, |
| const INTEGER& par_numberOfBytesTransferred, |
| const INTEGER& par_pgnOfExtendedPacketedMessage) |
| : field_ctrl(par_ctrl), |
| field_numberOfBytesTransferred(par_numberOfBytesTransferred), |
| field_pgnOfExtendedPacketedMessage(par_pgnOfExtendedPacketedMessage) |
| { |
| } |
| |
| ExtendedMessageEndOfMessageAcknowledgement::ExtendedMessageEndOfMessageAcknowledgement(const ExtendedMessageEndOfMessageAcknowledgement& other_value) |
| { |
| if(!other_value.is_bound()) TTCN_error("Copying an unbound value of type @IsobusCMMessageTypes.ExtendedMessageEndOfMessageAcknowledgement."); |
| if (other_value.ctrl().is_bound()) field_ctrl = other_value.ctrl(); |
| else field_ctrl.clean_up(); |
| if (other_value.numberOfBytesTransferred().is_bound()) field_numberOfBytesTransferred = other_value.numberOfBytesTransferred(); |
| else field_numberOfBytesTransferred.clean_up(); |
| if (other_value.pgnOfExtendedPacketedMessage().is_bound()) field_pgnOfExtendedPacketedMessage = other_value.pgnOfExtendedPacketedMessage(); |
| else field_pgnOfExtendedPacketedMessage.clean_up(); |
| } |
| |
| void ExtendedMessageEndOfMessageAcknowledgement::clean_up() |
| { |
| field_ctrl.clean_up(); |
| field_numberOfBytesTransferred.clean_up(); |
| field_pgnOfExtendedPacketedMessage.clean_up(); |
| } |
| |
| const TTCN_Typedescriptor_t* ExtendedMessageEndOfMessageAcknowledgement::get_descriptor() const { return &ExtendedMessageEndOfMessageAcknowledgement_descr_; } |
| ExtendedMessageEndOfMessageAcknowledgement& ExtendedMessageEndOfMessageAcknowledgement::operator=(const ExtendedMessageEndOfMessageAcknowledgement& other_value) |
| { |
| if (this != &other_value) { |
| if(!other_value.is_bound()) TTCN_error("Assignment of an unbound value of type @IsobusCMMessageTypes.ExtendedMessageEndOfMessageAcknowledgement."); |
| if (other_value.ctrl().is_bound()) field_ctrl = other_value.ctrl(); |
| else field_ctrl.clean_up(); |
| if (other_value.numberOfBytesTransferred().is_bound()) field_numberOfBytesTransferred = other_value.numberOfBytesTransferred(); |
| else field_numberOfBytesTransferred.clean_up(); |
| if (other_value.pgnOfExtendedPacketedMessage().is_bound()) field_pgnOfExtendedPacketedMessage = other_value.pgnOfExtendedPacketedMessage(); |
| else field_pgnOfExtendedPacketedMessage.clean_up(); |
| } |
| return *this; |
| } |
| |
| boolean ExtendedMessageEndOfMessageAcknowledgement::operator==(const ExtendedMessageEndOfMessageAcknowledgement& other_value) const |
| { |
| return field_ctrl==other_value.field_ctrl |
| && field_numberOfBytesTransferred==other_value.field_numberOfBytesTransferred |
| && field_pgnOfExtendedPacketedMessage==other_value.field_pgnOfExtendedPacketedMessage; |
| } |
| |
| boolean ExtendedMessageEndOfMessageAcknowledgement::is_bound() const |
| { |
| return (field_ctrl.is_bound()) |
| || (field_numberOfBytesTransferred.is_bound()) |
| || (field_pgnOfExtendedPacketedMessage.is_bound()); |
| } |
| boolean ExtendedMessageEndOfMessageAcknowledgement::is_value() const |
| { |
| return field_ctrl.is_value() |
| && field_numberOfBytesTransferred.is_value() |
| && field_pgnOfExtendedPacketedMessage.is_value(); |
| } |
| void ExtendedMessageEndOfMessageAcknowledgement::log() const |
| { |
| if (!is_bound()) { |
| TTCN_Logger::log_event_unbound(); |
| return; |
| } |
| TTCN_Logger::log_event_str("{ ctrl := "); |
| field_ctrl.log(); |
| TTCN_Logger::log_event_str(", numberOfBytesTransferred := "); |
| field_numberOfBytesTransferred.log(); |
| TTCN_Logger::log_event_str(", pgnOfExtendedPacketedMessage := "); |
| field_pgnOfExtendedPacketedMessage.log(); |
| TTCN_Logger::log_event_str(" }"); |
| } |
| |
| void ExtendedMessageEndOfMessageAcknowledgement::set_param(Module_Param& param) |
| { |
| param.basic_check(Module_Param::BC_VALUE, "record value"); |
| switch (param.get_type()) { |
| case Module_Param::MP_Value_List: |
| if (3<param.get_size()) { |
| param.error("record value of type @IsobusCMMessageTypes.ExtendedMessageEndOfMessageAcknowledgement has 3 fields but list value has %d fields", (int)param.get_size()); |
| } |
| if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) ctrl().set_param(*param.get_elem(0)); |
| if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) numberOfBytesTransferred().set_param(*param.get_elem(1)); |
| if (param.get_size()>2 && param.get_elem(2)->get_type()!=Module_Param::MP_NotUsed) pgnOfExtendedPacketedMessage().set_param(*param.get_elem(2)); |
| break; |
| case Module_Param::MP_Assignment_List: { |
| Vector<bool> value_used(param.get_size()); |
| value_used.resize(param.get_size(), FALSE); |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "ctrl")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| ctrl().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "numberOfBytesTransferred")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| numberOfBytesTransferred().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "pgnOfExtendedPacketedMessage")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| pgnOfExtendedPacketedMessage().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| curr_param->error("Non existent field name in type @IsobusCMMessageTypes.ExtendedMessageEndOfMessageAcknowledgement: %s", curr_param->get_id()->get_name()); |
| break; |
| } |
| } break; |
| default: |
| param.type_error("record value", "@IsobusCMMessageTypes.ExtendedMessageEndOfMessageAcknowledgement"); |
| } |
| } |
| |
| void ExtendedMessageEndOfMessageAcknowledgement::set_implicit_omit() |
| { |
| if (ctrl().is_bound()) ctrl().set_implicit_omit(); |
| if (numberOfBytesTransferred().is_bound()) numberOfBytesTransferred().set_implicit_omit(); |
| if (pgnOfExtendedPacketedMessage().is_bound()) pgnOfExtendedPacketedMessage().set_implicit_omit(); |
| } |
| |
| void ExtendedMessageEndOfMessageAcknowledgement::encode_text(Text_Buf& text_buf) const |
| { |
| field_ctrl.encode_text(text_buf); |
| field_numberOfBytesTransferred.encode_text(text_buf); |
| field_pgnOfExtendedPacketedMessage.encode_text(text_buf); |
| } |
| |
| void ExtendedMessageEndOfMessageAcknowledgement::decode_text(Text_Buf& text_buf) |
| { |
| field_ctrl.decode_text(text_buf); |
| field_numberOfBytesTransferred.decode_text(text_buf); |
| field_pgnOfExtendedPacketedMessage.decode_text(text_buf); |
| } |
| |
| void ExtendedMessageEndOfMessageAcknowledgement::encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, TTCN_EncDec::coding_t p_coding, ...) const |
| { |
| va_list pvar; |
| va_start(pvar, p_coding); |
| switch(p_coding) { |
| case TTCN_EncDec::CT_BER: { |
| TTCN_EncDec_ErrorContext ec("While BER-encoding type '%s': ", p_td.name); |
| unsigned BER_coding=va_arg(pvar, unsigned); |
| BER_encode_chk_coding(BER_coding); |
| ASN_BER_TLV_t *tlv=BER_encode_TLV(p_td, BER_coding); |
| tlv->put_in_buffer(p_buf); |
| ASN_BER_TLV_t::destruct(tlv); |
| break;} |
| case TTCN_EncDec::CT_RAW: { |
| TTCN_EncDec_ErrorContext ec("While RAW-encoding type '%s': ", p_td.name); |
| if(!p_td.raw) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No RAW descriptor available for type '%s'.", p_td.name); |
| RAW_enc_tr_pos rp; |
| rp.level=0; |
| rp.pos=NULL; |
| RAW_enc_tree root(FALSE, NULL, &rp, 1, p_td.raw); |
| RAW_encode(p_td, root); |
| root.put_to_buf(p_buf); |
| break;} |
| case TTCN_EncDec::CT_TEXT: { |
| TTCN_EncDec_ErrorContext ec("While TEXT-encoding type '%s': ", p_td.name); |
| if(!p_td.text) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No TEXT descriptor available for type '%s'.", p_td.name); |
| TEXT_encode(p_td,p_buf); |
| break;} |
| case TTCN_EncDec::CT_XER: { |
| TTCN_EncDec_ErrorContext ec("While XER-encoding type '%s': ", p_td.name); |
| unsigned XER_coding=va_arg(pvar, unsigned); |
| XER_encode_chk_coding(XER_coding, p_td); |
| XER_encode(*(p_td.xer),p_buf, XER_coding, 0, 0, 0); |
| p_buf.put_c('\n'); |
| break;} |
| case TTCN_EncDec::CT_JSON: { |
| TTCN_EncDec_ErrorContext ec("While JSON-encoding type '%s': ", p_td.name); |
| if(!p_td.json) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No JSON descriptor available for type '%s'.", p_td.name); |
| JSON_Tokenizer tok(va_arg(pvar, int) != 0); |
| JSON_encode(p_td, tok); |
| p_buf.put_s(tok.get_buffer_length(), (const unsigned char*)tok.get_buffer()); |
| break;} |
| case TTCN_EncDec::CT_OER: { |
| TTCN_EncDec_ErrorContext ec("While OER-encoding type '%s': ", p_td.name); |
| if(!p_td.oer) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No OER descriptor available for type '%s'.", p_td.name); |
| OER_encode(p_td, p_buf); |
| break;} |
| default: |
| TTCN_error("Unknown coding method requested to encode type '%s'", p_td.name); |
| } |
| va_end(pvar); |
| } |
| |
| void ExtendedMessageEndOfMessageAcknowledgement::decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, TTCN_EncDec::coding_t p_coding, ...) |
| { |
| va_list pvar; |
| va_start(pvar, p_coding); |
| switch(p_coding) { |
| case TTCN_EncDec::CT_BER: { |
| TTCN_EncDec_ErrorContext ec("While BER-decoding type '%s': ", p_td.name); |
| unsigned L_form=va_arg(pvar, unsigned); |
| ASN_BER_TLV_t tlv; |
| BER_decode_str2TLV(p_buf, tlv, L_form); |
| BER_decode_TLV(p_td, tlv, L_form); |
| if(tlv.isComplete) p_buf.increase_pos(tlv.get_len()); |
| break;} |
| case TTCN_EncDec::CT_RAW: { |
| TTCN_EncDec_ErrorContext ec("While RAW-decoding type '%s': ", p_td.name); |
| if(!p_td.raw) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No RAW descriptor available for type '%s'.", p_td.name); |
| raw_order_t r_order; |
| switch(p_td.raw->top_bit_order) { |
| case TOP_BIT_LEFT: |
| r_order=ORDER_LSB; |
| break; |
| case TOP_BIT_RIGHT: |
| default: |
| r_order=ORDER_MSB; |
| } |
| int rawr = RAW_decode(p_td, p_buf, p_buf.get_len()*8, r_order); |
| if(rawr<0) switch (-rawr) { |
| case TTCN_EncDec::ET_INCOMPL_MSG: |
| case TTCN_EncDec::ET_LEN_ERR: |
| ec.error((TTCN_EncDec::error_type_t)-rawr, "Can not decode type '%s', because incomplete message was received", p_td.name); |
| break; |
| case 1: |
| default: |
| ec.error(TTCN_EncDec::ET_INVAL_MSG, "Can not decode type '%s', because invalid message was received", p_td.name); |
| break; |
| } |
| break;} |
| case TTCN_EncDec::CT_TEXT: { |
| Limit_Token_List limit; |
| TTCN_EncDec_ErrorContext ec("While TEXT-decoding type '%s': ", p_td.name); |
| if(!p_td.text) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No TEXT descriptor available for type '%s'.", p_td.name); |
| const unsigned char *b_data=p_buf.get_data(); |
| if(b_data[p_buf.get_len()-1]!='\0'){ |
| p_buf.set_pos(p_buf.get_len()); |
| p_buf.put_zero(8,ORDER_LSB); |
| p_buf.rewind(); |
| } |
| if(TEXT_decode(p_td,p_buf,limit)<0) |
| ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name); |
| break;} |
| case TTCN_EncDec::CT_XER: { |
| TTCN_EncDec_ErrorContext ec("While XER-decoding type '%s': ", p_td.name); |
| unsigned XER_coding=va_arg(pvar, unsigned); |
| XER_encode_chk_coding(XER_coding, p_td); |
| XmlReaderWrap reader(p_buf); |
| for (int rd_ok=reader.Read(); rd_ok==1; rd_ok=reader.Read()) { |
| if (reader.NodeType() == XML_READER_TYPE_ELEMENT) break; |
| } |
| XER_decode(*(p_td.xer), reader, XER_coding | XER_TOPLEVEL, XER_NONE, 0); |
| size_t bytes = reader.ByteConsumed(); |
| p_buf.set_pos(bytes); |
| break;} |
| case TTCN_EncDec::CT_JSON: { |
| TTCN_EncDec_ErrorContext ec("While JSON-decoding type '%s': ", p_td.name); |
| if(!p_td.json) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No JSON descriptor available for type '%s'.", p_td.name); |
| JSON_Tokenizer tok((const char*)p_buf.get_data(), p_buf.get_len()); |
| if(JSON_decode(p_td, tok, FALSE)<0) |
| ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name); |
| p_buf.set_pos(tok.get_buf_pos()); |
| break;} |
| case TTCN_EncDec::CT_OER: { |
| TTCN_EncDec_ErrorContext ec("While OER-decoding type '%s': ", p_td.name); |
| if(!p_td.oer) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No OER descriptor available for type '%s'.", p_td.name); |
| OER_struct p_oer; |
| OER_decode(p_td, p_buf, p_oer); |
| break;} |
| default: |
| TTCN_error("Unknown coding method requested to decode type '%s'", p_td.name); |
| } |
| va_end(pvar); |
| } |
| |
| int ExtendedMessageEndOfMessageAcknowledgement::RAW_decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int limit, raw_order_t top_bit_ord, boolean no_err, int, boolean, const RAW_Force_Omit* force_omit) |
| { (void)no_err; |
| int prepaddlength=p_buf.increase_pos_padd(p_td.raw->prepadding); |
| limit-=prepaddlength; |
| size_t last_decoded_pos = p_buf.get_pos_bit(); |
| int decoded_length = 0; |
| int decoded_field_length = 0; |
| raw_order_t local_top_order; |
| if(p_td.raw->top_bit_order==TOP_BIT_INHERITED)local_top_order=top_bit_ord; |
| else if(p_td.raw->top_bit_order==TOP_BIT_RIGHT)local_top_order=ORDER_MSB; |
| else local_top_order=ORDER_LSB; |
| RAW_Force_Omit field_0_force_omit(0, force_omit, ExtendedMessageEndOfMessageAcknowledgement_ctrl_descr_.raw->forceomit); |
| decoded_field_length = field_ctrl.RAW_decode(ExtendedMessageEndOfMessageAcknowledgement_ctrl_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_0_force_omit); |
| if (decoded_field_length < 0) return decoded_field_length; |
| decoded_length+=decoded_field_length; |
| limit-=decoded_field_length; |
| last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit()); |
| RAW_Force_Omit field_1_force_omit(1, force_omit, ETP__MSG__SIZE_descr_.raw->forceomit); |
| decoded_field_length = field_numberOfBytesTransferred.RAW_decode(ETP__MSG__SIZE_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_1_force_omit); |
| if (decoded_field_length < 0) return decoded_field_length; |
| decoded_length+=decoded_field_length; |
| limit-=decoded_field_length; |
| last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit()); |
| RAW_Force_Omit field_2_force_omit(2, force_omit, IsobusMessageTypes::PGN_descr_.raw->forceomit); |
| decoded_field_length = field_pgnOfExtendedPacketedMessage.RAW_decode(IsobusMessageTypes::PGN_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_2_force_omit); |
| if (decoded_field_length < 0) return decoded_field_length; |
| decoded_length+=decoded_field_length; |
| limit-=decoded_field_length; |
| last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit()); |
| p_buf.set_pos_bit(last_decoded_pos); |
| return decoded_length+prepaddlength+p_buf.increase_pos_padd(p_td.raw->padding); |
| } |
| |
| int ExtendedMessageEndOfMessageAcknowledgement::RAW_encode(const TTCN_Typedescriptor_t&, RAW_enc_tree& myleaf) const { |
| if (!is_bound()) TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_UNBOUND, "Encoding an unbound value."); |
| int encoded_length = 0; |
| myleaf.isleaf = FALSE; |
| myleaf.body.node.num_of_nodes = 3; |
| myleaf.body.node.nodes = init_nodes_of_enc_tree(3); |
| myleaf.body.node.nodes[0] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 0, ExtendedMessageEndOfMessageAcknowledgement_ctrl_descr_.raw); |
| myleaf.body.node.nodes[1] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 1, ETP__MSG__SIZE_descr_.raw); |
| myleaf.body.node.nodes[2] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 2, IsobusMessageTypes::PGN_descr_.raw); |
| encoded_length += field_ctrl.RAW_encode(ExtendedMessageEndOfMessageAcknowledgement_ctrl_descr_, *myleaf.body.node.nodes[0]); |
| encoded_length += field_numberOfBytesTransferred.RAW_encode(ETP__MSG__SIZE_descr_, *myleaf.body.node.nodes[1]); |
| encoded_length += field_pgnOfExtendedPacketedMessage.RAW_encode(IsobusMessageTypes::PGN_descr_, *myleaf.body.node.nodes[2]); |
| return myleaf.length = encoded_length; |
| } |
| |
| struct ExtendedMessageEndOfMessageAcknowledgement_template::single_value_struct { |
| OCTETSTRING_template field_ctrl; |
| INTEGER_template field_numberOfBytesTransferred; |
| INTEGER_template field_pgnOfExtendedPacketedMessage; |
| }; |
| |
| void ExtendedMessageEndOfMessageAcknowledgement_template::set_specific() |
| { |
| if (template_selection != SPECIFIC_VALUE) { |
| template_sel old_selection = template_selection; |
| clean_up(); |
| single_value = new single_value_struct; |
| set_selection(SPECIFIC_VALUE); |
| if (old_selection == ANY_VALUE || old_selection == ANY_OR_OMIT) { |
| single_value->field_ctrl = ANY_VALUE; |
| single_value->field_numberOfBytesTransferred = ANY_VALUE; |
| single_value->field_pgnOfExtendedPacketedMessage = ANY_VALUE; |
| } |
| } |
| } |
| |
| void ExtendedMessageEndOfMessageAcknowledgement_template::copy_value(const ExtendedMessageEndOfMessageAcknowledgement& other_value) |
| { |
| single_value = new single_value_struct; |
| if (other_value.ctrl().is_bound()) { |
| single_value->field_ctrl = other_value.ctrl(); |
| } else { |
| single_value->field_ctrl.clean_up(); |
| } |
| if (other_value.numberOfBytesTransferred().is_bound()) { |
| single_value->field_numberOfBytesTransferred = other_value.numberOfBytesTransferred(); |
| } else { |
| single_value->field_numberOfBytesTransferred.clean_up(); |
| } |
| if (other_value.pgnOfExtendedPacketedMessage().is_bound()) { |
| single_value->field_pgnOfExtendedPacketedMessage = other_value.pgnOfExtendedPacketedMessage(); |
| } else { |
| single_value->field_pgnOfExtendedPacketedMessage.clean_up(); |
| } |
| set_selection(SPECIFIC_VALUE); |
| } |
| |
| void ExtendedMessageEndOfMessageAcknowledgement_template::copy_template(const ExtendedMessageEndOfMessageAcknowledgement_template& other_value) |
| { |
| switch (other_value.template_selection) { |
| case SPECIFIC_VALUE: |
| single_value = new single_value_struct; |
| if (UNINITIALIZED_TEMPLATE != other_value.ctrl().get_selection()) { |
| single_value->field_ctrl = other_value.ctrl(); |
| } else { |
| single_value->field_ctrl.clean_up(); |
| } |
| if (UNINITIALIZED_TEMPLATE != other_value.numberOfBytesTransferred().get_selection()) { |
| single_value->field_numberOfBytesTransferred = other_value.numberOfBytesTransferred(); |
| } else { |
| single_value->field_numberOfBytesTransferred.clean_up(); |
| } |
| if (UNINITIALIZED_TEMPLATE != other_value.pgnOfExtendedPacketedMessage().get_selection()) { |
| single_value->field_pgnOfExtendedPacketedMessage = other_value.pgnOfExtendedPacketedMessage(); |
| } else { |
| single_value->field_pgnOfExtendedPacketedMessage.clean_up(); |
| } |
| case OMIT_VALUE: |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| break; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| value_list.n_values = other_value.value_list.n_values; |
| value_list.list_value = new ExtendedMessageEndOfMessageAcknowledgement_template[value_list.n_values]; |
| for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) |
| value_list.list_value[list_count].copy_template(other_value.value_list.list_value[list_count]); |
| break; |
| default: |
| TTCN_error("Copying an uninitialized/unsupported template of type @IsobusCMMessageTypes.ExtendedMessageEndOfMessageAcknowledgement."); |
| break; |
| } |
| set_selection(other_value); |
| } |
| |
| ExtendedMessageEndOfMessageAcknowledgement_template::ExtendedMessageEndOfMessageAcknowledgement_template() |
| { |
| } |
| |
| ExtendedMessageEndOfMessageAcknowledgement_template::ExtendedMessageEndOfMessageAcknowledgement_template(template_sel other_value) |
| : Base_Template(other_value) |
| { |
| check_single_selection(other_value); |
| } |
| |
| ExtendedMessageEndOfMessageAcknowledgement_template::ExtendedMessageEndOfMessageAcknowledgement_template(const ExtendedMessageEndOfMessageAcknowledgement& other_value) |
| { |
| copy_value(other_value); |
| } |
| |
| ExtendedMessageEndOfMessageAcknowledgement_template::ExtendedMessageEndOfMessageAcknowledgement_template(const OPTIONAL<ExtendedMessageEndOfMessageAcknowledgement>& other_value) |
| { |
| switch (other_value.get_selection()) { |
| case OPTIONAL_PRESENT: |
| copy_value((const ExtendedMessageEndOfMessageAcknowledgement&)other_value); |
| break; |
| case OPTIONAL_OMIT: |
| set_selection(OMIT_VALUE); |
| break; |
| default: |
| TTCN_error("Creating a template of type @IsobusCMMessageTypes.ExtendedMessageEndOfMessageAcknowledgement from an unbound optional field."); |
| } |
| } |
| |
| ExtendedMessageEndOfMessageAcknowledgement_template::ExtendedMessageEndOfMessageAcknowledgement_template(const ExtendedMessageEndOfMessageAcknowledgement_template& other_value) |
| : Base_Template() |
| { |
| copy_template(other_value); |
| } |
| |
| ExtendedMessageEndOfMessageAcknowledgement_template::~ExtendedMessageEndOfMessageAcknowledgement_template() |
| { |
| clean_up(); |
| } |
| |
| ExtendedMessageEndOfMessageAcknowledgement_template& ExtendedMessageEndOfMessageAcknowledgement_template::operator=(template_sel other_value) |
| { |
| check_single_selection(other_value); |
| clean_up(); |
| set_selection(other_value); |
| return *this; |
| } |
| |
| ExtendedMessageEndOfMessageAcknowledgement_template& ExtendedMessageEndOfMessageAcknowledgement_template::operator=(const ExtendedMessageEndOfMessageAcknowledgement& other_value) |
| { |
| clean_up(); |
| copy_value(other_value); |
| return *this; |
| } |
| |
| ExtendedMessageEndOfMessageAcknowledgement_template& ExtendedMessageEndOfMessageAcknowledgement_template::operator=(const OPTIONAL<ExtendedMessageEndOfMessageAcknowledgement>& other_value) |
| { |
| clean_up(); |
| switch (other_value.get_selection()) { |
| case OPTIONAL_PRESENT: |
| copy_value((const ExtendedMessageEndOfMessageAcknowledgement&)other_value); |
| break; |
| case OPTIONAL_OMIT: |
| set_selection(OMIT_VALUE); |
| break; |
| default: |
| TTCN_error("Assignment of an unbound optional field to a template of type @IsobusCMMessageTypes.ExtendedMessageEndOfMessageAcknowledgement."); |
| } |
| return *this; |
| } |
| |
| ExtendedMessageEndOfMessageAcknowledgement_template& ExtendedMessageEndOfMessageAcknowledgement_template::operator=(const ExtendedMessageEndOfMessageAcknowledgement_template& other_value) |
| { |
| if (&other_value != this) { |
| clean_up(); |
| copy_template(other_value); |
| } |
| return *this; |
| } |
| |
| boolean ExtendedMessageEndOfMessageAcknowledgement_template::match(const ExtendedMessageEndOfMessageAcknowledgement& other_value, boolean legacy) const |
| { |
| if (!other_value.is_bound()) return FALSE; |
| switch (template_selection) { |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| return TRUE; |
| case OMIT_VALUE: |
| return FALSE; |
| case SPECIFIC_VALUE: |
| if(!other_value.ctrl().is_bound()) return FALSE; |
| if(!single_value->field_ctrl.match(other_value.ctrl(), legacy))return FALSE; |
| if(!other_value.numberOfBytesTransferred().is_bound()) return FALSE; |
| if(!single_value->field_numberOfBytesTransferred.match(other_value.numberOfBytesTransferred(), legacy))return FALSE; |
| if(!other_value.pgnOfExtendedPacketedMessage().is_bound()) return FALSE; |
| if(!single_value->field_pgnOfExtendedPacketedMessage.match(other_value.pgnOfExtendedPacketedMessage(), legacy))return FALSE; |
| return TRUE; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) |
| if (value_list.list_value[list_count].match(other_value, legacy)) return template_selection == VALUE_LIST; |
| return template_selection == COMPLEMENTED_LIST; |
| default: |
| TTCN_error("Matching an uninitialized/unsupported template of type @IsobusCMMessageTypes.ExtendedMessageEndOfMessageAcknowledgement."); |
| } |
| return FALSE; |
| } |
| |
| boolean ExtendedMessageEndOfMessageAcknowledgement_template::is_bound() const |
| { |
| if (template_selection == UNINITIALIZED_TEMPLATE && !is_ifpresent) return FALSE; |
| if (template_selection != SPECIFIC_VALUE) return TRUE; |
| return single_value->field_ctrl.is_bound() |
| |
| ||single_value->field_numberOfBytesTransferred.is_bound() |
| |
| ||single_value->field_pgnOfExtendedPacketedMessage.is_bound() |
| ; |
| } |
| |
| boolean ExtendedMessageEndOfMessageAcknowledgement_template::is_value() const |
| { |
| if (template_selection != SPECIFIC_VALUE || is_ifpresent) return FALSE; |
| return single_value->field_ctrl.is_value() |
| &&single_value->field_numberOfBytesTransferred.is_value() |
| &&single_value->field_pgnOfExtendedPacketedMessage.is_value(); |
| } |
| |
| void ExtendedMessageEndOfMessageAcknowledgement_template::clean_up() |
| { |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| delete single_value; |
| break; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| delete [] value_list.list_value; |
| default: |
| break; |
| } |
| template_selection = UNINITIALIZED_TEMPLATE; |
| } |
| |
| ExtendedMessageEndOfMessageAcknowledgement ExtendedMessageEndOfMessageAcknowledgement_template::valueof() const |
| { |
| if (template_selection != SPECIFIC_VALUE || is_ifpresent) |
| TTCN_error("Performing a valueof or send operation on a non-specific template of type @IsobusCMMessageTypes.ExtendedMessageEndOfMessageAcknowledgement."); |
| ExtendedMessageEndOfMessageAcknowledgement ret_val; |
| if (single_value->field_ctrl.is_bound()) { |
| ret_val.ctrl() = single_value->field_ctrl.valueof(); |
| } |
| if (single_value->field_numberOfBytesTransferred.is_bound()) { |
| ret_val.numberOfBytesTransferred() = single_value->field_numberOfBytesTransferred.valueof(); |
| } |
| if (single_value->field_pgnOfExtendedPacketedMessage.is_bound()) { |
| ret_val.pgnOfExtendedPacketedMessage() = single_value->field_pgnOfExtendedPacketedMessage.valueof(); |
| } |
| return ret_val; |
| } |
| |
| void ExtendedMessageEndOfMessageAcknowledgement_template::set_type(template_sel template_type, unsigned int list_length) |
| { |
| if (template_type != VALUE_LIST && template_type != COMPLEMENTED_LIST) |
| TTCN_error("Setting an invalid list for a template of type @IsobusCMMessageTypes.ExtendedMessageEndOfMessageAcknowledgement."); |
| clean_up(); |
| set_selection(template_type); |
| value_list.n_values = list_length; |
| value_list.list_value = new ExtendedMessageEndOfMessageAcknowledgement_template[list_length]; |
| } |
| |
| ExtendedMessageEndOfMessageAcknowledgement_template& ExtendedMessageEndOfMessageAcknowledgement_template::list_item(unsigned int list_index) const |
| { |
| if (template_selection != VALUE_LIST && template_selection != COMPLEMENTED_LIST) |
| TTCN_error("Accessing a list element of a non-list template of type @IsobusCMMessageTypes.ExtendedMessageEndOfMessageAcknowledgement."); |
| if (list_index >= value_list.n_values) |
| TTCN_error("Index overflow in a value list template of type @IsobusCMMessageTypes.ExtendedMessageEndOfMessageAcknowledgement."); |
| return value_list.list_value[list_index]; |
| } |
| |
| OCTETSTRING_template& ExtendedMessageEndOfMessageAcknowledgement_template::ctrl() |
| { |
| set_specific(); |
| return single_value->field_ctrl; |
| } |
| |
| const OCTETSTRING_template& ExtendedMessageEndOfMessageAcknowledgement_template::ctrl() const |
| { |
| if (template_selection != SPECIFIC_VALUE) |
| TTCN_error("Accessing field ctrl of a non-specific template of type @IsobusCMMessageTypes.ExtendedMessageEndOfMessageAcknowledgement."); |
| return single_value->field_ctrl; |
| } |
| |
| INTEGER_template& ExtendedMessageEndOfMessageAcknowledgement_template::numberOfBytesTransferred() |
| { |
| set_specific(); |
| return single_value->field_numberOfBytesTransferred; |
| } |
| |
| const INTEGER_template& ExtendedMessageEndOfMessageAcknowledgement_template::numberOfBytesTransferred() const |
| { |
| if (template_selection != SPECIFIC_VALUE) |
| TTCN_error("Accessing field numberOfBytesTransferred of a non-specific template of type @IsobusCMMessageTypes.ExtendedMessageEndOfMessageAcknowledgement."); |
| return single_value->field_numberOfBytesTransferred; |
| } |
| |
| INTEGER_template& ExtendedMessageEndOfMessageAcknowledgement_template::pgnOfExtendedPacketedMessage() |
| { |
| set_specific(); |
| return single_value->field_pgnOfExtendedPacketedMessage; |
| } |
| |
| const INTEGER_template& ExtendedMessageEndOfMessageAcknowledgement_template::pgnOfExtendedPacketedMessage() const |
| { |
| if (template_selection != SPECIFIC_VALUE) |
| TTCN_error("Accessing field pgnOfExtendedPacketedMessage of a non-specific template of type @IsobusCMMessageTypes.ExtendedMessageEndOfMessageAcknowledgement."); |
| return single_value->field_pgnOfExtendedPacketedMessage; |
| } |
| |
| int ExtendedMessageEndOfMessageAcknowledgement_template::size_of() const |
| { |
| if (is_ifpresent) TTCN_error("Performing sizeof() operation on a template of type @IsobusCMMessageTypes.ExtendedMessageEndOfMessageAcknowledgement which has an ifpresent attribute."); |
| switch (template_selection) |
| { |
| case SPECIFIC_VALUE: |
| return 3; |
| case VALUE_LIST: |
| { |
| if (value_list.n_values<1) |
| TTCN_error("Internal error: Performing sizeof() operation on a template of type @IsobusCMMessageTypes.ExtendedMessageEndOfMessageAcknowledgement containing an empty list."); |
| int item_size = value_list.list_value[0].size_of(); |
| for (unsigned int l_idx = 1; l_idx < value_list.n_values; l_idx++) |
| { |
| if (value_list.list_value[l_idx].size_of()!=item_size) |
| TTCN_error("Performing sizeof() operation on a template of type @IsobusCMMessageTypes.ExtendedMessageEndOfMessageAcknowledgement containing a value list with different sizes."); |
| } |
| return item_size; |
| } |
| case OMIT_VALUE: |
| TTCN_error("Performing sizeof() operation on a template of type @IsobusCMMessageTypes.ExtendedMessageEndOfMessageAcknowledgement containing omit value."); |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| TTCN_error("Performing sizeof() operation on a template of type @IsobusCMMessageTypes.ExtendedMessageEndOfMessageAcknowledgement containing */? value."); |
| case COMPLEMENTED_LIST: |
| TTCN_error("Performing sizeof() operation on a template of type @IsobusCMMessageTypes.ExtendedMessageEndOfMessageAcknowledgement containing complemented list."); |
| default: |
| TTCN_error("Performing sizeof() operation on an uninitialized/unsupported template of type @IsobusCMMessageTypes.ExtendedMessageEndOfMessageAcknowledgement."); |
| } |
| return 0; |
| } |
| |
| void ExtendedMessageEndOfMessageAcknowledgement_template::log() const |
| { |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| TTCN_Logger::log_event_str("{ ctrl := "); |
| single_value->field_ctrl.log(); |
| TTCN_Logger::log_event_str(", numberOfBytesTransferred := "); |
| single_value->field_numberOfBytesTransferred.log(); |
| TTCN_Logger::log_event_str(", pgnOfExtendedPacketedMessage := "); |
| single_value->field_pgnOfExtendedPacketedMessage.log(); |
| TTCN_Logger::log_event_str(" }"); |
| break; |
| case COMPLEMENTED_LIST: |
| TTCN_Logger::log_event_str("complement"); |
| case VALUE_LIST: |
| TTCN_Logger::log_char('('); |
| for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) { |
| if (list_count > 0) TTCN_Logger::log_event_str(", "); |
| value_list.list_value[list_count].log(); |
| } |
| TTCN_Logger::log_char(')'); |
| break; |
| default: |
| log_generic(); |
| } |
| log_ifpresent(); |
| } |
| |
| void ExtendedMessageEndOfMessageAcknowledgement_template::log_match(const ExtendedMessageEndOfMessageAcknowledgement& match_value, boolean legacy) const |
| { |
| if(TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity()){ |
| if(match(match_value, legacy)){ |
| TTCN_Logger::print_logmatch_buffer(); |
| TTCN_Logger::log_event_str(" matched"); |
| } else{ |
| if (template_selection == SPECIFIC_VALUE) { |
| size_t previous_size = TTCN_Logger::get_logmatch_buffer_len(); |
| if(!single_value->field_ctrl.match(match_value.ctrl(), legacy)){ |
| TTCN_Logger::log_logmatch_info(".ctrl"); |
| single_value->field_ctrl.log_match(match_value.ctrl(), legacy); |
| TTCN_Logger::set_logmatch_buffer_len(previous_size); |
| } |
| if(!single_value->field_numberOfBytesTransferred.match(match_value.numberOfBytesTransferred(), legacy)){ |
| TTCN_Logger::log_logmatch_info(".numberOfBytesTransferred"); |
| single_value->field_numberOfBytesTransferred.log_match(match_value.numberOfBytesTransferred(), legacy); |
| TTCN_Logger::set_logmatch_buffer_len(previous_size); |
| } |
| if(!single_value->field_pgnOfExtendedPacketedMessage.match(match_value.pgnOfExtendedPacketedMessage(), legacy)){ |
| TTCN_Logger::log_logmatch_info(".pgnOfExtendedPacketedMessage"); |
| single_value->field_pgnOfExtendedPacketedMessage.log_match(match_value.pgnOfExtendedPacketedMessage(), legacy); |
| TTCN_Logger::set_logmatch_buffer_len(previous_size); |
| } |
| }else { |
| TTCN_Logger::print_logmatch_buffer(); |
| match_value.log(); |
| TTCN_Logger::log_event_str(" with "); |
| log(); |
| TTCN_Logger::log_event_str(" unmatched"); |
| } |
| } |
| return; |
| } |
| if (template_selection == SPECIFIC_VALUE) { |
| TTCN_Logger::log_event_str("{ ctrl := "); |
| single_value->field_ctrl.log_match(match_value.ctrl(), legacy); |
| TTCN_Logger::log_event_str(", numberOfBytesTransferred := "); |
| single_value->field_numberOfBytesTransferred.log_match(match_value.numberOfBytesTransferred(), legacy); |
| TTCN_Logger::log_event_str(", pgnOfExtendedPacketedMessage := "); |
| single_value->field_pgnOfExtendedPacketedMessage.log_match(match_value.pgnOfExtendedPacketedMessage(), legacy); |
| TTCN_Logger::log_event_str(" }"); |
| } else { |
| match_value.log(); |
| TTCN_Logger::log_event_str(" with "); |
| log(); |
| if (match(match_value, legacy)) TTCN_Logger::log_event_str(" matched"); |
| else TTCN_Logger::log_event_str(" unmatched"); |
| } |
| } |
| |
| void ExtendedMessageEndOfMessageAcknowledgement_template::encode_text(Text_Buf& text_buf) const |
| { |
| encode_text_base(text_buf); |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| single_value->field_ctrl.encode_text(text_buf); |
| single_value->field_numberOfBytesTransferred.encode_text(text_buf); |
| single_value->field_pgnOfExtendedPacketedMessage.encode_text(text_buf); |
| case OMIT_VALUE: |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| break; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| text_buf.push_int(value_list.n_values); |
| for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) |
| value_list.list_value[list_count].encode_text(text_buf); |
| break; |
| default: |
| TTCN_error("Text encoder: Encoding an uninitialized/unsupported template of type @IsobusCMMessageTypes.ExtendedMessageEndOfMessageAcknowledgement."); |
| } |
| } |
| |
| void ExtendedMessageEndOfMessageAcknowledgement_template::decode_text(Text_Buf& text_buf) |
| { |
| clean_up(); |
| decode_text_base(text_buf); |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| single_value = new single_value_struct; |
| single_value->field_ctrl.decode_text(text_buf); |
| single_value->field_numberOfBytesTransferred.decode_text(text_buf); |
| single_value->field_pgnOfExtendedPacketedMessage.decode_text(text_buf); |
| case OMIT_VALUE: |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| break; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| value_list.n_values = text_buf.pull_int().get_val(); |
| value_list.list_value = new ExtendedMessageEndOfMessageAcknowledgement_template[value_list.n_values]; |
| for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) |
| value_list.list_value[list_count].decode_text(text_buf); |
| break; |
| default: |
| TTCN_error("Text decoder: An unknown/unsupported selection was received in a template of type @IsobusCMMessageTypes.ExtendedMessageEndOfMessageAcknowledgement."); |
| } |
| } |
| |
| void ExtendedMessageEndOfMessageAcknowledgement_template::set_param(Module_Param& param) |
| { |
| param.basic_check(Module_Param::BC_TEMPLATE, "record template"); |
| switch (param.get_type()) { |
| case Module_Param::MP_Omit: |
| *this = OMIT_VALUE; |
| break; |
| case Module_Param::MP_Any: |
| *this = ANY_VALUE; |
| break; |
| case Module_Param::MP_AnyOrNone: |
| *this = ANY_OR_OMIT; |
| break; |
| case Module_Param::MP_List_Template: |
| case Module_Param::MP_ComplementList_Template: { |
| ExtendedMessageEndOfMessageAcknowledgement_template new_temp; |
| new_temp.set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : COMPLEMENTED_LIST, param.get_size()); |
| for (size_t p_i=0; p_i<param.get_size(); p_i++) { |
| new_temp.list_item(p_i).set_param(*param.get_elem(p_i)); |
| } |
| *this = new_temp; |
| break; } |
| case Module_Param::MP_Value_List: |
| if (3<param.get_size()) { |
| param.error("record template of type @IsobusCMMessageTypes.ExtendedMessageEndOfMessageAcknowledgement has 3 fields but list value has %d fields", (int)param.get_size()); |
| } |
| if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) ctrl().set_param(*param.get_elem(0)); |
| if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) numberOfBytesTransferred().set_param(*param.get_elem(1)); |
| if (param.get_size()>2 && param.get_elem(2)->get_type()!=Module_Param::MP_NotUsed) pgnOfExtendedPacketedMessage().set_param(*param.get_elem(2)); |
| break; |
| case Module_Param::MP_Assignment_List: { |
| Vector<bool> value_used(param.get_size()); |
| value_used.resize(param.get_size(), FALSE); |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "ctrl")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| ctrl().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "numberOfBytesTransferred")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| numberOfBytesTransferred().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "pgnOfExtendedPacketedMessage")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| pgnOfExtendedPacketedMessage().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| curr_param->error("Non existent field name in type @IsobusCMMessageTypes.ExtendedMessageEndOfMessageAcknowledgement: %s", curr_param->get_id()->get_name()); |
| break; |
| } |
| } break; |
| default: |
| param.type_error("record template", "@IsobusCMMessageTypes.ExtendedMessageEndOfMessageAcknowledgement"); |
| } |
| is_ifpresent = param.get_ifpresent(); |
| } |
| |
| void ExtendedMessageEndOfMessageAcknowledgement_template::check_restriction(template_res t_res, const char* t_name, boolean legacy) const |
| { |
| if (template_selection==UNINITIALIZED_TEMPLATE) return; |
| switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) { |
| case TR_OMIT: |
| if (template_selection==OMIT_VALUE) return; |
| case TR_VALUE: |
| if (template_selection!=SPECIFIC_VALUE || is_ifpresent) break; |
| single_value->field_ctrl.check_restriction(t_res, t_name ? t_name : "@IsobusCMMessageTypes.ExtendedMessageEndOfMessageAcknowledgement"); |
| single_value->field_numberOfBytesTransferred.check_restriction(t_res, t_name ? t_name : "@IsobusCMMessageTypes.ExtendedMessageEndOfMessageAcknowledgement"); |
| single_value->field_pgnOfExtendedPacketedMessage.check_restriction(t_res, t_name ? t_name : "@IsobusCMMessageTypes.ExtendedMessageEndOfMessageAcknowledgement"); |
| return; |
| case TR_PRESENT: |
| if (!match_omit(legacy)) return; |
| break; |
| default: |
| return; |
| } |
| TTCN_error("Restriction `%s' on template of type %s violated.", get_res_name(t_res), t_name ? t_name : "@IsobusCMMessageTypes.ExtendedMessageEndOfMessageAcknowledgement"); |
| } |
| |
| boolean ExtendedMessageEndOfMessageAcknowledgement_template::is_present(boolean legacy) const |
| { |
| if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE; |
| return !match_omit(legacy); |
| } |
| |
| boolean ExtendedMessageEndOfMessageAcknowledgement_template::match_omit(boolean legacy) const |
| { |
| if (is_ifpresent) return TRUE; |
| switch (template_selection) { |
| case OMIT_VALUE: |
| case ANY_OR_OMIT: |
| return TRUE; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| if (legacy) { |
| for (unsigned int l_idx=0; l_idx<value_list.n_values; l_idx++) |
| if (value_list.list_value[l_idx].match_omit()) |
| return template_selection==VALUE_LIST; |
| return template_selection==COMPLEMENTED_LIST; |
| } // else fall through |
| default: |
| return FALSE; |
| } |
| return FALSE; |
| } |
| |
| e__ETP__ConnectionAbort__AbortReason::e__ETP__ConnectionAbort__AbortReason() |
| { |
| enum_value = UNBOUND_VALUE; |
| } |
| |
| e__ETP__ConnectionAbort__AbortReason::e__ETP__ConnectionAbort__AbortReason(int other_value) |
| { |
| if (!is_valid_enum(other_value)) TTCN_error("Initializing a variable of enumerated type @IsobusCMMessageTypes.e_ETP_ConnectionAbort_AbortReason with invalid numeric value %d.", other_value); |
| enum_value = (enum_type)other_value; |
| } |
| |
| e__ETP__ConnectionAbort__AbortReason::e__ETP__ConnectionAbort__AbortReason(enum_type other_value) |
| { |
| enum_value = other_value; |
| } |
| |
| e__ETP__ConnectionAbort__AbortReason::e__ETP__ConnectionAbort__AbortReason(const e__ETP__ConnectionAbort__AbortReason& other_value) |
| : Base_Type() |
| { |
| if (other_value.enum_value == UNBOUND_VALUE) TTCN_error("Copying an unbound value of enumerated type @IsobusCMMessageTypes.e_ETP_ConnectionAbort_AbortReason."); |
| enum_value = other_value.enum_value; |
| } |
| |
| e__ETP__ConnectionAbort__AbortReason& e__ETP__ConnectionAbort__AbortReason::operator=(int other_value) |
| { |
| if (!is_valid_enum(other_value)) TTCN_error("Assigning unknown numeric value %d to a variable of enumerated type @IsobusCMMessageTypes.e_ETP_ConnectionAbort_AbortReason.", other_value); |
| enum_value = (enum_type)other_value; |
| return *this; |
| } |
| |
| e__ETP__ConnectionAbort__AbortReason& e__ETP__ConnectionAbort__AbortReason::operator=(enum_type other_value) |
| { |
| enum_value = other_value; |
| return *this; |
| } |
| |
| e__ETP__ConnectionAbort__AbortReason& e__ETP__ConnectionAbort__AbortReason::operator=(const e__ETP__ConnectionAbort__AbortReason& other_value) |
| { |
| if (other_value.enum_value == UNBOUND_VALUE) TTCN_error("Assignment of an unbound value of enumerated type @IsobusCMMessageTypes.e_ETP_ConnectionAbort_AbortReason."); |
| enum_value = other_value.enum_value; |
| return *this; |
| } |
| |
| boolean e__ETP__ConnectionAbort__AbortReason::operator==(enum_type other_value) const |
| { |
| if (enum_value == UNBOUND_VALUE) TTCN_error("The left operand of comparison is an unbound value of enumerated type @IsobusCMMessageTypes.e_ETP_ConnectionAbort_AbortReason."); |
| return enum_value == other_value; |
| } |
| |
| boolean e__ETP__ConnectionAbort__AbortReason::operator==(const e__ETP__ConnectionAbort__AbortReason& other_value) const |
| { |
| if (enum_value == UNBOUND_VALUE) TTCN_error("The left operand of comparison is an unbound value of enumerated type @IsobusCMMessageTypes.e_ETP_ConnectionAbort_AbortReason."); |
| if (other_value.enum_value == UNBOUND_VALUE) TTCN_error("The right operand of comparison is an unbound value of enumerated type @IsobusCMMessageTypes.e_ETP_ConnectionAbort_AbortReason."); |
| return enum_value == other_value.enum_value; |
| } |
| |
| boolean e__ETP__ConnectionAbort__AbortReason::operator<(enum_type other_value) const |
| { |
| if (enum_value == UNBOUND_VALUE) TTCN_error("The left operand of comparison is an unbound value of enumerated type @IsobusCMMessageTypes.e_ETP_ConnectionAbort_AbortReason."); |
| return enum_value < other_value; |
| } |
| |
| boolean e__ETP__ConnectionAbort__AbortReason::operator<(const e__ETP__ConnectionAbort__AbortReason& other_value) const |
| { |
| if (enum_value == UNBOUND_VALUE) TTCN_error("The left operand of comparison is an unbound value of enumerated type @IsobusCMMessageTypes.e_ETP_ConnectionAbort_AbortReason."); |
| if (other_value.enum_value == UNBOUND_VALUE) TTCN_error("The right operand of comparison is an unbound value of enumerated type @IsobusCMMessageTypes.e_ETP_ConnectionAbort_AbortReason."); |
| return enum_value < other_value.enum_value; |
| } |
| |
| boolean e__ETP__ConnectionAbort__AbortReason::operator>(enum_type other_value) const |
| { |
| if (enum_value == UNBOUND_VALUE) TTCN_error("The left operand of comparison is an unbound value of enumerated type @IsobusCMMessageTypes.e_ETP_ConnectionAbort_AbortReason."); |
| return enum_value > other_value; |
| } |
| |
| boolean e__ETP__ConnectionAbort__AbortReason::operator>(const e__ETP__ConnectionAbort__AbortReason& other_value) const |
| { |
| if (enum_value == UNBOUND_VALUE) TTCN_error("The left operand of comparison is an unbound value of enumerated type @IsobusCMMessageTypes.e_ETP_ConnectionAbort_AbortReason."); |
| if (other_value.enum_value == UNBOUND_VALUE) TTCN_error("The right operand of comparison is an unbound value of enumerated type @IsobusCMMessageTypes.e_ETP_ConnectionAbort_AbortReason."); |
| return enum_value > other_value.enum_value; |
| } |
| |
| const char *e__ETP__ConnectionAbort__AbortReason::enum_to_str(enum_type enum_par) |
| { |
| switch (enum_par) { |
| case alreadyInOneOrMoreConnectionManagedSessionsAndCannotSupportAnother: return "alreadyInOneOrMoreConnectionManagedSessionsAndCannotSupportAnother"; |
| case systemResourcesWereNeededForAnotherTaskSoThisConnectionManagedSessionWasTerminated: return "systemResourcesWereNeededForAnotherTaskSoThisConnectionManagedSessionWasTerminated"; |
| case aTimeoutOccurredAndThisIsTheConnectionAbortToCloseTheSession: return "aTimeoutOccurredAndThisIsTheConnectionAbortToCloseTheSession"; |
| case cts__MessagesReceivedWhenDataTransferIsInProgress: return "cts_MessagesReceivedWhenDataTransferIsInProgress"; |
| case maximumRetransmitRequestLimitReached: return "maximumRetransmitRequestLimitReached"; |
| case unexpectedDataTransferPacket: return "unexpectedDataTransferPacket"; |
| case badSequenceNumber: return "badSequenceNumber"; |
| case duplicateSequenceNumber: return "duplicateSequenceNumber"; |
| case unexpectedEDPO__Packet: return "unexpectedEDPO_Packet"; |
| case unexpectedEDPO__PGN: return "unexpectedEDPO_PGN"; |
| case edpo__numberOfPacketsIsGreaterThanCTS: return "edpo_numberOfPacketsIsGreaterThanCTS"; |
| case badEDPO__Offset: return "badEDPO_Offset"; |
| case unexpectedECTS__PGN: return "unexpectedECTS_PGN"; |
| case ECTS__requestedPacketsExceedsMessageSize: return "ECTS_requestedPacketsExceedsMessageSize"; |
| case iso__11783__7__error__code__251: return "iso_11783_7_error_code_251"; |
| case iso__11783__7__error__code__252: return "iso_11783_7_error_code_252"; |
| case iso__11783__7__error__code__253: return "iso_11783_7_error_code_253"; |
| case iso__11783__7__error__code__254: return "iso_11783_7_error_code_254"; |
| case iso__11783__7__error__code__255: return "iso_11783_7_error_code_255"; |
| default: return "<unknown>"; |
| } |
| } |
| |
| e__ETP__ConnectionAbort__AbortReason::enum_type e__ETP__ConnectionAbort__AbortReason::str_to_enum(const char *str_par) |
| { |
| if (!strcmp(str_par, "alreadyInOneOrMoreConnectionManagedSessionsAndCannotSupportAnother")) return alreadyInOneOrMoreConnectionManagedSessionsAndCannotSupportAnother; |
| else if (!strcmp(str_par, "systemResourcesWereNeededForAnotherTaskSoThisConnectionManagedSessionWasTerminated")) return systemResourcesWereNeededForAnotherTaskSoThisConnectionManagedSessionWasTerminated; |
| else if (!strcmp(str_par, "aTimeoutOccurredAndThisIsTheConnectionAbortToCloseTheSession")) return aTimeoutOccurredAndThisIsTheConnectionAbortToCloseTheSession; |
| else if (!strcmp(str_par, "cts_MessagesReceivedWhenDataTransferIsInProgress")) return cts__MessagesReceivedWhenDataTransferIsInProgress; |
| else if (!strcmp(str_par, "maximumRetransmitRequestLimitReached")) return maximumRetransmitRequestLimitReached; |
| else if (!strcmp(str_par, "unexpectedDataTransferPacket")) return unexpectedDataTransferPacket; |
| else if (!strcmp(str_par, "badSequenceNumber")) return badSequenceNumber; |
| else if (!strcmp(str_par, "duplicateSequenceNumber")) return duplicateSequenceNumber; |
| else if (!strcmp(str_par, "unexpectedEDPO_Packet")) return unexpectedEDPO__Packet; |
| else if (!strcmp(str_par, "unexpectedEDPO_PGN")) return unexpectedEDPO__PGN; |
| else if (!strcmp(str_par, "edpo_numberOfPacketsIsGreaterThanCTS")) return edpo__numberOfPacketsIsGreaterThanCTS; |
| else if (!strcmp(str_par, "badEDPO_Offset")) return badEDPO__Offset; |
| else if (!strcmp(str_par, "unexpectedECTS_PGN")) return unexpectedECTS__PGN; |
| else if (!strcmp(str_par, "ECTS_requestedPacketsExceedsMessageSize")) return ECTS__requestedPacketsExceedsMessageSize; |
| else if (!strcmp(str_par, "iso_11783_7_error_code_251")) return iso__11783__7__error__code__251; |
| else if (!strcmp(str_par, "iso_11783_7_error_code_252")) return iso__11783__7__error__code__252; |
| else if (!strcmp(str_par, "iso_11783_7_error_code_253")) return iso__11783__7__error__code__253; |
| else if (!strcmp(str_par, "iso_11783_7_error_code_254")) return iso__11783__7__error__code__254; |
| else if (!strcmp(str_par, "iso_11783_7_error_code_255")) return iso__11783__7__error__code__255; |
| else return UNKNOWN_VALUE; |
| } |
| |
| boolean e__ETP__ConnectionAbort__AbortReason::is_valid_enum(int int_par) |
| { |
| switch (int_par) { |
| case 1: |
| case 2: |
| case 3: |
| case 4: |
| case 5: |
| case 6: |
| case 7: |
| case 8: |
| case 9: |
| case 10: |
| case 11: |
| case 12: |
| case 14: |
| case 15: |
| case 251: |
| case 252: |
| case 253: |
| case 254: |
| case 255: |
| return TRUE; |
| default: |
| return FALSE; |
| } |
| } |
| |
| int e__ETP__ConnectionAbort__AbortReason::enum2int(enum_type enum_par) |
| { |
| if (enum_par==UNBOUND_VALUE || enum_par==UNKNOWN_VALUE) TTCN_error("The argument of function enum2int() is an %s value of enumerated type @IsobusCMMessageTypes.e_ETP_ConnectionAbort_AbortReason.", enum_par==UNBOUND_VALUE?"unbound":"invalid"); |
| return enum_par; |
| } |
| |
| int e__ETP__ConnectionAbort__AbortReason::enum2int(const e__ETP__ConnectionAbort__AbortReason& enum_par) |
| { |
| if (enum_par.enum_value==UNBOUND_VALUE || enum_par.enum_value==UNKNOWN_VALUE) TTCN_error("The argument of function enum2int() is an %s value of enumerated type @IsobusCMMessageTypes.e_ETP_ConnectionAbort_AbortReason.", enum_par==UNBOUND_VALUE?"unbound":"invalid"); |
| return enum_par.enum_value; |
| } |
| |
| void e__ETP__ConnectionAbort__AbortReason::int2enum(int int_val) |
| { |
| if (!is_valid_enum(int_val)) TTCN_error("Assigning invalid numeric value %d to a variable of enumerated type @IsobusCMMessageTypes.e_ETP_ConnectionAbort_AbortReason.", int_val); |
| enum_value = (enum_type)int_val; |
| } |
| |
| e__ETP__ConnectionAbort__AbortReason::operator e__ETP__ConnectionAbort__AbortReason::enum_type() const |
| { |
| if (enum_value == UNBOUND_VALUE) TTCN_error("Using the value of an unbound variable of enumerated type @IsobusCMMessageTypes.e_ETP_ConnectionAbort_AbortReason."); |
| return enum_value; |
| } |
| |
| void e__ETP__ConnectionAbort__AbortReason::log() const |
| { |
| if (enum_value != UNBOUND_VALUE) TTCN_Logger::log_event_enum(enum_to_str(enum_value), enum_value); |
| else TTCN_Logger::log_event_unbound(); |
| } |
| |
| void e__ETP__ConnectionAbort__AbortReason::set_param(Module_Param& param) |
| { |
| param.basic_check(Module_Param::BC_VALUE, "enumerated value"); |
| if (param.get_type()!=Module_Param::MP_Enumerated) param.type_error("enumerated value", "@IsobusCMMessageTypes.e_ETP_ConnectionAbort_AbortReason"); |
| enum_value = str_to_enum(param.get_enumerated()); |
| if (!is_valid_enum(enum_value)) { |
| param.error("Invalid enumerated value for type @IsobusCMMessageTypes.e_ETP_ConnectionAbort_AbortReason."); |
| } |
| } |
| |
| void e__ETP__ConnectionAbort__AbortReason::encode_text(Text_Buf& text_buf) const |
| { |
| if (enum_value == UNBOUND_VALUE) TTCN_error("Text encoder: Encoding an unbound value of enumerated type @IsobusCMMessageTypes.e_ETP_ConnectionAbort_AbortReason."); |
| text_buf.push_int(enum_value); |
| } |
| |
| void e__ETP__ConnectionAbort__AbortReason::decode_text(Text_Buf& text_buf) |
| { |
| enum_value = (enum_type)text_buf.pull_int().get_val(); |
| if (!is_valid_enum(enum_value)) TTCN_error("Text decoder: Unknown numeric value %d was received for enumerated type @IsobusCMMessageTypes.e_ETP_ConnectionAbort_AbortReason.", enum_value); |
| } |
| |
| void e__ETP__ConnectionAbort__AbortReason::encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, TTCN_EncDec::coding_t p_coding, ...) const |
| { |
| va_list pvar; |
| va_start(pvar, p_coding); |
| switch(p_coding) { |
| case TTCN_EncDec::CT_BER: { |
| TTCN_EncDec_ErrorContext ec("While BER-encoding type '%s': ", p_td.name); |
| unsigned BER_coding=va_arg(pvar, unsigned); |
| BER_encode_chk_coding(BER_coding); |
| ASN_BER_TLV_t *tlv=BER_encode_TLV(p_td, BER_coding); |
| tlv->put_in_buffer(p_buf); |
| ASN_BER_TLV_t::destruct(tlv); |
| break;} |
| case TTCN_EncDec::CT_RAW: { |
| TTCN_EncDec_ErrorContext ec("While RAW-encoding type '%s': ", p_td.name); |
| if(!p_td.raw) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No RAW descriptor available for type '%s'.", p_td.name); |
| RAW_enc_tr_pos rp; |
| rp.level=0; |
| rp.pos=NULL; |
| RAW_enc_tree root(TRUE, NULL, &rp, 1, p_td.raw); |
| RAW_encode(p_td, root); |
| root.put_to_buf(p_buf); |
| break;} |
| case TTCN_EncDec::CT_TEXT: { |
| TTCN_EncDec_ErrorContext ec("While TEXT-encoding type '%s': ", p_td.name); |
| if(!p_td.text) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No TEXT descriptor available for type '%s'.", p_td.name); |
| TEXT_encode(p_td,p_buf); |
| break;} |
| case TTCN_EncDec::CT_XER: { |
| TTCN_EncDec_ErrorContext ec("While XER-encoding type '%s': ", p_td.name); |
| unsigned XER_coding=va_arg(pvar, unsigned); |
| XER_encode_chk_coding(XER_coding, p_td); |
| XER_encode(*(p_td.xer),p_buf, XER_coding, 0, 0, 0); |
| p_buf.put_c('\n'); |
| break;} |
| case TTCN_EncDec::CT_JSON: { |
| TTCN_EncDec_ErrorContext ec("While JSON-encoding type '%s': ", p_td.name); |
| if(!p_td.json) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No JSON descriptor available for type '%s'.", p_td.name); |
| JSON_Tokenizer tok(va_arg(pvar, int) != 0); |
| JSON_encode(p_td, tok); |
| p_buf.put_s(tok.get_buffer_length(), (const unsigned char*)tok.get_buffer()); |
| break;} |
| case TTCN_EncDec::CT_OER: { |
| TTCN_EncDec_ErrorContext ec("While OER-encoding type '%s': ", p_td.name); |
| if(!p_td.oer) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No OER descriptor available for type '%s'.", p_td.name); |
| OER_encode(p_td, p_buf); |
| break;} |
| default: |
| TTCN_error("Unknown coding method requested to encode type '%s'", p_td.name); |
| } |
| va_end(pvar); |
| } |
| |
| void e__ETP__ConnectionAbort__AbortReason::decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, TTCN_EncDec::coding_t p_coding, ...) |
| { |
| va_list pvar; |
| va_start(pvar, p_coding); |
| switch(p_coding) { |
| case TTCN_EncDec::CT_BER: { |
| TTCN_EncDec_ErrorContext ec("While BER-decoding type '%s': ", p_td.name); |
| unsigned L_form=va_arg(pvar, unsigned); |
| ASN_BER_TLV_t tlv; |
| BER_decode_str2TLV(p_buf, tlv, L_form); |
| BER_decode_TLV(p_td, tlv, L_form); |
| if(tlv.isComplete) p_buf.increase_pos(tlv.get_len()); |
| break;} |
| case TTCN_EncDec::CT_RAW: { |
| TTCN_EncDec_ErrorContext ec("While RAW-decoding type '%s': ", p_td.name); |
| if(!p_td.raw) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No RAW descriptor available for type '%s'.", p_td.name); |
| raw_order_t r_order; |
| switch(p_td.raw->top_bit_order) { |
| case TOP_BIT_LEFT: |
| r_order=ORDER_LSB; |
| break; |
| case TOP_BIT_RIGHT: |
| default: |
| r_order=ORDER_MSB; |
| } |
| int rawr = RAW_decode(p_td, p_buf, p_buf.get_len()*8, r_order); |
| if(rawr<0) switch (-rawr) { |
| case TTCN_EncDec::ET_INCOMPL_MSG: |
| case TTCN_EncDec::ET_LEN_ERR: |
| ec.error((TTCN_EncDec::error_type_t)-rawr, "Can not decode type '%s', because incomplete message was received", p_td.name); |
| break; |
| case 1: |
| default: |
| ec.error(TTCN_EncDec::ET_INVAL_MSG, "Can not decode type '%s', because invalid message was received", p_td.name); |
| break; |
| } |
| break;} |
| case TTCN_EncDec::CT_TEXT: { |
| Limit_Token_List limit; |
| TTCN_EncDec_ErrorContext ec("While TEXT-decoding type '%s': ", p_td.name); |
| if(!p_td.text) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No TEXT descriptor available for type '%s'.", p_td.name); |
| const unsigned char *b_data=p_buf.get_data(); |
| if(b_data[p_buf.get_len()-1]!='\0'){ |
| p_buf.set_pos(p_buf.get_len()); |
| p_buf.put_zero(8,ORDER_LSB); |
| p_buf.rewind(); |
| } |
| if(TEXT_decode(p_td,p_buf,limit)<0) |
| ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name); |
| break;} |
| case TTCN_EncDec::CT_XER: { |
| TTCN_EncDec_ErrorContext ec("While XER-decoding type '%s': ", p_td.name); |
| unsigned XER_coding=va_arg(pvar, unsigned); |
| XER_encode_chk_coding(XER_coding, p_td); |
| XmlReaderWrap reader(p_buf); |
| for (int rd_ok=reader.Read(); rd_ok==1; rd_ok=reader.Read()) { |
| if (reader.NodeType() == XML_READER_TYPE_ELEMENT) break; |
| } |
| XER_decode(*(p_td.xer), reader, XER_coding | XER_TOPLEVEL, XER_NONE, 0); |
| size_t bytes = reader.ByteConsumed(); |
| p_buf.set_pos(bytes); |
| break;} |
| case TTCN_EncDec::CT_JSON: { |
| TTCN_EncDec_ErrorContext ec("While JSON-decoding type '%s': ", p_td.name); |
| if(!p_td.json) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No JSON descriptor available for type '%s'.", p_td.name); |
| JSON_Tokenizer tok((const char*)p_buf.get_data(), p_buf.get_len()); |
| if(JSON_decode(p_td, tok, FALSE)<0) |
| ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name); |
| p_buf.set_pos(tok.get_buf_pos()); |
| break;} |
| case TTCN_EncDec::CT_OER: { |
| TTCN_EncDec_ErrorContext ec("While OER-decoding type '%s': ", p_td.name); |
| if(!p_td.oer) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No OER descriptor available for type '%s'.", p_td.name); |
| OER_struct p_oer; |
| OER_decode(p_td, p_buf, p_oer); |
| break;} |
| default: |
| TTCN_error("Unknown coding method requested to decode type '%s'", p_td.name); |
| } |
| va_end(pvar); |
| } |
| |
| int e__ETP__ConnectionAbort__AbortReason::RAW_decode(const TTCN_Typedescriptor_t& p_td,TTCN_Buffer& p_buf,int limit, raw_order_t top_bit_ord, boolean no_err, int, boolean, const RAW_Force_Omit*) |
| { |
| int decoded_value = 0; |
| int decoded_length = RAW_decode_enum_type(p_td, p_buf, limit, top_bit_ord, decoded_value, 8, no_err); |
| if (decoded_length < 0) return decoded_length; |
| if (is_valid_enum(decoded_value)) enum_value = (enum_type)decoded_value; |
| else { |
| if(no_err){ |
| return -1; |
| } else { |
| TTCN_EncDec_ErrorContext::error |
| (TTCN_EncDec::ET_ENC_ENUM, "Invalid enum value '%d' for '%s': ",decoded_value, p_td.name); |
| enum_value = UNKNOWN_VALUE; |
| } |
| } |
| return decoded_length; |
| } |
| |
| int e__ETP__ConnectionAbort__AbortReason::RAW_encode(const TTCN_Typedescriptor_t& p_td, RAW_enc_tree& myleaf) const |
| { |
| return RAW_encode_enum_type(p_td, myleaf, (int)enum_value, 8); |
| } |
| |
| void e__ETP__ConnectionAbort__AbortReason_template::copy_template(const e__ETP__ConnectionAbort__AbortReason_template& other_value) |
| { |
| set_selection(other_value); |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| single_value = other_value.single_value; |
| break; |
| case OMIT_VALUE: |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| break; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| value_list.n_values = other_value.value_list.n_values; |
| value_list.list_value = new e__ETP__ConnectionAbort__AbortReason_template[value_list.n_values]; |
| for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) |
| value_list.list_value[list_count].copy_template(other_value.value_list.list_value[list_count]); |
| break; |
| default: |
| TTCN_error("Copying an uninitialized/unsupported template of enumerated type @IsobusCMMessageTypes.e_ETP_ConnectionAbort_AbortReason."); |
| } |
| } |
| |
| e__ETP__ConnectionAbort__AbortReason_template::e__ETP__ConnectionAbort__AbortReason_template() |
| { |
| } |
| |
| e__ETP__ConnectionAbort__AbortReason_template::e__ETP__ConnectionAbort__AbortReason_template(template_sel other_value) |
| : Base_Template(other_value) |
| { |
| check_single_selection(other_value); |
| } |
| |
| e__ETP__ConnectionAbort__AbortReason_template::e__ETP__ConnectionAbort__AbortReason_template(int other_value) |
| : Base_Template(SPECIFIC_VALUE) |
| { |
| if (!e__ETP__ConnectionAbort__AbortReason::is_valid_enum(other_value)) TTCN_error("Initializing a template of enumerated type @IsobusCMMessageTypes.e_ETP_ConnectionAbort_AbortReason with unknown numeric value %d.", other_value); |
| single_value = (e__ETP__ConnectionAbort__AbortReason::enum_type)other_value; |
| } |
| |
| e__ETP__ConnectionAbort__AbortReason_template::e__ETP__ConnectionAbort__AbortReason_template(e__ETP__ConnectionAbort__AbortReason::enum_type other_value) |
| : Base_Template(SPECIFIC_VALUE) |
| { |
| single_value = other_value; |
| } |
| |
| e__ETP__ConnectionAbort__AbortReason_template::e__ETP__ConnectionAbort__AbortReason_template(const e__ETP__ConnectionAbort__AbortReason& other_value) |
| : Base_Template(SPECIFIC_VALUE) |
| { |
| if (other_value.enum_value == e__ETP__ConnectionAbort__AbortReason::UNBOUND_VALUE) TTCN_error("Creating a template from an unbound value of enumerated type @IsobusCMMessageTypes.e_ETP_ConnectionAbort_AbortReason."); |
| single_value = other_value.enum_value; |
| } |
| |
| e__ETP__ConnectionAbort__AbortReason_template::e__ETP__ConnectionAbort__AbortReason_template(const OPTIONAL<e__ETP__ConnectionAbort__AbortReason>& other_value) |
| { |
| switch (other_value.get_selection()) { |
| case OPTIONAL_PRESENT: |
| set_selection(SPECIFIC_VALUE); |
| single_value = (e__ETP__ConnectionAbort__AbortReason::enum_type)(const e__ETP__ConnectionAbort__AbortReason&)other_value; |
| break; |
| case OPTIONAL_OMIT: |
| set_selection(OMIT_VALUE); |
| break; |
| default: |
| TTCN_error("Creating a template of enumerated type @IsobusCMMessageTypes.e_ETP_ConnectionAbort_AbortReason from an unbound optional field."); |
| } |
| } |
| |
| e__ETP__ConnectionAbort__AbortReason_template::e__ETP__ConnectionAbort__AbortReason_template(const e__ETP__ConnectionAbort__AbortReason_template& other_value) |
| : Base_Template() |
| { |
| copy_template(other_value); |
| } |
| |
| e__ETP__ConnectionAbort__AbortReason_template::~e__ETP__ConnectionAbort__AbortReason_template() |
| { |
| clean_up(); |
| } |
| |
| boolean e__ETP__ConnectionAbort__AbortReason_template::is_bound() const |
| { |
| if (template_selection == UNINITIALIZED_TEMPLATE && !is_ifpresent) return FALSE; |
| return TRUE; |
| } |
| |
| boolean e__ETP__ConnectionAbort__AbortReason_template::is_value() const |
| { |
| if (template_selection != SPECIFIC_VALUE || is_ifpresent) return FALSE; |
| return single_value != e__ETP__ConnectionAbort__AbortReason::UNBOUND_VALUE; |
| } |
| |
| void e__ETP__ConnectionAbort__AbortReason_template::clean_up() |
| { |
| if (template_selection == VALUE_LIST || template_selection == COMPLEMENTED_LIST) delete [] value_list.list_value; |
| template_selection = UNINITIALIZED_TEMPLATE; |
| } |
| |
| e__ETP__ConnectionAbort__AbortReason_template& e__ETP__ConnectionAbort__AbortReason_template::operator=(template_sel other_value) |
| { |
| check_single_selection(other_value); |
| clean_up(); |
| set_selection(other_value); |
| return *this; |
| } |
| |
| e__ETP__ConnectionAbort__AbortReason_template& e__ETP__ConnectionAbort__AbortReason_template::operator=(int other_value) |
| { |
| if (!e__ETP__ConnectionAbort__AbortReason::is_valid_enum(other_value)) TTCN_warning("Assigning unknown numeric value %d to a template of enumerated type @IsobusCMMessageTypes.e_ETP_ConnectionAbort_AbortReason.", other_value); |
| clean_up(); |
| set_selection(SPECIFIC_VALUE); |
| single_value = (e__ETP__ConnectionAbort__AbortReason::enum_type)other_value; |
| return *this; |
| } |
| |
| e__ETP__ConnectionAbort__AbortReason_template& e__ETP__ConnectionAbort__AbortReason_template::operator=(e__ETP__ConnectionAbort__AbortReason::enum_type other_value) |
| { |
| clean_up(); |
| set_selection(SPECIFIC_VALUE); |
| single_value = other_value; |
| return *this; |
| } |
| |
| e__ETP__ConnectionAbort__AbortReason_template& e__ETP__ConnectionAbort__AbortReason_template::operator=(const e__ETP__ConnectionAbort__AbortReason& other_value) |
| { |
| if (other_value.enum_value == e__ETP__ConnectionAbort__AbortReason::UNBOUND_VALUE) TTCN_error("Assignment of an unbound value of enumerated type @IsobusCMMessageTypes.e_ETP_ConnectionAbort_AbortReason to a template."); |
| clean_up(); |
| set_selection(SPECIFIC_VALUE); |
| single_value = other_value.enum_value; |
| return *this; |
| } |
| |
| e__ETP__ConnectionAbort__AbortReason_template& e__ETP__ConnectionAbort__AbortReason_template::operator=(const OPTIONAL<e__ETP__ConnectionAbort__AbortReason>& other_value) |
| { |
| clean_up(); |
| switch (other_value.get_selection()) { |
| case OPTIONAL_PRESENT: |
| set_selection(SPECIFIC_VALUE); |
| single_value = (e__ETP__ConnectionAbort__AbortReason::enum_type)(const e__ETP__ConnectionAbort__AbortReason&)other_value; |
| break; |
| case OPTIONAL_OMIT: |
| set_selection(OMIT_VALUE); |
| break; |
| default: |
| TTCN_error("Assignment of an unbound optional field to a template of enumerated type @IsobusCMMessageTypes.e_ETP_ConnectionAbort_AbortReason."); |
| } |
| return *this; |
| } |
| |
| e__ETP__ConnectionAbort__AbortReason_template& e__ETP__ConnectionAbort__AbortReason_template::operator=(const e__ETP__ConnectionAbort__AbortReason_template& other_value) |
| { |
| if (&other_value != this) { |
| clean_up(); |
| copy_template(other_value); |
| } |
| return *this; |
| } |
| |
| boolean e__ETP__ConnectionAbort__AbortReason_template::match(e__ETP__ConnectionAbort__AbortReason::enum_type other_value, boolean) const |
| { |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| return single_value == other_value; |
| case OMIT_VALUE: |
| return FALSE; |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| return TRUE; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) |
| if (value_list.list_value[list_count].match(other_value)) return template_selection == VALUE_LIST; |
| return template_selection == COMPLEMENTED_LIST; |
| default: |
| TTCN_error("Matching an uninitialized/unsupported template of enumerated type @IsobusCMMessageTypes.e_ETP_ConnectionAbort_AbortReason."); |
| } |
| return FALSE; |
| } |
| |
| boolean e__ETP__ConnectionAbort__AbortReason_template::match(const e__ETP__ConnectionAbort__AbortReason& other_value, boolean) const |
| { |
| if (other_value.enum_value == e__ETP__ConnectionAbort__AbortReason::UNBOUND_VALUE) TTCN_error("Matching a template of enumerated type @IsobusCMMessageTypes.e_ETP_ConnectionAbort_AbortReason with an unbound value."); |
| return match(other_value.enum_value); |
| } |
| |
| e__ETP__ConnectionAbort__AbortReason::enum_type e__ETP__ConnectionAbort__AbortReason_template::valueof() const |
| { |
| if (template_selection != SPECIFIC_VALUE || is_ifpresent) TTCN_error("Performing a valueof or send operation on a non-specific template of enumerated type @IsobusCMMessageTypes.e_ETP_ConnectionAbort_AbortReason."); |
| return single_value; |
| } |
| |
| void e__ETP__ConnectionAbort__AbortReason_template::set_type(template_sel template_type, unsigned int list_length) |
| { |
| if (template_type != VALUE_LIST && template_type != COMPLEMENTED_LIST) TTCN_error("Setting an invalid list type for a template of enumerated type @IsobusCMMessageTypes.e_ETP_ConnectionAbort_AbortReason."); |
| clean_up(); |
| set_selection(template_type); |
| value_list.n_values = list_length; |
| value_list.list_value = new e__ETP__ConnectionAbort__AbortReason_template[list_length]; |
| } |
| |
| e__ETP__ConnectionAbort__AbortReason_template& e__ETP__ConnectionAbort__AbortReason_template::list_item(unsigned int list_index) |
| { |
| if (template_selection != VALUE_LIST && template_selection != COMPLEMENTED_LIST) TTCN_error("Accessing a list element in a non-list template of enumerated type @IsobusCMMessageTypes.e_ETP_ConnectionAbort_AbortReason."); |
| if (list_index >= value_list.n_values) TTCN_error("Index overflow in a value list template of enumerated type @IsobusCMMessageTypes.e_ETP_ConnectionAbort_AbortReason."); |
| return value_list.list_value[list_index]; |
| } |
| |
| void e__ETP__ConnectionAbort__AbortReason_template::log() const |
| { |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| TTCN_Logger::log_event_enum(e__ETP__ConnectionAbort__AbortReason::enum_to_str(single_value), single_value); |
| break; |
| case COMPLEMENTED_LIST: |
| TTCN_Logger::log_event_str("complement"); |
| case VALUE_LIST: |
| TTCN_Logger::log_char('('); |
| for (unsigned int elem_count = 0; elem_count < value_list.n_values; elem_count++) { |
| if (elem_count > 0) TTCN_Logger::log_event_str(", "); |
| value_list.list_value[elem_count].log(); |
| } |
| TTCN_Logger::log_char(')'); |
| break; |
| default: |
| log_generic(); |
| } |
| log_ifpresent(); |
| } |
| |
| void e__ETP__ConnectionAbort__AbortReason_template::log_match(const e__ETP__ConnectionAbort__AbortReason& match_value, boolean) const |
| { |
| match_value.log(); |
| TTCN_Logger::log_event_str(" with "); |
| log(); |
| if (match(match_value)) TTCN_Logger::log_event_str(" matched"); |
| else TTCN_Logger::log_event_str(" unmatched"); |
| } |
| |
| void e__ETP__ConnectionAbort__AbortReason_template::encode_text(Text_Buf& text_buf) const |
| { |
| encode_text_base(text_buf); |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| text_buf.push_int(single_value); |
| case OMIT_VALUE: |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| break; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| text_buf.push_int(value_list.n_values); |
| for (unsigned int elem_count = 0; elem_count < value_list.n_values; elem_count++) |
| value_list.list_value[elem_count].encode_text(text_buf); |
| break; |
| default: |
| TTCN_error("Text encoder: Encoding an uninitialized/unsupported template of enumerated type @IsobusCMMessageTypes.e_ETP_ConnectionAbort_AbortReason."); |
| } |
| } |
| |
| void e__ETP__ConnectionAbort__AbortReason_template::decode_text(Text_Buf& text_buf) |
| { |
| clean_up(); |
| decode_text_base(text_buf); |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| single_value = (e__ETP__ConnectionAbort__AbortReason::enum_type)text_buf.pull_int().get_val(); |
| if (!e__ETP__ConnectionAbort__AbortReason::is_valid_enum(single_value)) TTCN_error("Text decoder: Unknown numeric value %d was received for a template of enumerated type @IsobusCMMessageTypes.e_ETP_ConnectionAbort_AbortReason.", single_value); |
| case OMIT_VALUE: |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| break; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| value_list.n_values = text_buf.pull_int().get_val(); |
| value_list.list_value = new e__ETP__ConnectionAbort__AbortReason_template[value_list.n_values]; |
| for (unsigned int elem_count = 0; elem_count < value_list.n_values; elem_count++) |
| value_list.list_value[elem_count].decode_text(text_buf); |
| break; |
| default: |
| TTCN_error("Text decoder: An unknown/unsupported selection was received for a template of enumerated type @IsobusCMMessageTypes.e_ETP_ConnectionAbort_AbortReason."); |
| } |
| } |
| |
| boolean e__ETP__ConnectionAbort__AbortReason_template::is_present(boolean legacy) const |
| { |
| if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE; |
| return !match_omit(legacy); |
| } |
| |
| boolean e__ETP__ConnectionAbort__AbortReason_template::match_omit(boolean legacy) const |
| { |
| if (is_ifpresent) return TRUE; |
| switch (template_selection) { |
| case OMIT_VALUE: |
| case ANY_OR_OMIT: |
| return TRUE; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| if (legacy) { |
| for (unsigned int i=0; i<value_list.n_values; i++) |
| if (value_list.list_value[i].match_omit()) |
| return template_selection==VALUE_LIST; |
| return template_selection==COMPLEMENTED_LIST; |
| } // else fall through |
| default: |
| return FALSE; |
| } |
| return FALSE; |
| } |
| |
| void e__ETP__ConnectionAbort__AbortReason_template::set_param(Module_Param& param) |
| { |
| param.basic_check(Module_Param::BC_TEMPLATE, "enumerated template"); |
| Module_Param_Ptr m_p = ¶m; |
| switch (m_p->get_type()) { |
| case Module_Param::MP_Omit: |
| *this = OMIT_VALUE; |
| break; |
| case Module_Param::MP_Any: |
| *this = ANY_VALUE; |
| break; |
| case Module_Param::MP_AnyOrNone: |
| *this = ANY_OR_OMIT; |
| break; |
| case Module_Param::MP_List_Template: |
| case Module_Param::MP_ComplementList_Template: { |
| e__ETP__ConnectionAbort__AbortReason_template new_temp; |
| new_temp.set_type(m_p->get_type()==Module_Param::MP_List_Template ? VALUE_LIST : COMPLEMENTED_LIST, m_p->get_size()); |
| for (size_t p_i=0; p_i<m_p->get_size(); p_i++) { |
| new_temp.list_item(p_i).set_param(*m_p->get_elem(p_i)); |
| } |
| *this = new_temp; |
| break; } |
| case Module_Param::MP_Enumerated: { |
| e__ETP__ConnectionAbort__AbortReason::enum_type enum_val = e__ETP__ConnectionAbort__AbortReason::str_to_enum(m_p->get_enumerated()); |
| if (!e__ETP__ConnectionAbort__AbortReason::is_valid_enum(enum_val)) { |
| param.error("Invalid enumerated value for type @IsobusCMMessageTypes.e_ETP_ConnectionAbort_AbortReason."); |
| } |
| *this = enum_val; |
| } break; |
| default: |
| param.type_error("enumerated template", "@IsobusCMMessageTypes.e_ETP_ConnectionAbort_AbortReason"); |
| } |
| is_ifpresent = param.get_ifpresent(); |
| } |
| |
| void e__ETP__ConnectionAbort__AbortReason_template::check_restriction(template_res t_res, const char* t_name, |
| boolean legacy) const |
| { |
| if (template_selection==UNINITIALIZED_TEMPLATE) return; |
| switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) { |
| case TR_VALUE: |
| if (!is_ifpresent && template_selection==SPECIFIC_VALUE) return; |
| break; |
| case TR_OMIT: |
| if (!is_ifpresent && (template_selection==OMIT_VALUE || template_selection==SPECIFIC_VALUE)) return; |
| break; |
| case TR_PRESENT: |
| if (!match_omit(legacy)) return; |
| break; |
| default: |
| return; |
| } |
| TTCN_error("Restriction `%s' on template of type %s violated.", get_res_name(t_res), t_name ? t_name : "@IsobusCMMessageTypes.e_ETP_ConnectionAbort_AbortReason"); |
| } |
| |
| ExtendedMessageConnectionAbort::ExtendedMessageConnectionAbort() |
| { |
| } |
| |
| ExtendedMessageConnectionAbort::ExtendedMessageConnectionAbort(const OCTETSTRING& par_ctrl, |
| const e__ETP__ConnectionAbort__AbortReason& par_connectionAbortReason, |
| const OCTETSTRING& par_reserved3, |
| const OCTETSTRING& par_reserved4, |
| const OCTETSTRING& par_reserved5, |
| const INTEGER& par_pgnOfExtendedPacketedMessage) |
| : field_ctrl(par_ctrl), |
| field_connectionAbortReason(par_connectionAbortReason), |
| field_reserved3(par_reserved3), |
| field_reserved4(par_reserved4), |
| field_reserved5(par_reserved5), |
| field_pgnOfExtendedPacketedMessage(par_pgnOfExtendedPacketedMessage) |
| { |
| } |
| |
| ExtendedMessageConnectionAbort::ExtendedMessageConnectionAbort(const ExtendedMessageConnectionAbort& other_value) |
| { |
| if(!other_value.is_bound()) TTCN_error("Copying an unbound value of type @IsobusCMMessageTypes.ExtendedMessageConnectionAbort."); |
| if (other_value.ctrl().is_bound()) field_ctrl = other_value.ctrl(); |
| else field_ctrl.clean_up(); |
| if (other_value.connectionAbortReason().is_bound()) field_connectionAbortReason = other_value.connectionAbortReason(); |
| else field_connectionAbortReason.clean_up(); |
| if (other_value.reserved3().is_bound()) field_reserved3 = other_value.reserved3(); |
| else field_reserved3.clean_up(); |
| if (other_value.reserved4().is_bound()) field_reserved4 = other_value.reserved4(); |
| else field_reserved4.clean_up(); |
| if (other_value.reserved5().is_bound()) field_reserved5 = other_value.reserved5(); |
| else field_reserved5.clean_up(); |
| if (other_value.pgnOfExtendedPacketedMessage().is_bound()) field_pgnOfExtendedPacketedMessage = other_value.pgnOfExtendedPacketedMessage(); |
| else field_pgnOfExtendedPacketedMessage.clean_up(); |
| } |
| |
| void ExtendedMessageConnectionAbort::clean_up() |
| { |
| field_ctrl.clean_up(); |
| field_connectionAbortReason.clean_up(); |
| field_reserved3.clean_up(); |
| field_reserved4.clean_up(); |
| field_reserved5.clean_up(); |
| field_pgnOfExtendedPacketedMessage.clean_up(); |
| } |
| |
| const TTCN_Typedescriptor_t* ExtendedMessageConnectionAbort::get_descriptor() const { return &ExtendedMessageConnectionAbort_descr_; } |
| ExtendedMessageConnectionAbort& ExtendedMessageConnectionAbort::operator=(const ExtendedMessageConnectionAbort& other_value) |
| { |
| if (this != &other_value) { |
| if(!other_value.is_bound()) TTCN_error("Assignment of an unbound value of type @IsobusCMMessageTypes.ExtendedMessageConnectionAbort."); |
| if (other_value.ctrl().is_bound()) field_ctrl = other_value.ctrl(); |
| else field_ctrl.clean_up(); |
| if (other_value.connectionAbortReason().is_bound()) field_connectionAbortReason = other_value.connectionAbortReason(); |
| else field_connectionAbortReason.clean_up(); |
| if (other_value.reserved3().is_bound()) field_reserved3 = other_value.reserved3(); |
| else field_reserved3.clean_up(); |
| if (other_value.reserved4().is_bound()) field_reserved4 = other_value.reserved4(); |
| else field_reserved4.clean_up(); |
| if (other_value.reserved5().is_bound()) field_reserved5 = other_value.reserved5(); |
| else field_reserved5.clean_up(); |
| if (other_value.pgnOfExtendedPacketedMessage().is_bound()) field_pgnOfExtendedPacketedMessage = other_value.pgnOfExtendedPacketedMessage(); |
| else field_pgnOfExtendedPacketedMessage.clean_up(); |
| } |
| return *this; |
| } |
| |
| boolean ExtendedMessageConnectionAbort::operator==(const ExtendedMessageConnectionAbort& other_value) const |
| { |
| return field_ctrl==other_value.field_ctrl |
| && field_connectionAbortReason==other_value.field_connectionAbortReason |
| && field_reserved3==other_value.field_reserved3 |
| && field_reserved4==other_value.field_reserved4 |
| && field_reserved5==other_value.field_reserved5 |
| && field_pgnOfExtendedPacketedMessage==other_value.field_pgnOfExtendedPacketedMessage; |
| } |
| |
| boolean ExtendedMessageConnectionAbort::is_bound() const |
| { |
| return (field_ctrl.is_bound()) |
| || (field_connectionAbortReason.is_bound()) |
| || (field_reserved3.is_bound()) |
| || (field_reserved4.is_bound()) |
| || (field_reserved5.is_bound()) |
| || (field_pgnOfExtendedPacketedMessage.is_bound()); |
| } |
| boolean ExtendedMessageConnectionAbort::is_value() const |
| { |
| return field_ctrl.is_value() |
| && field_connectionAbortReason.is_value() |
| && field_reserved3.is_value() |
| && field_reserved4.is_value() |
| && field_reserved5.is_value() |
| && field_pgnOfExtendedPacketedMessage.is_value(); |
| } |
| void ExtendedMessageConnectionAbort::log() const |
| { |
| if (!is_bound()) { |
| TTCN_Logger::log_event_unbound(); |
| return; |
| } |
| TTCN_Logger::log_event_str("{ ctrl := "); |
| field_ctrl.log(); |
| TTCN_Logger::log_event_str(", connectionAbortReason := "); |
| field_connectionAbortReason.log(); |
| TTCN_Logger::log_event_str(", reserved3 := "); |
| field_reserved3.log(); |
| TTCN_Logger::log_event_str(", reserved4 := "); |
| field_reserved4.log(); |
| TTCN_Logger::log_event_str(", reserved5 := "); |
| field_reserved5.log(); |
| TTCN_Logger::log_event_str(", pgnOfExtendedPacketedMessage := "); |
| field_pgnOfExtendedPacketedMessage.log(); |
| TTCN_Logger::log_event_str(" }"); |
| } |
| |
| void ExtendedMessageConnectionAbort::set_param(Module_Param& param) |
| { |
| param.basic_check(Module_Param::BC_VALUE, "record value"); |
| switch (param.get_type()) { |
| case Module_Param::MP_Value_List: |
| if (6<param.get_size()) { |
| param.error("record value of type @IsobusCMMessageTypes.ExtendedMessageConnectionAbort has 6 fields but list value has %d fields", (int)param.get_size()); |
| } |
| if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) ctrl().set_param(*param.get_elem(0)); |
| if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) connectionAbortReason().set_param(*param.get_elem(1)); |
| if (param.get_size()>2 && param.get_elem(2)->get_type()!=Module_Param::MP_NotUsed) reserved3().set_param(*param.get_elem(2)); |
| if (param.get_size()>3 && param.get_elem(3)->get_type()!=Module_Param::MP_NotUsed) reserved4().set_param(*param.get_elem(3)); |
| if (param.get_size()>4 && param.get_elem(4)->get_type()!=Module_Param::MP_NotUsed) reserved5().set_param(*param.get_elem(4)); |
| if (param.get_size()>5 && param.get_elem(5)->get_type()!=Module_Param::MP_NotUsed) pgnOfExtendedPacketedMessage().set_param(*param.get_elem(5)); |
| break; |
| case Module_Param::MP_Assignment_List: { |
| Vector<bool> value_used(param.get_size()); |
| value_used.resize(param.get_size(), FALSE); |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "ctrl")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| ctrl().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "connectionAbortReason")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| connectionAbortReason().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "reserved3")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| reserved3().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "reserved4")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| reserved4().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "reserved5")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| reserved5().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "pgnOfExtendedPacketedMessage")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| pgnOfExtendedPacketedMessage().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| curr_param->error("Non existent field name in type @IsobusCMMessageTypes.ExtendedMessageConnectionAbort: %s", curr_param->get_id()->get_name()); |
| break; |
| } |
| } break; |
| default: |
| param.type_error("record value", "@IsobusCMMessageTypes.ExtendedMessageConnectionAbort"); |
| } |
| } |
| |
| void ExtendedMessageConnectionAbort::set_implicit_omit() |
| { |
| if (ctrl().is_bound()) ctrl().set_implicit_omit(); |
| if (connectionAbortReason().is_bound()) connectionAbortReason().set_implicit_omit(); |
| if (reserved3().is_bound()) reserved3().set_implicit_omit(); |
| if (reserved4().is_bound()) reserved4().set_implicit_omit(); |
| if (reserved5().is_bound()) reserved5().set_implicit_omit(); |
| if (pgnOfExtendedPacketedMessage().is_bound()) pgnOfExtendedPacketedMessage().set_implicit_omit(); |
| } |
| |
| void ExtendedMessageConnectionAbort::encode_text(Text_Buf& text_buf) const |
| { |
| field_ctrl.encode_text(text_buf); |
| field_connectionAbortReason.encode_text(text_buf); |
| field_reserved3.encode_text(text_buf); |
| field_reserved4.encode_text(text_buf); |
| field_reserved5.encode_text(text_buf); |
| field_pgnOfExtendedPacketedMessage.encode_text(text_buf); |
| } |
| |
| void ExtendedMessageConnectionAbort::decode_text(Text_Buf& text_buf) |
| { |
| field_ctrl.decode_text(text_buf); |
| field_connectionAbortReason.decode_text(text_buf); |
| field_reserved3.decode_text(text_buf); |
| field_reserved4.decode_text(text_buf); |
| field_reserved5.decode_text(text_buf); |
| field_pgnOfExtendedPacketedMessage.decode_text(text_buf); |
| } |
| |
| void ExtendedMessageConnectionAbort::encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, TTCN_EncDec::coding_t p_coding, ...) const |
| { |
| va_list pvar; |
| va_start(pvar, p_coding); |
| switch(p_coding) { |
| case TTCN_EncDec::CT_BER: { |
| TTCN_EncDec_ErrorContext ec("While BER-encoding type '%s': ", p_td.name); |
| unsigned BER_coding=va_arg(pvar, unsigned); |
| BER_encode_chk_coding(BER_coding); |
| ASN_BER_TLV_t *tlv=BER_encode_TLV(p_td, BER_coding); |
| tlv->put_in_buffer(p_buf); |
| ASN_BER_TLV_t::destruct(tlv); |
| break;} |
| case TTCN_EncDec::CT_RAW: { |
| TTCN_EncDec_ErrorContext ec("While RAW-encoding type '%s': ", p_td.name); |
| if(!p_td.raw) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No RAW descriptor available for type '%s'.", p_td.name); |
| RAW_enc_tr_pos rp; |
| rp.level=0; |
| rp.pos=NULL; |
| RAW_enc_tree root(FALSE, NULL, &rp, 1, p_td.raw); |
| RAW_encode(p_td, root); |
| root.put_to_buf(p_buf); |
| break;} |
| case TTCN_EncDec::CT_TEXT: { |
| TTCN_EncDec_ErrorContext ec("While TEXT-encoding type '%s': ", p_td.name); |
| if(!p_td.text) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No TEXT descriptor available for type '%s'.", p_td.name); |
| TEXT_encode(p_td,p_buf); |
| break;} |
| case TTCN_EncDec::CT_XER: { |
| TTCN_EncDec_ErrorContext ec("While XER-encoding type '%s': ", p_td.name); |
| unsigned XER_coding=va_arg(pvar, unsigned); |
| XER_encode_chk_coding(XER_coding, p_td); |
| XER_encode(*(p_td.xer),p_buf, XER_coding, 0, 0, 0); |
| p_buf.put_c('\n'); |
| break;} |
| case TTCN_EncDec::CT_JSON: { |
| TTCN_EncDec_ErrorContext ec("While JSON-encoding type '%s': ", p_td.name); |
| if(!p_td.json) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No JSON descriptor available for type '%s'.", p_td.name); |
| JSON_Tokenizer tok(va_arg(pvar, int) != 0); |
| JSON_encode(p_td, tok); |
| p_buf.put_s(tok.get_buffer_length(), (const unsigned char*)tok.get_buffer()); |
| break;} |
| case TTCN_EncDec::CT_OER: { |
| TTCN_EncDec_ErrorContext ec("While OER-encoding type '%s': ", p_td.name); |
| if(!p_td.oer) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No OER descriptor available for type '%s'.", p_td.name); |
| OER_encode(p_td, p_buf); |
| break;} |
| default: |
| TTCN_error("Unknown coding method requested to encode type '%s'", p_td.name); |
| } |
| va_end(pvar); |
| } |
| |
| void ExtendedMessageConnectionAbort::decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, TTCN_EncDec::coding_t p_coding, ...) |
| { |
| va_list pvar; |
| va_start(pvar, p_coding); |
| switch(p_coding) { |
| case TTCN_EncDec::CT_BER: { |
| TTCN_EncDec_ErrorContext ec("While BER-decoding type '%s': ", p_td.name); |
| unsigned L_form=va_arg(pvar, unsigned); |
| ASN_BER_TLV_t tlv; |
| BER_decode_str2TLV(p_buf, tlv, L_form); |
| BER_decode_TLV(p_td, tlv, L_form); |
| if(tlv.isComplete) p_buf.increase_pos(tlv.get_len()); |
| break;} |
| case TTCN_EncDec::CT_RAW: { |
| TTCN_EncDec_ErrorContext ec("While RAW-decoding type '%s': ", p_td.name); |
| if(!p_td.raw) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No RAW descriptor available for type '%s'.", p_td.name); |
| raw_order_t r_order; |
| switch(p_td.raw->top_bit_order) { |
| case TOP_BIT_LEFT: |
| r_order=ORDER_LSB; |
| break; |
| case TOP_BIT_RIGHT: |
| default: |
| r_order=ORDER_MSB; |
| } |
| int rawr = RAW_decode(p_td, p_buf, p_buf.get_len()*8, r_order); |
| if(rawr<0) switch (-rawr) { |
| case TTCN_EncDec::ET_INCOMPL_MSG: |
| case TTCN_EncDec::ET_LEN_ERR: |
| ec.error((TTCN_EncDec::error_type_t)-rawr, "Can not decode type '%s', because incomplete message was received", p_td.name); |
| break; |
| case 1: |
| default: |
| ec.error(TTCN_EncDec::ET_INVAL_MSG, "Can not decode type '%s', because invalid message was received", p_td.name); |
| break; |
| } |
| break;} |
| case TTCN_EncDec::CT_TEXT: { |
| Limit_Token_List limit; |
| TTCN_EncDec_ErrorContext ec("While TEXT-decoding type '%s': ", p_td.name); |
| if(!p_td.text) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No TEXT descriptor available for type '%s'.", p_td.name); |
| const unsigned char *b_data=p_buf.get_data(); |
| if(b_data[p_buf.get_len()-1]!='\0'){ |
| p_buf.set_pos(p_buf.get_len()); |
| p_buf.put_zero(8,ORDER_LSB); |
| p_buf.rewind(); |
| } |
| if(TEXT_decode(p_td,p_buf,limit)<0) |
| ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name); |
| break;} |
| case TTCN_EncDec::CT_XER: { |
| TTCN_EncDec_ErrorContext ec("While XER-decoding type '%s': ", p_td.name); |
| unsigned XER_coding=va_arg(pvar, unsigned); |
| XER_encode_chk_coding(XER_coding, p_td); |
| XmlReaderWrap reader(p_buf); |
| for (int rd_ok=reader.Read(); rd_ok==1; rd_ok=reader.Read()) { |
| if (reader.NodeType() == XML_READER_TYPE_ELEMENT) break; |
| } |
| XER_decode(*(p_td.xer), reader, XER_coding | XER_TOPLEVEL, XER_NONE, 0); |
| size_t bytes = reader.ByteConsumed(); |
| p_buf.set_pos(bytes); |
| break;} |
| case TTCN_EncDec::CT_JSON: { |
| TTCN_EncDec_ErrorContext ec("While JSON-decoding type '%s': ", p_td.name); |
| if(!p_td.json) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No JSON descriptor available for type '%s'.", p_td.name); |
| JSON_Tokenizer tok((const char*)p_buf.get_data(), p_buf.get_len()); |
| if(JSON_decode(p_td, tok, FALSE)<0) |
| ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name); |
| p_buf.set_pos(tok.get_buf_pos()); |
| break;} |
| case TTCN_EncDec::CT_OER: { |
| TTCN_EncDec_ErrorContext ec("While OER-decoding type '%s': ", p_td.name); |
| if(!p_td.oer) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No OER descriptor available for type '%s'.", p_td.name); |
| OER_struct p_oer; |
| OER_decode(p_td, p_buf, p_oer); |
| break;} |
| default: |
| TTCN_error("Unknown coding method requested to decode type '%s'", p_td.name); |
| } |
| va_end(pvar); |
| } |
| |
| int ExtendedMessageConnectionAbort::RAW_decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int limit, raw_order_t top_bit_ord, boolean no_err, int, boolean, const RAW_Force_Omit* force_omit) |
| { (void)no_err; |
| int prepaddlength=p_buf.increase_pos_padd(p_td.raw->prepadding); |
| limit-=prepaddlength; |
| size_t last_decoded_pos = p_buf.get_pos_bit(); |
| int decoded_length = 0; |
| int decoded_field_length = 0; |
| raw_order_t local_top_order; |
| if(p_td.raw->top_bit_order==TOP_BIT_INHERITED)local_top_order=top_bit_ord; |
| else if(p_td.raw->top_bit_order==TOP_BIT_RIGHT)local_top_order=ORDER_MSB; |
| else local_top_order=ORDER_LSB; |
| RAW_Force_Omit field_0_force_omit(0, force_omit, ExtendedMessageConnectionAbort_ctrl_descr_.raw->forceomit); |
| decoded_field_length = field_ctrl.RAW_decode(ExtendedMessageConnectionAbort_ctrl_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_0_force_omit); |
| if (decoded_field_length < 0) return decoded_field_length; |
| decoded_length+=decoded_field_length; |
| limit-=decoded_field_length; |
| last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit()); |
| RAW_Force_Omit field_1_force_omit(1, force_omit, e__ETP__ConnectionAbort__AbortReason_descr_.raw->forceomit); |
| decoded_field_length = field_connectionAbortReason.RAW_decode(e__ETP__ConnectionAbort__AbortReason_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_1_force_omit); |
| if (decoded_field_length < 0) return decoded_field_length; |
| decoded_length+=decoded_field_length; |
| limit-=decoded_field_length; |
| last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit()); |
| RAW_Force_Omit field_2_force_omit(2, force_omit, ExtendedMessageConnectionAbort_reserved3_descr_.raw->forceomit); |
| decoded_field_length = field_reserved3.RAW_decode(ExtendedMessageConnectionAbort_reserved3_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_2_force_omit); |
| if (decoded_field_length < 0) return decoded_field_length; |
| decoded_length+=decoded_field_length; |
| limit-=decoded_field_length; |
| last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit()); |
| RAW_Force_Omit field_3_force_omit(3, force_omit, ExtendedMessageConnectionAbort_reserved4_descr_.raw->forceomit); |
| decoded_field_length = field_reserved4.RAW_decode(ExtendedMessageConnectionAbort_reserved4_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_3_force_omit); |
| if (decoded_field_length < 0) return decoded_field_length; |
| decoded_length+=decoded_field_length; |
| limit-=decoded_field_length; |
| last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit()); |
| RAW_Force_Omit field_4_force_omit(4, force_omit, ExtendedMessageConnectionAbort_reserved5_descr_.raw->forceomit); |
| decoded_field_length = field_reserved5.RAW_decode(ExtendedMessageConnectionAbort_reserved5_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_4_force_omit); |
| if (decoded_field_length < 0) return decoded_field_length; |
| decoded_length+=decoded_field_length; |
| limit-=decoded_field_length; |
| last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit()); |
| RAW_Force_Omit field_5_force_omit(5, force_omit, IsobusMessageTypes::PGN_descr_.raw->forceomit); |
| decoded_field_length = field_pgnOfExtendedPacketedMessage.RAW_decode(IsobusMessageTypes::PGN_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_5_force_omit); |
| if (decoded_field_length < 0) return decoded_field_length; |
| decoded_length+=decoded_field_length; |
| limit-=decoded_field_length; |
| last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit()); |
| p_buf.set_pos_bit(last_decoded_pos); |
| return decoded_length+prepaddlength+p_buf.increase_pos_padd(p_td.raw->padding); |
| } |
| |
| int ExtendedMessageConnectionAbort::RAW_encode(const TTCN_Typedescriptor_t&, RAW_enc_tree& myleaf) const { |
| if (!is_bound()) TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_UNBOUND, "Encoding an unbound value."); |
| int encoded_length = 0; |
| myleaf.isleaf = FALSE; |
| myleaf.body.node.num_of_nodes = 6; |
| myleaf.body.node.nodes = init_nodes_of_enc_tree(6); |
| myleaf.body.node.nodes[0] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 0, ExtendedMessageConnectionAbort_ctrl_descr_.raw); |
| myleaf.body.node.nodes[1] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 1, e__ETP__ConnectionAbort__AbortReason_descr_.raw); |
| myleaf.body.node.nodes[2] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 2, ExtendedMessageConnectionAbort_reserved3_descr_.raw); |
| myleaf.body.node.nodes[3] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 3, ExtendedMessageConnectionAbort_reserved4_descr_.raw); |
| myleaf.body.node.nodes[4] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 4, ExtendedMessageConnectionAbort_reserved5_descr_.raw); |
| myleaf.body.node.nodes[5] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 5, IsobusMessageTypes::PGN_descr_.raw); |
| encoded_length += field_ctrl.RAW_encode(ExtendedMessageConnectionAbort_ctrl_descr_, *myleaf.body.node.nodes[0]); |
| encoded_length += field_connectionAbortReason.RAW_encode(e__ETP__ConnectionAbort__AbortReason_descr_, *myleaf.body.node.nodes[1]); |
| encoded_length += field_reserved3.RAW_encode(ExtendedMessageConnectionAbort_reserved3_descr_, *myleaf.body.node.nodes[2]); |
| encoded_length += field_reserved4.RAW_encode(ExtendedMessageConnectionAbort_reserved4_descr_, *myleaf.body.node.nodes[3]); |
| encoded_length += field_reserved5.RAW_encode(ExtendedMessageConnectionAbort_reserved5_descr_, *myleaf.body.node.nodes[4]); |
| encoded_length += field_pgnOfExtendedPacketedMessage.RAW_encode(IsobusMessageTypes::PGN_descr_, *myleaf.body.node.nodes[5]); |
| return myleaf.length = encoded_length; |
| } |
| |
| struct ExtendedMessageConnectionAbort_template::single_value_struct { |
| OCTETSTRING_template field_ctrl; |
| e__ETP__ConnectionAbort__AbortReason_template field_connectionAbortReason; |
| OCTETSTRING_template field_reserved3; |
| OCTETSTRING_template field_reserved4; |
| OCTETSTRING_template field_reserved5; |
| INTEGER_template field_pgnOfExtendedPacketedMessage; |
| }; |
| |
| void ExtendedMessageConnectionAbort_template::set_specific() |
| { |
| if (template_selection != SPECIFIC_VALUE) { |
| template_sel old_selection = template_selection; |
| clean_up(); |
| single_value = new single_value_struct; |
| set_selection(SPECIFIC_VALUE); |
| if (old_selection == ANY_VALUE || old_selection == ANY_OR_OMIT) { |
| single_value->field_ctrl = ANY_VALUE; |
| single_value->field_connectionAbortReason = ANY_VALUE; |
| single_value->field_reserved3 = ANY_VALUE; |
| single_value->field_reserved4 = ANY_VALUE; |
| single_value->field_reserved5 = ANY_VALUE; |
| single_value->field_pgnOfExtendedPacketedMessage = ANY_VALUE; |
| } |
| } |
| } |
| |
| void ExtendedMessageConnectionAbort_template::copy_value(const ExtendedMessageConnectionAbort& other_value) |
| { |
| single_value = new single_value_struct; |
| if (other_value.ctrl().is_bound()) { |
| single_value->field_ctrl = other_value.ctrl(); |
| } else { |
| single_value->field_ctrl.clean_up(); |
| } |
| if (other_value.connectionAbortReason().is_bound()) { |
| single_value->field_connectionAbortReason = other_value.connectionAbortReason(); |
| } else { |
| single_value->field_connectionAbortReason.clean_up(); |
| } |
| if (other_value.reserved3().is_bound()) { |
| single_value->field_reserved3 = other_value.reserved3(); |
| } else { |
| single_value->field_reserved3.clean_up(); |
| } |
| if (other_value.reserved4().is_bound()) { |
| single_value->field_reserved4 = other_value.reserved4(); |
| } else { |
| single_value->field_reserved4.clean_up(); |
| } |
| if (other_value.reserved5().is_bound()) { |
| single_value->field_reserved5 = other_value.reserved5(); |
| } else { |
| single_value->field_reserved5.clean_up(); |
| } |
| if (other_value.pgnOfExtendedPacketedMessage().is_bound()) { |
| single_value->field_pgnOfExtendedPacketedMessage = other_value.pgnOfExtendedPacketedMessage(); |
| } else { |
| single_value->field_pgnOfExtendedPacketedMessage.clean_up(); |
| } |
| set_selection(SPECIFIC_VALUE); |
| } |
| |
| void ExtendedMessageConnectionAbort_template::copy_template(const ExtendedMessageConnectionAbort_template& other_value) |
| { |
| switch (other_value.template_selection) { |
| case SPECIFIC_VALUE: |
| single_value = new single_value_struct; |
| if (UNINITIALIZED_TEMPLATE != other_value.ctrl().get_selection()) { |
| single_value->field_ctrl = other_value.ctrl(); |
| } else { |
| single_value->field_ctrl.clean_up(); |
| } |
| if (UNINITIALIZED_TEMPLATE != other_value.connectionAbortReason().get_selection()) { |
| single_value->field_connectionAbortReason = other_value.connectionAbortReason(); |
| } else { |
| single_value->field_connectionAbortReason.clean_up(); |
| } |
| if (UNINITIALIZED_TEMPLATE != other_value.reserved3().get_selection()) { |
| single_value->field_reserved3 = other_value.reserved3(); |
| } else { |
| single_value->field_reserved3.clean_up(); |
| } |
| if (UNINITIALIZED_TEMPLATE != other_value.reserved4().get_selection()) { |
| single_value->field_reserved4 = other_value.reserved4(); |
| } else { |
| single_value->field_reserved4.clean_up(); |
| } |
| if (UNINITIALIZED_TEMPLATE != other_value.reserved5().get_selection()) { |
| single_value->field_reserved5 = other_value.reserved5(); |
| } else { |
| single_value->field_reserved5.clean_up(); |
| } |
| if (UNINITIALIZED_TEMPLATE != other_value.pgnOfExtendedPacketedMessage().get_selection()) { |
| single_value->field_pgnOfExtendedPacketedMessage = other_value.pgnOfExtendedPacketedMessage(); |
| } else { |
| single_value->field_pgnOfExtendedPacketedMessage.clean_up(); |
| } |
| case OMIT_VALUE: |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| break; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| value_list.n_values = other_value.value_list.n_values; |
| value_list.list_value = new ExtendedMessageConnectionAbort_template[value_list.n_values]; |
| for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) |
| value_list.list_value[list_count].copy_template(other_value.value_list.list_value[list_count]); |
| break; |
| default: |
| TTCN_error("Copying an uninitialized/unsupported template of type @IsobusCMMessageTypes.ExtendedMessageConnectionAbort."); |
| break; |
| } |
| set_selection(other_value); |
| } |
| |
| ExtendedMessageConnectionAbort_template::ExtendedMessageConnectionAbort_template() |
| { |
| } |
| |
| ExtendedMessageConnectionAbort_template::ExtendedMessageConnectionAbort_template(template_sel other_value) |
| : Base_Template(other_value) |
| { |
| check_single_selection(other_value); |
| } |
| |
| ExtendedMessageConnectionAbort_template::ExtendedMessageConnectionAbort_template(const ExtendedMessageConnectionAbort& other_value) |
| { |
| copy_value(other_value); |
| } |
| |
| ExtendedMessageConnectionAbort_template::ExtendedMessageConnectionAbort_template(const OPTIONAL<ExtendedMessageConnectionAbort>& other_value) |
| { |
| switch (other_value.get_selection()) { |
| case OPTIONAL_PRESENT: |
| copy_value((const ExtendedMessageConnectionAbort&)other_value); |
| break; |
| case OPTIONAL_OMIT: |
| set_selection(OMIT_VALUE); |
| break; |
| default: |
| TTCN_error("Creating a template of type @IsobusCMMessageTypes.ExtendedMessageConnectionAbort from an unbound optional field."); |
| } |
| } |
| |
| ExtendedMessageConnectionAbort_template::ExtendedMessageConnectionAbort_template(const ExtendedMessageConnectionAbort_template& other_value) |
| : Base_Template() |
| { |
| copy_template(other_value); |
| } |
| |
| ExtendedMessageConnectionAbort_template::~ExtendedMessageConnectionAbort_template() |
| { |
| clean_up(); |
| } |
| |
| ExtendedMessageConnectionAbort_template& ExtendedMessageConnectionAbort_template::operator=(template_sel other_value) |
| { |
| check_single_selection(other_value); |
| clean_up(); |
| set_selection(other_value); |
| return *this; |
| } |
| |
| ExtendedMessageConnectionAbort_template& ExtendedMessageConnectionAbort_template::operator=(const ExtendedMessageConnectionAbort& other_value) |
| { |
| clean_up(); |
| copy_value(other_value); |
| return *this; |
| } |
| |
| ExtendedMessageConnectionAbort_template& ExtendedMessageConnectionAbort_template::operator=(const OPTIONAL<ExtendedMessageConnectionAbort>& other_value) |
| { |
| clean_up(); |
| switch (other_value.get_selection()) { |
| case OPTIONAL_PRESENT: |
| copy_value((const ExtendedMessageConnectionAbort&)other_value); |
| break; |
| case OPTIONAL_OMIT: |
| set_selection(OMIT_VALUE); |
| break; |
| default: |
| TTCN_error("Assignment of an unbound optional field to a template of type @IsobusCMMessageTypes.ExtendedMessageConnectionAbort."); |
| } |
| return *this; |
| } |
| |
| ExtendedMessageConnectionAbort_template& ExtendedMessageConnectionAbort_template::operator=(const ExtendedMessageConnectionAbort_template& other_value) |
| { |
| if (&other_value != this) { |
| clean_up(); |
| copy_template(other_value); |
| } |
| return *this; |
| } |
| |
| boolean ExtendedMessageConnectionAbort_template::match(const ExtendedMessageConnectionAbort& other_value, boolean legacy) const |
| { |
| if (!other_value.is_bound()) return FALSE; |
| switch (template_selection) { |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| return TRUE; |
| case OMIT_VALUE: |
| return FALSE; |
| case SPECIFIC_VALUE: |
| if(!other_value.ctrl().is_bound()) return FALSE; |
| if(!single_value->field_ctrl.match(other_value.ctrl(), legacy))return FALSE; |
| if(!other_value.connectionAbortReason().is_bound()) return FALSE; |
| if(!single_value->field_connectionAbortReason.match(other_value.connectionAbortReason(), legacy))return FALSE; |
| if(!other_value.reserved3().is_bound()) return FALSE; |
| if(!single_value->field_reserved3.match(other_value.reserved3(), legacy))return FALSE; |
| if(!other_value.reserved4().is_bound()) return FALSE; |
| if(!single_value->field_reserved4.match(other_value.reserved4(), legacy))return FALSE; |
| if(!other_value.reserved5().is_bound()) return FALSE; |
| if(!single_value->field_reserved5.match(other_value.reserved5(), legacy))return FALSE; |
| if(!other_value.pgnOfExtendedPacketedMessage().is_bound()) return FALSE; |
| if(!single_value->field_pgnOfExtendedPacketedMessage.match(other_value.pgnOfExtendedPacketedMessage(), legacy))return FALSE; |
| return TRUE; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) |
| if (value_list.list_value[list_count].match(other_value, legacy)) return template_selection == VALUE_LIST; |
| return template_selection == COMPLEMENTED_LIST; |
| default: |
| TTCN_error("Matching an uninitialized/unsupported template of type @IsobusCMMessageTypes.ExtendedMessageConnectionAbort."); |
| } |
| return FALSE; |
| } |
| |
| boolean ExtendedMessageConnectionAbort_template::is_bound() const |
| { |
| if (template_selection == UNINITIALIZED_TEMPLATE && !is_ifpresent) return FALSE; |
| if (template_selection != SPECIFIC_VALUE) return TRUE; |
| return single_value->field_ctrl.is_bound() |
| |
| ||single_value->field_connectionAbortReason.is_bound() |
| |
| ||single_value->field_reserved3.is_bound() |
| |
| ||single_value->field_reserved4.is_bound() |
| |
| ||single_value->field_reserved5.is_bound() |
| |
| ||single_value->field_pgnOfExtendedPacketedMessage.is_bound() |
| ; |
| } |
| |
| boolean ExtendedMessageConnectionAbort_template::is_value() const |
| { |
| if (template_selection != SPECIFIC_VALUE || is_ifpresent) return FALSE; |
| return single_value->field_ctrl.is_value() |
| &&single_value->field_connectionAbortReason.is_value() |
| &&single_value->field_reserved3.is_value() |
| &&single_value->field_reserved4.is_value() |
| &&single_value->field_reserved5.is_value() |
| &&single_value->field_pgnOfExtendedPacketedMessage.is_value(); |
| } |
| |
| void ExtendedMessageConnectionAbort_template::clean_up() |
| { |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| delete single_value; |
| break; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| delete [] value_list.list_value; |
| default: |
| break; |
| } |
| template_selection = UNINITIALIZED_TEMPLATE; |
| } |
| |
| ExtendedMessageConnectionAbort ExtendedMessageConnectionAbort_template::valueof() const |
| { |
| if (template_selection != SPECIFIC_VALUE || is_ifpresent) |
| TTCN_error("Performing a valueof or send operation on a non-specific template of type @IsobusCMMessageTypes.ExtendedMessageConnectionAbort."); |
| ExtendedMessageConnectionAbort ret_val; |
| if (single_value->field_ctrl.is_bound()) { |
| ret_val.ctrl() = single_value->field_ctrl.valueof(); |
| } |
| if (single_value->field_connectionAbortReason.is_bound()) { |
| ret_val.connectionAbortReason() = single_value->field_connectionAbortReason.valueof(); |
| } |
| if (single_value->field_reserved3.is_bound()) { |
| ret_val.reserved3() = single_value->field_reserved3.valueof(); |
| } |
| if (single_value->field_reserved4.is_bound()) { |
| ret_val.reserved4() = single_value->field_reserved4.valueof(); |
| } |
| if (single_value->field_reserved5.is_bound()) { |
| ret_val.reserved5() = single_value->field_reserved5.valueof(); |
| } |
| if (single_value->field_pgnOfExtendedPacketedMessage.is_bound()) { |
| ret_val.pgnOfExtendedPacketedMessage() = single_value->field_pgnOfExtendedPacketedMessage.valueof(); |
| } |
| return ret_val; |
| } |
| |
| void ExtendedMessageConnectionAbort_template::set_type(template_sel template_type, unsigned int list_length) |
| { |
| if (template_type != VALUE_LIST && template_type != COMPLEMENTED_LIST) |
| TTCN_error("Setting an invalid list for a template of type @IsobusCMMessageTypes.ExtendedMessageConnectionAbort."); |
| clean_up(); |
| set_selection(template_type); |
| value_list.n_values = list_length; |
| value_list.list_value = new ExtendedMessageConnectionAbort_template[list_length]; |
| } |
| |
| ExtendedMessageConnectionAbort_template& ExtendedMessageConnectionAbort_template::list_item(unsigned int list_index) const |
| { |
| if (template_selection != VALUE_LIST && template_selection != COMPLEMENTED_LIST) |
| TTCN_error("Accessing a list element of a non-list template of type @IsobusCMMessageTypes.ExtendedMessageConnectionAbort."); |
| if (list_index >= value_list.n_values) |
| TTCN_error("Index overflow in a value list template of type @IsobusCMMessageTypes.ExtendedMessageConnectionAbort."); |
| return value_list.list_value[list_index]; |
| } |
| |
| OCTETSTRING_template& ExtendedMessageConnectionAbort_template::ctrl() |
| { |
| set_specific(); |
| return single_value->field_ctrl; |
| } |
| |
| const OCTETSTRING_template& ExtendedMessageConnectionAbort_template::ctrl() const |
| { |
| if (template_selection != SPECIFIC_VALUE) |
| TTCN_error("Accessing field ctrl of a non-specific template of type @IsobusCMMessageTypes.ExtendedMessageConnectionAbort."); |
| return single_value->field_ctrl; |
| } |
| |
| e__ETP__ConnectionAbort__AbortReason_template& ExtendedMessageConnectionAbort_template::connectionAbortReason() |
| { |
| set_specific(); |
| return single_value->field_connectionAbortReason; |
| } |
| |
| const e__ETP__ConnectionAbort__AbortReason_template& ExtendedMessageConnectionAbort_template::connectionAbortReason() const |
| { |
| if (template_selection != SPECIFIC_VALUE) |
| TTCN_error("Accessing field connectionAbortReason of a non-specific template of type @IsobusCMMessageTypes.ExtendedMessageConnectionAbort."); |
| return single_value->field_connectionAbortReason; |
| } |
| |
| OCTETSTRING_template& ExtendedMessageConnectionAbort_template::reserved3() |
| { |
| set_specific(); |
| return single_value->field_reserved3; |
| } |
| |
| const OCTETSTRING_template& ExtendedMessageConnectionAbort_template::reserved3() const |
| { |
| if (template_selection != SPECIFIC_VALUE) |
| TTCN_error("Accessing field reserved3 of a non-specific template of type @IsobusCMMessageTypes.ExtendedMessageConnectionAbort."); |
| return single_value->field_reserved3; |
| } |
| |
| OCTETSTRING_template& ExtendedMessageConnectionAbort_template::reserved4() |
| { |
| set_specific(); |
| return single_value->field_reserved4; |
| } |
| |
| const OCTETSTRING_template& ExtendedMessageConnectionAbort_template::reserved4() const |
| { |
| if (template_selection != SPECIFIC_VALUE) |
| TTCN_error("Accessing field reserved4 of a non-specific template of type @IsobusCMMessageTypes.ExtendedMessageConnectionAbort."); |
| return single_value->field_reserved4; |
| } |
| |
| OCTETSTRING_template& ExtendedMessageConnectionAbort_template::reserved5() |
| { |
| set_specific(); |
| return single_value->field_reserved5; |
| } |
| |
| const OCTETSTRING_template& ExtendedMessageConnectionAbort_template::reserved5() const |
| { |
| if (template_selection != SPECIFIC_VALUE) |
| TTCN_error("Accessing field reserved5 of a non-specific template of type @IsobusCMMessageTypes.ExtendedMessageConnectionAbort."); |
| return single_value->field_reserved5; |
| } |
| |
| INTEGER_template& ExtendedMessageConnectionAbort_template::pgnOfExtendedPacketedMessage() |
| { |
| set_specific(); |
| return single_value->field_pgnOfExtendedPacketedMessage; |
| } |
| |
| const INTEGER_template& ExtendedMessageConnectionAbort_template::pgnOfExtendedPacketedMessage() const |
| { |
| if (template_selection != SPECIFIC_VALUE) |
| TTCN_error("Accessing field pgnOfExtendedPacketedMessage of a non-specific template of type @IsobusCMMessageTypes.ExtendedMessageConnectionAbort."); |
| return single_value->field_pgnOfExtendedPacketedMessage; |
| } |
| |
| int ExtendedMessageConnectionAbort_template::size_of() const |
| { |
| if (is_ifpresent) TTCN_error("Performing sizeof() operation on a template of type @IsobusCMMessageTypes.ExtendedMessageConnectionAbort which has an ifpresent attribute."); |
| switch (template_selection) |
| { |
| case SPECIFIC_VALUE: |
| return 6; |
| case VALUE_LIST: |
| { |
| if (value_list.n_values<1) |
| TTCN_error("Internal error: Performing sizeof() operation on a template of type @IsobusCMMessageTypes.ExtendedMessageConnectionAbort containing an empty list."); |
| int item_size = value_list.list_value[0].size_of(); |
| for (unsigned int l_idx = 1; l_idx < value_list.n_values; l_idx++) |
| { |
| if (value_list.list_value[l_idx].size_of()!=item_size) |
| TTCN_error("Performing sizeof() operation on a template of type @IsobusCMMessageTypes.ExtendedMessageConnectionAbort containing a value list with different sizes."); |
| } |
| return item_size; |
| } |
| case OMIT_VALUE: |
| TTCN_error("Performing sizeof() operation on a template of type @IsobusCMMessageTypes.ExtendedMessageConnectionAbort containing omit value."); |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| TTCN_error("Performing sizeof() operation on a template of type @IsobusCMMessageTypes.ExtendedMessageConnectionAbort containing */? value."); |
| case COMPLEMENTED_LIST: |
| TTCN_error("Performing sizeof() operation on a template of type @IsobusCMMessageTypes.ExtendedMessageConnectionAbort containing complemented list."); |
| default: |
| TTCN_error("Performing sizeof() operation on an uninitialized/unsupported template of type @IsobusCMMessageTypes.ExtendedMessageConnectionAbort."); |
| } |
| return 0; |
| } |
| |
| void ExtendedMessageConnectionAbort_template::log() const |
| { |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| TTCN_Logger::log_event_str("{ ctrl := "); |
| single_value->field_ctrl.log(); |
| TTCN_Logger::log_event_str(", connectionAbortReason := "); |
| single_value->field_connectionAbortReason.log(); |
| TTCN_Logger::log_event_str(", reserved3 := "); |
| single_value->field_reserved3.log(); |
| TTCN_Logger::log_event_str(", reserved4 := "); |
| single_value->field_reserved4.log(); |
| TTCN_Logger::log_event_str(", reserved5 := "); |
| single_value->field_reserved5.log(); |
| TTCN_Logger::log_event_str(", pgnOfExtendedPacketedMessage := "); |
| single_value->field_pgnOfExtendedPacketedMessage.log(); |
| TTCN_Logger::log_event_str(" }"); |
| break; |
| case COMPLEMENTED_LIST: |
| TTCN_Logger::log_event_str("complement"); |
| case VALUE_LIST: |
| TTCN_Logger::log_char('('); |
| for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) { |
| if (list_count > 0) TTCN_Logger::log_event_str(", "); |
| value_list.list_value[list_count].log(); |
| } |
| TTCN_Logger::log_char(')'); |
| break; |
| default: |
| log_generic(); |
| } |
| log_ifpresent(); |
| } |
| |
| void ExtendedMessageConnectionAbort_template::log_match(const ExtendedMessageConnectionAbort& match_value, boolean legacy) const |
| { |
| if(TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity()){ |
| if(match(match_value, legacy)){ |
| TTCN_Logger::print_logmatch_buffer(); |
| TTCN_Logger::log_event_str(" matched"); |
| } else{ |
| if (template_selection == SPECIFIC_VALUE) { |
| size_t previous_size = TTCN_Logger::get_logmatch_buffer_len(); |
| if(!single_value->field_ctrl.match(match_value.ctrl(), legacy)){ |
| TTCN_Logger::log_logmatch_info(".ctrl"); |
| single_value->field_ctrl.log_match(match_value.ctrl(), legacy); |
| TTCN_Logger::set_logmatch_buffer_len(previous_size); |
| } |
| if(!single_value->field_connectionAbortReason.match(match_value.connectionAbortReason(), legacy)){ |
| TTCN_Logger::log_logmatch_info(".connectionAbortReason"); |
| single_value->field_connectionAbortReason.log_match(match_value.connectionAbortReason(), legacy); |
| TTCN_Logger::set_logmatch_buffer_len(previous_size); |
| } |
| if(!single_value->field_reserved3.match(match_value.reserved3(), legacy)){ |
| TTCN_Logger::log_logmatch_info(".reserved3"); |
| single_value->field_reserved3.log_match(match_value.reserved3(), legacy); |
| TTCN_Logger::set_logmatch_buffer_len(previous_size); |
| } |
| if(!single_value->field_reserved4.match(match_value.reserved4(), legacy)){ |
| TTCN_Logger::log_logmatch_info(".reserved4"); |
| single_value->field_reserved4.log_match(match_value.reserved4(), legacy); |
| TTCN_Logger::set_logmatch_buffer_len(previous_size); |
| } |
| if(!single_value->field_reserved5.match(match_value.reserved5(), legacy)){ |
| TTCN_Logger::log_logmatch_info(".reserved5"); |
| single_value->field_reserved5.log_match(match_value.reserved5(), legacy); |
| TTCN_Logger::set_logmatch_buffer_len(previous_size); |
| } |
| if(!single_value->field_pgnOfExtendedPacketedMessage.match(match_value.pgnOfExtendedPacketedMessage(), legacy)){ |
| TTCN_Logger::log_logmatch_info(".pgnOfExtendedPacketedMessage"); |
| single_value->field_pgnOfExtendedPacketedMessage.log_match(match_value.pgnOfExtendedPacketedMessage(), legacy); |
| TTCN_Logger::set_logmatch_buffer_len(previous_size); |
| } |
| }else { |
| TTCN_Logger::print_logmatch_buffer(); |
| match_value.log(); |
| TTCN_Logger::log_event_str(" with "); |
| log(); |
| TTCN_Logger::log_event_str(" unmatched"); |
| } |
| } |
| return; |
| } |
| if (template_selection == SPECIFIC_VALUE) { |
| TTCN_Logger::log_event_str("{ ctrl := "); |
| single_value->field_ctrl.log_match(match_value.ctrl(), legacy); |
| TTCN_Logger::log_event_str(", connectionAbortReason := "); |
| single_value->field_connectionAbortReason.log_match(match_value.connectionAbortReason(), legacy); |
| TTCN_Logger::log_event_str(", reserved3 := "); |
| single_value->field_reserved3.log_match(match_value.reserved3(), legacy); |
| TTCN_Logger::log_event_str(", reserved4 := "); |
| single_value->field_reserved4.log_match(match_value.reserved4(), legacy); |
| TTCN_Logger::log_event_str(", reserved5 := "); |
| single_value->field_reserved5.log_match(match_value.reserved5(), legacy); |
| TTCN_Logger::log_event_str(", pgnOfExtendedPacketedMessage := "); |
| single_value->field_pgnOfExtendedPacketedMessage.log_match(match_value.pgnOfExtendedPacketedMessage(), legacy); |
| TTCN_Logger::log_event_str(" }"); |
| } else { |
| match_value.log(); |
| TTCN_Logger::log_event_str(" with "); |
| log(); |
| if (match(match_value, legacy)) TTCN_Logger::log_event_str(" matched"); |
| else TTCN_Logger::log_event_str(" unmatched"); |
| } |
| } |
| |
| void ExtendedMessageConnectionAbort_template::encode_text(Text_Buf& text_buf) const |
| { |
| encode_text_base(text_buf); |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| single_value->field_ctrl.encode_text(text_buf); |
| single_value->field_connectionAbortReason.encode_text(text_buf); |
| single_value->field_reserved3.encode_text(text_buf); |
| single_value->field_reserved4.encode_text(text_buf); |
| single_value->field_reserved5.encode_text(text_buf); |
| single_value->field_pgnOfExtendedPacketedMessage.encode_text(text_buf); |
| case OMIT_VALUE: |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| break; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| text_buf.push_int(value_list.n_values); |
| for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) |
| value_list.list_value[list_count].encode_text(text_buf); |
| break; |
| default: |
| TTCN_error("Text encoder: Encoding an uninitialized/unsupported template of type @IsobusCMMessageTypes.ExtendedMessageConnectionAbort."); |
| } |
| } |
| |
| void ExtendedMessageConnectionAbort_template::decode_text(Text_Buf& text_buf) |
| { |
| clean_up(); |
| decode_text_base(text_buf); |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| single_value = new single_value_struct; |
| single_value->field_ctrl.decode_text(text_buf); |
| single_value->field_connectionAbortReason.decode_text(text_buf); |
| single_value->field_reserved3.decode_text(text_buf); |
| single_value->field_reserved4.decode_text(text_buf); |
| single_value->field_reserved5.decode_text(text_buf); |
| single_value->field_pgnOfExtendedPacketedMessage.decode_text(text_buf); |
| case OMIT_VALUE: |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| break; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| value_list.n_values = text_buf.pull_int().get_val(); |
| value_list.list_value = new ExtendedMessageConnectionAbort_template[value_list.n_values]; |
| for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) |
| value_list.list_value[list_count].decode_text(text_buf); |
| break; |
| default: |
| TTCN_error("Text decoder: An unknown/unsupported selection was received in a template of type @IsobusCMMessageTypes.ExtendedMessageConnectionAbort."); |
| } |
| } |
| |
| void ExtendedMessageConnectionAbort_template::set_param(Module_Param& param) |
| { |
| param.basic_check(Module_Param::BC_TEMPLATE, "record template"); |
| switch (param.get_type()) { |
| case Module_Param::MP_Omit: |
| *this = OMIT_VALUE; |
| break; |
| case Module_Param::MP_Any: |
| *this = ANY_VALUE; |
| break; |
| case Module_Param::MP_AnyOrNone: |
| *this = ANY_OR_OMIT; |
| break; |
| case Module_Param::MP_List_Template: |
| case Module_Param::MP_ComplementList_Template: { |
| ExtendedMessageConnectionAbort_template new_temp; |
| new_temp.set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : COMPLEMENTED_LIST, param.get_size()); |
| for (size_t p_i=0; p_i<param.get_size(); p_i++) { |
| new_temp.list_item(p_i).set_param(*param.get_elem(p_i)); |
| } |
| *this = new_temp; |
| break; } |
| case Module_Param::MP_Value_List: |
| if (6<param.get_size()) { |
| param.error("record template of type @IsobusCMMessageTypes.ExtendedMessageConnectionAbort has 6 fields but list value has %d fields", (int)param.get_size()); |
| } |
| if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) ctrl().set_param(*param.get_elem(0)); |
| if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) connectionAbortReason().set_param(*param.get_elem(1)); |
| if (param.get_size()>2 && param.get_elem(2)->get_type()!=Module_Param::MP_NotUsed) reserved3().set_param(*param.get_elem(2)); |
| if (param.get_size()>3 && param.get_elem(3)->get_type()!=Module_Param::MP_NotUsed) reserved4().set_param(*param.get_elem(3)); |
| if (param.get_size()>4 && param.get_elem(4)->get_type()!=Module_Param::MP_NotUsed) reserved5().set_param(*param.get_elem(4)); |
| if (param.get_size()>5 && param.get_elem(5)->get_type()!=Module_Param::MP_NotUsed) pgnOfExtendedPacketedMessage().set_param(*param.get_elem(5)); |
| break; |
| case Module_Param::MP_Assignment_List: { |
| Vector<bool> value_used(param.get_size()); |
| value_used.resize(param.get_size(), FALSE); |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "ctrl")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| ctrl().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "connectionAbortReason")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| connectionAbortReason().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "reserved3")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| reserved3().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "reserved4")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| reserved4().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "reserved5")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| reserved5().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "pgnOfExtendedPacketedMessage")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| pgnOfExtendedPacketedMessage().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| curr_param->error("Non existent field name in type @IsobusCMMessageTypes.ExtendedMessageConnectionAbort: %s", curr_param->get_id()->get_name()); |
| break; |
| } |
| } break; |
| default: |
| param.type_error("record template", "@IsobusCMMessageTypes.ExtendedMessageConnectionAbort"); |
| } |
| is_ifpresent = param.get_ifpresent(); |
| } |
| |
| void ExtendedMessageConnectionAbort_template::check_restriction(template_res t_res, const char* t_name, boolean legacy) const |
| { |
| if (template_selection==UNINITIALIZED_TEMPLATE) return; |
| switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) { |
| case TR_OMIT: |
| if (template_selection==OMIT_VALUE) return; |
| case TR_VALUE: |
| if (template_selection!=SPECIFIC_VALUE || is_ifpresent) break; |
| single_value->field_ctrl.check_restriction(t_res, t_name ? t_name : "@IsobusCMMessageTypes.ExtendedMessageConnectionAbort"); |
| single_value->field_connectionAbortReason.check_restriction(t_res, t_name ? t_name : "@IsobusCMMessageTypes.ExtendedMessageConnectionAbort"); |
| single_value->field_reserved3.check_restriction(t_res, t_name ? t_name : "@IsobusCMMessageTypes.ExtendedMessageConnectionAbort"); |
| single_value->field_reserved4.check_restriction(t_res, t_name ? t_name : "@IsobusCMMessageTypes.ExtendedMessageConnectionAbort"); |
| single_value->field_reserved5.check_restriction(t_res, t_name ? t_name : "@IsobusCMMessageTypes.ExtendedMessageConnectionAbort"); |
| single_value->field_pgnOfExtendedPacketedMessage.check_restriction(t_res, t_name ? t_name : "@IsobusCMMessageTypes.ExtendedMessageConnectionAbort"); |
| return; |
| case TR_PRESENT: |
| if (!match_omit(legacy)) return; |
| break; |
| default: |
| return; |
| } |
| TTCN_error("Restriction `%s' on template of type %s violated.", get_res_name(t_res), t_name ? t_name : "@IsobusCMMessageTypes.ExtendedMessageConnectionAbort"); |
| } |
| |
| boolean ExtendedMessageConnectionAbort_template::is_present(boolean legacy) const |
| { |
| if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE; |
| return !match_omit(legacy); |
| } |
| |
| boolean ExtendedMessageConnectionAbort_template::match_omit(boolean legacy) const |
| { |
| if (is_ifpresent) return TRUE; |
| switch (template_selection) { |
| case OMIT_VALUE: |
| case ANY_OR_OMIT: |
| return TRUE; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| if (legacy) { |
| for (unsigned int l_idx=0; l_idx<value_list.n_values; l_idx++) |
| if (value_list.list_value[l_idx].match_omit()) |
| return template_selection==VALUE_LIST; |
| return template_selection==COMPLEMENTED_LIST; |
| } // else fall through |
| default: |
| return FALSE; |
| } |
| return FALSE; |
| } |
| |
| void ETP__CM::copy_value(const ETP__CM& other_value) |
| { |
| switch (other_value.union_selection) { |
| case ALT_extendedMessageRequestToSend: |
| field_extendedMessageRequestToSend = new ExtendedMessageRequestToSend(*other_value.field_extendedMessageRequestToSend); |
| break; |
| case ALT_extendedMessageClearToSend: |
| field_extendedMessageClearToSend = new ExtendedMessageClearToSend(*other_value.field_extendedMessageClearToSend); |
| break; |
| case ALT_extendedMessageDataPacketOffset: |
| field_extendedMessageDataPacketOffset = new ExtendedMessageDataPacketOffset(*other_value.field_extendedMessageDataPacketOffset); |
| break; |
| case ALT_extendedMessageEndOfMessageAcknowledgement: |
| field_extendedMessageEndOfMessageAcknowledgement = new ExtendedMessageEndOfMessageAcknowledgement(*other_value.field_extendedMessageEndOfMessageAcknowledgement); |
| break; |
| case ALT_extendedMessageConnectionAbort: |
| field_extendedMessageConnectionAbort = new ExtendedMessageConnectionAbort(*other_value.field_extendedMessageConnectionAbort); |
| break; |
| default: |
| TTCN_error("Assignment of an unbound union value of type @IsobusCMMessageTypes.ETP_CM."); |
| } |
| union_selection = other_value.union_selection; |
| } |
| |
| ETP__CM::ETP__CM() |
| { |
| union_selection = UNBOUND_VALUE; |
| } |
| |
| ETP__CM::ETP__CM(const ETP__CM& other_value) |
| : Base_Type(){ |
| copy_value(other_value); |
| } |
| |
| ETP__CM::~ETP__CM() |
| { |
| clean_up(); |
| } |
| |
| ETP__CM& ETP__CM::operator=(const ETP__CM& other_value) |
| { |
| if (this != &other_value) { |
| clean_up(); |
| copy_value(other_value); |
| } |
| return *this; |
| } |
| |
| boolean ETP__CM::operator==(const ETP__CM& other_value) const |
| { |
| if (union_selection == UNBOUND_VALUE) TTCN_error("The left operand of comparison is an unbound value of union type @IsobusCMMessageTypes.ETP_CM."); |
| if (other_value.union_selection == UNBOUND_VALUE) TTCN_error("The right operand of comparison is an unbound value of union type @IsobusCMMessageTypes.ETP_CM."); |
| if (union_selection != other_value.union_selection) return FALSE; |
| switch (union_selection) { |
| case ALT_extendedMessageRequestToSend: |
| return *field_extendedMessageRequestToSend == *other_value.field_extendedMessageRequestToSend; |
| case ALT_extendedMessageClearToSend: |
| return *field_extendedMessageClearToSend == *other_value.field_extendedMessageClearToSend; |
| case ALT_extendedMessageDataPacketOffset: |
| return *field_extendedMessageDataPacketOffset == *other_value.field_extendedMessageDataPacketOffset; |
| case ALT_extendedMessageEndOfMessageAcknowledgement: |
| return *field_extendedMessageEndOfMessageAcknowledgement == *other_value.field_extendedMessageEndOfMessageAcknowledgement; |
| case ALT_extendedMessageConnectionAbort: |
| return *field_extendedMessageConnectionAbort == *other_value.field_extendedMessageConnectionAbort; |
| default: |
| return FALSE; |
| } |
| } |
| |
| ExtendedMessageRequestToSend& ETP__CM::extendedMessageRequestToSend() |
| { |
| if (union_selection != ALT_extendedMessageRequestToSend) { |
| clean_up(); |
| field_extendedMessageRequestToSend = new ExtendedMessageRequestToSend; |
| union_selection = ALT_extendedMessageRequestToSend; |
| } |
| return *field_extendedMessageRequestToSend; |
| } |
| |
| const ExtendedMessageRequestToSend& ETP__CM::extendedMessageRequestToSend() const |
| { |
| if (union_selection != ALT_extendedMessageRequestToSend) TTCN_error("Using non-selected field extendedMessageRequestToSend in a value of union type @IsobusCMMessageTypes.ETP_CM."); |
| return *field_extendedMessageRequestToSend; |
| } |
| |
| ExtendedMessageClearToSend& ETP__CM::extendedMessageClearToSend() |
| { |
| if (union_selection != ALT_extendedMessageClearToSend) { |
| clean_up(); |
| field_extendedMessageClearToSend = new ExtendedMessageClearToSend; |
| union_selection = ALT_extendedMessageClearToSend; |
| } |
| return *field_extendedMessageClearToSend; |
| } |
| |
| const ExtendedMessageClearToSend& ETP__CM::extendedMessageClearToSend() const |
| { |
| if (union_selection != ALT_extendedMessageClearToSend) TTCN_error("Using non-selected field extendedMessageClearToSend in a value of union type @IsobusCMMessageTypes.ETP_CM."); |
| return *field_extendedMessageClearToSend; |
| } |
| |
| ExtendedMessageDataPacketOffset& ETP__CM::extendedMessageDataPacketOffset() |
| { |
| if (union_selection != ALT_extendedMessageDataPacketOffset) { |
| clean_up(); |
| field_extendedMessageDataPacketOffset = new ExtendedMessageDataPacketOffset; |
| union_selection = ALT_extendedMessageDataPacketOffset; |
| } |
| return *field_extendedMessageDataPacketOffset; |
| } |
| |
| const ExtendedMessageDataPacketOffset& ETP__CM::extendedMessageDataPacketOffset() const |
| { |
| if (union_selection != ALT_extendedMessageDataPacketOffset) TTCN_error("Using non-selected field extendedMessageDataPacketOffset in a value of union type @IsobusCMMessageTypes.ETP_CM."); |
| return *field_extendedMessageDataPacketOffset; |
| } |
| |
| ExtendedMessageEndOfMessageAcknowledgement& ETP__CM::extendedMessageEndOfMessageAcknowledgement() |
| { |
| if (union_selection != ALT_extendedMessageEndOfMessageAcknowledgement) { |
| clean_up(); |
| field_extendedMessageEndOfMessageAcknowledgement = new ExtendedMessageEndOfMessageAcknowledgement; |
| union_selection = ALT_extendedMessageEndOfMessageAcknowledgement; |
| } |
| return *field_extendedMessageEndOfMessageAcknowledgement; |
| } |
| |
| const ExtendedMessageEndOfMessageAcknowledgement& ETP__CM::extendedMessageEndOfMessageAcknowledgement() const |
| { |
| if (union_selection != ALT_extendedMessageEndOfMessageAcknowledgement) TTCN_error("Using non-selected field extendedMessageEndOfMessageAcknowledgement in a value of union type @IsobusCMMessageTypes.ETP_CM."); |
| return *field_extendedMessageEndOfMessageAcknowledgement; |
| } |
| |
| ExtendedMessageConnectionAbort& ETP__CM::extendedMessageConnectionAbort() |
| { |
| if (union_selection != ALT_extendedMessageConnectionAbort) { |
| clean_up(); |
| field_extendedMessageConnectionAbort = new ExtendedMessageConnectionAbort; |
| union_selection = ALT_extendedMessageConnectionAbort; |
| } |
| return *field_extendedMessageConnectionAbort; |
| } |
| |
| const ExtendedMessageConnectionAbort& ETP__CM::extendedMessageConnectionAbort() const |
| { |
| if (union_selection != ALT_extendedMessageConnectionAbort) TTCN_error("Using non-selected field extendedMessageConnectionAbort in a value of union type @IsobusCMMessageTypes.ETP_CM."); |
| return *field_extendedMessageConnectionAbort; |
| } |
| |
| boolean ETP__CM::ischosen(union_selection_type checked_selection) const |
| { |
| if (checked_selection == UNBOUND_VALUE) TTCN_error("Internal error: Performing ischosen() operation on an invalid field of union type @IsobusCMMessageTypes.ETP_CM."); |
| return union_selection == checked_selection; |
| } |
| |
| boolean ETP__CM::is_bound() const |
| { |
| return union_selection != UNBOUND_VALUE; |
| } |
| |
| boolean ETP__CM::is_value() const |
| { |
| switch (union_selection) { |
| case UNBOUND_VALUE: return FALSE; |
| case ALT_extendedMessageRequestToSend: return field_extendedMessageRequestToSend->is_value(); |
| case ALT_extendedMessageClearToSend: return field_extendedMessageClearToSend->is_value(); |
| case ALT_extendedMessageDataPacketOffset: return field_extendedMessageDataPacketOffset->is_value(); |
| case ALT_extendedMessageEndOfMessageAcknowledgement: return field_extendedMessageEndOfMessageAcknowledgement->is_value(); |
| case ALT_extendedMessageConnectionAbort: return field_extendedMessageConnectionAbort->is_value(); |
| default: TTCN_error("Invalid selection in union is_bound");} |
| } |
| |
| void ETP__CM::clean_up() |
| { |
| switch (union_selection) { |
| case ALT_extendedMessageRequestToSend: |
| delete field_extendedMessageRequestToSend; |
| break; |
| case ALT_extendedMessageClearToSend: |
| delete field_extendedMessageClearToSend; |
| break; |
| case ALT_extendedMessageDataPacketOffset: |
| delete field_extendedMessageDataPacketOffset; |
| break; |
| case ALT_extendedMessageEndOfMessageAcknowledgement: |
| delete field_extendedMessageEndOfMessageAcknowledgement; |
| break; |
| case ALT_extendedMessageConnectionAbort: |
| delete field_extendedMessageConnectionAbort; |
| break; |
| default: |
| break; |
| } |
| union_selection = UNBOUND_VALUE; |
| } |
| |
| void ETP__CM::log() const |
| { |
| switch (union_selection) { |
| case ALT_extendedMessageRequestToSend: |
| TTCN_Logger::log_event_str("{ extendedMessageRequestToSend := "); |
| field_extendedMessageRequestToSend->log(); |
| TTCN_Logger::log_event_str(" }"); |
| break; |
| case ALT_extendedMessageClearToSend: |
| TTCN_Logger::log_event_str("{ extendedMessageClearToSend := "); |
| field_extendedMessageClearToSend->log(); |
| TTCN_Logger::log_event_str(" }"); |
| break; |
| case ALT_extendedMessageDataPacketOffset: |
| TTCN_Logger::log_event_str("{ extendedMessageDataPacketOffset := "); |
| field_extendedMessageDataPacketOffset->log(); |
| TTCN_Logger::log_event_str(" }"); |
| break; |
| case ALT_extendedMessageEndOfMessageAcknowledgement: |
| TTCN_Logger::log_event_str("{ extendedMessageEndOfMessageAcknowledgement := "); |
| field_extendedMessageEndOfMessageAcknowledgement->log(); |
| TTCN_Logger::log_event_str(" }"); |
| break; |
| case ALT_extendedMessageConnectionAbort: |
| TTCN_Logger::log_event_str("{ extendedMessageConnectionAbort := "); |
| field_extendedMessageConnectionAbort->log(); |
| TTCN_Logger::log_event_str(" }"); |
| break; |
| default: |
| TTCN_Logger::log_event_unbound(); |
| } |
| } |
| |
| void ETP__CM::set_param(Module_Param& param) |
| { |
| param.basic_check(Module_Param::BC_VALUE, "union value"); |
| Module_Param_Ptr m_p = ¶m; |
| if (m_p->get_type()==Module_Param::MP_Value_List && m_p->get_size()==0) return; |
| if (m_p->get_type()!=Module_Param::MP_Assignment_List) { |
| param.error("union value with field name was expected"); |
| } |
| Module_Param* mp_last = m_p->get_elem(m_p->get_size()-1); |
| char* last_name = mp_last->get_id()->get_name(); |
| if (!strcmp(last_name, "extendedMessageRequestToSend")) { |
| extendedMessageRequestToSend().set_param(*mp_last); |
| if (!extendedMessageRequestToSend().is_bound()) clean_up(); |
| return; |
| } |
| if (!strcmp(last_name, "extendedMessageClearToSend")) { |
| extendedMessageClearToSend().set_param(*mp_last); |
| if (!extendedMessageClearToSend().is_bound()) clean_up(); |
| return; |
| } |
| if (!strcmp(last_name, "extendedMessageDataPacketOffset")) { |
| extendedMessageDataPacketOffset().set_param(*mp_last); |
| if (!extendedMessageDataPacketOffset().is_bound()) clean_up(); |
| return; |
| } |
| if (!strcmp(last_name, "extendedMessageEndOfMessageAcknowledgement")) { |
| extendedMessageEndOfMessageAcknowledgement().set_param(*mp_last); |
| if (!extendedMessageEndOfMessageAcknowledgement().is_bound()) clean_up(); |
| return; |
| } |
| if (!strcmp(last_name, "extendedMessageConnectionAbort")) { |
| extendedMessageConnectionAbort().set_param(*mp_last); |
| if (!extendedMessageConnectionAbort().is_bound()) clean_up(); |
| return; |
| } |
| mp_last->error("Field %s does not exist in type @IsobusCMMessageTypes.ETP_CM.", last_name); |
| } |
| |
| void ETP__CM::set_implicit_omit() |
| { |
| switch (union_selection) { |
| case ALT_extendedMessageRequestToSend: |
| field_extendedMessageRequestToSend->set_implicit_omit(); break; |
| case ALT_extendedMessageClearToSend: |
| field_extendedMessageClearToSend->set_implicit_omit(); break; |
| case ALT_extendedMessageDataPacketOffset: |
| field_extendedMessageDataPacketOffset->set_implicit_omit(); break; |
| case ALT_extendedMessageEndOfMessageAcknowledgement: |
| field_extendedMessageEndOfMessageAcknowledgement->set_implicit_omit(); break; |
| case ALT_extendedMessageConnectionAbort: |
| field_extendedMessageConnectionAbort->set_implicit_omit(); break; |
| default: break; |
| } |
| } |
| |
| void ETP__CM::encode_text(Text_Buf& text_buf) const |
| { |
| text_buf.push_int(union_selection); |
| switch (union_selection) { |
| case ALT_extendedMessageRequestToSend: |
| field_extendedMessageRequestToSend->encode_text(text_buf); |
| break; |
| case ALT_extendedMessageClearToSend: |
| field_extendedMessageClearToSend->encode_text(text_buf); |
| break; |
| case ALT_extendedMessageDataPacketOffset: |
| field_extendedMessageDataPacketOffset->encode_text(text_buf); |
| break; |
| case ALT_extendedMessageEndOfMessageAcknowledgement: |
| field_extendedMessageEndOfMessageAcknowledgement->encode_text(text_buf); |
| break; |
| case ALT_extendedMessageConnectionAbort: |
| field_extendedMessageConnectionAbort->encode_text(text_buf); |
| break; |
| default: |
| TTCN_error("Text encoder: Encoding an unbound value of union type @IsobusCMMessageTypes.ETP_CM."); |
| } |
| } |
| |
| void ETP__CM::decode_text(Text_Buf& text_buf) |
| { |
| switch ((union_selection_type)text_buf.pull_int().get_val()) { |
| case ALT_extendedMessageRequestToSend: |
| extendedMessageRequestToSend().decode_text(text_buf); |
| break; |
| case ALT_extendedMessageClearToSend: |
| extendedMessageClearToSend().decode_text(text_buf); |
| break; |
| case ALT_extendedMessageDataPacketOffset: |
| extendedMessageDataPacketOffset().decode_text(text_buf); |
| break; |
| case ALT_extendedMessageEndOfMessageAcknowledgement: |
| extendedMessageEndOfMessageAcknowledgement().decode_text(text_buf); |
| break; |
| case ALT_extendedMessageConnectionAbort: |
| extendedMessageConnectionAbort().decode_text(text_buf); |
| break; |
| default: |
| TTCN_error("Text decoder: Unrecognized union selector was received for type @IsobusCMMessageTypes.ETP_CM."); |
| } |
| } |
| |
| void ETP__CM::encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, TTCN_EncDec::coding_t p_coding, ...) const |
| { |
| va_list pvar; |
| va_start(pvar, p_coding); |
| switch(p_coding) { |
| case TTCN_EncDec::CT_BER: { |
| TTCN_EncDec_ErrorContext ec("While BER-encoding type '%s': ", p_td.name); |
| unsigned BER_coding=va_arg(pvar, unsigned); |
| BER_encode_chk_coding(BER_coding); |
| ASN_BER_TLV_t *tlv=BER_encode_TLV(p_td, BER_coding); |
| tlv->put_in_buffer(p_buf); |
| ASN_BER_TLV_t::destruct(tlv); |
| break;} |
| case TTCN_EncDec::CT_RAW: { |
| TTCN_EncDec_ErrorContext ec("While RAW-encoding type '%s': ", p_td.name); |
| if(!p_td.raw) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No RAW descriptor available for type '%s'.", p_td.name); |
| RAW_enc_tr_pos rp; |
| rp.level=0; |
| rp.pos=NULL; |
| RAW_enc_tree root(TRUE, NULL, &rp, 1, p_td.raw); |
| RAW_encode(p_td, root); |
| root.put_to_buf(p_buf); |
| break;} |
| case TTCN_EncDec::CT_TEXT: { |
| TTCN_EncDec_ErrorContext ec("While TEXT-encoding type '%s': ", p_td.name); |
| if(!p_td.text) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No TEXT descriptor available for type '%s'.", p_td.name); |
| TEXT_encode(p_td,p_buf); |
| break;} |
| case TTCN_EncDec::CT_XER: { |
| TTCN_EncDec_ErrorContext ec("While XER-encoding type '%s': ", p_td.name); |
| unsigned XER_coding=va_arg(pvar, unsigned); |
| XER_encode_chk_coding(XER_coding, p_td); |
| XER_encode(*(p_td.xer),p_buf, XER_coding, 0, 0, 0); |
| p_buf.put_c('\n'); |
| break;} |
| case TTCN_EncDec::CT_JSON: { |
| TTCN_EncDec_ErrorContext ec("While JSON-encoding type '%s': ", p_td.name); |
| if(!p_td.json) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No JSON descriptor available for type '%s'.", p_td.name); |
| JSON_Tokenizer tok(va_arg(pvar, int) != 0); |
| JSON_encode(p_td, tok); |
| p_buf.put_s(tok.get_buffer_length(), (const unsigned char*)tok.get_buffer()); |
| break;} |
| case TTCN_EncDec::CT_OER: { |
| TTCN_EncDec_ErrorContext ec("While OER-encoding type '%s': ", p_td.name); |
| if(!p_td.oer) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No OER descriptor available for type '%s'.", p_td.name); |
| OER_encode(p_td, p_buf); |
| break;} |
| default: |
| TTCN_error("Unknown coding method requested to encode type '%s'", p_td.name); |
| } |
| va_end(pvar); |
| } |
| |
| void ETP__CM::decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, TTCN_EncDec::coding_t p_coding, ...) |
| { |
| va_list pvar; |
| va_start(pvar, p_coding); |
| switch(p_coding) { |
| case TTCN_EncDec::CT_BER: { |
| TTCN_EncDec_ErrorContext ec("While BER-decoding type '%s': ", p_td.name); |
| unsigned L_form=va_arg(pvar, unsigned); |
| ASN_BER_TLV_t tlv; |
| BER_decode_str2TLV(p_buf, tlv, L_form); |
| BER_decode_TLV(p_td, tlv, L_form); |
| if(tlv.isComplete) p_buf.increase_pos(tlv.get_len()); |
| break;} |
| case TTCN_EncDec::CT_RAW: { |
| TTCN_EncDec_ErrorContext ec("While RAW-decoding type '%s': ", p_td.name); |
| if(!p_td.raw) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No RAW descriptor available for type '%s'.", p_td.name); |
| raw_order_t r_order; |
| switch(p_td.raw->top_bit_order) { |
| case TOP_BIT_LEFT: |
| r_order=ORDER_LSB; |
| break; |
| case TOP_BIT_RIGHT: |
| default: |
| r_order=ORDER_MSB; |
| } |
| int rawr = RAW_decode(p_td, p_buf, p_buf.get_len()*8, r_order); |
| if(rawr<0) switch (-rawr) { |
| case TTCN_EncDec::ET_INCOMPL_MSG: |
| case TTCN_EncDec::ET_LEN_ERR: |
| ec.error((TTCN_EncDec::error_type_t)-rawr, "Can not decode type '%s', because incomplete message was received", p_td.name); |
| break; |
| case 1: |
| default: |
| ec.error(TTCN_EncDec::ET_INVAL_MSG, "Can not decode type '%s', because invalid message was received", p_td.name); |
| break; |
| } |
| break;} |
| case TTCN_EncDec::CT_TEXT: { |
| Limit_Token_List limit; |
| TTCN_EncDec_ErrorContext ec("While TEXT-decoding type '%s': ", p_td.name); |
| if(!p_td.text) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No TEXT descriptor available for type '%s'.", p_td.name); |
| const unsigned char *b_data=p_buf.get_data(); |
| if(b_data[p_buf.get_len()-1]!='\0'){ |
| p_buf.set_pos(p_buf.get_len()); |
| p_buf.put_zero(8,ORDER_LSB); |
| p_buf.rewind(); |
| } |
| if(TEXT_decode(p_td,p_buf,limit)<0) |
| ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name); |
| break;} |
| case TTCN_EncDec::CT_XER: { |
| TTCN_EncDec_ErrorContext ec("While XER-decoding type '%s': ", p_td.name); |
| unsigned XER_coding=va_arg(pvar, unsigned); |
| XER_encode_chk_coding(XER_coding, p_td); |
| XmlReaderWrap reader(p_buf); |
| for (int rd_ok=reader.Read(); rd_ok==1; rd_ok=reader.Read()) { |
| if (reader.NodeType() == XML_READER_TYPE_ELEMENT) break; |
| } |
| XER_decode(*(p_td.xer), reader, XER_coding | XER_TOPLEVEL, XER_NONE, 0); |
| size_t bytes = reader.ByteConsumed(); |
| p_buf.set_pos(bytes); |
| break;} |
| case TTCN_EncDec::CT_JSON: { |
| TTCN_EncDec_ErrorContext ec("While JSON-decoding type '%s': ", p_td.name); |
| if(!p_td.json) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No JSON descriptor available for type '%s'.", p_td.name); |
| JSON_Tokenizer tok((const char*)p_buf.get_data(), p_buf.get_len()); |
| if(JSON_decode(p_td, tok, FALSE)<0) |
| ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name); |
| p_buf.set_pos(tok.get_buf_pos()); |
| break;} |
| case TTCN_EncDec::CT_OER: { |
| TTCN_EncDec_ErrorContext ec("While OER-decoding type '%s': ", p_td.name); |
| if(!p_td.oer) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No OER descriptor available for type '%s'.", p_td.name); |
| OER_struct p_oer; |
| OER_decode(p_td, p_buf, p_oer); |
| break;} |
| default: |
| TTCN_error("Unknown coding method requested to decode type '%s'", p_td.name); |
| } |
| va_end(pvar); |
| } |
| |
| int ETP__CM::RAW_decode( |
| const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int limit, |
| raw_order_t top_bit_ord, boolean no_err, int sel_field, boolean, const RAW_Force_Omit* force_omit) |
| { |
| int prepaddlength=p_buf.increase_pos_padd(p_td.raw->prepadding); |
| limit-=prepaddlength; |
| int decoded_length=0; |
| int starting_pos=p_buf.get_pos_bit(); |
| if(sel_field!=-1){ |
| switch(sel_field){ |
| case 0: { |
| RAW_Force_Omit field_force_omit(0, force_omit, ExtendedMessageRequestToSend_descr_.raw->forceomit); |
| decoded_length = extendedMessageRequestToSend().RAW_decode(ExtendedMessageRequestToSend_descr_, p_buf, limit, top_bit_ord, no_err, -1, TRUE, &field_force_omit); |
| break; } |
| case 1: { |
| RAW_Force_Omit field_force_omit(1, force_omit, ExtendedMessageClearToSend_descr_.raw->forceomit); |
| decoded_length = extendedMessageClearToSend().RAW_decode(ExtendedMessageClearToSend_descr_, p_buf, limit, top_bit_ord, no_err, -1, TRUE, &field_force_omit); |
| break; } |
| case 2: { |
| RAW_Force_Omit field_force_omit(2, force_omit, ExtendedMessageDataPacketOffset_descr_.raw->forceomit); |
| decoded_length = extendedMessageDataPacketOffset().RAW_decode(ExtendedMessageDataPacketOffset_descr_, p_buf, limit, top_bit_ord, no_err, -1, TRUE, &field_force_omit); |
| break; } |
| case 3: { |
| RAW_Force_Omit field_force_omit(3, force_omit, ExtendedMessageEndOfMessageAcknowledgement_descr_.raw->forceomit); |
| decoded_length = extendedMessageEndOfMessageAcknowledgement().RAW_decode(ExtendedMessageEndOfMessageAcknowledgement_descr_, p_buf, limit, top_bit_ord, no_err, -1, TRUE, &field_force_omit); |
| break; } |
| case 4: { |
| RAW_Force_Omit field_force_omit(4, force_omit, ExtendedMessageConnectionAbort_descr_.raw->forceomit); |
| decoded_length = extendedMessageConnectionAbort().RAW_decode(ExtendedMessageConnectionAbort_descr_, p_buf, limit, top_bit_ord, no_err, -1, TRUE, &field_force_omit); |
| break; } |
| default: break; |
| } |
| return decoded_length + p_buf.increase_pos_padd(p_td.raw->padding) + prepaddlength; |
| } else { |
| boolean already_failed = FALSE; |
| already_failed = FALSE; |
| if (!already_failed) { |
| OCTETSTRING temporal_0; |
| int decoded_0_length; |
| p_buf.set_pos_bit(starting_pos + 0); |
| decoded_0_length = temporal_0.RAW_decode(ExtendedMessageRequestToSend_ctrl_descr_, p_buf, limit, top_bit_ord, TRUE); |
| if (decoded_0_length > 0) { |
| if (temporal_0 == os_3) { |
| p_buf.set_pos_bit(starting_pos); |
| RAW_Force_Omit field_force_omit(0, force_omit, ExtendedMessageRequestToSend_descr_.raw->forceomit); |
| decoded_length = extendedMessageRequestToSend().RAW_decode(ExtendedMessageRequestToSend_descr_, p_buf, limit, top_bit_ord, TRUE, -1, TRUE, &field_force_omit); |
| if (decoded_length > 0) { |
| if ((*field_extendedMessageRequestToSend).ctrl() == os_3) { |
| return decoded_length + p_buf.increase_pos_padd(p_td.raw->padding) + prepaddlength; |
| }else already_failed = TRUE; |
| } |
| } |
| } |
| } |
| already_failed = FALSE; |
| if (!already_failed) { |
| OCTETSTRING temporal_1; |
| int decoded_1_length; |
| p_buf.set_pos_bit(starting_pos + 0); |
| decoded_1_length = temporal_1.RAW_decode(ExtendedMessageClearToSend_ctrl_descr_, p_buf, limit, top_bit_ord, TRUE); |
| if (decoded_1_length > 0) { |
| if (temporal_1 == os_5) { |
| p_buf.set_pos_bit(starting_pos); |
| RAW_Force_Omit field_force_omit(1, force_omit, ExtendedMessageClearToSend_descr_.raw->forceomit); |
| decoded_length = extendedMessageClearToSend().RAW_decode(ExtendedMessageClearToSend_descr_, p_buf, limit, top_bit_ord, TRUE, -1, TRUE, &field_force_omit); |
| if (decoded_length > 0) { |
| if ((*field_extendedMessageClearToSend).ctrl() == os_5) { |
| return decoded_length + p_buf.increase_pos_padd(p_td.raw->padding) + prepaddlength; |
| }else already_failed = TRUE; |
| } |
| } |
| } |
| } |
| already_failed = FALSE; |
| if (!already_failed) { |
| OCTETSTRING temporal_2; |
| int decoded_2_length; |
| p_buf.set_pos_bit(starting_pos + 0); |
| decoded_2_length = temporal_2.RAW_decode(ExtendedMessageDataPacketOffset_ctrl_descr_, p_buf, limit, top_bit_ord, TRUE); |
| if (decoded_2_length > 0) { |
| if (temporal_2 == os_6) { |
| p_buf.set_pos_bit(starting_pos); |
| RAW_Force_Omit field_force_omit(2, force_omit, ExtendedMessageDataPacketOffset_descr_.raw->forceomit); |
| decoded_length = extendedMessageDataPacketOffset().RAW_decode(ExtendedMessageDataPacketOffset_descr_, p_buf, limit, top_bit_ord, TRUE, -1, TRUE, &field_force_omit); |
| if (decoded_length > 0) { |
| if ((*field_extendedMessageDataPacketOffset).ctrl() == os_6) { |
| return decoded_length + p_buf.increase_pos_padd(p_td.raw->padding) + prepaddlength; |
| }else already_failed = TRUE; |
| } |
| } |
| } |
| } |
| already_failed = FALSE; |
| if (!already_failed) { |
| OCTETSTRING temporal_3; |
| int decoded_3_length; |
| p_buf.set_pos_bit(starting_pos + 0); |
| decoded_3_length = temporal_3.RAW_decode(ExtendedMessageEndOfMessageAcknowledgement_ctrl_descr_, p_buf, limit, top_bit_ord, TRUE); |
| if (decoded_3_length > 0) { |
| if (temporal_3 == os_7) { |
| p_buf.set_pos_bit(starting_pos); |
| RAW_Force_Omit field_force_omit(3, force_omit, ExtendedMessageEndOfMessageAcknowledgement_descr_.raw->forceomit); |
| decoded_length = extendedMessageEndOfMessageAcknowledgement().RAW_decode(ExtendedMessageEndOfMessageAcknowledgement_descr_, p_buf, limit, top_bit_ord, TRUE, -1, TRUE, &field_force_omit); |
| if (decoded_length > 0) { |
| if ((*field_extendedMessageEndOfMessageAcknowledgement).ctrl() == os_7) { |
| return decoded_length + p_buf.increase_pos_padd(p_td.raw->padding) + prepaddlength; |
| }else already_failed = TRUE; |
| } |
| } |
| } |
| } |
| already_failed = FALSE; |
| if (!already_failed) { |
| OCTETSTRING temporal_4; |
| int decoded_4_length; |
| p_buf.set_pos_bit(starting_pos + 0); |
| decoded_4_length = temporal_4.RAW_decode(ExtendedMessageConnectionAbort_ctrl_descr_, p_buf, limit, top_bit_ord, TRUE); |
| if (decoded_4_length > 0) { |
| if (temporal_4 == os_4) { |
| p_buf.set_pos_bit(starting_pos); |
| RAW_Force_Omit field_force_omit(4, force_omit, ExtendedMessageConnectionAbort_descr_.raw->forceomit); |
| decoded_length = extendedMessageConnectionAbort().RAW_decode(ExtendedMessageConnectionAbort_descr_, p_buf, limit, top_bit_ord, TRUE, -1, TRUE, &field_force_omit); |
| if (decoded_length > 0) { |
| if ((*field_extendedMessageConnectionAbort).ctrl() == os_4) { |
| return decoded_length + p_buf.increase_pos_padd(p_td.raw->padding) + prepaddlength; |
| }else already_failed = TRUE; |
| } |
| } |
| } |
| } |
| } |
| clean_up(); |
| return -1; |
| } |
| |
| int ETP__CM::RAW_encode(const TTCN_Typedescriptor_t&, RAW_enc_tree& myleaf) const |
| { |
| int encoded_length = 0; |
| myleaf.isleaf = FALSE; |
| myleaf.body.node.num_of_nodes = 5; myleaf.body.node.nodes = init_nodes_of_enc_tree(5); |
| memset(myleaf.body.node.nodes, 0, 5 * sizeof(RAW_enc_tree *)); |
| switch (union_selection) { |
| case ALT_extendedMessageRequestToSend: |
| myleaf.body.node.nodes[0] = new RAW_enc_tree(TRUE, &myleaf, &myleaf.curr_pos, 0, ExtendedMessageRequestToSend_descr_.raw); |
| encoded_length = field_extendedMessageRequestToSend->RAW_encode(ExtendedMessageRequestToSend_descr_, *myleaf.body.node.nodes[0]); |
| myleaf.body.node.nodes[0]->coding_descr = &ExtendedMessageRequestToSend_descr_; |
| if ((*field_extendedMessageRequestToSend).ctrl() != os_3) { |
| RAW_enc_tree* temp_leaf; |
| { |
| RAW_enc_tr_pos pr_pos0; |
| pr_pos0.level=myleaf.curr_pos.level+2; |
| int new_pos0[]={0,0}; |
| pr_pos0.pos=init_new_tree_pos(myleaf.curr_pos,2,new_pos0); |
| temp_leaf = myleaf.get_node(pr_pos0); |
| if(temp_leaf != NULL){ |
| os_3.RAW_encode(ExtendedMessageRequestToSend_ctrl_descr_,*temp_leaf); |
| } else { |
| TTCN_EncDec_ErrorContext::error |
| (TTCN_EncDec::ET_OMITTED_TAG, "Encoding a tagged, but omitted value."); |
| } |
| free_tree_pos(pr_pos0.pos); |
| } |
| } |
| break; |
| case ALT_extendedMessageClearToSend: |
| myleaf.body.node.nodes[1] = new RAW_enc_tree(TRUE, &myleaf, &myleaf.curr_pos, 1, ExtendedMessageClearToSend_descr_.raw); |
| encoded_length = field_extendedMessageClearToSend->RAW_encode(ExtendedMessageClearToSend_descr_, *myleaf.body.node.nodes[1]); |
| myleaf.body.node.nodes[1]->coding_descr = &ExtendedMessageClearToSend_descr_; |
| if ((*field_extendedMessageClearToSend).ctrl() != os_5) { |
| RAW_enc_tree* temp_leaf; |
| { |
| RAW_enc_tr_pos pr_pos0; |
| pr_pos0.level=myleaf.curr_pos.level+2; |
| int new_pos0[]={1,0}; |
| pr_pos0.pos=init_new_tree_pos(myleaf.curr_pos,2,new_pos0); |
| temp_leaf = myleaf.get_node(pr_pos0); |
| if(temp_leaf != NULL){ |
| os_5.RAW_encode(ExtendedMessageClearToSend_ctrl_descr_,*temp_leaf); |
| } else { |
| TTCN_EncDec_ErrorContext::error |
| (TTCN_EncDec::ET_OMITTED_TAG, "Encoding a tagged, but omitted value."); |
| } |
| free_tree_pos(pr_pos0.pos); |
| } |
| } |
| break; |
| case ALT_extendedMessageDataPacketOffset: |
| myleaf.body.node.nodes[2] = new RAW_enc_tree(TRUE, &myleaf, &myleaf.curr_pos, 2, ExtendedMessageDataPacketOffset_descr_.raw); |
| encoded_length = field_extendedMessageDataPacketOffset->RAW_encode(ExtendedMessageDataPacketOffset_descr_, *myleaf.body.node.nodes[2]); |
| myleaf.body.node.nodes[2]->coding_descr = &ExtendedMessageDataPacketOffset_descr_; |
| if ((*field_extendedMessageDataPacketOffset).ctrl() != os_6) { |
| RAW_enc_tree* temp_leaf; |
| { |
| RAW_enc_tr_pos pr_pos0; |
| pr_pos0.level=myleaf.curr_pos.level+2; |
| int new_pos0[]={2,0}; |
| pr_pos0.pos=init_new_tree_pos(myleaf.curr_pos,2,new_pos0); |
| temp_leaf = myleaf.get_node(pr_pos0); |
| if(temp_leaf != NULL){ |
| os_6.RAW_encode(ExtendedMessageDataPacketOffset_ctrl_descr_,*temp_leaf); |
| } else { |
| TTCN_EncDec_ErrorContext::error |
| (TTCN_EncDec::ET_OMITTED_TAG, "Encoding a tagged, but omitted value."); |
| } |
| free_tree_pos(pr_pos0.pos); |
| } |
| } |
| break; |
| case ALT_extendedMessageEndOfMessageAcknowledgement: |
| myleaf.body.node.nodes[3] = new RAW_enc_tree(TRUE, &myleaf, &myleaf.curr_pos, 3, ExtendedMessageEndOfMessageAcknowledgement_descr_.raw); |
| encoded_length = field_extendedMessageEndOfMessageAcknowledgement->RAW_encode(ExtendedMessageEndOfMessageAcknowledgement_descr_, *myleaf.body.node.nodes[3]); |
| myleaf.body.node.nodes[3]->coding_descr = &ExtendedMessageEndOfMessageAcknowledgement_descr_; |
| if ((*field_extendedMessageEndOfMessageAcknowledgement).ctrl() != os_7) { |
| RAW_enc_tree* temp_leaf; |
| { |
| RAW_enc_tr_pos pr_pos0; |
| pr_pos0.level=myleaf.curr_pos.level+2; |
| int new_pos0[]={3,0}; |
| pr_pos0.pos=init_new_tree_pos(myleaf.curr_pos,2,new_pos0); |
| temp_leaf = myleaf.get_node(pr_pos0); |
| if(temp_leaf != NULL){ |
| os_7.RAW_encode(ExtendedMessageEndOfMessageAcknowledgement_ctrl_descr_,*temp_leaf); |
| } else { |
| TTCN_EncDec_ErrorContext::error |
| (TTCN_EncDec::ET_OMITTED_TAG, "Encoding a tagged, but omitted value."); |
| } |
| free_tree_pos(pr_pos0.pos); |
| } |
| } |
| break; |
| case ALT_extendedMessageConnectionAbort: |
| myleaf.body.node.nodes[4] = new RAW_enc_tree(TRUE, &myleaf, &myleaf.curr_pos, 4, ExtendedMessageConnectionAbort_descr_.raw); |
| encoded_length = field_extendedMessageConnectionAbort->RAW_encode(ExtendedMessageConnectionAbort_descr_, *myleaf.body.node.nodes[4]); |
| myleaf.body.node.nodes[4]->coding_descr = &ExtendedMessageConnectionAbort_descr_; |
| if ((*field_extendedMessageConnectionAbort).ctrl() != os_4) { |
| RAW_enc_tree* temp_leaf; |
| { |
| RAW_enc_tr_pos pr_pos0; |
| pr_pos0.level=myleaf.curr_pos.level+2; |
| int new_pos0[]={4,0}; |
| pr_pos0.pos=init_new_tree_pos(myleaf.curr_pos,2,new_pos0); |
| temp_leaf = myleaf.get_node(pr_pos0); |
| if(temp_leaf != NULL){ |
| os_4.RAW_encode(ExtendedMessageConnectionAbort_ctrl_descr_,*temp_leaf); |
| } else { |
| TTCN_EncDec_ErrorContext::error |
| (TTCN_EncDec::ET_OMITTED_TAG, "Encoding a tagged, but omitted value."); |
| } |
| free_tree_pos(pr_pos0.pos); |
| } |
| } |
| break; |
| default: |
| TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_UNBOUND, "Encoding an unbound value."); |
| } |
| return encoded_length; |
| } |
| |
| void ETP__CM_template::copy_value(const ETP__CM& other_value) |
| { |
| single_value.union_selection = other_value.get_selection(); |
| switch (single_value.union_selection) { |
| case ETP__CM::ALT_extendedMessageRequestToSend: |
| single_value.field_extendedMessageRequestToSend = new ExtendedMessageRequestToSend_template(other_value.extendedMessageRequestToSend()); |
| break; |
| case ETP__CM::ALT_extendedMessageClearToSend: |
| single_value.field_extendedMessageClearToSend = new ExtendedMessageClearToSend_template(other_value.extendedMessageClearToSend()); |
| break; |
| case ETP__CM::ALT_extendedMessageDataPacketOffset: |
| single_value.field_extendedMessageDataPacketOffset = new ExtendedMessageDataPacketOffset_template(other_value.extendedMessageDataPacketOffset()); |
| break; |
| case ETP__CM::ALT_extendedMessageEndOfMessageAcknowledgement: |
| single_value.field_extendedMessageEndOfMessageAcknowledgement = new ExtendedMessageEndOfMessageAcknowledgement_template(other_value.extendedMessageEndOfMessageAcknowledgement()); |
| break; |
| case ETP__CM::ALT_extendedMessageConnectionAbort: |
| single_value.field_extendedMessageConnectionAbort = new ExtendedMessageConnectionAbort_template(other_value.extendedMessageConnectionAbort()); |
| break; |
| default: |
| TTCN_error("Initializing a template with an unbound value of type @IsobusCMMessageTypes.ETP_CM."); |
| } |
| set_selection(SPECIFIC_VALUE); |
| } |
| |
| void ETP__CM_template::copy_template(const ETP__CM_template& other_value) |
| { |
| switch (other_value.template_selection) { |
| case SPECIFIC_VALUE: |
| single_value.union_selection = other_value.single_value.union_selection; |
| switch (single_value.union_selection) { |
| case ETP__CM::ALT_extendedMessageRequestToSend: |
| single_value.field_extendedMessageRequestToSend = new ExtendedMessageRequestToSend_template(*other_value.single_value.field_extendedMessageRequestToSend); |
| break; |
| case ETP__CM::ALT_extendedMessageClearToSend: |
| single_value.field_extendedMessageClearToSend = new ExtendedMessageClearToSend_template(*other_value.single_value.field_extendedMessageClearToSend); |
| break; |
| case ETP__CM::ALT_extendedMessageDataPacketOffset: |
| single_value.field_extendedMessageDataPacketOffset = new ExtendedMessageDataPacketOffset_template(*other_value.single_value.field_extendedMessageDataPacketOffset); |
| break; |
| case ETP__CM::ALT_extendedMessageEndOfMessageAcknowledgement: |
| single_value.field_extendedMessageEndOfMessageAcknowledgement = new ExtendedMessageEndOfMessageAcknowledgement_template(*other_value.single_value.field_extendedMessageEndOfMessageAcknowledgement); |
| break; |
| case ETP__CM::ALT_extendedMessageConnectionAbort: |
| single_value.field_extendedMessageConnectionAbort = new ExtendedMessageConnectionAbort_template(*other_value.single_value.field_extendedMessageConnectionAbort); |
| break; |
| default: |
| TTCN_error("Internal error: Invalid union selector in a specific value when copying a template of type @IsobusCMMessageTypes.ETP_CM."); |
| } |
| case OMIT_VALUE: |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| break; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| value_list.n_values = other_value.value_list.n_values; |
| value_list.list_value = new ETP__CM_template[value_list.n_values]; |
| for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) |
| value_list.list_value[list_count].copy_template(other_value.value_list.list_value[list_count]); |
| break; |
| default: |
| TTCN_error("Copying an uninitialized template of union type @IsobusCMMessageTypes.ETP_CM."); |
| } |
| set_selection(other_value); |
| } |
| |
| ETP__CM_template::ETP__CM_template() |
| { |
| } |
| |
| ETP__CM_template::ETP__CM_template(template_sel other_value) |
| : Base_Template(other_value) |
| { |
| check_single_selection(other_value); |
| } |
| |
| ETP__CM_template::ETP__CM_template(const ETP__CM& other_value) |
| { |
| copy_value(other_value); |
| } |
| |
| ETP__CM_template::ETP__CM_template(const OPTIONAL<ETP__CM>& other_value) |
| { |
| switch (other_value.get_selection()) { |
| case OPTIONAL_PRESENT: |
| copy_value((const ETP__CM&)other_value); |
| break; |
| case OPTIONAL_OMIT: |
| set_selection(OMIT_VALUE); |
| break; |
| default: |
| TTCN_error("Creating a template of union type @IsobusCMMessageTypes.ETP_CM from an unbound optional field."); |
| } |
| } |
| |
| ETP__CM_template::ETP__CM_template(const ETP__CM_template& other_value) |
| : Base_Template(){ |
| copy_template(other_value); |
| } |
| |
| ETP__CM_template::~ETP__CM_template() |
| { |
| clean_up(); |
| } |
| |
| void ETP__CM_template::clean_up() |
| { |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| switch (single_value.union_selection) { |
| case ETP__CM::ALT_extendedMessageRequestToSend: |
| delete single_value.field_extendedMessageRequestToSend; |
| break; |
| case ETP__CM::ALT_extendedMessageClearToSend: |
| delete single_value.field_extendedMessageClearToSend; |
| break; |
| case ETP__CM::ALT_extendedMessageDataPacketOffset: |
| delete single_value.field_extendedMessageDataPacketOffset; |
| break; |
| case ETP__CM::ALT_extendedMessageEndOfMessageAcknowledgement: |
| delete single_value.field_extendedMessageEndOfMessageAcknowledgement; |
| break; |
| case ETP__CM::ALT_extendedMessageConnectionAbort: |
| delete single_value.field_extendedMessageConnectionAbort; |
| default: |
| break; |
| } |
| break; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| delete [] value_list.list_value; |
| default: |
| break; |
| } |
| template_selection = UNINITIALIZED_TEMPLATE; |
| } |
| |
| ETP__CM_template& ETP__CM_template::operator=(template_sel other_value) |
| { |
| check_single_selection(other_value); |
| clean_up(); |
| set_selection(other_value); |
| return *this; |
| } |
| |
| ETP__CM_template& ETP__CM_template::operator=(const ETP__CM& other_value) |
| { |
| clean_up(); |
| copy_value(other_value); |
| return *this; |
| } |
| |
| ETP__CM_template& ETP__CM_template::operator=(const OPTIONAL<ETP__CM>& other_value) |
| { |
| clean_up(); |
| switch (other_value.get_selection()) { |
| case OPTIONAL_PRESENT: |
| copy_value((const ETP__CM&)other_value); |
| break; |
| case OPTIONAL_OMIT: |
| set_selection(OMIT_VALUE); |
| break; |
| default: |
| TTCN_error("Assignment of an unbound optional field to a template of union type @IsobusCMMessageTypes.ETP_CM."); |
| } |
| return *this; |
| } |
| |
| ETP__CM_template& ETP__CM_template::operator=(const ETP__CM_template& other_value) |
| { |
| if (&other_value != this) { |
| clean_up(); |
| copy_template(other_value); |
| } |
| return *this; |
| } |
| |
| boolean ETP__CM_template::match(const ETP__CM& other_value, boolean legacy) const |
| { |
| if (!other_value.is_bound()) return FALSE; |
| switch (template_selection) { |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| return TRUE; |
| case OMIT_VALUE: |
| return FALSE; |
| case SPECIFIC_VALUE: |
| { |
| ETP__CM::union_selection_type value_selection = other_value.get_selection(); |
| if (value_selection == ETP__CM::UNBOUND_VALUE) return FALSE; |
| if (value_selection != single_value.union_selection) return FALSE; |
| switch (value_selection) { |
| case ETP__CM::ALT_extendedMessageRequestToSend: |
| return single_value.field_extendedMessageRequestToSend->match(other_value.extendedMessageRequestToSend(), legacy); |
| case ETP__CM::ALT_extendedMessageClearToSend: |
| return single_value.field_extendedMessageClearToSend->match(other_value.extendedMessageClearToSend(), legacy); |
| case ETP__CM::ALT_extendedMessageDataPacketOffset: |
| return single_value.field_extendedMessageDataPacketOffset->match(other_value.extendedMessageDataPacketOffset(), legacy); |
| case ETP__CM::ALT_extendedMessageEndOfMessageAcknowledgement: |
| return single_value.field_extendedMessageEndOfMessageAcknowledgement->match(other_value.extendedMessageEndOfMessageAcknowledgement(), legacy); |
| case ETP__CM::ALT_extendedMessageConnectionAbort: |
| return single_value.field_extendedMessageConnectionAbort->match(other_value.extendedMessageConnectionAbort(), legacy); |
| default: |
| TTCN_error("Internal error: Invalid selector in a specific value when matching a template of union type @IsobusCMMessageTypes.ETP_CM."); |
| } |
| } |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) |
| if (value_list.list_value[list_count].match(other_value, legacy)) return template_selection == VALUE_LIST; |
| return template_selection == COMPLEMENTED_LIST; |
| default: |
| TTCN_error ("Matching an uninitialized template of union type @IsobusCMMessageTypes.ETP_CM."); |
| } |
| return FALSE; |
| } |
| |
| boolean ETP__CM_template::is_value() const |
| { |
| if (template_selection != SPECIFIC_VALUE || is_ifpresent) return FALSE; |
| switch (single_value.union_selection) { |
| case ETP__CM::ALT_extendedMessageRequestToSend: |
| return single_value.field_extendedMessageRequestToSend->is_value(); |
| case ETP__CM::ALT_extendedMessageClearToSend: |
| return single_value.field_extendedMessageClearToSend->is_value(); |
| case ETP__CM::ALT_extendedMessageDataPacketOffset: |
| return single_value.field_extendedMessageDataPacketOffset->is_value(); |
| case ETP__CM::ALT_extendedMessageEndOfMessageAcknowledgement: |
| return single_value.field_extendedMessageEndOfMessageAcknowledgement->is_value(); |
| case ETP__CM::ALT_extendedMessageConnectionAbort: |
| return single_value.field_extendedMessageConnectionAbort->is_value(); |
| default: |
| TTCN_error("Internal error: Invalid selector in a specific value when performing is_value operation on a template of union type @IsobusCMMessageTypes.ETP_CM."); |
| } |
| } |
| |
| ETP__CM ETP__CM_template::valueof() const |
| { |
| if (template_selection != SPECIFIC_VALUE || is_ifpresent) |
| TTCN_error("Performing a valueof or send operation on a non-specific template of union type @IsobusCMMessageTypes.ETP_CM."); |
| ETP__CM ret_val; |
| switch (single_value.union_selection) { |
| case ETP__CM::ALT_extendedMessageRequestToSend: |
| ret_val.extendedMessageRequestToSend() = single_value.field_extendedMessageRequestToSend->valueof(); |
| break; |
| case ETP__CM::ALT_extendedMessageClearToSend: |
| ret_val.extendedMessageClearToSend() = single_value.field_extendedMessageClearToSend->valueof(); |
| break; |
| case ETP__CM::ALT_extendedMessageDataPacketOffset: |
| ret_val.extendedMessageDataPacketOffset() = single_value.field_extendedMessageDataPacketOffset->valueof(); |
| break; |
| case ETP__CM::ALT_extendedMessageEndOfMessageAcknowledgement: |
| ret_val.extendedMessageEndOfMessageAcknowledgement() = single_value.field_extendedMessageEndOfMessageAcknowledgement->valueof(); |
| break; |
| case ETP__CM::ALT_extendedMessageConnectionAbort: |
| ret_val.extendedMessageConnectionAbort() = single_value.field_extendedMessageConnectionAbort->valueof(); |
| break; |
| default: |
| TTCN_error("Internal error: Invalid selector in a specific value when performing valueof operation on a template of union type @IsobusCMMessageTypes.ETP_CM."); |
| } |
| return ret_val; |
| } |
| |
| ETP__CM_template& ETP__CM_template::list_item(unsigned int list_index) const |
| { |
| if (template_selection != VALUE_LIST && template_selection != COMPLEMENTED_LIST) TTCN_error("Internal error: Accessing a list element of a non-list template of union type @IsobusCMMessageTypes.ETP_CM."); |
| if (list_index >= value_list.n_values) TTCN_error("Internal error: Index overflow in a value list template of union type @IsobusCMMessageTypes.ETP_CM."); |
| return value_list.list_value[list_index]; |
| } |
| void ETP__CM_template::set_type(template_sel template_type, unsigned int list_length) |
| { |
| if (template_type != VALUE_LIST && template_type != COMPLEMENTED_LIST) TTCN_error ("Internal error: Setting an invalid list for a template of union type @IsobusCMMessageTypes.ETP_CM."); |
| clean_up(); |
| set_selection(template_type); |
| value_list.n_values = list_length; |
| value_list.list_value = new ETP__CM_template[list_length]; |
| } |
| |
| ExtendedMessageRequestToSend_template& ETP__CM_template::extendedMessageRequestToSend() |
| { |
| if (template_selection != SPECIFIC_VALUE || single_value.union_selection != ETP__CM::ALT_extendedMessageRequestToSend) { |
| template_sel old_selection = template_selection; |
| clean_up(); |
| if (old_selection == ANY_VALUE || old_selection == ANY_OR_OMIT) single_value.field_extendedMessageRequestToSend = new ExtendedMessageRequestToSend_template(ANY_VALUE); |
| else single_value.field_extendedMessageRequestToSend = new ExtendedMessageRequestToSend_template; |
| single_value.union_selection = ETP__CM::ALT_extendedMessageRequestToSend; |
| set_selection(SPECIFIC_VALUE); |
| } |
| return *single_value.field_extendedMessageRequestToSend; |
| } |
| |
| const ExtendedMessageRequestToSend_template& ETP__CM_template::extendedMessageRequestToSend() const |
| { |
| if (template_selection != SPECIFIC_VALUE) TTCN_error("Accessing field extendedMessageRequestToSend in a non-specific template of union type @IsobusCMMessageTypes.ETP_CM."); |
| if (single_value.union_selection != ETP__CM::ALT_extendedMessageRequestToSend) TTCN_error("Accessing non-selected field extendedMessageRequestToSend in a template of union type @IsobusCMMessageTypes.ETP_CM."); |
| return *single_value.field_extendedMessageRequestToSend; |
| } |
| |
| ExtendedMessageClearToSend_template& ETP__CM_template::extendedMessageClearToSend() |
| { |
| if (template_selection != SPECIFIC_VALUE || single_value.union_selection != ETP__CM::ALT_extendedMessageClearToSend) { |
| template_sel old_selection = template_selection; |
| clean_up(); |
| if (old_selection == ANY_VALUE || old_selection == ANY_OR_OMIT) single_value.field_extendedMessageClearToSend = new ExtendedMessageClearToSend_template(ANY_VALUE); |
| else single_value.field_extendedMessageClearToSend = new ExtendedMessageClearToSend_template; |
| single_value.union_selection = ETP__CM::ALT_extendedMessageClearToSend; |
| set_selection(SPECIFIC_VALUE); |
| } |
| return *single_value.field_extendedMessageClearToSend; |
| } |
| |
| const ExtendedMessageClearToSend_template& ETP__CM_template::extendedMessageClearToSend() const |
| { |
| if (template_selection != SPECIFIC_VALUE) TTCN_error("Accessing field extendedMessageClearToSend in a non-specific template of union type @IsobusCMMessageTypes.ETP_CM."); |
| if (single_value.union_selection != ETP__CM::ALT_extendedMessageClearToSend) TTCN_error("Accessing non-selected field extendedMessageClearToSend in a template of union type @IsobusCMMessageTypes.ETP_CM."); |
| return *single_value.field_extendedMessageClearToSend; |
| } |
| |
| ExtendedMessageDataPacketOffset_template& ETP__CM_template::extendedMessageDataPacketOffset() |
| { |
| if (template_selection != SPECIFIC_VALUE || single_value.union_selection != ETP__CM::ALT_extendedMessageDataPacketOffset) { |
| template_sel old_selection = template_selection; |
| clean_up(); |
| if (old_selection == ANY_VALUE || old_selection == ANY_OR_OMIT) single_value.field_extendedMessageDataPacketOffset = new ExtendedMessageDataPacketOffset_template(ANY_VALUE); |
| else single_value.field_extendedMessageDataPacketOffset = new ExtendedMessageDataPacketOffset_template; |
| single_value.union_selection = ETP__CM::ALT_extendedMessageDataPacketOffset; |
| set_selection(SPECIFIC_VALUE); |
| } |
| return *single_value.field_extendedMessageDataPacketOffset; |
| } |
| |
| const ExtendedMessageDataPacketOffset_template& ETP__CM_template::extendedMessageDataPacketOffset() const |
| { |
| if (template_selection != SPECIFIC_VALUE) TTCN_error("Accessing field extendedMessageDataPacketOffset in a non-specific template of union type @IsobusCMMessageTypes.ETP_CM."); |
| if (single_value.union_selection != ETP__CM::ALT_extendedMessageDataPacketOffset) TTCN_error("Accessing non-selected field extendedMessageDataPacketOffset in a template of union type @IsobusCMMessageTypes.ETP_CM."); |
| return *single_value.field_extendedMessageDataPacketOffset; |
| } |
| |
| ExtendedMessageEndOfMessageAcknowledgement_template& ETP__CM_template::extendedMessageEndOfMessageAcknowledgement() |
| { |
| if (template_selection != SPECIFIC_VALUE || single_value.union_selection != ETP__CM::ALT_extendedMessageEndOfMessageAcknowledgement) { |
| template_sel old_selection = template_selection; |
| clean_up(); |
| if (old_selection == ANY_VALUE || old_selection == ANY_OR_OMIT) single_value.field_extendedMessageEndOfMessageAcknowledgement = new ExtendedMessageEndOfMessageAcknowledgement_template(ANY_VALUE); |
| else single_value.field_extendedMessageEndOfMessageAcknowledgement = new ExtendedMessageEndOfMessageAcknowledgement_template; |
| single_value.union_selection = ETP__CM::ALT_extendedMessageEndOfMessageAcknowledgement; |
| set_selection(SPECIFIC_VALUE); |
| } |
| return *single_value.field_extendedMessageEndOfMessageAcknowledgement; |
| } |
| |
| const ExtendedMessageEndOfMessageAcknowledgement_template& ETP__CM_template::extendedMessageEndOfMessageAcknowledgement() const |
| { |
| if (template_selection != SPECIFIC_VALUE) TTCN_error("Accessing field extendedMessageEndOfMessageAcknowledgement in a non-specific template of union type @IsobusCMMessageTypes.ETP_CM."); |
| if (single_value.union_selection != ETP__CM::ALT_extendedMessageEndOfMessageAcknowledgement) TTCN_error("Accessing non-selected field extendedMessageEndOfMessageAcknowledgement in a template of union type @IsobusCMMessageTypes.ETP_CM."); |
| return *single_value.field_extendedMessageEndOfMessageAcknowledgement; |
| } |
| |
| ExtendedMessageConnectionAbort_template& ETP__CM_template::extendedMessageConnectionAbort() |
| { |
| if (template_selection != SPECIFIC_VALUE || single_value.union_selection != ETP__CM::ALT_extendedMessageConnectionAbort) { |
| template_sel old_selection = template_selection; |
| clean_up(); |
| if (old_selection == ANY_VALUE || old_selection == ANY_OR_OMIT) single_value.field_extendedMessageConnectionAbort = new ExtendedMessageConnectionAbort_template(ANY_VALUE); |
| else single_value.field_extendedMessageConnectionAbort = new ExtendedMessageConnectionAbort_template; |
| single_value.union_selection = ETP__CM::ALT_extendedMessageConnectionAbort; |
| set_selection(SPECIFIC_VALUE); |
| } |
| return *single_value.field_extendedMessageConnectionAbort; |
| } |
| |
| const ExtendedMessageConnectionAbort_template& ETP__CM_template::extendedMessageConnectionAbort() const |
| { |
| if (template_selection != SPECIFIC_VALUE) TTCN_error("Accessing field extendedMessageConnectionAbort in a non-specific template of union type @IsobusCMMessageTypes.ETP_CM."); |
| if (single_value.union_selection != ETP__CM::ALT_extendedMessageConnectionAbort) TTCN_error("Accessing non-selected field extendedMessageConnectionAbort in a template of union type @IsobusCMMessageTypes.ETP_CM."); |
| return *single_value.field_extendedMessageConnectionAbort; |
| } |
| |
| boolean ETP__CM_template::ischosen(ETP__CM::union_selection_type checked_selection) const |
| { |
| if (checked_selection == ETP__CM::UNBOUND_VALUE) TTCN_error("Internal error: Performing ischosen() operation on an invalid field of union type @IsobusCMMessageTypes.ETP_CM."); |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| if (single_value.union_selection == ETP__CM::UNBOUND_VALUE) TTCN_error("Internal error: Invalid selector in a specific value when performing ischosen() operation on a template of union type @IsobusCMMessageTypes.ETP_CM."); |
| return single_value.union_selection == checked_selection; |
| case VALUE_LIST: |
| { |
| if (value_list.n_values < 1) |
| TTCN_error("Internal error: Performing ischosen() operation on a template of union type @IsobusCMMessageTypes.ETP_CM containing an empty list."); |
| boolean ret_val = value_list.list_value[0].ischosen(checked_selection); |
| for (unsigned int list_count = 1; ret_val == TRUE && list_count < value_list.n_values; list_count++) { |
| ret_val = value_list.list_value[list_count].ischosen(checked_selection); |
| } |
| return ret_val; |
| } |
| default: |
| return FALSE; |
| } |
| return FALSE; |
| } |
| |
| void ETP__CM_template::log() const |
| { |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| switch (single_value.union_selection) { |
| case ETP__CM::ALT_extendedMessageRequestToSend: |
| TTCN_Logger::log_event_str("{ extendedMessageRequestToSend := "); |
| single_value.field_extendedMessageRequestToSend->log(); |
| TTCN_Logger::log_event_str(" }"); |
| break; |
| case ETP__CM::ALT_extendedMessageClearToSend: |
| TTCN_Logger::log_event_str("{ extendedMessageClearToSend := "); |
| single_value.field_extendedMessageClearToSend->log(); |
| TTCN_Logger::log_event_str(" }"); |
| break; |
| case ETP__CM::ALT_extendedMessageDataPacketOffset: |
| TTCN_Logger::log_event_str("{ extendedMessageDataPacketOffset := "); |
| single_value.field_extendedMessageDataPacketOffset->log(); |
| TTCN_Logger::log_event_str(" }"); |
| break; |
| case ETP__CM::ALT_extendedMessageEndOfMessageAcknowledgement: |
| TTCN_Logger::log_event_str("{ extendedMessageEndOfMessageAcknowledgement := "); |
| single_value.field_extendedMessageEndOfMessageAcknowledgement->log(); |
| TTCN_Logger::log_event_str(" }"); |
| break; |
| case ETP__CM::ALT_extendedMessageConnectionAbort: |
| TTCN_Logger::log_event_str("{ extendedMessageConnectionAbort := "); |
| single_value.field_extendedMessageConnectionAbort->log(); |
| TTCN_Logger::log_event_str(" }"); |
| break; |
| default: |
| TTCN_Logger::log_event_str("<invalid selector>"); |
| } |
| break; |
| case COMPLEMENTED_LIST: |
| TTCN_Logger::log_event_str("complement"); |
| case VALUE_LIST: |
| TTCN_Logger::log_char('('); |
| for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) { |
| if (list_count > 0) TTCN_Logger::log_event_str(", "); |
| value_list.list_value[list_count].log(); |
| } |
| TTCN_Logger::log_char(')'); |
| break; |
| default: |
| log_generic(); |
| } |
| log_ifpresent(); |
| } |
| |
| void ETP__CM_template::log_match(const ETP__CM& match_value, boolean legacy) const |
| { |
| if(TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity() && match(match_value, legacy)){ |
| TTCN_Logger::print_logmatch_buffer(); |
| TTCN_Logger::log_event_str(" matched"); |
| return; |
| } |
| if (template_selection == SPECIFIC_VALUE && single_value.union_selection == match_value.get_selection()) { |
| switch (single_value.union_selection) { |
| case ETP__CM::ALT_extendedMessageRequestToSend: |
| if(TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity()){ |
| TTCN_Logger::log_logmatch_info(".extendedMessageRequestToSend"); |
| single_value.field_extendedMessageRequestToSend->log_match(match_value.extendedMessageRequestToSend(), legacy); |
| } else { |
| TTCN_Logger::log_event_str("{ extendedMessageRequestToSend := "); |
| single_value.field_extendedMessageRequestToSend->log_match(match_value.extendedMessageRequestToSend(), legacy); |
| TTCN_Logger::log_event_str(" }"); |
| } |
| break; |
| case ETP__CM::ALT_extendedMessageClearToSend: |
| if(TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity()){ |
| TTCN_Logger::log_logmatch_info(".extendedMessageClearToSend"); |
| single_value.field_extendedMessageClearToSend->log_match(match_value.extendedMessageClearToSend(), legacy); |
| } else { |
| TTCN_Logger::log_event_str("{ extendedMessageClearToSend := "); |
| single_value.field_extendedMessageClearToSend->log_match(match_value.extendedMessageClearToSend(), legacy); |
| TTCN_Logger::log_event_str(" }"); |
| } |
| break; |
| case ETP__CM::ALT_extendedMessageDataPacketOffset: |
| if(TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity()){ |
| TTCN_Logger::log_logmatch_info(".extendedMessageDataPacketOffset"); |
| single_value.field_extendedMessageDataPacketOffset->log_match(match_value.extendedMessageDataPacketOffset(), legacy); |
| } else { |
| TTCN_Logger::log_event_str("{ extendedMessageDataPacketOffset := "); |
| single_value.field_extendedMessageDataPacketOffset->log_match(match_value.extendedMessageDataPacketOffset(), legacy); |
| TTCN_Logger::log_event_str(" }"); |
| } |
| break; |
| case ETP__CM::ALT_extendedMessageEndOfMessageAcknowledgement: |
| if(TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity()){ |
| TTCN_Logger::log_logmatch_info(".extendedMessageEndOfMessageAcknowledgement"); |
| single_value.field_extendedMessageEndOfMessageAcknowledgement->log_match(match_value.extendedMessageEndOfMessageAcknowledgement(), legacy); |
| } else { |
| TTCN_Logger::log_event_str("{ extendedMessageEndOfMessageAcknowledgement := "); |
| single_value.field_extendedMessageEndOfMessageAcknowledgement->log_match(match_value.extendedMessageEndOfMessageAcknowledgement(), legacy); |
| TTCN_Logger::log_event_str(" }"); |
| } |
| break; |
| case ETP__CM::ALT_extendedMessageConnectionAbort: |
| if(TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity()){ |
| TTCN_Logger::log_logmatch_info(".extendedMessageConnectionAbort"); |
| single_value.field_extendedMessageConnectionAbort->log_match(match_value.extendedMessageConnectionAbort(), legacy); |
| } else { |
| TTCN_Logger::log_event_str("{ extendedMessageConnectionAbort := "); |
| single_value.field_extendedMessageConnectionAbort->log_match(match_value.extendedMessageConnectionAbort(), legacy); |
| TTCN_Logger::log_event_str(" }"); |
| } |
| break; |
| default: |
| TTCN_Logger::print_logmatch_buffer(); |
| TTCN_Logger::log_event_str("<invalid selector>"); |
| } |
| } else { |
| TTCN_Logger::print_logmatch_buffer(); |
| match_value.log(); |
| TTCN_Logger::log_event_str(" with "); |
| log(); |
| if (match(match_value, legacy)) TTCN_Logger::log_event_str(" matched"); |
| else TTCN_Logger::log_event_str(" unmatched"); |
| } |
| } |
| |
| void ETP__CM_template::encode_text(Text_Buf& text_buf) const |
| { |
| encode_text_base(text_buf); |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| text_buf.push_int(single_value.union_selection); |
| switch (single_value.union_selection) { |
| case ETP__CM::ALT_extendedMessageRequestToSend: |
| single_value.field_extendedMessageRequestToSend->encode_text(text_buf); |
| break; |
| case ETP__CM::ALT_extendedMessageClearToSend: |
| single_value.field_extendedMessageClearToSend->encode_text(text_buf); |
| break; |
| case ETP__CM::ALT_extendedMessageDataPacketOffset: |
| single_value.field_extendedMessageDataPacketOffset->encode_text(text_buf); |
| break; |
| case ETP__CM::ALT_extendedMessageEndOfMessageAcknowledgement: |
| single_value.field_extendedMessageEndOfMessageAcknowledgement->encode_text(text_buf); |
| break; |
| case ETP__CM::ALT_extendedMessageConnectionAbort: |
| single_value.field_extendedMessageConnectionAbort->encode_text(text_buf); |
| break; |
| default: |
| TTCN_error("Internal error: Invalid selector in a specific value when encoding a template of union type @IsobusCMMessageTypes.ETP_CM."); |
| } |
| case OMIT_VALUE: |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| break; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| text_buf.push_int(value_list.n_values); |
| for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) |
| value_list.list_value[list_count].encode_text(text_buf); |
| break; |
| default: |
| TTCN_error("Text encoder: Encoding an uninitialized template of type @IsobusCMMessageTypes.ETP_CM."); |
| } |
| } |
| |
| void ETP__CM_template::decode_text(Text_Buf& text_buf) |
| { |
| clean_up(); |
| decode_text_base(text_buf); |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| { |
| single_value.union_selection = ETP__CM::UNBOUND_VALUE; |
| ETP__CM::union_selection_type new_selection = (ETP__CM::union_selection_type)text_buf.pull_int().get_val(); |
| switch (new_selection) { |
| case ETP__CM::ALT_extendedMessageRequestToSend: |
| single_value.field_extendedMessageRequestToSend = new ExtendedMessageRequestToSend_template; |
| single_value.field_extendedMessageRequestToSend->decode_text(text_buf); |
| break; |
| case ETP__CM::ALT_extendedMessageClearToSend: |
| single_value.field_extendedMessageClearToSend = new ExtendedMessageClearToSend_template; |
| single_value.field_extendedMessageClearToSend->decode_text(text_buf); |
| break; |
| case ETP__CM::ALT_extendedMessageDataPacketOffset: |
| single_value.field_extendedMessageDataPacketOffset = new ExtendedMessageDataPacketOffset_template; |
| single_value.field_extendedMessageDataPacketOffset->decode_text(text_buf); |
| break; |
| case ETP__CM::ALT_extendedMessageEndOfMessageAcknowledgement: |
| single_value.field_extendedMessageEndOfMessageAcknowledgement = new ExtendedMessageEndOfMessageAcknowledgement_template; |
| single_value.field_extendedMessageEndOfMessageAcknowledgement->decode_text(text_buf); |
| break; |
| case ETP__CM::ALT_extendedMessageConnectionAbort: |
| single_value.field_extendedMessageConnectionAbort = new ExtendedMessageConnectionAbort_template; |
| single_value.field_extendedMessageConnectionAbort->decode_text(text_buf); |
| break; |
| default: |
| TTCN_error("Text decoder: Unrecognized union selector was received for a template of type @IsobusCMMessageTypes.ETP_CM."); |
| } |
| single_value.union_selection = new_selection; |
| } |
| case OMIT_VALUE: |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| break; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| value_list.n_values = text_buf.pull_int().get_val(); |
| value_list.list_value = new ETP__CM_template[value_list.n_values]; |
| for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) |
| value_list.list_value[list_count].decode_text(text_buf); |
| break; |
| default: |
| TTCN_error("Text decoder: Unrecognized selector was received in a template of type @IsobusCMMessageTypes.ETP_CM."); |
| } |
| } |
| |
| boolean ETP__CM_template::is_present(boolean legacy) const |
| { |
| if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE; |
| return !match_omit(legacy); |
| } |
| |
| boolean ETP__CM_template::match_omit(boolean legacy) const |
| { |
| if (is_ifpresent) return TRUE; |
| switch (template_selection) { |
| case OMIT_VALUE: |
| case ANY_OR_OMIT: |
| return TRUE; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| if (legacy) { |
| for (unsigned int v_idx=0; v_idx<value_list.n_values; v_idx++) |
| if (value_list.list_value[v_idx].match_omit()) |
| return template_selection==VALUE_LIST; |
| return template_selection==COMPLEMENTED_LIST; |
| } // else fall through |
| default: |
| return FALSE; |
| } |
| return FALSE; |
| } |
| |
| void ETP__CM_template::set_param(Module_Param& param) |
| { |
| if (dynamic_cast<Module_Param_Name*>(param.get_id()) != NULL && |
| param.get_id()->next_name()) { |
| char* param_field = param.get_id()->get_current_name(); |
| if (param_field[0] >= '0' && param_field[0] <= '9') { |
| param.error("Unexpected array index in module parameter, expected a valid field" |
| " name for union template type `@IsobusCMMessageTypes.ETP_CM'"); |
| } |
| if (strcmp("extendedMessageRequestToSend", param_field) == 0) { |
| extendedMessageRequestToSend().set_param(param); |
| return; |
| } else if (strcmp("extendedMessageClearToSend", param_field) == 0) { |
| extendedMessageClearToSend().set_param(param); |
| return; |
| } else if (strcmp("extendedMessageDataPacketOffset", param_field) == 0) { |
| extendedMessageDataPacketOffset().set_param(param); |
| return; |
| } else if (strcmp("extendedMessageEndOfMessageAcknowledgement", param_field) == 0) { |
| extendedMessageEndOfMessageAcknowledgement().set_param(param); |
| return; |
| } else if (strcmp("extendedMessageConnectionAbort", param_field) == 0) { |
| extendedMessageConnectionAbort().set_param(param); |
| return; |
| } else param.error("Field `%s' not found in union template type `@IsobusCMMessageTypes.ETP_CM'", param_field); |
| } |
| param.basic_check(Module_Param::BC_TEMPLATE, "union template"); |
| Module_Param_Ptr m_p = ¶m; |
| switch (m_p->get_type()) { |
| case Module_Param::MP_Omit: |
| *this = OMIT_VALUE; |
| break; |
| case Module_Param::MP_Any: |
| *this = ANY_VALUE; |
| break; |
| case Module_Param::MP_AnyOrNone: |
| *this = ANY_OR_OMIT; |
| break; |
| case Module_Param::MP_List_Template: |
| case Module_Param::MP_ComplementList_Template: { |
| ETP__CM_template new_temp; |
| new_temp.set_type(m_p->get_type()==Module_Param::MP_List_Template ? VALUE_LIST : COMPLEMENTED_LIST, m_p->get_size()); |
| for (size_t p_i=0; p_i<m_p->get_size(); p_i++) { |
| new_temp.list_item(p_i).set_param(*m_p->get_elem(p_i)); |
| } |
| *this = new_temp; |
| break; } |
| case Module_Param::MP_Value_List: |
| if (m_p->get_size()==0) break; |
| param.type_error("union template", "@IsobusCMMessageTypes.ETP_CM"); |
| break; |
| case Module_Param::MP_Assignment_List: { |
| Module_Param* mp_last = m_p->get_elem(m_p->get_size()-1); |
| char* last_name = mp_last->get_id()->get_name(); |
| if (!strcmp(last_name, "extendedMessageRequestToSend")) { |
| extendedMessageRequestToSend().set_param(*mp_last); |
| break; |
| } |
| if (!strcmp(last_name, "extendedMessageClearToSend")) { |
| extendedMessageClearToSend().set_param(*mp_last); |
| break; |
| } |
| if (!strcmp(last_name, "extendedMessageDataPacketOffset")) { |
| extendedMessageDataPacketOffset().set_param(*mp_last); |
| break; |
| } |
| if (!strcmp(last_name, "extendedMessageEndOfMessageAcknowledgement")) { |
| extendedMessageEndOfMessageAcknowledgement().set_param(*mp_last); |
| break; |
| } |
| if (!strcmp(last_name, "extendedMessageConnectionAbort")) { |
| extendedMessageConnectionAbort().set_param(*mp_last); |
| break; |
| } |
| mp_last->error("Field %s does not exist in type @IsobusCMMessageTypes.ETP_CM.", last_name); |
| } break; |
| default: |
| param.type_error("union template", "@IsobusCMMessageTypes.ETP_CM"); |
| } |
| is_ifpresent = param.get_ifpresent(); |
| } |
| |
| void ETP__CM_template::check_restriction(template_res t_res, const char* t_name, boolean legacy) const |
| { |
| if (template_selection==UNINITIALIZED_TEMPLATE) return; |
| switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) { |
| case TR_OMIT: |
| if (template_selection==OMIT_VALUE) return; |
| case TR_VALUE: |
| if (template_selection!=SPECIFIC_VALUE || is_ifpresent) break; |
| switch (single_value.union_selection) { |
| case ETP__CM::ALT_extendedMessageRequestToSend: |
| single_value.field_extendedMessageRequestToSend->check_restriction(t_res, t_name ? t_name : "@IsobusCMMessageTypes.ETP_CM"); |
| return; |
| case ETP__CM::ALT_extendedMessageClearToSend: |
| single_value.field_extendedMessageClearToSend->check_restriction(t_res, t_name ? t_name : "@IsobusCMMessageTypes.ETP_CM"); |
| return; |
| case ETP__CM::ALT_extendedMessageDataPacketOffset: |
| single_value.field_extendedMessageDataPacketOffset->check_restriction(t_res, t_name ? t_name : "@IsobusCMMessageTypes.ETP_CM"); |
| return; |
| case ETP__CM::ALT_extendedMessageEndOfMessageAcknowledgement: |
| single_value.field_extendedMessageEndOfMessageAcknowledgement->check_restriction(t_res, t_name ? t_name : "@IsobusCMMessageTypes.ETP_CM"); |
| return; |
| case ETP__CM::ALT_extendedMessageConnectionAbort: |
| single_value.field_extendedMessageConnectionAbort->check_restriction(t_res, t_name ? t_name : "@IsobusCMMessageTypes.ETP_CM"); |
| return; |
| default: |
| TTCN_error("Internal error: Invalid selector in a specific value when performing check_restriction operation on a template of union type @IsobusCMMessageTypes.ETP_CM."); |
| } |
| case TR_PRESENT: |
| if (!match_omit(legacy)) return; |
| break; |
| default: |
| return; |
| } |
| TTCN_error("Restriction `%s' on template of type %s violated.", get_res_name(t_res), t_name ? t_name : "@IsobusCMMessageTypes.ETP_CM"); |
| } |
| |
| TP__DT::TP__DT() |
| { |
| } |
| |
| TP__DT::TP__DT(const INTEGER& par_seq__no, |
| const OCTETSTRING& par_data) |
| : field_seq__no(par_seq__no), |
| field_data(par_data) |
| { |
| } |
| |
| TP__DT::TP__DT(const TP__DT& other_value) |
| { |
| if(!other_value.is_bound()) TTCN_error("Copying an unbound value of type @IsobusCMMessageTypes.TP_DT."); |
| if (other_value.seq__no().is_bound()) field_seq__no = other_value.seq__no(); |
| else field_seq__no.clean_up(); |
| if (other_value.data().is_bound()) field_data = other_value.data(); |
| else field_data.clean_up(); |
| } |
| |
| void TP__DT::clean_up() |
| { |
| field_seq__no.clean_up(); |
| field_data.clean_up(); |
| } |
| |
| const TTCN_Typedescriptor_t* TP__DT::get_descriptor() const { return &TP__DT_descr_; } |
| TP__DT& TP__DT::operator=(const TP__DT& other_value) |
| { |
| if (this != &other_value) { |
| if(!other_value.is_bound()) TTCN_error("Assignment of an unbound value of type @IsobusCMMessageTypes.TP_DT."); |
| if (other_value.seq__no().is_bound()) field_seq__no = other_value.seq__no(); |
| else field_seq__no.clean_up(); |
| if (other_value.data().is_bound()) field_data = other_value.data(); |
| else field_data.clean_up(); |
| } |
| return *this; |
| } |
| |
| boolean TP__DT::operator==(const TP__DT& other_value) const |
| { |
| return field_seq__no==other_value.field_seq__no |
| && field_data==other_value.field_data; |
| } |
| |
| boolean TP__DT::is_bound() const |
| { |
| return (field_seq__no.is_bound()) |
| || (field_data.is_bound()); |
| } |
| boolean TP__DT::is_value() const |
| { |
| return field_seq__no.is_value() |
| && field_data.is_value(); |
| } |
| void TP__DT::log() const |
| { |
| if (!is_bound()) { |
| TTCN_Logger::log_event_unbound(); |
| return; |
| } |
| TTCN_Logger::log_event_str("{ seq_no := "); |
| field_seq__no.log(); |
| TTCN_Logger::log_event_str(", data := "); |
| field_data.log(); |
| TTCN_Logger::log_event_str(" }"); |
| } |
| |
| void TP__DT::set_param(Module_Param& param) |
| { |
| param.basic_check(Module_Param::BC_VALUE, "record value"); |
| switch (param.get_type()) { |
| case Module_Param::MP_Value_List: |
| if (2<param.get_size()) { |
| param.error("record value of type @IsobusCMMessageTypes.TP_DT has 2 fields but list value has %d fields", (int)param.get_size()); |
| } |
| if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) seq__no().set_param(*param.get_elem(0)); |
| if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) data().set_param(*param.get_elem(1)); |
| break; |
| case Module_Param::MP_Assignment_List: { |
| Vector<bool> value_used(param.get_size()); |
| value_used.resize(param.get_size(), FALSE); |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "seq_no")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| seq__no().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "data")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| data().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| curr_param->error("Non existent field name in type @IsobusCMMessageTypes.TP_DT: %s", curr_param->get_id()->get_name()); |
| break; |
| } |
| } break; |
| default: |
| param.type_error("record value", "@IsobusCMMessageTypes.TP_DT"); |
| } |
| } |
| |
| void TP__DT::set_implicit_omit() |
| { |
| if (seq__no().is_bound()) seq__no().set_implicit_omit(); |
| if (data().is_bound()) data().set_implicit_omit(); |
| } |
| |
| void TP__DT::encode_text(Text_Buf& text_buf) const |
| { |
| field_seq__no.encode_text(text_buf); |
| field_data.encode_text(text_buf); |
| } |
| |
| void TP__DT::decode_text(Text_Buf& text_buf) |
| { |
| field_seq__no.decode_text(text_buf); |
| field_data.decode_text(text_buf); |
| } |
| |
| void TP__DT::encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, TTCN_EncDec::coding_t p_coding, ...) const |
| { |
| va_list pvar; |
| va_start(pvar, p_coding); |
| switch(p_coding) { |
| case TTCN_EncDec::CT_BER: { |
| TTCN_EncDec_ErrorContext ec("While BER-encoding type '%s': ", p_td.name); |
| unsigned BER_coding=va_arg(pvar, unsigned); |
| BER_encode_chk_coding(BER_coding); |
| ASN_BER_TLV_t *tlv=BER_encode_TLV(p_td, BER_coding); |
| tlv->put_in_buffer(p_buf); |
| ASN_BER_TLV_t::destruct(tlv); |
| break;} |
| case TTCN_EncDec::CT_RAW: { |
| TTCN_EncDec_ErrorContext ec("While RAW-encoding type '%s': ", p_td.name); |
| if(!p_td.raw) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No RAW descriptor available for type '%s'.", p_td.name); |
| RAW_enc_tr_pos rp; |
| rp.level=0; |
| rp.pos=NULL; |
| RAW_enc_tree root(FALSE, NULL, &rp, 1, p_td.raw); |
| RAW_encode(p_td, root); |
| root.put_to_buf(p_buf); |
| break;} |
| case TTCN_EncDec::CT_TEXT: { |
| TTCN_EncDec_ErrorContext ec("While TEXT-encoding type '%s': ", p_td.name); |
| if(!p_td.text) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No TEXT descriptor available for type '%s'.", p_td.name); |
| TEXT_encode(p_td,p_buf); |
| break;} |
| case TTCN_EncDec::CT_XER: { |
| TTCN_EncDec_ErrorContext ec("While XER-encoding type '%s': ", p_td.name); |
| unsigned XER_coding=va_arg(pvar, unsigned); |
| XER_encode_chk_coding(XER_coding, p_td); |
| XER_encode(*(p_td.xer),p_buf, XER_coding, 0, 0, 0); |
| p_buf.put_c('\n'); |
| break;} |
| case TTCN_EncDec::CT_JSON: { |
| TTCN_EncDec_ErrorContext ec("While JSON-encoding type '%s': ", p_td.name); |
| if(!p_td.json) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No JSON descriptor available for type '%s'.", p_td.name); |
| JSON_Tokenizer tok(va_arg(pvar, int) != 0); |
| JSON_encode(p_td, tok); |
| p_buf.put_s(tok.get_buffer_length(), (const unsigned char*)tok.get_buffer()); |
| break;} |
| case TTCN_EncDec::CT_OER: { |
| TTCN_EncDec_ErrorContext ec("While OER-encoding type '%s': ", p_td.name); |
| if(!p_td.oer) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No OER descriptor available for type '%s'.", p_td.name); |
| OER_encode(p_td, p_buf); |
| break;} |
| default: |
| TTCN_error("Unknown coding method requested to encode type '%s'", p_td.name); |
| } |
| va_end(pvar); |
| } |
| |
| void TP__DT::decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, TTCN_EncDec::coding_t p_coding, ...) |
| { |
| va_list pvar; |
| va_start(pvar, p_coding); |
| switch(p_coding) { |
| case TTCN_EncDec::CT_BER: { |
| TTCN_EncDec_ErrorContext ec("While BER-decoding type '%s': ", p_td.name); |
| unsigned L_form=va_arg(pvar, unsigned); |
| ASN_BER_TLV_t tlv; |
| BER_decode_str2TLV(p_buf, tlv, L_form); |
| BER_decode_TLV(p_td, tlv, L_form); |
| if(tlv.isComplete) p_buf.increase_pos(tlv.get_len()); |
| break;} |
| case TTCN_EncDec::CT_RAW: { |
| TTCN_EncDec_ErrorContext ec("While RAW-decoding type '%s': ", p_td.name); |
| if(!p_td.raw) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No RAW descriptor available for type '%s'.", p_td.name); |
| raw_order_t r_order; |
| switch(p_td.raw->top_bit_order) { |
| case TOP_BIT_LEFT: |
| r_order=ORDER_LSB; |
| break; |
| case TOP_BIT_RIGHT: |
| default: |
| r_order=ORDER_MSB; |
| } |
| int rawr = RAW_decode(p_td, p_buf, p_buf.get_len()*8, r_order); |
| if(rawr<0) switch (-rawr) { |
| case TTCN_EncDec::ET_INCOMPL_MSG: |
| case TTCN_EncDec::ET_LEN_ERR: |
| ec.error((TTCN_EncDec::error_type_t)-rawr, "Can not decode type '%s', because incomplete message was received", p_td.name); |
| break; |
| case 1: |
| default: |
| ec.error(TTCN_EncDec::ET_INVAL_MSG, "Can not decode type '%s', because invalid message was received", p_td.name); |
| break; |
| } |
| break;} |
| case TTCN_EncDec::CT_TEXT: { |
| Limit_Token_List limit; |
| TTCN_EncDec_ErrorContext ec("While TEXT-decoding type '%s': ", p_td.name); |
| if(!p_td.text) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No TEXT descriptor available for type '%s'.", p_td.name); |
| const unsigned char *b_data=p_buf.get_data(); |
| if(b_data[p_buf.get_len()-1]!='\0'){ |
| p_buf.set_pos(p_buf.get_len()); |
| p_buf.put_zero(8,ORDER_LSB); |
| p_buf.rewind(); |
| } |
| if(TEXT_decode(p_td,p_buf,limit)<0) |
| ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name); |
| break;} |
| case TTCN_EncDec::CT_XER: { |
| TTCN_EncDec_ErrorContext ec("While XER-decoding type '%s': ", p_td.name); |
| unsigned XER_coding=va_arg(pvar, unsigned); |
| XER_encode_chk_coding(XER_coding, p_td); |
| XmlReaderWrap reader(p_buf); |
| for (int rd_ok=reader.Read(); rd_ok==1; rd_ok=reader.Read()) { |
| if (reader.NodeType() == XML_READER_TYPE_ELEMENT) break; |
| } |
| XER_decode(*(p_td.xer), reader, XER_coding | XER_TOPLEVEL, XER_NONE, 0); |
| size_t bytes = reader.ByteConsumed(); |
| p_buf.set_pos(bytes); |
| break;} |
| case TTCN_EncDec::CT_JSON: { |
| TTCN_EncDec_ErrorContext ec("While JSON-decoding type '%s': ", p_td.name); |
| if(!p_td.json) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No JSON descriptor available for type '%s'.", p_td.name); |
| JSON_Tokenizer tok((const char*)p_buf.get_data(), p_buf.get_len()); |
| if(JSON_decode(p_td, tok, FALSE)<0) |
| ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name); |
| p_buf.set_pos(tok.get_buf_pos()); |
| break;} |
| case TTCN_EncDec::CT_OER: { |
| TTCN_EncDec_ErrorContext ec("While OER-decoding type '%s': ", p_td.name); |
| if(!p_td.oer) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No OER descriptor available for type '%s'.", p_td.name); |
| OER_struct p_oer; |
| OER_decode(p_td, p_buf, p_oer); |
| break;} |
| default: |
| TTCN_error("Unknown coding method requested to decode type '%s'", p_td.name); |
| } |
| va_end(pvar); |
| } |
| |
| int TP__DT::RAW_decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int limit, raw_order_t top_bit_ord, boolean no_err, int, boolean, const RAW_Force_Omit* force_omit) |
| { (void)no_err; |
| int prepaddlength=p_buf.increase_pos_padd(p_td.raw->prepadding); |
| limit-=prepaddlength; |
| size_t last_decoded_pos = p_buf.get_pos_bit(); |
| int decoded_length = 0; |
| int decoded_field_length = 0; |
| raw_order_t local_top_order; |
| if(p_td.raw->top_bit_order==TOP_BIT_INHERITED)local_top_order=top_bit_ord; |
| else if(p_td.raw->top_bit_order==TOP_BIT_RIGHT)local_top_order=ORDER_MSB; |
| else local_top_order=ORDER_LSB; |
| RAW_Force_Omit field_0_force_omit(0, force_omit, SEQ__NO_descr_.raw->forceomit); |
| decoded_field_length = field_seq__no.RAW_decode(SEQ__NO_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_0_force_omit); |
| if (decoded_field_length < 0) return decoded_field_length; |
| decoded_length+=decoded_field_length; |
| limit-=decoded_field_length; |
| last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit()); |
| RAW_Force_Omit field_1_force_omit(1, force_omit, General__Types::OCT7_descr_.raw->forceomit); |
| decoded_field_length = field_data.RAW_decode(General__Types::OCT7_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_1_force_omit); |
| if (decoded_field_length < 0) return decoded_field_length; |
| decoded_length+=decoded_field_length; |
| limit-=decoded_field_length; |
| last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit()); |
| p_buf.set_pos_bit(last_decoded_pos); |
| return decoded_length+prepaddlength+p_buf.increase_pos_padd(p_td.raw->padding); |
| } |
| |
| int TP__DT::RAW_encode(const TTCN_Typedescriptor_t&, RAW_enc_tree& myleaf) const { |
| if (!is_bound()) TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_UNBOUND, "Encoding an unbound value."); |
| int encoded_length = 0; |
| myleaf.isleaf = FALSE; |
| myleaf.body.node.num_of_nodes = 2; |
| myleaf.body.node.nodes = init_nodes_of_enc_tree(2); |
| myleaf.body.node.nodes[0] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 0, SEQ__NO_descr_.raw); |
| myleaf.body.node.nodes[1] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 1, General__Types::OCT7_descr_.raw); |
| encoded_length += field_seq__no.RAW_encode(SEQ__NO_descr_, *myleaf.body.node.nodes[0]); |
| encoded_length += field_data.RAW_encode(General__Types::OCT7_descr_, *myleaf.body.node.nodes[1]); |
| return myleaf.length = encoded_length; |
| } |
| |
| struct TP__DT_template::single_value_struct { |
| INTEGER_template field_seq__no; |
| OCTETSTRING_template field_data; |
| }; |
| |
| void TP__DT_template::set_specific() |
| { |
| if (template_selection != SPECIFIC_VALUE) { |
| template_sel old_selection = template_selection; |
| clean_up(); |
| single_value = new single_value_struct; |
| set_selection(SPECIFIC_VALUE); |
| if (old_selection == ANY_VALUE || old_selection == ANY_OR_OMIT) { |
| single_value->field_seq__no = ANY_VALUE; |
| single_value->field_data = ANY_VALUE; |
| } |
| } |
| } |
| |
| void TP__DT_template::copy_value(const TP__DT& other_value) |
| { |
| single_value = new single_value_struct; |
| if (other_value.seq__no().is_bound()) { |
| single_value->field_seq__no = other_value.seq__no(); |
| } else { |
| single_value->field_seq__no.clean_up(); |
| } |
| if (other_value.data().is_bound()) { |
| single_value->field_data = other_value.data(); |
| } else { |
| single_value->field_data.clean_up(); |
| } |
| set_selection(SPECIFIC_VALUE); |
| } |
| |
| void TP__DT_template::copy_template(const TP__DT_template& other_value) |
| { |
| switch (other_value.template_selection) { |
| case SPECIFIC_VALUE: |
| single_value = new single_value_struct; |
| if (UNINITIALIZED_TEMPLATE != other_value.seq__no().get_selection()) { |
| single_value->field_seq__no = other_value.seq__no(); |
| } else { |
| single_value->field_seq__no.clean_up(); |
| } |
| if (UNINITIALIZED_TEMPLATE != other_value.data().get_selection()) { |
| single_value->field_data = other_value.data(); |
| } else { |
| single_value->field_data.clean_up(); |
| } |
| case OMIT_VALUE: |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| break; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| value_list.n_values = other_value.value_list.n_values; |
| value_list.list_value = new TP__DT_template[value_list.n_values]; |
| for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) |
| value_list.list_value[list_count].copy_template(other_value.value_list.list_value[list_count]); |
| break; |
| default: |
| TTCN_error("Copying an uninitialized/unsupported template of type @IsobusCMMessageTypes.TP_DT."); |
| break; |
| } |
| set_selection(other_value); |
| } |
| |
| TP__DT_template::TP__DT_template() |
| { |
| } |
| |
| TP__DT_template::TP__DT_template(template_sel other_value) |
| : Base_Template(other_value) |
| { |
| check_single_selection(other_value); |
| } |
| |
| TP__DT_template::TP__DT_template(const TP__DT& other_value) |
| { |
| copy_value(other_value); |
| } |
| |
| TP__DT_template::TP__DT_template(const OPTIONAL<TP__DT>& other_value) |
| { |
| switch (other_value.get_selection()) { |
| case OPTIONAL_PRESENT: |
| copy_value((const TP__DT&)other_value); |
| break; |
| case OPTIONAL_OMIT: |
| set_selection(OMIT_VALUE); |
| break; |
| default: |
| TTCN_error("Creating a template of type @IsobusCMMessageTypes.TP_DT from an unbound optional field."); |
| } |
| } |
| |
| TP__DT_template::TP__DT_template(const TP__DT_template& other_value) |
| : Base_Template() |
| { |
| copy_template(other_value); |
| } |
| |
| TP__DT_template::~TP__DT_template() |
| { |
| clean_up(); |
| } |
| |
| TP__DT_template& TP__DT_template::operator=(template_sel other_value) |
| { |
| check_single_selection(other_value); |
| clean_up(); |
| set_selection(other_value); |
| return *this; |
| } |
| |
| TP__DT_template& TP__DT_template::operator=(const TP__DT& other_value) |
| { |
| clean_up(); |
| copy_value(other_value); |
| return *this; |
| } |
| |
| TP__DT_template& TP__DT_template::operator=(const OPTIONAL<TP__DT>& other_value) |
| { |
| clean_up(); |
| switch (other_value.get_selection()) { |
| case OPTIONAL_PRESENT: |
| copy_value((const TP__DT&)other_value); |
| break; |
| case OPTIONAL_OMIT: |
| set_selection(OMIT_VALUE); |
| break; |
| default: |
| TTCN_error("Assignment of an unbound optional field to a template of type @IsobusCMMessageTypes.TP_DT."); |
| } |
| return *this; |
| } |
| |
| TP__DT_template& TP__DT_template::operator=(const TP__DT_template& other_value) |
| { |
| if (&other_value != this) { |
| clean_up(); |
| copy_template(other_value); |
| } |
| return *this; |
| } |
| |
| boolean TP__DT_template::match(const TP__DT& other_value, boolean legacy) const |
| { |
| if (!other_value.is_bound()) return FALSE; |
| switch (template_selection) { |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| return TRUE; |
| case OMIT_VALUE: |
| return FALSE; |
| case SPECIFIC_VALUE: |
| if(!other_value.seq__no().is_bound()) return FALSE; |
| if(!single_value->field_seq__no.match(other_value.seq__no(), legacy))return FALSE; |
| if(!other_value.data().is_bound()) return FALSE; |
| if(!single_value->field_data.match(other_value.data(), legacy))return FALSE; |
| return TRUE; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) |
| if (value_list.list_value[list_count].match(other_value, legacy)) return template_selection == VALUE_LIST; |
| return template_selection == COMPLEMENTED_LIST; |
| default: |
| TTCN_error("Matching an uninitialized/unsupported template of type @IsobusCMMessageTypes.TP_DT."); |
| } |
| return FALSE; |
| } |
| |
| boolean TP__DT_template::is_bound() const |
| { |
| if (template_selection == UNINITIALIZED_TEMPLATE && !is_ifpresent) return FALSE; |
| if (template_selection != SPECIFIC_VALUE) return TRUE; |
| return single_value->field_seq__no.is_bound() |
| |
| ||single_value->field_data.is_bound() |
| ; |
| } |
| |
| boolean TP__DT_template::is_value() const |
| { |
| if (template_selection != SPECIFIC_VALUE || is_ifpresent) return FALSE; |
| return single_value->field_seq__no.is_value() |
| &&single_value->field_data.is_value(); |
| } |
| |
| void TP__DT_template::clean_up() |
| { |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| delete single_value; |
| break; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| delete [] value_list.list_value; |
| default: |
| break; |
| } |
| template_selection = UNINITIALIZED_TEMPLATE; |
| } |
| |
| TP__DT TP__DT_template::valueof() const |
| { |
| if (template_selection != SPECIFIC_VALUE || is_ifpresent) |
| TTCN_error("Performing a valueof or send operation on a non-specific template of type @IsobusCMMessageTypes.TP_DT."); |
| TP__DT ret_val; |
| if (single_value->field_seq__no.is_bound()) { |
| ret_val.seq__no() = single_value->field_seq__no.valueof(); |
| } |
| if (single_value->field_data.is_bound()) { |
| ret_val.data() = single_value->field_data.valueof(); |
| } |
| return ret_val; |
| } |
| |
| void TP__DT_template::set_type(template_sel template_type, unsigned int list_length) |
| { |
| if (template_type != VALUE_LIST && template_type != COMPLEMENTED_LIST) |
| TTCN_error("Setting an invalid list for a template of type @IsobusCMMessageTypes.TP_DT."); |
| clean_up(); |
| set_selection(template_type); |
| value_list.n_values = list_length; |
| value_list.list_value = new TP__DT_template[list_length]; |
| } |
| |
| TP__DT_template& TP__DT_template::list_item(unsigned int list_index) const |
| { |
| if (template_selection != VALUE_LIST && template_selection != COMPLEMENTED_LIST) |
| TTCN_error("Accessing a list element of a non-list template of type @IsobusCMMessageTypes.TP_DT."); |
| if (list_index >= value_list.n_values) |
| TTCN_error("Index overflow in a value list template of type @IsobusCMMessageTypes.TP_DT."); |
| return value_list.list_value[list_index]; |
| } |
| |
| INTEGER_template& TP__DT_template::seq__no() |
| { |
| set_specific(); |
| return single_value->field_seq__no; |
| } |
| |
| const INTEGER_template& TP__DT_template::seq__no() const |
| { |
| if (template_selection != SPECIFIC_VALUE) |
| TTCN_error("Accessing field seq_no of a non-specific template of type @IsobusCMMessageTypes.TP_DT."); |
| return single_value->field_seq__no; |
| } |
| |
| OCTETSTRING_template& TP__DT_template::data() |
| { |
| set_specific(); |
| return single_value->field_data; |
| } |
| |
| const OCTETSTRING_template& TP__DT_template::data() const |
| { |
| if (template_selection != SPECIFIC_VALUE) |
| TTCN_error("Accessing field data of a non-specific template of type @IsobusCMMessageTypes.TP_DT."); |
| return single_value->field_data; |
| } |
| |
| int TP__DT_template::size_of() const |
| { |
| if (is_ifpresent) TTCN_error("Performing sizeof() operation on a template of type @IsobusCMMessageTypes.TP_DT which has an ifpresent attribute."); |
| switch (template_selection) |
| { |
| case SPECIFIC_VALUE: |
| return 2; |
| case VALUE_LIST: |
| { |
| if (value_list.n_values<1) |
| TTCN_error("Internal error: Performing sizeof() operation on a template of type @IsobusCMMessageTypes.TP_DT containing an empty list."); |
| int item_size = value_list.list_value[0].size_of(); |
| for (unsigned int l_idx = 1; l_idx < value_list.n_values; l_idx++) |
| { |
| if (value_list.list_value[l_idx].size_of()!=item_size) |
| TTCN_error("Performing sizeof() operation on a template of type @IsobusCMMessageTypes.TP_DT containing a value list with different sizes."); |
| } |
| return item_size; |
| } |
| case OMIT_VALUE: |
| TTCN_error("Performing sizeof() operation on a template of type @IsobusCMMessageTypes.TP_DT containing omit value."); |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| TTCN_error("Performing sizeof() operation on a template of type @IsobusCMMessageTypes.TP_DT containing */? value."); |
| case COMPLEMENTED_LIST: |
| TTCN_error("Performing sizeof() operation on a template of type @IsobusCMMessageTypes.TP_DT containing complemented list."); |
| default: |
| TTCN_error("Performing sizeof() operation on an uninitialized/unsupported template of type @IsobusCMMessageTypes.TP_DT."); |
| } |
| return 0; |
| } |
| |
| void TP__DT_template::log() const |
| { |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| TTCN_Logger::log_event_str("{ seq_no := "); |
| single_value->field_seq__no.log(); |
| TTCN_Logger::log_event_str(", data := "); |
| single_value->field_data.log(); |
| TTCN_Logger::log_event_str(" }"); |
| break; |
| case COMPLEMENTED_LIST: |
| TTCN_Logger::log_event_str("complement"); |
| case VALUE_LIST: |
| TTCN_Logger::log_char('('); |
| for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) { |
| if (list_count > 0) TTCN_Logger::log_event_str(", "); |
| value_list.list_value[list_count].log(); |
| } |
| TTCN_Logger::log_char(')'); |
| break; |
| default: |
| log_generic(); |
| } |
| log_ifpresent(); |
| } |
| |
| void TP__DT_template::log_match(const TP__DT& match_value, boolean legacy) const |
| { |
| if(TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity()){ |
| if(match(match_value, legacy)){ |
| TTCN_Logger::print_logmatch_buffer(); |
| TTCN_Logger::log_event_str(" matched"); |
| } else{ |
| if (template_selection == SPECIFIC_VALUE) { |
| size_t previous_size = TTCN_Logger::get_logmatch_buffer_len(); |
| if(!single_value->field_seq__no.match(match_value.seq__no(), legacy)){ |
| TTCN_Logger::log_logmatch_info(".seq_no"); |
| single_value->field_seq__no.log_match(match_value.seq__no(), legacy); |
| TTCN_Logger::set_logmatch_buffer_len(previous_size); |
| } |
| if(!single_value->field_data.match(match_value.data(), legacy)){ |
| TTCN_Logger::log_logmatch_info(".data"); |
| single_value->field_data.log_match(match_value.data(), legacy); |
| TTCN_Logger::set_logmatch_buffer_len(previous_size); |
| } |
| }else { |
| TTCN_Logger::print_logmatch_buffer(); |
| match_value.log(); |
| TTCN_Logger::log_event_str(" with "); |
| log(); |
| TTCN_Logger::log_event_str(" unmatched"); |
| } |
| } |
| return; |
| } |
| if (template_selection == SPECIFIC_VALUE) { |
| TTCN_Logger::log_event_str("{ seq_no := "); |
| single_value->field_seq__no.log_match(match_value.seq__no(), legacy); |
| TTCN_Logger::log_event_str(", data := "); |
| single_value->field_data.log_match(match_value.data(), legacy); |
| TTCN_Logger::log_event_str(" }"); |
| } else { |
| match_value.log(); |
| TTCN_Logger::log_event_str(" with "); |
| log(); |
| if (match(match_value, legacy)) TTCN_Logger::log_event_str(" matched"); |
| else TTCN_Logger::log_event_str(" unmatched"); |
| } |
| } |
| |
| void TP__DT_template::encode_text(Text_Buf& text_buf) const |
| { |
| encode_text_base(text_buf); |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| single_value->field_seq__no.encode_text(text_buf); |
| single_value->field_data.encode_text(text_buf); |
| case OMIT_VALUE: |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| break; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| text_buf.push_int(value_list.n_values); |
| for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) |
| value_list.list_value[list_count].encode_text(text_buf); |
| break; |
| default: |
| TTCN_error("Text encoder: Encoding an uninitialized/unsupported template of type @IsobusCMMessageTypes.TP_DT."); |
| } |
| } |
| |
| void TP__DT_template::decode_text(Text_Buf& text_buf) |
| { |
| clean_up(); |
| decode_text_base(text_buf); |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| single_value = new single_value_struct; |
| single_value->field_seq__no.decode_text(text_buf); |
| single_value->field_data.decode_text(text_buf); |
| case OMIT_VALUE: |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| break; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| value_list.n_values = text_buf.pull_int().get_val(); |
| value_list.list_value = new TP__DT_template[value_list.n_values]; |
| for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) |
| value_list.list_value[list_count].decode_text(text_buf); |
| break; |
| default: |
| TTCN_error("Text decoder: An unknown/unsupported selection was received in a template of type @IsobusCMMessageTypes.TP_DT."); |
| } |
| } |
| |
| void TP__DT_template::set_param(Module_Param& param) |
| { |
| param.basic_check(Module_Param::BC_TEMPLATE, "record template"); |
| switch (param.get_type()) { |
| case Module_Param::MP_Omit: |
| *this = OMIT_VALUE; |
| break; |
| case Module_Param::MP_Any: |
| *this = ANY_VALUE; |
| break; |
| case Module_Param::MP_AnyOrNone: |
| *this = ANY_OR_OMIT; |
| break; |
| case Module_Param::MP_List_Template: |
| case Module_Param::MP_ComplementList_Template: { |
| TP__DT_template new_temp; |
| new_temp.set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : COMPLEMENTED_LIST, param.get_size()); |
| for (size_t p_i=0; p_i<param.get_size(); p_i++) { |
| new_temp.list_item(p_i).set_param(*param.get_elem(p_i)); |
| } |
| *this = new_temp; |
| break; } |
| case Module_Param::MP_Value_List: |
| if (2<param.get_size()) { |
| param.error("record template of type @IsobusCMMessageTypes.TP_DT has 2 fields but list value has %d fields", (int)param.get_size()); |
| } |
| if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) seq__no().set_param(*param.get_elem(0)); |
| if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) data().set_param(*param.get_elem(1)); |
| break; |
| case Module_Param::MP_Assignment_List: { |
| Vector<bool> value_used(param.get_size()); |
| value_used.resize(param.get_size(), FALSE); |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "seq_no")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| seq__no().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "data")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| data().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| curr_param->error("Non existent field name in type @IsobusCMMessageTypes.TP_DT: %s", curr_param->get_id()->get_name()); |
| break; |
| } |
| } break; |
| default: |
| param.type_error("record template", "@IsobusCMMessageTypes.TP_DT"); |
| } |
| is_ifpresent = param.get_ifpresent(); |
| } |
| |
| void TP__DT_template::check_restriction(template_res t_res, const char* t_name, boolean legacy) const |
| { |
| if (template_selection==UNINITIALIZED_TEMPLATE) return; |
| switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) { |
| case TR_OMIT: |
| if (template_selection==OMIT_VALUE) return; |
| case TR_VALUE: |
| if (template_selection!=SPECIFIC_VALUE || is_ifpresent) break; |
| single_value->field_seq__no.check_restriction(t_res, t_name ? t_name : "@IsobusCMMessageTypes.TP_DT"); |
| single_value->field_data.check_restriction(t_res, t_name ? t_name : "@IsobusCMMessageTypes.TP_DT"); |
| return; |
| case TR_PRESENT: |
| if (!match_omit(legacy)) return; |
| break; |
| default: |
| return; |
| } |
| TTCN_error("Restriction `%s' on template of type %s violated.", get_res_name(t_res), t_name ? t_name : "@IsobusCMMessageTypes.TP_DT"); |
| } |
| |
| boolean TP__DT_template::is_present(boolean legacy) const |
| { |
| if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE; |
| return !match_omit(legacy); |
| } |
| |
| boolean TP__DT_template::match_omit(boolean legacy) const |
| { |
| if (is_ifpresent) return TRUE; |
| switch (template_selection) { |
| case OMIT_VALUE: |
| case ANY_OR_OMIT: |
| return TRUE; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| if (legacy) { |
| for (unsigned int l_idx=0; l_idx<value_list.n_values; l_idx++) |
| if (value_list.list_value[l_idx].match_omit()) |
| return template_selection==VALUE_LIST; |
| return template_selection==COMPLEMENTED_LIST; |
| } // else fall through |
| default: |
| return FALSE; |
| } |
| return FALSE; |
| } |
| |
| ETP__DT::ETP__DT() |
| { |
| } |
| |
| ETP__DT::ETP__DT(const INTEGER& par_seq__no, |
| const OCTETSTRING& par_data) |
| : field_seq__no(par_seq__no), |
| field_data(par_data) |
| { |
| } |
| |
| ETP__DT::ETP__DT(const ETP__DT& other_value) |
| { |
| if(!other_value.is_bound()) TTCN_error("Copying an unbound value of type @IsobusCMMessageTypes.ETP_DT."); |
| if (other_value.seq__no().is_bound()) field_seq__no = other_value.seq__no(); |
| else field_seq__no.clean_up(); |
| if (other_value.data().is_bound()) field_data = other_value.data(); |
| else field_data.clean_up(); |
| } |
| |
| void ETP__DT::clean_up() |
| { |
| field_seq__no.clean_up(); |
| field_data.clean_up(); |
| } |
| |
| const TTCN_Typedescriptor_t* ETP__DT::get_descriptor() const { return &ETP__DT_descr_; } |
| ETP__DT& ETP__DT::operator=(const ETP__DT& other_value) |
| { |
| if (this != &other_value) { |
| if(!other_value.is_bound()) TTCN_error("Assignment of an unbound value of type @IsobusCMMessageTypes.ETP_DT."); |
| if (other_value.seq__no().is_bound()) field_seq__no = other_value.seq__no(); |
| else field_seq__no.clean_up(); |
| if (other_value.data().is_bound()) field_data = other_value.data(); |
| else field_data.clean_up(); |
| } |
| return *this; |
| } |
| |
| boolean ETP__DT::operator==(const ETP__DT& other_value) const |
| { |
| return field_seq__no==other_value.field_seq__no |
| && field_data==other_value.field_data; |
| } |
| |
| boolean ETP__DT::is_bound() const |
| { |
| return (field_seq__no.is_bound()) |
| || (field_data.is_bound()); |
| } |
| boolean ETP__DT::is_value() const |
| { |
| return field_seq__no.is_value() |
| && field_data.is_value(); |
| } |
| void ETP__DT::log() const |
| { |
| if (!is_bound()) { |
| TTCN_Logger::log_event_unbound(); |
| return; |
| } |
| TTCN_Logger::log_event_str("{ seq_no := "); |
| field_seq__no.log(); |
| TTCN_Logger::log_event_str(", data := "); |
| field_data.log(); |
| TTCN_Logger::log_event_str(" }"); |
| } |
| |
| void ETP__DT::set_param(Module_Param& param) |
| { |
| param.basic_check(Module_Param::BC_VALUE, "record value"); |
| switch (param.get_type()) { |
| case Module_Param::MP_Value_List: |
| if (2<param.get_size()) { |
| param.error("record value of type @IsobusCMMessageTypes.ETP_DT has 2 fields but list value has %d fields", (int)param.get_size()); |
| } |
| if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) seq__no().set_param(*param.get_elem(0)); |
| if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) data().set_param(*param.get_elem(1)); |
| break; |
| case Module_Param::MP_Assignment_List: { |
| Vector<bool> value_used(param.get_size()); |
| value_used.resize(param.get_size(), FALSE); |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "seq_no")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| seq__no().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "data")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| data().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| curr_param->error("Non existent field name in type @IsobusCMMessageTypes.ETP_DT: %s", curr_param->get_id()->get_name()); |
| break; |
| } |
| } break; |
| default: |
| param.type_error("record value", "@IsobusCMMessageTypes.ETP_DT"); |
| } |
| } |
| |
| void ETP__DT::set_implicit_omit() |
| { |
| if (seq__no().is_bound()) seq__no().set_implicit_omit(); |
| if (data().is_bound()) data().set_implicit_omit(); |
| } |
| |
| void ETP__DT::encode_text(Text_Buf& text_buf) const |
| { |
| field_seq__no.encode_text(text_buf); |
| field_data.encode_text(text_buf); |
| } |
| |
| void ETP__DT::decode_text(Text_Buf& text_buf) |
| { |
| field_seq__no.decode_text(text_buf); |
| field_data.decode_text(text_buf); |
| } |
| |
| void ETP__DT::encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, TTCN_EncDec::coding_t p_coding, ...) const |
| { |
| va_list pvar; |
| va_start(pvar, p_coding); |
| switch(p_coding) { |
| case TTCN_EncDec::CT_BER: { |
| TTCN_EncDec_ErrorContext ec("While BER-encoding type '%s': ", p_td.name); |
| unsigned BER_coding=va_arg(pvar, unsigned); |
| BER_encode_chk_coding(BER_coding); |
| ASN_BER_TLV_t *tlv=BER_encode_TLV(p_td, BER_coding); |
| tlv->put_in_buffer(p_buf); |
| ASN_BER_TLV_t::destruct(tlv); |
| break;} |
| case TTCN_EncDec::CT_RAW: { |
| TTCN_EncDec_ErrorContext ec("While RAW-encoding type '%s': ", p_td.name); |
| if(!p_td.raw) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No RAW descriptor available for type '%s'.", p_td.name); |
| RAW_enc_tr_pos rp; |
| rp.level=0; |
| rp.pos=NULL; |
| RAW_enc_tree root(FALSE, NULL, &rp, 1, p_td.raw); |
| RAW_encode(p_td, root); |
| root.put_to_buf(p_buf); |
| break;} |
| case TTCN_EncDec::CT_TEXT: { |
| TTCN_EncDec_ErrorContext ec("While TEXT-encoding type '%s': ", p_td.name); |
| if(!p_td.text) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No TEXT descriptor available for type '%s'.", p_td.name); |
| TEXT_encode(p_td,p_buf); |
| break;} |
| case TTCN_EncDec::CT_XER: { |
| TTCN_EncDec_ErrorContext ec("While XER-encoding type '%s': ", p_td.name); |
| unsigned XER_coding=va_arg(pvar, unsigned); |
| XER_encode_chk_coding(XER_coding, p_td); |
| XER_encode(*(p_td.xer),p_buf, XER_coding, 0, 0, 0); |
| p_buf.put_c('\n'); |
| break;} |
| case TTCN_EncDec::CT_JSON: { |
| TTCN_EncDec_ErrorContext ec("While JSON-encoding type '%s': ", p_td.name); |
| if(!p_td.json) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No JSON descriptor available for type '%s'.", p_td.name); |
| JSON_Tokenizer tok(va_arg(pvar, int) != 0); |
| JSON_encode(p_td, tok); |
| p_buf.put_s(tok.get_buffer_length(), (const unsigned char*)tok.get_buffer()); |
| break;} |
| case TTCN_EncDec::CT_OER: { |
| TTCN_EncDec_ErrorContext ec("While OER-encoding type '%s': ", p_td.name); |
| if(!p_td.oer) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No OER descriptor available for type '%s'.", p_td.name); |
| OER_encode(p_td, p_buf); |
| break;} |
| default: |
| TTCN_error("Unknown coding method requested to encode type '%s'", p_td.name); |
| } |
| va_end(pvar); |
| } |
| |
| void ETP__DT::decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, TTCN_EncDec::coding_t p_coding, ...) |
| { |
| va_list pvar; |
| va_start(pvar, p_coding); |
| switch(p_coding) { |
| case TTCN_EncDec::CT_BER: { |
| TTCN_EncDec_ErrorContext ec("While BER-decoding type '%s': ", p_td.name); |
| unsigned L_form=va_arg(pvar, unsigned); |
| ASN_BER_TLV_t tlv; |
| BER_decode_str2TLV(p_buf, tlv, L_form); |
| BER_decode_TLV(p_td, tlv, L_form); |
| if(tlv.isComplete) p_buf.increase_pos(tlv.get_len()); |
| break;} |
| case TTCN_EncDec::CT_RAW: { |
| TTCN_EncDec_ErrorContext ec("While RAW-decoding type '%s': ", p_td.name); |
| if(!p_td.raw) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No RAW descriptor available for type '%s'.", p_td.name); |
| raw_order_t r_order; |
| switch(p_td.raw->top_bit_order) { |
| case TOP_BIT_LEFT: |
| r_order=ORDER_LSB; |
| break; |
| case TOP_BIT_RIGHT: |
| default: |
| r_order=ORDER_MSB; |
| } |
| int rawr = RAW_decode(p_td, p_buf, p_buf.get_len()*8, r_order); |
| if(rawr<0) switch (-rawr) { |
| case TTCN_EncDec::ET_INCOMPL_MSG: |
| case TTCN_EncDec::ET_LEN_ERR: |
| ec.error((TTCN_EncDec::error_type_t)-rawr, "Can not decode type '%s', because incomplete message was received", p_td.name); |
| break; |
| case 1: |
| default: |
| ec.error(TTCN_EncDec::ET_INVAL_MSG, "Can not decode type '%s', because invalid message was received", p_td.name); |
| break; |
| } |
| break;} |
| case TTCN_EncDec::CT_TEXT: { |
| Limit_Token_List limit; |
| TTCN_EncDec_ErrorContext ec("While TEXT-decoding type '%s': ", p_td.name); |
| if(!p_td.text) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No TEXT descriptor available for type '%s'.", p_td.name); |
| const unsigned char *b_data=p_buf.get_data(); |
| if(b_data[p_buf.get_len()-1]!='\0'){ |
| p_buf.set_pos(p_buf.get_len()); |
| p_buf.put_zero(8,ORDER_LSB); |
| p_buf.rewind(); |
| } |
| if(TEXT_decode(p_td,p_buf,limit)<0) |
| ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name); |
| break;} |
| case TTCN_EncDec::CT_XER: { |
| TTCN_EncDec_ErrorContext ec("While XER-decoding type '%s': ", p_td.name); |
| unsigned XER_coding=va_arg(pvar, unsigned); |
| XER_encode_chk_coding(XER_coding, p_td); |
| XmlReaderWrap reader(p_buf); |
| for (int rd_ok=reader.Read(); rd_ok==1; rd_ok=reader.Read()) { |
| if (reader.NodeType() == XML_READER_TYPE_ELEMENT) break; |
| } |
| XER_decode(*(p_td.xer), reader, XER_coding | XER_TOPLEVEL, XER_NONE, 0); |
| size_t bytes = reader.ByteConsumed(); |
| p_buf.set_pos(bytes); |
| break;} |
| case TTCN_EncDec::CT_JSON: { |
| TTCN_EncDec_ErrorContext ec("While JSON-decoding type '%s': ", p_td.name); |
| if(!p_td.json) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No JSON descriptor available for type '%s'.", p_td.name); |
| JSON_Tokenizer tok((const char*)p_buf.get_data(), p_buf.get_len()); |
| if(JSON_decode(p_td, tok, FALSE)<0) |
| ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name); |
| p_buf.set_pos(tok.get_buf_pos()); |
| break;} |
| case TTCN_EncDec::CT_OER: { |
| TTCN_EncDec_ErrorContext ec("While OER-decoding type '%s': ", p_td.name); |
| if(!p_td.oer) |
| TTCN_EncDec_ErrorContext::error_internal |
| ("No OER descriptor available for type '%s'.", p_td.name); |
| OER_struct p_oer; |
| OER_decode(p_td, p_buf, p_oer); |
| break;} |
| default: |
| TTCN_error("Unknown coding method requested to decode type '%s'", p_td.name); |
| } |
| va_end(pvar); |
| } |
| |
| int ETP__DT::RAW_decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int limit, raw_order_t top_bit_ord, boolean no_err, int, boolean, const RAW_Force_Omit* force_omit) |
| { (void)no_err; |
| int prepaddlength=p_buf.increase_pos_padd(p_td.raw->prepadding); |
| limit-=prepaddlength; |
| size_t last_decoded_pos = p_buf.get_pos_bit(); |
| int decoded_length = 0; |
| int decoded_field_length = 0; |
| raw_order_t local_top_order; |
| if(p_td.raw->top_bit_order==TOP_BIT_INHERITED)local_top_order=top_bit_ord; |
| else if(p_td.raw->top_bit_order==TOP_BIT_RIGHT)local_top_order=ORDER_MSB; |
| else local_top_order=ORDER_LSB; |
| RAW_Force_Omit field_0_force_omit(0, force_omit, SEQ__NO_descr_.raw->forceomit); |
| decoded_field_length = field_seq__no.RAW_decode(SEQ__NO_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_0_force_omit); |
| if (decoded_field_length < 0) return decoded_field_length; |
| decoded_length+=decoded_field_length; |
| limit-=decoded_field_length; |
| last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit()); |
| RAW_Force_Omit field_1_force_omit(1, force_omit, General__Types::OCT7_descr_.raw->forceomit); |
| decoded_field_length = field_data.RAW_decode(General__Types::OCT7_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_1_force_omit); |
| if (decoded_field_length < 0) return decoded_field_length; |
| decoded_length+=decoded_field_length; |
| limit-=decoded_field_length; |
| last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit()); |
| p_buf.set_pos_bit(last_decoded_pos); |
| return decoded_length+prepaddlength+p_buf.increase_pos_padd(p_td.raw->padding); |
| } |
| |
| int ETP__DT::RAW_encode(const TTCN_Typedescriptor_t&, RAW_enc_tree& myleaf) const { |
| if (!is_bound()) TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_UNBOUND, "Encoding an unbound value."); |
| int encoded_length = 0; |
| myleaf.isleaf = FALSE; |
| myleaf.body.node.num_of_nodes = 2; |
| myleaf.body.node.nodes = init_nodes_of_enc_tree(2); |
| myleaf.body.node.nodes[0] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 0, SEQ__NO_descr_.raw); |
| myleaf.body.node.nodes[1] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 1, General__Types::OCT7_descr_.raw); |
| encoded_length += field_seq__no.RAW_encode(SEQ__NO_descr_, *myleaf.body.node.nodes[0]); |
| encoded_length += field_data.RAW_encode(General__Types::OCT7_descr_, *myleaf.body.node.nodes[1]); |
| return myleaf.length = encoded_length; |
| } |
| |
| struct ETP__DT_template::single_value_struct { |
| INTEGER_template field_seq__no; |
| OCTETSTRING_template field_data; |
| }; |
| |
| void ETP__DT_template::set_specific() |
| { |
| if (template_selection != SPECIFIC_VALUE) { |
| template_sel old_selection = template_selection; |
| clean_up(); |
| single_value = new single_value_struct; |
| set_selection(SPECIFIC_VALUE); |
| if (old_selection == ANY_VALUE || old_selection == ANY_OR_OMIT) { |
| single_value->field_seq__no = ANY_VALUE; |
| single_value->field_data = ANY_VALUE; |
| } |
| } |
| } |
| |
| void ETP__DT_template::copy_value(const ETP__DT& other_value) |
| { |
| single_value = new single_value_struct; |
| if (other_value.seq__no().is_bound()) { |
| single_value->field_seq__no = other_value.seq__no(); |
| } else { |
| single_value->field_seq__no.clean_up(); |
| } |
| if (other_value.data().is_bound()) { |
| single_value->field_data = other_value.data(); |
| } else { |
| single_value->field_data.clean_up(); |
| } |
| set_selection(SPECIFIC_VALUE); |
| } |
| |
| void ETP__DT_template::copy_template(const ETP__DT_template& other_value) |
| { |
| switch (other_value.template_selection) { |
| case SPECIFIC_VALUE: |
| single_value = new single_value_struct; |
| if (UNINITIALIZED_TEMPLATE != other_value.seq__no().get_selection()) { |
| single_value->field_seq__no = other_value.seq__no(); |
| } else { |
| single_value->field_seq__no.clean_up(); |
| } |
| if (UNINITIALIZED_TEMPLATE != other_value.data().get_selection()) { |
| single_value->field_data = other_value.data(); |
| } else { |
| single_value->field_data.clean_up(); |
| } |
| case OMIT_VALUE: |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| break; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| value_list.n_values = other_value.value_list.n_values; |
| value_list.list_value = new ETP__DT_template[value_list.n_values]; |
| for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) |
| value_list.list_value[list_count].copy_template(other_value.value_list.list_value[list_count]); |
| break; |
| default: |
| TTCN_error("Copying an uninitialized/unsupported template of type @IsobusCMMessageTypes.ETP_DT."); |
| break; |
| } |
| set_selection(other_value); |
| } |
| |
| ETP__DT_template::ETP__DT_template() |
| { |
| } |
| |
| ETP__DT_template::ETP__DT_template(template_sel other_value) |
| : Base_Template(other_value) |
| { |
| check_single_selection(other_value); |
| } |
| |
| ETP__DT_template::ETP__DT_template(const ETP__DT& other_value) |
| { |
| copy_value(other_value); |
| } |
| |
| ETP__DT_template::ETP__DT_template(const OPTIONAL<ETP__DT>& other_value) |
| { |
| switch (other_value.get_selection()) { |
| case OPTIONAL_PRESENT: |
| copy_value((const ETP__DT&)other_value); |
| break; |
| case OPTIONAL_OMIT: |
| set_selection(OMIT_VALUE); |
| break; |
| default: |
| TTCN_error("Creating a template of type @IsobusCMMessageTypes.ETP_DT from an unbound optional field."); |
| } |
| } |
| |
| ETP__DT_template::ETP__DT_template(const ETP__DT_template& other_value) |
| : Base_Template() |
| { |
| copy_template(other_value); |
| } |
| |
| ETP__DT_template::~ETP__DT_template() |
| { |
| clean_up(); |
| } |
| |
| ETP__DT_template& ETP__DT_template::operator=(template_sel other_value) |
| { |
| check_single_selection(other_value); |
| clean_up(); |
| set_selection(other_value); |
| return *this; |
| } |
| |
| ETP__DT_template& ETP__DT_template::operator=(const ETP__DT& other_value) |
| { |
| clean_up(); |
| copy_value(other_value); |
| return *this; |
| } |
| |
| ETP__DT_template& ETP__DT_template::operator=(const OPTIONAL<ETP__DT>& other_value) |
| { |
| clean_up(); |
| switch (other_value.get_selection()) { |
| case OPTIONAL_PRESENT: |
| copy_value((const ETP__DT&)other_value); |
| break; |
| case OPTIONAL_OMIT: |
| set_selection(OMIT_VALUE); |
| break; |
| default: |
| TTCN_error("Assignment of an unbound optional field to a template of type @IsobusCMMessageTypes.ETP_DT."); |
| } |
| return *this; |
| } |
| |
| ETP__DT_template& ETP__DT_template::operator=(const ETP__DT_template& other_value) |
| { |
| if (&other_value != this) { |
| clean_up(); |
| copy_template(other_value); |
| } |
| return *this; |
| } |
| |
| boolean ETP__DT_template::match(const ETP__DT& other_value, boolean legacy) const |
| { |
| if (!other_value.is_bound()) return FALSE; |
| switch (template_selection) { |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| return TRUE; |
| case OMIT_VALUE: |
| return FALSE; |
| case SPECIFIC_VALUE: |
| if(!other_value.seq__no().is_bound()) return FALSE; |
| if(!single_value->field_seq__no.match(other_value.seq__no(), legacy))return FALSE; |
| if(!other_value.data().is_bound()) return FALSE; |
| if(!single_value->field_data.match(other_value.data(), legacy))return FALSE; |
| return TRUE; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) |
| if (value_list.list_value[list_count].match(other_value, legacy)) return template_selection == VALUE_LIST; |
| return template_selection == COMPLEMENTED_LIST; |
| default: |
| TTCN_error("Matching an uninitialized/unsupported template of type @IsobusCMMessageTypes.ETP_DT."); |
| } |
| return FALSE; |
| } |
| |
| boolean ETP__DT_template::is_bound() const |
| { |
| if (template_selection == UNINITIALIZED_TEMPLATE && !is_ifpresent) return FALSE; |
| if (template_selection != SPECIFIC_VALUE) return TRUE; |
| return single_value->field_seq__no.is_bound() |
| |
| ||single_value->field_data.is_bound() |
| ; |
| } |
| |
| boolean ETP__DT_template::is_value() const |
| { |
| if (template_selection != SPECIFIC_VALUE || is_ifpresent) return FALSE; |
| return single_value->field_seq__no.is_value() |
| &&single_value->field_data.is_value(); |
| } |
| |
| void ETP__DT_template::clean_up() |
| { |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| delete single_value; |
| break; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| delete [] value_list.list_value; |
| default: |
| break; |
| } |
| template_selection = UNINITIALIZED_TEMPLATE; |
| } |
| |
| ETP__DT ETP__DT_template::valueof() const |
| { |
| if (template_selection != SPECIFIC_VALUE || is_ifpresent) |
| TTCN_error("Performing a valueof or send operation on a non-specific template of type @IsobusCMMessageTypes.ETP_DT."); |
| ETP__DT ret_val; |
| if (single_value->field_seq__no.is_bound()) { |
| ret_val.seq__no() = single_value->field_seq__no.valueof(); |
| } |
| if (single_value->field_data.is_bound()) { |
| ret_val.data() = single_value->field_data.valueof(); |
| } |
| return ret_val; |
| } |
| |
| void ETP__DT_template::set_type(template_sel template_type, unsigned int list_length) |
| { |
| if (template_type != VALUE_LIST && template_type != COMPLEMENTED_LIST) |
| TTCN_error("Setting an invalid list for a template of type @IsobusCMMessageTypes.ETP_DT."); |
| clean_up(); |
| set_selection(template_type); |
| value_list.n_values = list_length; |
| value_list.list_value = new ETP__DT_template[list_length]; |
| } |
| |
| ETP__DT_template& ETP__DT_template::list_item(unsigned int list_index) const |
| { |
| if (template_selection != VALUE_LIST && template_selection != COMPLEMENTED_LIST) |
| TTCN_error("Accessing a list element of a non-list template of type @IsobusCMMessageTypes.ETP_DT."); |
| if (list_index >= value_list.n_values) |
| TTCN_error("Index overflow in a value list template of type @IsobusCMMessageTypes.ETP_DT."); |
| return value_list.list_value[list_index]; |
| } |
| |
| INTEGER_template& ETP__DT_template::seq__no() |
| { |
| set_specific(); |
| return single_value->field_seq__no; |
| } |
| |
| const INTEGER_template& ETP__DT_template::seq__no() const |
| { |
| if (template_selection != SPECIFIC_VALUE) |
| TTCN_error("Accessing field seq_no of a non-specific template of type @IsobusCMMessageTypes.ETP_DT."); |
| return single_value->field_seq__no; |
| } |
| |
| OCTETSTRING_template& ETP__DT_template::data() |
| { |
| set_specific(); |
| return single_value->field_data; |
| } |
| |
| const OCTETSTRING_template& ETP__DT_template::data() const |
| { |
| if (template_selection != SPECIFIC_VALUE) |
| TTCN_error("Accessing field data of a non-specific template of type @IsobusCMMessageTypes.ETP_DT."); |
| return single_value->field_data; |
| } |
| |
| int ETP__DT_template::size_of() const |
| { |
| if (is_ifpresent) TTCN_error("Performing sizeof() operation on a template of type @IsobusCMMessageTypes.ETP_DT which has an ifpresent attribute."); |
| switch (template_selection) |
| { |
| case SPECIFIC_VALUE: |
| return 2; |
| case VALUE_LIST: |
| { |
| if (value_list.n_values<1) |
| TTCN_error("Internal error: Performing sizeof() operation on a template of type @IsobusCMMessageTypes.ETP_DT containing an empty list."); |
| int item_size = value_list.list_value[0].size_of(); |
| for (unsigned int l_idx = 1; l_idx < value_list.n_values; l_idx++) |
| { |
| if (value_list.list_value[l_idx].size_of()!=item_size) |
| TTCN_error("Performing sizeof() operation on a template of type @IsobusCMMessageTypes.ETP_DT containing a value list with different sizes."); |
| } |
| return item_size; |
| } |
| case OMIT_VALUE: |
| TTCN_error("Performing sizeof() operation on a template of type @IsobusCMMessageTypes.ETP_DT containing omit value."); |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| TTCN_error("Performing sizeof() operation on a template of type @IsobusCMMessageTypes.ETP_DT containing */? value."); |
| case COMPLEMENTED_LIST: |
| TTCN_error("Performing sizeof() operation on a template of type @IsobusCMMessageTypes.ETP_DT containing complemented list."); |
| default: |
| TTCN_error("Performing sizeof() operation on an uninitialized/unsupported template of type @IsobusCMMessageTypes.ETP_DT."); |
| } |
| return 0; |
| } |
| |
| void ETP__DT_template::log() const |
| { |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| TTCN_Logger::log_event_str("{ seq_no := "); |
| single_value->field_seq__no.log(); |
| TTCN_Logger::log_event_str(", data := "); |
| single_value->field_data.log(); |
| TTCN_Logger::log_event_str(" }"); |
| break; |
| case COMPLEMENTED_LIST: |
| TTCN_Logger::log_event_str("complement"); |
| case VALUE_LIST: |
| TTCN_Logger::log_char('('); |
| for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) { |
| if (list_count > 0) TTCN_Logger::log_event_str(", "); |
| value_list.list_value[list_count].log(); |
| } |
| TTCN_Logger::log_char(')'); |
| break; |
| default: |
| log_generic(); |
| } |
| log_ifpresent(); |
| } |
| |
| void ETP__DT_template::log_match(const ETP__DT& match_value, boolean legacy) const |
| { |
| if(TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity()){ |
| if(match(match_value, legacy)){ |
| TTCN_Logger::print_logmatch_buffer(); |
| TTCN_Logger::log_event_str(" matched"); |
| } else{ |
| if (template_selection == SPECIFIC_VALUE) { |
| size_t previous_size = TTCN_Logger::get_logmatch_buffer_len(); |
| if(!single_value->field_seq__no.match(match_value.seq__no(), legacy)){ |
| TTCN_Logger::log_logmatch_info(".seq_no"); |
| single_value->field_seq__no.log_match(match_value.seq__no(), legacy); |
| TTCN_Logger::set_logmatch_buffer_len(previous_size); |
| } |
| if(!single_value->field_data.match(match_value.data(), legacy)){ |
| TTCN_Logger::log_logmatch_info(".data"); |
| single_value->field_data.log_match(match_value.data(), legacy); |
| TTCN_Logger::set_logmatch_buffer_len(previous_size); |
| } |
| }else { |
| TTCN_Logger::print_logmatch_buffer(); |
| match_value.log(); |
| TTCN_Logger::log_event_str(" with "); |
| log(); |
| TTCN_Logger::log_event_str(" unmatched"); |
| } |
| } |
| return; |
| } |
| if (template_selection == SPECIFIC_VALUE) { |
| TTCN_Logger::log_event_str("{ seq_no := "); |
| single_value->field_seq__no.log_match(match_value.seq__no(), legacy); |
| TTCN_Logger::log_event_str(", data := "); |
| single_value->field_data.log_match(match_value.data(), legacy); |
| TTCN_Logger::log_event_str(" }"); |
| } else { |
| match_value.log(); |
| TTCN_Logger::log_event_str(" with "); |
| log(); |
| if (match(match_value, legacy)) TTCN_Logger::log_event_str(" matched"); |
| else TTCN_Logger::log_event_str(" unmatched"); |
| } |
| } |
| |
| void ETP__DT_template::encode_text(Text_Buf& text_buf) const |
| { |
| encode_text_base(text_buf); |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| single_value->field_seq__no.encode_text(text_buf); |
| single_value->field_data.encode_text(text_buf); |
| case OMIT_VALUE: |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| break; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| text_buf.push_int(value_list.n_values); |
| for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) |
| value_list.list_value[list_count].encode_text(text_buf); |
| break; |
| default: |
| TTCN_error("Text encoder: Encoding an uninitialized/unsupported template of type @IsobusCMMessageTypes.ETP_DT."); |
| } |
| } |
| |
| void ETP__DT_template::decode_text(Text_Buf& text_buf) |
| { |
| clean_up(); |
| decode_text_base(text_buf); |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| single_value = new single_value_struct; |
| single_value->field_seq__no.decode_text(text_buf); |
| single_value->field_data.decode_text(text_buf); |
| case OMIT_VALUE: |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| break; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| value_list.n_values = text_buf.pull_int().get_val(); |
| value_list.list_value = new ETP__DT_template[value_list.n_values]; |
| for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) |
| value_list.list_value[list_count].decode_text(text_buf); |
| break; |
| default: |
| TTCN_error("Text decoder: An unknown/unsupported selection was received in a template of type @IsobusCMMessageTypes.ETP_DT."); |
| } |
| } |
| |
| void ETP__DT_template::set_param(Module_Param& param) |
| { |
| param.basic_check(Module_Param::BC_TEMPLATE, "record template"); |
| switch (param.get_type()) { |
| case Module_Param::MP_Omit: |
| *this = OMIT_VALUE; |
| break; |
| case Module_Param::MP_Any: |
| *this = ANY_VALUE; |
| break; |
| case Module_Param::MP_AnyOrNone: |
| *this = ANY_OR_OMIT; |
| break; |
| case Module_Param::MP_List_Template: |
| case Module_Param::MP_ComplementList_Template: { |
| ETP__DT_template new_temp; |
| new_temp.set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : COMPLEMENTED_LIST, param.get_size()); |
| for (size_t p_i=0; p_i<param.get_size(); p_i++) { |
| new_temp.list_item(p_i).set_param(*param.get_elem(p_i)); |
| } |
| *this = new_temp; |
| break; } |
| case Module_Param::MP_Value_List: |
| if (2<param.get_size()) { |
| param.error("record template of type @IsobusCMMessageTypes.ETP_DT has 2 fields but list value has %d fields", (int)param.get_size()); |
| } |
| if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) seq__no().set_param(*param.get_elem(0)); |
| if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) data().set_param(*param.get_elem(1)); |
| break; |
| case Module_Param::MP_Assignment_List: { |
| Vector<bool> value_used(param.get_size()); |
| value_used.resize(param.get_size(), FALSE); |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "seq_no")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| seq__no().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| if (!strcmp(curr_param->get_id()->get_name(), "data")) { |
| if (curr_param->get_type()!=Module_Param::MP_NotUsed) { |
| data().set_param(*curr_param); |
| } |
| value_used[val_idx]=TRUE; |
| } |
| } |
| for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) { |
| Module_Param* const curr_param = param.get_elem(val_idx); |
| curr_param->error("Non existent field name in type @IsobusCMMessageTypes.ETP_DT: %s", curr_param->get_id()->get_name()); |
| break; |
| } |
| } break; |
| default: |
| param.type_error("record template", "@IsobusCMMessageTypes.ETP_DT"); |
| } |
| is_ifpresent = param.get_ifpresent(); |
| } |
| |
| void ETP__DT_template::check_restriction(template_res t_res, const char* t_name, boolean legacy) const |
| { |
| if (template_selection==UNINITIALIZED_TEMPLATE) return; |
| switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) { |
| case TR_OMIT: |
| if (template_selection==OMIT_VALUE) return; |
| case TR_VALUE: |
| if (template_selection!=SPECIFIC_VALUE || is_ifpresent) break; |
| single_value->field_seq__no.check_restriction(t_res, t_name ? t_name : "@IsobusCMMessageTypes.ETP_DT"); |
| single_value->field_data.check_restriction(t_res, t_name ? t_name : "@IsobusCMMessageTypes.ETP_DT"); |
| return; |
| case TR_PRESENT: |
| if (!match_omit(legacy)) return; |
| break; |
| default: |
| return; |
| } |
| TTCN_error("Restriction `%s' on template of type %s violated.", get_res_name(t_res), t_name ? t_name : "@IsobusCMMessageTypes.ETP_DT"); |
| } |
| |
| boolean ETP__DT_template::is_present(boolean legacy) const |
| { |
| if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE; |
| return !match_omit(legacy); |
| } |
| |
| boolean ETP__DT_template::match_omit(boolean legacy) const |
| { |
| if (is_ifpresent) return TRUE; |
| switch (template_selection) { |
| case OMIT_VALUE: |
| case ANY_OR_OMIT: |
| return TRUE; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| if (legacy) { |
| for (unsigned int l_idx=0; l_idx<value_list.n_values; l_idx++) |
| if (value_list.list_value[l_idx].match_omit()) |
| return template_selection==VALUE_LIST; |
| return template_selection==COMPLEMENTED_LIST; |
| } // else fall through |
| default: |
| return FALSE; |
| } |
| return FALSE; |
| } |
| |
| |
| /* Bodies of static functions */ |
| |
| static void pre_init_module() |
| { |
| TTCN_Location current_location("IsobusCMMessageTypes.ttcn", 0, TTCN_Location::LOCATION_UNKNOWN, "IsobusCMMessageTypes"); |
| General__Types::module_object.pre_init_module(); |
| IsobusMessageTypes::module_object.pre_init_module(); |
| } |
| |
| static void post_init_module() |
| { |
| TTCN_Location current_location("IsobusCMMessageTypes.ttcn", 0, TTCN_Location::LOCATION_UNKNOWN, "IsobusCMMessageTypes"); |
| General__Types::module_object.post_init_module(); |
| IsobusMessageTypes::module_object.post_init_module(); |
| } |
| |
| |
| } /* end of namespace */ |