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,137 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Copyright 2007 Majoron.com (developers@majoron.com)
|
|
3
|
+
# Original sources are available at www.majoron.com
|
|
4
|
+
#
|
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
# you may not use this file except in compliance with the License.
|
|
7
|
+
# You may obtain a copy of the License at
|
|
8
|
+
#
|
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
#
|
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
# See the License for the specific language governing permissions and
|
|
15
|
+
# limitations under the License.
|
|
16
|
+
#
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
module Majoron
|
|
20
|
+
module AntHill
|
|
21
|
+
module SMPP
|
|
22
|
+
class SMPPDeliverSMResp < SMPPResp
|
|
23
|
+
# Constructor.
|
|
24
|
+
def initialize(command_status = ErrorCode::ESME_ROK, sequence_number = nil)
|
|
25
|
+
super(CommandId::CM_DELIVER_SM_RESP, command_status, sequence_number)
|
|
26
|
+
|
|
27
|
+
# Mandatory fields
|
|
28
|
+
@message_id = ""
|
|
29
|
+
|
|
30
|
+
# Optional fields
|
|
31
|
+
@additional_status_info_text = nil
|
|
32
|
+
@delivery_failure_reason = nil
|
|
33
|
+
@network_error_code = nil
|
|
34
|
+
|
|
35
|
+
# Optional fields length
|
|
36
|
+
@additional_status_info_text_len = SMPPTLVLen::ZERO_LEN
|
|
37
|
+
@delivery_failure_reason_len = SMPPTLVLen::BYTE_LEN
|
|
38
|
+
@network_error_code_len = SMPPTLVLen::BYTE_LEN + SMPPTLVLen::WORD_LEN
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
# Interface to encode SMPP packet
|
|
42
|
+
def encode_packet(encoder)
|
|
43
|
+
# Encode header and mandatory fields
|
|
44
|
+
encoder.encode_header(@header)
|
|
45
|
+
encoder.encode_message_id(@message_id)
|
|
46
|
+
|
|
47
|
+
# Encode optional fields
|
|
48
|
+
encoder.encode_additional_status_info_text(@additional_status_info_text,
|
|
49
|
+
@additional_status_info_text_len) if !@additional_status_info_text.nil?
|
|
50
|
+
encoder.encode_delivery_failure_reason(@delivery_failure_reason,
|
|
51
|
+
@delivery_failure_reason_len) if !@delivery_failure_reason.nil?
|
|
52
|
+
encoder.encode_network_error_code(@network_error_code,
|
|
53
|
+
@network_error_code_len) if !@network_error_code.nil?
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
# Interface to decode SMPP packet
|
|
57
|
+
def decode_packet(decoder)
|
|
58
|
+
# Decode header and mandatory fields
|
|
59
|
+
@header = decoder.decode_header()
|
|
60
|
+
@message_id = decoder.decode_message_id(command_length())
|
|
61
|
+
|
|
62
|
+
# Decode optional fields
|
|
63
|
+
while decoder.has_tlvs()
|
|
64
|
+
case decoder.get_tlv_code()
|
|
65
|
+
when OptTags::TAG_ADDITIONAL_STATUS_INFO_TEXT
|
|
66
|
+
@additional_status_info_text, @additional_status_info_text_len =
|
|
67
|
+
decoder.decode_additional_status_info_text(command_length())
|
|
68
|
+
when OptTags::TAG_DELIVERY_FAILURE_REASON
|
|
69
|
+
@delivery_failure_reason, @delivery_failure_reason_len =
|
|
70
|
+
decoder.decode_delivery_failure_reason(command_length())
|
|
71
|
+
when OptTags::TAG_NETWORK_ERROR_CODE
|
|
72
|
+
@network_error_code, @network_error_code_len =
|
|
73
|
+
decoder.decode_network_error_code(command_length())
|
|
74
|
+
else
|
|
75
|
+
# Report about error
|
|
76
|
+
raise Errors::UNKNOWN_TAG_MSG + decoder.get_tlv_error()
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
# Interface to validate SMPP packet
|
|
82
|
+
def validate_packet(validator)
|
|
83
|
+
# Validate header and mandatory fields
|
|
84
|
+
validator.validate_header(@header)
|
|
85
|
+
validator.validate_message_id(@message_id)
|
|
86
|
+
|
|
87
|
+
# Validate optional fields
|
|
88
|
+
validator.validate_additional_status_info_text(@additional_status_info_text,
|
|
89
|
+
@additional_status_info_text_len) if !@additional_status_info_text.nil?
|
|
90
|
+
validator.validate_delivery_failure_reason(@delivery_failure_reason,
|
|
91
|
+
@delivery_failure_reason_len) if !@delivery_failure_reason.nil?
|
|
92
|
+
validator.validate_network_error_code(@network_error_code,
|
|
93
|
+
@network_error_code_len) if !@network_error_code.nil?
|
|
94
|
+
|
|
95
|
+
# Validate compex rules
|
|
96
|
+
validator.validate_message_id_null(message_id)
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
# Interface to output SMPP packet
|
|
100
|
+
def output_packet(outputter)
|
|
101
|
+
# Output header and mandatory fields
|
|
102
|
+
outputter.output_header(@header)
|
|
103
|
+
outputter.output_message_id(@message_id)
|
|
104
|
+
|
|
105
|
+
# Output optional fields
|
|
106
|
+
outputter.output_additional_status_info_text(@additional_status_info_text,
|
|
107
|
+
@additional_status_info_text_len) if !@additional_status_info_text.nil?
|
|
108
|
+
outputter.output_delivery_failure_reason(@delivery_failure_reason,
|
|
109
|
+
@delivery_failure_reason_len) if !@delivery_failure_reason.nil?
|
|
110
|
+
outputter.output_network_error_code(@network_error_code,
|
|
111
|
+
@network_error_code_len) if !@network_error_code.nil?
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
public
|
|
115
|
+
def additional_status_info_text=(additional_status_info_text)
|
|
116
|
+
@additional_status_info_text = additional_status_info_text
|
|
117
|
+
@additional_status_info_text_len = additional_status_info_text.size()
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
public
|
|
122
|
+
# Mandatory fields
|
|
123
|
+
attr_accessor :message_id
|
|
124
|
+
|
|
125
|
+
# Optional fields
|
|
126
|
+
attr_reader :additional_status_info_text
|
|
127
|
+
attr_accessor :delivery_failure_reason
|
|
128
|
+
attr_accessor :network_error_code
|
|
129
|
+
|
|
130
|
+
# Optional fields length
|
|
131
|
+
attr_accessor :additional_status_info_text_len
|
|
132
|
+
attr_accessor :delivery_failure_reason_len
|
|
133
|
+
attr_accessor :network_error_code_len
|
|
134
|
+
end
|
|
135
|
+
end
|
|
136
|
+
end
|
|
137
|
+
end
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Copyright 2007 Majoron.com (developers@majoron.com)
|
|
3
|
+
# Original sources are available at www.majoron.com
|
|
4
|
+
#
|
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
# you may not use this file except in compliance with the License.
|
|
7
|
+
# You may obtain a copy of the License at
|
|
8
|
+
#
|
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
#
|
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
# See the License for the specific language governing permissions and
|
|
15
|
+
# limitations under the License.
|
|
16
|
+
#
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
module Majoron
|
|
20
|
+
module AntHill
|
|
21
|
+
module SMPP
|
|
22
|
+
class SMPPEnquireLink < SMPPPDU
|
|
23
|
+
def initialize(command_status = ErrorCode::ESME_ROK, sequence_number = nil)
|
|
24
|
+
super(CommandId::CM_ENQUIRE_LINK, command_status, sequence_number)
|
|
25
|
+
end
|
|
26
|
+
# Interface to encode SMPP packet
|
|
27
|
+
def encode_packet(encoder)
|
|
28
|
+
# Encode header and mandatory fields
|
|
29
|
+
encoder.encode_header(@header)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
# Interface to decode SMPP packet
|
|
33
|
+
def decode_packet(decoder)
|
|
34
|
+
# Decode header and mandatory fields
|
|
35
|
+
@header = decoder.decode_header()
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
# Interface to validate SMPP packet
|
|
39
|
+
def validate_packet(validator)
|
|
40
|
+
# Validate header and mandatory fields
|
|
41
|
+
validator.validate_header(@header)
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# Interface to output SMPP packet
|
|
45
|
+
def output_packet(outputter)
|
|
46
|
+
# Output header and mandatory fields
|
|
47
|
+
outputter.output_header(@header)
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
public
|
|
51
|
+
# Mandatory fields
|
|
52
|
+
|
|
53
|
+
# Optional fields
|
|
54
|
+
|
|
55
|
+
# Optional fields length
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Copyright 2007 Majoron.com (developers@majoron.com)
|
|
3
|
+
# Original sources are available at www.majoron.com
|
|
4
|
+
#
|
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
# you may not use this file except in compliance with the License.
|
|
7
|
+
# You may obtain a copy of the License at
|
|
8
|
+
#
|
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
#
|
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
# See the License for the specific language governing permissions and
|
|
15
|
+
# limitations under the License.
|
|
16
|
+
#
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
module Majoron
|
|
20
|
+
module AntHill
|
|
21
|
+
module SMPP
|
|
22
|
+
class SMPPEnquireLinkResp < SMPPResp
|
|
23
|
+
# Constructor.
|
|
24
|
+
def initialize(command_status = ErrorCode::ESME_ROK, sequence_number = nil)
|
|
25
|
+
super(CommandId::CM_ENQUIRE_LINK_RESP, command_status, sequence_number)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# Interface to encode SMPP packet
|
|
29
|
+
def encode_packet(encoder)
|
|
30
|
+
# Encode header and mandatory fields
|
|
31
|
+
encoder.encode_header(@header)
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# Interface to decode SMPP packet
|
|
35
|
+
def decode_packet(decoder)
|
|
36
|
+
# Decode header and mandatory fields
|
|
37
|
+
@header = decoder.decode_header()
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
# Interface to validate SMPP packet
|
|
41
|
+
def validate_packet(validator)
|
|
42
|
+
# Validate header and mandatory fields
|
|
43
|
+
validator.validate_header(@header)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
# Interface to output SMPP packet
|
|
47
|
+
def output_packet(outputter)
|
|
48
|
+
# Output header and mandatory fields
|
|
49
|
+
outputter.output_header(@header)
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
public
|
|
53
|
+
# Mandatory fields
|
|
54
|
+
|
|
55
|
+
# Optional fields
|
|
56
|
+
|
|
57
|
+
# Optional fields length
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Copyright 2007 Majoron.com (developers@majoron.com)
|
|
3
|
+
# Original sources are available at www.majoron.com
|
|
4
|
+
#
|
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
# you may not use this file except in compliance with the License.
|
|
7
|
+
# You may obtain a copy of the License at
|
|
8
|
+
#
|
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
#
|
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
# See the License for the specific language governing permissions and
|
|
15
|
+
# limitations under the License.
|
|
16
|
+
#
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
module Majoron
|
|
20
|
+
module AntHill
|
|
21
|
+
module SMPP
|
|
22
|
+
class SMPPGenericNack < SMPPPDU
|
|
23
|
+
def initialize(command_status = ErrorCode::ESME_ROK, sequence_number = nil)
|
|
24
|
+
super(CommandId::CM_GENERIC_NACK, command_status, sequence_number)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# Interface to encode SMPP packet
|
|
28
|
+
def encode_packet(encoder)
|
|
29
|
+
# Encode header and mandatory fields
|
|
30
|
+
encoder.encode_header(@header)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
# Interface to decode SMPP packet
|
|
34
|
+
def decode_packet(decoder)
|
|
35
|
+
# Decode header and mandatory fields
|
|
36
|
+
@header = decoder.decode_header()
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# Interface to validate SMPP packet
|
|
40
|
+
def validate_packet(validator)
|
|
41
|
+
# Validate header and mandatory fields
|
|
42
|
+
validator.validate_header(@header)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
# Interface to output SMPP packet
|
|
46
|
+
def output_packet(outputter)
|
|
47
|
+
# Output header and mandatory fields
|
|
48
|
+
outputter.output_header(@header)
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
public
|
|
52
|
+
# Mandatory fields
|
|
53
|
+
|
|
54
|
+
# Optional fields
|
|
55
|
+
|
|
56
|
+
# Optional fields length
|
|
57
|
+
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Copyright 2007 Majoron.com (developers@majoron.com)
|
|
3
|
+
# Original sources are available at www.majoron.com
|
|
4
|
+
#
|
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
# you may not use this file except in compliance with the License.
|
|
7
|
+
# You may obtain a copy of the License at
|
|
8
|
+
#
|
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
#
|
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
# See the License for the specific language governing permissions and
|
|
15
|
+
# limitations under the License.
|
|
16
|
+
#
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
module Majoron
|
|
20
|
+
module AntHill
|
|
21
|
+
module SMPP
|
|
22
|
+
class SMPPOutbind < SMPPPDU
|
|
23
|
+
def initialize(command_status = ErrorCode::ESME_ROK, sequence_number = nil)
|
|
24
|
+
super(CommandId::CM_OUTBIND, command_status, sequence_number)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# Interface to encode SMPP packet
|
|
28
|
+
def encode_packet(encoder)
|
|
29
|
+
# Encode header and mandatory fields
|
|
30
|
+
encoder.encode_header(@header)
|
|
31
|
+
encoder.encode_system_id(@system_id)
|
|
32
|
+
encoder.encode_password(@password)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
# Interface to decode SMPP packet
|
|
36
|
+
def decode_packet(decoder)
|
|
37
|
+
# Decode header and mandatory fields
|
|
38
|
+
@header = decoder.decode_header()
|
|
39
|
+
@system_id = decoder.decode_system_id(command_length())
|
|
40
|
+
@password = decoder.decode_password(command_length())
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
# Interface to validate SMPP packet
|
|
44
|
+
def validate_packet(validator)
|
|
45
|
+
# Validate header and mandatory fields
|
|
46
|
+
validator.validate_header(@header)
|
|
47
|
+
validator.validate_system_id(@system_id)
|
|
48
|
+
validator.validate_password(@password)
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
# Interface to output SMPP packet
|
|
52
|
+
def output_packet(outputter)
|
|
53
|
+
# Output header and mandatory fields
|
|
54
|
+
outputter.output_header(@header)
|
|
55
|
+
outputter.output_system_id(@system_id)
|
|
56
|
+
outputter.output_password(@password)
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
public
|
|
60
|
+
# Mandatory fields
|
|
61
|
+
attr_accessor :system_id
|
|
62
|
+
attr_accessor :password
|
|
63
|
+
|
|
64
|
+
# Optional fields
|
|
65
|
+
|
|
66
|
+
# Optional fields length
|
|
67
|
+
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
end
|
data/lib/pdu/smpp_pdu.rb
ADDED
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Copyright 2007 Majoron.com (developers@majoron.com)
|
|
3
|
+
# Original sources are available at www.majoron.com
|
|
4
|
+
#
|
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
# you may not use this file except in compliance with the License.
|
|
7
|
+
# You may obtain a copy of the License at
|
|
8
|
+
#
|
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
#
|
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
# See the License for the specific language governing permissions and
|
|
15
|
+
# limitations under the License.
|
|
16
|
+
#
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
module Majoron
|
|
20
|
+
module AntHill
|
|
21
|
+
module SMPP
|
|
22
|
+
# The base class for all SMPP protocol data units.
|
|
23
|
+
# All SMPP packages inherited from this class.
|
|
24
|
+
class SMPPPDU
|
|
25
|
+
|
|
26
|
+
# Constructor
|
|
27
|
+
def initialize(command_id, command_status, sequence_number)
|
|
28
|
+
@header = Header.new()
|
|
29
|
+
@header.command_id = command_id
|
|
30
|
+
@header.command_status = command_status
|
|
31
|
+
@header.sequence_number = sequence_number
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# Interface to encode SMPP packet
|
|
35
|
+
def encode_packet(encoder)
|
|
36
|
+
raise Errors::INTERFACE_NOT_IMPLEMENTED
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# Interface to decode SMPP packet
|
|
40
|
+
def decode_packet(decoder)
|
|
41
|
+
raise Errors::INTERFACE_NOT_IMPLEMENTED
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# Interface to validate SMPP packet
|
|
45
|
+
def validate_packet(validator)
|
|
46
|
+
raise Errors::INTERFACE_NOT_IMPLEMENTED
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
# Interface to output SMPP packet
|
|
50
|
+
def output_packet(outputter)
|
|
51
|
+
raise Errors::INTERFACE_NOT_IMPLEMENTED
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def command_length(command_length)
|
|
55
|
+
@header.command_length = command_length
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def command_length()
|
|
59
|
+
@header.command_length
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def command_id(command_id)
|
|
63
|
+
@header.command_id = command_id
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def command_id()
|
|
67
|
+
@header.command_id
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def command_status=(command_status)
|
|
71
|
+
@header.command_status = command_status
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def command_status()
|
|
75
|
+
@header.command_status
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def sequence_number=(sequence_number)
|
|
79
|
+
@header.sequence_number = sequence_number
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def sequence_number()
|
|
83
|
+
@header.sequence_number
|
|
84
|
+
end
|
|
85
|
+
public
|
|
86
|
+
attr_accessor :header
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
end
|