anthill_smpp_ruby 0.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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,29 @@
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 SMPPBindTransmitter < SMPPBind
23
+ def initialize(command_status = ErrorCode::ESME_ROK, sequence_number = nil)
24
+ super(CommandId::CM_BIND_TRANSMITTER, command_status, sequence_number)
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,30 @@
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 SMPPBindTransmitterResp < SMPPBindResp
23
+ # Constructor.
24
+ def initialize(command_status = ErrorCode::ESME_ROK, sequence_number = nil)
25
+ super(CommandId::CM_BIND_TRANSMITTER_RESP, command_status, sequence_number)
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,566 @@
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 SMPPBroadcastSM < SMPPPDU
23
+ def initialize(command_status = ErrorCode::ESME_ROK, sequence_number = nil)
24
+ super(CommandId::CM_BROADCAST_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
+ @message_id = ""
32
+ @priority_flag = 0
33
+ @schedule_delivery_time = ""
34
+ @validity_period = ""
35
+ @replace_if_present_flag = 0
36
+ @data_coding = 0
37
+ @sm_default_msg_id = 0
38
+ @broadcast_area_identifier = nil
39
+ @broadcast_content_type = nil
40
+ @broadcast_rep_num = nil
41
+ @broadcast_frequency_interval = nil
42
+
43
+ # Mandatory fields len
44
+ @broadcast_area_identifier_len = SMPPTLVLen::ZERO_LEN
45
+ @broadcast_content_type_len = SMPPTLVLen::ZERO_LEN
46
+ @broadcast_rep_num_len = SMPPTLVLen::WORD_LEN
47
+ @broadcast_frequency_interval_len = SMPPTLVLen::ZERO_LEN
48
+
49
+ # Optional fields
50
+ @alert_on_msg_delivery = nil
51
+ @broadcast_channel_indicator = nil
52
+ @broadcast_content_type_info = nil
53
+ @broadcast_message_class = nil
54
+ @broadcast_service_group = nil
55
+ @callback_num = nil
56
+ @callback_num_atag = nil
57
+ @callback_num_pres_ind = nil
58
+ @dest_addr_subunit = nil
59
+ @dest_subaddress = nil
60
+ @dest_port = nil
61
+ @display_time = nil
62
+ @language_indicator = nil
63
+ @message_payload = nil
64
+ @ms_validity = nil
65
+ @payload_type = nil
66
+ @privacy_indicator = nil
67
+ @sms_signal = nil
68
+ @source_addr_subunit = nil
69
+ @source_port = nil
70
+ @source_subaddress = nil
71
+ @user_message_reference = nil
72
+
73
+
74
+ # Optional fields len
75
+ @alert_on_msg_delivery_len = SMPPTLVLen::BYTE_LEN
76
+ @broadcast_channel_indicator_len = SMPPTLVLen::BYTE_LEN
77
+ @broadcast_content_type_info_len = SMPPTLVLen::ZERO_LEN
78
+ @broadcast_message_class_len = SMPPTLVLen::BYTE_LEN
79
+ @broadcast_service_group_len = SMPPTLVLen::ZERO_LEN
80
+ @callback_num_len = SMPPTLVLen::ZERO_LEN
81
+ @callback_num_atag_len = SMPPTLVLen::ZERO_LEN
82
+ @callback_num_pres_ind_len = SMPPTLVLen::BYTE_LEN
83
+ @dest_addr_subunit_len = SMPPTLVLen::BYTE_LEN
84
+ @dest_subaddress_len = SMPPTLVLen::ZERO_LEN
85
+ @dest_port_len = SMPPTLVLen::WORD_LEN
86
+ @display_time_len = SMPPTLVLen::BYTE_LEN
87
+ @language_indicator_len = SMPPTLVLen::BYTE_LEN
88
+ @message_payload_len = SMPPTLVLen::ZERO_LEN
89
+ @ms_validity_len = SMPPTLVLen::BYTE_LEN
90
+ @payload_type_len = SMPPTLVLen::BYTE_LEN
91
+ @privacy_indicator_len = SMPPTLVLen::BYTE_LEN
92
+ @sms_signal_len = SMPPTLVLen::WORD_LEN
93
+ @source_addr_subunit_len = SMPPTLVLen::BYTE_LEN
94
+ @source_port_len = SMPPTLVLen::WORD_LEN
95
+ @source_subaddress_len = SMPPTLVLen::ZERO_LEN
96
+ @user_message_reference_len = SMPPTLVLen::WORD_LEN
97
+ end
98
+
99
+ # Interface to encode SMPP packet
100
+ def encode_packet(encoder)
101
+ # Encode header and mandatory fields
102
+ encoder.encode_header(@header)
103
+ encoder.encode_service_type(@service_type)
104
+ encoder.encode_source_addr_ton(@source_addr_ton)
105
+ encoder.encode_source_addr_npi(@source_addr_npi)
106
+ encoder.encode_source_addr21(@source_addr)
107
+ encoder.encode_message_id(@message_id)
108
+ encoder.encode_priority_flag(@priority_flag)
109
+ encoder.encode_schedule_delivery_time(@schedule_delivery_time)
110
+ encoder.encode_validity_period(@validity_period)
111
+ encoder.encode_replace_if_present_flag(@replace_if_present_flag)
112
+ encoder.encode_data_coding(@data_coding)
113
+ encoder.encode_sm_default_msg_id(@sm_default_msg_id)
114
+
115
+ # Encode mandatory fields as TLV structures
116
+ encoder.encode_broadcast_area_identifier(@broadcast_area_identifier,
117
+ @broadcast_area_identifier_len)
118
+ encoder.encode_broadcast_content_type(@broadcast_content_type,
119
+ @broadcast_content_type_len)
120
+ encoder.encode_broadcast_rep_num(@broadcast_rep_num,
121
+ @broadcast_rep_num_len)
122
+ encoder.encode_broadcast_frequency_interval(@broadcast_frequency_interval,
123
+ @broadcast_frequency_interval_len)
124
+
125
+ # Encode optional fields
126
+ encoder.encode_alert_on_msg_delivery(@alert_on_msg_delivery,
127
+ @alert_on_msg_delivery_len) if !@alert_on_msg_delivery.nil?
128
+ encoder.encode_broadcast_channel_indicator(@broadcast_channel_indicator,
129
+ @broadcast_channel_indicator_len) if !@broadcast_channel_indicator.nil?
130
+ encoder.encode_broadcast_content_type_info(@broadcast_content_type_info,
131
+ @broadcast_content_type_info_len) if !@broadcast_content_type_info.nil?
132
+ encoder.encode_broadcast_message_class(@broadcast_message_class,
133
+ @broadcast_message_class_len) if !@broadcast_message_class.nil?
134
+ encoder.encode_broadcast_service_group(@broadcast_service_group,
135
+ @broadcast_service_group_len) if !@broadcast_service_group.nil?
136
+ encoder.encode_callback_num(@callback_num,
137
+ @callback_num_len) if !@callback_num.nil?
138
+ encoder.encode_callback_num_atag(@callback_num_atag,
139
+ @callback_num_atag_len) if !@callback_num_atag.nil?
140
+ encoder.encode_callback_num_pres_ind(@callback_num_pres_ind,
141
+ @callback_num_pres_ind_len) if !@callback_num_pres_ind.nil?
142
+ encoder.encode_dest_addr_subunit(@dest_addr_subunit,
143
+ @dest_addr_subunit_len) if !@dest_addr_subunit.nil?
144
+ encoder.encode_dest_subaddress(@dest_subaddress,
145
+ @dest_subaddress_len) if !@dest_subaddress.nil?
146
+ encoder.encode_destination_port(@dest_port,
147
+ @dest_port_len) if !@dest_port.nil?
148
+ encoder.encode_display_time(@display_time,
149
+ @display_time_len) if !@display_time.nil?
150
+ encoder.encode_language_indicator(@language_indicator,
151
+ @language_indicator_len) if !@language_indicator.nil?
152
+ encoder.encode_message_payload(@message_payload,
153
+ @message_payload_len) if !@message_payload.nil?
154
+ encoder.encode_ms_validity(@ms_validity,
155
+ @ms_validity_len) if !@ms_validity.nil?
156
+ encoder.encode_payload_type(@payload_type,
157
+ @payload_type_len) if !@payload_type.nil?
158
+ encoder.encode_privacy_indicator(@privacy_indicator,
159
+ @privacy_indicator_len) if !@privacy_indicator.nil?
160
+ encoder.encode_sms_signal(@sms_signal,
161
+ @sms_signal_len) if !@sms_signal.nil?
162
+ encoder.encode_source_addr_subunit(@source_addr_subunit,
163
+ @source_addr_subunit_len) if !@source_addr_subunit.nil?
164
+ encoder.encode_source_port(@source_port,
165
+ @source_port_len) if !@source_port.nil?
166
+ encoder.encode_source_subaddress(@source_subaddress,
167
+ @source_subaddress_len) if !@source_subaddress.nil?
168
+ encoder.encode_user_message_reference(@user_message_reference,
169
+ @user_message_reference_len) if !@user_message_reference.nil?
170
+ end
171
+
172
+ # Interface to decode SMPP packet
173
+ def decode_packet(decoder)
174
+ # Decode header and mandatory fields
175
+ @header = decoder.decode_header()
176
+ @service_type = decoder.decode_service_type(command_length())
177
+ @source_addr_ton = decoder.decode_source_addr_ton(command_length())
178
+ @source_addr_npi = decoder.decode_source_addr_npi(command_length())
179
+ @source_addr = decoder.decode_source_addr21(command_length())
180
+ @message_id = decoder.decode_message_id(command_length())
181
+ @priority_flag = decoder.decode_priority_flag(command_length())
182
+ @schedule_delivery_time = decoder.decode_schedule_delivery_time(command_length())
183
+ @validity_period = decoder.decode_validity_period(command_length())
184
+ @replace_if_present_flag = decoder.decode_replace_if_present_flag(command_length())
185
+ @data_coding = decoder.decode_data_coding(command_length())
186
+ @sm_default_msg_id = decoder.decode_sm_default_msg_id(command_length())
187
+
188
+ while decoder.has_tlvs() && decoder.get_tlv_code() == OptTags::TAG_BROADCAST_AREA_IDENTIFIER
189
+ id, len = decoder.decode_broadcast_area_identifier(command_length())
190
+ if @broadcast_area_identifier.nil? || @broadcast_area_identifier_len.nil?
191
+ @broadcast_area_identifier = []
192
+ @broadcast_area_identifier_len = []
193
+ end
194
+ @broadcast_area_identifier << id
195
+ @broadcast_area_identifier_len << len
196
+ end
197
+
198
+ if decoder.has_tlvs() && decoder.get_tlv_code() == OptTags::TAG_BROADCAST_CONTENT_TYPE
199
+ @broadcast_content_type, @broadcast_content_type_len =
200
+ decoder.decode_broadcast_content_type(command_length())
201
+ end
202
+
203
+ if decoder.has_tlvs() && decoder.get_tlv_code() == OptTags::TAG_BROADCAST_REP_NUM
204
+ @broadcast_rep_num, @broadcast_rep_num_len =
205
+ decoder.decode_broadcast_rep_num(command_length())
206
+ end
207
+
208
+ if decoder.has_tlvs() && decoder.get_tlv_code() == OptTags::TAG_BROADCAST_FREQUENCY_INTERVAL
209
+ @broadcast_frequency_interval, @broadcast_frequency_interval_len =
210
+ decoder.decode_broadcast_frequency_interval(command_length())
211
+ end
212
+
213
+ # Decode optional fields
214
+ while decoder.has_tlvs()
215
+ case decoder.get_tlv_code()
216
+ when OptTags::TAG_ALERT_ON_MESSAGE_DELIVERY
217
+ @alert_on_msg_delivery, @alert_on_msg_delivery_len =
218
+ decoder.decode_alert_on_msg_delivery(command_length())
219
+ when OptTags::TAG_BROADCAST_CHANNEL_INDICATOR
220
+ @broadcast_channel_indicator, @broadcast_channel_indicator_len =
221
+ decoder.decode_broadcast_channel_indicator(command_length())
222
+ when OptTags::TAG_BROADCAST_CONTENT_TYPE_INFO
223
+ @broadcast_content_type_info, @broadcast_content_type_info_len =
224
+ decoder.decode_broadcast_content_type_info(command_length())
225
+ when OptTags::TAG_BROADCAST_MESSAGE_CLASS
226
+ @broadcast_message_class, @broadcast_message_class_len =
227
+ decoder.decode_broadcast_message_class(command_length())
228
+ when OptTags::TAG_BROADCAST_SERVICE_GROUP
229
+ @broadcast_service_group, @broadcast_service_group_len =
230
+ decoder.decode_broadcast_service_group(command_length())
231
+ when OptTags::TAG_CALLBACK_NUM
232
+ @callback_num, @callback_num_len =
233
+ decoder.decode_callback_num(command_length())
234
+ when OptTags::TAG_CALLBACK_NUM_PRES_IND
235
+ @callback_num_pres_ind, @callback_num_pres_ind_len =
236
+ decoder.decode_callback_num_pres_ind(command_length())
237
+ when OptTags::TAG_CALLBACK_NUM_ATAG
238
+ @callback_num_atag, @callback_num_atag_len =
239
+ decoder.decode_callback_num_atag(command_length())
240
+ when OptTags::TAG_DEST_ADDR_SUBUNIT
241
+ @dest_addr_subunit, @dest_addr_subunit_len =
242
+ decoder.decode_dest_addr_subunit(command_length())
243
+ when OptTags::TAG_DEST_SUBADDRESS
244
+ @dest_subaddress, @dest_subaddress_len =
245
+ decoder.decode_dest_subaddress(command_length())
246
+ when OptTags::TAG_DESTINATION_PORT
247
+ @dest_port, @dest_port_len =
248
+ decoder.decode_destination_port(command_length())
249
+ when OptTags::TAG_DISPLAY_TIME
250
+ @display_time, @display_time_len =
251
+ decoder.decode_display_time(command_length())
252
+ when OptTags::TAG_LANGUAGE_INDICATOR
253
+ @language_indicator, @language_indicator_len =
254
+ decoder.decode_language_indicator(command_length())
255
+ when OptTags::TAG_MESSAGE_PAYLOAD
256
+ @message_payload, @message_payload_len =
257
+ decoder.decode_message_payload(command_length())
258
+ when OptTags::TAG_MS_VALIDITY
259
+ @ms_validity, @ms_validity_len =
260
+ decoder.decode_ms_validity(command_length())
261
+ when OptTags::TAG_PAYLOAD_TYPE
262
+ @payload_type, @payload_type_len =
263
+ decoder.decode_payload_type(command_length())
264
+ when OptTags::TAG_PRIVACY_INDICATOR
265
+ @privacy_indicator, @privacy_indicator_len =
266
+ decoder.decode_privacy_indicator(command_length())
267
+ when OptTags::TAG_SMS_SIGNAL
268
+ @sms_signal, @sms_signal_len =
269
+ decoder.decode_sms_signal(command_length())
270
+ when OptTags::TAG_SOURCE_ADDR_SUBUNIT
271
+ @source_addr_subunit, @source_addr_subunit_len =
272
+ decoder.decode_source_addr_subunit(command_length())
273
+ when OptTags::TAG_SOURCE_PORT
274
+ @source_port, @source_port_len =
275
+ decoder.decode_source_port(command_length())
276
+ when OptTags::TAG_SOURCE_SUBADDRESS
277
+ @source_subaddress, @source_subaddress_len =
278
+ decoder.decode_source_subaddress(command_length())
279
+ when OptTags::TAG_USER_MESSAGE_REFERENCE
280
+ @user_message_reference, @user_message_reference_len =
281
+ decoder.decode_user_message_reference(command_length())
282
+ else
283
+ # Report about error
284
+ raise Errors::UNKNOWN_TAG_MSG + decoder.get_tlv_error()
285
+ end
286
+ end
287
+ end
288
+
289
+ # Interface to validate SMPP packet
290
+ def validate_packet(validator)
291
+ # Validate header and mandatory fields
292
+ validator.validate_header(@header)
293
+ validator.validate_source_addr_ton(@source_addr_ton)
294
+ validator.validate_source_addr_npi(@source_addr_npi)
295
+ validator.validate_source_addr21(@source_addr)
296
+ validator.validate_message_id(@message_id)
297
+ validator.validate_priority_flag(@priority_flag)
298
+ validator.validate_schedule_delivery_time(@schedule_delivery_time)
299
+ validator.validate_validity_period(@validity_period)
300
+ validator.validate_replace_if_present_flag(@replace_if_present_flag)
301
+ validator.validate_data_coding(@data_coding)
302
+ validator.validate_sm_default_msg_id(@sm_default_msg_id)
303
+
304
+ # Validate mandatory fields as TLV structures
305
+ validator.validate_broadcast_area_identifier(@broadcast_area_identifier,
306
+ @broadcast_area_identifier_len)
307
+ validator.validate_broadcast_content_type(@broadcast_content_type,
308
+ @broadcast_content_type)
309
+ validator.validate_broadcast_rep_num(@broadcast_rep_num,
310
+ @broadcast_rep_num)
311
+ validator.validate_broadcast_frequency_interval(@broadcast_frequency_interval,
312
+ @broadcast_frequency_interval_len)
313
+
314
+ # Validate optional fields
315
+ validator.validate_alert_on_msg_delivery(@alert_on_msg_delivery,
316
+ @alert_on_msg_delivery_len) if !@alert_on_msg_delivery.nil?
317
+ validator.validate_broadcast_channel_indicator(@broadcast_channel_indicator,
318
+ @broadcast_channel_indicator_len) if !@broadcast_channel_indicator.nil?
319
+ validator.validate_broadcast_content_type_info(@broadcast_content_type_info,
320
+ @broadcast_content_type_info_len) if !@broadcast_content_type_info.nil?
321
+ validator.validate_broadcast_message_class(@broadcast_message_class,
322
+ @broadcast_message_class_len) if !@broadcast_message_class.nil?
323
+ validator.validate_broadcast_service_group(@broadcast_service_group,
324
+ @broadcast_broadcast_service_group_len) if !@broadcast_service_group.nil?
325
+ validator.validate_callback_num(@callback_num,
326
+ @callback_num_len) if !@callback_num.nil?
327
+ validator.validate_callback_num_atag(@callback_num_atag,
328
+ @callback_num_atag_len) if !@callback_num_atag.nil?
329
+ validator.validate_callback_num_pres_ind(@callback_num_pres_ind,
330
+ @callback_num_pres_ind_len) if !@callback_num_pres_ind.nil?
331
+ validator.validate_dest_addr_subunit(@dest_addr_subunit,
332
+ @dest_addr_subunit_len) if !@dest_addr_subunit.nil?
333
+ validator.validate_dest_subaddress(@dest_subaddress,
334
+ @dest_subaddress_len) if !@dest_subaddress.nil?
335
+ validator.validate_destination_port(@dest_port,
336
+ @dest_port_len) if !@dest_port.nil?
337
+ validator.validate_display_time(@display_time,
338
+ @display_time_len) if !@display_time.nil?
339
+ validator.validate_language_indicator(@language_indicator,
340
+ @language_indicator_len) if !@language_indicator.nil?
341
+ validator.validate_message_payload(@message_payload,
342
+ @message_payload_len) if !@message_payload.nil?
343
+ validator.validate_ms_validity(@ms_validity,
344
+ @ms_validity_len) if !@ms_validity.nil?
345
+ validator.validate_payload_type(@payload_type,
346
+ @payload_type_len) if !@payload_type.nil?
347
+ validator.validate_privacy_indicator(@privacy_indicator,
348
+ @privacy_indicator_len) if !@privacy_indicator.nil?
349
+ validator.validate_sms_signal(@sms_signal,
350
+ @sms_signal_len) if !@sms_signal.nil?
351
+ validator.validate_source_addr_subunit(@source_addr_subunit,
352
+ @source_addr_subunit_len) if !@source_addr_subunit.nil?
353
+ validator.validate_source_port(@source_port,
354
+ @source_port_len) if !@source_port.nil?
355
+ validator.validate_source_subaddress(@source_subaddress,
356
+ @source_subaddress_len) if !@source_subaddress.nil?
357
+ validator.validate_user_message_reference(@user_message_reference,
358
+ @user_message_reference_len) if !@user_message_reference.nil?
359
+ end
360
+
361
+ # Interface to output SMPP packet
362
+ def output_packet(outputter)
363
+ # Output header and mandatory fields
364
+ outputter.output_header(@header)
365
+ outputter.output_source_addr_ton(@source_addr_ton)
366
+ outputter.output_source_addr_npi(@source_addr_npi)
367
+ outputter.output_source_addr21(@source_addr)
368
+ outputter.output_message_id(@message_id)
369
+ outputter.output_priority_flag(@priority_flag)
370
+ outputter.output_schedule_delivery_time(@schedule_delivery_time)
371
+ outputter.output_validity_period(@validity_period)
372
+ outputter.output_replace_if_present_flag(@replace_if_present_flag)
373
+ outputter.output_data_coding(@data_coding)
374
+ outputter.output_sm_default_msg_id(@sm_default_msg_id)
375
+
376
+ # Output mandatory fields as TLV structures
377
+ outputter.output_broadcast_area_identifier(@broadcast_area_identifier,
378
+ @broadcast_area_identifier_len)
379
+ outputter.output_broadcast_content_type(@broadcast_content_type,
380
+ @broadcast_content_type_len)
381
+ outputter.output_broadcast_rep_num(@broadcast_rep_num,
382
+ @broadcast_rep_num_len)
383
+ outputter.output_broadcast_frequency_interval(@broadcast_frequency_interval,
384
+ @broadcast_frequency_interval_len)
385
+
386
+ # Output optional fields
387
+ outputter.output_alert_on_msg_delivery(@alert_on_msg_delivery,
388
+ @alert_on_msg_delivery_len) if !@alert_on_msg_delivery.nil?
389
+ outputter.output_broadcast_channel_indicator(@broadcast_channel_indicator,
390
+ @broadcast_channel_indicator_len) if !@broadcast_channel_indicator.nil?
391
+ outputter.output_broadcast_content_type_info(@broadcast_content_type_info,
392
+ @broadcast_content_type_info_len) if !@broadcast_content_type_info.nil?
393
+ outputter.output_broadcast_message_class(@broadcast_message_class,
394
+ @broadcast_message_class_len) if !@broadcast_message_class.nil?
395
+ outputter.output_broadcast_service_group(@broadcast_service_group,
396
+ @broadcast_service_group_len) if !@broadcast_service_group.nil?
397
+ outputter.output_callback_num(@callback_num,
398
+ @callback_num_len) if !@callback_num.nil?
399
+ outputter.output_callback_num_atag(@callback_num_atag,
400
+ @callback_num_atag_len) if !@callback_num_atag.nil?
401
+ outputter.output_callback_num_pres_ind(@callback_num_pres_ind,
402
+ @callback_num_pres_ind_len) if !@callback_num_pres_ind.nil?
403
+ outputter.output_dest_addr_subunit(@dest_addr_subunit,
404
+ @dest_addr_subunit_len) if !@dest_addr_subunit.nil?
405
+ outputter.output_dest_subaddress(@dest_subaddress,
406
+ @dest_subaddress_len) if !@dest_subaddress.nil?
407
+ outputter.output_destination_port(@dest_port,
408
+ @dest_port_len) if !@dest_port.nil?
409
+ outputter.output_display_time(@display_time,
410
+ @display_time_len) if !@display_time.nil?
411
+ outputter.output_language_indicator(@language_indicator,
412
+ @language_indicator_len) if !@language_indicator.nil?
413
+ outputter.output_message_payload(@message_payload,
414
+ @message_payload_len) if !@message_payload.nil?
415
+ outputter.output_ms_validity(@ms_validity,
416
+ @ms_validity_len) if !@ms_validity.nil?
417
+ outputter.output_payload_type(@payload_type,
418
+ @payload_type_len) if !@payload_type.nil?
419
+ outputter.output_privacy_indicator(@privacy_indicator,
420
+ @privacy_indicator_len) if !@privacy_indicator.nil?
421
+ outputter.output_sms_signal(@sms_signal,
422
+ @sms_signal_len) if !@sms_signal.nil?
423
+ outputter.output_source_addr_subunit(@source_addr_subunit,
424
+ @source_addr_subunit_len) if !@source_addr_subunit.nil?
425
+ outputter.output_source_port(@source_port,
426
+ @source_port_len) if !@source_port.nil?
427
+ outputter.output_source_subaddress(@source_subaddress,
428
+ @source_subaddress_len) if !@source_subaddress.nil?
429
+ outputter.output_user_message_reference(@user_message_reference,
430
+ @user_message_reference_len) if !@user_message_reference.nil?
431
+ end
432
+ public
433
+ def broadcast_area_identifier=(broadcast_area_identifier)
434
+ @broadcast_area_identifier = broadcast_area_identifier
435
+ @broadcast_area_identifier_len = []
436
+ 0.upto(broadcast_area_identifier.size() -1) do | i |
437
+ @broadcast_area_identifier_len << broadcast_area_identifier[i].value.size()
438
+ end
439
+ end
440
+
441
+ def broadcast_content_type=(broadcast_content_type)
442
+ @broadcast_content_type = broadcast_content_type
443
+ @broadcast_content_type_len = broadcast_content_type.size()
444
+ end
445
+
446
+ def broadcast_frequency_interval=(broadcast_frequency_interval)
447
+ @broadcast_frequency_interval = broadcast_frequency_interval
448
+ @broadcast_frequency_interval_len = broadcast_frequency_interval.size()
449
+ end
450
+
451
+
452
+ def broadcast_content_type_info=(broadcast_content_type_info)
453
+ @broadcast_content_type_info = broadcast_content_type_info
454
+ @broadcast_content_type_info_len = broadcast_content_type_info.size()
455
+ end
456
+
457
+ def broadcast_service_group=(broadcast_service_group)
458
+ @broadcast_service_group = broadcast_service_group
459
+ @broadcast_service_group_len = broadcast_service_group.size()
460
+ end
461
+
462
+
463
+ def message_payload=(message_payload)
464
+ @message_payload = message_payload
465
+ @message_payload_len = message_payload.size()
466
+ end
467
+
468
+ def callback_num=(callback_num)
469
+ @callback_num = callback_num
470
+ @callback_num_len = callback_num.size()
471
+ end
472
+
473
+ def callback_num_atag=(callback_num_atag)
474
+ @callback_num_atag = callback_num_atag
475
+ @callback_num_atag_len = callback_num_atag.size()
476
+ end
477
+
478
+ def source_subaddress=(source_subaddress)
479
+ @source_subaddress = source_subaddress
480
+ @source_subaddress_len = source_subaddress.size()
481
+ end
482
+
483
+ def dest_subaddress=(dest_subaddress)
484
+ @dest_subaddress = dest_subaddress
485
+ @dest_subaddress_len = dest_subaddress.size()
486
+ end
487
+
488
+
489
+ public
490
+ # Mandatory fields
491
+ attr_accessor :service_type
492
+ attr_accessor :source_addr_ton
493
+ attr_accessor :source_addr_npi
494
+ attr_accessor :source_addr
495
+ attr_accessor :message_id
496
+ attr_accessor :priority_flag
497
+ attr_accessor :schedule_delivery_time
498
+ attr_accessor :validity_period
499
+ attr_accessor :replace_if_present_flag
500
+ attr_accessor :data_coding
501
+ attr_accessor :sm_default_msg_id
502
+ attr_reader :broadcast_area_identifier
503
+ attr_reader :broadcast_content_type
504
+ attr_accessor :broadcast_rep_num
505
+ attr_reader :broadcast_frequency_interval
506
+
507
+ # Mandatory fields len
508
+ attr_accessor :broadcast_area_identifier_len
509
+ attr_accessor :broadcast_content_type_len
510
+ attr_accessor :broadcast_rep_num_len
511
+ attr_accessor :broadcast_frequency_interval_len
512
+
513
+ # Optional fields
514
+ attr_accessor :alert_on_msg_delivery
515
+ attr_accessor :broadcast_channel_indicator
516
+ attr_reader :broadcast_content_type_info
517
+ attr_accessor :broadcast_message_class
518
+ attr_reader :broadcast_service_group
519
+ attr_reader :callback_num
520
+ attr_reader :callback_num_atag
521
+ attr_accessor :callback_num_pres_ind
522
+ attr_accessor :dest_addr_subunit
523
+ attr_reader :dest_subaddress
524
+ attr_accessor :dest_port
525
+ attr_accessor :display_time
526
+ attr_accessor :language_indicator
527
+ attr_reader :message_payload
528
+ attr_accessor :ms_validity
529
+ attr_accessor :payload_type
530
+ attr_accessor :privacy_indicator
531
+ attr_accessor :sms_signal
532
+ attr_accessor :source_addr_subunit
533
+ attr_accessor :source_port
534
+ attr_reader :source_subaddress
535
+ attr_accessor :user_message_reference
536
+
537
+
538
+ # Optional fields length
539
+ attr_accessor :alert_on_msg_delivery_len
540
+ attr_accessor :broadcast_channel_indicator_len
541
+ attr_accessor :broadcast_content_type_info_len
542
+ attr_accessor :broadcast_message_class_len
543
+ attr_accessor :broadcast_service_group_len
544
+ attr_accessor :callback_num_len
545
+ attr_accessor :callback_num_atag_len
546
+ attr_accessor :callback_num_pres_ind_len
547
+ attr_accessor :dest_addr_subunit_len
548
+ attr_accessor :dest_subaddress_len
549
+ attr_accessor :dest_port_len
550
+ attr_accessor :display_time_len
551
+ attr_accessor :language_indicator_len
552
+ attr_accessor :message_payload_len
553
+ attr_accessor :ms_validity_len
554
+ attr_accessor :payload_type_len
555
+ attr_accessor :privacy_indicator_len
556
+ attr_accessor :sms_signal_len
557
+ attr_accessor :source_addr_subunit_len
558
+ attr_accessor :source_port_len
559
+ attr_accessor :source_subaddress_len
560
+ attr_accessor :user_message_reference_len
561
+
562
+
563
+ end
564
+ end
565
+ end
566
+ end