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