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.
- data/MIT-LICENSE +21 -0
- data/README +30 -0
- data/anthill_smpp_ruby.gemspec +18 -0
- data/changelog +43 -0
- data/data/dumps/random_command.dump +1 -0
- data/data/dumps/smpp_alert_notification.dump +1 -0
- data/data/dumps/smpp_bind_receiver.dump +1 -0
- data/data/dumps/smpp_bind_receiver_resp.dump +1 -0
- data/data/dumps/smpp_bind_transceiver.dump +1 -0
- data/data/dumps/smpp_bind_transceiver_1.dump +2 -0
- data/data/dumps/smpp_bind_transceiver_resp.dump +1 -0
- data/data/dumps/smpp_bind_transmitter.dump +1 -0
- data/data/dumps/smpp_bind_transmitter_resp.dump +1 -0
- data/data/dumps/smpp_broadcast_sm.dump +1 -0
- data/data/dumps/smpp_broadcast_sm_resp.dump +1 -0
- data/data/dumps/smpp_cancel_broadcast_sm.dump +1 -0
- data/data/dumps/smpp_cancel_broadcast_sm_resp.dump +1 -0
- data/data/dumps/smpp_cancel_sm.dump +1 -0
- data/data/dumps/smpp_cancel_sm_resp.dump +1 -0
- data/data/dumps/smpp_data_sm.dump +1 -0
- data/data/dumps/smpp_data_sm_resp.dump +1 -0
- data/data/dumps/smpp_deliver_sm.dump +1 -0
- data/data/dumps/smpp_deliver_sm_resp.dump +1 -0
- data/data/dumps/smpp_enquire_link.dump +1 -0
- data/data/dumps/smpp_enquire_link_resp.dump +1 -0
- data/data/dumps/smpp_generic_nack.dump +1 -0
- data/data/dumps/smpp_outbind.dump +1 -0
- data/data/dumps/smpp_query_broadcast_sm.dump +1 -0
- data/data/dumps/smpp_query_broadcast_sm_resp.dump +1 -0
- data/data/dumps/smpp_query_broadcast_sm_resp_1.dump +1 -0
- data/data/dumps/smpp_query_sm.dump +1 -0
- data/data/dumps/smpp_query_sm_resp.dump +1 -0
- data/data/dumps/smpp_replace_sm.dump +1 -0
- data/data/dumps/smpp_replace_sm_resp.dump +1 -0
- data/data/dumps/smpp_submit_multi.dump +1 -0
- data/data/dumps/smpp_submit_multi_resp.dump +1 -0
- data/data/dumps/smpp_submit_sm.dump +1 -0
- data/data/dumps/smpp_submit_sm_resp.dump +1 -0
- data/data/dumps/smpp_unbind.dump +1 -0
- data/data/dumps/smpp_unbind_resp.dump +1 -0
- data/data/pdus/random_command.xml +35 -0
- data/data/pdus/smpp_alert_notification.xml +14 -0
- data/data/pdus/smpp_alert_notification_no_optional.xml +13 -0
- data/data/pdus/smpp_bind_receiver.xml +17 -0
- data/data/pdus/smpp_bind_receiver_resp.xml +12 -0
- data/data/pdus/smpp_bind_receiver_resp_no_optional.xml +11 -0
- data/data/pdus/smpp_bind_transceiver.xml +17 -0
- data/data/pdus/smpp_bind_transceiver_resp.xml +12 -0
- data/data/pdus/smpp_bind_transceiver_resp_no_optional.xml +11 -0
- data/data/pdus/smpp_bind_transmitter.xml +17 -0
- data/data/pdus/smpp_bind_transmitter_resp.xml +12 -0
- data/data/pdus/smpp_bind_transmitter_resp_no_optional.xml +11 -0
- data/data/pdus/smpp_broadcast_sm.xml +47 -0
- data/data/pdus/smpp_broadcast_sm_no_optional.xml +26 -0
- data/data/pdus/smpp_broadcast_sm_resp.xml +14 -0
- data/data/pdus/smpp_broadcast_sm_resp_no_optional.xml +8 -0
- data/data/pdus/smpp_cancel_broadcast_sm.xml +17 -0
- data/data/pdus/smpp_cancel_broadcast_sm_no_optional.xml +15 -0
- data/data/pdus/smpp_cancel_broadcast_sm_resp.xml +7 -0
- data/data/pdus/smpp_cancel_sm.xml +18 -0
- data/data/pdus/smpp_cancel_sm_resp.xml +10 -0
- data/data/pdus/smpp_commands.xsd +914 -0
- data/data/pdus/smpp_data_sm.xml +58 -0
- data/data/pdus/smpp_data_sm_no_optional.xml +17 -0
- data/data/pdus/smpp_data_sm_resp.xml +15 -0
- data/data/pdus/smpp_data_sm_resp_no_optional.xml +8 -0
- data/data/pdus/smpp_deliver_sm.xml +46 -0
- data/data/pdus/smpp_deliver_sm_no_optional.xml +25 -0
- data/data/pdus/smpp_deliver_sm_resp.xml +14 -0
- data/data/pdus/smpp_deliver_sm_resp_no_optional.xml +8 -0
- data/data/pdus/smpp_enquire_link.xml +10 -0
- data/data/pdus/smpp_enquire_link_resp.xml +10 -0
- data/data/pdus/smpp_generic_nack.xml +10 -0
- data/data/pdus/smpp_outbind.xml +12 -0
- data/data/pdus/smpp_query_broadcast_sm.xml +12 -0
- data/data/pdus/smpp_query_broadcast_sm_no_optional.xml +11 -0
- data/data/pdus/smpp_query_broadcast_sm_resp.xml +17 -0
- data/data/pdus/smpp_query_broadcast_sm_resp_no_optional.xml +15 -0
- data/data/pdus/smpp_query_sm.xml +11 -0
- data/data/pdus/smpp_query_sm_resp.xml +11 -0
- data/data/pdus/smpp_replace_sm.xml +18 -0
- data/data/pdus/smpp_replace_sm_no_optional.xml +17 -0
- data/data/pdus/smpp_replace_sm_resp.xml +7 -0
- data/data/pdus/smpp_submit_multi.xml +73 -0
- data/data/pdus/smpp_submit_multi_no_optional.xml +51 -0
- data/data/pdus/smpp_submit_multi_resp.xml +35 -0
- data/data/pdus/smpp_submit_sm.xml +57 -0
- data/data/pdus/smpp_submit_sm_no_optional.xml +28 -0
- data/data/pdus/smpp_submit_sm_resp.xml +8 -0
- data/data/pdus/smpp_unbind.xml +10 -0
- data/data/pdus/smpp_unbind_resp.xml +10 -0
- data/examples/dump_viewer.rb +298 -0
- data/examples/pdu_composer.rb +1331 -0
- data/knownbugs +24 -0
- data/lib/anthill_smpp_ruby.rb +83 -0
- data/lib/i_smpp_outputter.rb +425 -0
- data/lib/pdu/smpp_alert_notification.rb +132 -0
- data/lib/pdu/smpp_bind.rb +102 -0
- data/lib/pdu/smpp_bind_receiver.rb +29 -0
- data/lib/pdu/smpp_bind_receiver_resp.rb +30 -0
- data/lib/pdu/smpp_bind_resp.rb +100 -0
- data/lib/pdu/smpp_bind_transceiver.rb +29 -0
- data/lib/pdu/smpp_bind_transceiver_resp.rb +31 -0
- data/lib/pdu/smpp_bind_transmitter.rb +29 -0
- data/lib/pdu/smpp_bind_transmitter_resp.rb +30 -0
- data/lib/pdu/smpp_broadcast_sm.rb +566 -0
- data/lib/pdu/smpp_broadcast_sm_resp.rb +130 -0
- data/lib/pdu/smpp_cancel_broadcast_sm.rb +143 -0
- data/lib/pdu/smpp_cancel_broadcast_sm_resp.rb +60 -0
- data/lib/pdu/smpp_cancel_sm.rb +110 -0
- data/lib/pdu/smpp_cancel_sm_resp.rb +60 -0
- data/lib/pdu/smpp_data_sm.rb +679 -0
- data/lib/pdu/smpp_data_sm_resp.rb +148 -0
- data/lib/pdu/smpp_deliver_sm.rb +458 -0
- data/lib/pdu/smpp_deliver_sm_resp.rb +137 -0
- data/lib/pdu/smpp_enquire_link.rb +59 -0
- data/lib/pdu/smpp_enquire_link_resp.rb +61 -0
- data/lib/pdu/smpp_generic_nack.rb +61 -0
- data/lib/pdu/smpp_outbind.rb +71 -0
- data/lib/pdu/smpp_pdu.rb +90 -0
- data/lib/pdu/smpp_query_broadcast_sm.rb +120 -0
- data/lib/pdu/smpp_query_broadcast_sm_resp.rb +192 -0
- data/lib/pdu/smpp_query_sm.rb +92 -0
- data/lib/pdu/smpp_query_sm_resp.rb +92 -0
- data/lib/pdu/smpp_replace_sm.rb +172 -0
- data/lib/pdu/smpp_replace_sm_resp.rb +61 -0
- data/lib/pdu/smpp_resp.rb +40 -0
- data/lib/pdu/smpp_submit_multi.rb +517 -0
- data/lib/pdu/smpp_submit_multi_resp.rb +90 -0
- data/lib/pdu/smpp_submit_sm.rb +591 -0
- data/lib/pdu/smpp_submit_sm_resp.rb +72 -0
- data/lib/pdu/smpp_unbind.rb +60 -0
- data/lib/pdu/smpp_unbind_resp.rb +61 -0
- data/lib/smpp_constants.rb +917 -0
- data/lib/smpp_csv_outputter.rb +1601 -0
- data/lib/smpp_datatypes.rb +89 -0
- data/lib/smpp_decoder.rb +627 -0
- data/lib/smpp_encoder.rb +495 -0
- data/lib/smpp_hex_outputter.rb +36 -0
- data/lib/smpp_outputter_base.rb +315 -0
- data/lib/smpp_structures.rb +98 -0
- data/lib/smpp_txt_outputter.rb +1895 -0
- data/lib/smpp_validator.rb +373 -0
- data/lib/smpp_xml_outputter.rb +34 -0
- data/roadmap +18 -0
- data/setup.rb +1585 -0
- data/test/anthill_smpp_test.rb +29 -0
- data/test/smpp_codec_test.rb +30 -0
- data/test/smpp_datatypes_test.rb +69 -0
- data/test/smpp_outputter_test.rb +1261 -0
- data/test/smpp_parsing_test.rb +1758 -0
- data/test/smpp_rawdump_test.rb +2095 -0
- data/test/smpp_validator_test.rb +441 -0
- metadata +206 -0
|
@@ -0,0 +1,2095 @@
|
|
|
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
|
+
$:.unshift File.dirname(__FILE__) + '/../lib/'
|
|
19
|
+
$:.unshift File.dirname(__FILE__) + '/../lib/' + '/../../../AntHill/0.5/lib/'
|
|
20
|
+
|
|
21
|
+
require "test/unit"
|
|
22
|
+
require "anthill"
|
|
23
|
+
require "anthill_smpp"
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class SMPPRawdumpTest < Test::Unit::TestCase
|
|
27
|
+
def test_decode_smpp_bind_receiver
|
|
28
|
+
dump = String.new()
|
|
29
|
+
# read and decode package based on hex dump
|
|
30
|
+
dump << "00 00 00 2E 00 00 00 01 00 00 00 00 00 00 00 0B 53 79 73 74 65 6D 49 "
|
|
31
|
+
dump << "64 00 70 61 73 73 77 6F 72 64 00 53 4D 53 43 00 50 01 01 31 32 33 00 "
|
|
32
|
+
buffer = Majoron::AntHill::ByteBuffer.decode_hex(dump)
|
|
33
|
+
|
|
34
|
+
# declare variables
|
|
35
|
+
decoder = Majoron::AntHill::SMPP::SMPPDecoder.new()
|
|
36
|
+
validator = Majoron::AntHill::SMPP::SMPPValidator.new()
|
|
37
|
+
|
|
38
|
+
# decode package
|
|
39
|
+
decoder.append_buffer(buffer)
|
|
40
|
+
pdu = decoder.get_packet()
|
|
41
|
+
assert_not_nil pdu, "PDU is null"
|
|
42
|
+
pdu.decode_packet(decoder)
|
|
43
|
+
pdu.validate_packet(validator)
|
|
44
|
+
decoder.validate_offset(pdu.command_length())
|
|
45
|
+
|
|
46
|
+
# check instanse type and fields value
|
|
47
|
+
assert_instance_of(Majoron::AntHill::SMPP::SMPPBindReceiver, pdu, "PDU class is invalid" )
|
|
48
|
+
assert_equal 46, pdu.command_length
|
|
49
|
+
assert_equal Majoron::AntHill::SMPP::CommandId::CM_BIND_RECEIVER, pdu.command_id
|
|
50
|
+
assert_equal Majoron::AntHill::SMPP::ErrorCode::ESME_ROK, pdu.command_status
|
|
51
|
+
assert_equal 11, pdu.sequence_number
|
|
52
|
+
assert_equal "SystemId", pdu.system_id
|
|
53
|
+
assert_equal "password", pdu.password
|
|
54
|
+
assert_equal "SMSC", pdu.system_type
|
|
55
|
+
assert_equal Majoron::AntHill::SMPP::InterfaceVersion::SMPP_VER_5_0, pdu.interface_version
|
|
56
|
+
assert_equal Majoron::AntHill::SMPP::TON::INTERNATIONAL, pdu.addr_ton
|
|
57
|
+
assert_equal Majoron::AntHill::SMPP::NPI::ISDN, pdu.addr_npi
|
|
58
|
+
assert_equal "123", pdu.address_range
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def test_decode_smpp_bind_receiver_resp
|
|
62
|
+
dump = String.new()
|
|
63
|
+
# read and decode package based on hex dump
|
|
64
|
+
dump << "00 00 00 1c 80 00 00 01 00 00 00 00 00 00 24 ba 53 53 53 4d "
|
|
65
|
+
dump << "53 43 00 02 10 00 01 33 "
|
|
66
|
+
buffer = Majoron::AntHill::ByteBuffer.decode_hex(dump)
|
|
67
|
+
|
|
68
|
+
# declare variables
|
|
69
|
+
decoder = Majoron::AntHill::SMPP::SMPPDecoder.new()
|
|
70
|
+
validator = Majoron::AntHill::SMPP::SMPPValidator.new()
|
|
71
|
+
|
|
72
|
+
# decode package
|
|
73
|
+
decoder.append_buffer(buffer)
|
|
74
|
+
pdu = decoder.get_packet()
|
|
75
|
+
assert_not_nil pdu, "PDU is null"
|
|
76
|
+
pdu.decode_packet(decoder)
|
|
77
|
+
pdu.validate_packet(validator)
|
|
78
|
+
decoder.validate_offset(pdu.command_length())
|
|
79
|
+
|
|
80
|
+
# check instanse type and fields value
|
|
81
|
+
assert_instance_of(Majoron::AntHill::SMPP::SMPPBindReceiverResp, pdu, "PDU class is invalid" )
|
|
82
|
+
assert_equal 28, pdu.command_length
|
|
83
|
+
assert_equal Majoron::AntHill::SMPP::CommandId::CM_BIND_RECEIVER_RESP, pdu.command_id
|
|
84
|
+
assert_equal Majoron::AntHill::SMPP::ErrorCode::ESME_ROK, pdu.command_status
|
|
85
|
+
assert_equal 9402, pdu.sequence_number
|
|
86
|
+
assert_equal "SSSMSC", pdu.system_id
|
|
87
|
+
assert_equal Majoron::AntHill::SMPP::InterfaceVersion::SMPP_VER_3_3, pdu.sc_interface_version
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
def test_decode_smpp_bind_transceiver
|
|
91
|
+
dump = String.new()
|
|
92
|
+
# read and decode package based on hex dump
|
|
93
|
+
dump << "00 00 00 2E 00 00 00 09 00 00 00 00 00 00 00 0B 53 79 73 74 65 6D 49 "
|
|
94
|
+
dump << "64 00 70 61 73 73 77 6F 72 64 00 53 4D 53 43 00 50 01 01 31 32 33 00 "
|
|
95
|
+
buffer = Majoron::AntHill::ByteBuffer.decode_hex(dump)
|
|
96
|
+
|
|
97
|
+
# declare variables
|
|
98
|
+
decoder = Majoron::AntHill::SMPP::SMPPDecoder.new()
|
|
99
|
+
validator = Majoron::AntHill::SMPP::SMPPValidator.new()
|
|
100
|
+
|
|
101
|
+
# decode package
|
|
102
|
+
decoder.append_buffer(buffer)
|
|
103
|
+
pdu = decoder.get_packet()
|
|
104
|
+
assert_not_nil pdu, "PDU is null"
|
|
105
|
+
pdu.decode_packet(decoder)
|
|
106
|
+
pdu.validate_packet(validator)
|
|
107
|
+
decoder.validate_offset(pdu.command_length())
|
|
108
|
+
|
|
109
|
+
# check instanse type and fields value
|
|
110
|
+
assert_instance_of(Majoron::AntHill::SMPP::SMPPBindTransceiver, pdu, "PDU class is invalid" )
|
|
111
|
+
assert_equal 46, pdu.command_length
|
|
112
|
+
assert_equal Majoron::AntHill::SMPP::CommandId::CM_BIND_TRANSCEIVER, pdu.command_id
|
|
113
|
+
assert_equal Majoron::AntHill::SMPP::ErrorCode::ESME_ROK, pdu.command_status
|
|
114
|
+
assert_equal 11, pdu.sequence_number
|
|
115
|
+
assert_equal "SystemId", pdu.system_id
|
|
116
|
+
assert_equal "password", pdu.password
|
|
117
|
+
assert_equal "SMSC", pdu.system_type
|
|
118
|
+
assert_equal Majoron::AntHill::SMPP::InterfaceVersion::SMPP_VER_5_0, pdu.interface_version
|
|
119
|
+
assert_equal Majoron::AntHill::SMPP::TON::INTERNATIONAL, pdu.addr_ton
|
|
120
|
+
assert_equal Majoron::AntHill::SMPP::NPI::ISDN, pdu.addr_npi
|
|
121
|
+
assert_equal "123", pdu.address_range
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
def test_decode_smpp_bind_transceiver_resp
|
|
125
|
+
dump = String.new()
|
|
126
|
+
# read and decode package based on hex dump
|
|
127
|
+
dump << "00 00 00 1c 80 00 00 09 00 00 00 00 00 00 24 ba 53 53 53 4d "
|
|
128
|
+
dump << "53 43 00 02 10 00 01 33 "
|
|
129
|
+
buffer = Majoron::AntHill::ByteBuffer.decode_hex(dump)
|
|
130
|
+
|
|
131
|
+
# declare variables
|
|
132
|
+
decoder = Majoron::AntHill::SMPP::SMPPDecoder.new()
|
|
133
|
+
validator = Majoron::AntHill::SMPP::SMPPValidator.new()
|
|
134
|
+
|
|
135
|
+
# decode package
|
|
136
|
+
decoder.append_buffer(buffer)
|
|
137
|
+
pdu = decoder.get_packet()
|
|
138
|
+
assert_not_nil pdu, "PDU is null"
|
|
139
|
+
pdu.decode_packet(decoder)
|
|
140
|
+
pdu.validate_packet(validator)
|
|
141
|
+
decoder.validate_offset(pdu.command_length())
|
|
142
|
+
|
|
143
|
+
# check instanse type and fields value
|
|
144
|
+
assert_instance_of(Majoron::AntHill::SMPP::SMPPBindTransceiverResp, pdu, "PDU class is invalid" )
|
|
145
|
+
assert_equal 28, pdu.command_length
|
|
146
|
+
assert_equal Majoron::AntHill::SMPP::CommandId::CM_BIND_TRANSCEIVER_RESP, pdu.command_id
|
|
147
|
+
assert_equal Majoron::AntHill::SMPP::ErrorCode::ESME_ROK, pdu.command_status
|
|
148
|
+
assert_equal 9402, pdu.sequence_number
|
|
149
|
+
assert_equal "SSSMSC", pdu.system_id
|
|
150
|
+
assert_equal Majoron::AntHill::SMPP::InterfaceVersion::SMPP_VER_3_3, pdu.sc_interface_version
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
def test_decode_smpp_bind_transmitter
|
|
154
|
+
dump = String.new()
|
|
155
|
+
# read and decode package based on hex dump
|
|
156
|
+
dump << "00 00 00 2E 00 00 00 02 00 00 00 00 00 00 00 0B 53 79 73 74 65 6D 49 "
|
|
157
|
+
dump << "64 00 70 61 73 73 77 6F 72 64 00 53 4D 53 43 00 50 01 01 31 32 33 00 "
|
|
158
|
+
buffer = Majoron::AntHill::ByteBuffer.decode_hex(dump)
|
|
159
|
+
|
|
160
|
+
# declare variables
|
|
161
|
+
decoder = Majoron::AntHill::SMPP::SMPPDecoder.new()
|
|
162
|
+
validator = Majoron::AntHill::SMPP::SMPPValidator.new()
|
|
163
|
+
|
|
164
|
+
# decode package
|
|
165
|
+
decoder.append_buffer(buffer)
|
|
166
|
+
pdu = decoder.get_packet()
|
|
167
|
+
assert_not_nil pdu, "PDU is null"
|
|
168
|
+
pdu.decode_packet(decoder)
|
|
169
|
+
pdu.validate_packet(validator)
|
|
170
|
+
decoder.validate_offset(pdu.command_length())
|
|
171
|
+
|
|
172
|
+
# check instanse type and fields value
|
|
173
|
+
assert_instance_of(Majoron::AntHill::SMPP::SMPPBindTransmitter, pdu, "PDU class is invalid" )
|
|
174
|
+
assert_equal 46, pdu.command_length
|
|
175
|
+
assert_equal Majoron::AntHill::SMPP::CommandId::CM_BIND_TRANSMITTER, pdu.command_id
|
|
176
|
+
assert_equal Majoron::AntHill::SMPP::ErrorCode::ESME_ROK, pdu.command_status
|
|
177
|
+
assert_equal 11, pdu.sequence_number
|
|
178
|
+
assert_equal "SystemId", pdu.system_id
|
|
179
|
+
assert_equal "password", pdu.password
|
|
180
|
+
assert_equal "SMSC", pdu.system_type
|
|
181
|
+
assert_equal Majoron::AntHill::SMPP::InterfaceVersion::SMPP_VER_5_0, pdu.interface_version
|
|
182
|
+
assert_equal Majoron::AntHill::SMPP::TON::INTERNATIONAL, pdu.addr_ton
|
|
183
|
+
assert_equal Majoron::AntHill::SMPP::NPI::ISDN, pdu.addr_npi
|
|
184
|
+
assert_equal "123", pdu.address_range
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
def test_decode_smpp_bind_transmitter_invalid_command_length
|
|
188
|
+
dump = String.new()
|
|
189
|
+
# read and decode package based on hex dump
|
|
190
|
+
dump << "10 00 00 31 00 00 00 02 00 00 00 00 00 00 00 01 53 79 73 74 65 6d 49 "
|
|
191
|
+
dump << "44 00 50 61 73 73 77 6f 72 64 00 53 79 73 54 79 70 65 00 01 01 01 31 "
|
|
192
|
+
dump << "32 33 00"
|
|
193
|
+
buffer = Majoron::AntHill::ByteBuffer.decode_hex(dump)
|
|
194
|
+
|
|
195
|
+
# declare variables
|
|
196
|
+
decoder = Majoron::AntHill::SMPP::SMPPDecoder.new()
|
|
197
|
+
validator = Majoron::AntHill::SMPP::SMPPValidator.new()
|
|
198
|
+
|
|
199
|
+
# decode package
|
|
200
|
+
decoder.append_buffer(buffer)
|
|
201
|
+
pdu = decoder.get_packet()
|
|
202
|
+
assert_not_nil pdu, "PDU is null"
|
|
203
|
+
pdu.decode_packet(decoder)
|
|
204
|
+
pdu.validate_packet(validator)
|
|
205
|
+
assert_raise RuntimeError do
|
|
206
|
+
decoder.validate_offset(pdu.command_length())
|
|
207
|
+
end
|
|
208
|
+
|
|
209
|
+
# check instanse type and fields value
|
|
210
|
+
assert_instance_of(Majoron::AntHill::SMPP::SMPPBindTransmitter, pdu, "PDU class is invalid" )
|
|
211
|
+
assert_equal 268435505, pdu.command_length
|
|
212
|
+
assert_equal Majoron::AntHill::SMPP::CommandId::CM_BIND_TRANSMITTER, pdu.command_id
|
|
213
|
+
assert_equal Majoron::AntHill::SMPP::ErrorCode::ESME_ROK, pdu.command_status
|
|
214
|
+
assert_equal 1, pdu.sequence_number
|
|
215
|
+
assert_equal "SystemID", pdu.system_id
|
|
216
|
+
assert_equal "Password", pdu.password
|
|
217
|
+
assert_equal "SysType", pdu.system_type
|
|
218
|
+
assert_equal 1, pdu.interface_version
|
|
219
|
+
assert_equal Majoron::AntHill::SMPP::TON::INTERNATIONAL, pdu.addr_ton
|
|
220
|
+
assert_equal Majoron::AntHill::SMPP::NPI::ISDN, pdu.addr_npi
|
|
221
|
+
assert_equal "123", pdu.address_range
|
|
222
|
+
end
|
|
223
|
+
|
|
224
|
+
|
|
225
|
+
|
|
226
|
+
def test_decode_smpp_bind_transmitter_resp
|
|
227
|
+
dump = String.new()
|
|
228
|
+
# read and decode package based on hex dump
|
|
229
|
+
dump << "00 00 00 1c 80 00 00 02 00 00 00 00 00 00 24 ba 53 53 53 4d "
|
|
230
|
+
dump << "53 43 00 02 10 00 01 33 "
|
|
231
|
+
buffer = Majoron::AntHill::ByteBuffer.decode_hex(dump)
|
|
232
|
+
|
|
233
|
+
# declare variables
|
|
234
|
+
decoder = Majoron::AntHill::SMPP::SMPPDecoder.new()
|
|
235
|
+
validator = Majoron::AntHill::SMPP::SMPPValidator.new()
|
|
236
|
+
|
|
237
|
+
# decode package
|
|
238
|
+
decoder.append_buffer(buffer)
|
|
239
|
+
pdu = decoder.get_packet()
|
|
240
|
+
assert_not_nil pdu, "PDU is null"
|
|
241
|
+
pdu.decode_packet(decoder)
|
|
242
|
+
pdu.validate_packet(validator)
|
|
243
|
+
decoder.validate_offset(pdu.command_length())
|
|
244
|
+
|
|
245
|
+
# check instanse type and fields value
|
|
246
|
+
assert_instance_of(Majoron::AntHill::SMPP::SMPPBindTransmitterResp, pdu, "PDU class is invalid" )
|
|
247
|
+
assert_equal 28, pdu.command_length
|
|
248
|
+
assert_equal Majoron::AntHill::SMPP::CommandId::CM_BIND_TRANSMITTER_RESP, pdu.command_id
|
|
249
|
+
assert_equal Majoron::AntHill::SMPP::ErrorCode::ESME_ROK, pdu.command_status
|
|
250
|
+
assert_equal 9402, pdu.sequence_number
|
|
251
|
+
assert_equal "SSSMSC", pdu.system_id
|
|
252
|
+
assert_equal Majoron::AntHill::SMPP::InterfaceVersion::SMPP_VER_3_3, pdu.sc_interface_version
|
|
253
|
+
end
|
|
254
|
+
|
|
255
|
+
def test_decode_smpp_submit_sm
|
|
256
|
+
dump = String.new()
|
|
257
|
+
# read and decode package based on hex dump
|
|
258
|
+
dump << "00 00 00 51 00 00 00 04 00 00 00 00 00 00 2C F9 00 00 01 33 "
|
|
259
|
+
dump << "33 31 31 00 01 01 37 39 32 31 31 32 33 34 35 36 37 00 00 00 "
|
|
260
|
+
dump << "00 00 00 00 00 08 00 21 68 65 72 65 20 69 73 20 74 65 78 74 "
|
|
261
|
+
dump << "20 6F 66 20 74 68 65 20 73 68 6F 72 74 20 6D 65 73 73 61 67 "
|
|
262
|
+
dump << "65 "
|
|
263
|
+
|
|
264
|
+
buffer = Majoron::AntHill::ByteBuffer.decode_hex(dump)
|
|
265
|
+
|
|
266
|
+
# declare variables
|
|
267
|
+
decoder = Majoron::AntHill::SMPP::SMPPDecoder.new()
|
|
268
|
+
validator = Majoron::AntHill::SMPP::SMPPValidator.new()
|
|
269
|
+
|
|
270
|
+
# decode package
|
|
271
|
+
decoder.append_buffer(buffer)
|
|
272
|
+
pdu = decoder.get_packet()
|
|
273
|
+
assert_not_nil pdu, "PDU is null"
|
|
274
|
+
pdu.decode_packet(decoder)
|
|
275
|
+
pdu.validate_packet(validator)
|
|
276
|
+
decoder.validate_offset(pdu.command_length())
|
|
277
|
+
|
|
278
|
+
# check instanse type and fields value
|
|
279
|
+
assert_instance_of(Majoron::AntHill::SMPP::SMPPSubmitSM, pdu, "PDU class is invalid" )
|
|
280
|
+
assert_equal 81, pdu.command_length
|
|
281
|
+
assert_equal Majoron::AntHill::SMPP::CommandId::CM_SUBMIT_SM, pdu.command_id
|
|
282
|
+
assert_equal Majoron::AntHill::SMPP::ErrorCode::ESME_ROK, pdu.command_status
|
|
283
|
+
assert_equal 11513, pdu.sequence_number
|
|
284
|
+
assert_equal "", pdu.service_type
|
|
285
|
+
assert_equal Majoron::AntHill::SMPP::TON::UNKNOWN, pdu.source_addr_ton
|
|
286
|
+
assert_equal Majoron::AntHill::SMPP::NPI::ISDN, pdu.source_addr_npi
|
|
287
|
+
assert_equal "3311", pdu.source_addr
|
|
288
|
+
assert_equal Majoron::AntHill::SMPP::TON::INTERNATIONAL, pdu.dest_addr_ton
|
|
289
|
+
assert_equal Majoron::AntHill::SMPP::NPI::ISDN, pdu.dest_addr_npi
|
|
290
|
+
assert_equal "79211234567", pdu.dest_addr
|
|
291
|
+
assert_equal 0, pdu.esm_class
|
|
292
|
+
assert_equal 8, pdu.data_coding
|
|
293
|
+
assert_equal "here is text of the short message", pdu.short_message
|
|
294
|
+
end
|
|
295
|
+
|
|
296
|
+
def test_decode_smpp_submit_sm_invalid_schedule_delivery_time
|
|
297
|
+
dump = String.new()
|
|
298
|
+
# read and decode package based on hex dump
|
|
299
|
+
dump << "0 0 0 d7 0 0 0 4 0 0 0 0 0 0 0 1 53 4d 53 31 32 0 1 1 31 32 "
|
|
300
|
+
dump << "33 0 1 1 31 32 33 0 1 1 1 66 61 6b 65 0 66 61 6b 65 0 1 1 1 "
|
|
301
|
+
dump << "1 7 6d 65 73 73 61 67 65 2 4 0 2 0 1 2 a 0 2 0 1 0 d 0 1 1 2 "
|
|
302
|
+
dump << "b 0 2 0 1 0 5 0 1 1 2 c 0 2 0 1 2 e 0 1 1 2 f 0 1 1 4 26 0 1 "
|
|
303
|
+
dump << "1 0 19 0 1 1 4 24 0 3 1 2 3 2 1 0 1 1 3 81 0 3 1 2 3 3 2 0 1 "
|
|
304
|
+
dump << "1 3 3 0 3 1 2 3 2 2 0 3 1 2 3 2 3 0 3 1 2 3 2 5 0 1 1 12 1 0 "
|
|
305
|
+
dump << "1 1 12 3 0 2 0 1 12 4 0 1 1 0 30 0 1 1 3 4 0 1 1 13 c 0 1 1 2 "
|
|
306
|
+
dump << "d 0 1 1 13 80 0 1 1 13 83 0 2 0 1 5 1 0 1 1"
|
|
307
|
+
buffer = Majoron::AntHill::ByteBuffer.decode_hex(dump)
|
|
308
|
+
|
|
309
|
+
# declare variables
|
|
310
|
+
decoder = Majoron::AntHill::SMPP::SMPPDecoder.new()
|
|
311
|
+
validator = Majoron::AntHill::SMPP::SMPPValidator.new()
|
|
312
|
+
|
|
313
|
+
# decode package
|
|
314
|
+
decoder.append_buffer(buffer)
|
|
315
|
+
pdu = decoder.get_packet()
|
|
316
|
+
assert_not_nil pdu, "PDU is null"
|
|
317
|
+
pdu.decode_packet(decoder)
|
|
318
|
+
assert_raise RuntimeError do
|
|
319
|
+
pdu.validate_packet(validator)
|
|
320
|
+
end
|
|
321
|
+
decoder.validate_offset(pdu.command_length())
|
|
322
|
+
|
|
323
|
+
# check instanse type and fields value
|
|
324
|
+
assert_instance_of(Majoron::AntHill::SMPP::SMPPSubmitSM, pdu, "PDU class is invalid" )
|
|
325
|
+
assert_equal 215, pdu.command_length
|
|
326
|
+
assert_equal Majoron::AntHill::SMPP::CommandId::CM_SUBMIT_SM, pdu.command_id
|
|
327
|
+
assert_equal Majoron::AntHill::SMPP::ErrorCode::ESME_ROK, pdu.command_status
|
|
328
|
+
assert_equal 1, pdu.sequence_number
|
|
329
|
+
assert_equal "SMS12", pdu.service_type
|
|
330
|
+
assert_equal Majoron::AntHill::SMPP::TON::INTERNATIONAL, pdu.source_addr_ton
|
|
331
|
+
assert_equal Majoron::AntHill::SMPP::NPI::ISDN, pdu.source_addr_npi
|
|
332
|
+
assert_equal "123", pdu.source_addr
|
|
333
|
+
assert_equal Majoron::AntHill::SMPP::TON::INTERNATIONAL, pdu.dest_addr_ton
|
|
334
|
+
assert_equal Majoron::AntHill::SMPP::NPI::ISDN, pdu.dest_addr_npi
|
|
335
|
+
assert_equal "123", pdu.dest_addr
|
|
336
|
+
assert_equal 1, pdu.esm_class
|
|
337
|
+
assert_equal 1, pdu.protocol_id
|
|
338
|
+
assert_equal 1, pdu.priority_flag
|
|
339
|
+
assert_equal "fake", pdu.schedule_delivery_time
|
|
340
|
+
assert_equal "fake", pdu.validity_period
|
|
341
|
+
assert_equal 1, pdu.registered_delivery
|
|
342
|
+
assert_equal 1, pdu.replace_if_present_flag
|
|
343
|
+
assert_equal 1, pdu.data_coding
|
|
344
|
+
assert_equal 1, pdu.sm_default_msg_id
|
|
345
|
+
assert_equal 7, pdu.sm_length
|
|
346
|
+
assert_equal "message", pdu.short_message
|
|
347
|
+
|
|
348
|
+
# Check optional fields value
|
|
349
|
+
assert_equal 1, pdu.user_message_reference
|
|
350
|
+
assert_equal 1, pdu.source_port
|
|
351
|
+
assert_equal 1, pdu.source_addr_subunit
|
|
352
|
+
assert_equal 1, pdu.destination_port
|
|
353
|
+
assert_equal 1, pdu.dest_addr_subunit
|
|
354
|
+
assert_equal 1, pdu.sar_msg_ref_num
|
|
355
|
+
assert_equal 1, pdu.sar_total_segments
|
|
356
|
+
assert_equal 1, pdu.sar_segment_seqnum
|
|
357
|
+
assert_equal 1, pdu.more_messages_to_send
|
|
358
|
+
assert_equal 1, pdu.payload_type
|
|
359
|
+
assert_equal "01 02 03", Majoron::AntHill::ByteBuffer.encode_hex(pdu.message_payload).strip.upcase
|
|
360
|
+
assert_equal 1, pdu.privacy_indicator
|
|
361
|
+
assert_equal "01 02 03", Majoron::AntHill::ByteBuffer.encode_hex(pdu.callback_num).strip.upcase
|
|
362
|
+
assert_equal 1, pdu.callback_num_pres_ind
|
|
363
|
+
assert_equal "01 02 03", Majoron::AntHill::ByteBuffer.encode_hex(pdu.callback_num_atag).strip.upcase
|
|
364
|
+
assert_equal "01 02 03", Majoron::AntHill::ByteBuffer.encode_hex(pdu.source_subaddress).strip.upcase
|
|
365
|
+
assert_equal "01 02 03", Majoron::AntHill::ByteBuffer.encode_hex(pdu.dest_subaddress).strip.upcase
|
|
366
|
+
assert_equal 1, pdu.user_response_code
|
|
367
|
+
assert_equal 1, pdu.display_time
|
|
368
|
+
assert_equal 1, pdu.sms_signal
|
|
369
|
+
assert_equal 1, pdu.ms_validity
|
|
370
|
+
assert_equal 1, pdu.ms_msg_wait_facilities
|
|
371
|
+
assert_equal 1, pdu.number_of_messages
|
|
372
|
+
assert_equal 1, pdu.alert_on_msg_delivery
|
|
373
|
+
assert_equal 1, pdu.language_indicator
|
|
374
|
+
assert_equal 1, pdu.its_reply_type
|
|
375
|
+
assert_equal 1, pdu.its_session_info
|
|
376
|
+
assert_equal 1, pdu.ussd_service_op
|
|
377
|
+
|
|
378
|
+
# Check optional fields len value
|
|
379
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::WORD_LEN, pdu.user_message_reference_len
|
|
380
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::WORD_LEN, pdu.source_port_len
|
|
381
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::BYTE_LEN, pdu.source_addr_subunit_len
|
|
382
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::WORD_LEN, pdu.destination_port_len
|
|
383
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::BYTE_LEN, pdu.dest_addr_subunit_len
|
|
384
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::WORD_LEN, pdu.sar_msg_ref_num_len
|
|
385
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::BYTE_LEN, pdu.sar_total_segments_len
|
|
386
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::BYTE_LEN, pdu.sar_segment_seqnum_len
|
|
387
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::BYTE_LEN, pdu.more_messages_to_send_len
|
|
388
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::BYTE_LEN, pdu.payload_type_len
|
|
389
|
+
assert_equal 3, pdu.message_payload_len
|
|
390
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::BYTE_LEN, pdu.privacy_indicator_len
|
|
391
|
+
assert_equal 3, pdu.callback_num_len
|
|
392
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::BYTE_LEN, pdu.callback_num_pres_ind_len
|
|
393
|
+
assert_equal 3, pdu.callback_num_atag_len
|
|
394
|
+
assert_equal 3, pdu.source_subaddress_len
|
|
395
|
+
assert_equal 3, pdu.dest_subaddress_len
|
|
396
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::BYTE_LEN, pdu.user_response_code_len
|
|
397
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::BYTE_LEN, pdu.display_time_len
|
|
398
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::WORD_LEN, pdu.sms_signal_len
|
|
399
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::BYTE_LEN, pdu.ms_validity_len
|
|
400
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::BYTE_LEN, pdu.ms_msg_wait_facilities_len
|
|
401
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::BYTE_LEN, pdu.number_of_messages_len
|
|
402
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::BYTE_LEN, pdu.alert_on_msg_delivery_len
|
|
403
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::BYTE_LEN, pdu.language_indicator_len
|
|
404
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::BYTE_LEN, pdu.its_reply_type_len
|
|
405
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::WORD_LEN, pdu.its_session_info_len
|
|
406
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::BYTE_LEN, pdu.ussd_service_op_len
|
|
407
|
+
end
|
|
408
|
+
|
|
409
|
+
|
|
410
|
+
def test_decode_smpp_submit_sm_resp
|
|
411
|
+
dump = String.new()
|
|
412
|
+
# read and decode package based on hex dump
|
|
413
|
+
dump << "00 00 00 14 80 00 00 04 00 00 00 00 00 00 00 0C 31 32 33 00"
|
|
414
|
+
buffer = Majoron::AntHill::ByteBuffer.decode_hex(dump)
|
|
415
|
+
|
|
416
|
+
# declare variables
|
|
417
|
+
decoder = Majoron::AntHill::SMPP::SMPPDecoder.new()
|
|
418
|
+
validator = Majoron::AntHill::SMPP::SMPPValidator.new()
|
|
419
|
+
|
|
420
|
+
# decode package
|
|
421
|
+
decoder.append_buffer(buffer)
|
|
422
|
+
pdu = decoder.get_packet()
|
|
423
|
+
assert_not_nil pdu, "PDU is null"
|
|
424
|
+
pdu.decode_packet(decoder)
|
|
425
|
+
pdu.validate_packet(validator)
|
|
426
|
+
decoder.validate_offset(pdu.command_length())
|
|
427
|
+
|
|
428
|
+
# check instanse type and fields value
|
|
429
|
+
assert_instance_of(Majoron::AntHill::SMPP::SMPPSubmitSMResp, pdu, "PDU class is invalid" )
|
|
430
|
+
assert_equal 20, pdu.command_length
|
|
431
|
+
assert_equal Majoron::AntHill::SMPP::CommandId::CM_SUBMIT_SM_RESP, pdu.command_id
|
|
432
|
+
assert_equal Majoron::AntHill::SMPP::ErrorCode::ESME_ROK, pdu.command_status
|
|
433
|
+
assert_equal 12, pdu.sequence_number
|
|
434
|
+
assert_equal "123", pdu.message_id
|
|
435
|
+
|
|
436
|
+
end
|
|
437
|
+
|
|
438
|
+
def test_decode_smpp_submit_multi
|
|
439
|
+
dump = String.new()
|
|
440
|
+
# read and decode package based on hex dump
|
|
441
|
+
dump << "00 00 00 E2 00 00 00 21 00 00 00 00 00 00 00 0C 73 72 76 74 70 00 01 "
|
|
442
|
+
dump << "02 31 32 33 00 06 02 64 69 73 74 72 5F 6C 69 73 74 31 00 02 64 69 73 "
|
|
443
|
+
dump << "74 72 5F 6C 69 73 74 32 00 01 31 31 31 32 33 00 01 32 32 32 32 33 00 "
|
|
444
|
+
dump << "02 64 69 73 74 72 5F 6C 69 73 74 31 00 02 64 69 73 74 72 5F 6C 69 73 "
|
|
445
|
+
dump << "74 32 00 01 02 03 00 00 04 05 06 07 00 02 0A 00 02 00 02 00 0D 00 01 "
|
|
446
|
+
dump << "03 02 0B 00 02 00 04 00 05 00 01 05 02 0C 00 02 00 06 02 0E 00 01 07 "
|
|
447
|
+
dump << "02 0F 00 01 08 00 19 00 01 09 04 24 00 01 09 02 01 00 01 0A 03 81 00 "
|
|
448
|
+
dump << "04 01 02 AA FF 03 02 00 01 0B 03 03 00 04 01 02 AA FF 02 02 00 04 01 "
|
|
449
|
+
dump << "02 AA FF 02 03 00 04 01 02 AA FF 12 01 00 01 0C 12 03 00 02 00 0D 12 "
|
|
450
|
+
dump << "04 00 01 0E 00 30 00 01 0F 13 0C 00 01 10 02 0D 00 01 11"
|
|
451
|
+
buffer = Majoron::AntHill::ByteBuffer.decode_hex(dump)
|
|
452
|
+
|
|
453
|
+
# declare variables
|
|
454
|
+
decoder = Majoron::AntHill::SMPP::SMPPDecoder.new()
|
|
455
|
+
validator = Majoron::AntHill::SMPP::SMPPValidator.new()
|
|
456
|
+
|
|
457
|
+
# decode package
|
|
458
|
+
decoder.append_buffer(buffer)
|
|
459
|
+
pdu = decoder.get_packet()
|
|
460
|
+
assert_not_nil pdu, "PDU is null"
|
|
461
|
+
pdu.decode_packet(decoder)
|
|
462
|
+
pdu.validate_packet(validator)
|
|
463
|
+
decoder.validate_offset(pdu.command_length())
|
|
464
|
+
|
|
465
|
+
# check instanse type and fields value
|
|
466
|
+
assert_instance_of(Majoron::AntHill::SMPP::SMPPSubmitMulti, pdu, "PDU class is invalid" )
|
|
467
|
+
assert_equal 226, pdu.command_length
|
|
468
|
+
assert_equal Majoron::AntHill::SMPP::CommandId::CM_SUBMIT_MULTI, pdu.command_id
|
|
469
|
+
assert_equal Majoron::AntHill::SMPP::ErrorCode::ESME_ROK, pdu.command_status
|
|
470
|
+
assert_equal 12, pdu.sequence_number
|
|
471
|
+
assert_equal "srvtp", pdu.service_type
|
|
472
|
+
assert_equal Majoron::AntHill::SMPP::TON::INTERNATIONAL, pdu.source_addr_ton
|
|
473
|
+
assert_equal Majoron::AntHill::SMPP::NPI::DATA, pdu.source_addr_npi
|
|
474
|
+
assert_equal "123", pdu.source_addr
|
|
475
|
+
assert_equal 6, pdu.number_of_dest
|
|
476
|
+
assert_equal 6, pdu.dest_addresses.size()
|
|
477
|
+
|
|
478
|
+
assert_equal 2, pdu.dest_addresses[0].dest_flag
|
|
479
|
+
assert_equal "distr_list1", pdu.dest_addresses[0].distr_list_name
|
|
480
|
+
|
|
481
|
+
assert_equal 2, pdu.dest_addresses[1].dest_flag
|
|
482
|
+
assert_equal "distr_list2", pdu.dest_addresses[1].distr_list_name
|
|
483
|
+
|
|
484
|
+
assert_equal 1, pdu.dest_addresses[2].dest_flag
|
|
485
|
+
assert_equal 49, pdu.dest_addresses[2].address.ton
|
|
486
|
+
assert_equal 49, pdu.dest_addresses[2].address.npi
|
|
487
|
+
assert_equal "123", pdu.dest_addresses[2].address.address
|
|
488
|
+
|
|
489
|
+
assert_equal 1, pdu.dest_addresses[3].dest_flag
|
|
490
|
+
assert_equal 50, pdu.dest_addresses[3].address.ton
|
|
491
|
+
assert_equal 50, pdu.dest_addresses[3].address.npi
|
|
492
|
+
assert_equal "223", pdu.dest_addresses[3].address.address
|
|
493
|
+
|
|
494
|
+
assert_equal 2, pdu.dest_addresses[4].dest_flag
|
|
495
|
+
assert_equal "distr_list1", pdu.dest_addresses[4].distr_list_name
|
|
496
|
+
|
|
497
|
+
assert_equal 2, pdu.dest_addresses[5].dest_flag
|
|
498
|
+
assert_equal "distr_list2", pdu.dest_addresses[5].distr_list_name
|
|
499
|
+
|
|
500
|
+
assert_equal 1, pdu.esm_class
|
|
501
|
+
assert_equal 2, pdu.protocol_id
|
|
502
|
+
assert_equal 3, pdu.priority_flag
|
|
503
|
+
assert_equal "", pdu.schedule_delivery_time
|
|
504
|
+
assert_equal "", pdu.validity_period
|
|
505
|
+
assert_equal 4, pdu.registered_delivery
|
|
506
|
+
assert_equal 5, pdu.replace_if_present_flag
|
|
507
|
+
assert_equal 6, pdu.data_coding
|
|
508
|
+
assert_equal 7, pdu.sm_default_msg_id
|
|
509
|
+
assert_equal 0, pdu.sm_length
|
|
510
|
+
assert_equal "", pdu.short_message
|
|
511
|
+
|
|
512
|
+
# Check optional fields value
|
|
513
|
+
assert_equal 2, pdu.source_port
|
|
514
|
+
assert_equal 3, pdu.source_addr_subunit
|
|
515
|
+
assert_equal 4, pdu.destination_port
|
|
516
|
+
assert_equal 5, pdu.dest_addr_subunit
|
|
517
|
+
assert_equal 6, pdu.sar_msg_ref_num
|
|
518
|
+
assert_equal 7, pdu.sar_total_segments
|
|
519
|
+
assert_equal 8, pdu.sar_segment_seqnum
|
|
520
|
+
assert_equal 9, pdu.payload_type
|
|
521
|
+
assert_equal "09", Majoron::AntHill::ByteBuffer.encode_hex(pdu.message_payload).strip.upcase
|
|
522
|
+
assert_equal 10, pdu.privacy_indicator
|
|
523
|
+
assert_equal "01 02 AA FF", Majoron::AntHill::ByteBuffer.encode_hex(pdu.callback_num).strip.upcase
|
|
524
|
+
assert_equal 11, pdu.callback_num_pres_ind
|
|
525
|
+
assert_equal "01 02 AA FF", Majoron::AntHill::ByteBuffer.encode_hex(pdu.callback_num_atag).strip.upcase
|
|
526
|
+
assert_equal "01 02 AA FF", Majoron::AntHill::ByteBuffer.encode_hex(pdu.source_subaddress).strip.upcase
|
|
527
|
+
assert_equal "01 02 AA FF", Majoron::AntHill::ByteBuffer.encode_hex(pdu.dest_subaddress).strip.upcase
|
|
528
|
+
assert_equal 12, pdu.display_time
|
|
529
|
+
assert_equal 13, pdu.sms_signal
|
|
530
|
+
assert_equal 14, pdu.ms_validity
|
|
531
|
+
assert_equal 15, pdu.ms_msg_wait_facilities
|
|
532
|
+
assert_equal 16, pdu.alert_on_msg_delivery
|
|
533
|
+
assert_equal 17, pdu.language_indicator
|
|
534
|
+
|
|
535
|
+
# Check optional fields len value
|
|
536
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::WORD_LEN, pdu.source_port_len
|
|
537
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::BYTE_LEN, pdu.source_addr_subunit_len
|
|
538
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::WORD_LEN, pdu.destination_port_len
|
|
539
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::BYTE_LEN, pdu.dest_addr_subunit_len
|
|
540
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::WORD_LEN, pdu.sar_msg_ref_num_len
|
|
541
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::BYTE_LEN, pdu.sar_total_segments_len
|
|
542
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::BYTE_LEN, pdu.sar_segment_seqnum_len
|
|
543
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::BYTE_LEN, pdu.payload_type_len
|
|
544
|
+
assert_equal 1, pdu.message_payload_len
|
|
545
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::BYTE_LEN, pdu.privacy_indicator_len
|
|
546
|
+
assert_equal 4, pdu.callback_num_len
|
|
547
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::BYTE_LEN, pdu.callback_num_pres_ind_len
|
|
548
|
+
assert_equal 4, pdu.callback_num_atag_len
|
|
549
|
+
assert_equal 4, pdu.source_subaddress_len
|
|
550
|
+
assert_equal 4, pdu.dest_subaddress_len
|
|
551
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::BYTE_LEN, pdu.display_time_len
|
|
552
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::WORD_LEN, pdu.sms_signal_len
|
|
553
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::BYTE_LEN, pdu.ms_validity_len
|
|
554
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::BYTE_LEN, pdu.ms_msg_wait_facilities_len
|
|
555
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::BYTE_LEN, pdu.alert_on_msg_delivery_len
|
|
556
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::BYTE_LEN, pdu.language_indicator_len
|
|
557
|
+
end
|
|
558
|
+
|
|
559
|
+
|
|
560
|
+
def test_decode_smpp_submit_multi_invalid_schedule_delivery_time
|
|
561
|
+
dump = String.new()
|
|
562
|
+
# read and decode package based on hex dump
|
|
563
|
+
dump << "00 00 01 02 00 00 00 21 00 00 00 00 00 00 00 01 53 4d 53 00 01 "
|
|
564
|
+
dump << "01 31 32 33 00 09 02 44 69 73 74 72 4c 69 73 74 31 00 02 44 69 "
|
|
565
|
+
dump << "73 74 72 4c 69 73 74 32 00 02 44 69 73 74 72 4c 69 73 74 33 00 "
|
|
566
|
+
dump << "01 01 02 31 32 33 00 01 03 04 34 35 36 00 01 05 06 37 38 39 00 "
|
|
567
|
+
dump << "01 01 02 31 31 32 33 00 01 03 04 31 34 35 36 00 01 05 06 31 37 "
|
|
568
|
+
dump << "38 39 00 01 01 01 66 61 6b 65 00 66 61 6b 65 00 01 01 01 01 07 "
|
|
569
|
+
dump << "6d 65 73 73 61 67 65 02 04 00 02 00 01 02 0a 00 02 00 01 00 0d "
|
|
570
|
+
dump << "00 01 01 02 0b 00 02 00 01 00 05 00 01 01 02 0c 00 02 00 01 02 "
|
|
571
|
+
dump << "0e 00 01 01 02 0f 00 01 01 00 19 00 01 01 04 24 00 03 01 02 03 "
|
|
572
|
+
dump << "02 01 00 01 01 03 81 00 03 01 02 03 03 02 00 01 01 03 03 00 03 "
|
|
573
|
+
dump << "01 02 03 02 02 00 03 01 02 03 02 03 00 03 01 02 03 12 01 00 01 "
|
|
574
|
+
dump << "01 12 03 00 02 00 01 12 04 00 01 01 00 30 00 01 01 13 0c 00 01 "
|
|
575
|
+
dump << "01 02 0d 00 01 01"
|
|
576
|
+
|
|
577
|
+
|
|
578
|
+
buffer = Majoron::AntHill::ByteBuffer.decode_hex(dump)
|
|
579
|
+
|
|
580
|
+
# declare variables
|
|
581
|
+
decoder = Majoron::AntHill::SMPP::SMPPDecoder.new()
|
|
582
|
+
validator = Majoron::AntHill::SMPP::SMPPValidator.new()
|
|
583
|
+
|
|
584
|
+
# decode package
|
|
585
|
+
decoder.append_buffer(buffer)
|
|
586
|
+
pdu = decoder.get_packet()
|
|
587
|
+
assert_not_nil pdu, "PDU is null"
|
|
588
|
+
pdu.decode_packet(decoder)
|
|
589
|
+
assert_raise RuntimeError do
|
|
590
|
+
pdu.validate_packet(validator)
|
|
591
|
+
end
|
|
592
|
+
decoder.validate_offset(pdu.command_length())
|
|
593
|
+
|
|
594
|
+
# check instanse type and fields value
|
|
595
|
+
assert_instance_of(Majoron::AntHill::SMPP::SMPPSubmitMulti, pdu, "PDU class is invalid" )
|
|
596
|
+
assert_equal 258, pdu.command_length
|
|
597
|
+
assert_equal Majoron::AntHill::SMPP::CommandId::CM_SUBMIT_MULTI, pdu.command_id
|
|
598
|
+
assert_equal Majoron::AntHill::SMPP::ErrorCode::ESME_ROK, pdu.command_status
|
|
599
|
+
assert_equal 1, pdu.sequence_number
|
|
600
|
+
assert_equal "SMS", pdu.service_type
|
|
601
|
+
assert_equal Majoron::AntHill::SMPP::TON::INTERNATIONAL, pdu.source_addr_ton
|
|
602
|
+
assert_equal Majoron::AntHill::SMPP::NPI::ISDN, pdu.source_addr_npi
|
|
603
|
+
assert_equal "123", pdu.source_addr
|
|
604
|
+
assert_equal 9, pdu.number_of_dest
|
|
605
|
+
assert_equal 9, pdu.dest_addresses.size()
|
|
606
|
+
|
|
607
|
+
assert_equal 2, pdu.dest_addresses[0].dest_flag
|
|
608
|
+
assert_equal "DistrList1", pdu.dest_addresses[0].distr_list_name
|
|
609
|
+
|
|
610
|
+
assert_equal 2, pdu.dest_addresses[1].dest_flag
|
|
611
|
+
assert_equal "DistrList2", pdu.dest_addresses[1].distr_list_name
|
|
612
|
+
|
|
613
|
+
assert_equal 2, pdu.dest_addresses[2].dest_flag
|
|
614
|
+
assert_equal "DistrList3", pdu.dest_addresses[2].distr_list_name
|
|
615
|
+
|
|
616
|
+
assert_equal 1, pdu.dest_addresses[3].dest_flag
|
|
617
|
+
assert_equal 1, pdu.dest_addresses[3].address.ton
|
|
618
|
+
assert_equal 2, pdu.dest_addresses[3].address.npi
|
|
619
|
+
assert_equal "123", pdu.dest_addresses[3].address.address
|
|
620
|
+
|
|
621
|
+
assert_equal 1, pdu.dest_addresses[4].dest_flag
|
|
622
|
+
assert_equal 3, pdu.dest_addresses[4].address.ton
|
|
623
|
+
assert_equal 4, pdu.dest_addresses[4].address.npi
|
|
624
|
+
assert_equal "456", pdu.dest_addresses[4].address.address
|
|
625
|
+
|
|
626
|
+
assert_equal 1, pdu.dest_addresses[5].dest_flag
|
|
627
|
+
assert_equal 5, pdu.dest_addresses[5].address.ton
|
|
628
|
+
assert_equal 6, pdu.dest_addresses[5].address.npi
|
|
629
|
+
assert_equal "789", pdu.dest_addresses[5].address.address
|
|
630
|
+
|
|
631
|
+
|
|
632
|
+
assert_equal 1, pdu.dest_addresses[6].dest_flag
|
|
633
|
+
assert_equal 1, pdu.dest_addresses[6].address.ton
|
|
634
|
+
assert_equal 2, pdu.dest_addresses[6].address.npi
|
|
635
|
+
assert_equal "1123", pdu.dest_addresses[6].address.address
|
|
636
|
+
|
|
637
|
+
|
|
638
|
+
assert_equal 1, pdu.dest_addresses[7].dest_flag
|
|
639
|
+
assert_equal 3, pdu.dest_addresses[7].address.ton
|
|
640
|
+
assert_equal 4, pdu.dest_addresses[7].address.npi
|
|
641
|
+
assert_equal "1456", pdu.dest_addresses[7].address.address
|
|
642
|
+
|
|
643
|
+
assert_equal 1, pdu.dest_addresses[8].dest_flag
|
|
644
|
+
assert_equal 5, pdu.dest_addresses[8].address.ton
|
|
645
|
+
assert_equal 6, pdu.dest_addresses[8].address.npi
|
|
646
|
+
assert_equal "1789", pdu.dest_addresses[8].address.address
|
|
647
|
+
|
|
648
|
+
assert_equal 1, pdu.esm_class
|
|
649
|
+
assert_equal 1, pdu.protocol_id
|
|
650
|
+
assert_equal 1, pdu.priority_flag
|
|
651
|
+
assert_equal "fake", pdu.schedule_delivery_time
|
|
652
|
+
assert_equal "fake", pdu.validity_period
|
|
653
|
+
assert_equal 1, pdu.registered_delivery
|
|
654
|
+
assert_equal 1, pdu.replace_if_present_flag
|
|
655
|
+
assert_equal 1, pdu.data_coding
|
|
656
|
+
assert_equal 1, pdu.sm_default_msg_id
|
|
657
|
+
assert_equal 7, pdu.sm_length
|
|
658
|
+
assert_equal "message", pdu.short_message
|
|
659
|
+
|
|
660
|
+
# Check optional fields value
|
|
661
|
+
assert_equal 1, pdu.user_message_reference
|
|
662
|
+
assert_equal 1, pdu.source_port
|
|
663
|
+
assert_equal 1, pdu.source_addr_subunit
|
|
664
|
+
assert_equal 1, pdu.destination_port
|
|
665
|
+
assert_equal 1, pdu.dest_addr_subunit
|
|
666
|
+
assert_equal 1, pdu.sar_msg_ref_num
|
|
667
|
+
assert_equal 1, pdu.sar_total_segments
|
|
668
|
+
assert_equal 1, pdu.sar_segment_seqnum
|
|
669
|
+
assert_equal 1, pdu.payload_type
|
|
670
|
+
assert_equal "01 02 03", Majoron::AntHill::ByteBuffer.encode_hex(pdu.message_payload).strip.upcase
|
|
671
|
+
assert_equal 1, pdu.privacy_indicator
|
|
672
|
+
assert_equal "01 02 03", Majoron::AntHill::ByteBuffer.encode_hex(pdu.callback_num).strip.upcase
|
|
673
|
+
assert_equal 1, pdu.callback_num_pres_ind
|
|
674
|
+
assert_equal "01 02 03", Majoron::AntHill::ByteBuffer.encode_hex(pdu.callback_num_atag).strip.upcase
|
|
675
|
+
assert_equal "01 02 03", Majoron::AntHill::ByteBuffer.encode_hex(pdu.source_subaddress).strip.upcase
|
|
676
|
+
assert_equal "01 02 03", Majoron::AntHill::ByteBuffer.encode_hex(pdu.dest_subaddress).strip.upcase
|
|
677
|
+
assert_equal 1, pdu.display_time
|
|
678
|
+
assert_equal 1, pdu.sms_signal
|
|
679
|
+
assert_equal 1, pdu.ms_validity
|
|
680
|
+
assert_equal 1, pdu.ms_msg_wait_facilities
|
|
681
|
+
assert_equal 1, pdu.alert_on_msg_delivery
|
|
682
|
+
assert_equal 1, pdu.language_indicator
|
|
683
|
+
|
|
684
|
+
# Check optional fields len value
|
|
685
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::WORD_LEN, pdu.user_message_reference_len
|
|
686
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::WORD_LEN, pdu.source_port_len
|
|
687
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::BYTE_LEN, pdu.source_addr_subunit_len
|
|
688
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::WORD_LEN, pdu.destination_port_len
|
|
689
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::BYTE_LEN, pdu.dest_addr_subunit_len
|
|
690
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::WORD_LEN, pdu.sar_msg_ref_num_len
|
|
691
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::BYTE_LEN, pdu.sar_total_segments_len
|
|
692
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::BYTE_LEN, pdu.sar_segment_seqnum_len
|
|
693
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::BYTE_LEN, pdu.payload_type_len
|
|
694
|
+
assert_equal 3, pdu.message_payload_len
|
|
695
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::BYTE_LEN, pdu.privacy_indicator_len
|
|
696
|
+
assert_equal 3, pdu.callback_num_len
|
|
697
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::BYTE_LEN, pdu.callback_num_pres_ind_len
|
|
698
|
+
assert_equal 3, pdu.callback_num_atag_len
|
|
699
|
+
assert_equal 3, pdu.source_subaddress_len
|
|
700
|
+
assert_equal 3, pdu.dest_subaddress_len
|
|
701
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::BYTE_LEN, pdu.display_time_len
|
|
702
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::WORD_LEN, pdu.sms_signal_len
|
|
703
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::BYTE_LEN, pdu.ms_validity_len
|
|
704
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::BYTE_LEN, pdu.ms_msg_wait_facilities_len
|
|
705
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::BYTE_LEN, pdu.alert_on_msg_delivery_len
|
|
706
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::BYTE_LEN, pdu.language_indicator_len
|
|
707
|
+
end
|
|
708
|
+
|
|
709
|
+
|
|
710
|
+
|
|
711
|
+
def test_decode_smpp_submit_multi_resp
|
|
712
|
+
dump = String.new()
|
|
713
|
+
# read and decode package based on hex dump
|
|
714
|
+
dump << "00 00 00 33 80 00 00 21 00 00 00 00 00 00 00 0C 31 32 33 00 03 "
|
|
715
|
+
dump << "01 02 31 32 33 00 00 00 00 01 03 04 33 32 31 00 00 00 00 03 05 "
|
|
716
|
+
dump << "06 32 31 33 00 00 00 00 03"
|
|
717
|
+
buffer = Majoron::AntHill::ByteBuffer.decode_hex(dump)
|
|
718
|
+
|
|
719
|
+
# declare variables
|
|
720
|
+
decoder = Majoron::AntHill::SMPP::SMPPDecoder.new()
|
|
721
|
+
validator = Majoron::AntHill::SMPP::SMPPValidator.new()
|
|
722
|
+
|
|
723
|
+
# decode package
|
|
724
|
+
decoder.append_buffer(buffer)
|
|
725
|
+
pdu = decoder.get_packet()
|
|
726
|
+
assert_not_nil pdu, "PDU is null"
|
|
727
|
+
pdu.decode_packet(decoder)
|
|
728
|
+
pdu.validate_packet(validator)
|
|
729
|
+
decoder.validate_offset(pdu.command_length())
|
|
730
|
+
|
|
731
|
+
# check instanse type and fields value
|
|
732
|
+
assert_instance_of(Majoron::AntHill::SMPP::SMPPSubmitMultiResp, pdu, "PDU class is invalid" )
|
|
733
|
+
assert_equal 51, pdu.command_length
|
|
734
|
+
assert_equal Majoron::AntHill::SMPP::CommandId::CM_SUBMIT_MULTI_RESP, pdu.command_id
|
|
735
|
+
assert_equal Majoron::AntHill::SMPP::ErrorCode::ESME_ROK, pdu.command_status
|
|
736
|
+
assert_equal 12, pdu.sequence_number
|
|
737
|
+
assert_equal "123", pdu.message_id
|
|
738
|
+
|
|
739
|
+
assert_equal 3, pdu.no_unsuccess
|
|
740
|
+
assert_equal 3, pdu.unsuccess_smes.size()
|
|
741
|
+
|
|
742
|
+
assert_equal 1, pdu.unsuccess_smes[0].sme_address.ton
|
|
743
|
+
assert_equal 2, pdu.unsuccess_smes[0].sme_address.npi
|
|
744
|
+
assert_equal "123", pdu.unsuccess_smes[0].sme_address.address
|
|
745
|
+
assert_equal 1, pdu.unsuccess_smes[0].error_status_code
|
|
746
|
+
|
|
747
|
+
assert_equal 3, pdu.unsuccess_smes[1].sme_address.ton
|
|
748
|
+
assert_equal 4, pdu.unsuccess_smes[1].sme_address.npi
|
|
749
|
+
assert_equal "321", pdu.unsuccess_smes[1].sme_address.address
|
|
750
|
+
assert_equal 3, pdu.unsuccess_smes[1].error_status_code
|
|
751
|
+
|
|
752
|
+
|
|
753
|
+
assert_equal 5, pdu.unsuccess_smes[2].sme_address.ton
|
|
754
|
+
assert_equal 6, pdu.unsuccess_smes[2].sme_address.npi
|
|
755
|
+
assert_equal "213", pdu.unsuccess_smes[2].sme_address.address
|
|
756
|
+
assert_equal 3, pdu.unsuccess_smes[2].error_status_code
|
|
757
|
+
end
|
|
758
|
+
|
|
759
|
+
|
|
760
|
+
def test_decode_smpp_deliver_sm
|
|
761
|
+
dump = String.new()
|
|
762
|
+
# read and decode package based on hex dump
|
|
763
|
+
dump << "00 00 00 96 00 00 00 05 00 00 00 00 00 00 00 0C 53 4D 53 00 01 "
|
|
764
|
+
dump << "02 31 32 33 00 04 05 33 32 31 00 06 07 08 00 00 09 0A 0B 0C 00 "
|
|
765
|
+
dump << "02 04 00 02 00 01 02 0A 00 02 00 02 02 0B 00 02 00 03 02 0C 00 "
|
|
766
|
+
dump << "02 00 04 02 0E 00 01 05 02 0F 00 01 06 02 05 00 01 07 02 01 00 "
|
|
767
|
+
dump << "01 08 00 19 00 01 09 04 24 00 03 01 FF AA 03 81 00 03 01 FF AA "
|
|
768
|
+
dump << "02 02 00 03 01 FF AA 02 03 00 03 01 FF AA 02 0D 00 01 0A 13 83 "
|
|
769
|
+
dump << "00 02 00 0A 04 23 00 03 03 00 0C 04 27 00 01 03 00 1E 00 04 31 "
|
|
770
|
+
dump << "32 33 00 "
|
|
771
|
+
buffer = Majoron::AntHill::ByteBuffer.decode_hex(dump)
|
|
772
|
+
|
|
773
|
+
# declare variables
|
|
774
|
+
decoder = Majoron::AntHill::SMPP::SMPPDecoder.new()
|
|
775
|
+
validator = Majoron::AntHill::SMPP::SMPPValidator.new()
|
|
776
|
+
|
|
777
|
+
# decode package
|
|
778
|
+
decoder.append_buffer(buffer)
|
|
779
|
+
pdu = decoder.get_packet()
|
|
780
|
+
assert_not_nil pdu, "PDU is null"
|
|
781
|
+
pdu.decode_packet(decoder)
|
|
782
|
+
pdu.validate_packet(validator)
|
|
783
|
+
decoder.validate_offset(pdu.command_length())
|
|
784
|
+
|
|
785
|
+
# Check instanse type and fields value
|
|
786
|
+
assert_instance_of(Majoron::AntHill::SMPP::SMPPDeliverSM, pdu, "PDU class is invalid" )
|
|
787
|
+
assert_equal 150, pdu.command_length
|
|
788
|
+
assert_equal Majoron::AntHill::SMPP::CommandId::CM_DELIVER_SM, pdu.command_id
|
|
789
|
+
assert_equal Majoron::AntHill::SMPP::ErrorCode::ESME_ROK, pdu.command_status
|
|
790
|
+
assert_equal 12, pdu.sequence_number
|
|
791
|
+
assert_equal "SMS", pdu.service_type
|
|
792
|
+
assert_equal 1, pdu.source_addr_ton
|
|
793
|
+
assert_equal 2, pdu.source_addr_npi
|
|
794
|
+
assert_equal "123", pdu.source_addr
|
|
795
|
+
assert_equal 4, pdu.dest_addr_ton
|
|
796
|
+
assert_equal 5, pdu.dest_addr_npi
|
|
797
|
+
assert_equal "321", pdu.dest_addr
|
|
798
|
+
assert_equal 6, pdu.esm_class
|
|
799
|
+
assert_equal 7, pdu.protocol_id
|
|
800
|
+
assert_equal 8, pdu.priority_flag
|
|
801
|
+
assert_equal "", pdu.schedule_delivery_time
|
|
802
|
+
assert_equal "", pdu.validity_period
|
|
803
|
+
assert_equal 9, pdu.registered_delivery
|
|
804
|
+
assert_equal 10, pdu.replace_if_present_flag
|
|
805
|
+
assert_equal 11, pdu.data_coding
|
|
806
|
+
assert_equal 12, pdu.sm_default_msg_id
|
|
807
|
+
assert_equal 0, pdu.sm_length
|
|
808
|
+
assert_equal "", pdu.short_message
|
|
809
|
+
|
|
810
|
+
# Check optional fields
|
|
811
|
+
assert_equal 1, pdu.user_message_reference
|
|
812
|
+
assert_equal 2, pdu.source_port
|
|
813
|
+
assert_equal 3, pdu.destination_port
|
|
814
|
+
assert_equal 4, pdu.sar_msg_ref_num
|
|
815
|
+
assert_equal 5, pdu.sar_total_segments
|
|
816
|
+
assert_equal 6, pdu.sar_segment_seqnum
|
|
817
|
+
assert_equal 7, pdu.user_response_code
|
|
818
|
+
assert_equal 8, pdu.privacy_indicator
|
|
819
|
+
assert_equal 9, pdu.payload_type
|
|
820
|
+
assert_equal "01 FF AA", Majoron::AntHill::ByteBuffer.encode_hex(pdu.message_payload).strip.upcase
|
|
821
|
+
assert_equal "01 FF AA", Majoron::AntHill::ByteBuffer.encode_hex(pdu.callback_num).strip.upcase
|
|
822
|
+
assert_equal "01 FF AA", Majoron::AntHill::ByteBuffer.encode_hex(pdu.source_subaddress).strip.upcase
|
|
823
|
+
assert_equal "01 FF AA", Majoron::AntHill::ByteBuffer.encode_hex(pdu.dest_subaddress).strip.upcase
|
|
824
|
+
assert_equal 10, pdu.language_indicator
|
|
825
|
+
assert_equal 10, pdu.its_session_info
|
|
826
|
+
assert_equal Majoron::AntHill::SMPP::NetworkTypeErrorCode::GSM, pdu.network_error_code.network_code
|
|
827
|
+
assert_equal 12, pdu.network_error_code.error_code
|
|
828
|
+
assert_equal 3, pdu.message_state
|
|
829
|
+
assert_equal "123", pdu.receipted_message_id
|
|
830
|
+
|
|
831
|
+
# Check optional fields len
|
|
832
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::WORD_LEN, pdu.user_message_reference_len
|
|
833
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::WORD_LEN, pdu.source_port_len
|
|
834
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::WORD_LEN, pdu.destination_port_len
|
|
835
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::WORD_LEN, pdu.sar_msg_ref_num_len
|
|
836
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::BYTE_LEN, pdu.sar_total_segments_len
|
|
837
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::BYTE_LEN, pdu.sar_segment_seqnum_len
|
|
838
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::BYTE_LEN, pdu.user_response_code_len
|
|
839
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::BYTE_LEN, pdu.privacy_indicator_len
|
|
840
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::BYTE_LEN, pdu.payload_type_len
|
|
841
|
+
assert_equal 3, pdu.message_payload_len
|
|
842
|
+
assert_equal 3, pdu.callback_num_len
|
|
843
|
+
assert_equal 3, pdu.source_subaddress_len
|
|
844
|
+
assert_equal 3, pdu.dest_subaddress_len
|
|
845
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::BYTE_LEN, pdu.language_indicator_len
|
|
846
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::WORD_LEN, pdu.its_session_info_len
|
|
847
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::BYTE_LEN + Majoron::AntHill::SMPP::SMPPTLVLen::WORD_LEN, pdu.network_error_code_len
|
|
848
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::BYTE_LEN, pdu.message_state_len
|
|
849
|
+
assert_equal 4, pdu.receipted_message_id_len
|
|
850
|
+
end
|
|
851
|
+
|
|
852
|
+
|
|
853
|
+
def test_decode_smpp_deliver_sm_1
|
|
854
|
+
dump = String.new()
|
|
855
|
+
# read and decode package based on hex dump
|
|
856
|
+
dump << "00 00 00 5A 00 00 00 05 00 00 00 00 00 00 00 0F 53 72 76 74 00 "
|
|
857
|
+
dump << "00 01 33 33 31 31 00 01 01 37 39 32 31 31 32 33 34 35 36 37 00 "
|
|
858
|
+
dump << "04 00 00 00 00 00 00 00 00 19 68 65 72 65 20 69 73 20 74 68 65 "
|
|
859
|
+
dump << "20 73 68 6F 72 74 20 6D 65 73 73 61 67 65 04 27 00 01 02 00 1E "
|
|
860
|
+
dump << "00 04 31 32 33 00 "
|
|
861
|
+
buffer = Majoron::AntHill::ByteBuffer.decode_hex(dump)
|
|
862
|
+
|
|
863
|
+
# declare variables
|
|
864
|
+
decoder = Majoron::AntHill::SMPP::SMPPDecoder.new()
|
|
865
|
+
validator = Majoron::AntHill::SMPP::SMPPValidator.new()
|
|
866
|
+
|
|
867
|
+
# decode package
|
|
868
|
+
decoder.append_buffer(buffer)
|
|
869
|
+
pdu = decoder.get_packet()
|
|
870
|
+
assert_not_nil pdu, "PDU is null"
|
|
871
|
+
pdu.decode_packet(decoder)
|
|
872
|
+
pdu.validate_packet(validator)
|
|
873
|
+
decoder.validate_offset(pdu.command_length())
|
|
874
|
+
|
|
875
|
+
# check instanse type and fields value
|
|
876
|
+
assert_instance_of(Majoron::AntHill::SMPP::SMPPDeliverSM, pdu, "PDU class is invalid" )
|
|
877
|
+
assert_equal 90, pdu.command_length
|
|
878
|
+
assert_equal Majoron::AntHill::SMPP::CommandId::CM_DELIVER_SM, pdu.command_id
|
|
879
|
+
assert_equal Majoron::AntHill::SMPP::ErrorCode::ESME_ROK, pdu.command_status
|
|
880
|
+
assert_equal 15, pdu.sequence_number
|
|
881
|
+
assert_equal "Srvt", pdu.service_type
|
|
882
|
+
assert_equal Majoron::AntHill::SMPP::TON::UNKNOWN, pdu.source_addr_ton
|
|
883
|
+
assert_equal Majoron::AntHill::SMPP::NPI::ISDN, pdu.source_addr_npi
|
|
884
|
+
assert_equal "3311", pdu.source_addr
|
|
885
|
+
assert_equal Majoron::AntHill::SMPP::TON::INTERNATIONAL, pdu.dest_addr_ton
|
|
886
|
+
assert_equal Majoron::AntHill::SMPP::NPI::ISDN, pdu.dest_addr_npi
|
|
887
|
+
assert_equal "79211234567", pdu.dest_addr
|
|
888
|
+
assert_equal 0x04, pdu.esm_class
|
|
889
|
+
assert_equal "here is the short message", pdu.short_message
|
|
890
|
+
assert_equal Majoron::AntHill::SMPP::MessageState::DELIVERED, pdu.message_state
|
|
891
|
+
assert_equal "123", pdu.receipted_message_id
|
|
892
|
+
end
|
|
893
|
+
|
|
894
|
+
def test_decode_smpp_deliver_sm_resp
|
|
895
|
+
dump = String.new()
|
|
896
|
+
# read and decode package based on hex dump
|
|
897
|
+
dump << "00 00 00 24 80 00 00 05 00 00 00 00 00 00 00 0C 00 00 1D 00 03 "
|
|
898
|
+
dump << "01 FF AA 04 25 00 01 01 04 23 00 03 01 00 02"
|
|
899
|
+
buffer = Majoron::AntHill::ByteBuffer.decode_hex(dump)
|
|
900
|
+
|
|
901
|
+
# declare variables
|
|
902
|
+
decoder = Majoron::AntHill::SMPP::SMPPDecoder.new()
|
|
903
|
+
validator = Majoron::AntHill::SMPP::SMPPValidator.new()
|
|
904
|
+
|
|
905
|
+
# decode package
|
|
906
|
+
decoder.append_buffer(buffer)
|
|
907
|
+
pdu = decoder.get_packet()
|
|
908
|
+
assert_not_nil pdu, "PDU is null"
|
|
909
|
+
pdu.decode_packet(decoder)
|
|
910
|
+
pdu.validate_packet(validator)
|
|
911
|
+
decoder.validate_offset(pdu.command_length())
|
|
912
|
+
|
|
913
|
+
# check instanse type and fields value
|
|
914
|
+
assert_instance_of(Majoron::AntHill::SMPP::SMPPDeliverSMResp, pdu, "PDU class is invalid" )
|
|
915
|
+
assert_equal 36, pdu.command_length
|
|
916
|
+
assert_equal Majoron::AntHill::SMPP::CommandId::CM_DELIVER_SM_RESP, pdu.command_id
|
|
917
|
+
assert_equal Majoron::AntHill::SMPP::ErrorCode::ESME_ROK, pdu.command_status
|
|
918
|
+
assert_equal 12, pdu.sequence_number
|
|
919
|
+
assert_equal "", pdu.message_id
|
|
920
|
+
|
|
921
|
+
# Check optional fields
|
|
922
|
+
assert_equal "01 FF AA", Majoron::AntHill::ByteBuffer.encode_hex(pdu.additional_status_info_text).strip.upcase
|
|
923
|
+
assert_equal 1, pdu.delivery_failure_reason
|
|
924
|
+
assert_equal Majoron::AntHill::SMPP::NetworkTypeErrorCode::ANSI_136_ACCESS_DENIED_REASON, pdu.network_error_code.network_code
|
|
925
|
+
assert_equal 2, pdu.network_error_code.error_code
|
|
926
|
+
|
|
927
|
+
# Check optional fields len
|
|
928
|
+
assert_equal 3, pdu.additional_status_info_text_len
|
|
929
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::BYTE_LEN, pdu.delivery_failure_reason
|
|
930
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::BYTE_LEN + Majoron::AntHill::SMPP::SMPPTLVLen::WORD_LEN, pdu.network_error_code_len
|
|
931
|
+
end
|
|
932
|
+
|
|
933
|
+
def test_decode_smpp_data_sm
|
|
934
|
+
dump = String.new()
|
|
935
|
+
# read and decode package based on hex dump
|
|
936
|
+
dump << "00 00 01 00 00 00 01 03 00 00 00 00 00 00 00 0C 73 72 76 74 70 "
|
|
937
|
+
dump << "00 01 02 31 32 33 00 03 04 33 32 31 00 00 01 08 02 0A 00 02 00 "
|
|
938
|
+
dump << "01 00 0D 00 01 02 00 0E 00 01 03 00 0F 00 01 04 00 10 00 01 05 "
|
|
939
|
+
dump << "02 0B 00 02 00 06 00 05 00 01 07 00 06 00 01 08 00 07 00 01 09 "
|
|
940
|
+
dump << "00 08 00 01 0A 02 0C 00 02 00 0B 02 0E 00 01 0C 02 0F 00 01 0D "
|
|
941
|
+
dump << "04 26 00 01 01 00 17 00 04 00 00 00 0E 00 19 00 01 0F 04 24 00 "
|
|
942
|
+
dump << "05 01 02 03 AF FF 04 21 00 01 10 00 1E 00 06 31 32 33 32 31 00 "
|
|
943
|
+
dump << "04 27 00 01 01 04 23 00 03 01 00 01 02 04 00 02 00 7B 02 01 00 "
|
|
944
|
+
dump << "01 01 03 81 00 02 FF AA 03 02 00 01 01 03 03 00 02 AA FF 02 02 "
|
|
945
|
+
dump << "00 02 AA FF 02 03 00 02 AA FF 02 05 00 01 01 12 01 00 01 02 12 "
|
|
946
|
+
dump << "03 00 02 00 03 12 04 00 01 04 00 30 00 01 05 03 04 00 01 06 03 "
|
|
947
|
+
dump << "04 00 01 06 13 0C 00 01 07 02 0D 00 01 08 13 80 00 01 09 13 83 "
|
|
948
|
+
dump << "00 02 00 0A "
|
|
949
|
+
buffer = Majoron::AntHill::ByteBuffer.decode_hex(dump)
|
|
950
|
+
|
|
951
|
+
# declare variables
|
|
952
|
+
decoder = Majoron::AntHill::SMPP::SMPPDecoder.new()
|
|
953
|
+
validator = Majoron::AntHill::SMPP::SMPPValidator.new()
|
|
954
|
+
|
|
955
|
+
# decode package
|
|
956
|
+
decoder.append_buffer(buffer)
|
|
957
|
+
pdu = decoder.get_packet()
|
|
958
|
+
assert_not_nil pdu, "PDU is null"
|
|
959
|
+
pdu.decode_packet(decoder)
|
|
960
|
+
pdu.validate_packet(validator)
|
|
961
|
+
decoder.validate_offset(pdu.command_length())
|
|
962
|
+
|
|
963
|
+
# check instanse type and fields value
|
|
964
|
+
assert_instance_of(Majoron::AntHill::SMPP::SMPPDataSM, pdu, "PDU class is invalid" )
|
|
965
|
+
assert_equal 256, pdu.command_length
|
|
966
|
+
assert_equal Majoron::AntHill::SMPP::CommandId::CM_DATA_SM, pdu.command_id
|
|
967
|
+
assert_equal Majoron::AntHill::SMPP::ErrorCode::ESME_ROK, pdu.command_status
|
|
968
|
+
assert_equal 12, pdu.sequence_number
|
|
969
|
+
assert_equal "srvtp", pdu.service_type
|
|
970
|
+
assert_equal 1, pdu.source_addr_ton
|
|
971
|
+
assert_equal 2, pdu.source_addr_npi
|
|
972
|
+
assert_equal "123", pdu.source_addr
|
|
973
|
+
assert_equal 3, pdu.dest_addr_ton
|
|
974
|
+
assert_equal 4, pdu.dest_addr_npi
|
|
975
|
+
assert_equal "321", pdu.dest_addr
|
|
976
|
+
assert_equal 0, pdu.esm_class
|
|
977
|
+
assert_equal 1, pdu.registered_delivery
|
|
978
|
+
assert_equal 8, pdu.data_coding
|
|
979
|
+
|
|
980
|
+
# Check optional fields
|
|
981
|
+
assert_equal 1, pdu.source_port
|
|
982
|
+
assert_equal 2, pdu.source_addr_subunit
|
|
983
|
+
assert_equal 3, pdu.source_network_type
|
|
984
|
+
assert_equal 4, pdu.source_bearer_type
|
|
985
|
+
assert_equal 5, pdu.source_telematics_id
|
|
986
|
+
assert_equal 6, pdu.destination_port
|
|
987
|
+
assert_equal 7, pdu.dest_addr_subunit
|
|
988
|
+
assert_equal 8, pdu.dest_network_type
|
|
989
|
+
assert_equal 9, pdu.dest_bearer_type
|
|
990
|
+
assert_equal 10, pdu.dest_telematics_id
|
|
991
|
+
assert_equal 11, pdu.sar_msg_ref_num
|
|
992
|
+
assert_equal 12, pdu.sar_total_segments
|
|
993
|
+
assert_equal 13, pdu.sar_segment_seqnum
|
|
994
|
+
assert_equal 1, pdu.more_messages_to_send
|
|
995
|
+
assert_equal 14, pdu.qos_time_to_live
|
|
996
|
+
assert_equal 15, pdu.payload_type
|
|
997
|
+
assert_equal "01 02 03 AF FF", Majoron::AntHill::ByteBuffer.encode_hex(pdu.message_payload).strip.upcase
|
|
998
|
+
assert_equal 16, pdu.set_dpf
|
|
999
|
+
assert_equal "12321", pdu.receipted_message_id
|
|
1000
|
+
assert_equal 1, pdu.message_state
|
|
1001
|
+
assert_equal Majoron::AntHill::SMPP::NetworkTypeErrorCode::ANSI_136_ACCESS_DENIED_REASON, pdu.network_error_code.network_code
|
|
1002
|
+
assert_equal 1, pdu.network_error_code.error_code
|
|
1003
|
+
assert_equal 123, pdu.user_message_reference
|
|
1004
|
+
assert_equal 1, pdu.privacy_indicator
|
|
1005
|
+
assert_equal "FF AA", Majoron::AntHill::ByteBuffer.encode_hex(pdu.callback_num).strip.upcase
|
|
1006
|
+
assert_equal 1, pdu.callback_num_pres_ind
|
|
1007
|
+
assert_equal "AA FF", Majoron::AntHill::ByteBuffer.encode_hex(pdu.callback_num_atag).strip.upcase
|
|
1008
|
+
assert_equal "AA FF", Majoron::AntHill::ByteBuffer.encode_hex(pdu.source_subaddress).strip.upcase
|
|
1009
|
+
assert_equal "AA FF", Majoron::AntHill::ByteBuffer.encode_hex(pdu.dest_subaddress).strip.upcase
|
|
1010
|
+
assert_equal 1, pdu.user_response_code
|
|
1011
|
+
assert_equal 2, pdu.display_time
|
|
1012
|
+
assert_equal 3, pdu.sms_signal
|
|
1013
|
+
assert_equal 4, pdu.ms_validity
|
|
1014
|
+
assert_equal 5, pdu.ms_msg_wait_facilities
|
|
1015
|
+
assert_equal 6, pdu.number_of_messages
|
|
1016
|
+
assert_equal 7, pdu.alert_on_msg_delivery
|
|
1017
|
+
assert_equal 8, pdu.language_indicator
|
|
1018
|
+
assert_equal 9, pdu.its_reply_type
|
|
1019
|
+
assert_equal 10, pdu.its_session_info
|
|
1020
|
+
|
|
1021
|
+
# Check optional fields len
|
|
1022
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::WORD_LEN, pdu.source_port_len
|
|
1023
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::BYTE_LEN, pdu.source_addr_subunit_len
|
|
1024
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::BYTE_LEN, pdu.source_network_type_len
|
|
1025
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::BYTE_LEN, pdu.source_bearer_type_len
|
|
1026
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::BYTE_LEN, pdu.source_telematics_id_len
|
|
1027
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::WORD_LEN, pdu.destination_port_len
|
|
1028
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::BYTE_LEN, pdu.dest_addr_subunit_len
|
|
1029
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::BYTE_LEN, pdu.dest_network_type_len
|
|
1030
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::BYTE_LEN, pdu.dest_bearer_type_len
|
|
1031
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::BYTE_LEN, pdu.dest_telematics_id_len
|
|
1032
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::WORD_LEN, pdu.sar_msg_ref_num_len
|
|
1033
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::BYTE_LEN, pdu.sar_total_segments_len
|
|
1034
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::BYTE_LEN, pdu.sar_segment_seqnum_len
|
|
1035
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::BYTE_LEN, pdu.more_messages_to_send_len
|
|
1036
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::DWORD_LEN, pdu.qos_time_to_live_len
|
|
1037
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::BYTE_LEN, pdu.payload_type_len
|
|
1038
|
+
assert_equal 5, pdu.message_payload_len
|
|
1039
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::BYTE_LEN, pdu.set_dpf_len
|
|
1040
|
+
assert_equal 6, pdu.receipted_message_id_len
|
|
1041
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::BYTE_LEN, pdu.message_state_len
|
|
1042
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::BYTE_LEN + Majoron::AntHill::SMPP::SMPPTLVLen::WORD_LEN, pdu.network_error_code_len
|
|
1043
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::WORD_LEN, pdu.user_message_reference_len
|
|
1044
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::BYTE_LEN, pdu.privacy_indicator_len
|
|
1045
|
+
assert_equal 2, pdu.callback_num_len
|
|
1046
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::BYTE_LEN, pdu.callback_num_pres_ind_len
|
|
1047
|
+
assert_equal 2, pdu.callback_num_atag_len
|
|
1048
|
+
assert_equal 2, pdu.source_subaddress_len
|
|
1049
|
+
assert_equal 2, pdu.dest_subaddress_len
|
|
1050
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::BYTE_LEN, pdu.user_response_code_len
|
|
1051
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::BYTE_LEN, pdu.display_time_len
|
|
1052
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::WORD_LEN, pdu.sms_signal_len
|
|
1053
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::BYTE_LEN, pdu.ms_validity_len
|
|
1054
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::BYTE_LEN, pdu.ms_msg_wait_facilities_len
|
|
1055
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::BYTE_LEN, pdu.number_of_messages_len
|
|
1056
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::BYTE_LEN, pdu.alert_on_msg_delivery_len
|
|
1057
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::BYTE_LEN, pdu.language_indicator_len
|
|
1058
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::BYTE_LEN, pdu.its_reply_type_len
|
|
1059
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::WORD_LEN, pdu.its_session_info_len
|
|
1060
|
+
end
|
|
1061
|
+
|
|
1062
|
+
def test_decode_smpp_data_sm_resp
|
|
1063
|
+
dump = String.new()
|
|
1064
|
+
# read and decode package based on hex dump
|
|
1065
|
+
dump << "00 00 00 29 80 00 01 03 00 00 00 00 00 00 00 0C 00 04 25 00 "
|
|
1066
|
+
dump << "01 01 04 23 00 03 03 00 01 00 1D 00 03 01 FF AA 04 20 00 01 "
|
|
1067
|
+
dump << "17"
|
|
1068
|
+
buffer = Majoron::AntHill::ByteBuffer.decode_hex(dump)
|
|
1069
|
+
|
|
1070
|
+
# declare variables
|
|
1071
|
+
decoder = Majoron::AntHill::SMPP::SMPPDecoder.new()
|
|
1072
|
+
validator = Majoron::AntHill::SMPP::SMPPValidator.new()
|
|
1073
|
+
|
|
1074
|
+
# decode package
|
|
1075
|
+
decoder.append_buffer(buffer)
|
|
1076
|
+
pdu = decoder.get_packet()
|
|
1077
|
+
assert_not_nil pdu, "PDU is null"
|
|
1078
|
+
pdu.decode_packet(decoder)
|
|
1079
|
+
pdu.validate_packet(validator)
|
|
1080
|
+
decoder.validate_offset(pdu.command_length())
|
|
1081
|
+
|
|
1082
|
+
# check instanse type and fields value
|
|
1083
|
+
assert_instance_of(Majoron::AntHill::SMPP::SMPPDataSMResp, pdu, "PDU class is invalid" )
|
|
1084
|
+
assert_equal 41, pdu.command_length
|
|
1085
|
+
assert_equal Majoron::AntHill::SMPP::CommandId::CM_DATA_SM_RESP, pdu.command_id
|
|
1086
|
+
assert_equal Majoron::AntHill::SMPP::ErrorCode::ESME_ROK, pdu.command_status
|
|
1087
|
+
assert_equal 12, pdu.sequence_number
|
|
1088
|
+
assert_equal "", pdu.message_id
|
|
1089
|
+
assert_equal 1, pdu.delivery_failure_reason
|
|
1090
|
+
assert_equal Majoron::AntHill::SMPP::NetworkTypeErrorCode::GSM, pdu.network_error_code.network_code
|
|
1091
|
+
assert_equal 1, pdu.network_error_code.error_code
|
|
1092
|
+
assert_equal "01 FF AA", Majoron::AntHill::ByteBuffer.encode_hex(pdu.additional_status_info_text).strip.upcase
|
|
1093
|
+
assert_equal 23, pdu.dpf_result
|
|
1094
|
+
end
|
|
1095
|
+
|
|
1096
|
+
|
|
1097
|
+
def test_decode_smpp_data_sm_resp_1
|
|
1098
|
+
dump = String.new()
|
|
1099
|
+
# read and decode package based on hex dump
|
|
1100
|
+
dump << "00 00 00 3F 80 00 01 03 00 00 00 00 00 00 00 0E 00 04 23 00 "
|
|
1101
|
+
dump << "03 03 00 00 00 1D 00 23 68 65 72 65 20 69 73 20 61 64 64 69 "
|
|
1102
|
+
dump << "74 69 6F 6E 61 6C 20 73 74 61 74 75 73 20 69 6E 66 6F 20 74 "
|
|
1103
|
+
dump << "65 78 74 "
|
|
1104
|
+
buffer = Majoron::AntHill::ByteBuffer.decode_hex(dump)
|
|
1105
|
+
|
|
1106
|
+
# declare variables
|
|
1107
|
+
decoder = Majoron::AntHill::SMPP::SMPPDecoder.new()
|
|
1108
|
+
validator = Majoron::AntHill::SMPP::SMPPValidator.new()
|
|
1109
|
+
|
|
1110
|
+
# decode package
|
|
1111
|
+
decoder.append_buffer(buffer)
|
|
1112
|
+
pdu = decoder.get_packet()
|
|
1113
|
+
assert_not_nil pdu, "PDU is null"
|
|
1114
|
+
pdu.decode_packet(decoder)
|
|
1115
|
+
pdu.validate_packet(validator)
|
|
1116
|
+
decoder.validate_offset(pdu.command_length())
|
|
1117
|
+
|
|
1118
|
+
# check instanse type and fields value
|
|
1119
|
+
assert_instance_of(Majoron::AntHill::SMPP::SMPPDataSMResp, pdu, "PDU class is invalid" )
|
|
1120
|
+
assert_equal 63, pdu.command_length
|
|
1121
|
+
assert_equal Majoron::AntHill::SMPP::CommandId::CM_DATA_SM_RESP, pdu.command_id
|
|
1122
|
+
assert_equal Majoron::AntHill::SMPP::ErrorCode::ESME_ROK, pdu.command_status
|
|
1123
|
+
assert_equal 14, pdu.sequence_number
|
|
1124
|
+
assert_equal "here is additional status info text", pdu.additional_status_info_text
|
|
1125
|
+
assert_equal Majoron::AntHill::SMPP::NetworkTypeErrorCode::GSM, pdu.network_error_code.network_code
|
|
1126
|
+
assert_equal 0, pdu.network_error_code.error_code
|
|
1127
|
+
end
|
|
1128
|
+
|
|
1129
|
+
|
|
1130
|
+
def test_decode_smpp_cancel_sm
|
|
1131
|
+
dump = String.new()
|
|
1132
|
+
# read and decode package based on hex dump
|
|
1133
|
+
dump << "00 00 00 26 00 00 00 08 00 00 00 00 00 00 00 0C 73 72 76 74 70 00 "
|
|
1134
|
+
dump << "31 32 33 00 01 02 31 32 33 00 04 05 33 32 31 00"
|
|
1135
|
+
buffer = Majoron::AntHill::ByteBuffer.decode_hex(dump)
|
|
1136
|
+
|
|
1137
|
+
# declare variables
|
|
1138
|
+
decoder = Majoron::AntHill::SMPP::SMPPDecoder.new()
|
|
1139
|
+
validator = Majoron::AntHill::SMPP::SMPPValidator.new()
|
|
1140
|
+
|
|
1141
|
+
# decode package
|
|
1142
|
+
decoder.append_buffer(buffer)
|
|
1143
|
+
pdu = decoder.get_packet()
|
|
1144
|
+
assert_not_nil pdu, "PDU is null"
|
|
1145
|
+
pdu.decode_packet(decoder)
|
|
1146
|
+
pdu.validate_packet(validator)
|
|
1147
|
+
decoder.validate_offset(pdu.command_length())
|
|
1148
|
+
|
|
1149
|
+
# check instanse type and fields value
|
|
1150
|
+
assert_instance_of(Majoron::AntHill::SMPP::SMPPCancelSM, pdu, "PDU class is invalid" )
|
|
1151
|
+
assert_equal 38, pdu.command_length
|
|
1152
|
+
assert_equal Majoron::AntHill::SMPP::CommandId::CM_CANCEL_SM, pdu.command_id
|
|
1153
|
+
assert_equal Majoron::AntHill::SMPP::ErrorCode::ESME_ROK, pdu.command_status
|
|
1154
|
+
assert_equal 12, pdu.sequence_number
|
|
1155
|
+
assert_equal "srvtp", pdu.service_type
|
|
1156
|
+
assert_equal "123", pdu.message_id
|
|
1157
|
+
assert_equal 1, pdu.source_addr_ton
|
|
1158
|
+
assert_equal 2, pdu.source_addr_npi
|
|
1159
|
+
assert_equal "123", pdu.source_addr
|
|
1160
|
+
assert_equal 4, pdu.dest_addr_ton
|
|
1161
|
+
assert_equal 5, pdu.dest_addr_npi
|
|
1162
|
+
assert_equal "321", pdu.dest_addr
|
|
1163
|
+
end
|
|
1164
|
+
|
|
1165
|
+
|
|
1166
|
+
def test_decode_smpp_cancel_sm_resp
|
|
1167
|
+
dump = String.new()
|
|
1168
|
+
# read and decode package based on hex dump
|
|
1169
|
+
dump << "00 00 00 10 80 00 00 08 00 00 00 00 00 00 00 0C"
|
|
1170
|
+
buffer = Majoron::AntHill::ByteBuffer.decode_hex(dump)
|
|
1171
|
+
|
|
1172
|
+
# declare variables
|
|
1173
|
+
decoder = Majoron::AntHill::SMPP::SMPPDecoder.new()
|
|
1174
|
+
validator = Majoron::AntHill::SMPP::SMPPValidator.new()
|
|
1175
|
+
|
|
1176
|
+
# decode package
|
|
1177
|
+
decoder.append_buffer(buffer)
|
|
1178
|
+
pdu = decoder.get_packet()
|
|
1179
|
+
assert_not_nil pdu, "PDU is null"
|
|
1180
|
+
pdu.decode_packet(decoder)
|
|
1181
|
+
pdu.validate_packet(validator)
|
|
1182
|
+
decoder.validate_offset(pdu.command_length())
|
|
1183
|
+
|
|
1184
|
+
# check instanse type and fields value
|
|
1185
|
+
assert_instance_of(Majoron::AntHill::SMPP::SMPPCancelSMResp, pdu, "PDU class is invalid" )
|
|
1186
|
+
assert_equal 16, pdu.command_length
|
|
1187
|
+
assert_equal Majoron::AntHill::SMPP::CommandId::CM_CANCEL_SM_RESP, pdu.command_id
|
|
1188
|
+
assert_equal Majoron::AntHill::SMPP::ErrorCode::ESME_ROK, pdu.command_status
|
|
1189
|
+
assert_equal 12, pdu.sequence_number
|
|
1190
|
+
end
|
|
1191
|
+
|
|
1192
|
+
def test_decode_smpp_query_sm
|
|
1193
|
+
dump = String.new()
|
|
1194
|
+
# read and decode package based on hex dump
|
|
1195
|
+
dump << "00 00 00 1A 00 00 00 03 00 00 00 00 00 00 00 0C 31 32 33 00 01 02 33 32 31 00"
|
|
1196
|
+
buffer = Majoron::AntHill::ByteBuffer.decode_hex(dump)
|
|
1197
|
+
|
|
1198
|
+
# declare variables
|
|
1199
|
+
decoder = Majoron::AntHill::SMPP::SMPPDecoder.new()
|
|
1200
|
+
validator = Majoron::AntHill::SMPP::SMPPValidator.new()
|
|
1201
|
+
|
|
1202
|
+
# decode package
|
|
1203
|
+
decoder.append_buffer(buffer)
|
|
1204
|
+
pdu = decoder.get_packet()
|
|
1205
|
+
assert_not_nil pdu, "PDU is null"
|
|
1206
|
+
pdu.decode_packet(decoder)
|
|
1207
|
+
pdu.validate_packet(validator)
|
|
1208
|
+
decoder.validate_offset(pdu.command_length())
|
|
1209
|
+
|
|
1210
|
+
# check instanse type and fields value
|
|
1211
|
+
assert_instance_of(Majoron::AntHill::SMPP::SMPPQuerySM, pdu, "PDU class is invalid" )
|
|
1212
|
+
assert_equal 26, pdu.command_length
|
|
1213
|
+
assert_equal Majoron::AntHill::SMPP::CommandId::CM_QUERY_SM, pdu.command_id
|
|
1214
|
+
assert_equal Majoron::AntHill::SMPP::ErrorCode::ESME_ROK, pdu.command_status
|
|
1215
|
+
assert_equal 12, pdu.sequence_number
|
|
1216
|
+
assert_equal "123", pdu.message_id
|
|
1217
|
+
assert_equal 1, pdu.source_addr_ton
|
|
1218
|
+
assert_equal 2, pdu.source_addr_npi
|
|
1219
|
+
assert_equal "321", pdu.source_addr
|
|
1220
|
+
end
|
|
1221
|
+
|
|
1222
|
+
def test_decode_smpp_query_sm_resp
|
|
1223
|
+
dump = String.new()
|
|
1224
|
+
# read and decode package based on hex dump
|
|
1225
|
+
dump << "00 00 00 17 80 00 00 03 00 00 00 00 00 00 00 0C 31 32 33 00 00 01 02"
|
|
1226
|
+
buffer = Majoron::AntHill::ByteBuffer.decode_hex(dump)
|
|
1227
|
+
|
|
1228
|
+
# declare variables
|
|
1229
|
+
decoder = Majoron::AntHill::SMPP::SMPPDecoder.new()
|
|
1230
|
+
validator = Majoron::AntHill::SMPP::SMPPValidator.new()
|
|
1231
|
+
|
|
1232
|
+
# decode package
|
|
1233
|
+
decoder.append_buffer(buffer)
|
|
1234
|
+
pdu = decoder.get_packet()
|
|
1235
|
+
assert_not_nil pdu, "PDU is null"
|
|
1236
|
+
pdu.decode_packet(decoder)
|
|
1237
|
+
pdu.validate_packet(validator)
|
|
1238
|
+
decoder.validate_offset(pdu.command_length())
|
|
1239
|
+
|
|
1240
|
+
# check instanse type and fields value
|
|
1241
|
+
assert_instance_of(Majoron::AntHill::SMPP::SMPPQuerySMResp, pdu, "PDU class is invalid" )
|
|
1242
|
+
assert_equal 23, pdu.command_length
|
|
1243
|
+
assert_equal Majoron::AntHill::SMPP::CommandId::CM_QUERY_SM_RESP, pdu.command_id
|
|
1244
|
+
assert_equal Majoron::AntHill::SMPP::ErrorCode::ESME_ROK, pdu.command_status
|
|
1245
|
+
assert_equal 12, pdu.sequence_number
|
|
1246
|
+
assert_equal "123", pdu.message_id
|
|
1247
|
+
assert_equal "", pdu.final_date
|
|
1248
|
+
assert_equal 1, pdu.message_state
|
|
1249
|
+
assert_equal 2, pdu.error_code
|
|
1250
|
+
end
|
|
1251
|
+
|
|
1252
|
+
|
|
1253
|
+
|
|
1254
|
+
def test_decode_smpp_replace_sm
|
|
1255
|
+
dump = String.new()
|
|
1256
|
+
# read and decode package based on hex dump
|
|
1257
|
+
dump << "00 00 00 26 00 00 00 07 00 00 00 00 00 00 00 0C 33 34 35 00 01 02 "
|
|
1258
|
+
dump << "31 32 33 00 00 00 01 07 00 04 24 00 03 01 FF AA"
|
|
1259
|
+
buffer = Majoron::AntHill::ByteBuffer.decode_hex(dump)
|
|
1260
|
+
|
|
1261
|
+
# declare variables
|
|
1262
|
+
decoder = Majoron::AntHill::SMPP::SMPPDecoder.new()
|
|
1263
|
+
validator = Majoron::AntHill::SMPP::SMPPValidator.new()
|
|
1264
|
+
|
|
1265
|
+
# decode package
|
|
1266
|
+
decoder.append_buffer(buffer)
|
|
1267
|
+
pdu = decoder.get_packet()
|
|
1268
|
+
assert_not_nil pdu, "PDU is null"
|
|
1269
|
+
pdu.decode_packet(decoder)
|
|
1270
|
+
pdu.validate_packet(validator)
|
|
1271
|
+
decoder.validate_offset(pdu.command_length())
|
|
1272
|
+
|
|
1273
|
+
# check instanse type and fields value
|
|
1274
|
+
assert_instance_of(Majoron::AntHill::SMPP::SMPPReplaceSM, pdu, "PDU class is invalid" )
|
|
1275
|
+
assert_equal 38, pdu.command_length
|
|
1276
|
+
assert_equal Majoron::AntHill::SMPP::CommandId::CM_REPLACE_SM, pdu.command_id
|
|
1277
|
+
assert_equal Majoron::AntHill::SMPP::ErrorCode::ESME_ROK, pdu.command_status
|
|
1278
|
+
assert_equal 12, pdu.sequence_number
|
|
1279
|
+
assert_equal "345", pdu.message_id
|
|
1280
|
+
assert_equal 1, pdu.source_addr_ton
|
|
1281
|
+
assert_equal 2, pdu.source_addr_npi
|
|
1282
|
+
assert_equal "123", pdu.source_addr
|
|
1283
|
+
assert_equal "", pdu.schedule_delivery_time
|
|
1284
|
+
assert_equal "", pdu.validity_period
|
|
1285
|
+
assert_equal 1, pdu.registered_delivery
|
|
1286
|
+
assert_equal 7, pdu.sm_default_msg_id
|
|
1287
|
+
assert_equal 0, pdu.sm_length
|
|
1288
|
+
assert_equal "", pdu.short_message
|
|
1289
|
+
|
|
1290
|
+
# Check optional fields value
|
|
1291
|
+
assert_equal "01 FF AA", Majoron::AntHill::ByteBuffer.encode_hex(pdu.message_payload).strip.upcase
|
|
1292
|
+
|
|
1293
|
+
# Check optional fields len value
|
|
1294
|
+
assert_equal 3, pdu.message_payload_len
|
|
1295
|
+
end
|
|
1296
|
+
|
|
1297
|
+
|
|
1298
|
+
def test_decode_smpp_replace_sm_resp
|
|
1299
|
+
dump = String.new()
|
|
1300
|
+
# read and decode package based on hex dump
|
|
1301
|
+
dump << "00 00 00 10 80 00 00 07 00 00 00 00 00 00 00 0C"
|
|
1302
|
+
buffer = Majoron::AntHill::ByteBuffer.decode_hex(dump)
|
|
1303
|
+
|
|
1304
|
+
# declare variables
|
|
1305
|
+
decoder = Majoron::AntHill::SMPP::SMPPDecoder.new()
|
|
1306
|
+
validator = Majoron::AntHill::SMPP::SMPPValidator.new()
|
|
1307
|
+
|
|
1308
|
+
# decode package
|
|
1309
|
+
decoder.append_buffer(buffer)
|
|
1310
|
+
pdu = decoder.get_packet()
|
|
1311
|
+
assert_not_nil pdu, "PDU is null"
|
|
1312
|
+
pdu.decode_packet(decoder)
|
|
1313
|
+
pdu.validate_packet(validator)
|
|
1314
|
+
decoder.validate_offset(pdu.command_length())
|
|
1315
|
+
|
|
1316
|
+
# check instanse type and fields value
|
|
1317
|
+
assert_instance_of(Majoron::AntHill::SMPP::SMPPReplaceSMResp, pdu, "PDU class is invalid" )
|
|
1318
|
+
assert_equal 16, pdu.command_length
|
|
1319
|
+
assert_equal Majoron::AntHill::SMPP::CommandId::CM_REPLACE_SM_RESP, pdu.command_id
|
|
1320
|
+
assert_equal Majoron::AntHill::SMPP::ErrorCode::ESME_ROK, pdu.command_status
|
|
1321
|
+
assert_equal 12, pdu.sequence_number
|
|
1322
|
+
end
|
|
1323
|
+
|
|
1324
|
+
def test_decode_smpp_generic_nack
|
|
1325
|
+
dump = String.new()
|
|
1326
|
+
# read and decode package based on hex dump
|
|
1327
|
+
dump << "00 00 00 10 80 00 00 00 00 00 00 00 00 00 00 0E "
|
|
1328
|
+
buffer = Majoron::AntHill::ByteBuffer.decode_hex(dump)
|
|
1329
|
+
|
|
1330
|
+
# declare variables
|
|
1331
|
+
decoder = Majoron::AntHill::SMPP::SMPPDecoder.new()
|
|
1332
|
+
validator = Majoron::AntHill::SMPP::SMPPValidator.new()
|
|
1333
|
+
|
|
1334
|
+
# decode package
|
|
1335
|
+
decoder.append_buffer(buffer)
|
|
1336
|
+
pdu = decoder.get_packet()
|
|
1337
|
+
assert_not_nil pdu, "PDU is null"
|
|
1338
|
+
pdu.decode_packet(decoder)
|
|
1339
|
+
pdu.validate_packet(validator)
|
|
1340
|
+
decoder.validate_offset(pdu.command_length())
|
|
1341
|
+
|
|
1342
|
+
# check instanse type and fields value
|
|
1343
|
+
assert_instance_of(Majoron::AntHill::SMPP::SMPPGenericNack, pdu, "PDU class is invalid" )
|
|
1344
|
+
assert_equal 16, pdu.command_length
|
|
1345
|
+
assert_equal Majoron::AntHill::SMPP::CommandId::CM_GENERIC_NACK, pdu.command_id
|
|
1346
|
+
assert_equal Majoron::AntHill::SMPP::ErrorCode::ESME_ROK, pdu.command_status
|
|
1347
|
+
assert_equal 14, pdu.sequence_number
|
|
1348
|
+
end
|
|
1349
|
+
|
|
1350
|
+
|
|
1351
|
+
def test_decode_smpp_enquire_link
|
|
1352
|
+
dump = String.new()
|
|
1353
|
+
# read and decode package based on hex dump
|
|
1354
|
+
dump << "00 00 00 10 00 00 00 15 00 00 00 00 00 00 04 00 "
|
|
1355
|
+
buffer = Majoron::AntHill::ByteBuffer.decode_hex(dump)
|
|
1356
|
+
|
|
1357
|
+
# declare variables
|
|
1358
|
+
decoder = Majoron::AntHill::SMPP::SMPPDecoder.new()
|
|
1359
|
+
validator = Majoron::AntHill::SMPP::SMPPValidator.new()
|
|
1360
|
+
|
|
1361
|
+
# decode package
|
|
1362
|
+
decoder.append_buffer(buffer)
|
|
1363
|
+
pdu = decoder.get_packet()
|
|
1364
|
+
assert_not_nil pdu, "PDU is null"
|
|
1365
|
+
pdu.decode_packet(decoder)
|
|
1366
|
+
pdu.validate_packet(validator)
|
|
1367
|
+
decoder.validate_offset(pdu.command_length())
|
|
1368
|
+
|
|
1369
|
+
# check instanse type and fields value
|
|
1370
|
+
assert_instance_of(Majoron::AntHill::SMPP::SMPPEnquireLink, pdu, "PDU class is invalid" )
|
|
1371
|
+
assert_equal 16, pdu.command_length
|
|
1372
|
+
assert_equal Majoron::AntHill::SMPP::CommandId::CM_ENQUIRE_LINK, pdu.command_id
|
|
1373
|
+
assert_equal Majoron::AntHill::SMPP::ErrorCode::ESME_ROK, pdu.command_status
|
|
1374
|
+
assert_equal 1024, pdu.sequence_number
|
|
1375
|
+
end
|
|
1376
|
+
|
|
1377
|
+
def test_decode_smpp_enquire_link_resp
|
|
1378
|
+
dump = String.new()
|
|
1379
|
+
# read and decode package based on hex dump
|
|
1380
|
+
dump << "00 00 00 10 80 00 00 15 00 00 00 00 00 00 08 00 "
|
|
1381
|
+
buffer = Majoron::AntHill::ByteBuffer.decode_hex(dump)
|
|
1382
|
+
|
|
1383
|
+
# declare variables
|
|
1384
|
+
decoder = Majoron::AntHill::SMPP::SMPPDecoder.new()
|
|
1385
|
+
validator = Majoron::AntHill::SMPP::SMPPValidator.new()
|
|
1386
|
+
|
|
1387
|
+
# decode package
|
|
1388
|
+
decoder.append_buffer(buffer)
|
|
1389
|
+
pdu = decoder.get_packet()
|
|
1390
|
+
assert_not_nil pdu, "PDU is null"
|
|
1391
|
+
pdu.decode_packet(decoder)
|
|
1392
|
+
pdu.validate_packet(validator)
|
|
1393
|
+
decoder.validate_offset(pdu.command_length())
|
|
1394
|
+
|
|
1395
|
+
# check instanse type and fields value
|
|
1396
|
+
assert_instance_of(Majoron::AntHill::SMPP::SMPPEnquireLinkResp, pdu, "PDU class is invalid" )
|
|
1397
|
+
assert_equal 16, pdu.command_length
|
|
1398
|
+
assert_equal Majoron::AntHill::SMPP::CommandId::CM_ENQUIRE_LINK_RESP, pdu.command_id
|
|
1399
|
+
assert_equal Majoron::AntHill::SMPP::ErrorCode::ESME_ROK, pdu.command_status
|
|
1400
|
+
assert_equal 2048, pdu.sequence_number
|
|
1401
|
+
end
|
|
1402
|
+
|
|
1403
|
+
|
|
1404
|
+
def test_decode_smpp_outbind
|
|
1405
|
+
dump = String.new()
|
|
1406
|
+
# read and decode package based on hex dump
|
|
1407
|
+
dump << "00 00 00 1E 00 00 00 0B 00 00 00 00 00 00 10 00 69 61 6D 72 6F 6F "
|
|
1408
|
+
dump << "74 00 6D 79 70 77 64 00 "
|
|
1409
|
+
buffer = Majoron::AntHill::ByteBuffer.decode_hex(dump)
|
|
1410
|
+
|
|
1411
|
+
# declare variables
|
|
1412
|
+
decoder = Majoron::AntHill::SMPP::SMPPDecoder.new()
|
|
1413
|
+
validator = Majoron::AntHill::SMPP::SMPPValidator.new()
|
|
1414
|
+
|
|
1415
|
+
# decode package
|
|
1416
|
+
decoder.append_buffer(buffer)
|
|
1417
|
+
pdu = decoder.get_packet()
|
|
1418
|
+
assert_not_nil pdu, "PDU is null"
|
|
1419
|
+
pdu.decode_packet(decoder)
|
|
1420
|
+
pdu.validate_packet(validator)
|
|
1421
|
+
decoder.validate_offset(pdu.command_length())
|
|
1422
|
+
|
|
1423
|
+
# check instanse type and fields value
|
|
1424
|
+
assert_instance_of(Majoron::AntHill::SMPP::SMPPOutbind, pdu, "PDU class is invalid" )
|
|
1425
|
+
assert_equal 30, pdu.command_length
|
|
1426
|
+
assert_equal Majoron::AntHill::SMPP::CommandId::CM_OUTBIND, pdu.command_id
|
|
1427
|
+
assert_equal Majoron::AntHill::SMPP::ErrorCode::ESME_ROK, pdu.command_status
|
|
1428
|
+
assert_equal 2048*2, pdu.sequence_number
|
|
1429
|
+
assert_equal "iamroot", pdu.system_id
|
|
1430
|
+
assert_equal "mypwd", pdu.password
|
|
1431
|
+
end
|
|
1432
|
+
|
|
1433
|
+
|
|
1434
|
+
def test_decode_smpp_unbind
|
|
1435
|
+
dump = String.new()
|
|
1436
|
+
# read and decode package based on hex dump
|
|
1437
|
+
dump << "00 00 00 10 00 00 00 06 00 00 00 00 00 00 08 00 "
|
|
1438
|
+
buffer = Majoron::AntHill::ByteBuffer.decode_hex(dump)
|
|
1439
|
+
|
|
1440
|
+
# declare variables
|
|
1441
|
+
decoder = Majoron::AntHill::SMPP::SMPPDecoder.new()
|
|
1442
|
+
validator = Majoron::AntHill::SMPP::SMPPValidator.new()
|
|
1443
|
+
|
|
1444
|
+
# decode package
|
|
1445
|
+
decoder.append_buffer(buffer)
|
|
1446
|
+
pdu = decoder.get_packet()
|
|
1447
|
+
assert_not_nil pdu, "PDU is null"
|
|
1448
|
+
pdu.decode_packet(decoder)
|
|
1449
|
+
pdu.validate_packet(validator)
|
|
1450
|
+
decoder.validate_offset(pdu.command_length())
|
|
1451
|
+
|
|
1452
|
+
# check instanse type and fields value
|
|
1453
|
+
assert_instance_of(Majoron::AntHill::SMPP::SMPPUnbind, pdu, "PDU class is invalid" )
|
|
1454
|
+
assert_equal 16, pdu.command_length
|
|
1455
|
+
assert_equal Majoron::AntHill::SMPP::CommandId::CM_UNBIND, pdu.command_id
|
|
1456
|
+
assert_equal Majoron::AntHill::SMPP::ErrorCode::ESME_ROK, pdu.command_status
|
|
1457
|
+
assert_equal 2048, pdu.sequence_number
|
|
1458
|
+
end
|
|
1459
|
+
|
|
1460
|
+
def test_decode_smpp_unbind_resp
|
|
1461
|
+
dump = String.new()
|
|
1462
|
+
# read and decode package based on hex dump
|
|
1463
|
+
dump << "00 00 00 10 80 00 00 06 00 00 00 00 00 00 00 0C"
|
|
1464
|
+
buffer = Majoron::AntHill::ByteBuffer.decode_hex(dump)
|
|
1465
|
+
|
|
1466
|
+
# declare variables
|
|
1467
|
+
decoder = Majoron::AntHill::SMPP::SMPPDecoder.new()
|
|
1468
|
+
validator = Majoron::AntHill::SMPP::SMPPValidator.new()
|
|
1469
|
+
|
|
1470
|
+
# decode package
|
|
1471
|
+
decoder.append_buffer(buffer)
|
|
1472
|
+
pdu = decoder.get_packet()
|
|
1473
|
+
assert_not_nil pdu, "PDU is null"
|
|
1474
|
+
pdu.decode_packet(decoder)
|
|
1475
|
+
pdu.validate_packet(validator)
|
|
1476
|
+
decoder.validate_offset(pdu.command_length())
|
|
1477
|
+
|
|
1478
|
+
# check instanse type and fields value
|
|
1479
|
+
assert_instance_of(Majoron::AntHill::SMPP::SMPPUnbindResp, pdu, "PDU class is invalid" )
|
|
1480
|
+
assert_equal 16, pdu.command_length
|
|
1481
|
+
assert_equal Majoron::AntHill::SMPP::CommandId::CM_UNBIND_RESP, pdu.command_id
|
|
1482
|
+
assert_equal Majoron::AntHill::SMPP::ErrorCode::ESME_ROK, pdu.command_status
|
|
1483
|
+
assert_equal 12, pdu.sequence_number
|
|
1484
|
+
end
|
|
1485
|
+
|
|
1486
|
+
|
|
1487
|
+
|
|
1488
|
+
|
|
1489
|
+
def test_decode_smpp_query_broadcast_sm
|
|
1490
|
+
dump = String.new()
|
|
1491
|
+
# read and decode package based on hex dump
|
|
1492
|
+
dump << "00 00 00 20 00 00 01 12 00 00 00 00 00 00 00 0C 31 32 33 00 01 02 33 "
|
|
1493
|
+
dump << "34 35 00 02 04 00 02 00 02"
|
|
1494
|
+
buffer = Majoron::AntHill::ByteBuffer.decode_hex(dump)
|
|
1495
|
+
|
|
1496
|
+
# declare variables
|
|
1497
|
+
decoder = Majoron::AntHill::SMPP::SMPPDecoder.new()
|
|
1498
|
+
validator = Majoron::AntHill::SMPP::SMPPValidator.new()
|
|
1499
|
+
|
|
1500
|
+
# decode package
|
|
1501
|
+
decoder.append_buffer(buffer)
|
|
1502
|
+
pdu = decoder.get_packet()
|
|
1503
|
+
assert_not_nil pdu, "PDU is null"
|
|
1504
|
+
pdu.decode_packet(decoder)
|
|
1505
|
+
pdu.validate_packet(validator)
|
|
1506
|
+
decoder.validate_offset(pdu.command_length())
|
|
1507
|
+
|
|
1508
|
+
# check instanse type and fields value
|
|
1509
|
+
assert_instance_of(Majoron::AntHill::SMPP::SMPPQueryBroadcastSM, pdu, "PDU class is invalid" )
|
|
1510
|
+
assert_equal 32, pdu.command_length
|
|
1511
|
+
assert_equal Majoron::AntHill::SMPP::CommandId::CM_QUERY_BROADCAST_SM, pdu.command_id
|
|
1512
|
+
assert_equal Majoron::AntHill::SMPP::ErrorCode::ESME_ROK, pdu.command_status
|
|
1513
|
+
assert_equal 12, pdu.sequence_number
|
|
1514
|
+
assert_equal "123", pdu.message_id
|
|
1515
|
+
assert_equal 1, pdu.source_addr_ton
|
|
1516
|
+
assert_equal 2, pdu.source_addr_npi
|
|
1517
|
+
assert_equal "345", pdu.source_addr
|
|
1518
|
+
|
|
1519
|
+
assert_equal 2, pdu.user_message_reference
|
|
1520
|
+
|
|
1521
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::WORD_LEN, pdu.user_message_reference_len
|
|
1522
|
+
|
|
1523
|
+
end
|
|
1524
|
+
|
|
1525
|
+
|
|
1526
|
+
|
|
1527
|
+
|
|
1528
|
+
def test_decode_smpp_query_broadcast_sm_resp
|
|
1529
|
+
dump = String.new()
|
|
1530
|
+
# read and decode package based on hex dump
|
|
1531
|
+
dump << "00 00 00 36 80 00 01 12 00 00 00 00 00 00 00 0C 31 32 33 00 04 27 00 "
|
|
1532
|
+
dump << "01 02 06 06 00 02 01 FF 06 06 00 02 01 AF 06 06 00 02 01 DF 06 08 00 "
|
|
1533
|
+
dump << "01 66 02 04 00 02 00 7B"
|
|
1534
|
+
buffer = Majoron::AntHill::ByteBuffer.decode_hex(dump)
|
|
1535
|
+
|
|
1536
|
+
# declare variables
|
|
1537
|
+
decoder = Majoron::AntHill::SMPP::SMPPDecoder.new()
|
|
1538
|
+
validator = Majoron::AntHill::SMPP::SMPPValidator.new()
|
|
1539
|
+
|
|
1540
|
+
# decode package
|
|
1541
|
+
decoder.append_buffer(buffer)
|
|
1542
|
+
pdu = decoder.get_packet()
|
|
1543
|
+
assert_not_nil pdu, "PDU is null"
|
|
1544
|
+
pdu.decode_packet(decoder)
|
|
1545
|
+
pdu.validate_packet(validator)
|
|
1546
|
+
decoder.validate_offset(pdu.command_length())
|
|
1547
|
+
|
|
1548
|
+
# check instanse type and fields value
|
|
1549
|
+
assert_instance_of(Majoron::AntHill::SMPP::SMPPQueryBroadcastSMResp, pdu, "PDU class is invalid" )
|
|
1550
|
+
assert_equal 54, pdu.command_length
|
|
1551
|
+
assert_equal Majoron::AntHill::SMPP::CommandId::CM_QUERY_BROADCAST_SM_RESP, pdu.command_id
|
|
1552
|
+
assert_equal Majoron::AntHill::SMPP::ErrorCode::ESME_ROK, pdu.command_status
|
|
1553
|
+
assert_equal 12, pdu.sequence_number
|
|
1554
|
+
assert_equal "123", pdu.message_id
|
|
1555
|
+
assert_equal Majoron::AntHill::SMPP::MessageState::DELIVERED, pdu.message_state
|
|
1556
|
+
assert_equal 3, pdu.broadcast_area_identifier.size
|
|
1557
|
+
assert_equal "01 FF", Majoron::AntHill::ByteBuffer.encode_hex(pdu.broadcast_area_identifier[0].value )
|
|
1558
|
+
assert_equal "01 AF", Majoron::AntHill::ByteBuffer.encode_hex(pdu.broadcast_area_identifier[1].value )
|
|
1559
|
+
assert_equal "01 DF", Majoron::AntHill::ByteBuffer.encode_hex(pdu.broadcast_area_identifier[2].value )
|
|
1560
|
+
assert_equal 102, pdu.broadcast_area_success
|
|
1561
|
+
assert_equal 123, pdu.user_message_reference
|
|
1562
|
+
assert_equal nil, pdu.broadcast_end_time
|
|
1563
|
+
end
|
|
1564
|
+
|
|
1565
|
+
|
|
1566
|
+
def test_decode_smpp_query_broadcast_sm_resp_1
|
|
1567
|
+
dump = String.new()
|
|
1568
|
+
# read and decode package based on hex dump
|
|
1569
|
+
dump << "00 00 00 36 80 00 01 12 00 00 00 00 00 00 00 0C 31 32 33 00 04 27 00 "
|
|
1570
|
+
dump << "01 02 06 06 00 02 01 FF 06 06 00 02 01 AF 06 06 00 02 01 DF 06 08 00 "
|
|
1571
|
+
dump << "01 66 02 04 00 02 00 7B 06 09 00 01 00"
|
|
1572
|
+
buffer = Majoron::AntHill::ByteBuffer.decode_hex(dump)
|
|
1573
|
+
|
|
1574
|
+
# declare variables
|
|
1575
|
+
decoder = Majoron::AntHill::SMPP::SMPPDecoder.new()
|
|
1576
|
+
validator = Majoron::AntHill::SMPP::SMPPValidator.new()
|
|
1577
|
+
|
|
1578
|
+
# decode package
|
|
1579
|
+
decoder.append_buffer(buffer)
|
|
1580
|
+
pdu = decoder.get_packet()
|
|
1581
|
+
assert_not_nil pdu, "PDU is null"
|
|
1582
|
+
pdu.decode_packet(decoder)
|
|
1583
|
+
pdu.validate_packet(validator)
|
|
1584
|
+
decoder.validate_offset(pdu.command_length())
|
|
1585
|
+
|
|
1586
|
+
# check instanse type and fields value
|
|
1587
|
+
assert_instance_of(Majoron::AntHill::SMPP::SMPPQueryBroadcastSMResp, pdu, "PDU class is invalid" )
|
|
1588
|
+
assert_equal 54, pdu.command_length
|
|
1589
|
+
assert_equal Majoron::AntHill::SMPP::CommandId::CM_QUERY_BROADCAST_SM_RESP, pdu.command_id
|
|
1590
|
+
assert_equal Majoron::AntHill::SMPP::ErrorCode::ESME_ROK, pdu.command_status
|
|
1591
|
+
assert_equal 12, pdu.sequence_number
|
|
1592
|
+
assert_equal "123", pdu.message_id
|
|
1593
|
+
assert_equal Majoron::AntHill::SMPP::MessageState::DELIVERED, pdu.message_state
|
|
1594
|
+
assert_equal 3, pdu.broadcast_area_identifier.size
|
|
1595
|
+
assert_equal "01 FF", Majoron::AntHill::ByteBuffer.encode_hex(pdu.broadcast_area_identifier[0].value )
|
|
1596
|
+
assert_equal "01 AF", Majoron::AntHill::ByteBuffer.encode_hex(pdu.broadcast_area_identifier[1].value )
|
|
1597
|
+
assert_equal "01 DF", Majoron::AntHill::ByteBuffer.encode_hex(pdu.broadcast_area_identifier[2].value )
|
|
1598
|
+
assert_equal 102, pdu.broadcast_area_success
|
|
1599
|
+
assert_equal 123, pdu.user_message_reference
|
|
1600
|
+
assert_equal "", pdu.broadcast_end_time
|
|
1601
|
+
end
|
|
1602
|
+
|
|
1603
|
+
def test_decode_smpp_query_broadcast_sm_resp_1
|
|
1604
|
+
dump = String.new()
|
|
1605
|
+
# read and decode package based on hex dump
|
|
1606
|
+
dump << "00 00 00 43 80 00 01 12 00 00 00 00 00 00 00 02 31 00 04 27 00 01 01 "
|
|
1607
|
+
dump << "06 06 00 03 05 06 07 06 06 00 03 05 06 07 06 06 00 03 05 06 07 06 06 "
|
|
1608
|
+
dump << "00 03 05 06 07 06 08 00 01 01 02 04 00 02 00 01 06 09 00 01 00"
|
|
1609
|
+
buffer = Majoron::AntHill::ByteBuffer.decode_hex(dump)
|
|
1610
|
+
|
|
1611
|
+
# declare variables
|
|
1612
|
+
decoder = Majoron::AntHill::SMPP::SMPPDecoder.new()
|
|
1613
|
+
validator = Majoron::AntHill::SMPP::SMPPValidator.new()
|
|
1614
|
+
|
|
1615
|
+
# decode package
|
|
1616
|
+
decoder.append_buffer(buffer)
|
|
1617
|
+
pdu = decoder.get_packet()
|
|
1618
|
+
assert_not_nil pdu, "PDU is null"
|
|
1619
|
+
pdu.decode_packet(decoder)
|
|
1620
|
+
pdu.validate_packet(validator)
|
|
1621
|
+
decoder.validate_offset(pdu.command_length())
|
|
1622
|
+
|
|
1623
|
+
# check instanse type and fields value
|
|
1624
|
+
assert_instance_of(Majoron::AntHill::SMPP::SMPPQueryBroadcastSMResp, pdu, "PDU class is invalid" )
|
|
1625
|
+
assert_equal 67, pdu.command_length
|
|
1626
|
+
assert_equal Majoron::AntHill::SMPP::CommandId::CM_QUERY_BROADCAST_SM_RESP, pdu.command_id
|
|
1627
|
+
assert_equal Majoron::AntHill::SMPP::ErrorCode::ESME_ROK, pdu.command_status
|
|
1628
|
+
assert_equal 2, pdu.sequence_number
|
|
1629
|
+
assert_equal "1", pdu.message_id
|
|
1630
|
+
assert_equal Majoron::AntHill::SMPP::MessageState::ENROUTE, pdu.message_state
|
|
1631
|
+
assert_equal 4, pdu.broadcast_area_identifier.size
|
|
1632
|
+
assert_equal "05 06 07", Majoron::AntHill::ByteBuffer.encode_hex(pdu.broadcast_area_identifier[0].value )
|
|
1633
|
+
assert_equal "05 06 07", Majoron::AntHill::ByteBuffer.encode_hex(pdu.broadcast_area_identifier[1].value )
|
|
1634
|
+
assert_equal "05 06 07", Majoron::AntHill::ByteBuffer.encode_hex(pdu.broadcast_area_identifier[2].value )
|
|
1635
|
+
assert_equal "05 06 07", Majoron::AntHill::ByteBuffer.encode_hex(pdu.broadcast_area_identifier[3].value )
|
|
1636
|
+
assert_equal 1, pdu.user_message_reference
|
|
1637
|
+
assert_equal "", pdu.broadcast_end_time
|
|
1638
|
+
end
|
|
1639
|
+
|
|
1640
|
+
def test_decode_smpp_cancel_broadcast_sm
|
|
1641
|
+
dump = String.new()
|
|
1642
|
+
# read and decode package based on hex dump
|
|
1643
|
+
dump << "00 00 00 2C 00 00 01 13 00 00 00 00 00 00 00 0C 73 72 76 74 70 00 31 "
|
|
1644
|
+
dump << "32 33 00 01 01 31 32 33 00 06 01 00 02 01 FF 02 04 00 02 00 0A"
|
|
1645
|
+
buffer = Majoron::AntHill::ByteBuffer.decode_hex(dump)
|
|
1646
|
+
|
|
1647
|
+
# declare variables
|
|
1648
|
+
decoder = Majoron::AntHill::SMPP::SMPPDecoder.new()
|
|
1649
|
+
validator = Majoron::AntHill::SMPP::SMPPValidator.new()
|
|
1650
|
+
|
|
1651
|
+
# decode package
|
|
1652
|
+
decoder.append_buffer(buffer)
|
|
1653
|
+
pdu = decoder.get_packet()
|
|
1654
|
+
assert_not_nil pdu, "PDU is null"
|
|
1655
|
+
pdu.decode_packet(decoder)
|
|
1656
|
+
pdu.validate_packet(validator)
|
|
1657
|
+
decoder.validate_offset(pdu.command_length())
|
|
1658
|
+
|
|
1659
|
+
# check instanse type and fields value
|
|
1660
|
+
assert_instance_of(Majoron::AntHill::SMPP::SMPPCancelBroadcastSM, pdu, "PDU class is invalid" )
|
|
1661
|
+
assert_equal 44, pdu.command_length
|
|
1662
|
+
assert_equal Majoron::AntHill::SMPP::CommandId::CM_CANCEL_BROADCAST_SM, pdu.command_id
|
|
1663
|
+
assert_equal Majoron::AntHill::SMPP::ErrorCode::ESME_ROK, pdu.command_status
|
|
1664
|
+
assert_equal 12, pdu.sequence_number
|
|
1665
|
+
assert_equal "srvtp", pdu.service_type
|
|
1666
|
+
assert_equal "123", pdu.message_id
|
|
1667
|
+
assert_equal 1, pdu.source_addr_ton
|
|
1668
|
+
assert_equal 1, pdu.source_addr_npi
|
|
1669
|
+
assert_equal "123", pdu.source_addr
|
|
1670
|
+
|
|
1671
|
+
# Check optional fields value
|
|
1672
|
+
assert_equal "01 FF", Majoron::AntHill::ByteBuffer.encode_hex(pdu.broadcast_content_type).strip.upcase
|
|
1673
|
+
assert_equal 10, pdu.user_message_reference
|
|
1674
|
+
|
|
1675
|
+
# Check optional fields len value
|
|
1676
|
+
assert_equal 2, pdu.broadcast_content_type_len
|
|
1677
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::WORD_LEN, pdu.user_message_reference_len
|
|
1678
|
+
end
|
|
1679
|
+
|
|
1680
|
+
def test_decode_smpp_cancel_broadcast_sm_resp
|
|
1681
|
+
dump = String.new()
|
|
1682
|
+
# read and decode package based on hex dump
|
|
1683
|
+
dump << "00 00 00 10 80 00 01 13 00 00 00 00 00 00 00 0C"
|
|
1684
|
+
buffer = Majoron::AntHill::ByteBuffer.decode_hex(dump)
|
|
1685
|
+
|
|
1686
|
+
# declare variables
|
|
1687
|
+
decoder = Majoron::AntHill::SMPP::SMPPDecoder.new()
|
|
1688
|
+
validator = Majoron::AntHill::SMPP::SMPPValidator.new()
|
|
1689
|
+
|
|
1690
|
+
# decode package
|
|
1691
|
+
decoder.append_buffer(buffer)
|
|
1692
|
+
pdu = decoder.get_packet()
|
|
1693
|
+
assert_not_nil pdu, "PDU is null"
|
|
1694
|
+
pdu.decode_packet(decoder)
|
|
1695
|
+
pdu.validate_packet(validator)
|
|
1696
|
+
decoder.validate_offset(pdu.command_length())
|
|
1697
|
+
|
|
1698
|
+
# check instanse type and fields value
|
|
1699
|
+
assert_instance_of(Majoron::AntHill::SMPP::SMPPCancelBroadcastSMResp, pdu, "PDU class is invalid" )
|
|
1700
|
+
assert_equal 16, pdu.command_length
|
|
1701
|
+
assert_equal Majoron::AntHill::SMPP::CommandId::CM_CANCEL_BROADCAST_SM_RESP, pdu.command_id
|
|
1702
|
+
assert_equal Majoron::AntHill::SMPP::ErrorCode::ESME_ROK, pdu.command_status
|
|
1703
|
+
end
|
|
1704
|
+
|
|
1705
|
+
def test_decode_smpp_broadcast_sm
|
|
1706
|
+
dump = String.new()
|
|
1707
|
+
# read and decode package based on hex dump
|
|
1708
|
+
dump << "00 00 00 C5 00 00 01 11 00 00 00 00 00 00 00 0C 73 72 76 74 70 00 01 "
|
|
1709
|
+
dump << "02 31 32 33 00 33 34 35 00 01 00 00 03 04 05 06 06 00 02 01 FF 06 06 "
|
|
1710
|
+
dump << "00 02 01 AF 06 06 00 02 01 DF 06 01 00 03 01 02 FF 06 04 00 02 00 0A "
|
|
1711
|
+
dump << "06 05 00 03 01 02 FF 13 0C 00 01 01 06 00 00 01 02 06 02 00 03 01 FF "
|
|
1712
|
+
dump << "AA 06 03 00 01 03 06 0A 00 03 01 FF AA 03 81 00 01 10 03 03 00 03 01 "
|
|
1713
|
+
dump << "FF AA 03 02 00 01 04 02 03 00 03 01 FF AA 02 0B 00 02 00 05 12 01 00 "
|
|
1714
|
+
dump << "01 06 02 0D 00 01 07 04 24 00 03 01 FF AA 12 04 00 01 08 00 19 00 01 "
|
|
1715
|
+
dump << "09 02 01 00 01 0A 12 03 00 02 00 0B 00 0D 00 01 0C 02 0A 00 02 00 0D "
|
|
1716
|
+
dump << "02 02 00 03 01 FF AA 02 04 00 02 00 16"
|
|
1717
|
+
buffer = Majoron::AntHill::ByteBuffer.decode_hex(dump)
|
|
1718
|
+
|
|
1719
|
+
# declare variables
|
|
1720
|
+
decoder = Majoron::AntHill::SMPP::SMPPDecoder.new()
|
|
1721
|
+
validator = Majoron::AntHill::SMPP::SMPPValidator.new()
|
|
1722
|
+
|
|
1723
|
+
# decode package
|
|
1724
|
+
decoder.append_buffer(buffer)
|
|
1725
|
+
pdu = decoder.get_packet()
|
|
1726
|
+
assert_not_nil pdu, "PDU is null"
|
|
1727
|
+
pdu.decode_packet(decoder)
|
|
1728
|
+
pdu.validate_packet(validator)
|
|
1729
|
+
decoder.validate_offset(pdu.command_length())
|
|
1730
|
+
|
|
1731
|
+
# check instanse type and fields value
|
|
1732
|
+
assert_instance_of(Majoron::AntHill::SMPP::SMPPBroadcastSM, pdu, "PDU class is invalid" )
|
|
1733
|
+
assert_equal 197, pdu.command_length
|
|
1734
|
+
assert_equal Majoron::AntHill::SMPP::CommandId::CM_BROADCAST_SM, pdu.command_id
|
|
1735
|
+
assert_equal Majoron::AntHill::SMPP::ErrorCode::ESME_ROK, pdu.command_status
|
|
1736
|
+
assert_equal 12, pdu.sequence_number
|
|
1737
|
+
assert_equal "srvtp", pdu.service_type
|
|
1738
|
+
assert_equal Majoron::AntHill::SMPP::TON::INTERNATIONAL, pdu.source_addr_ton
|
|
1739
|
+
assert_equal Majoron::AntHill::SMPP::NPI::DATA, pdu.source_addr_npi
|
|
1740
|
+
assert_equal "123", pdu.source_addr
|
|
1741
|
+
assert_equal "345", pdu.message_id
|
|
1742
|
+
assert_equal 1, pdu.priority_flag
|
|
1743
|
+
assert_equal "", pdu.schedule_delivery_time
|
|
1744
|
+
assert_equal "", pdu.validity_period
|
|
1745
|
+
assert_equal 3, pdu.replace_if_present_flag
|
|
1746
|
+
assert_equal 4, pdu.data_coding
|
|
1747
|
+
assert_equal 5, pdu.sm_default_msg_id
|
|
1748
|
+
|
|
1749
|
+
|
|
1750
|
+
# Check mandatory fields with len
|
|
1751
|
+
assert_equal 3, pdu.broadcast_area_identifier.size
|
|
1752
|
+
assert_equal "01 FF", Majoron::AntHill::ByteBuffer.encode_hex(pdu.broadcast_area_identifier[0].value )
|
|
1753
|
+
assert_equal "01 AF", Majoron::AntHill::ByteBuffer.encode_hex(pdu.broadcast_area_identifier[1].value )
|
|
1754
|
+
assert_equal "01 DF", Majoron::AntHill::ByteBuffer.encode_hex(pdu.broadcast_area_identifier[2].value )
|
|
1755
|
+
assert_equal 3, pdu.broadcast_area_identifier_len.size
|
|
1756
|
+
assert_equal 2, pdu.broadcast_area_identifier_len[0]
|
|
1757
|
+
assert_equal 2, pdu.broadcast_area_identifier_len[1]
|
|
1758
|
+
assert_equal 2, pdu.broadcast_area_identifier_len[2]
|
|
1759
|
+
assert_equal "01 02 FF", Majoron::AntHill::ByteBuffer.encode_hex(pdu.broadcast_content_type)
|
|
1760
|
+
assert_equal 10, pdu.broadcast_rep_num
|
|
1761
|
+
assert_equal "01 02 FF", Majoron::AntHill::ByteBuffer.encode_hex(pdu.broadcast_frequency_interval)
|
|
1762
|
+
|
|
1763
|
+
# Check optional fields value
|
|
1764
|
+
assert_equal 1, pdu.alert_on_msg_delivery
|
|
1765
|
+
assert_equal 2, pdu.broadcast_channel_indicator
|
|
1766
|
+
assert_equal "01 FF AA", Majoron::AntHill::ByteBuffer.encode_hex(pdu.broadcast_content_type_info).strip.upcase
|
|
1767
|
+
assert_equal 3, pdu.broadcast_message_class
|
|
1768
|
+
assert_equal "01 FF AA", Majoron::AntHill::ByteBuffer.encode_hex(pdu.broadcast_service_group).strip.upcase
|
|
1769
|
+
assert_equal "10", Majoron::AntHill::ByteBuffer.encode_hex(pdu.callback_num).strip.upcase
|
|
1770
|
+
assert_equal 4, pdu.callback_num_pres_ind
|
|
1771
|
+
assert_equal "01 FF AA", Majoron::AntHill::ByteBuffer.encode_hex(pdu.callback_num_atag).strip.upcase
|
|
1772
|
+
assert_equal "01 FF AA", Majoron::AntHill::ByteBuffer.encode_hex(pdu.dest_subaddress).strip.upcase
|
|
1773
|
+
assert_equal 5, pdu.dest_port
|
|
1774
|
+
assert_equal 6, pdu.display_time
|
|
1775
|
+
assert_equal 7, pdu.language_indicator
|
|
1776
|
+
assert_equal "01 FF AA", Majoron::AntHill::ByteBuffer.encode_hex(pdu.message_payload).strip.upcase
|
|
1777
|
+
assert_equal 8, pdu.ms_validity
|
|
1778
|
+
assert_equal 9, pdu.payload_type
|
|
1779
|
+
assert_equal 10, pdu.privacy_indicator
|
|
1780
|
+
assert_equal 11, pdu.sms_signal
|
|
1781
|
+
assert_equal 12, pdu.source_addr_subunit
|
|
1782
|
+
assert_equal 13, pdu.source_port
|
|
1783
|
+
assert_equal "01 FF AA", Majoron::AntHill::ByteBuffer.encode_hex(pdu.source_subaddress).strip.upcase
|
|
1784
|
+
assert_equal 22, pdu.user_message_reference
|
|
1785
|
+
|
|
1786
|
+
# Check optional fields len value
|
|
1787
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::BYTE_LEN, pdu.alert_on_msg_delivery_len
|
|
1788
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::BYTE_LEN, pdu.broadcast_channel_indicator_len
|
|
1789
|
+
assert_equal 3, pdu.broadcast_content_type_info_len
|
|
1790
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::BYTE_LEN, pdu.broadcast_message_class_len
|
|
1791
|
+
assert_equal 3, pdu.broadcast_service_group_len
|
|
1792
|
+
assert_equal 1, pdu.callback_num_len
|
|
1793
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::BYTE_LEN, pdu.callback_num_pres_ind_len
|
|
1794
|
+
assert_equal 3, pdu.callback_num_atag_len
|
|
1795
|
+
assert_equal 3, pdu.dest_subaddress_len
|
|
1796
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::WORD_LEN, pdu.dest_port_len
|
|
1797
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::BYTE_LEN, pdu.display_time_len
|
|
1798
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::BYTE_LEN, pdu.language_indicator_len
|
|
1799
|
+
assert_equal 3, pdu.message_payload_len
|
|
1800
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::BYTE_LEN, pdu.ms_validity_len
|
|
1801
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::BYTE_LEN, pdu.privacy_indicator_len
|
|
1802
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::WORD_LEN, pdu.sms_signal_len
|
|
1803
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::BYTE_LEN, pdu.source_addr_subunit_len
|
|
1804
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::WORD_LEN, pdu.source_port_len
|
|
1805
|
+
assert_equal 3, pdu.source_subaddress_len
|
|
1806
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::WORD_LEN, pdu.user_message_reference_len
|
|
1807
|
+
end
|
|
1808
|
+
|
|
1809
|
+
def test_decode_smpp_broadcast_sm_resp
|
|
1810
|
+
dump = String.new()
|
|
1811
|
+
# read and decode package based on hex dump
|
|
1812
|
+
dump << "00 00 00 2E 80 00 01 11 00 00 00 00 00 00 00 0C 31 32 33 00 06 07 00 "
|
|
1813
|
+
dump << "04 00 00 00 01 06 06 00 02 01 FF 06 06 00 02 01 AF 06 06 00 02 01 DF"
|
|
1814
|
+
buffer = Majoron::AntHill::ByteBuffer.decode_hex(dump)
|
|
1815
|
+
|
|
1816
|
+
# declare variables
|
|
1817
|
+
decoder = Majoron::AntHill::SMPP::SMPPDecoder.new()
|
|
1818
|
+
validator = Majoron::AntHill::SMPP::SMPPValidator.new()
|
|
1819
|
+
|
|
1820
|
+
# decode package
|
|
1821
|
+
decoder.append_buffer(buffer)
|
|
1822
|
+
pdu = decoder.get_packet()
|
|
1823
|
+
assert_not_nil pdu, "PDU is null"
|
|
1824
|
+
pdu.decode_packet(decoder)
|
|
1825
|
+
pdu.validate_packet(validator)
|
|
1826
|
+
decoder.validate_offset(pdu.command_length())
|
|
1827
|
+
|
|
1828
|
+
# check instanse type and fields value
|
|
1829
|
+
assert_instance_of(Majoron::AntHill::SMPP::SMPPBroadcastSMResp, pdu, "PDU class is invalid" )
|
|
1830
|
+
assert_equal 46, pdu.command_length
|
|
1831
|
+
assert_equal Majoron::AntHill::SMPP::CommandId::CM_BROADCAST_SM_RESP, pdu.command_id
|
|
1832
|
+
assert_equal Majoron::AntHill::SMPP::ErrorCode::ESME_ROK, pdu.command_status
|
|
1833
|
+
assert_equal 12, pdu.sequence_number
|
|
1834
|
+
assert_equal "123", pdu.message_id
|
|
1835
|
+
|
|
1836
|
+
# Check optional fields value
|
|
1837
|
+
assert_equal 1, pdu.broadcast_error_status
|
|
1838
|
+
assert_equal 3, pdu.failed_broadcast_area_identifier.size
|
|
1839
|
+
assert_equal "01 FF", Majoron::AntHill::ByteBuffer.encode_hex(pdu.failed_broadcast_area_identifier[0].value )
|
|
1840
|
+
assert_equal "01 AF", Majoron::AntHill::ByteBuffer.encode_hex(pdu.failed_broadcast_area_identifier[1].value )
|
|
1841
|
+
assert_equal "01 DF", Majoron::AntHill::ByteBuffer.encode_hex(pdu.failed_broadcast_area_identifier[2].value )
|
|
1842
|
+
|
|
1843
|
+
# Check optional fields len value
|
|
1844
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::DWORD_LEN, pdu.broadcast_error_status_len
|
|
1845
|
+
assert_equal 3, pdu.failed_broadcast_area_identifier_len.size
|
|
1846
|
+
assert_equal 2, pdu.failed_broadcast_area_identifier_len[0]
|
|
1847
|
+
assert_equal 2, pdu.failed_broadcast_area_identifier_len[1]
|
|
1848
|
+
assert_equal 2, pdu.failed_broadcast_area_identifier_len[2]
|
|
1849
|
+
end
|
|
1850
|
+
|
|
1851
|
+
|
|
1852
|
+
|
|
1853
|
+
def test_decode_smpp_alert_notification
|
|
1854
|
+
dump = String.new()
|
|
1855
|
+
# read and decode package based on hex dump
|
|
1856
|
+
dump << "00 00 00 21 00 00 01 02 00 00 00 00 00 00 00 0C 01 01 31 32 33 00 02 "
|
|
1857
|
+
dump << "02 33 32 31 00 04 22 00 01 01"
|
|
1858
|
+
buffer = Majoron::AntHill::ByteBuffer.decode_hex(dump)
|
|
1859
|
+
|
|
1860
|
+
# declare variables
|
|
1861
|
+
decoder = Majoron::AntHill::SMPP::SMPPDecoder.new()
|
|
1862
|
+
validator = Majoron::AntHill::SMPP::SMPPValidator.new()
|
|
1863
|
+
|
|
1864
|
+
# decode package
|
|
1865
|
+
decoder.append_buffer(buffer)
|
|
1866
|
+
pdu = decoder.get_packet()
|
|
1867
|
+
assert_not_nil pdu, "PDU is null"
|
|
1868
|
+
pdu.decode_packet(decoder)
|
|
1869
|
+
pdu.validate_packet(validator)
|
|
1870
|
+
decoder.validate_offset(pdu.command_length())
|
|
1871
|
+
|
|
1872
|
+
# check instanse type and fields value
|
|
1873
|
+
assert_instance_of(Majoron::AntHill::SMPP::SMPPAlertNotification, pdu, "PDU class is invalid" )
|
|
1874
|
+
assert_equal 33, pdu.command_length
|
|
1875
|
+
assert_equal Majoron::AntHill::SMPP::CommandId::CM_ALERT_NOTIFICATION, pdu.command_id
|
|
1876
|
+
assert_equal Majoron::AntHill::SMPP::ErrorCode::ESME_ROK, pdu.command_status
|
|
1877
|
+
assert_equal 12, pdu.sequence_number
|
|
1878
|
+
assert_equal 1, pdu.source_addr_ton
|
|
1879
|
+
assert_equal 1, pdu.source_addr_npi
|
|
1880
|
+
assert_equal "123", pdu.source_addr
|
|
1881
|
+
assert_equal 2, pdu.esme_addr_ton
|
|
1882
|
+
assert_equal 2, pdu.esme_addr_npi
|
|
1883
|
+
assert_equal "321", pdu.esme_addr
|
|
1884
|
+
|
|
1885
|
+
# check optional fields
|
|
1886
|
+
assert_equal 1, pdu.ms_availability_status
|
|
1887
|
+
|
|
1888
|
+
|
|
1889
|
+
# check optional fields len
|
|
1890
|
+
assert_equal Majoron::AntHill::SMPP::SMPPTLVLen::BYTE_LEN, pdu.ms_availability_status_len
|
|
1891
|
+
|
|
1892
|
+
end
|
|
1893
|
+
|
|
1894
|
+
|
|
1895
|
+
|
|
1896
|
+
|
|
1897
|
+
def test_encode_smpp_bind_receiver
|
|
1898
|
+
# Create new package
|
|
1899
|
+
pdu = Majoron::AntHill::SMPP::SMPPBindReceiver.new()
|
|
1900
|
+
pdu.command_status = Majoron::AntHill::SMPP::ErrorCode::ESME_ROK
|
|
1901
|
+
pdu.sequence_number = 11
|
|
1902
|
+
pdu.system_id = "SystemId"
|
|
1903
|
+
pdu.password = "password"
|
|
1904
|
+
pdu.system_type = "SMSC"
|
|
1905
|
+
pdu.interface_version = Majoron::AntHill::SMPP::InterfaceVersion::SMPP_VER_5_0
|
|
1906
|
+
pdu.addr_ton = Majoron::AntHill::SMPP::TON::INTERNATIONAL
|
|
1907
|
+
pdu.addr_npi = Majoron::AntHill::SMPP::NPI::ISDN
|
|
1908
|
+
pdu.address_range = "123"
|
|
1909
|
+
|
|
1910
|
+
begin
|
|
1911
|
+
encoder = Majoron::AntHill::SMPP::SMPPEncoder.new()
|
|
1912
|
+
validator = Majoron::AntHill::SMPP::SMPPValidator.new()
|
|
1913
|
+
|
|
1914
|
+
# Encode packet
|
|
1915
|
+
encoder.reset_buffer()
|
|
1916
|
+
pdu.validate_packet(validator)
|
|
1917
|
+
pdu.encode_packet(encoder)
|
|
1918
|
+
encoder.encode_command_length()
|
|
1919
|
+
buffer = encoder.get_buffer()
|
|
1920
|
+
|
|
1921
|
+
dump = String.new()
|
|
1922
|
+
# Compare result at hex presentation
|
|
1923
|
+
hex = Majoron::AntHill::ByteBuffer.encode_hex(buffer)
|
|
1924
|
+
dump << "00 00 00 2E 00 00 00 01 00 00 00 00 00 00 00 0B 53 79 73 74 65 6D 49 "
|
|
1925
|
+
dump << "64 00 70 61 73 73 77 6F 72 64 00 53 4D 53 43 00 50 01 01 31 32 33 00 "
|
|
1926
|
+
assert_equal dump.strip.upcase, hex.strip.upcase
|
|
1927
|
+
rescue RuntimeError => e
|
|
1928
|
+
raise
|
|
1929
|
+
end
|
|
1930
|
+
end
|
|
1931
|
+
|
|
1932
|
+
def test_encode_smpp_bind_receiver_resp
|
|
1933
|
+
# Create new package
|
|
1934
|
+
pdu = Majoron::AntHill::SMPP::SMPPBindReceiverResp.new()
|
|
1935
|
+
pdu.command_status = Majoron::AntHill::SMPP::ErrorCode::ESME_ROK
|
|
1936
|
+
pdu.sequence_number = 9402
|
|
1937
|
+
pdu.system_id = "SSSMSC"
|
|
1938
|
+
pdu.sc_interface_version = Majoron::AntHill::SMPP::InterfaceVersion::SMPP_VER_3_3
|
|
1939
|
+
|
|
1940
|
+
begin
|
|
1941
|
+
encoder = Majoron::AntHill::SMPP::SMPPEncoder.new()
|
|
1942
|
+
validator = Majoron::AntHill::SMPP::SMPPValidator.new()
|
|
1943
|
+
|
|
1944
|
+
# Encode packet
|
|
1945
|
+
encoder.reset_buffer()
|
|
1946
|
+
pdu.validate_packet(validator)
|
|
1947
|
+
pdu.encode_packet(encoder)
|
|
1948
|
+
encoder.encode_command_length()
|
|
1949
|
+
buffer = encoder.get_buffer()
|
|
1950
|
+
|
|
1951
|
+
dump = String.new()
|
|
1952
|
+
# Compare result at hex presentation
|
|
1953
|
+
hex = Majoron::AntHill::ByteBuffer.encode_hex(buffer)
|
|
1954
|
+
dump << "00 00 00 1c 80 00 00 01 00 00 00 00 00 00 24 ba 53 53 53 4d "
|
|
1955
|
+
dump << "53 43 00 02 10 00 01 33 "
|
|
1956
|
+
assert_equal dump.strip.upcase, hex.strip.upcase
|
|
1957
|
+
rescue RuntimeError => e
|
|
1958
|
+
raise
|
|
1959
|
+
end
|
|
1960
|
+
end
|
|
1961
|
+
|
|
1962
|
+
|
|
1963
|
+
def test_encode_smpp_bind_transceiver
|
|
1964
|
+
# Create new package
|
|
1965
|
+
pdu = Majoron::AntHill::SMPP::SMPPBindTransceiver.new()
|
|
1966
|
+
pdu.command_status = Majoron::AntHill::SMPP::ErrorCode::ESME_ROK
|
|
1967
|
+
pdu.sequence_number = 11
|
|
1968
|
+
pdu.system_id = "SystemId"
|
|
1969
|
+
pdu.password = "password"
|
|
1970
|
+
pdu.system_type = "SMSC"
|
|
1971
|
+
pdu.interface_version = Majoron::AntHill::SMPP::InterfaceVersion::SMPP_VER_5_0
|
|
1972
|
+
pdu.addr_ton = Majoron::AntHill::SMPP::TON::INTERNATIONAL
|
|
1973
|
+
pdu.addr_npi = Majoron::AntHill::SMPP::NPI::ISDN
|
|
1974
|
+
pdu.address_range = "123"
|
|
1975
|
+
|
|
1976
|
+
begin
|
|
1977
|
+
encoder = Majoron::AntHill::SMPP::SMPPEncoder.new()
|
|
1978
|
+
validator = Majoron::AntHill::SMPP::SMPPValidator.new()
|
|
1979
|
+
|
|
1980
|
+
# Encode packet
|
|
1981
|
+
encoder.reset_buffer()
|
|
1982
|
+
pdu.validate_packet(validator)
|
|
1983
|
+
pdu.encode_packet(encoder)
|
|
1984
|
+
encoder.encode_command_length()
|
|
1985
|
+
buffer = encoder.get_buffer()
|
|
1986
|
+
|
|
1987
|
+
dump = String.new()
|
|
1988
|
+
# Compare result at hex presentation
|
|
1989
|
+
hex = Majoron::AntHill::ByteBuffer.encode_hex(buffer)
|
|
1990
|
+
dump << "00 00 00 2E 00 00 00 09 00 00 00 00 00 00 00 0B 53 79 73 74 65 6D 49 "
|
|
1991
|
+
dump << "64 00 70 61 73 73 77 6F 72 64 00 53 4D 53 43 00 50 01 01 31 32 33 00 "
|
|
1992
|
+
assert_equal dump.strip.upcase, hex.strip.upcase
|
|
1993
|
+
rescue RuntimeError => e
|
|
1994
|
+
raise
|
|
1995
|
+
end
|
|
1996
|
+
end
|
|
1997
|
+
|
|
1998
|
+
def test_encode_smpp_bind_transceiver_resp
|
|
1999
|
+
# Create new package
|
|
2000
|
+
pdu = Majoron::AntHill::SMPP::SMPPBindTransceiverResp.new()
|
|
2001
|
+
pdu.command_status = Majoron::AntHill::SMPP::ErrorCode::ESME_ROK
|
|
2002
|
+
pdu.sequence_number = 9402
|
|
2003
|
+
pdu.system_id = "SSSMSC"
|
|
2004
|
+
pdu.sc_interface_version = Majoron::AntHill::SMPP::InterfaceVersion::SMPP_VER_3_3
|
|
2005
|
+
|
|
2006
|
+
begin
|
|
2007
|
+
encoder = Majoron::AntHill::SMPP::SMPPEncoder.new()
|
|
2008
|
+
validator = Majoron::AntHill::SMPP::SMPPValidator.new()
|
|
2009
|
+
|
|
2010
|
+
# Encode packet
|
|
2011
|
+
encoder.reset_buffer()
|
|
2012
|
+
pdu.validate_packet(validator)
|
|
2013
|
+
pdu.encode_packet(encoder)
|
|
2014
|
+
encoder.encode_command_length()
|
|
2015
|
+
buffer = encoder.get_buffer()
|
|
2016
|
+
|
|
2017
|
+
dump = String.new()
|
|
2018
|
+
# Compare result at hex presentation
|
|
2019
|
+
hex = Majoron::AntHill::ByteBuffer.encode_hex(buffer)
|
|
2020
|
+
dump << "00 00 00 1c 80 00 00 09 00 00 00 00 00 00 24 ba 53 53 53 4d "
|
|
2021
|
+
dump << "53 43 00 02 10 00 01 33 "
|
|
2022
|
+
assert_equal dump.strip.upcase, hex.strip.upcase
|
|
2023
|
+
rescue RuntimeError => e
|
|
2024
|
+
raise
|
|
2025
|
+
end
|
|
2026
|
+
end
|
|
2027
|
+
|
|
2028
|
+
def test_encode_smpp_bind_transmitter
|
|
2029
|
+
# Create new package
|
|
2030
|
+
pdu = Majoron::AntHill::SMPP::SMPPBindTransmitter.new()
|
|
2031
|
+
pdu.command_status = Majoron::AntHill::SMPP::ErrorCode::ESME_ROK
|
|
2032
|
+
pdu.sequence_number = 11
|
|
2033
|
+
pdu.system_id = "SystemId"
|
|
2034
|
+
pdu.password = "password"
|
|
2035
|
+
pdu.system_type = "SMSC"
|
|
2036
|
+
pdu.interface_version = Majoron::AntHill::SMPP::InterfaceVersion::SMPP_VER_5_0
|
|
2037
|
+
pdu.addr_ton = Majoron::AntHill::SMPP::TON::INTERNATIONAL
|
|
2038
|
+
pdu.addr_npi = Majoron::AntHill::SMPP::NPI::ISDN
|
|
2039
|
+
pdu.address_range = "123"
|
|
2040
|
+
|
|
2041
|
+
begin
|
|
2042
|
+
encoder = Majoron::AntHill::SMPP::SMPPEncoder.new()
|
|
2043
|
+
validator = Majoron::AntHill::SMPP::SMPPValidator.new()
|
|
2044
|
+
|
|
2045
|
+
# Encode packet
|
|
2046
|
+
encoder.reset_buffer()
|
|
2047
|
+
pdu.validate_packet(validator)
|
|
2048
|
+
pdu.encode_packet(encoder)
|
|
2049
|
+
encoder.encode_command_length()
|
|
2050
|
+
buffer = encoder.get_buffer()
|
|
2051
|
+
|
|
2052
|
+
dump = String.new()
|
|
2053
|
+
# Compare result at hex presentation
|
|
2054
|
+
hex = Majoron::AntHill::ByteBuffer.encode_hex(buffer)
|
|
2055
|
+
dump << "00 00 00 2E 00 00 00 02 00 00 00 00 00 00 00 0B 53 79 73 74 65 6D 49 "
|
|
2056
|
+
dump << "64 00 70 61 73 73 77 6F 72 64 00 53 4D 53 43 00 50 01 01 31 32 33 00 "
|
|
2057
|
+
assert_equal dump.strip.upcase, hex.strip.upcase
|
|
2058
|
+
rescue RuntimeError => e
|
|
2059
|
+
raise
|
|
2060
|
+
end
|
|
2061
|
+
end
|
|
2062
|
+
|
|
2063
|
+
def test_encode_smpp_bind_transmitter_resp
|
|
2064
|
+
# Create new package
|
|
2065
|
+
pdu = Majoron::AntHill::SMPP::SMPPBindTransmitterResp.new()
|
|
2066
|
+
pdu.command_status = Majoron::AntHill::SMPP::ErrorCode::ESME_ROK
|
|
2067
|
+
pdu.sequence_number = 9402
|
|
2068
|
+
pdu.system_id = "SSSMSC"
|
|
2069
|
+
pdu.sc_interface_version = Majoron::AntHill::SMPP::InterfaceVersion::SMPP_VER_3_3
|
|
2070
|
+
|
|
2071
|
+
begin
|
|
2072
|
+
encoder = Majoron::AntHill::SMPP::SMPPEncoder.new()
|
|
2073
|
+
validator = Majoron::AntHill::SMPP::SMPPValidator.new()
|
|
2074
|
+
|
|
2075
|
+
# Encode packet
|
|
2076
|
+
encoder.reset_buffer()
|
|
2077
|
+
pdu.validate_packet(validator)
|
|
2078
|
+
pdu.encode_packet(encoder)
|
|
2079
|
+
encoder.encode_command_length()
|
|
2080
|
+
buffer = encoder.get_buffer()
|
|
2081
|
+
|
|
2082
|
+
dump = String.new()
|
|
2083
|
+
# Compare result at hex presentation
|
|
2084
|
+
hex = Majoron::AntHill::ByteBuffer.encode_hex(buffer)
|
|
2085
|
+
dump << "00 00 00 1c 80 00 00 02 00 00 00 00 00 00 24 ba 53 53 53 4d "
|
|
2086
|
+
dump << "53 43 00 02 10 00 01 33 "
|
|
2087
|
+
assert_equal dump.strip.upcase, hex.strip.upcase
|
|
2088
|
+
rescue RuntimeError => e
|
|
2089
|
+
raise
|
|
2090
|
+
end
|
|
2091
|
+
end
|
|
2092
|
+
|
|
2093
|
+
|
|
2094
|
+
|
|
2095
|
+
end
|