smsc_manager 0.4.5 → 0.4.7
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.txt +2 -0
- data/Manifest.txt +2 -0
- data/bin/send_sms_load_test.rb +4 -1
- data/bin/send_sms_post.rb +72 -0
- data/bin/sms_om_server.rb +1 -1
- data/bin/sms_print_xml.rb +10 -0
- data/lib/smsc_manager/broadcast_topic.rb +16 -12
- data/lib/smsc_manager/sms.rb +7 -3
- data/lib/smsc_manager/sms_send_topic.rb +21 -1
- data/lib/smsc_manager/sms_statistics_listener.rb +4 -3
- data/lib/smsc_manager/smsc_listener.rb +10 -0
- data/lib/smsc_manager/version.rb +1 -1
- data/test/smsc_manager_test.rb +19 -0
- metadata +6 -2
data/CHANGELOG.txt
CHANGED
data/Manifest.txt
CHANGED
data/bin/send_sms_load_test.rb
CHANGED
@@ -15,6 +15,9 @@ def parse_options(params)
|
|
15
15
|
opts.on("-u","--user VAL", String) {|val| temp_hash[:user ] = val
|
16
16
|
puts "user is #{val}"
|
17
17
|
user_flag=false }
|
18
|
+
opts.on("-h","--host VAL", String) {|val| temp_hash[:host ] = val
|
19
|
+
puts "host is #{val}"
|
20
|
+
}
|
18
21
|
|
19
22
|
opts.on("-c","--count VAL", Integer) {|val| temp_hash[:count ] = val
|
20
23
|
puts "count is #{val}"
|
@@ -46,7 +49,7 @@ require 'smsc_manager'
|
|
46
49
|
|
47
50
|
puts "Finding sms topic to use:"
|
48
51
|
begin
|
49
|
-
sms_sender=SmscManager::SmsSendTopic.new
|
52
|
+
sms_sender=SmscManager::SmsSendTopic.new(arg_hash)
|
50
53
|
rescue Exception => e
|
51
54
|
puts "exception found #{e.backtrace}"
|
52
55
|
end
|
@@ -0,0 +1,72 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require 'optparse'
|
3
|
+
def usage
|
4
|
+
puts "Usage: send_sms_post.rb -u user -m msisdn -s source -t text -h host -p port -a topic "
|
5
|
+
|
6
|
+
exit
|
7
|
+
end
|
8
|
+
def parse_options(params)
|
9
|
+
opts = OptionParser.new
|
10
|
+
puts "argv are #{params}"
|
11
|
+
#params_split = params.split(' ')
|
12
|
+
#puts "paramsp is #{paramsp}"
|
13
|
+
user_flag=msisdn_flag=source_flag=text_flag=true
|
14
|
+
temp_hash = {}
|
15
|
+
opts.on("-h","--host VAL", String) {|val| temp_hash[:host ] = val
|
16
|
+
puts "host is #{val}"
|
17
|
+
}
|
18
|
+
opts.on("-u","--user VAL", String) {|val| temp_hash[:user ] = val
|
19
|
+
puts "user is #{val}"
|
20
|
+
user_flag=false }
|
21
|
+
opts.on("-p","--port VAL", String) {|val| temp_hash[:port ] = val
|
22
|
+
puts "port is #{val}"
|
23
|
+
}
|
24
|
+
opts.on("-a","--topic VAL", String) {|val| temp_hash[:topic ] = val
|
25
|
+
puts "user is #{val}"
|
26
|
+
user_flag=false }
|
27
|
+
opts.on("-m","--msisdn VAL", String) {|val| temp_hash[:msisdn ] = val
|
28
|
+
puts "msiddn is #{val}"
|
29
|
+
msisdn_flag=false }
|
30
|
+
opts.on("-s","--source VAL", String) {|val| temp_hash[:source ] = val
|
31
|
+
puts "source is #{val}"
|
32
|
+
source_flag=false }
|
33
|
+
opts.on("-t","--text VAL", String) {|val| temp_hash[:text ] = val
|
34
|
+
puts "text is #{val}"
|
35
|
+
text_flag=false }
|
36
|
+
#opts.on("-d","--database VAL", String) {|val| temp_hash[:db ] = val }
|
37
|
+
#opts.on("-p","--password VAL", String) {|val| temp_hash[:password ] = val }
|
38
|
+
#opts.on("-u","--user VAL", String) {|val| temp_hash[:user ] = val }
|
39
|
+
#puts " in test commander option parse #{port} #{url}"
|
40
|
+
opts.parse(params)
|
41
|
+
# puts " in HTTP #{hostname} port #{port} url: #{url}"
|
42
|
+
usage if user_flag or msisdn_flag or source_flag or text_flag
|
43
|
+
return temp_hash
|
44
|
+
end
|
45
|
+
arg_hash=parse_options(ARGV)
|
46
|
+
require 'pp'
|
47
|
+
|
48
|
+
require 'rubygems'
|
49
|
+
gem 'smsc_manager'
|
50
|
+
require 'smsc_manager'
|
51
|
+
require 'net/http'
|
52
|
+
|
53
|
+
user=arg_hash[:user]
|
54
|
+
destination=arg_hash[:msisdn]
|
55
|
+
source=arg_hash[:source]
|
56
|
+
text=arg_hash[:text]
|
57
|
+
puts "create stomp message"
|
58
|
+
m=SmscManager::SmsSendTopic.create_stomp_message(text,destination,source)
|
59
|
+
puts "message is #{m.to_xml}"
|
60
|
+
puts "hostname: #{arg_hash[:host]} port #{arg_hash[:port]}"
|
61
|
+
url="#{arg_hash[:topic]}?m.to_xml"
|
62
|
+
ht =Net::HTTP.start(arg_hash[:host],arg_hash[:port])
|
63
|
+
r=ht.post(url)
|
64
|
+
puts "url was: #{url}"
|
65
|
+
puts "result: #{r.to_s}"
|
66
|
+
# res= smsc.send(sms)
|
67
|
+
# puts "Response code: #{res.response} body: #{res.response_body}"
|
68
|
+
# puts "Response code: #{res}" if res.kind_of? String
|
69
|
+
# puts "pretty print response:"
|
70
|
+
# pp res
|
71
|
+
# puts "Response code: #{res.} body: #{res.code}" if res.kind_of? Net::Http
|
72
|
+
|
data/bin/sms_om_server.rb
CHANGED
@@ -13,7 +13,7 @@ require 'smsc_manager'
|
|
13
13
|
# begin
|
14
14
|
# can add additional options to change host/port etc
|
15
15
|
sms_listener=SmscManager::SmsStatisticsListener.new({:topic => '/topic/sms'}).run
|
16
|
-
|
16
|
+
# sms_listener.join
|
17
17
|
# rescue Exception => e
|
18
18
|
puts "exception found #{e.backtrace}"
|
19
19
|
# end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require 'rubygems'
|
3
|
+
gem 'smsc_manager'
|
4
|
+
require 'smsc_manager'
|
5
|
+
#require 'lib/smsc_manager/smsc_connection'
|
6
|
+
#require 'lib/smsc_manager/sms'
|
7
|
+
require 'pp'
|
8
|
+
puts "printing sms xml configuration"
|
9
|
+
puts "#{SmscManager::SmsSendTopic.print_example_xml}"
|
10
|
+
|
@@ -8,7 +8,7 @@ module SmscManager
|
|
8
8
|
class BroadcastTopic
|
9
9
|
@@MAX_THROUGHPUT =5 # in messages per second
|
10
10
|
# old attr_accessor :text, :source, :list, :num_threads, :attempts, :sent
|
11
|
-
attr_accessor :text, :source, :list, :num_threads, :attempts, :sent
|
11
|
+
attr_accessor :text, :source, :list, :num_threads, :attempts, :sent, :sms_sender
|
12
12
|
def common_setup(src)
|
13
13
|
@guard = Mutex.new
|
14
14
|
self.attempts=0
|
@@ -33,26 +33,30 @@ class BroadcastTopic
|
|
33
33
|
def populate_topic(lst)
|
34
34
|
# puts "list is #{lst}"
|
35
35
|
arg_hash = {:host => 'localhost'}
|
36
|
-
sms_sender=SmscManager::SmsSendTopic.new(arg_hash)
|
36
|
+
self.sms_sender=SmscManager::SmsSendTopic.new(arg_hash)
|
37
37
|
lst.each {|key, val|
|
38
38
|
# txt=line[1] ||
|
39
39
|
# if value set then send it else send default text value
|
40
40
|
txt2 = val==nil ? self.text : val
|
41
41
|
dst = key
|
42
|
-
|
43
|
-
|
44
|
-
sms=SmscManager::Sms.new(txt2,dst,self.source)
|
45
|
-
sms_sender.send_topic(sms)
|
46
|
-
self.attempts+=1
|
47
|
-
self.sent+=1
|
48
|
-
rescue Exception => e
|
49
|
-
self.sent-=1
|
50
|
-
puts "bad values dst: #{dst} txt: #{txt2} msg: #{e.message}"
|
51
|
-
end
|
42
|
+
# puts "text is #{txt2} dest is #{dst}"
|
43
|
+
send_it(txt2,dst) if SmscManager::Sms.check_destination(dst)
|
52
44
|
|
53
45
|
# puts " dst is #{dst}"
|
54
46
|
}
|
55
47
|
puts "populate topic sent #{self.sent}"
|
56
48
|
end
|
49
|
+
def send_it(txt,dst)
|
50
|
+
# puts "hello from send it"
|
51
|
+
begin
|
52
|
+
sms=SmscManager::Sms.new(txt,dst,self.source)
|
53
|
+
self.sms_sender.send_topic(sms)
|
54
|
+
self.attempts+=1
|
55
|
+
self.sent+=1
|
56
|
+
rescue Exception => e
|
57
|
+
self.sent-=1
|
58
|
+
puts "bad values dst: #{dst} txt: #{txt2} msg: #{e.message}"
|
59
|
+
end
|
60
|
+
end
|
57
61
|
end
|
58
62
|
end
|
data/lib/smsc_manager/sms.rb
CHANGED
@@ -22,9 +22,10 @@ class Sms
|
|
22
22
|
@@msisdn_valid_prefix.each {|t| sentence << t <<" " }
|
23
23
|
sentence
|
24
24
|
end
|
25
|
-
def starts_with?(prefix)
|
25
|
+
def self.starts_with?(prefix,dest)
|
26
26
|
prefix = prefix.to_s
|
27
|
-
|
27
|
+
return false if dest == nil
|
28
|
+
dest[0, prefix.length] == prefix
|
28
29
|
end
|
29
30
|
def initialize(txt,dest,src='888')
|
30
31
|
self.orig_txt=txt
|
@@ -34,9 +35,12 @@ class Sms
|
|
34
35
|
raise InvalidPrefix.new("invalid prefix: valid prefix area:" + Sms.valid ) if !prefix_test
|
35
36
|
end
|
36
37
|
def prefix_test
|
38
|
+
Sms.check_destination(self.destination)
|
39
|
+
end
|
40
|
+
def self.check_destination(dst)
|
37
41
|
flag = false
|
38
42
|
|
39
|
-
@@msisdn_valid_prefix.each { |w| k=
|
43
|
+
@@msisdn_valid_prefix.each { |w| k= Sms.starts_with? w , dst
|
40
44
|
flag=true if k }
|
41
45
|
flag
|
42
46
|
end
|
@@ -10,6 +10,8 @@ class SmsSendTopic
|
|
10
10
|
attr_accessor :conn
|
11
11
|
#need to define topic, host properly
|
12
12
|
@@TOPIC='/topic/sms'
|
13
|
+
# must be defined as method in sms_listener
|
14
|
+
@@STOMP_SMS_MESSAGE='stomp_SMS'
|
13
15
|
def initialize(options={})
|
14
16
|
# set up variables using hash
|
15
17
|
host = options[:host]==nil ? 'localhost' : options[:host]
|
@@ -31,10 +33,28 @@ class SmsSendTopic
|
|
31
33
|
def send_topic(sms)
|
32
34
|
#sms=SmscManager::Sms.new(text,destination,source)
|
33
35
|
# msgbody=sms.to_xml
|
34
|
-
m=StompMessage::Message.new(
|
36
|
+
m=StompMessage::Message.new(@@STOMP_SMS_MESSAGE, sms.to_xml)
|
35
37
|
# puts "message body is #{msgbody}"
|
36
38
|
self.conn.send @@TOPIC, m.to_xml, {'persistent'=>'false'}
|
37
39
|
end #send_sms
|
40
|
+
# simple script to show xml message
|
41
|
+
def self.create_stomp_message(txt,dest,src)
|
42
|
+
sms=SmscManager::Sms.new(txt,dest,src)
|
43
|
+
m=StompMessage::Message.new(@@STOMP_SMS_MESSAGE, sms.to_xml)
|
44
|
+
end
|
45
|
+
def self.print_example_xml
|
46
|
+
text= "hello there #{Time.now}"
|
47
|
+
destination = "639993130030" #must be valid destination
|
48
|
+
source = '888'
|
49
|
+
sms=SmscManager::Sms.new(text,destination,source)
|
50
|
+
m=SmscManager::SmsSendTopic.create_stomp_message( text,destination,source)
|
51
|
+
result = "------------ SMS XML----------------\n"
|
52
|
+
result << "#{sms.to_xml}\n"
|
53
|
+
result << "------------STOMP XML--------------\n"
|
54
|
+
result << "#{m.to_xml}\n"
|
55
|
+
result << "------------END--------------------"
|
56
|
+
result
|
57
|
+
end
|
38
58
|
end # smsc listener
|
39
59
|
|
40
60
|
end #module
|
@@ -23,17 +23,18 @@ class SmsStatisticsListener < StompMessage::StompStatisticsServer
|
|
23
23
|
# self.source[sms.source] += 1
|
24
24
|
end
|
25
25
|
def stomp_REPORT(msg, stomp_msg)
|
26
|
-
super(msg, stomp_msg)
|
27
|
-
puts " --------------------------------- details"
|
26
|
+
result = super(msg, stomp_msg)
|
27
|
+
#puts " --------------------------------- details"
|
28
28
|
# self.source.each_pair { |key,val| puts " key: #{key} value: #{val}"}
|
29
29
|
# puts " --------------------------------- "
|
30
|
+
|
30
31
|
end
|
31
32
|
def stomp_SMS(msg, stomp_msg)
|
32
33
|
puts "msg command #{msg.command} msg body #{msg.body}" if @debug
|
33
34
|
sms=SmscManager::Sms.load_xml(msg.body)
|
34
35
|
create_m_statistics(sms)
|
35
36
|
puts "#{self.topic} OM report stomp_SMS" if @debug
|
36
|
-
|
37
|
+
# stomp_REPORT(msg) if self.msg_count % 100 == 0
|
37
38
|
end
|
38
39
|
end # smsc listener
|
39
40
|
|
@@ -17,6 +17,16 @@ class SmscListener < StompMessage::StompServer
|
|
17
17
|
self.smsc=SmscManager::SmscConnection.factory
|
18
18
|
puts "finished initializing"
|
19
19
|
end
|
20
|
+
def send_reply(headers,msg)
|
21
|
+
msisdn = headers['msisdn']
|
22
|
+
reply_topic=headers['reply-to']
|
23
|
+
puts "headers: #{headers['msisdn']} reply topic #{headers['reply-to']}"
|
24
|
+
internal_conn = Stomp::Connection.open '', '', self.host, self.port, false
|
25
|
+
internal_conn.subscribe reply_topic, { :ack =>"auto" }
|
26
|
+
# m=StompMessage::Message.new('stomp_REPLY', msg_body)
|
27
|
+
internal_conn.send(reply_topic, msg.to_xml, {'persistent'=>'false', 'msisdn' => "#{msisdn}" })
|
28
|
+
internal_conn.unsubscribe reply_topic
|
29
|
+
end
|
20
30
|
# name is message command
|
21
31
|
def stomp_SMS(msg, stomp_msg)
|
22
32
|
sms=SmscManager::Sms.load_xml(msg.body)
|
data/lib/smsc_manager/version.rb
CHANGED
data/test/smsc_manager_test.rb
CHANGED
@@ -65,6 +65,18 @@ class SmscManagerTest < Test::Unit::TestCase
|
|
65
65
|
b=SmscManager::Broadcast.new('888',list,"hello there")
|
66
66
|
assert b.attempts ==2, "did not send two sms"
|
67
67
|
end
|
68
|
+
def test_broadcast_blank
|
69
|
+
list = %w(9991 '')
|
70
|
+
b=SmscManager::BroadcastTopic.new('888',list,"hello there")
|
71
|
+
assert b.attempts ==1, "did not send one sms"
|
72
|
+
end
|
73
|
+
def test_broadcast_nil
|
74
|
+
list = %w(9991 nil)
|
75
|
+
list << nil
|
76
|
+
b=SmscManager::BroadcastTopic.new('888',list,"hello there")
|
77
|
+
assert b.attempts ==1, "did not send one sms"
|
78
|
+
end
|
79
|
+
|
68
80
|
def test_broadcast_topic_one
|
69
81
|
list = %w(9991 9992)
|
70
82
|
b=SmscManager::BroadcastTopic.new('888',list,"hello there")
|
@@ -94,5 +106,12 @@ class SmscManagerTest < Test::Unit::TestCase
|
|
94
106
|
@smsc.hostname='www.google.com'
|
95
107
|
#assert @smsc.save==true, 'could not save google mod'
|
96
108
|
assert @smsc.hostname == 'www.google.com', "assign not working"
|
109
|
+
|
97
110
|
end
|
111
|
+
def test_print_xml
|
112
|
+
b=SmscManager::SmsSendTopic.print_example_xml
|
113
|
+
puts "#{b}"
|
114
|
+
res = b.include? "<sms>"
|
115
|
+
assert res, "xml looks wrong"
|
116
|
+
end
|
98
117
|
end
|
metadata
CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.4
|
|
3
3
|
specification_version: 1
|
4
4
|
name: smsc_manager
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.4.
|
7
|
-
date: 2007-
|
6
|
+
version: 0.4.7
|
7
|
+
date: 2007-10-01 00:00:00 +08:00
|
8
8
|
summary: connection to smsc via http using kannel
|
9
9
|
require_paths:
|
10
10
|
- lib
|
@@ -37,8 +37,10 @@ files:
|
|
37
37
|
- config/smsc.yml
|
38
38
|
- bin/smsc_config.rb
|
39
39
|
- bin/smsc_print_config.rb
|
40
|
+
- bin/send_sms_post.rb
|
40
41
|
- bin/send_sms.rb
|
41
42
|
- bin/send_sms_load_test.rb
|
43
|
+
- bin/sms_print_xml.rb
|
42
44
|
- bin/send_sms_http.rb
|
43
45
|
- bin/sms_topic_server.rb
|
44
46
|
- bin/sms_topic_server_control.rb
|
@@ -69,8 +71,10 @@ extra_rdoc_files:
|
|
69
71
|
executables:
|
70
72
|
- smsc_config.rb
|
71
73
|
- smsc_print_config.rb
|
74
|
+
- send_sms_post.rb
|
72
75
|
- send_sms.rb
|
73
76
|
- send_sms_load_test.rb
|
77
|
+
- sms_print_xml.rb
|
74
78
|
- send_sms_http.rb
|
75
79
|
- sms_topic_server.rb
|
76
80
|
- sms_topic_server_control.rb
|