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,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