blob: b447a6760846e89c977d4478f1874835861f1ca3 [file] [log] [blame]
Harald Weltea814f262017-07-24 13:21:35 +02001///////////////////////////////////////////////////////////////////////////////
2// //
3// Copyright Test Competence Center (TCC) ETH 2016 //
4// //
5// The copyright to the computer program(s) herein is the property of TCC. //
6// The program(s) may be used and/or copied only with the written permission //
7// of TCC or in accordance with the terms and conditions stipulated in the //
8// agreement/contract under which the program(s) has been supplied. //
9// //
10///////////////////////////////////////////////////////////////////////////////
11//
12// File: BSSGP_EncDec.cc
13// Rev: R1A
14// Prodnr: CNL 113 833
15// Contact: http://ttcn.ericsson.se
16// Reference: 3GPP TS 48.018 13.0.0
17
18#include "BSSGP_Types.hh"
19
20//static TTCN_Module BSSGP_EndDec("BSSGP_EncDec", __DATE__, __TIME__);
21
22namespace BSSGP__Types {
23
24
25OCTETSTRING enc__PDU__BSSGP(const PDU__BSSGP& pdu)
26{
27 TTCN_Buffer bb;
28
29 // CALCULATE WHICH LENGTH FORMAT SHOULD BE USED AND CHANGE SHORT LENGTH FORM
30 // TO LONG LENGTH FORM IF NECESSARY
31 if (pdu.get_selection() == PDU__BSSGP::ALT_pDU__BSSGP__DL__UNITDATA)
32 {
33 if( pdu.pDU__BSSGP__DL__UNITDATA().lLC__PDU().lLC__PDU().lengthof() > 127)
34 {
35 PDU__BSSGP pdu2(pdu);
36 pdu2.pDU__BSSGP__DL__UNITDATA().lLC__PDU().lengthIndicator().length2() =
37 pdu2.pDU__BSSGP__DL__UNITDATA().lLC__PDU().lLC__PDU().lengthof();
38 pdu2.encode(PDU__BSSGP_descr_ ,bb, TTCN_EncDec::CT_RAW);
39
40 }
41 else
42 pdu.encode(PDU__BSSGP_descr_ ,bb, TTCN_EncDec::CT_RAW);
43 }
44 else if(pdu.get_selection() == PDU__BSSGP::ALT_pDU__BSSGP__UL__UNITDATA)
45 {
46 if( pdu.pDU__BSSGP__UL__UNITDATA().lLC__PDU().lLC__PDU().lengthof() > 127)
47 {
48 PDU__BSSGP pdu2(pdu);
49 pdu2.pDU__BSSGP__UL__UNITDATA().lLC__PDU().lengthIndicator().length2() =
50 pdu2.pDU__BSSGP__UL__UNITDATA().lLC__PDU().lLC__PDU().lengthof();
51 pdu2.encode(PDU__BSSGP_descr_ ,bb, TTCN_EncDec::CT_RAW);
52 }
53 else
54 pdu.encode(PDU__BSSGP_descr_ ,bb, TTCN_EncDec::CT_RAW);
55 }
56
57 else if(pdu.get_selection() == PDU__BSSGP::ALT_pDU__BSSGP__DL__MBMS__UNITDATA)
58 {
59 if( pdu.pDU__BSSGP__DL__MBMS__UNITDATA().lLC__PDU().lLC__PDU().lengthof() > 127)
60 {
61 PDU__BSSGP pdu2(pdu);
62 pdu2.pDU__BSSGP__DL__MBMS__UNITDATA().lLC__PDU().lengthIndicator().length2() =
63 pdu2.pDU__BSSGP__DL__MBMS__UNITDATA().lLC__PDU().lLC__PDU().lengthof();
64 pdu2.encode(PDU__BSSGP_descr_ ,bb, TTCN_EncDec::CT_RAW);
65 }
66 else
67 pdu.encode(PDU__BSSGP_descr_ ,bb, TTCN_EncDec::CT_RAW);
68 }
69
70 else if(pdu.get_selection() == PDU__BSSGP::ALT_pDU__BSSGP__UL__MBMS__UNITDATA)
71 {
72 if( pdu.pDU__BSSGP__UL__MBMS__UNITDATA().lLC__PDU().lLC__PDU().lengthof() > 127)
73 {
74 PDU__BSSGP pdu2(pdu);
75 pdu2.pDU__BSSGP__UL__MBMS__UNITDATA().lLC__PDU().lengthIndicator().length2() =
76 pdu2.pDU__BSSGP__UL__MBMS__UNITDATA().lLC__PDU().lLC__PDU().lengthof();
77 pdu2.encode(PDU__BSSGP_descr_ ,bb, TTCN_EncDec::CT_RAW);
78 }
79 else
80 pdu.encode(PDU__BSSGP_descr_ ,bb, TTCN_EncDec::CT_RAW);
81 }
82
83 else
84 pdu.encode(PDU__BSSGP_descr_ ,bb, TTCN_EncDec::CT_RAW);
85
86 return OCTETSTRING (bb.get_len(), bb.get_data());
87}
88
89/*PDU__BSSGP dec__PDU__BSSGP(const OCTETSTRING& stream)
90{
91 PDU__BSSGP retv;
92 TTCN_Buffer bb;
93
94 bb.put_os(stream);
95
96 retv.decode(PDU__BSSGP_descr_, bb, TTCN_EncDec::CT_RAW);
97 return retv;
98}*/
99
100PDU__BSSGP dec__PDU__BSSGP(const OCTETSTRING& stream)
101{
102 if (TTCN_Logger::log_this_event(TTCN_Logger::DEBUG_ENCDEC)) {
103 TTCN_Logger::begin_event(TTCN_Logger::DEBUG_ENCDEC);
104 TTCN_Logger::log_event_str("dec_PDU_BSSGP(): Stream before decoding: ");
105 stream.log();
106 TTCN_Logger::end_event();
107 }
108 TTCN_EncDec::set_error_behavior(TTCN_EncDec::ET_ALL, TTCN_EncDec::EB_DEFAULT);
109 TTCN_EncDec::clear_error();
110 TTCN_Buffer ttcn_buffer(stream);
111 PDU__BSSGP ret_val;
112 ret_val.decode(PDU__BSSGP_descr_, ttcn_buffer, TTCN_EncDec::CT_RAW);
113
114 if (TTCN_Logger::log_this_event(TTCN_Logger::DEBUG_ENCDEC)) {
115 TTCN_Logger::begin_event(TTCN_Logger::DEBUG_ENCDEC);
116 TTCN_Logger::log_event_str("dec_PDU_BSSGP(): Decoded @BSSGP_Types.PDU_BSSGP: ");
117 ret_val.log();
118 TTCN_Logger::end_event();
119 }
120if (TTCN_EncDec::get_last_error_type() == TTCN_EncDec::ET_NONE) {
121 if (ttcn_buffer.get_pos() < ttcn_buffer.get_len() && TTCN_Logger::log_this_event(TTCN_WARNING)) {
122 ttcn_buffer.cut();
123 OCTETSTRING remaining_stream;
124 ttcn_buffer.get_string(remaining_stream);
125 TTCN_Logger::begin_event(TTCN_WARNING);
126 TTCN_Logger::log_event_str("dec_PDU_BSSGP(): Warning: Data remained at the end of the stream after successful decoding: ");
127 remaining_stream.log();
128 TTCN_Logger::end_event();
129 }
130 }
131if(ret_val.get_selection()== PDU__BSSGP::ALT_pDU__BSSGP__PS__HANDOVER__REQUEST)
132{
133 if(!ret_val.pDU__BSSGP__PS__HANDOVER__REQUEST().target__Cell__Identifier().ispresent()){
134 Cell__Identifier cell;
135 cell = ret_val.pDU__BSSGP__PS__HANDOVER__REQUEST().source__Cell__Identifier();
136 ret_val.pDU__BSSGP__PS__HANDOVER__REQUEST().target__Cell__Identifier() = cell;
137 //ret_val.pDU__BSSGP__PS__HANDOVER__REQUEST().source__Cell__Identifier().clean_up();
138 ret_val.pDU__BSSGP__PS__HANDOVER__REQUEST().source__Cell__Identifier()= OMIT_VALUE;
139
140 } }
141return ret_val;
142}
143
144
145}//namespace