rocket_sms 0.1.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/.gitignore +19 -0
- data/.rspec +2 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +29 -0
- data/Rakefile +1 -0
- data/bin/scheduler_runner.rb +11 -0
- data/bin/transceiver_runner.rb +10 -0
- data/examples/gateway.rb +7 -0
- data/examples/gateway.yml +40 -0
- data/examples/test.rb +60 -0
- data/lib/rocket_sms.rb +111 -0
- data/lib/rocket_sms/did.rb +25 -0
- data/lib/rocket_sms/gateway.rb +123 -0
- data/lib/rocket_sms/lock.rb +0 -0
- data/lib/rocket_sms/message.rb +30 -0
- data/lib/rocket_sms/scheduler.rb +212 -0
- data/lib/rocket_sms/transceiver.rb +260 -0
- data/lib/rocket_sms/version.rb +3 -0
- data/rocket_sms.gemspec +34 -0
- data/spec/spec_helper.rb +17 -0
- data/vendor/ruby-smpp/CHANGELOG +52 -0
- data/vendor/ruby-smpp/CONTRIBUTORS.txt +11 -0
- data/vendor/ruby-smpp/Gemfile +8 -0
- data/vendor/ruby-smpp/LICENSE +20 -0
- data/vendor/ruby-smpp/README.rdoc +89 -0
- data/vendor/ruby-smpp/Rakefile +53 -0
- data/vendor/ruby-smpp/VERSION +1 -0
- data/vendor/ruby-smpp/config/environment.rb +2 -0
- data/vendor/ruby-smpp/examples/PDU1.example +26 -0
- data/vendor/ruby-smpp/examples/PDU2.example +26 -0
- data/vendor/ruby-smpp/examples/sample_gateway.rb +137 -0
- data/vendor/ruby-smpp/examples/sample_smsc.rb +102 -0
- data/vendor/ruby-smpp/lib/smpp.rb +25 -0
- data/vendor/ruby-smpp/lib/smpp/base.rb +308 -0
- data/vendor/ruby-smpp/lib/smpp/encoding/utf8_encoder.rb +37 -0
- data/vendor/ruby-smpp/lib/smpp/optional_parameter.rb +35 -0
- data/vendor/ruby-smpp/lib/smpp/pdu/base.rb +183 -0
- data/vendor/ruby-smpp/lib/smpp/pdu/bind_base.rb +25 -0
- data/vendor/ruby-smpp/lib/smpp/pdu/bind_receiver.rb +4 -0
- data/vendor/ruby-smpp/lib/smpp/pdu/bind_receiver_response.rb +4 -0
- data/vendor/ruby-smpp/lib/smpp/pdu/bind_resp_base.rb +17 -0
- data/vendor/ruby-smpp/lib/smpp/pdu/bind_transceiver.rb +4 -0
- data/vendor/ruby-smpp/lib/smpp/pdu/bind_transceiver_response.rb +4 -0
- data/vendor/ruby-smpp/lib/smpp/pdu/deliver_sm.rb +142 -0
- data/vendor/ruby-smpp/lib/smpp/pdu/deliver_sm_response.rb +12 -0
- data/vendor/ruby-smpp/lib/smpp/pdu/enquire_link.rb +11 -0
- data/vendor/ruby-smpp/lib/smpp/pdu/enquire_link_response.rb +11 -0
- data/vendor/ruby-smpp/lib/smpp/pdu/generic_nack.rb +20 -0
- data/vendor/ruby-smpp/lib/smpp/pdu/submit_multi.rb +68 -0
- data/vendor/ruby-smpp/lib/smpp/pdu/submit_multi_response.rb +49 -0
- data/vendor/ruby-smpp/lib/smpp/pdu/submit_sm.rb +91 -0
- data/vendor/ruby-smpp/lib/smpp/pdu/submit_sm_response.rb +31 -0
- data/vendor/ruby-smpp/lib/smpp/pdu/unbind.rb +11 -0
- data/vendor/ruby-smpp/lib/smpp/pdu/unbind_response.rb +12 -0
- data/vendor/ruby-smpp/lib/smpp/receiver.rb +27 -0
- data/vendor/ruby-smpp/lib/smpp/server.rb +223 -0
- data/vendor/ruby-smpp/lib/smpp/transceiver.rb +109 -0
- data/vendor/ruby-smpp/lib/sms.rb +9 -0
- data/vendor/ruby-smpp/ruby-smpp.gemspec +96 -0
- data/vendor/ruby-smpp/test/delegate.rb +28 -0
- data/vendor/ruby-smpp/test/encoding_test.rb +232 -0
- data/vendor/ruby-smpp/test/optional_parameter_test.rb +30 -0
- data/vendor/ruby-smpp/test/pdu_parsing_test.rb +111 -0
- data/vendor/ruby-smpp/test/receiver_test.rb +232 -0
- data/vendor/ruby-smpp/test/responsive_delegate.rb +53 -0
- data/vendor/ruby-smpp/test/server.rb +56 -0
- data/vendor/ruby-smpp/test/smpp_test.rb +239 -0
- data/vendor/ruby-smpp/test/submit_sm_test.rb +40 -0
- data/vendor/ruby-smpp/test/transceiver_test.rb +35 -0
- data/vendor/smscsim/License.txt +61 -0
- data/vendor/smscsim/smpp.jar +0 -0
- data/vendor/smscsim/smscsim.jar +0 -0
- data/vendor/smscsim/start.sh +3 -0
- data/vendor/smscsim/users.txt +46 -0
- metadata +299 -0
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
require 'rubygems'
|
|
2
|
+
require 'test/unit'
|
|
3
|
+
require 'smpp'
|
|
4
|
+
require 'server'
|
|
5
|
+
require 'delegate'
|
|
6
|
+
require 'responsive_delegate'
|
|
7
|
+
|
|
8
|
+
class Poller
|
|
9
|
+
def start
|
|
10
|
+
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class SmppTest < Test::Unit::TestCase
|
|
16
|
+
|
|
17
|
+
def config
|
|
18
|
+
Server::config
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def test_transceiver_should_bind_and_unbind_then_stop
|
|
22
|
+
EventMachine.run {
|
|
23
|
+
EventMachine.start_server "localhost", 9000, Server::Unbind
|
|
24
|
+
EventMachine.connect "localhost", 9000, Smpp::Transceiver, config, Delegate.new
|
|
25
|
+
}
|
|
26
|
+
# should not hang here: the server's response should have caused the client to terminate
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def test_transceiver_api_should_respond_to_message_rejected
|
|
30
|
+
$tx = nil
|
|
31
|
+
delegate = ResponsiveDelegate.new
|
|
32
|
+
EventMachine.run {
|
|
33
|
+
EventMachine.start_server "localhost", 9000, Server::SubmitSmResponseWithErrorStatus
|
|
34
|
+
$tx = EventMachine.connect "localhost", 9000, Smpp::Transceiver, config, delegate
|
|
35
|
+
}
|
|
36
|
+
assert_equal(delegate.event_counter[:message_rejected], 1)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def test_bind_transceiver
|
|
40
|
+
pdu1 = Smpp::Pdu::BindTransceiver.new(
|
|
41
|
+
config[:system_id],
|
|
42
|
+
config[:password],
|
|
43
|
+
config[:system_type],
|
|
44
|
+
config[:source_ton],
|
|
45
|
+
config[:source_npi],
|
|
46
|
+
config[:source_address_range]
|
|
47
|
+
)
|
|
48
|
+
|
|
49
|
+
pdu2 = Smpp::Pdu::Base.create(pdu1.data)
|
|
50
|
+
|
|
51
|
+
assert_instance_of(Smpp::Pdu::BindTransceiver, pdu2)
|
|
52
|
+
assert_equal(pdu1.system_id, pdu2.system_id)
|
|
53
|
+
assert_equal(pdu1.password, pdu2.password)
|
|
54
|
+
assert_equal(pdu1.system_type, pdu2.system_type)
|
|
55
|
+
assert_equal(pdu1.addr_ton, pdu2.addr_ton)
|
|
56
|
+
assert_equal(pdu1.addr_npi, pdu2.addr_npi)
|
|
57
|
+
assert_equal(pdu1.address_range, pdu2.address_range)
|
|
58
|
+
assert_equal(pdu1.sequence_number, pdu2.sequence_number)
|
|
59
|
+
assert_equal(pdu1.command_status, pdu2.command_status)
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def test_bind_transceiver_response
|
|
63
|
+
pdu1 = Smpp::Pdu::BindTransceiverResponse.new(nil, Smpp::Pdu::Base::ESME_ROK, config[:system_id])
|
|
64
|
+
pdu2 = Smpp::Pdu::Base.create(pdu1.data)
|
|
65
|
+
assert_instance_of(Smpp::Pdu::BindTransceiverResponse, pdu2)
|
|
66
|
+
assert_equal(pdu1.system_id, pdu2.system_id)
|
|
67
|
+
assert_equal(pdu1.sequence_number, pdu2.sequence_number)
|
|
68
|
+
assert_equal(pdu1.command_status, pdu2.command_status)
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def test_deliver_sm
|
|
72
|
+
pdu1 = Smpp::Pdu::DeliverSm.new( '11111', '1111111111', "This is a test" )
|
|
73
|
+
pdu2 = Smpp::Pdu::Base.create(pdu1.data)
|
|
74
|
+
assert_instance_of(Smpp::Pdu::DeliverSm, pdu2)
|
|
75
|
+
assert_equal(pdu1.udh, pdu2.udh)
|
|
76
|
+
assert_equal(pdu1.short_message, pdu2.short_message)
|
|
77
|
+
assert_equal(pdu1.service_type, pdu2.service_type)
|
|
78
|
+
assert_equal(pdu1.source_addr_ton, pdu2.source_addr_ton)
|
|
79
|
+
assert_equal(pdu1.source_addr_npi, pdu2.source_addr_npi)
|
|
80
|
+
assert_equal(pdu1.source_addr, pdu2.source_addr)
|
|
81
|
+
assert_equal(pdu1.dest_addr_ton, pdu2.dest_addr_ton)
|
|
82
|
+
assert_equal(pdu1.dest_addr_npi, pdu2.dest_addr_npi)
|
|
83
|
+
assert_equal(pdu1.destination_addr, pdu2.destination_addr)
|
|
84
|
+
assert_equal(pdu1.esm_class, pdu2.esm_class)
|
|
85
|
+
assert_equal(pdu1.protocol_id, pdu2.protocol_id)
|
|
86
|
+
assert_equal(pdu1.priority_flag, pdu2.priority_flag)
|
|
87
|
+
assert_equal(pdu1.schedule_delivery_time, pdu2.schedule_delivery_time)
|
|
88
|
+
assert_equal(pdu1.validity_period, pdu2.validity_period)
|
|
89
|
+
assert_equal(pdu1.registered_delivery, pdu2.registered_delivery)
|
|
90
|
+
assert_equal(pdu1.replace_if_present_flag, pdu2.replace_if_present_flag)
|
|
91
|
+
assert_equal(pdu1.data_coding, pdu2.data_coding)
|
|
92
|
+
assert_equal(pdu1.sm_default_msg_id, pdu2.sm_default_msg_id)
|
|
93
|
+
assert_equal(pdu1.sm_length, pdu2.sm_length)
|
|
94
|
+
assert_equal(pdu1.stat, pdu2.stat)
|
|
95
|
+
assert_equal(pdu1.msg_reference, pdu2.msg_reference)
|
|
96
|
+
assert_equal(pdu1.sequence_number, pdu2.sequence_number)
|
|
97
|
+
assert_equal(pdu1.command_status, pdu2.command_status)
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
def test_submit_sm
|
|
101
|
+
pdu1 = Smpp::Pdu::SubmitSm.new( '11111', '1111111111', "This is a test" )
|
|
102
|
+
pdu2 = Smpp::Pdu::Base.create(pdu1.data)
|
|
103
|
+
assert_instance_of(Smpp::Pdu::SubmitSm, pdu2)
|
|
104
|
+
assert_equal(pdu1.udh, pdu2.udh)
|
|
105
|
+
assert_equal(pdu1.short_message, pdu2.short_message)
|
|
106
|
+
assert_equal(pdu1.service_type, pdu2.service_type)
|
|
107
|
+
assert_equal(pdu1.source_addr_ton, pdu2.source_addr_ton)
|
|
108
|
+
assert_equal(pdu1.source_addr_npi, pdu2.source_addr_npi)
|
|
109
|
+
assert_equal(pdu1.source_addr, pdu2.source_addr)
|
|
110
|
+
assert_equal(pdu1.dest_addr_ton, pdu2.dest_addr_ton)
|
|
111
|
+
assert_equal(pdu1.dest_addr_npi, pdu2.dest_addr_npi)
|
|
112
|
+
assert_equal(pdu1.destination_addr, pdu2.destination_addr)
|
|
113
|
+
assert_equal(pdu1.esm_class, pdu2.esm_class)
|
|
114
|
+
assert_equal(pdu1.protocol_id, pdu2.protocol_id)
|
|
115
|
+
assert_equal(pdu1.priority_flag, pdu2.priority_flag)
|
|
116
|
+
assert_equal(pdu1.schedule_delivery_time, pdu2.schedule_delivery_time)
|
|
117
|
+
assert_equal(pdu1.validity_period, pdu2.validity_period)
|
|
118
|
+
assert_equal(pdu1.registered_delivery, pdu2.registered_delivery)
|
|
119
|
+
assert_equal(pdu1.replace_if_present_flag, pdu2.replace_if_present_flag)
|
|
120
|
+
assert_equal(pdu1.data_coding, pdu2.data_coding)
|
|
121
|
+
assert_equal(pdu1.sm_default_msg_id, pdu2.sm_default_msg_id)
|
|
122
|
+
assert_equal(pdu1.sm_length, pdu2.sm_length)
|
|
123
|
+
assert_equal(pdu1.sequence_number, pdu2.sequence_number)
|
|
124
|
+
assert_equal(pdu1.command_status, pdu2.command_status)
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
def test_submit_sm_receiving_invalid_status
|
|
128
|
+
pdu1 = Smpp::Pdu::SubmitSm.new( '11111', '1111111111', "This is a test" )
|
|
129
|
+
pdu2 = Smpp::Pdu::Base.create(pdu1.data)
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
def test_deliver_sm_response
|
|
133
|
+
pdu1 = Smpp::Pdu::DeliverSmResponse.new( nil )
|
|
134
|
+
pdu2 = Smpp::Pdu::Base.create(pdu1.data)
|
|
135
|
+
assert_instance_of(Smpp::Pdu::DeliverSmResponse, pdu2)
|
|
136
|
+
assert_equal(pdu1.sequence_number, pdu2.sequence_number)
|
|
137
|
+
assert_equal(pdu1.command_status, pdu2.command_status)
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
def test_submit_sm_response
|
|
141
|
+
pdu1 = Smpp::Pdu::SubmitSmResponse.new( nil, Smpp::Pdu::Base::ESME_ROK, 3 )
|
|
142
|
+
pdu2 = Smpp::Pdu::Base.create(pdu1.data)
|
|
143
|
+
assert_instance_of(Smpp::Pdu::SubmitSmResponse, pdu2)
|
|
144
|
+
assert_equal(pdu1.sequence_number, pdu2.sequence_number)
|
|
145
|
+
assert_equal(pdu1.command_status, pdu2.command_status)
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
def test_enquire_link
|
|
149
|
+
pdu1 = Smpp::Pdu::EnquireLink.new( )
|
|
150
|
+
pdu2 = Smpp::Pdu::Base.create(pdu1.data)
|
|
151
|
+
assert_instance_of(Smpp::Pdu::EnquireLink, pdu2)
|
|
152
|
+
assert_equal(pdu1.sequence_number, pdu2.sequence_number)
|
|
153
|
+
assert_equal(pdu1.command_status, pdu2.command_status)
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
def test_enquire_link_resp
|
|
157
|
+
pdu1 = Smpp::Pdu::EnquireLinkResponse.new( )
|
|
158
|
+
pdu2 = Smpp::Pdu::Base.create(pdu1.data)
|
|
159
|
+
assert_instance_of(Smpp::Pdu::EnquireLinkResponse, pdu2)
|
|
160
|
+
assert_equal(pdu1.sequence_number, pdu2.sequence_number)
|
|
161
|
+
assert_equal(pdu1.command_status, pdu2.command_status)
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
def test_generic_nack
|
|
165
|
+
pdu1 = Smpp::Pdu::GenericNack.new(nil, Smpp::Pdu::Base::ESME_RTHROTTLED )
|
|
166
|
+
pdu2 = Smpp::Pdu::Base.create(pdu1.data)
|
|
167
|
+
assert_instance_of(Smpp::Pdu::GenericNack, pdu2)
|
|
168
|
+
assert_equal(pdu1.sequence_number, pdu2.sequence_number)
|
|
169
|
+
assert_equal(pdu1.command_status, pdu2.command_status)
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
def test_unbind
|
|
173
|
+
pdu1 = Smpp::Pdu::Unbind.new()
|
|
174
|
+
pdu2 = Smpp::Pdu::Base.create(pdu1.data)
|
|
175
|
+
assert_instance_of(Smpp::Pdu::Unbind, pdu2)
|
|
176
|
+
assert_equal(pdu1.sequence_number, pdu2.sequence_number)
|
|
177
|
+
assert_equal(pdu1.command_status, pdu2.command_status)
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
def test_unbind_response
|
|
181
|
+
pdu1 = Smpp::Pdu::UnbindResponse.new(nil, Smpp::Pdu::Base::ESME_ROK)
|
|
182
|
+
pdu2 = Smpp::Pdu::Base.create(pdu1.data)
|
|
183
|
+
assert_instance_of(Smpp::Pdu::UnbindResponse, pdu2)
|
|
184
|
+
assert_equal(pdu1.sequence_number, pdu2.sequence_number)
|
|
185
|
+
assert_equal(pdu1.command_status, pdu2.command_status)
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
#TODO: This test is known to fail since this portion of the library is incomplete.
|
|
189
|
+
def _todo_test_submit_multi
|
|
190
|
+
pdu1 = Smpp::Pdu::SubmitMulti.new( '11111', ['1111111111','1111111112','1111111113'], "This is a test" )
|
|
191
|
+
pdu2 = Smpp::Pdu::Base.create(pdu1.data)
|
|
192
|
+
assert_instance_of(Smpp::Pdu::SubmitMulti, pdu2)
|
|
193
|
+
assert_equal(pdu1.udh, pdu2.udh)
|
|
194
|
+
assert_equal(pdu1.short_message, pdu2.short_message)
|
|
195
|
+
assert_equal(pdu1.service_type, pdu2.service_type)
|
|
196
|
+
assert_equal(pdu1.source_addr_ton, pdu2.source_addr_ton)
|
|
197
|
+
assert_equal(pdu1.source_addr_npi, pdu2.source_addr_npi)
|
|
198
|
+
assert_equal(pdu1.source_addr, pdu2.source_addr)
|
|
199
|
+
assert_equal(pdu1.dest_addr_ton, pdu2.dest_addr_ton)
|
|
200
|
+
assert_equal(pdu1.dest_addr_npi, pdu2.dest_addr_npi)
|
|
201
|
+
assert_equal(pdu1.destination_addr_array, pdu2.destination_addr_array)
|
|
202
|
+
assert_equal(pdu1.esm_class, pdu2.esm_class)
|
|
203
|
+
assert_equal(pdu1.protocol_id, pdu2.protocol_id)
|
|
204
|
+
assert_equal(pdu1.priority_flag, pdu2.priority_flag)
|
|
205
|
+
assert_equal(pdu1.schedule_delivery_time, pdu2.schedule_delivery_time)
|
|
206
|
+
assert_equal(pdu1.validity_period, pdu2.validity_period)
|
|
207
|
+
assert_equal(pdu1.registered_delivery, pdu2.registered_delivery)
|
|
208
|
+
assert_equal(pdu1.replace_if_present_flag, pdu2.replace_if_present_flag)
|
|
209
|
+
assert_equal(pdu1.data_coding, pdu2.data_coding)
|
|
210
|
+
assert_equal(pdu1.sm_default_msg_id, pdu2.sm_default_msg_id)
|
|
211
|
+
assert_equal(pdu1.sm_length, pdu2.sm_length)
|
|
212
|
+
assert_equal(pdu1.sequence_number, pdu2.sequence_number)
|
|
213
|
+
assert_equal(pdu1.command_status, pdu2.command_status)
|
|
214
|
+
end
|
|
215
|
+
|
|
216
|
+
def _test_submit_multi_response
|
|
217
|
+
smes = [
|
|
218
|
+
Smpp::Pdu::SubmitMultiResponse::UnsuccessfulSme.new(1,1,'1111111111', Smpp::Pdu::Base::ESME_RINVDSTADR),
|
|
219
|
+
Smpp::Pdu::SubmitMultiResponse::UnsuccessfulSme.new(1,1,'1111111112', Smpp::Pdu::Base::ESME_RINVDSTADR),
|
|
220
|
+
Smpp::Pdu::SubmitMultiResponse::UnsuccessfulSme.new(1,1,'1111111113', Smpp::Pdu::Base::ESME_RINVDSTADR),
|
|
221
|
+
]
|
|
222
|
+
pdu1 = Smpp::Pdu::SubmitMultiResponse.new( nil, Smpp::Pdu::Base::ESME_ROK, '3', smes )
|
|
223
|
+
pdu2 = Smpp::Pdu::Base.create(pdu1.data)
|
|
224
|
+
|
|
225
|
+
assert_instance_of(Smpp::Pdu::SubmitMultiResponse, pdu2)
|
|
226
|
+
assert_equal(pdu1.unsuccess_smes, pdu2.unsuccess_smes)
|
|
227
|
+
assert_equal(pdu1.sequence_number, pdu2.sequence_number)
|
|
228
|
+
assert_equal(pdu1.command_status, pdu2.command_status)
|
|
229
|
+
end
|
|
230
|
+
|
|
231
|
+
def test_should_parse_ref_and_stat_from_deliver_sm
|
|
232
|
+
direct = Smpp::Pdu::DeliverSm.new( '1', '2', "419318028472222#id:11f8f46639bd4f7a209016e1a181e3ae sub:001 dlvrd:001 submit date:0902191702 done date:0902191702 stat:DELIVRD err:000 Text:TVILLING: Sl? ut h?'!11f8f46639bd4f7a209016e1a181e3ae", :esm_class => 4)
|
|
233
|
+
parsed = Smpp::Pdu::Base.create(direct.data)
|
|
234
|
+
assert_equal("DELIVRD", parsed.stat)
|
|
235
|
+
assert_equal("11f8f46639bd4f7a209016e1a181e3ae", parsed.msg_reference)
|
|
236
|
+
end
|
|
237
|
+
|
|
238
|
+
|
|
239
|
+
end
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
require 'rubygems'
|
|
2
|
+
require 'test/unit'
|
|
3
|
+
require 'smpp'
|
|
4
|
+
|
|
5
|
+
class SubmitSmTest < Test::Unit::TestCase
|
|
6
|
+
|
|
7
|
+
def test_this_is_not_a_real_test
|
|
8
|
+
value = [383 >> 8, 383 & 0xff]
|
|
9
|
+
optionals = {0x2150 => Smpp::OptionalParameter.new(0x2150, value.pack('cc'))}
|
|
10
|
+
pdu = Smpp::Pdu::SubmitSm.new('12345', '54321', "Ba Ba Boosh", {:optional_parameters => optionals})
|
|
11
|
+
Smpp::Base.hex_debug(pdu.data)
|
|
12
|
+
puts "PDU DATA", pdu.data.inspect
|
|
13
|
+
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def test_fixnum_optional_parameter
|
|
17
|
+
value = [383 >> 8, 383 & 0xff]
|
|
18
|
+
optionals = {0x2150 => Smpp::OptionalParameter.new(0x2150, value.pack('cc'))}
|
|
19
|
+
|
|
20
|
+
pdu = Smpp::Pdu::SubmitSm.new('12345', '54321', "Ba Ba Boosh", {:optional_parameters => optionals})
|
|
21
|
+
pdu_from_wire = Smpp::Pdu::Base.create(pdu.data)
|
|
22
|
+
|
|
23
|
+
assert optional = pdu_from_wire.optional_parameters[0x2150]
|
|
24
|
+
|
|
25
|
+
optional_value = optional[:value].unpack('n')[0]
|
|
26
|
+
assert_equal 383, optional_value
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def test_string_optional_parameter
|
|
30
|
+
optionals = {0x2150 => Smpp::OptionalParameter.new(0x2150, "boosh")}
|
|
31
|
+
|
|
32
|
+
pdu = Smpp::Pdu::SubmitSm.new('12345', '54321', "Ba Ba Boosh", {:optional_parameters => optionals})
|
|
33
|
+
pdu_from_wire = Smpp::Pdu::Base.create(pdu.data)
|
|
34
|
+
|
|
35
|
+
assert optional = pdu_from_wire.optional_parameters[0x2150]
|
|
36
|
+
|
|
37
|
+
optional_value = optional[:value].unpack("A*")[0]
|
|
38
|
+
assert_equal 'boosh', optional_value
|
|
39
|
+
end
|
|
40
|
+
end
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
require "rubygems"
|
|
2
|
+
require "test/unit"
|
|
3
|
+
require File.expand_path(File.dirname(__FILE__) + "../../lib/smpp")
|
|
4
|
+
|
|
5
|
+
class TransceiverTest < Test::Unit::TestCase
|
|
6
|
+
def test_get_message_part_size_8
|
|
7
|
+
options = {:data_coding => 8}
|
|
8
|
+
assert_equal(67, Smpp::Transceiver.get_message_part_size(options))
|
|
9
|
+
end
|
|
10
|
+
def test_get_message_part_size_0_and_1
|
|
11
|
+
options = {:data_coding => 0}
|
|
12
|
+
assert_equal(153, Smpp::Transceiver.get_message_part_size(options))
|
|
13
|
+
options = {:data_coding => 1}
|
|
14
|
+
assert_equal(153, Smpp::Transceiver.get_message_part_size(options))
|
|
15
|
+
end
|
|
16
|
+
def test_get_message_part_size_nil
|
|
17
|
+
options = {}
|
|
18
|
+
assert_equal(153, Smpp::Transceiver.get_message_part_size(options))
|
|
19
|
+
end
|
|
20
|
+
def test_get_message_part_size_other
|
|
21
|
+
options = {:data_coding => 3}
|
|
22
|
+
assert_equal(134, Smpp::Transceiver.get_message_part_size(options))
|
|
23
|
+
options = {:data_coding => 5}
|
|
24
|
+
assert_equal(134, Smpp::Transceiver.get_message_part_size(options))
|
|
25
|
+
options = {:data_coding => 6}
|
|
26
|
+
assert_equal(134, Smpp::Transceiver.get_message_part_size(options))
|
|
27
|
+
options = {:data_coding => 7}
|
|
28
|
+
assert_equal(134, Smpp::Transceiver.get_message_part_size(options))
|
|
29
|
+
end
|
|
30
|
+
def test_get_message_part_size_non_existant_data_coding
|
|
31
|
+
options = {:data_coding => 666}
|
|
32
|
+
assert_equal(153, Smpp::Transceiver.get_message_part_size(options))
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
Logica Open Source License Version 1.0
|
|
2
|
+
Copyright (c) 1996-2001 Logica Mobile Networks Limited, all rights reserved.
|
|
3
|
+
|
|
4
|
+
Logica Mobile Networks Limited ("Logica") is the owner of the rights
|
|
5
|
+
in the software programs ("Software"). In the following text, the term
|
|
6
|
+
"you" or "your" refers to you as an individual and/or (as the case may be)
|
|
7
|
+
to the legal entity to which the Software has been supplied.
|
|
8
|
+
|
|
9
|
+
Redistribution and use in source and binary forms, with or without
|
|
10
|
+
modification, are permitted provided all copies and partial copies
|
|
11
|
+
made and/or distributed (in whatever form) and all associated documentation
|
|
12
|
+
and other material must acknowledge Logica's rights by the inclusion
|
|
13
|
+
of the following notice:
|
|
14
|
+
|
|
15
|
+
"Copyright (c) 1996-2001 Logica Mobile Networks Limited;
|
|
16
|
+
this product includes software developed by Logica by whom copyright
|
|
17
|
+
and know-how are retained, all rights reserved."
|
|
18
|
+
|
|
19
|
+
The location of such notice shall be such that it is clearly displayed
|
|
20
|
+
and readable to any person accessing the Software.
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
Any use, copying or distribution of the Software is subject to the following:
|
|
24
|
+
|
|
25
|
+
* Your rights in respect of the Software are confined to the non-exclusive
|
|
26
|
+
and non-assignable license expressed herein. If you breach any of these
|
|
27
|
+
term and conditions then your license may be terminated.
|
|
28
|
+
|
|
29
|
+
* The copyright and other intellectual property rights in and in connection
|
|
30
|
+
with the Software are and shall remain the exclusive property of Logica
|
|
31
|
+
or its third party licensors. You must not remove or alter any copyright
|
|
32
|
+
or other proprietary notice on any of the software.
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
To the extent permitted by law and in the absence of a formal written contract
|
|
36
|
+
between you and Logica the following limitations and exclusions also apply:
|
|
37
|
+
|
|
38
|
+
* The Software is supplied and licensed on an "as is" basis without any
|
|
39
|
+
warranty or representation from Logica of any kind.
|
|
40
|
+
|
|
41
|
+
* Conditions, warranties and representations that might be attributed
|
|
42
|
+
to Logica or the Software (including, but not limited to, any implied
|
|
43
|
+
condition or warranty relating to merchantability, fitness, suitability
|
|
44
|
+
or quality) are excluded.
|
|
45
|
+
|
|
46
|
+
* In no event shall Logica be liable in respect of or in connection
|
|
47
|
+
with the supply, licensing, use or distribution of the software in any
|
|
48
|
+
form for any direct, special, indirect or consequential loss or damages
|
|
49
|
+
or for any loss of use, loss of data or of profits or for any business
|
|
50
|
+
interruption or loss of goodwill.
|
|
51
|
+
|
|
52
|
+
* Logica shall have no obligation to fix any defect or deficiency
|
|
53
|
+
in the Software and Logica shall have no liability for any consequences
|
|
54
|
+
(direct or consequential) that may arise from any such defect or deficiency.
|
|
55
|
+
|
|
56
|
+
* Logica's maximum liability (if any) in relation to the licensing,
|
|
57
|
+
provision and/or performance of the Software shall not exceed the price
|
|
58
|
+
you paid to secure your license.
|
|
59
|
+
|
|
60
|
+
The laws of Ireland shall apply to these terms and conditions and shall
|
|
61
|
+
govern every aspect of the supply and licensing of the Software.
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# This is an example of user definition file used to authenticate bounding ESME.
|
|
2
|
+
# User consists from attributes, each attribute is on one line,
|
|
3
|
+
# each attribute has key and value; users are delimited by one or more
|
|
4
|
+
# consecutive blank lines - next user is started by the next attribute after
|
|
5
|
+
# first occurence of blank line.
|
|
6
|
+
# Comment line can appear anywhere and it's ignored => it can't delimit
|
|
7
|
+
# two users.
|
|
8
|
+
# Format of attribute is <name>"="<value>
|
|
9
|
+
#
|
|
10
|
+
# The name and password attributes are compulsory for each user definition
|
|
11
|
+
# as they are compared to the system_id and password parameters
|
|
12
|
+
# in the incoming bound PDU.
|
|
13
|
+
#
|
|
14
|
+
# Note that timeout and bound attributes below are just exampples
|
|
15
|
+
# of additional attributes and aren't really used by the simulator :-)
|
|
16
|
+
# (future expansion?)
|
|
17
|
+
# Also note that whitespaces aren't removed from neither attribute name
|
|
18
|
+
# and it's value, i.e. "name=peter" and "name= peter" define two different users,
|
|
19
|
+
# "peter" and " peter".
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
# Pavel can bound for unlimited time as any type
|
|
23
|
+
name=pavel
|
|
24
|
+
password=wpsd
|
|
25
|
+
timeout=unlimited
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
# Jorge has time limited to 10, then the connection is dropped
|
|
29
|
+
# if enquire is unsuccessfull
|
|
30
|
+
# Also, Jorge can connect only as triansmitter or receiver, he can't
|
|
31
|
+
# connect as transciever
|
|
32
|
+
|
|
33
|
+
name=jorge
|
|
34
|
+
password=prtgljrg
|
|
35
|
+
# And this timeout is in minutes, bad luck, jorge %^)
|
|
36
|
+
timout=5
|
|
37
|
+
bound=t,r
|
|
38
|
+
|
|
39
|
+
# And another users
|
|
40
|
+
name=hugo
|
|
41
|
+
password=ggoohu
|
|
42
|
+
|
|
43
|
+
# that's all folks
|
|
44
|
+
name=DAMIEN
|
|
45
|
+
password=neimad
|
|
46
|
+
|
metadata
ADDED
|
@@ -0,0 +1,299 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: rocket_sms
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.1.1
|
|
5
|
+
prerelease:
|
|
6
|
+
platform: ruby
|
|
7
|
+
authors:
|
|
8
|
+
- Marcelo Wiermann
|
|
9
|
+
autorequire:
|
|
10
|
+
bindir: bin
|
|
11
|
+
cert_chain: []
|
|
12
|
+
date: 2012-10-06 00:00:00.000000000 Z
|
|
13
|
+
dependencies:
|
|
14
|
+
- !ruby/object:Gem::Dependency
|
|
15
|
+
name: eventmachine
|
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
|
17
|
+
none: false
|
|
18
|
+
requirements:
|
|
19
|
+
- - ~>
|
|
20
|
+
- !ruby/object:Gem::Version
|
|
21
|
+
version: 1.0.0
|
|
22
|
+
type: :runtime
|
|
23
|
+
prerelease: false
|
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
25
|
+
none: false
|
|
26
|
+
requirements:
|
|
27
|
+
- - ~>
|
|
28
|
+
- !ruby/object:Gem::Version
|
|
29
|
+
version: 1.0.0
|
|
30
|
+
- !ruby/object:Gem::Dependency
|
|
31
|
+
name: em-hiredis
|
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
|
33
|
+
none: false
|
|
34
|
+
requirements:
|
|
35
|
+
- - ! '>='
|
|
36
|
+
- !ruby/object:Gem::Version
|
|
37
|
+
version: '0'
|
|
38
|
+
type: :runtime
|
|
39
|
+
prerelease: false
|
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
41
|
+
none: false
|
|
42
|
+
requirements:
|
|
43
|
+
- - ! '>='
|
|
44
|
+
- !ruby/object:Gem::Version
|
|
45
|
+
version: '0'
|
|
46
|
+
- !ruby/object:Gem::Dependency
|
|
47
|
+
name: oj
|
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
|
49
|
+
none: false
|
|
50
|
+
requirements:
|
|
51
|
+
- - ! '>='
|
|
52
|
+
- !ruby/object:Gem::Version
|
|
53
|
+
version: '0'
|
|
54
|
+
type: :runtime
|
|
55
|
+
prerelease: false
|
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
57
|
+
none: false
|
|
58
|
+
requirements:
|
|
59
|
+
- - ! '>='
|
|
60
|
+
- !ruby/object:Gem::Version
|
|
61
|
+
version: '0'
|
|
62
|
+
- !ruby/object:Gem::Dependency
|
|
63
|
+
name: multi_json
|
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
|
65
|
+
none: false
|
|
66
|
+
requirements:
|
|
67
|
+
- - ! '>='
|
|
68
|
+
- !ruby/object:Gem::Version
|
|
69
|
+
version: '0'
|
|
70
|
+
type: :runtime
|
|
71
|
+
prerelease: false
|
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
73
|
+
none: false
|
|
74
|
+
requirements:
|
|
75
|
+
- - ! '>='
|
|
76
|
+
- !ruby/object:Gem::Version
|
|
77
|
+
version: '0'
|
|
78
|
+
- !ruby/object:Gem::Dependency
|
|
79
|
+
name: rspec
|
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
|
81
|
+
none: false
|
|
82
|
+
requirements:
|
|
83
|
+
- - ! '>='
|
|
84
|
+
- !ruby/object:Gem::Version
|
|
85
|
+
version: '0'
|
|
86
|
+
type: :development
|
|
87
|
+
prerelease: false
|
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
89
|
+
none: false
|
|
90
|
+
requirements:
|
|
91
|
+
- - ! '>='
|
|
92
|
+
- !ruby/object:Gem::Version
|
|
93
|
+
version: '0'
|
|
94
|
+
- !ruby/object:Gem::Dependency
|
|
95
|
+
name: cucumber
|
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
|
97
|
+
none: false
|
|
98
|
+
requirements:
|
|
99
|
+
- - ! '>='
|
|
100
|
+
- !ruby/object:Gem::Version
|
|
101
|
+
version: '0'
|
|
102
|
+
type: :development
|
|
103
|
+
prerelease: false
|
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
105
|
+
none: false
|
|
106
|
+
requirements:
|
|
107
|
+
- - ! '>='
|
|
108
|
+
- !ruby/object:Gem::Version
|
|
109
|
+
version: '0'
|
|
110
|
+
- !ruby/object:Gem::Dependency
|
|
111
|
+
name: guard
|
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
|
113
|
+
none: false
|
|
114
|
+
requirements:
|
|
115
|
+
- - ! '>='
|
|
116
|
+
- !ruby/object:Gem::Version
|
|
117
|
+
version: '0'
|
|
118
|
+
type: :development
|
|
119
|
+
prerelease: false
|
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
121
|
+
none: false
|
|
122
|
+
requirements:
|
|
123
|
+
- - ! '>='
|
|
124
|
+
- !ruby/object:Gem::Version
|
|
125
|
+
version: '0'
|
|
126
|
+
- !ruby/object:Gem::Dependency
|
|
127
|
+
name: guard-cucumber
|
|
128
|
+
requirement: !ruby/object:Gem::Requirement
|
|
129
|
+
none: false
|
|
130
|
+
requirements:
|
|
131
|
+
- - ! '>='
|
|
132
|
+
- !ruby/object:Gem::Version
|
|
133
|
+
version: '0'
|
|
134
|
+
type: :development
|
|
135
|
+
prerelease: false
|
|
136
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
137
|
+
none: false
|
|
138
|
+
requirements:
|
|
139
|
+
- - ! '>='
|
|
140
|
+
- !ruby/object:Gem::Version
|
|
141
|
+
version: '0'
|
|
142
|
+
- !ruby/object:Gem::Dependency
|
|
143
|
+
name: guard-rspec
|
|
144
|
+
requirement: !ruby/object:Gem::Requirement
|
|
145
|
+
none: false
|
|
146
|
+
requirements:
|
|
147
|
+
- - ! '>='
|
|
148
|
+
- !ruby/object:Gem::Version
|
|
149
|
+
version: '0'
|
|
150
|
+
type: :development
|
|
151
|
+
prerelease: false
|
|
152
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
153
|
+
none: false
|
|
154
|
+
requirements:
|
|
155
|
+
- - ! '>='
|
|
156
|
+
- !ruby/object:Gem::Version
|
|
157
|
+
version: '0'
|
|
158
|
+
- !ruby/object:Gem::Dependency
|
|
159
|
+
name: factory_girl
|
|
160
|
+
requirement: !ruby/object:Gem::Requirement
|
|
161
|
+
none: false
|
|
162
|
+
requirements:
|
|
163
|
+
- - ! '>='
|
|
164
|
+
- !ruby/object:Gem::Version
|
|
165
|
+
version: '0'
|
|
166
|
+
type: :development
|
|
167
|
+
prerelease: false
|
|
168
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
169
|
+
none: false
|
|
170
|
+
requirements:
|
|
171
|
+
- - ! '>='
|
|
172
|
+
- !ruby/object:Gem::Version
|
|
173
|
+
version: '0'
|
|
174
|
+
- !ruby/object:Gem::Dependency
|
|
175
|
+
name: rack-test
|
|
176
|
+
requirement: !ruby/object:Gem::Requirement
|
|
177
|
+
none: false
|
|
178
|
+
requirements:
|
|
179
|
+
- - ! '>='
|
|
180
|
+
- !ruby/object:Gem::Version
|
|
181
|
+
version: '0'
|
|
182
|
+
type: :development
|
|
183
|
+
prerelease: false
|
|
184
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
185
|
+
none: false
|
|
186
|
+
requirements:
|
|
187
|
+
- - ! '>='
|
|
188
|
+
- !ruby/object:Gem::Version
|
|
189
|
+
version: '0'
|
|
190
|
+
description: RocketSMS is a EventMachine-based SMPP Gateway
|
|
191
|
+
email:
|
|
192
|
+
- marcelo.wiermann@gmail.com
|
|
193
|
+
executables:
|
|
194
|
+
- scheduler_runner.rb
|
|
195
|
+
- transceiver_runner.rb
|
|
196
|
+
extensions: []
|
|
197
|
+
extra_rdoc_files: []
|
|
198
|
+
files:
|
|
199
|
+
- .gitignore
|
|
200
|
+
- .rspec
|
|
201
|
+
- Gemfile
|
|
202
|
+
- LICENSE.txt
|
|
203
|
+
- README.md
|
|
204
|
+
- Rakefile
|
|
205
|
+
- bin/scheduler_runner.rb
|
|
206
|
+
- bin/transceiver_runner.rb
|
|
207
|
+
- examples/gateway.rb
|
|
208
|
+
- examples/gateway.yml
|
|
209
|
+
- examples/test.rb
|
|
210
|
+
- lib/rocket_sms.rb
|
|
211
|
+
- lib/rocket_sms/did.rb
|
|
212
|
+
- lib/rocket_sms/gateway.rb
|
|
213
|
+
- lib/rocket_sms/lock.rb
|
|
214
|
+
- lib/rocket_sms/message.rb
|
|
215
|
+
- lib/rocket_sms/scheduler.rb
|
|
216
|
+
- lib/rocket_sms/transceiver.rb
|
|
217
|
+
- lib/rocket_sms/version.rb
|
|
218
|
+
- rocket_sms.gemspec
|
|
219
|
+
- spec/spec_helper.rb
|
|
220
|
+
- vendor/ruby-smpp/CHANGELOG
|
|
221
|
+
- vendor/ruby-smpp/CONTRIBUTORS.txt
|
|
222
|
+
- vendor/ruby-smpp/Gemfile
|
|
223
|
+
- vendor/ruby-smpp/LICENSE
|
|
224
|
+
- vendor/ruby-smpp/README.rdoc
|
|
225
|
+
- vendor/ruby-smpp/Rakefile
|
|
226
|
+
- vendor/ruby-smpp/VERSION
|
|
227
|
+
- vendor/ruby-smpp/config/environment.rb
|
|
228
|
+
- vendor/ruby-smpp/examples/PDU1.example
|
|
229
|
+
- vendor/ruby-smpp/examples/PDU2.example
|
|
230
|
+
- vendor/ruby-smpp/examples/sample_gateway.rb
|
|
231
|
+
- vendor/ruby-smpp/examples/sample_smsc.rb
|
|
232
|
+
- vendor/ruby-smpp/lib/smpp.rb
|
|
233
|
+
- vendor/ruby-smpp/lib/smpp/base.rb
|
|
234
|
+
- vendor/ruby-smpp/lib/smpp/encoding/utf8_encoder.rb
|
|
235
|
+
- vendor/ruby-smpp/lib/smpp/optional_parameter.rb
|
|
236
|
+
- vendor/ruby-smpp/lib/smpp/pdu/base.rb
|
|
237
|
+
- vendor/ruby-smpp/lib/smpp/pdu/bind_base.rb
|
|
238
|
+
- vendor/ruby-smpp/lib/smpp/pdu/bind_receiver.rb
|
|
239
|
+
- vendor/ruby-smpp/lib/smpp/pdu/bind_receiver_response.rb
|
|
240
|
+
- vendor/ruby-smpp/lib/smpp/pdu/bind_resp_base.rb
|
|
241
|
+
- vendor/ruby-smpp/lib/smpp/pdu/bind_transceiver.rb
|
|
242
|
+
- vendor/ruby-smpp/lib/smpp/pdu/bind_transceiver_response.rb
|
|
243
|
+
- vendor/ruby-smpp/lib/smpp/pdu/deliver_sm.rb
|
|
244
|
+
- vendor/ruby-smpp/lib/smpp/pdu/deliver_sm_response.rb
|
|
245
|
+
- vendor/ruby-smpp/lib/smpp/pdu/enquire_link.rb
|
|
246
|
+
- vendor/ruby-smpp/lib/smpp/pdu/enquire_link_response.rb
|
|
247
|
+
- vendor/ruby-smpp/lib/smpp/pdu/generic_nack.rb
|
|
248
|
+
- vendor/ruby-smpp/lib/smpp/pdu/submit_multi.rb
|
|
249
|
+
- vendor/ruby-smpp/lib/smpp/pdu/submit_multi_response.rb
|
|
250
|
+
- vendor/ruby-smpp/lib/smpp/pdu/submit_sm.rb
|
|
251
|
+
- vendor/ruby-smpp/lib/smpp/pdu/submit_sm_response.rb
|
|
252
|
+
- vendor/ruby-smpp/lib/smpp/pdu/unbind.rb
|
|
253
|
+
- vendor/ruby-smpp/lib/smpp/pdu/unbind_response.rb
|
|
254
|
+
- vendor/ruby-smpp/lib/smpp/receiver.rb
|
|
255
|
+
- vendor/ruby-smpp/lib/smpp/server.rb
|
|
256
|
+
- vendor/ruby-smpp/lib/smpp/transceiver.rb
|
|
257
|
+
- vendor/ruby-smpp/lib/sms.rb
|
|
258
|
+
- vendor/ruby-smpp/ruby-smpp.gemspec
|
|
259
|
+
- vendor/ruby-smpp/test/delegate.rb
|
|
260
|
+
- vendor/ruby-smpp/test/encoding_test.rb
|
|
261
|
+
- vendor/ruby-smpp/test/optional_parameter_test.rb
|
|
262
|
+
- vendor/ruby-smpp/test/pdu_parsing_test.rb
|
|
263
|
+
- vendor/ruby-smpp/test/receiver_test.rb
|
|
264
|
+
- vendor/ruby-smpp/test/responsive_delegate.rb
|
|
265
|
+
- vendor/ruby-smpp/test/server.rb
|
|
266
|
+
- vendor/ruby-smpp/test/smpp_test.rb
|
|
267
|
+
- vendor/ruby-smpp/test/submit_sm_test.rb
|
|
268
|
+
- vendor/ruby-smpp/test/transceiver_test.rb
|
|
269
|
+
- vendor/smscsim/License.txt
|
|
270
|
+
- vendor/smscsim/smpp.jar
|
|
271
|
+
- vendor/smscsim/smscsim.jar
|
|
272
|
+
- vendor/smscsim/start.sh
|
|
273
|
+
- vendor/smscsim/users.txt
|
|
274
|
+
homepage: ''
|
|
275
|
+
licenses: []
|
|
276
|
+
post_install_message:
|
|
277
|
+
rdoc_options: []
|
|
278
|
+
require_paths:
|
|
279
|
+
- lib
|
|
280
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
281
|
+
none: false
|
|
282
|
+
requirements:
|
|
283
|
+
- - ! '>='
|
|
284
|
+
- !ruby/object:Gem::Version
|
|
285
|
+
version: '0'
|
|
286
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
287
|
+
none: false
|
|
288
|
+
requirements:
|
|
289
|
+
- - ! '>='
|
|
290
|
+
- !ruby/object:Gem::Version
|
|
291
|
+
version: '0'
|
|
292
|
+
requirements: []
|
|
293
|
+
rubyforge_project:
|
|
294
|
+
rubygems_version: 1.8.24
|
|
295
|
+
signing_key:
|
|
296
|
+
specification_version: 3
|
|
297
|
+
summary: RocketSMS is a EventMachine-based SMPP Gateway
|
|
298
|
+
test_files:
|
|
299
|
+
- spec/spec_helper.rb
|