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,495 @@
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
+ module Majoron
19
+
20
+ module AntHill
21
+ module SMPP
22
+ class SMPPEncoder < AntHill::BinaryEncoder
23
+
24
+ # Constructor
25
+ def initialize()
26
+ super()
27
+ end
28
+
29
+ #std::vector<unsigned char>& encodePacket(SMPPPDU* poPDU)
30
+
31
+ # A methods to encode header
32
+ def encode_header(header)
33
+ encode_unsigned32(header.command_length)
34
+ encode_unsigned32(header.command_id)
35
+ encode_unsigned32(header.command_status)
36
+ encode_unsigned32(header.sequence_number)
37
+ end
38
+
39
+ # A methods to encode mandatory fields
40
+ def encode_system_id(system_id)
41
+ encode_cstring(system_id)
42
+ end
43
+
44
+ def encode_password(password)
45
+ encode_cstring(password)
46
+ end
47
+
48
+ def encode_system_type(system_type)
49
+ encode_cstring(system_type)
50
+ end
51
+
52
+ def encode_interface_version(interface_version)
53
+ encode_uchar(interface_version)
54
+ end
55
+
56
+ def encode_addr_ton(addr_ton)
57
+ encode_uchar(addr_ton)
58
+ end
59
+
60
+ def encode_addr_npi(addr_npi)
61
+ encode_uchar(addr_npi)
62
+ end
63
+
64
+ def encode_address_range(address_range)
65
+ encode_cstring(address_range)
66
+ end
67
+
68
+ def encode_service_type(service_type)
69
+ encode_cstring(service_type)
70
+ end
71
+
72
+ def encode_source_addr_ton(source_addr_ton)
73
+ encode_uchar(source_addr_ton)
74
+ end
75
+
76
+ def encode_source_addr_npi(source_addr_npi)
77
+ encode_uchar(source_addr_npi)
78
+ end
79
+
80
+ def encode_source_addr21(source_addr)
81
+ encode_cstring(source_addr)
82
+ end
83
+
84
+ def encode_source_addr65(source_addr)
85
+ encode_cstring(source_addr)
86
+ end
87
+
88
+ def encode_dest_addr_ton(dest_addr_ton)
89
+ encode_uchar(dest_addr_ton)
90
+ end
91
+
92
+ def encode_dest_addr_npi(dest_addr_npi)
93
+ encode_uchar(dest_addr_npi)
94
+ end
95
+
96
+ def encode_dest_addr21(dest_addr)
97
+ encode_cstring(dest_addr)
98
+ end
99
+
100
+ def encode_dest_addr65(dest_addr)
101
+ encode_cstring(dest_addr)
102
+ end
103
+
104
+ def encode_esm_class(esm_class)
105
+ encode_uchar(esm_class)
106
+ end
107
+
108
+ def encode_protocol_id(protocol_id)
109
+ encode_uchar(protocol_id)
110
+ end
111
+
112
+ def encode_priority_flag(priority_flag)
113
+ encode_uchar(priority_flag)
114
+ end
115
+
116
+ def encode_schedule_delivery_time(schedule_delivery_time)
117
+ encode_cstring(schedule_delivery_time)
118
+ end
119
+
120
+ def encode_validity_period(validity_period)
121
+ encode_cstring(validity_period)
122
+ end
123
+
124
+ def encode_registered_delivery(registered_delivery)
125
+ encode_uchar(registered_delivery)
126
+ end
127
+
128
+ def encode_replace_if_present_flag(replace_if_present_flag)
129
+ encode_uchar(replace_if_present_flag)
130
+ end
131
+
132
+ def encode_data_coding(data_coding)
133
+ encode_uchar(data_coding)
134
+ end
135
+
136
+ def encode_sm_default_msg_id(sm_default_msg_id)
137
+ encode_uchar(sm_default_msg_id)
138
+ end
139
+
140
+ def encode_sm_length(sm_length)
141
+ encode_uchar(sm_length)
142
+ end
143
+
144
+ def encode_short_message(short_message)
145
+ encode_binary(short_message)
146
+ end
147
+
148
+ def encode_message_id(message_id)
149
+ encode_cstring(message_id)
150
+ end
151
+
152
+ def encode_esme_addr_ton(esme_addr_ton)
153
+ encode_uchar(esme_addr_ton)
154
+ end
155
+
156
+ def encode_esme_addr_npi(esme_addr_npi)
157
+ encode_uchar(esme_addr_npi)
158
+ end
159
+
160
+ def encode_esme_addr(esme_addr)
161
+ encode_cstring(esme_addr)
162
+ end
163
+
164
+ def encode_number_of_dest(number_of_dest)
165
+ encode_uchar(number_of_dest)
166
+ end
167
+
168
+ def encode_dest_addresses(dest_addresses)
169
+ 0.upto(dest_addresses.size() - 1) do |i|
170
+ encode_uchar(dest_addresses[i].dest_flag)
171
+ if dest_addresses[i].dest_flag == DestFlag::SME_ADDRESS
172
+ encode_uchar(dest_addresses[i].address().ton())
173
+ encode_uchar(dest_addresses[i].address().npi())
174
+ encode_cstring(dest_addresses[i].address().address())
175
+ elsif dest_addresses[i].dest_flag == DestFlag::DISTR_LIST_NAME
176
+ encode_cstring(dest_addresses[i].distr_list_name())
177
+ else
178
+ raise sprintf(CodecErrors::ENCODER_INV_DSTFLAG, @offset, dest_addresses[i].dest_flag())
179
+ end
180
+ end
181
+ end
182
+
183
+ def encode_no_unsuccess(no_unsuccess)
184
+ encode_uchar(no_unsuccess)
185
+ end
186
+
187
+ def encode_unsuccess_smes(unsuccess_smes)
188
+ 0.upto(unsuccess_smes.size() - 1) do |i|
189
+ encode_uchar(unsuccess_smes[i].sme_address().ton())
190
+ encode_uchar(unsuccess_smes[i].sme_address().npi())
191
+ encode_cstring(unsuccess_smes[i].sme_address().address())
192
+ encode_unsigned32(unsuccess_smes[i].error_status_code())
193
+ end
194
+ end
195
+
196
+ def encode_final_date(final_date)
197
+ encode_cstring(final_date)
198
+ end
199
+
200
+ def encode_error_code(error_code)
201
+ encode_uchar(error_code)
202
+ end
203
+
204
+ def encode_message_state(message_state)
205
+ encode_uchar(message_state)
206
+ end
207
+
208
+ def encode_broadcast_area_identifier(broadcast_area_identifier, len)
209
+ 0.upto(broadcast_area_identifier.size() - 1) do |i|
210
+ encode_binary_tlv(OptTags::TAG_BROADCAST_AREA_IDENTIFIER, broadcast_area_identifier[i].value(), len[i])
211
+ end
212
+ end
213
+
214
+ def encode_broadcast_area_identifier_single(broadcast_area_identifier, len)
215
+ encode_binary_tlv(OptTags::TAG_BROADCAST_AREA_IDENTIFIER, broadcast_area_identifier.value(), len)
216
+ end
217
+
218
+ def encode_broadcast_rep_num(broadcast_rep_num, len)
219
+ encode_uint16_tlv(OptTags::TAG_BROADCAST_REP_NUM, broadcast_rep_num, len)
220
+ end
221
+
222
+ def encode_broadcast_frequency_interval(broadcast_frequency_interval, len)
223
+ encode_binary_tlv(OptTags::TAG_BROADCAST_FREQUENCY_INTERVAL, broadcast_frequency_interval, len)
224
+ end
225
+
226
+ def encode_broadcast_area_success(broadcast_area_success, len)
227
+ encode_uchar_tlv(OptTags::TAG_BROADCAST_AREA_SUCCESS, broadcast_area_success, len)
228
+ end
229
+
230
+ # A methods to encode optional fields
231
+ def encode_sc_interface_version(sc_interface_version, len)
232
+ encode_uchar_tlv(OptTags::TAG_SC_INTERFACE_VERSION, sc_interface_version, len)
233
+ end
234
+
235
+ def encode_ms_availability_status(ms_availability_status, len)
236
+ encode_uchar_tlv(OptTags::TAG_MS_AVAILABILITY_STATUS, ms_availability_status, len)
237
+ end
238
+
239
+ def encode_alert_on_msg_delivery(alert_on_msg_delivery, len)
240
+ encode_uchar_tlv(OptTags::TAG_ALERT_ON_MESSAGE_DELIVERY, alert_on_msg_delivery, len)
241
+ end
242
+
243
+ def encode_broadcast_channel_indicator(broadcast_channel_indicator, len)
244
+ encode_uchar_tlv(OptTags::TAG_BROADCAST_CHANNEL_INDICATOR, broadcast_channel_indicator, len)
245
+ end
246
+
247
+ def encode_broadcast_content_type_info(broadcast_content_type_info, len)
248
+ encode_binary_tlv(OptTags::TAG_BROADCAST_CONTENT_TYPE_INFO, broadcast_content_type_info, len)
249
+ end
250
+
251
+ def encode_broadcast_message_class(broadcast_message_class, len)
252
+ encode_uchar_tlv(OptTags::TAG_BROADCAST_MESSAGE_CLASS, broadcast_message_class, len)
253
+ end
254
+
255
+ def encode_broadcast_service_group(broadcast_service_group, len)
256
+ encode_binary_tlv(OptTags::TAG_BROADCAST_SERVICE_GROUP, broadcast_service_group, len)
257
+ end
258
+
259
+ def encode_callback_num(callback_num, len)
260
+ encode_binary_tlv(OptTags::TAG_CALLBACK_NUM, callback_num, len)
261
+ end
262
+
263
+ def encode_callback_num_atag(callback_num_atag, len)
264
+ encode_binary_tlv(OptTags::TAG_CALLBACK_NUM_ATAG, callback_num_atag, len)
265
+ end
266
+
267
+ def encode_callback_num_pres_ind(callback_num_pres_ind, len)
268
+ encode_uchar_tlv(OptTags::TAG_CALLBACK_NUM_PRES_IND, callback_num_pres_ind, len)
269
+ end
270
+
271
+ def encode_dest_addr_subunit(dest_addr_subunit, len)
272
+ encode_uchar_tlv(OptTags::TAG_DEST_ADDR_SUBUNIT, dest_addr_subunit, len)
273
+ end
274
+
275
+ def encode_dest_subaddress(dest_subaddress, len)
276
+ encode_binary_tlv(OptTags::TAG_DEST_SUBADDRESS, dest_subaddress, len)
277
+ end
278
+
279
+ def encode_display_time(display_time, len)
280
+ encode_uchar_tlv(OptTags::TAG_DISPLAY_TIME, display_time, len)
281
+ end
282
+
283
+ def encode_language_indicator(language_indicator, len)
284
+ encode_uchar_tlv(OptTags::TAG_LANGUAGE_INDICATOR, language_indicator, len)
285
+ end
286
+
287
+ def encode_message_payload(message_payload, len)
288
+ encode_binary_tlv(OptTags::TAG_MESSAGE_PAYLOAD, message_payload, len)
289
+ end
290
+
291
+ def encode_ms_validity(ms_validity, len)
292
+ encode_uchar_tlv(OptTags::TAG_MS_VALIDITY, ms_validity, len)
293
+ end
294
+
295
+ def encode_payload_type(payload_type, len)
296
+ encode_uchar_tlv(OptTags::TAG_PAYLOAD_TYPE, payload_type, len)
297
+ end
298
+
299
+ def encode_privacy_indicator(privacy_indicator, len)
300
+ encode_uchar_tlv(OptTags::TAG_PRIVACY_INDICATOR, privacy_indicator, len)
301
+ end
302
+
303
+ def encode_sms_signal(sms_signal, len)
304
+ encode_uint16_tlv(OptTags::TAG_SMS_SIGNAL, sms_signal, len)
305
+ end
306
+
307
+ def encode_source_addr_subunit(source_addr_subunit, len)
308
+ encode_uchar_tlv(OptTags::TAG_SOURCE_ADDR_SUBUNIT, source_addr_subunit, len)
309
+ end
310
+
311
+ def encode_source_port(source_port, len)
312
+ encode_uint16_tlv(OptTags::TAG_SOURCE_PORT, source_port, len)
313
+ end
314
+
315
+ def encode_source_subaddress(source_subaddress, len)
316
+ encode_binary_tlv(OptTags::TAG_SOURCE_SUBADDRESS, source_subaddress, len)
317
+ end
318
+
319
+ def encode_user_message_reference(user_message_reference, len)
320
+ encode_uint16_tlv(OptTags::TAG_USER_MESSAGE_REFERENCE, user_message_reference, len)
321
+ end
322
+
323
+ def encode_broadcast_error_status(broadcast_error_status, len)
324
+ encode_uint32_tlv(OptTags::TAG_BROADCAST_ERROR_STATUS, broadcast_error_status, len)
325
+ end
326
+
327
+ def encode_failed_broadcast_area_identifier(failed_broadcast_area_identifier, len)
328
+ 0.upto(failed_broadcast_area_identifier.size() - 1) do |i|
329
+ encode_binary_tlv(OptTags::TAG_BROADCAST_AREA_IDENTIFIER, failed_broadcast_area_identifier[i].value(), len[i])
330
+ end
331
+ end
332
+
333
+ def encode_failed_broadcast_area_identifier_single(failed_broadcast_area_identifier, len)
334
+ encode_binary_tlv(OptTags::TAG_BROADCAST_AREA_IDENTIFIER, failed_broadcast_area_identifier.value(), len)
335
+ end
336
+
337
+ def encode_broadcast_content_type(broadcast_content_type, len)
338
+ encode_binary_tlv(OptTags::TAG_BROADCAST_CONTENT_TYPE, broadcast_content_type, len)
339
+ end
340
+
341
+ def encode_source_network_type(source_network_type, len)
342
+ encode_uchar_tlv(OptTags::TAG_SOURCE_NETWORK_TYPE, source_network_type, len)
343
+ end
344
+
345
+ def encode_source_bearer_type(source_bearer_type, len)
346
+ encode_uchar_tlv(OptTags::TAG_SOURCE_BEARER_TYPE, source_bearer_type, len)
347
+ end
348
+
349
+ def encode_source_telematics_id(source_telematics_id, len)
350
+ encode_uchar_tlv(OptTags::TAG_SOURCE_TELEMATICS_ID, source_telematics_id, len)
351
+ end
352
+
353
+ def encode_destination_port(destination_port, len)
354
+ encode_uint16_tlv(OptTags::TAG_DESTINATION_PORT, destination_port, len)
355
+ end
356
+
357
+ def encode_dest_network_type(dest_network_type, len)
358
+ encode_uchar_tlv(OptTags::TAG_DEST_NETWORK_TYPE, dest_network_type, len)
359
+ end
360
+
361
+ def encode_dest_bearer_type(dest_bearer_type, len)
362
+ encode_uchar_tlv(OptTags::TAG_DEST_BEARER_TYPE, dest_bearer_type, len)
363
+ end
364
+
365
+ def encode_dest_telematics_id(dest_telematics_id, len)
366
+ encode_uchar_tlv(OptTags::TAG_DEST_TELEMATICS_ID, dest_telematics_id, len)
367
+ end
368
+
369
+ def encode_sar_msg_ref_num(sar_msg_ref_num, len)
370
+ encode_uint16_tlv(OptTags::TAG_SAR_MSG_REF_NUM, sar_msg_ref_num, len)
371
+ end
372
+
373
+ def encode_sar_total_segments(sar_total_segments, len)
374
+ encode_uchar_tlv(OptTags::TAG_SAR_TOTAL_SEGMENTS, sar_total_segments, len)
375
+ end
376
+
377
+ def encode_sar_segment_seqnum(sar_segment_seqnum, len)
378
+ encode_uchar_tlv(OptTags::TAG_SAR_SEGMENT_SEQNUM, sar_segment_seqnum, len)
379
+ end
380
+
381
+ def encode_more_messages_to_send(more_messages_to_send, len)
382
+ encode_uchar_tlv(OptTags::TAG_MORE_MESSAGES_TO_SEND, more_messages_to_send, len)
383
+ end
384
+
385
+ def encode_qos_time_to_live(qos_time_to_live, len)
386
+ encode_uint32_tlv(OptTags::TAG_QOS_TIME_TO_LIVE, qos_time_to_live, len)
387
+ end
388
+
389
+ def encode_set_dpf(set_dpf, len)
390
+ encode_uchar_tlv(OptTags::TAG_SET_DPF, set_dpf, len)
391
+ end
392
+
393
+ def encode_receipted_message_id(receipted_message_id, len)
394
+ encode_cstring_tlv(OptTags::TAG_RECEIPTED_MESSAGE_ID, receipted_message_id, len)
395
+ end
396
+
397
+ def encode_message_state_tlv(message_state_tlv, len)
398
+ encode_uchar_tlv(OptTags::TAG_MESSAGE_STATE, message_state_tlv, len)
399
+ end
400
+
401
+ def encode_network_error_code(network_error_code, len)
402
+ encode_unsigned16(OptTags::TAG_NETWORK_ERROR_CODE)
403
+ encode_unsigned16(len)
404
+ encode_uchar(network_error_code.network_code())
405
+ encode_unsigned16(network_error_code.error_code())
406
+ end
407
+
408
+ def encode_ms_msg_wait_facilities(ms_msg_wait_facilities, len)
409
+ encode_uchar_tlv(OptTags::TAG_MS_MSG_WAIT_FACILITIES, ms_msg_wait_facilities, len)
410
+ end
411
+
412
+ def encode_number_of_messages(number_of_messages, len)
413
+ encode_uchar_tlv(OptTags::TAG_NUMBER_OF_MESSAGES, number_of_messages, len)
414
+ end
415
+
416
+ def encode_its_reply_type(its_reply_type, len)
417
+ encode_uchar_tlv(OptTags::TAG_ITS_REPLY_TYPE, its_reply_type, len)
418
+ end
419
+
420
+ def encode_its_session_info(its_session_info, len)
421
+ encode_uint16_tlv(OptTags::TAG_ITS_SESSION_INFO, its_session_info, len)
422
+ end
423
+
424
+ def encode_user_response_code(user_response_code, len)
425
+ encode_uchar_tlv(OptTags::TAG_USER_RESPONSE_CODE, user_response_code, len)
426
+ end
427
+
428
+ def encode_delivery_failure_reason(delivery_failure_reason, len)
429
+ encode_uchar_tlv(OptTags::TAG_DELIVERY_FAILURE_REASON, delivery_failure_reason, len)
430
+ end
431
+
432
+ def encode_additional_status_info_text(additional_status_info_text, len)
433
+ encode_binary_tlv(OptTags::TAG_ADDITIONAL_STATUS_INFO_TEXT, additional_status_info_text, len)
434
+ end
435
+
436
+ def encode_dpf_result(dpf_result, len)
437
+ encode_uchar_tlv(OptTags::TAG_DPF_RESULT, dpf_result, len)
438
+ end
439
+
440
+ def encode_broadcast_end_time(broadcast_end_time, len)
441
+ encode_cstring_tlv(OptTags::TAG_BROADCAST_END_TIME, broadcast_end_time, len)
442
+ end
443
+
444
+ def encode_ussd_service_op(ussd_service_op, len)
445
+ encode_uchar_tlv(OptTags::TAG_USSD_SERVICE_OP, ussd_service_op, len)
446
+ end
447
+
448
+ # Method to encode command length for pdu
449
+ def encode_command_length()
450
+ sizeof = 4
451
+ shift = SMPPOffset::COMMAND_LENGTH_POS
452
+ len = sprintf("%c%c%c%c", @offset >> 24, @offset >> 16, @offset >> 8, @offset & 0xff)
453
+
454
+ 0.upto(sizeof - 1) do |i|
455
+ @buffer[shift + i] = len[i]
456
+ end
457
+ end
458
+
459
+
460
+ private
461
+ # Auxiliary methods to encode
462
+ def encode_uchar_tlv(tag, value, len)
463
+ encode_unsigned16(tag)
464
+ encode_unsigned16(len)
465
+ encode_uchar(value)
466
+ end
467
+
468
+ def encode_uint16_tlv(tag, value, len)
469
+ encode_unsigned16(tag)
470
+ encode_unsigned16(len)
471
+ encode_unsigned16(value)
472
+ end
473
+
474
+ def encode_uint32_tlv(tag, value, len)
475
+ encode_unsigned16(tag)
476
+ encode_unsigned16(len)
477
+ encode_unsigned32(value)
478
+ end
479
+
480
+ def encode_cstring_tlv(tag, value, len)
481
+ encode_unsigned16(tag)
482
+ encode_unsigned16(len)
483
+ encode_cstring(value)
484
+ end
485
+
486
+ def encode_binary_tlv(tag, value, len)
487
+ encode_unsigned16(tag)
488
+ encode_unsigned16(len)
489
+ encode_binary(value)
490
+ end
491
+ end
492
+
493
+ end
494
+ end
495
+ end