anthill_smpp_ruby 0.5.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (154) hide show
  1. data/MIT-LICENSE +21 -0
  2. data/README +30 -0
  3. data/anthill_smpp_ruby.gemspec +18 -0
  4. data/changelog +43 -0
  5. data/data/dumps/random_command.dump +1 -0
  6. data/data/dumps/smpp_alert_notification.dump +1 -0
  7. data/data/dumps/smpp_bind_receiver.dump +1 -0
  8. data/data/dumps/smpp_bind_receiver_resp.dump +1 -0
  9. data/data/dumps/smpp_bind_transceiver.dump +1 -0
  10. data/data/dumps/smpp_bind_transceiver_1.dump +2 -0
  11. data/data/dumps/smpp_bind_transceiver_resp.dump +1 -0
  12. data/data/dumps/smpp_bind_transmitter.dump +1 -0
  13. data/data/dumps/smpp_bind_transmitter_resp.dump +1 -0
  14. data/data/dumps/smpp_broadcast_sm.dump +1 -0
  15. data/data/dumps/smpp_broadcast_sm_resp.dump +1 -0
  16. data/data/dumps/smpp_cancel_broadcast_sm.dump +1 -0
  17. data/data/dumps/smpp_cancel_broadcast_sm_resp.dump +1 -0
  18. data/data/dumps/smpp_cancel_sm.dump +1 -0
  19. data/data/dumps/smpp_cancel_sm_resp.dump +1 -0
  20. data/data/dumps/smpp_data_sm.dump +1 -0
  21. data/data/dumps/smpp_data_sm_resp.dump +1 -0
  22. data/data/dumps/smpp_deliver_sm.dump +1 -0
  23. data/data/dumps/smpp_deliver_sm_resp.dump +1 -0
  24. data/data/dumps/smpp_enquire_link.dump +1 -0
  25. data/data/dumps/smpp_enquire_link_resp.dump +1 -0
  26. data/data/dumps/smpp_generic_nack.dump +1 -0
  27. data/data/dumps/smpp_outbind.dump +1 -0
  28. data/data/dumps/smpp_query_broadcast_sm.dump +1 -0
  29. data/data/dumps/smpp_query_broadcast_sm_resp.dump +1 -0
  30. data/data/dumps/smpp_query_broadcast_sm_resp_1.dump +1 -0
  31. data/data/dumps/smpp_query_sm.dump +1 -0
  32. data/data/dumps/smpp_query_sm_resp.dump +1 -0
  33. data/data/dumps/smpp_replace_sm.dump +1 -0
  34. data/data/dumps/smpp_replace_sm_resp.dump +1 -0
  35. data/data/dumps/smpp_submit_multi.dump +1 -0
  36. data/data/dumps/smpp_submit_multi_resp.dump +1 -0
  37. data/data/dumps/smpp_submit_sm.dump +1 -0
  38. data/data/dumps/smpp_submit_sm_resp.dump +1 -0
  39. data/data/dumps/smpp_unbind.dump +1 -0
  40. data/data/dumps/smpp_unbind_resp.dump +1 -0
  41. data/data/pdus/random_command.xml +35 -0
  42. data/data/pdus/smpp_alert_notification.xml +14 -0
  43. data/data/pdus/smpp_alert_notification_no_optional.xml +13 -0
  44. data/data/pdus/smpp_bind_receiver.xml +17 -0
  45. data/data/pdus/smpp_bind_receiver_resp.xml +12 -0
  46. data/data/pdus/smpp_bind_receiver_resp_no_optional.xml +11 -0
  47. data/data/pdus/smpp_bind_transceiver.xml +17 -0
  48. data/data/pdus/smpp_bind_transceiver_resp.xml +12 -0
  49. data/data/pdus/smpp_bind_transceiver_resp_no_optional.xml +11 -0
  50. data/data/pdus/smpp_bind_transmitter.xml +17 -0
  51. data/data/pdus/smpp_bind_transmitter_resp.xml +12 -0
  52. data/data/pdus/smpp_bind_transmitter_resp_no_optional.xml +11 -0
  53. data/data/pdus/smpp_broadcast_sm.xml +47 -0
  54. data/data/pdus/smpp_broadcast_sm_no_optional.xml +26 -0
  55. data/data/pdus/smpp_broadcast_sm_resp.xml +14 -0
  56. data/data/pdus/smpp_broadcast_sm_resp_no_optional.xml +8 -0
  57. data/data/pdus/smpp_cancel_broadcast_sm.xml +17 -0
  58. data/data/pdus/smpp_cancel_broadcast_sm_no_optional.xml +15 -0
  59. data/data/pdus/smpp_cancel_broadcast_sm_resp.xml +7 -0
  60. data/data/pdus/smpp_cancel_sm.xml +18 -0
  61. data/data/pdus/smpp_cancel_sm_resp.xml +10 -0
  62. data/data/pdus/smpp_commands.xsd +914 -0
  63. data/data/pdus/smpp_data_sm.xml +58 -0
  64. data/data/pdus/smpp_data_sm_no_optional.xml +17 -0
  65. data/data/pdus/smpp_data_sm_resp.xml +15 -0
  66. data/data/pdus/smpp_data_sm_resp_no_optional.xml +8 -0
  67. data/data/pdus/smpp_deliver_sm.xml +46 -0
  68. data/data/pdus/smpp_deliver_sm_no_optional.xml +25 -0
  69. data/data/pdus/smpp_deliver_sm_resp.xml +14 -0
  70. data/data/pdus/smpp_deliver_sm_resp_no_optional.xml +8 -0
  71. data/data/pdus/smpp_enquire_link.xml +10 -0
  72. data/data/pdus/smpp_enquire_link_resp.xml +10 -0
  73. data/data/pdus/smpp_generic_nack.xml +10 -0
  74. data/data/pdus/smpp_outbind.xml +12 -0
  75. data/data/pdus/smpp_query_broadcast_sm.xml +12 -0
  76. data/data/pdus/smpp_query_broadcast_sm_no_optional.xml +11 -0
  77. data/data/pdus/smpp_query_broadcast_sm_resp.xml +17 -0
  78. data/data/pdus/smpp_query_broadcast_sm_resp_no_optional.xml +15 -0
  79. data/data/pdus/smpp_query_sm.xml +11 -0
  80. data/data/pdus/smpp_query_sm_resp.xml +11 -0
  81. data/data/pdus/smpp_replace_sm.xml +18 -0
  82. data/data/pdus/smpp_replace_sm_no_optional.xml +17 -0
  83. data/data/pdus/smpp_replace_sm_resp.xml +7 -0
  84. data/data/pdus/smpp_submit_multi.xml +73 -0
  85. data/data/pdus/smpp_submit_multi_no_optional.xml +51 -0
  86. data/data/pdus/smpp_submit_multi_resp.xml +35 -0
  87. data/data/pdus/smpp_submit_sm.xml +57 -0
  88. data/data/pdus/smpp_submit_sm_no_optional.xml +28 -0
  89. data/data/pdus/smpp_submit_sm_resp.xml +8 -0
  90. data/data/pdus/smpp_unbind.xml +10 -0
  91. data/data/pdus/smpp_unbind_resp.xml +10 -0
  92. data/examples/dump_viewer.rb +298 -0
  93. data/examples/pdu_composer.rb +1331 -0
  94. data/knownbugs +24 -0
  95. data/lib/anthill_smpp_ruby.rb +83 -0
  96. data/lib/i_smpp_outputter.rb +425 -0
  97. data/lib/pdu/smpp_alert_notification.rb +132 -0
  98. data/lib/pdu/smpp_bind.rb +102 -0
  99. data/lib/pdu/smpp_bind_receiver.rb +29 -0
  100. data/lib/pdu/smpp_bind_receiver_resp.rb +30 -0
  101. data/lib/pdu/smpp_bind_resp.rb +100 -0
  102. data/lib/pdu/smpp_bind_transceiver.rb +29 -0
  103. data/lib/pdu/smpp_bind_transceiver_resp.rb +31 -0
  104. data/lib/pdu/smpp_bind_transmitter.rb +29 -0
  105. data/lib/pdu/smpp_bind_transmitter_resp.rb +30 -0
  106. data/lib/pdu/smpp_broadcast_sm.rb +566 -0
  107. data/lib/pdu/smpp_broadcast_sm_resp.rb +130 -0
  108. data/lib/pdu/smpp_cancel_broadcast_sm.rb +143 -0
  109. data/lib/pdu/smpp_cancel_broadcast_sm_resp.rb +60 -0
  110. data/lib/pdu/smpp_cancel_sm.rb +110 -0
  111. data/lib/pdu/smpp_cancel_sm_resp.rb +60 -0
  112. data/lib/pdu/smpp_data_sm.rb +679 -0
  113. data/lib/pdu/smpp_data_sm_resp.rb +148 -0
  114. data/lib/pdu/smpp_deliver_sm.rb +458 -0
  115. data/lib/pdu/smpp_deliver_sm_resp.rb +137 -0
  116. data/lib/pdu/smpp_enquire_link.rb +59 -0
  117. data/lib/pdu/smpp_enquire_link_resp.rb +61 -0
  118. data/lib/pdu/smpp_generic_nack.rb +61 -0
  119. data/lib/pdu/smpp_outbind.rb +71 -0
  120. data/lib/pdu/smpp_pdu.rb +90 -0
  121. data/lib/pdu/smpp_query_broadcast_sm.rb +120 -0
  122. data/lib/pdu/smpp_query_broadcast_sm_resp.rb +192 -0
  123. data/lib/pdu/smpp_query_sm.rb +92 -0
  124. data/lib/pdu/smpp_query_sm_resp.rb +92 -0
  125. data/lib/pdu/smpp_replace_sm.rb +172 -0
  126. data/lib/pdu/smpp_replace_sm_resp.rb +61 -0
  127. data/lib/pdu/smpp_resp.rb +40 -0
  128. data/lib/pdu/smpp_submit_multi.rb +517 -0
  129. data/lib/pdu/smpp_submit_multi_resp.rb +90 -0
  130. data/lib/pdu/smpp_submit_sm.rb +591 -0
  131. data/lib/pdu/smpp_submit_sm_resp.rb +72 -0
  132. data/lib/pdu/smpp_unbind.rb +60 -0
  133. data/lib/pdu/smpp_unbind_resp.rb +61 -0
  134. data/lib/smpp_constants.rb +917 -0
  135. data/lib/smpp_csv_outputter.rb +1601 -0
  136. data/lib/smpp_datatypes.rb +89 -0
  137. data/lib/smpp_decoder.rb +627 -0
  138. data/lib/smpp_encoder.rb +495 -0
  139. data/lib/smpp_hex_outputter.rb +36 -0
  140. data/lib/smpp_outputter_base.rb +315 -0
  141. data/lib/smpp_structures.rb +98 -0
  142. data/lib/smpp_txt_outputter.rb +1895 -0
  143. data/lib/smpp_validator.rb +373 -0
  144. data/lib/smpp_xml_outputter.rb +34 -0
  145. data/roadmap +18 -0
  146. data/setup.rb +1585 -0
  147. data/test/anthill_smpp_test.rb +29 -0
  148. data/test/smpp_codec_test.rb +30 -0
  149. data/test/smpp_datatypes_test.rb +69 -0
  150. data/test/smpp_outputter_test.rb +1261 -0
  151. data/test/smpp_parsing_test.rb +1758 -0
  152. data/test/smpp_rawdump_test.rb +2095 -0
  153. data/test/smpp_validator_test.rb +441 -0
  154. metadata +206 -0
