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,90 @@
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 SMPPSubmitMultiResp < SMPPResp
23
+ # Constructor.
24
+ def initialize(command_status = ErrorCode::ESME_ROK, sequence_number = nil)
25
+ super(CommandId::CM_SUBMIT_MULTI_RESP, command_status, sequence_number)
26
+
27
+ # Mandatory fields
28
+ @message_id= ""
29
+ @no_unsuccess = 0
30
+ @unsuccess_smes = []
31
+ end
32
+
33
+ # Interface to encode SMPP packet
34
+ def encode_packet(encoder)
35
+ # Encode header and mandatory fields
36
+ encoder.encode_header(@header)
37
+ encoder.encode_message_id(@message_id)
38
+ encoder.encode_no_unsuccess(@no_unsuccess)
39
+ encoder.encode_unsuccess_smes(@unsuccess_smes)
40
+ end
41
+
42
+ # Interface to decode SMPP packet
43
+ def decode_packet(decoder)
44
+ # Decode header and mandatory fields
45
+ @header = decoder.decode_header()
46
+ @message_id = decoder.decode_message_id(command_length())
47
+ @no_unsuccess = decoder.decode_no_unsuccess(command_length())
48
+ @unsuccess_smes = decoder.decode_unsuccess_smes(@no_unsuccess, command_length())
49
+
50
+ end
51
+
52
+ # Interface to validate SMPP packet
53
+ def validate_packet(validator)
54
+ # Validate header and mandatory fields
55
+ validator.validate_header(@header)
56
+ validator.validate_message_id(@message_id)
57
+ validator.validate_no_unsuccess(@no_unsuccess)
58
+ validator.validate_unsuccess_smes(@unsuccess_smes, @no_unsuccess)
59
+ end
60
+
61
+ # Interface to output SMPP packet
62
+ def output_packet(outputter)
63
+ # Output header and mandatory fields
64
+ outputter.output_header(@header)
65
+ outputter.output_message_id(@message_id)
66
+ outputter.output_no_unsuccess(@no_unsuccess)
67
+ outputter.output_unsuccess_smes(@unsuccess_smes)
68
+ end
69
+
70
+ public
71
+ def unsuccess_smes=(unsuccess_smes)
72
+ @unsuccess_smes = unsuccess_smes
73
+ @no_unsuccess = unsuccess_smes.size()
74
+ end
75
+
76
+
77
+ public
78
+ # Mandatory fields
79
+ attr_accessor :message_id
80
+ attr_accessor :no_unsuccess
81
+ attr_reader :unsuccess_smes
82
+
83
+ # Optional fields
84
+
85
+ # Optional fields length
86
+
87
+ end
88
+ end
89
+ end
90
+ end
@@ -0,0 +1,591 @@
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 SMPPSubmitSM < SMPPPDU
23
+ def initialize(command_status = ErrorCode::ESME_ROK, sequence_number = nil)
24
+ super(CommandId::CM_SUBMIT_SM, command_status, sequence_number)
25
+
26
+ # Mandatory fields
27
+ @service_type = ""
28
+ @source_addr_ton = 0
29
+ @source_addr_npi = 0
30
+ @source_addr = ""
31
+ @dest_addr_ton = 0
32
+ @dest_addr_npi = 0
33
+ @dest_addr = ""
34
+ @esm_class = 0
35
+ @protocol_id = 0
36
+ @priority_flag = 0
37
+ @schedule_delivery_time = ""
38
+ @validity_period = ""
39
+ @registered_delivery = 0
40
+ @replace_if_present_flag = 0
41
+ @data_coding = 0
42
+ @sm_default_msg_id = 0
43
+ @sm_length = 0
44
+ @short_message = ""
45
+
46
+
47
+ # Optional fields
48
+ @user_message_reference = nil
49
+ @source_port = nil
50
+ @source_addr_subunit = nil
51
+ @destination_port = nil
52
+ @dest_addr_subunit = nil
53
+ @sar_msg_ref_num = nil
54
+ @sar_total_segments = nil
55
+ @sar_segment_seqnum = nil
56
+ @more_messages_to_send = nil
57
+ @payload_type = nil
58
+ @message_payload = nil
59
+ @privacy_indicator = nil
60
+ @callback_num = nil
61
+ @callback_num_pres_ind = nil
62
+ @callback_num_atag = nil
63
+ @source_subaddress = nil
64
+ @dest_subaddress = nil
65
+ @user_response_code = nil
66
+ @display_time = nil
67
+ @sms_signal = nil
68
+ @ms_validity = nil
69
+ @ms_msg_wait_facilities = nil
70
+ @number_of_messages = nil
71
+ @alert_on_msg_delivery = nil
72
+ @language_indicator = nil
73
+ @its_reply_type = nil
74
+ @its_session_info = nil
75
+ @ussd_service_op = nil
76
+
77
+ # Optional fields length
78
+ @user_message_reference_len = SMPPTLVLen::WORD_LEN
79
+ @source_port_len = SMPPTLVLen::WORD_LEN
80
+ @source_addr_subunit_len = SMPPTLVLen::BYTE_LEN
81
+ @destination_port_len = SMPPTLVLen::WORD_LEN
82
+ @dest_addr_subunit_len = SMPPTLVLen::BYTE_LEN
83
+ @sar_msg_ref_num_len = SMPPTLVLen::WORD_LEN
84
+ @sar_total_segments_len = SMPPTLVLen::BYTE_LEN
85
+ @sar_segment_seqnum_len = SMPPTLVLen::BYTE_LEN
86
+ @more_messages_to_send_len = SMPPTLVLen::BYTE_LEN
87
+ @payload_type_len = SMPPTLVLen::BYTE_LEN
88
+ @message_payload_len = SMPPTLVLen::ZERO_LEN
89
+ @privacy_indicator_len = SMPPTLVLen::BYTE_LEN
90
+ @callback_num_len = SMPPTLVLen::ZERO_LEN
91
+ @callback_num_pres_ind_len = SMPPTLVLen::BYTE_LEN
92
+ @callback_num_atag_len = SMPPTLVLen::ZERO_LEN
93
+ @source_subaddress_len = SMPPTLVLen::ZERO_LEN
94
+ @dest_subaddress_len = SMPPTLVLen::ZERO_LEN
95
+ @user_response_code_len = SMPPTLVLen::BYTE_LEN
96
+ @display_time_len = SMPPTLVLen::BYTE_LEN
97
+ @sms_signal_len = SMPPTLVLen::WORD_LEN
98
+ @ms_validity_len = SMPPTLVLen::BYTE_LEN
99
+ @ms_msg_wait_facilities_len = SMPPTLVLen::BYTE_LEN
100
+ @number_of_messages_len = SMPPTLVLen::BYTE_LEN
101
+ @alert_on_msg_delivery_len = SMPPTLVLen::BYTE_LEN
102
+ @language_indicator_len = SMPPTLVLen::BYTE_LEN
103
+ @its_reply_type_len = SMPPTLVLen::BYTE_LEN
104
+ @its_session_info_len = SMPPTLVLen::WORD_LEN
105
+ @ussd_service_op_len = SMPPTLVLen::BYTE_LEN
106
+ end
107
+
108
+ # Interface to encode SMPP packet
109
+ def encode_packet(encoder)
110
+ # Encode header and mandatory fields
111
+ encoder.encode_header(@header)
112
+ encoder.encode_service_type(@service_type)
113
+ encoder.encode_source_addr_ton(@source_addr_ton)
114
+ encoder.encode_source_addr_npi(@source_addr_npi)
115
+ encoder.encode_source_addr21(@source_addr)
116
+ encoder.encode_dest_addr_ton(@dest_addr_ton)
117
+ encoder.encode_dest_addr_npi(@dest_addr_npi)
118
+ encoder.encode_dest_addr21(@dest_addr)
119
+ encoder.encode_esm_class(@esm_class)
120
+ encoder.encode_protocol_id(@protocol_id)
121
+ encoder.encode_priority_flag(@priority_flag)
122
+ encoder.encode_schedule_delivery_time(@schedule_delivery_time)
123
+ encoder.encode_validity_period(@validity_period)
124
+ encoder.encode_registered_delivery(@registered_delivery)
125
+ encoder.encode_replace_if_present_flag(@replace_if_present_flag)
126
+ encoder.encode_data_coding(@data_coding)
127
+ encoder.encode_sm_default_msg_id(@sm_default_msg_id)
128
+ encoder.encode_sm_length(@sm_length)
129
+ encoder.encode_short_message(@short_message)
130
+
131
+ # Encode optional fields
132
+ encoder.encode_user_message_reference(@user_message_reference,
133
+ @user_message_reference_len) if !@user_message_reference.nil?
134
+ encoder.encode_source_port(@source_port,
135
+ @source_port_len) if !@source_port.nil?
136
+ encoder.encode_source_addr_subunit(@source_addr_subunit,
137
+ @source_addr_subunit_len) if !@source_addr_subunit.nil?
138
+ encoder.encode_destination_port(@destination_port,
139
+ @destination_port_len) if !@destination_port.nil?
140
+ encoder.encode_dest_addr_subunit(@dest_addr_subunit,
141
+ @dest_addr_subunit_len) if !@dest_addr_subunit.nil?
142
+ encoder.encode_sar_msg_ref_num(@sar_msg_ref_num,
143
+ @sar_msg_ref_num_len) if !@sar_msg_ref_num.nil?
144
+ encoder.encode_sar_total_segments(@sar_total_segments,
145
+ @sar_total_segments_len) if !@sar_total_segments.nil?
146
+ encoder.encode_sar_segment_seqnum(@sar_segment_seqnum,
147
+ @sar_segment_seqnum_len) if !@sar_segment_seqnum.nil?
148
+ encoder.encode_more_messages_to_send(@more_messages_to_send,
149
+ @more_messages_to_send_len) if !@more_messages_to_send.nil?
150
+ encoder.encode_payload_type(@payload_type,
151
+ @payload_type_len) if !@payload_type.nil?
152
+ encoder.encode_message_payload(@message_payload,
153
+ @message_payload_len) if !@message_payload.nil?
154
+ encoder.encode_privacy_indicator(@privacy_indicator,
155
+ @privacy_indicator_len) if !@privacy_indicator.nil?
156
+ encoder.encode_callback_num(@callback_num,
157
+ @callback_num_len) if !@callback_num.nil?
158
+ encoder.encode_callback_num_pres_ind(@callback_num_pres_ind,
159
+ @callback_num_pres_ind_len) if !@callback_num_pres_ind.nil?
160
+ encoder.encode_callback_num_atag(@callback_num_atag,
161
+ @callback_num_atag_len) if !@callback_num_atag.nil?
162
+ encoder.encode_source_subaddress(@source_subaddress,
163
+ @source_subaddress_len) if !@source_subaddress.nil?
164
+ encoder.encode_dest_subaddress(@dest_subaddress,
165
+ @dest_subaddress_len) if !@dest_subaddress.nil?
166
+ encoder.encode_user_response_code(@user_response_code,
167
+ @user_response_code_len) if !@user_response_code.nil?
168
+ encoder.encode_display_time(@display_time,
169
+ @display_time_len) if !@display_time.nil?
170
+ encoder.encode_sms_signal(@sms_signal,
171
+ @sms_signal_len) if !@sms_signal.nil?
172
+ encoder.encode_ms_validity(@ms_validity,
173
+ @ms_validity_len) if !@ms_validity.nil?
174
+ encoder.encode_ms_msg_wait_facilities(@ms_msg_wait_facilities,
175
+ @ms_msg_wait_facilities_len) if !@ms_msg_wait_facilities.nil?
176
+ encoder.encode_number_of_messages(@number_of_messages,
177
+ @number_of_messages_len) if !@number_of_messages.nil?
178
+ encoder.encode_alert_on_msg_delivery(@alert_on_msg_delivery,
179
+ @alert_on_msg_delivery_len) if !@alert_on_msg_delivery.nil?
180
+ encoder.encode_language_indicator(@language_indicator,
181
+ @language_indicator_len) if !@language_indicator.nil?
182
+ encoder.encode_its_reply_type(@its_reply_type,
183
+ @its_reply_type_len) if !@its_reply_type.nil?
184
+ encoder.encode_its_session_info(@its_session_info,
185
+ @its_session_info_len) if !@its_session_info.nil?
186
+ encoder.encode_ussd_service_op(@ussd_service_op,
187
+ @ussd_service_op_len) if !@ussd_service_op.nil?
188
+ end
189
+
190
+ # Interface to decode SMPP packet
191
+ def decode_packet(decoder)
192
+ # Decode header and mandatory fields
193
+ @header = decoder.decode_header()
194
+ @service_type = decoder.decode_service_type(command_length())
195
+ @source_addr_ton = decoder.decode_source_addr_ton(command_length())
196
+ @source_addr_npi = decoder.decode_source_addr_npi(command_length())
197
+ @source_addr = decoder.decode_source_addr21(command_length())
198
+ @dest_addr_ton = decoder.decode_dest_addr_ton(command_length())
199
+ @dest_addr_npi = decoder.decode_dest_addr_npi(command_length())
200
+ @dest_addr = decoder.decode_dest_addr21(command_length())
201
+ @esm_class = decoder.decode_esm_class(command_length())
202
+ @protocol_id = decoder.decode_protocol_id(command_length())
203
+ @priority_flag = decoder.decode_priority_flag(command_length())
204
+ @schedule_delivery_time = decoder.decode_schedule_delivery_time(command_length())
205
+ @validity_period = decoder.decode_validity_period(command_length())
206
+ @registered_delivery = decoder.decode_registered_delivery(command_length())
207
+ @replace_if_present_flag = decoder.decode_replace_if_present_flag(command_length())
208
+ @data_coding = decoder.decode_data_coding(command_length())
209
+ @sm_default_msg_id = decoder.decode_sm_default_msg_id(command_length())
210
+ @sm_length = decoder.decode_sm_length(command_length())
211
+ @short_message = decoder.decode_short_message(@sm_length, command_length())
212
+
213
+
214
+ # Decode optional fields
215
+ while decoder.has_tlvs()
216
+ case decoder.get_tlv_code()
217
+ when OptTags::TAG_USER_MESSAGE_REFERENCE
218
+ @user_message_reference, @user_message_reference_len =
219
+ decoder.decode_user_message_reference(command_length())
220
+ when OptTags::TAG_SOURCE_PORT
221
+ @source_port, @source_port_len =
222
+ decoder.decode_source_port(command_length())
223
+ when OptTags::TAG_SOURCE_ADDR_SUBUNIT
224
+ @source_addr_subunit, @source_addr_subunit_len =
225
+ decoder.decode_source_addr_subunit(command_length())
226
+ when OptTags::TAG_DESTINATION_PORT
227
+ @destination_port, @destination_port_len =
228
+ decoder.decode_destination_port(command_length())
229
+ when OptTags::TAG_DEST_ADDR_SUBUNIT
230
+ @dest_addr_subunit, @dest_addr_subunit_len =
231
+ decoder.decode_dest_addr_subunit(command_length())
232
+ when OptTags::TAG_SAR_MSG_REF_NUM
233
+ @sar_msg_ref_num, @sar_msg_ref_num_len =
234
+ decoder.decode_sar_msg_ref_num(command_length())
235
+ when OptTags::TAG_SAR_TOTAL_SEGMENTS
236
+ @sar_total_segments, @sar_total_segments_len =
237
+ decoder.decode_sar_total_segments(command_length())
238
+ when OptTags::TAG_SAR_SEGMENT_SEQNUM
239
+ @sar_segment_seqnum, @sar_segment_seqnum_len =
240
+ decoder.decode_sar_segment_seqnum(command_length())
241
+ when OptTags::TAG_MORE_MESSAGES_TO_SEND
242
+ @more_messages_to_send, @more_messages_to_send_len =
243
+ decoder.decode_more_messages_to_send(command_length())
244
+ when OptTags::TAG_PAYLOAD_TYPE
245
+ @payload_type, @payload_type_len =
246
+ decoder.decode_payload_type(command_length())
247
+ when OptTags::TAG_MESSAGE_PAYLOAD
248
+ @message_payload, @message_payload_len =
249
+ decoder.decode_message_payload(command_length())
250
+ when OptTags::TAG_PRIVACY_INDICATOR
251
+ @privacy_indicator, @privacy_indicator_len =
252
+ decoder.decode_privacy_indicator(command_length())
253
+ when OptTags::TAG_CALLBACK_NUM
254
+ @callback_num, @callback_num_len =
255
+ decoder.decode_callback_num(command_length())
256
+ when OptTags::TAG_CALLBACK_NUM_PRES_IND
257
+ @callback_num_pres_ind, @callback_num_pres_ind_len =
258
+ decoder.decode_callback_num_pres_ind(command_length())
259
+ when OptTags::TAG_CALLBACK_NUM_ATAG
260
+ @callback_num_atag, @callback_num_atag_len =
261
+ decoder.decode_callback_num_atag(command_length())
262
+ when OptTags::TAG_SOURCE_SUBADDRESS
263
+ @source_subaddress, @source_subaddress_len =
264
+ decoder.decode_source_subaddress(command_length())
265
+ when OptTags::TAG_DEST_SUBADDRESS
266
+ @dest_subaddress, @dest_subaddress_len =
267
+ decoder.decode_dest_subaddress(command_length())
268
+ when OptTags::TAG_USER_RESPONSE_CODE
269
+ @user_response_code, @user_response_code_len =
270
+ decoder.decode_user_response_code(command_length())
271
+ when OptTags::TAG_DISPLAY_TIME
272
+ @display_time, @display_time_len =
273
+ decoder.decode_display_time(command_length())
274
+ when OptTags::TAG_SMS_SIGNAL
275
+ @sms_signal, @sms_signal_len =
276
+ decoder.decode_sms_signal(command_length())
277
+ when OptTags::TAG_MS_VALIDITY
278
+ @ms_validity, @ms_validity_len =
279
+ decoder.decode_ms_validity(command_length())
280
+ when OptTags::TAG_MS_MSG_WAIT_FACILITIES
281
+ @ms_msg_wait_facilities, @ms_msg_wait_facilities_len =
282
+ decoder.decode_ms_msg_wait_facilities(command_length())
283
+ when OptTags::TAG_NUMBER_OF_MESSAGES
284
+ @number_of_messages, @number_of_messages_len =
285
+ decoder.decode_number_of_messages(command_length())
286
+ when OptTags::TAG_ALERT_ON_MESSAGE_DELIVERY
287
+ @alert_on_msg_delivery, @alert_on_msg_delivery_len =
288
+ decoder.decode_alert_on_msg_delivery(command_length())
289
+ when OptTags::TAG_LANGUAGE_INDICATOR
290
+ @language_indicator, @language_indicator_len =
291
+ decoder.decode_language_indicator(command_length())
292
+ when OptTags::TAG_ITS_REPLY_TYPE
293
+ @its_reply_type, @its_reply_type_len =
294
+ decoder.decode_its_reply_type(command_length())
295
+ when OptTags::TAG_ITS_SESSION_INFO
296
+ @its_session_info, @its_session_info_len =
297
+ decoder.decode_its_session_info(command_length())
298
+ when OptTags::TAG_USSD_SERVICE_OP
299
+ @ussd_service_op, @ussd_service_op_len =
300
+ decoder.decode_ussd_service_op(command_length())
301
+ else
302
+ # Report about error
303
+ raise Errors::UNKNOWN_TAG_MSG + decoder.get_tlv_error()
304
+ end
305
+ end
306
+ end
307
+
308
+ # Interface to validate SMPP packet
309
+ def validate_packet(validator)
310
+ # Validate header and mandatory fields
311
+ validator.validate_header(@header)
312
+ validator.validate_service_type(@service_type)
313
+ validator.validate_source_addr_ton(@source_addr_ton)
314
+ validator.validate_source_addr_npi(@source_addr_npi)
315
+ validator.validate_source_addr21(@source_addr)
316
+ validator.validate_dest_addr_ton(@dest_addr_ton)
317
+ validator.validate_dest_addr_npi(@dest_addr_npi)
318
+ validator.validate_dest_addr21(@dest_addr)
319
+ validator.validate_esm_class(@esm_class)
320
+ validator.validate_protocol_id(@protocol_id)
321
+ validator.validate_priority_flag(@priority_flag)
322
+ validator.validate_schedule_delivery_time(@schedule_delivery_time)
323
+ validator.validate_validity_period(@validity_period)
324
+ validator.validate_registered_delivery(@registered_delivery)
325
+ validator.validate_replace_if_present_flag(@replace_if_present_flag)
326
+ validator.validate_data_coding(@data_coding)
327
+ validator.validate_sm_default_msg_id(@sm_default_msg_id)
328
+ validator.validate_sm_length(@sm_length)
329
+ validator.validate_short_message(@short_message)
330
+
331
+ # Encode optional fields
332
+ validator.validate_user_message_reference(@user_message_reference,
333
+ @user_message_reference_len) if !@user_message_reference.nil?
334
+ validator.validate_source_port(@source_port,
335
+ @source_port_len) if !@source_port.nil?
336
+ validator.validate_source_addr_subunit(@source_addr_subunit,
337
+ @source_addr_subunit_len) if !@source_addr_subunit.nil?
338
+ validator.validate_destination_port(@destination_port,
339
+ @destination_port_len) if !@destination_port.nil?
340
+ validator.validate_dest_addr_subunit(@dest_addr_subunit,
341
+ @dest_addr_subunit_len) if !@dest_addr_subunit.nil?
342
+ validator.validate_sar_msg_ref_num(@sar_msg_ref_num,
343
+ @sar_msg_ref_num_len) if !@sar_msg_ref_num.nil?
344
+ validator.validate_sar_total_segments(@sar_total_segments,
345
+ @sar_total_segments_len) if !@sar_total_segments.nil?
346
+ validator.validate_sar_segment_seqnum(@sar_segment_seqnum,
347
+ @sar_segment_seqnum_len) if !@sar_segment_seqnum.nil?
348
+ validator.validate_more_messages_to_send(@more_messages_to_send,
349
+ @more_messages_to_send_len) if !@more_messages_to_send.nil?
350
+ validator.validate_payload_type(@payload_type,
351
+ @payload_type_len) if !@payload_type.nil?
352
+ validator.validate_message_payload(@message_payload,
353
+ @message_payload_len) if !@message_payload.nil?
354
+ validator.validate_privacy_indicator(@privacy_indicator,
355
+ @privacy_indicator_len) if !@privacy_indicator.nil?
356
+ validator.validate_callback_num(@callback_num,
357
+ @callback_num_len) if !@callback_num.nil?
358
+ validator.validate_callback_num_pres_ind(@callback_num_pres_ind,
359
+ @callback_num_pres_ind_len) if !@callback_num_pres_ind.nil?
360
+ validator.validate_callback_num_atag(@callback_num_atag,
361
+ @callback_num_atag_len) if !@callback_num_atag.nil?
362
+ validator.validate_source_subaddress(@source_subaddress,
363
+ @source_subaddress_len) if !@source_subaddress.nil?
364
+ validator.validate_dest_subaddress(@dest_subaddress,
365
+ @dest_subaddress_len) if !@dest_subaddress.nil?
366
+ validator.validate_user_response_code(@user_response_code,
367
+ @user_response_code_len) if !@user_response_code.nil?
368
+ validator.validate_display_time(@display_time,
369
+ @display_time_len) if !@display_time.nil?
370
+ validator.validate_sms_signal(@sms_signal,
371
+ @sms_signal_len) if !@sms_signal.nil?
372
+ validator.validate_ms_validity(@ms_validity,
373
+ @ms_validity_len) if !@ms_validity.nil?
374
+ validator.validate_ms_msg_wait_facilities(@ms_msg_wait_facilities,
375
+ @ms_msg_wait_facilities_len) if !@ms_msg_wait_facilities.nil?
376
+ validator.validate_number_of_messages(@number_of_messages,
377
+ @number_of_messages_len) if !@number_of_messages.nil?
378
+ validator.validate_alert_on_msg_delivery(@alert_on_msg_delivery,
379
+ @alert_on_msg_delivery_len) if !@alert_on_msg_delivery.nil?
380
+ validator.validate_language_indicator(@language_indicator,
381
+ @language_indicator_len) if !@language_indicator.nil?
382
+ validator.validate_its_reply_type(@its_reply_type,
383
+ @its_reply_type_len) if !@its_reply_type.nil?
384
+ validator.validate_its_session_info(@its_session_info,
385
+ @its_session_info_len) if !@its_session_info.nil?
386
+ validator.validate_ussd_service_op(@ussd_service_op,
387
+ @ussd_service_op_len) if !@ussd_service_op.nil?
388
+
389
+ # Validate complex rules
390
+ validator.validate_short_message_payload(@short_message,
391
+ @message_payload) if !@message_payload.nil?
392
+ end
393
+
394
+ # Interface to output SMPP packet
395
+ def output_packet(outputter)
396
+ # Output header and mandatory fields
397
+ outputter.output_header(@header)
398
+ outputter.output_service_type(@service_type)
399
+ outputter.output_source_addr_ton(@source_addr_ton)
400
+ outputter.output_source_addr_npi(@source_addr_npi)
401
+ outputter.output_source_addr21(@source_addr)
402
+ outputter.output_dest_addr_ton(@dest_addr_ton)
403
+ outputter.output_dest_addr_npi(@dest_addr_npi)
404
+ outputter.output_dest_addr21(@dest_addr)
405
+ outputter.output_esm_class(@esm_class)
406
+ outputter.output_protocol_id(@protocol_id)
407
+ outputter.output_priority_flag(@priority_flag)
408
+ outputter.output_schedule_delivery_time(@schedule_delivery_time)
409
+ outputter.output_validity_period(@validity_period)
410
+ outputter.output_registered_delivery(@registered_delivery)
411
+ outputter.output_replace_if_present_flag(@replace_if_present_flag)
412
+ outputter.output_data_coding(@data_coding)
413
+ outputter.output_sm_default_msg_id(@sm_default_msg_id)
414
+ outputter.output_sm_length(@sm_length)
415
+ outputter.output_short_message(@short_message)
416
+
417
+ # Encode optional fields
418
+ outputter.output_user_message_reference(@user_message_reference,
419
+ @user_message_reference_len) if !@user_message_reference.nil?
420
+ outputter.output_source_port(@source_port,
421
+ @source_port_len) if !@source_port.nil?
422
+ outputter.output_source_addr_subunit(@source_addr_subunit,
423
+ @source_addr_subunit_len) if !@source_addr_subunit.nil?
424
+ outputter.output_destination_port(@destination_port,
425
+ @destination_port_len) if !@destination_port.nil?
426
+ outputter.output_dest_addr_subunit(@dest_addr_subunit,
427
+ @dest_addr_subunit_len) if !@dest_addr_subunit.nil?
428
+ outputter.output_sar_msg_ref_num(@sar_msg_ref_num,
429
+ @sar_msg_ref_num_len) if !@sar_msg_ref_num.nil?
430
+ outputter.output_sar_total_segments(@sar_total_segments,
431
+ @sar_total_segments_len) if !@sar_total_segments.nil?
432
+ outputter.output_sar_segment_seqnum(@sar_segment_seqnum,
433
+ @sar_segment_seqnum_len) if !@sar_segment_seqnum.nil?
434
+ outputter.output_more_messages_to_send(@more_messages_to_send,
435
+ @more_messages_to_send_len) if !@more_messages_to_send.nil?
436
+ outputter.output_payload_type(@payload_type,
437
+ @payload_type_len) if !@payload_type.nil?
438
+ outputter.output_message_payload(@message_payload,
439
+ @message_payload_len) if !@message_payload.nil?
440
+ outputter.output_privacy_indicator(@privacy_indicator,
441
+ @privacy_indicator_len) if !@privacy_indicator.nil?
442
+ outputter.output_callback_num(@callback_num,
443
+ @callback_num_len) if !@callback_num.nil?
444
+ outputter.output_callback_num_pres_ind(@callback_num_pres_ind,
445
+ @callback_num_pres_ind_len) if !@callback_num_pres_ind.nil?
446
+ outputter.output_callback_num_atag(@callback_num_atag,
447
+ @callback_num_atag_len) if !@callback_num_atag.nil?
448
+ outputter.output_source_subaddress(@source_subaddress,
449
+ @source_subaddress_len) if !@source_subaddress.nil?
450
+ outputter.output_dest_subaddress(@dest_subaddress,
451
+ @dest_subaddress_len) if !@dest_subaddress.nil?
452
+ outputter.output_user_response_code(@user_response_code,
453
+ @user_response_code_len) if !@user_response_code.nil?
454
+ outputter.output_display_time(@display_time,
455
+ @display_time_len) if !@display_time.nil?
456
+ outputter.output_sms_signal(@sms_signal,
457
+ @sms_signal_len) if !@sms_signal.nil?
458
+ outputter.output_ms_validity(@ms_validity,
459
+ @ms_validity_len) if !@ms_validity.nil?
460
+ outputter.output_ms_msg_wait_facilities(@ms_msg_wait_facilities,
461
+ @ms_msg_wait_facilities_len) if !@ms_msg_wait_facilities.nil?
462
+ outputter.output_number_of_messages(@number_of_messages,
463
+ @number_of_messages_len) if !@number_of_messages.nil?
464
+ outputter.output_alert_on_msg_delivery(@alert_on_msg_delivery,
465
+ @alert_on_msg_delivery_len) if !@alert_on_msg_delivery.nil?
466
+ outputter.output_language_indicator(@language_indicator,
467
+ @language_indicator_len) if !@language_indicator.nil?
468
+ outputter.output_its_reply_type(@its_reply_type,
469
+ @its_reply_type_len) if !@its_reply_type.nil?
470
+ outputter.output_its_session_info(@its_session_info,
471
+ @its_session_info_len) if !@its_session_info.nil?
472
+ outputter.output_ussd_service_op(@ussd_service_op,
473
+ @ussd_service_op_len) if !@ussd_service_op.nil?
474
+ end
475
+
476
+ public
477
+ def short_message=(short_message)
478
+ @short_message = short_message
479
+ @short_message_len = short_message.size()
480
+ end
481
+
482
+ def message_payload=(message_payload)
483
+ @message_payload = message_payload
484
+ @message_payload_len = message_payload.size()
485
+ end
486
+
487
+ def callback_num=(callback_num)
488
+ @callback_num = callback_num
489
+ @callback_num_len = callback_num.size()
490
+ end
491
+
492
+ def callback_num_atag=(callback_num_atag)
493
+ @callback_num_atag = callback_num_atag
494
+ @callback_num_atag_len = callback_num_atag.size()
495
+ end
496
+
497
+ def source_subaddress=(source_subaddress)
498
+ @source_subaddress = source_subaddress
499
+ @source_subaddress_len = source_subaddress.size()
500
+ end
501
+
502
+ def dest_subaddress=(dest_subaddress)
503
+ @dest_subaddress = dest_subaddress
504
+ @dest_subaddress_len = dest_subaddress.size()
505
+ end
506
+
507
+
508
+ public
509
+ # Mandatory fields
510
+ attr_accessor :service_type
511
+ attr_accessor :source_addr_ton
512
+ attr_accessor :source_addr_npi
513
+ attr_accessor :source_addr
514
+ attr_accessor :dest_addr_ton
515
+ attr_accessor :dest_addr_npi
516
+ attr_accessor :dest_addr
517
+ attr_accessor :esm_class
518
+ attr_accessor :protocol_id
519
+ attr_accessor :priority_flag
520
+ attr_accessor :schedule_delivery_time
521
+ attr_accessor :validity_period
522
+ attr_accessor :registered_delivery
523
+ attr_accessor :replace_if_present_flag
524
+ attr_accessor :data_coding
525
+ attr_accessor :sm_default_msg_id
526
+ attr_accessor :sm_length
527
+ attr_reader :short_message
528
+
529
+ # Optional fields
530
+ attr_accessor :user_message_reference
531
+ attr_accessor :source_port
532
+ attr_accessor :source_addr_subunit
533
+ attr_accessor :destination_port
534
+ attr_accessor :dest_addr_subunit
535
+ attr_accessor :sar_msg_ref_num
536
+ attr_accessor :sar_total_segments
537
+ attr_accessor :sar_segment_seqnum
538
+ attr_accessor :more_messages_to_send
539
+ attr_accessor :payload_type
540
+ attr_reader :message_payload
541
+ attr_accessor :privacy_indicator
542
+ attr_reader :callback_num
543
+ attr_accessor :callback_num_pres_ind
544
+ attr_reader :callback_num_atag
545
+ attr_reader :source_subaddress
546
+ attr_reader :dest_subaddress
547
+ attr_accessor :user_response_code
548
+ attr_accessor :display_time
549
+ attr_accessor :sms_signal
550
+ attr_accessor :ms_validity
551
+ attr_accessor :ms_msg_wait_facilities
552
+ attr_accessor :number_of_messages
553
+ attr_accessor :alert_on_msg_delivery
554
+ attr_accessor :language_indicator
555
+ attr_accessor :its_reply_type
556
+ attr_accessor :its_session_info
557
+ attr_accessor :ussd_service_op
558
+
559
+ # Optional fields length
560
+ attr_accessor :user_message_reference_len
561
+ attr_accessor :source_port_len
562
+ attr_accessor :source_addr_subunit_len
563
+ attr_accessor :destination_port_len
564
+ attr_accessor :dest_addr_subunit_len
565
+ attr_accessor :sar_msg_ref_num_len
566
+ attr_accessor :sar_total_segments_len
567
+ attr_accessor :sar_segment_seqnum_len
568
+ attr_accessor :more_messages_to_send_len
569
+ attr_accessor :payload_type_len
570
+ attr_accessor :message_payload_len
571
+ attr_accessor :privacy_indicator_len
572
+ attr_accessor :callback_num_len
573
+ attr_accessor :callback_num_pres_ind_len
574
+ attr_accessor :callback_num_atag_len
575
+ attr_accessor :source_subaddress_len
576
+ attr_accessor :dest_subaddress_len
577
+ attr_accessor :user_response_code_len
578
+ attr_accessor :display_time_len
579
+ attr_accessor :sms_signal_len
580
+ attr_accessor :ms_validity_len
581
+ attr_accessor :ms_msg_wait_facilities_len
582
+ attr_accessor :number_of_messages_len
583
+ attr_accessor :alert_on_msg_delivery_len
584
+ attr_accessor :language_indicator_len
585
+ attr_accessor :its_reply_type_len
586
+ attr_accessor :its_session_info_len
587
+ attr_accessor :ussd_service_op_len
588
+ end
589
+ end
590
+ end
591
+ end