@@ -0,0 +1,679 @@
1
+ #
2
+ # Copyright 2007 Majoron.com (developers@majoron.com)
3
+ # Original sources are available at www.majoron.com
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+ #
17
+
18
+
19
+ module Majoron
20
+ module AntHill
21
+ module SMPP
22
+ class SMPPDataSM < SMPPPDU
23
+ def initialize(command_status = ErrorCode::ESME_ROK, sequence_number = nil)
24
+ super(CommandId::CM_DATA_SM, command_status, sequence_number)
25
+
26
+ # Mandatory fields
27
+ @service_type = ""
28
+ @source_addr_ton = TON::UNKNOWN
29
+ @source_addr_npi = NPI::UNKNOWN
30
+ @source_addr = ""
31
+ @dest_addr_ton = TON::UNKNOWN
32
+ @dest_addr_npi = NPI::UNKNOWN
33
+ @dest_addr = ""
34
+ @esm_class = 0
35
+ @registered_delivery = 0
36
+ @data_coding = 0
37
+
38
+
39
+ # Optional fields
40
+ @source_port = nil
41
+ @source_addr_subunit = nil
42
+ @source_network_type = nil
43
+ @source_bearer_type = nil
44
+ @source_telematics_id = nil
45
+ @destination_port = nil
46
+ @dest_addr_subunit = nil
47
+ @dest_network_type = nil
48
+ @dest_bearer_type = nil
49
+ @dest_telematics_id = nil
50
+ @sar_msg_ref_num = nil
51
+ @sar_total_segments = nil
52
+ @sar_segment_seqnum = nil
53
+ @more_messages_to_send = nil
54
+ @qos_time_to_live = nil
55
+ @payload_type = nil
56
+ @message_payload = nil
57
+ @set_dpf = nil
58
+ @receipted_message_id = nil
59
+ @message_state = nil
60
+ @network_error_code = nil
61
+ @user_message_reference = nil
62
+ @privacy_indicator = nil
63
+ @callback_num = nil
64
+ @callback_num_pres_ind = nil
65
+ @callback_num_atag = nil
66
+ @source_subaddress = nil
67
+ @dest_subaddress = nil
68
+ @user_response_code = nil
69
+ @display_time = nil
70
+ @sms_signal = nil
71
+ @ms_validity = nil
72
+ @ms_msg_wait_facilities = nil
73
+ @number_of_messages = nil
74
+ @alert_on_msg_delivery = nil
75
+ @language_indicator = nil
76
+ @its_reply_type = nil
77
+ @its_session_info = nil
78
+
79
+ # Optional fields length
80
+ @source_port_len = SMPPTLVLen::WORD_LEN
81
+ @source_addr_subunit_len = SMPPTLVLen::BYTE_LEN
82
+ @source_network_type_len = SMPPTLVLen::BYTE_LEN
83
+ @source_bearer_type_len = SMPPTLVLen::BYTE_LEN
84
+ @source_telematics_id_len = SMPPTLVLen::BYTE_LEN
85
+ @destination_port_len = SMPPTLVLen::WORD_LEN
86
+ @dest_addr_subunit_len = SMPPTLVLen::BYTE_LEN
87
+ @dest_network_type_len = SMPPTLVLen::BYTE_LEN
88
+ @dest_bearer_type_len = SMPPTLVLen::BYTE_LEN
89
+ @dest_telematics_id_len = SMPPTLVLen::BYTE_LEN
90
+ @sar_msg_ref_num_len = SMPPTLVLen::WORD_LEN
91
+ @sar_total_segments_len = SMPPTLVLen::BYTE_LEN
92
+ @sar_segment_seqnum_len = SMPPTLVLen::BYTE_LEN
93
+ @more_messages_to_send_len = SMPPTLVLen::BYTE_LEN
94
+ @qos_time_to_live_len = SMPPTLVLen::DWORD_LEN
95
+ @payload_type_len = SMPPTLVLen::BYTE_LEN
96
+ @message_payload_len = SMPPTLVLen::ZERO_LEN
97
+ @set_dpf_len = SMPPTLVLen::BYTE_LEN
98
+ @receipted_message_id_len = SMPPTLVLen::ZERO_LEN
99
+ @message_state_len = SMPPTLVLen::BYTE_LEN
100
+ @network_error_code_len = SMPPTLVLen::BYTE_LEN + SMPPTLVLen::WORD_LEN
101
+ @user_message_reference_len = SMPPTLVLen::WORD_LEN
102
+ @privacy_indicator_len = SMPPTLVLen::BYTE_LEN
103
+ @callback_num_len = SMPPTLVLen::ZERO_LEN
104
+ @callback_num_pres_ind_len = SMPPTLVLen::BYTE_LEN
105
+ @callback_num_atag_len = SMPPTLVLen::ZERO_LEN
106
+ @source_subaddress_len = SMPPTLVLen::ZERO_LEN
107
+ @dest_subaddress_len = SMPPTLVLen::ZERO_LEN
108
+ @user_response_code_len = SMPPTLVLen::BYTE_LEN
109
+ @display_time_len = SMPPTLVLen::BYTE_LEN
110
+ @sms_signal_len = SMPPTLVLen::WORD_LEN
111
+ @ms_validity_len = SMPPTLVLen::BYTE_LEN
112
+ @ms_msg_wait_facilities_len = SMPPTLVLen::BYTE_LEN
113
+ @number_of_messages_len = SMPPTLVLen::BYTE_LEN
114
+ @alert_on_msg_delivery_len = SMPPTLVLen::BYTE_LEN
115
+ @language_indicator_len = SMPPTLVLen::BYTE_LEN
116
+ @its_reply_type_len = SMPPTLVLen::BYTE_LEN
117
+ @its_session_info_len = SMPPTLVLen::WORD_LEN
118
+ end
119
+ # Interface to encode SMPP packet
120
+ def encode_packet(encoder)
121
+ # Encode header and mandatory fields
122
+ encoder.encode_header(@header)
123
+ encoder.encode_service_type(@service_type)
124
+ encoder.encode_source_addr_ton(@source_addr_ton)
125
+ encoder.encode_source_addr_npi(@source_addr_npi)
126
+ encoder.encode_source_addr65(@source_addr)
127
+ encoder.encode_dest_addr_ton(@dest_addr_ton)
128
+ encoder.encode_dest_addr_npi(@dest_addr_npi)
129
+ encoder.encode_dest_addr65(@dest_addr)
130
+ encoder.encode_esm_class(@esm_class)
131
+ encoder.encode_registered_delivery(@registered_delivery)
132
+ encoder.encode_data_coding(@data_coding)
133
+
134
+
135
+ # Encode optional fields
136
+ encoder.encode_source_port(@source_port,
137
+ @source_port_len) if !@source_port.nil?
138
+ encoder.encode_source_addr_subunit(@source_addr_subunit,
139
+ @source_addr_subunit_len) if !@source_addr_subunit.nil?
140
+ encoder.encode_source_network_type(@source_network_type,
141
+ @source_network_type_len) if !@source_network_type.nil?
142
+ encoder.encode_source_bearer_type(@source_bearer_type,
143
+ @source_bearer_type_len) if !@source_bearer_type.nil?
144
+ encoder.encode_source_telematics_id(@source_telematics_id,
145
+ @source_telematics_id_len) if !@source_telematics_id.nil?
146
+ encoder.encode_destination_port(@destination_port,
147
+ @destination_port_len) if !@destination_port.nil?
148
+ encoder.encode_dest_addr_subunit(@dest_addr_subunit,
149
+ @dest_addr_subunit_len) if !@dest_addr_subunit.nil?
150
+ encoder.encode_dest_network_type(@dest_network_type,
151
+ @dest_network_type_len) if !@dest_network_type.nil?
152
+ encoder.encode_dest_bearer_type(@dest_bearer_type,
153
+ @dest_bearer_type_len) if !@dest_bearer_type.nil?
154
+ encoder.encode_dest_telematics_id(@dest_telematics_id,
155
+ @dest_telematics_id_len) if !@dest_telematics_id.nil?
156
+ encoder.encode_sar_msg_ref_num(@sar_msg_ref_num,
157
+ @sar_msg_ref_num_len) if !@sar_msg_ref_num.nil?
158
+ encoder.encode_sar_total_segments(@sar_total_segments,
159
+ @sar_total_segments_len) if !@sar_total_segments.nil?
160
+ encoder.encode_sar_segment_seqnum(@sar_segment_seqnum,
161
+ @sar_segment_seqnum_len) if !@sar_segment_seqnum.nil?
162
+ encoder.encode_more_messages_to_send(@more_messages_to_send,
163
+ @more_messages_to_send_len) if !@more_messages_to_send.nil?
164
+ encoder.encode_qos_time_to_live(@qos_time_to_live,
165
+ @qos_time_to_live_len) if !@qos_time_to_live.nil?
166
+ encoder.encode_payload_type(@payload_type,
167
+ @payload_type_len) if !@payload_type.nil?
168
+ encoder.encode_message_payload(@message_payload,
169
+ @message_payload_len) if !@message_payload.nil?
170
+ encoder.encode_set_dpf(@set_dpf,
171
+ @set_dpf_len) if !@set_dpf.nil?
172
+ encoder.encode_receipted_message_id(@receipted_message_id,
173
+ @receipted_message_id_len) if !@receipted_message_id.nil?
174
+ encoder.encode_message_state_tlv(@message_state,
175
+ @message_state_len) if !@message_state.nil?
176
+ encoder.encode_network_error_code(@network_error_code,
177
+ @network_error_code_len) if !@network_error_code.nil?
178
+ encoder.encode_user_message_reference(@user_message_reference,
179
+ @user_message_reference_len) if !@user_message_reference.nil?
180
+ encoder.encode_privacy_indicator(@privacy_indicator,
181
+ @privacy_indicator_len) if !@privacy_indicator.nil?
182
+ encoder.encode_callback_num(@callback_num,
183
+ @callback_num_len) if !@callback_num.nil?
184
+ encoder.encode_callback_num_pres_ind(@callback_num_pres_ind,
185
+ @callback_num_pres_ind_len) if !@callback_num_pres_ind.nil?
186
+ encoder.encode_callback_num_atag(@callback_num_atag,
187
+ @callback_num_atag_len) if !@callback_num_atag.nil?
188
+ encoder.encode_source_subaddress(@source_subaddress,
189
+ @source_subaddress_len) if !@source_subaddress.nil?
190
+ encoder.encode_dest_subaddress(@dest_subaddress,
191
+ @dest_subaddress_len) if !@dest_subaddress.nil?
192
+ encoder.encode_user_response_code(@user_response_code,
193
+ @user_response_code_len) if !@user_response_code.nil?
194
+ encoder.encode_display_time(@display_time,
195
+ @display_time_len) if !@display_time.nil?
196
+ encoder.encode_sms_signal(@sms_signal,
197
+ @sms_signal_len) if !@sms_signal.nil?
198
+ encoder.encode_ms_validity(@ms_validity,
199
+ @ms_validity_len) if !@ms_validity.nil?
200
+ encoder.encode_ms_msg_wait_facilities(@ms_msg_wait_facilities,
201
+ @ms_msg_wait_facilities_len) if !@ms_msg_wait_facilities.nil?
202
+ encoder.encode_number_of_messages(@number_of_messages,
203
+ @number_of_messages_len) if !@number_of_messages.nil?
204
+ encoder.encode_number_of_messages(@number_of_messages,
205
+ @number_of_messages_len) if !@number_of_messages.nil?
206
+ encoder.encode_alert_on_msg_delivery(@alert_on_msg_delivery,
207
+ @alert_on_msg_delivery_len) if !@alert_on_msg_delivery.nil?
208
+ encoder.encode_language_indicator(@language_indicator,
209
+ @language_indicator_len) if !@language_indicator.nil?
210
+ encoder.encode_its_reply_type(@its_reply_type,
211
+ @its_reply_type_len) if !@its_reply_type.nil?
212
+ encoder.encode_its_session_info(@its_session_info,
213
+ @its_session_info_len) if !@its_session_info.nil?
214
+ end
215
+
216
+ # Interface to decode SMPP packet
217
+ def decode_packet(decoder)
218
+ # Decode header and mandatory fields
219
+ @header = decoder.decode_header()
220
+ @service_type = decoder.decode_service_type(command_length())
221
+ @source_addr_ton = decoder.decode_source_addr_ton(command_length())
222
+ @source_addr_npi = decoder.decode_source_addr_npi(command_length())
223
+ @source_addr = decoder.decode_source_addr65(command_length())
224
+ @dest_addr_ton = decoder.decode_dest_addr_ton(command_length())
225
+ @dest_addr_npi = decoder.decode_dest_addr_npi(command_length())
226
+ @dest_addr = decoder.decode_dest_addr65(command_length())
227
+ @esm_class = decoder.decode_esm_class(command_length())
228
+ @registered_delivery = decoder.decode_registered_delivery(command_length())
229
+ @data_coding = decoder.decode_data_coding(command_length())
230
+
231
+
232
+ # Decode optional fields
233
+ while decoder.has_tlvs()
234
+ case decoder.get_tlv_code()
235
+ when OptTags::TAG_SOURCE_PORT
236
+ @source_port, @source_port_len =
237
+ decoder.decode_source_port(command_length())
238
+ when OptTags::TAG_SOURCE_ADDR_SUBUNIT
239
+ @source_addr_subunit, @source_addr_subunit_len =
240
+ decoder.decode_source_addr_subunit(command_length())
241
+ when OptTags::TAG_SOURCE_NETWORK_TYPE
242
+ @source_network_type, @source_network_type_len =
243
+ decoder.decode_source_network_type(command_length())
244
+ when OptTags::TAG_SOURCE_BEARER_TYPE
245
+ @source_bearer_type, @source_bearer_type_len =
246
+ decoder.decode_source_bearer_type(command_length())
247
+ when OptTags::TAG_SOURCE_TELEMATICS_ID
248
+ @source_telematics_id, @source_telematics_id_len =
249
+ decoder.decode_source_telematics_id(command_length())
250
+ when OptTags::TAG_DESTINATION_PORT
251
+ @destination_port, @destination_port_len =
252
+ decoder.decode_destination_port(command_length())
253
+ when OptTags::TAG_DEST_ADDR_SUBUNIT
254
+ @dest_addr_subunit, @dest_addr_subunit_len =
255
+ decoder.decode_dest_addr_subunit(command_length())
256
+ when OptTags::TAG_DEST_NETWORK_TYPE
257
+ @dest_network_type, @dest_network_type_len =
258
+ decoder.decode_dest_network_type(command_length())
259
+ when OptTags::TAG_DEST_BEARER_TYPE
260
+ @dest_bearer_type, @dest_bearer_type_len =
261
+ decoder.decode_dest_bearer_type(command_length())
262
+ when OptTags::TAG_DEST_TELEMATICS_ID
263
+ @dest_telematics_id, @dest_telematics_id_len =
264
+ decoder.decode_dest_telematics_id(command_length())
265
+ when OptTags::TAG_SAR_MSG_REF_NUM
266
+ @sar_msg_ref_num, @sar_msg_ref_num_len =
267
+ decoder.decode_sar_msg_ref_num(command_length())
268
+ when OptTags::TAG_SAR_TOTAL_SEGMENTS
269
+ @sar_total_segments, @sar_total_segments_len =
270
+ decoder.decode_sar_total_segments(command_length())
271
+ when OptTags::TAG_SAR_SEGMENT_SEQNUM
272
+ @sar_segment_seqnum, @sar_segment_seqnum_len =
273
+ decoder.decode_sar_segment_seqnum(command_length())
274
+ when OptTags::TAG_MORE_MESSAGES_TO_SEND
275
+ @more_messages_to_send, @more_messages_to_send_len =
276
+ decoder.decode_more_messages_to_send(command_length())
277
+ when OptTags::TAG_QOS_TIME_TO_LIVE
278
+ @qos_time_to_live, @qos_time_to_live_len =
279
+ decoder.decode_qos_time_to_live(command_length())
280
+ when OptTags::TAG_PAYLOAD_TYPE
281
+ @payload_type, @payload_type_len =
282
+ decoder.decode_payload_type(command_length())
283
+ when OptTags::TAG_MESSAGE_PAYLOAD
284
+ @message_payload, @message_payload_len =
285
+ decoder.decode_message_payload(command_length())
286
+ when OptTags::TAG_SET_DPF
287
+ @set_dpf, @set_dpf_len =
288
+ decoder.decode_set_dpf(command_length())
289
+ when OptTags::TAG_RECEIPTED_MESSAGE_ID
290
+ @receipted_message_id, @receipted_message_id_len =
291
+ decoder.decode_receipted_message_id(command_length())
292
+ when OptTags::TAG_MESSAGE_STATE
293
+ @message_state, @message_state_len =
294
+ decoder.decode_message_state_tlv(command_length())
295
+ when OptTags::TAG_NETWORK_ERROR_CODE
296
+ @network_error_code, @network_error_code_len =
297
+ decoder.decode_network_error_code(command_length())
298
+ when OptTags::TAG_USER_MESSAGE_REFERENCE
299
+ @user_message_reference, @user_message_reference_len =
300
+ decoder.decode_user_message_reference(command_length())
301
+ when OptTags::TAG_PRIVACY_INDICATOR
302
+ @privacy_indicator, @privacy_indicator_len =
303
+ decoder.decode_privacy_indicator(command_length())
304
+ when OptTags::TAG_CALLBACK_NUM
305
+ @callback_num, @callback_num_len =
306
+ decoder.decode_callback_num(command_length())
307
+ when OptTags::TAG_CALLBACK_NUM_PRES_IND
308
+ @callback_num_pres_ind, @callback_num_pres_ind_len =
309
+ decoder.decode_callback_num_pres_ind(command_length())
310
+ when OptTags::TAG_CALLBACK_NUM_ATAG
311
+ @callback_num_atag, @callback_num_atag_len =
312
+ decoder.decode_callback_num_atag(command_length())
313
+ when OptTags::TAG_SOURCE_SUBADDRESS
314
+ @source_subaddress, @source_subaddress_len =
315
+ decoder.decode_source_subaddress(command_length())
316
+ when OptTags::TAG_DEST_SUBADDRESS
317
+ @dest_subaddress, @dest_subaddress_len =
318
+ decoder.decode_dest_subaddress(command_length())
319
+ when OptTags::TAG_USER_RESPONSE_CODE
320
+ @user_response_code, @user_response_code_len =
321
+ decoder.decode_user_response_code(command_length())
322
+ when OptTags::TAG_DISPLAY_TIME
323
+ @display_time, @display_time_len =
324
+ decoder.decode_display_time(command_length())
325
+ when OptTags::TAG_SMS_SIGNAL
326
+ @sms_signal, @sms_signal_len =
327
+ decoder.decode_sms_signal(command_length())
328
+ when OptTags::TAG_MS_VALIDITY
329
+ @ms_validity, @ms_validity_len =
330
+ decoder.decode_ms_validity(command_length())
331
+ when OptTags::TAG_MS_MSG_WAIT_FACILITIES
332
+ @ms_msg_wait_facilities, @ms_msg_wait_facilities_len =
333
+ decoder.decode_ms_msg_wait_facilities(command_length())
334
+ when OptTags::TAG_NUMBER_OF_MESSAGES
335
+ @number_of_messages, @number_of_messages_len =
336
+ decoder.decode_number_of_messages(command_length())
337
+ when OptTags::TAG_ALERT_ON_MESSAGE_DELIVERY
338
+ @alert_on_msg_delivery, @alert_on_msg_delivery_len =
339
+ decoder.decode_alert_on_msg_delivery(command_length())
340
+ when OptTags::TAG_LANGUAGE_INDICATOR
341
+ @language_indicator, @language_indicator_len =
342
+ decoder.decode_language_indicator(command_length())
343
+ when OptTags::TAG_ITS_REPLY_TYPE
344
+ @its_reply_type, @its_reply_type_len =
345
+ decoder.decode_its_reply_type(command_length())
346
+ when OptTags::TAG_ITS_SESSION_INFO
347
+ @its_session_info, @its_session_info_len =
348
+ decoder.decode_its_session_info(command_length())
349
+ else
350
+ # Report about error
351
+ raise Errors::UNKNOWN_TAG_MSG + decoder.get_tlv_error()
352
+ end
353
+ end
354
+ end
355
+
356
+ # Interface to validate SMPP packet
357
+ def validate_packet(validator)
358
+ # Validate header and mandatory fields
359
+ validator.validate_header(@header)
360
+ validator.validate_service_type(@service_type)
361
+ validator.validate_source_addr_ton(@source_addr_ton)
362
+ validator.validate_source_addr_npi(@source_addr_npi)
363
+ validator.validate_source_addr65(@source_addr)
364
+ validator.validate_dest_addr_ton(@dest_addr_ton)
365
+ validator.validate_dest_addr_npi(@dest_addr_npi)
366
+ validator.validate_dest_addr65(@dest_addr)
367
+ validator.validate_esm_class(@esm_class)
368
+ validator.validate_registered_delivery(@registered_delivery)
369
+ validator.validate_data_coding(@data_coding)
370
+
371
+
372
+ # Validate optional fields
373
+ validator.validate_source_port(@source_port,
374
+ @source_port_len) if !@source_port.nil?
375
+ validator.validate_source_addr_subunit(@source_addr_subunit,
376
+ @source_addr_subunit_len) if !@source_addr_subunit.nil?
377
+ validator.validate_source_network_type(@source_network_type,
378
+ @source_network_type_len) if !@source_network_type.nil?
379
+ validator.validate_source_bearer_type(@source_bearer_type,
380
+ @source_bearer_type_len) if !@source_bearer_type.nil?
381
+ validator.validate_source_telematics_id(@source_telematics_id,
382
+ @source_telematics_id_len) if !@source_telematics_id.nil?
383
+ validator.validate_destination_port(@destination_port,
384
+ @destination_port_len) if !@destination_port.nil?
385
+ validator.validate_dest_addr_subunit(@dest_addr_subunit,
386
+ @dest_addr_subunit_len) if !@dest_addr_subunit.nil?
387
+ validator.validate_dest_network_type(@dest_network_type,
388
+ @dest_network_type_len) if !@dest_network_type.nil?
389
+ validator.validate_dest_bearer_type(@dest_bearer_type,
390
+ @dest_bearer_type_len) if !@dest_bearer_type.nil?
391
+ validator.validate_dest_telematics_id(@dest_telematics_id,
392
+ @dest_telematics_id_len) if !@dest_telematics_id.nil?
393
+ validator.validate_sar_msg_ref_num(@sar_msg_ref_num,
394
+ @sar_msg_ref_num_len) if !@sar_msg_ref_num.nil?
395
+ validator.validate_sar_total_segments(@sar_total_segments,
396
+ @sar_total_segments_len) if !@sar_total_segments.nil?
397
+ validator.validate_sar_segment_seqnum(@sar_segment_seqnum,
398
+ @sar_segment_seqnum_len) if !@sar_segment_seqnum.nil?
399
+ validator.validate_more_messages_to_send(@more_messages_to_send,
400
+ @more_messages_to_send_len) if !@more_messages_to_send.nil?
401
+ validator.validate_qos_time_to_live(@qos_time_to_live,
402
+ @qos_time_to_live_len) if !@qos_time_to_live.nil?
403
+ validator.validate_payload_type(@payload_type,
404
+ @payload_type_len) if !@payload_type.nil?
405
+ validator.validate_message_payload(@message_payload,
406
+ @message_payload_len) if !@message_payload.nil?
407
+ validator.validate_set_dpf(@set_dpf,
408
+ @set_dpf_len) if !@set_dpf.nil?
409
+ validator.validate_receipted_message_id(@receipted_message_id,
410
+ @receipted_message_id_len) if !@receipted_message_id.nil?
411
+ validator.validate_message_state_tlv(@message_state,
412
+ @message_state_len) if !@message_state.nil?
413
+ validator.validate_network_error_code(@network_error_code,
414
+ @network_error_code_len) if !@network_error_code.nil?
415
+ validator.validate_user_message_reference(@user_message_reference,
416
+ @user_message_reference_len) if !@user_message_reference.nil?
417
+ validator.validate_privacy_indicator(@privacy_indicator,
418
+ @privacy_indicator_len) if !@privacy_indicator.nil?
419
+ validator.validate_callback_num(@callback_num,
420
+ @callback_num_len) if !@callback_num.nil?
421
+ validator.validate_callback_num_pres_ind(@callback_num_pres_ind,
422
+ @callback_num_pres_ind_len) if !@callback_num_pres_ind.nil?
423
+ validator.validate_callback_num_atag(@callback_num_atag,
424
+ @callback_num_atag_len) if !@callback_num_atag.nil?
425
+ validator.validate_source_subaddress(@source_subaddress,
426
+ @source_subaddress_len) if !@source_subaddress.nil?
427
+ validator.validate_dest_subaddress(@dest_subaddress,
428
+ @dest_subaddress_len) if !@dest_subaddress.nil?
429
+ validator.validate_user_response_code(@user_response_code,
430
+ @user_response_code_len) if !@user_response_code.nil?
431
+ validator.validate_display_time(@display_time,
432
+ @display_time_len) if !@display_time.nil?
433
+ validator.validate_sms_signal(@sms_signal,
434
+ @sms_signal_len) if !@sms_signal.nil?
435
+ validator.validate_ms_validity(@ms_validity,
436
+ @ms_validity_len) if !@ms_validity.nil?
437
+ validator.validate_ms_msg_wait_facilities(@ms_msg_wait_facilities,
438
+ @ms_msg_wait_facilities_len) if !@ms_msg_wait_facilities.nil?
439
+ validator.validate_number_of_messages(@number_of_messages,
440
+ @number_of_messages_len) if !@number_of_messages.nil?
441
+ validator.validate_number_of_messages(@number_of_messages,
442
+ @number_of_messages_len) if !@number_of_messages.nil?
443
+ validator.validate_alert_on_msg_delivery(@alert_on_msg_delivery,
444
+ @alert_on_msg_delivery_len) if !@alert_on_msg_delivery.nil?
445
+ validator.validate_language_indicator(@language_indicator,
446
+ @language_indicator_len) if !@language_indicator.nil?
447
+ validator.validate_its_reply_type(@its_reply_type,
448
+ @its_reply_type_len) if !@its_reply_type.nil?
449
+ validator.validate_its_session_info(@its_session_info,
450
+ @its_session_info_len) if !@its_session_info.nil?
451
+ end
452
+
453
+ # Interface to output SMPP packet
454
+ def output_packet(outputter)
455
+ # Output header and mandatory fields
456
+ outputter.output_header(@header)
457
+ outputter.output_service_type(@service_type)
458
+ outputter.output_source_addr_ton(@source_addr_ton)
459
+ outputter.output_source_addr_npi(@source_addr_npi)
460
+ outputter.output_source_addr65(@source_addr)
461
+ outputter.output_dest_addr_ton(@dest_addr_ton)
462
+ outputter.output_dest_addr_npi(@dest_addr_npi)
463
+ outputter.output_dest_addr65(@dest_addr)
464
+ outputter.output_esm_class(@esm_class)
465
+ outputter.output_registered_delivery(@registered_delivery)
466
+ outputter.output_data_coding(@data_coding)
467
+
468
+
469
+ # Output optional fields
470
+ outputter.output_source_port(@source_port,
471
+ @source_port_len) if !@source_port.nil?
472
+ outputter.output_source_addr_subunit(@source_addr_subunit,
473
+ @source_addr_subunit_len) if !@source_addr_subunit.nil?
474
+ outputter.output_source_network_type(@source_network_type,
475
+ @source_network_type_len) if !@source_network_type.nil?
476
+ outputter.output_source_bearer_type(@source_bearer_type,
477
+ @source_bearer_type_len) if !@source_bearer_type.nil?
478
+ outputter.output_source_telematics_id(@source_telematics_id,
479
+ @source_telematics_id_len) if !@source_telematics_id.nil?
480
+ outputter.output_destination_port(@destination_port,
481
+ @destination_port_len) if !@destination_port.nil?
482
+ outputter.output_dest_addr_subunit(@dest_addr_subunit,
483
+ @dest_addr_subunit_len) if !@dest_addr_subunit.nil?
484
+ outputter.output_dest_network_type(@dest_network_type,
485
+ @dest_network_type_len) if !@dest_network_type.nil?
486
+ outputter.output_dest_bearer_type(@dest_bearer_type,
487
+ @dest_bearer_type_len) if !@dest_bearer_type.nil?
488
+ outputter.output_dest_telematics_id(@dest_telematics_id,
489
+ @dest_telematics_id_len) if !@dest_telematics_id.nil?
490
+ outputter.output_sar_msg_ref_num(@sar_msg_ref_num,
491
+ @sar_msg_ref_num_len) if !@sar_msg_ref_num.nil?
492
+ outputter.output_sar_total_segments(@sar_total_segments,
493
+ @sar_total_segments_len) if !@sar_total_segments.nil?
494
+ outputter.output_sar_segment_seqnum(@sar_segment_seqnum,
495
+ @sar_segment_seqnum_len) if !@sar_segment_seqnum.nil?
496
+ outputter.output_more_messages_to_send(@more_messages_to_send,
497
+ @more_messages_to_send_len) if !@more_messages_to_send.nil?
498
+ outputter.output_qos_time_to_live(@qos_time_to_live,
499
+ @qos_time_to_live_len) if !@qos_time_to_live.nil?
500
+ outputter.output_payload_type(@payload_type,
501
+ @payload_type_len) if !@payload_type.nil?
502
+ outputter.output_message_payload(@message_payload,
503
+ @message_payload_len) if !@message_payload.nil?
504
+ outputter.output_set_dpf(@set_dpf,
505
+ @set_dpf_len) if !@set_dpf.nil?
506
+ outputter.output_receipted_message_id(@receipted_message_id,
507
+ @receipted_message_id_len) if !@receipted_message_id.nil?
508
+ outputter.output_message_state_tlv(@message_state,
509
+ @message_state_len) if !@message_state.nil?
510
+ outputter.output_network_error_code(@network_error_code,
511
+ @network_error_code_len) if !@network_error_code.nil?
512
+ outputter.output_user_message_reference(@user_message_reference,
513
+ @user_message_reference_len) if !@user_message_reference.nil?
514
+ outputter.output_privacy_indicator(@privacy_indicator,
515
+ @privacy_indicator_len) if !@privacy_indicator.nil?
516
+ outputter.output_callback_num(@callback_num,
517
+ @callback_num_len) if !@callback_num.nil?
518
+ outputter.output_callback_num_pres_ind(@callback_num_pres_ind,
519
+ @callback_num_pres_ind_len) if !@callback_num_pres_ind.nil?
520
+ outputter.output_callback_num_atag(@callback_num_atag,
521
+ @callback_num_atag_len) if !@callback_num_atag.nil?
522
+ outputter.output_source_subaddress(@source_subaddress,
523
+ @source_subaddress_len) if !@source_subaddress.nil?
524
+ outputter.output_dest_subaddress(@dest_subaddress,
525
+ @dest_subaddress_len) if !@dest_subaddress.nil?
526
+ outputter.output_user_response_code(@user_response_code,
527
+ @user_response_code_len) if !@user_response_code.nil?
528
+ outputter.output_display_time(@display_time,
529
+ @display_time_len) if !@display_time.nil?
530
+ outputter.output_sms_signal(@sms_signal,
531
+ @sms_signal_len) if !@sms_signal.nil?
532
+ outputter.output_ms_validity(@ms_validity,
533
+ @ms_validity_len) if !@ms_validity.nil?
534
+ outputter.output_ms_msg_wait_facilities(@ms_msg_wait_facilities,
535
+ @ms_msg_wait_facilities_len) if !@ms_msg_wait_facilities.nil?
536
+ outputter.output_number_of_messages(@number_of_messages,
537
+ @number_of_messages_len) if !@number_of_messages.nil?
538
+ outputter.output_number_of_messages(@number_of_messages,
539
+ @number_of_messages_len) if !@number_of_messages.nil?
540
+ outputter.output_alert_on_msg_delivery(@alert_on_msg_delivery,
541
+ @alert_on_msg_delivery_len) if !@alert_on_msg_delivery.nil?
542
+ outputter.output_language_indicator(@language_indicator,
543
+ @language_indicator_len) if !@language_indicator.nil?
544
+ outputter.output_its_reply_type(@its_reply_type,
545
+ @its_reply_type_len) if !@its_reply_type.nil?
546
+ outputter.output_its_session_info(@its_session_info,
547
+ @its_session_info_len) if !@its_session_info.nil?
548
+ end
549
+
550
+ public
551
+ def message_payload=(message_payload)
552
+ @message_payload = message_payload
553
+ @message_payload_len = message_payload.size()
554
+ end
555
+
556
+ def receipted_message_id=(receipted_message_id)
557
+ @receipted_message_id = receipted_message_id
558
+ @receipted_message_id_len = receipted_message_id.size() + 1 # 1 = NULL terminator
559
+ end
560
+
561
+ def callback_num=(callback_num)
562
+ @callback_num = callback_num
563
+ @callback_num_len = callback_num.size()
564
+ end
565
+
566
+ def callback_num_atag=(callback_num_atag)
567
+ @callback_num_atag = callback_num_atag
568
+ @callback_num_atag_len = callback_num_atag.size()
569
+ end
570
+
571
+ def source_subaddress=(source_subaddress)
572
+ @source_subaddress = source_subaddress
573
+ @source_subaddress_len = source_subaddress.size()
574
+ end
575
+
576
+ def dest_subaddress=(dest_subaddress)
577
+ @dest_subaddress = dest_subaddress
578
+ @dest_subaddress_len = dest_subaddress.size()
579
+ end
580
+
581
+
582
+ public
583
+ # Mandatory fields
584
+ attr_accessor :service_type
585
+ attr_accessor :source_addr_ton
586
+ attr_accessor :source_addr_npi
587
+ attr_accessor :source_addr
588
+ attr_accessor :dest_addr_ton
589
+ attr_accessor :dest_addr_npi
590
+ attr_accessor :dest_addr
591
+ attr_accessor :esm_class
592
+ attr_accessor :registered_delivery
593
+ attr_accessor :data_coding
594
+
595
+
596
+ # Optional fields
597
+ attr_accessor :source_port
598
+ attr_accessor :source_addr_subunit
599
+ attr_accessor :source_network_type
600
+ attr_accessor :source_bearer_type
601
+ attr_accessor :source_telematics_id
602
+ attr_accessor :destination_port
603
+ attr_accessor :dest_addr_subunit
604
+ attr_accessor :dest_network_type
605
+ attr_accessor :dest_bearer_type
606
+ attr_accessor :dest_telematics_id
607
+ attr_accessor :sar_msg_ref_num
608
+ attr_accessor :sar_total_segments
609
+ attr_accessor :sar_segment_seqnum
610
+ attr_accessor :more_messages_to_send
611
+ attr_accessor :qos_time_to_live
612
+ attr_accessor :payload_type
613
+ attr_reader :message_payload
614
+ attr_accessor :set_dpf
615
+ attr_reader :receipted_message_id
616
+ attr_accessor :message_state
617
+ attr_accessor :network_error_code
618
+ attr_accessor :user_message_reference
619
+ attr_accessor :privacy_indicator
620
+ attr_reader :callback_num
621
+ attr_accessor :callback_num_pres_ind
622
+ attr_reader :callback_num_atag
623
+ attr_reader :source_subaddress
624
+ attr_reader :dest_subaddress
625
+ attr_accessor :user_response_code
626
+ attr_accessor :display_time
627
+ attr_accessor :sms_signal
628
+ attr_accessor :ms_validity
629
+ attr_accessor :ms_msg_wait_facilities
630
+ attr_accessor :number_of_messages
631
+ attr_accessor :alert_on_msg_delivery
632
+ attr_accessor :language_indicator
633
+ attr_accessor :its_reply_type
634
+ attr_accessor :its_session_info
635
+
636
+ # Optional fields length
637
+ attr_accessor :source_port_len
638
+ attr_accessor :source_addr_subunit_len
639
+ attr_accessor :source_network_type_len
640
+ attr_accessor :source_bearer_type_len
641
+ attr_accessor :source_telematics_id_len
642
+ attr_accessor :destination_port_len
643
+ attr_accessor :dest_addr_subunit_len
644
+ attr_accessor :dest_network_type_len
645
+ attr_accessor :dest_bearer_type_len
646
+ attr_accessor :dest_telematics_id_len
647
+ attr_accessor :sar_msg_ref_num_len
648
+ attr_accessor :sar_total_segments_len
649
+ attr_accessor :sar_segment_seqnum_len
650
+ attr_accessor :more_messages_to_send_len
651
+ attr_accessor :qos_time_to_live_len
652
+ attr_accessor :payload_type_len
653
+ attr_accessor :message_payload_len
654
+ attr_accessor :set_dpf_len
655
+ attr_accessor :receipted_message_id_len
656
+ attr_accessor :message_state_len
657
+ attr_accessor :network_error_code_len
658
+ attr_accessor :user_message_reference_len
659
+ attr_accessor :privacy_indicator_len
660
+ attr_accessor :callback_num_len
661
+ attr_accessor :callback_num_pres_ind_len
662
+ attr_accessor :callback_num_atag_len
663
+ attr_accessor :source_subaddress_len
664
+ attr_accessor :dest_subaddress_len
665
+ attr_accessor :user_response_code_len
666
+ attr_accessor :display_time_len
667
+ attr_accessor :sms_signal_len
668
+ attr_accessor :ms_validity_len
669
+ attr_accessor :ms_msg_wait_facilities_len
670
+ attr_accessor :number_of_messages_len
671
+ attr_accessor :alert_on_msg_delivery_len
672
+ attr_accessor :language_indicator_len
673
+ attr_accessor :its_reply_type_len
674
+ attr_accessor :its_session_info_len
675
+
676
+ end
677
+ end
678
+ end
679
+ end