smsc_manager 0.5.1 → 0.5.6
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/Manifest.txt +4 -1
- data/README.txt +1 -1
- data/app/models/sms_log.rb +70 -0
- data/bin/internal_sms_load_test.rb +12 -5
- data/bin/send_sms.rb +23 -40
- data/bin/send_sms_http.rb +20 -36
- data/bin/send_sms_load_test.rb +1 -0
- data/bin/send_sms_post.rb +25 -55
- data/bin/sms_om_server.rb +13 -1
- data/bin/sms_topic_server.rb +20 -3
- data/bin/sms_topic_server_control.rb +13 -0
- data/config/database.yml +35 -0
- data/lib/smsc_manager/broadcast_topic.rb +5 -2
- data/lib/smsc_manager/sms.rb +13 -22
- data/lib/smsc_manager/smsc_connection.rb +3 -3
- data/lib/smsc_manager/smsc_listener.rb +17 -16
- data/lib/smsc_manager/smsc_stomp_connection.rb +41 -0
- data/lib/smsc_manager/version.rb +1 -1
- data/test/smsc_manager_test.rb +5 -0
- metadata +5 -2
data/Manifest.txt
CHANGED
@@ -4,6 +4,7 @@ CHANGELOG.txt
|
|
4
4
|
Manifest.txt
|
5
5
|
setup.rb
|
6
6
|
config/smsc.yml
|
7
|
+
config/database.yml
|
7
8
|
bin/smsc_config.rb
|
8
9
|
bin/smsc_print_config.rb
|
9
10
|
bin/send_sms_post.rb
|
@@ -19,6 +20,7 @@ bin/sms_om_server.rb
|
|
19
20
|
lib/smsc_manager/version.rb
|
20
21
|
lib/smsc_manager/sms.rb
|
21
22
|
lib/smsc_manager/smsc_listener.rb
|
23
|
+
lib/smsc_manager/smsc_stomp_connection.rb
|
22
24
|
lib/smsc_manager/sms_statistics_listener.rb
|
23
25
|
lib/smsc_manager/sms_send_topic.rb
|
24
26
|
lib/smsc_manager/broadcast.rb
|
@@ -26,6 +28,7 @@ lib/smsc_manager/broadcast_topic.rb
|
|
26
28
|
lib/smsc_manager/smsc_connection.rb
|
27
29
|
lib/smsc_manager.rb
|
28
30
|
test/test_helper.rb
|
31
|
+
app/models/sms_log.rb
|
29
32
|
test/smsc_manager_test.rb
|
30
33
|
examples/receive_sms_controller.rb
|
31
|
-
examples/stomp
|
34
|
+
examples/stomp
|
data/README.txt
CHANGED
@@ -0,0 +1,70 @@
|
|
1
|
+
|
2
|
+
class SmsLog < ActiveRecord::Base
|
3
|
+
def self.log(user, sms)
|
4
|
+
sms_transaction_log = SmsLog.new
|
5
|
+
# sms_transaction_log.user=user
|
6
|
+
sms_transaction_log.setup(sms)
|
7
|
+
sms_transaction_log.username=user
|
8
|
+
sms_transaction_log.save!
|
9
|
+
end
|
10
|
+
def self.log_result(res, user, sms,flag)
|
11
|
+
sms_transaction_log = SmsLog.new
|
12
|
+
# sms_transaction_log.user=user
|
13
|
+
sms_transaction_log.setup(sms)
|
14
|
+
sms_transaction_log.username=user
|
15
|
+
case flag
|
16
|
+
when true
|
17
|
+
if res.kind_of? Net::HTTPResponse
|
18
|
+
sms_transaction_log.response=res.code
|
19
|
+
sms_transaction_log.response_body=res.body
|
20
|
+
else
|
21
|
+
sms_transaction_log.response=202
|
22
|
+
sms_transaction_log.response_body=res
|
23
|
+
end
|
24
|
+
else
|
25
|
+
sms_transaction_log.response=9000
|
26
|
+
sms_transaction_log.response_body=res.to_s
|
27
|
+
end
|
28
|
+
sms_transaction_log.save!
|
29
|
+
end
|
30
|
+
def setup(sms)
|
31
|
+
self.sms_content=sms.text
|
32
|
+
self.destination=sms.destination
|
33
|
+
self.source= sms.source
|
34
|
+
end
|
35
|
+
|
36
|
+
#this needs to be fixed....
|
37
|
+
def self.send_sms_and_log(user, sms)
|
38
|
+
|
39
|
+
# sms_transaction_log.user=user
|
40
|
+
successflag=false
|
41
|
+
begin
|
42
|
+
sms_sender= SmscManager::SmsSendTopic.new
|
43
|
+
r= sms_sender.send_topic_sms(sms)
|
44
|
+
sms_sender.disconnect_stomp
|
45
|
+
successflag=true
|
46
|
+
rescue Exception => e
|
47
|
+
r = "send failed with #{e.message}"
|
48
|
+
end
|
49
|
+
SmscManager::SmsLog.log_result(r,user,sms,successflag)
|
50
|
+
end
|
51
|
+
|
52
|
+
|
53
|
+
# THIS NEEDs TO bE FixED,,, change to text rather string in database as well.
|
54
|
+
def self.send_mms_and_log(user, mms)
|
55
|
+
|
56
|
+
# sms_transaction_log.user=user
|
57
|
+
successflag=false
|
58
|
+
begin
|
59
|
+
|
60
|
+
mms_sender= MmscManager::MmsSendTopic.new
|
61
|
+
r= mms_sender.send_topic_mms(mms)
|
62
|
+
mms_sender.disconnect_stomp
|
63
|
+
successflag=true
|
64
|
+
|
65
|
+
rescue Exception => e
|
66
|
+
r = "send failed with #{e.message}"
|
67
|
+
end
|
68
|
+
SmscManager::SmsLog.log_result(r,user,mms,successflag)
|
69
|
+
end
|
70
|
+
end
|
@@ -64,13 +64,13 @@ def send_group(arg_hash,sms_sender)
|
|
64
64
|
sms_sender.send_topic_sms_receipt(s) { |m| receipt_count-=1
|
65
65
|
# puts "receipt: #{receipt_count}"
|
66
66
|
}
|
67
|
-
sleep(1) if c % 100 == 0
|
67
|
+
#sleep(1) if c % 100 == 0
|
68
68
|
Thread.pass
|
69
69
|
}
|
70
70
|
|
71
71
|
# sms_sender.close_topic
|
72
72
|
begin
|
73
|
-
Timeout::timeout(count*0.
|
73
|
+
Timeout::timeout(count*0.75) {
|
74
74
|
while true
|
75
75
|
puts "sent #{count} waiting for #{receipt_count} receipts"
|
76
76
|
exit(0) if receipt_count==0
|
@@ -81,7 +81,7 @@ def send_group(arg_hash,sms_sender)
|
|
81
81
|
rescue Exception => e
|
82
82
|
puts "exception #{e.message} class: #{e.class}"
|
83
83
|
puts "#{e.backtrace}"
|
84
|
-
|
84
|
+
# raise e
|
85
85
|
|
86
86
|
end
|
87
87
|
receipt_count
|
@@ -89,6 +89,7 @@ end
|
|
89
89
|
puts "Finding sms topic to use:"
|
90
90
|
begin
|
91
91
|
sms_sender=SmscManager::SmsSendTopic.new(arg_hash)
|
92
|
+
sms_sender.setup_auto_close
|
92
93
|
# sms_sender.setup_auto_close #only call this once # servers onlycall cloase
|
93
94
|
rescue Exception => e
|
94
95
|
puts "exception found #{e.backtrace}"
|
@@ -101,8 +102,14 @@ end
|
|
101
102
|
no_receipt_count=0
|
102
103
|
1.upto(repeat) { |r|
|
103
104
|
no_receipt_count+=send_group(arg_hash,sms_sender)
|
104
|
-
|
105
|
-
|
105
|
+
# sleep(1)
|
106
|
+
diff = Time.now - start
|
107
|
+
puts "#{Time.now} Sent #{count*r} in #{diff} seconds with #{no_receipt_count} problems"
|
108
|
+
|
109
|
+
completion = r.to_f/repeat*100
|
110
|
+
puts "Percent complete: #{completion}"
|
111
|
+
no_prob = count*r - no_receipt_count
|
112
|
+
puts " Average message per second is: #{no_prob/diff}"
|
106
113
|
}
|
107
114
|
|
108
115
|
diff = Time.now - start
|
data/bin/send_sms.rb
CHANGED
@@ -1,51 +1,34 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
msisdn_flag=false }
|
24
|
-
opts.on("-s","--source VAL", String) {|val| temp_hash[:source ] = val
|
25
|
-
puts "source is #{val}"
|
26
|
-
source_flag=false }
|
27
|
-
opts.on("-t","--text VAL", String) {|val| temp_hash[:text ] = val
|
28
|
-
puts "text is #{val}"
|
29
|
-
text_flag=false }
|
30
|
-
#opts.on("-d","--database VAL", String) {|val| temp_hash[:db ] = val }
|
31
|
-
#opts.on("-p","--password VAL", String) {|val| temp_hash[:password ] = val }
|
32
|
-
#opts.on("-u","--user VAL", String) {|val| temp_hash[:user ] = val }
|
33
|
-
#puts " in test commander option parse #{port} #{url}"
|
34
|
-
opts.parse(params)
|
35
|
-
# puts " in HTTP #{hostname} port #{port} url: #{url}"
|
36
|
-
usage if user_flag or msisdn_flag or source_flag or text_flag
|
37
|
-
return temp_hash
|
38
|
-
end
|
39
|
-
arg_hash=parse_options(ARGV)
|
2
|
+
# == Synopsis
|
3
|
+
# send sms via sdp
|
4
|
+
# == Usage
|
5
|
+
# send_sms.rb -u user -m msisdn -s source -t text
|
6
|
+
# == Useful commands
|
7
|
+
# send_sms.rb -u scot -m 639993130030 -s 888 -t 'hello there'
|
8
|
+
# == Author
|
9
|
+
# Scott Sproule --- Ficonab.com (scott.sproule@ficonab.com)
|
10
|
+
# == Copyright
|
11
|
+
# Copyright (c) 2007 Ficonab Pte. Ltd.
|
12
|
+
# See license for license details
|
13
|
+
|
14
|
+
require 'optparse'
|
15
|
+
require 'rubygems'
|
16
|
+
gem 'stomp_message'
|
17
|
+
require 'stomp_message'
|
18
|
+
require 'rdoc/usage'
|
19
|
+
|
20
|
+
arg_hash=StompMessage::Options.parse_options(ARGV)
|
21
|
+
RDoc::usage if arg_hash[:msisdn]==nil || arg_hash[:text] == nil || arg_hash[:source] == nil || arg_hash[:help]==true
|
22
|
+
|
40
23
|
require 'pp'
|
41
24
|
|
42
|
-
require 'rubygems'
|
43
25
|
gem 'smsc_manager'
|
44
26
|
require 'smsc_manager'
|
45
27
|
|
46
28
|
puts "Finding sms topic to use:"
|
47
29
|
begin
|
48
|
-
sms_sender=SmscManager::SmsSendTopic.new(arg_hash)
|
30
|
+
sms_sender=SmscManager::SmsSendTopic.new(arg_hash)
|
31
|
+
sms_sender.setup_auto_close
|
49
32
|
rescue Exception => e
|
50
33
|
puts "exception found #{e.backtrace}"
|
51
34
|
end
|
data/bin/send_sms_http.rb
CHANGED
@@ -1,40 +1,24 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
opts.on("-s","--source VAL", String) {|val| temp_hash[:source ] = val
|
23
|
-
puts "source is #{val}"
|
24
|
-
source_flag=false }
|
25
|
-
opts.on("-t","--text VAL", String) {|val| temp_hash[:text ] = val
|
26
|
-
puts "text is #{val}"
|
27
|
-
text_flag=false }
|
28
|
-
#opts.on("-d","--database VAL", String) {|val| temp_hash[:db ] = val }
|
29
|
-
#opts.on("-p","--password VAL", String) {|val| temp_hash[:password ] = val }
|
30
|
-
#opts.on("-u","--user VAL", String) {|val| temp_hash[:user ] = val }
|
31
|
-
#puts " in test commander option parse #{port} #{url}"
|
32
|
-
opts.parse(params)
|
33
|
-
# puts " in HTTP #{hostname} port #{port} url: #{url}"
|
34
|
-
usage if user_flag or msisdn_flag or source_flag or text_flag
|
35
|
-
return temp_hash
|
36
|
-
end
|
37
|
-
arg_hash=parse_options(ARGV)
|
2
|
+
# == Synopsis
|
3
|
+
# send sms via http
|
4
|
+
# == Usage
|
5
|
+
# send_sms_http.rb -u user -m msisdn -s source -t text
|
6
|
+
# == Useful commands
|
7
|
+
# send_sms_http.rb -u scot -m 639993130030 -s 888 -t 'hello there'
|
8
|
+
# == Author
|
9
|
+
# Scott Sproule --- Ficonab.com (scott.sproule@ficonab.com)
|
10
|
+
# == Copyright
|
11
|
+
# Copyright (c) 2007 Ficonab Pte. Ltd.
|
12
|
+
# See license for license details
|
13
|
+
|
14
|
+
require 'optparse'
|
15
|
+
require 'rubygems'
|
16
|
+
gem 'stomp_message'
|
17
|
+
require 'stomp_message'
|
18
|
+
require 'rdoc/usage'
|
19
|
+
|
20
|
+
arg_hash=StompMessage::Options.parse_options(ARGV)
|
21
|
+
RDoc::usage if arg_hash[:msisdn]==nil || arg_hash[:text] == nil || arg_hash[:source] == nil || arg_hash[:help]==true
|
38
22
|
require 'pp'
|
39
23
|
|
40
24
|
require 'rubygems'
|
data/bin/send_sms_load_test.rb
CHANGED
data/bin/send_sms_post.rb
CHANGED
@@ -1,51 +1,27 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
+
#!/usr/bin/env ruby
|
3
|
+
# == Synopsis
|
4
|
+
# send sms via http post to sdp topic --- example for content providers
|
5
|
+
# == Usage
|
6
|
+
# send_sms_post.rb -u user -m msisdn -s source -t text -h host -p port -T topic -U url
|
7
|
+
# == Sample commands
|
8
|
+
# send_sms_post.rb -u scot -s 888 -m 639993130030 -t testing -h localhost -p 8161 -T sms
|
9
|
+
# == Author
|
10
|
+
# Scott Sproule --- Ficonab.com (scott.sproule@ficonab.com)
|
11
|
+
# == Copyright
|
12
|
+
# Copyright (c) 2007 Ficonab Pte. Ltd.
|
13
|
+
# See license for license details
|
14
|
+
|
2
15
|
require 'optparse'
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
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)
|
16
|
+
require 'rubygems'
|
17
|
+
gem 'stomp_message'
|
18
|
+
require 'stomp_message'
|
19
|
+
require 'rdoc/usage'
|
20
|
+
|
21
|
+
arg_hash=StompMessage::Options.parse_options(ARGV)
|
22
|
+
RDoc::usage if arg_hash[:msisdn]==nil || arg_hash[:text] == nil || arg_hash[:source] == nil || arg_hash[:help]==true
|
46
23
|
require 'pp'
|
47
24
|
|
48
|
-
require 'rubygems'
|
49
25
|
gem 'smsc_manager'
|
50
26
|
require 'smsc_manager'
|
51
27
|
require 'net/http'
|
@@ -58,15 +34,9 @@ require 'net/http'
|
|
58
34
|
m=SmscManager::SmsSendTopic.create_stomp_message(text,destination,source)
|
59
35
|
puts "message is #{m.to_xml}"
|
60
36
|
puts "hostname: #{arg_hash[:host]} port #{arg_hash[:port]}"
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
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
|
37
|
+
url="#{arg_hash[:topic]}?m.to_xml"
|
38
|
+
arg_hash[:url]="/demo/message/" << arg_hash[:topic] if arg_hash[:url]==nil
|
39
|
+
msg_sender=StompMessage::StompSendTopic.new(arg_hash)
|
40
|
+
msg_sender.post_stomp(m, {})
|
41
|
+
|
72
42
|
|
data/bin/sms_om_server.rb
CHANGED
@@ -1,4 +1,16 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
+
# == Synopsis
|
3
|
+
# start up the sms om listener. OM = Operational Measurements. This is the statistics/repoting tool listening to sdp message
|
4
|
+
# == Usage
|
5
|
+
# sms_om_server.rb
|
6
|
+
# change the number of threads, and other key variables below to control system performance
|
7
|
+
# == Useful commands
|
8
|
+
# sms_om_server.rb
|
9
|
+
# == Author
|
10
|
+
# Scott Sproule --- Ficonab.com (scott.sproule@ficonab.com)
|
11
|
+
# == Copyright
|
12
|
+
# Copyright (c) 2007 Ficonab Pte. Ltd.
|
13
|
+
# See license for license details
|
2
14
|
require 'optparse'
|
3
15
|
def usage
|
4
16
|
puts "Usage: sms_topic_server.rb to start up listener "
|
@@ -12,7 +24,7 @@ require 'smsc_manager'
|
|
12
24
|
puts "Starting Operational Measurement (OM) server:"
|
13
25
|
# begin
|
14
26
|
# can add additional options to change host/port etc
|
15
|
-
sms_listener=SmscManager::SmsStatisticsListener.new({:topic => '/topic/sms', :thread_count => '
|
27
|
+
sms_listener=SmscManager::SmsStatisticsListener.new({:topic => '/topic/sms', :thread_count => '3'}).run
|
16
28
|
# sms_listener.join
|
17
29
|
# rescue Exception => e
|
18
30
|
puts "exception found #{e.backtrace}"
|
data/bin/sms_topic_server.rb
CHANGED
@@ -1,17 +1,34 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
+
# == Synopsis
|
3
|
+
# start up the sms topic listener. This is the key component for listening to sdp message
|
4
|
+
# == Usage
|
5
|
+
# sms_topic_server.rb path_to_sms_model_files rails_environment
|
6
|
+
# change the number of threads, and other key variables below to control system performance
|
7
|
+
# == Useful commands
|
8
|
+
# sms_topic_server.rb ./ development --- if in development environment
|
9
|
+
# sms_topic_server.rb --- if in production environment and config ok.
|
10
|
+
# == Author
|
11
|
+
# Scott Sproule --- Ficonab.com (scott.sproule@ficonab.com)
|
12
|
+
# == Copyright
|
13
|
+
# Copyright (c) 2007 Ficonab Pte. Ltd.
|
14
|
+
# See license for license details
|
2
15
|
require 'optparse'
|
3
16
|
def usage
|
4
17
|
puts "Usage: sms_topic_server.rb to start up listener "
|
18
|
+
puts "Usage: sms_topic_server.rb path_to_subscriptions_rails_app environment "
|
19
|
+
puts "eg: sms_topic_server.rb ./ development "
|
5
20
|
exit
|
6
21
|
end
|
7
22
|
|
8
23
|
require 'rubygems'
|
9
24
|
gem 'smsc_manager'
|
10
25
|
require 'smsc_manager'
|
11
|
-
|
12
|
-
|
26
|
+
env_setting = ARGV[1] || "production"
|
27
|
+
path_setting = ARGV[0] || "/opt/local/rails_apps/smsapp/current/"
|
28
|
+
puts "Starting SMSC Topic Server topic server: path: #{path_setting} environment: #{env_setting}"
|
29
|
+
#puts "Starting topic server:"
|
13
30
|
# begin
|
14
|
-
SmscManager::SmscListener.new({:topic => '/topic/sms', :thread_count => '
|
31
|
+
SmscManager::SmscListener.new({:topic => '/topic/sms', :thread_count => '10', :env => env_setting, :root_path => path_setting }).run
|
15
32
|
# sms_listener.join
|
16
33
|
# rescue Exception => e
|
17
34
|
puts "exception found #{e.backtrace}"
|
@@ -1,4 +1,17 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
+
#!/usr/bin/env ruby
|
3
|
+
# == Synopsis
|
4
|
+
# daemonize the sms topic listener. For use in production environment
|
5
|
+
# == Usage
|
6
|
+
# sms_topic_server_control.rb start
|
7
|
+
# sms_topic_server_control.rb stop
|
8
|
+
# == Useful commands
|
9
|
+
# supports other daemons commands
|
10
|
+
# == Author
|
11
|
+
# Scott Sproule --- Ficonab.com (scott.sproule@ficonab.com)
|
12
|
+
# == Copyright
|
13
|
+
# Copyright (c) 2007 Ficonab Pte. Ltd.
|
14
|
+
# See license for license details
|
2
15
|
require 'optparse'
|
3
16
|
require 'rubygems'
|
4
17
|
gem 'smsc_manager'
|
data/config/database.yml
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
# MySQL (default setup). Versions 4.1 and 5.0 are recommended.
|
2
|
+
#
|
3
|
+
# Install the MySQL driver:
|
4
|
+
# gem install mysql
|
5
|
+
# On MacOS X:
|
6
|
+
# gem install mysql -- --include=/usr/local/lib
|
7
|
+
# On Windows:
|
8
|
+
# There is no gem for Windows. Install mysql.so from RubyForApache.
|
9
|
+
# http://rubyforge.org/projects/rubyforapache
|
10
|
+
#
|
11
|
+
# And be sure to use new-style password hashing:
|
12
|
+
# http://dev.mysql.com/doc/refman/5.0/en/old-client.html
|
13
|
+
development:
|
14
|
+
adapter: mysql
|
15
|
+
database: smsapp_development
|
16
|
+
username: root
|
17
|
+
password: Abby789
|
18
|
+
host: localhost
|
19
|
+
|
20
|
+
# Warning: The database defined as 'test' will be erased and
|
21
|
+
# re-generated from your development database when you run 'rake'.
|
22
|
+
# Do not set this db to the same as development or production.
|
23
|
+
test:
|
24
|
+
adapter: mysql
|
25
|
+
database: smsapp_test
|
26
|
+
username: root
|
27
|
+
password: Abby789
|
28
|
+
host: localhost
|
29
|
+
|
30
|
+
production:
|
31
|
+
adapter: mysql
|
32
|
+
database: smsapp_production
|
33
|
+
username: root
|
34
|
+
password: Abby789
|
35
|
+
host: localhost
|
@@ -44,8 +44,11 @@ class BroadcastTopic
|
|
44
44
|
|
45
45
|
# puts " dst is #{dst}"
|
46
46
|
}
|
47
|
-
|
48
|
-
|
47
|
+
|
48
|
+
sleep(2) # should we wait till we get receipts for all?
|
49
|
+
puts "populate topic sent #{self.sent}"
|
50
|
+
sleep(self.attempts*0.5+1) if self.sent!=self.attempts
|
51
|
+
puts "populate topic sent after sleep #{self.sent}"
|
49
52
|
self.sms_sender.disconnect_stomp
|
50
53
|
end
|
51
54
|
def send_it(txt,dst)
|
data/lib/smsc_manager/sms.rb
CHANGED
@@ -11,7 +11,7 @@ end
|
|
11
11
|
class Sms
|
12
12
|
@@MAX_SIZE=1500 # 3*160 # max 1500 characters, change if your smsc suports less
|
13
13
|
@@msisdn_valid_prefix= %w{ 63999 999 0999 1000 888 +63999 }
|
14
|
-
attr_accessor :text, :source, :destination
|
14
|
+
attr_accessor :text, :source, :destination #, :orig_txt
|
15
15
|
def self.max_length
|
16
16
|
@@MAX_SIZE
|
17
17
|
end
|
@@ -22,13 +22,16 @@ class Sms
|
|
22
22
|
@@msisdn_valid_prefix.each {|t| sentence << t <<" " }
|
23
23
|
sentence
|
24
24
|
end
|
25
|
+
def get_message_content
|
26
|
+
self.text
|
27
|
+
end
|
25
28
|
def self.starts_with?(prefix,dest)
|
26
29
|
prefix = prefix.to_s
|
27
30
|
return false if dest == nil
|
28
31
|
dest[0, prefix.length] == prefix
|
29
32
|
end
|
30
33
|
def initialize(txt,dest,src='888')
|
31
|
-
|
34
|
+
# self.orig_txt=txt
|
32
35
|
self.destination=dest
|
33
36
|
self.source=src
|
34
37
|
self.text=strip_text(txt)
|
@@ -51,21 +54,7 @@ class Sms
|
|
51
54
|
# doc= REXML::Document.new sms_xml.to_s
|
52
55
|
# doc.to_s
|
53
56
|
end
|
54
|
-
|
55
|
-
sms_xml = REXML::Element.new "sms"
|
56
|
-
destination_xml = REXML::Element.new "destination"
|
57
|
-
destination_xml.text=self.destination
|
58
|
-
source_xml =REXML::Element.new "source"
|
59
|
-
source_xml.text=self.source
|
60
|
-
text_xml =REXML::Element.new "text"
|
61
|
-
text_xml.text=self.text
|
62
|
-
sms_xml.add_element destination_xml
|
63
|
-
sms_xml.add_element source_xml
|
64
|
-
sms_xml.add_element text_xml
|
65
|
-
sms_xml.to_s
|
66
|
-
# doc= REXML::Document.new sms_xml.to_s
|
67
|
-
# doc.to_s
|
68
|
-
end
|
57
|
+
|
69
58
|
def self.load_xml(xml_string)
|
70
59
|
doc=REXML::Document.new(xml_string)
|
71
60
|
dest=REXML::XPath.first(doc, "//destination").text
|
@@ -77,9 +66,10 @@ class Sms
|
|
77
66
|
#limit to @@MAX_SIZE characters
|
78
67
|
ret=""
|
79
68
|
size=[val.size,@@MAX_SIZE].min-1
|
80
|
-
|
81
|
-
|
82
|
-
|
69
|
+
# 0.upto(size) do |i|
|
70
|
+
# ret << val[i]
|
71
|
+
# end
|
72
|
+
ret=val[0..size]
|
83
73
|
ret
|
84
74
|
end
|
85
75
|
def strip_text(txt)
|
@@ -88,9 +78,10 @@ class Sms
|
|
88
78
|
result=txt.gsub(/@/,"(at)") # replace all at signs return result
|
89
79
|
# result=result.gsub(/\n/," ") # replace all new lines return result
|
90
80
|
# result=result.gsub(/\r/," ") # replace all new lines return result
|
91
|
-
result=result.gsub(
|
92
|
-
|
81
|
+
result=result.gsub('_',"-") # replace all new lines return result
|
82
|
+
# result=result.gsub(/-/," ") # replace all - with space...angelo bug return result
|
93
83
|
# result=result4.gsub(/\//,"") # replace all new lines return result
|
84
|
+
|
94
85
|
limit_text(result)
|
95
86
|
end
|
96
87
|
end
|
@@ -24,7 +24,7 @@ class SmscConnection
|
|
24
24
|
s= Time.now - s
|
25
25
|
end
|
26
26
|
# puts "#{Time.now} result #{hostname} flag: #{flag} res: #{res} time #{s}"
|
27
|
-
puts "-res #{@res} -time #{s}"
|
27
|
+
puts "-res #{@res} -time #{s} dest: #{destination} src: #{source}"
|
28
28
|
return @res
|
29
29
|
end
|
30
30
|
def self.path_to_config
|
@@ -71,8 +71,8 @@ class SmscConnection
|
|
71
71
|
|
72
72
|
# URL Encoded specific to Kannel that is why not part of model
|
73
73
|
def sms_send(sms)
|
74
|
-
|
75
|
-
txt_encoded=ERB::Util.url_encode(
|
74
|
+
text= ERB::Util.html_escape(sms.text)
|
75
|
+
txt_encoded=ERB::Util.url_encode(text)
|
76
76
|
# txt_encoded=limit_text(txt_encoded)
|
77
77
|
# smsc=SmscManager::SmscConnection.factory
|
78
78
|
internal_send(txt_encoded,sms.destination,sms.source)
|
@@ -6,33 +6,34 @@ require 'stomp'
|
|
6
6
|
gem 'stomp_message'
|
7
7
|
require 'stomp_message'
|
8
8
|
module SmscManager
|
9
|
-
class SmscListener < StompMessage::
|
9
|
+
class SmscListener < StompMessage::StompZActiveRecordServer
|
10
10
|
@@MAX_THROUGHPUT =5 # in messages per second
|
11
11
|
SLEEP_TIME=1/@@MAX_THROUGHPUT #sleep x seconds to slow down system
|
12
12
|
attr_accessor :smsc
|
13
13
|
#need to define topic, host properly
|
14
14
|
# @@TOPIC='/topic/sms'
|
15
15
|
def initialize(options={})
|
16
|
+
self.model_list = []
|
17
|
+
self.model_list << "sms_log.rb"
|
16
18
|
super(options)
|
17
|
-
self.smsc=SmscManager::SmscConnection.factory
|
19
|
+
#self.smsc=SmscManager::SmscConnection.factory
|
18
20
|
puts "finished initializing"
|
19
21
|
end
|
20
|
-
|
21
|
-
#
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
# name is message command
|
22
|
+
def archive_sms(res,sms)
|
23
|
+
# do I need to do exception handling in here
|
24
|
+
flag= res.kind_of? Net::HTTPResponse
|
25
|
+
SmsLog.log_result(res, 'stomp_message', sms,flag )
|
26
|
+
end
|
27
|
+
def setup_thread_specific_items(mythread_number)
|
28
|
+
super(mythread_number)
|
29
|
+
puts " ----creating smsc for #{Thread.current[:name]}"
|
30
|
+
Thread.current[:smsc]= SmscManager::SmscConnection.factory
|
31
|
+
end
|
31
32
|
def stomp_SMS(msg, stomp_msg)
|
32
33
|
sms=SmscManager::Sms.load_xml(msg.body)
|
33
|
-
puts "sending sms #{msg.body}" if @debug
|
34
|
-
res=
|
35
|
-
|
34
|
+
puts "#{Thread.current[:name]}sending sms #{msg.body}" if @debug
|
35
|
+
res= Thread.current[:smsc].send(sms)
|
36
|
+
archive_sms(res,sms)
|
36
37
|
# sleep(SLEEP_TIME) #only 5 messages per second max
|
37
38
|
end
|
38
39
|
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
require 'erb'
|
3
|
+
require 'timeout'
|
4
|
+
require 'net/http'
|
5
|
+
module SmscManager
|
6
|
+
class SmscStompConnection
|
7
|
+
# use block for timers etc
|
8
|
+
@@timeout_max = 10 #10 second timeout to contact sms server
|
9
|
+
attr_accessor :hostname, :port, :username, :password, :url, :topic
|
10
|
+
def intialize(args)
|
11
|
+
self.url="/TopicSMS/TopicSMS"
|
12
|
+
self.topic = 'sms'
|
13
|
+
self.hostname = 'x.x.x.x'
|
14
|
+
self.port='8161'
|
15
|
+
end
|
16
|
+
|
17
|
+
def send(sms)
|
18
|
+
sms_send(sms)
|
19
|
+
end
|
20
|
+
def test(sms)
|
21
|
+
send(sms)
|
22
|
+
end
|
23
|
+
# asssumes http post --- can be modified for other messaging of course
|
24
|
+
def sms_send(sms)
|
25
|
+
puts "create stomp message"
|
26
|
+
m=SmscManager::SmsSendTopic.create_stomp_message(sms.text,sms.destination,sms.source)
|
27
|
+
puts "message is #{m.to_xml}"
|
28
|
+
# original puts "hostname: #{arg_hash[:host]} port #{arg_hash[:port]}"
|
29
|
+
arg_hash={}
|
30
|
+
arg_hash[:host]=self.hostname
|
31
|
+
argh_hash[:port]=self.port
|
32
|
+
puts "hostname: #{self.hostname} port #{arg_hash[:port]}"
|
33
|
+
url="#{arg_hash[:topic]}?m.to_xml"
|
34
|
+
arg_hash[:url]=self.url
|
35
|
+
arg_hash[:topic]=self.topic
|
36
|
+
msg_sender=StompMessage::StompSendTopic.new(arg_hash)
|
37
|
+
msg_sender.post_stomp(m, {})
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
end
|
data/lib/smsc_manager/version.rb
CHANGED
data/test/smsc_manager_test.rb
CHANGED
@@ -60,6 +60,11 @@ class SmscManagerTest < Test::Unit::TestCase
|
|
60
60
|
sms=SmscManager::Sms.new(nil,'09996557890','websource')
|
61
61
|
assert sms.text==" ", "text not correct for nil"
|
62
62
|
end
|
63
|
+
def test_sms_text_ampersand
|
64
|
+
sms=SmscManager::Sms.new('test & test','639996557890','websource')
|
65
|
+
sms2=SmscManager::Sms.load_xml(sms.to_xml)
|
66
|
+
assert sms.to_xml==sms2.to_xml, "xml bad with ampersand"
|
67
|
+
end
|
63
68
|
def test_broadcast_two
|
64
69
|
list = %w(9991 9992)
|
65
70
|
b=SmscManager::Broadcast.new('888',list,"hello there")
|
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.5.
|
7
|
-
date: 2007-
|
6
|
+
version: 0.5.6
|
7
|
+
date: 2007-11-02 00:00:00 +08:00
|
8
8
|
summary: connection to smsc via http using kannel
|
9
9
|
require_paths:
|
10
10
|
- lib
|
@@ -35,6 +35,7 @@ files:
|
|
35
35
|
- Manifest.txt
|
36
36
|
- setup.rb
|
37
37
|
- config/smsc.yml
|
38
|
+
- config/database.yml
|
38
39
|
- bin/smsc_config.rb
|
39
40
|
- bin/smsc_print_config.rb
|
40
41
|
- bin/send_sms_post.rb
|
@@ -50,6 +51,7 @@ files:
|
|
50
51
|
- lib/smsc_manager/version.rb
|
51
52
|
- lib/smsc_manager/sms.rb
|
52
53
|
- lib/smsc_manager/smsc_listener.rb
|
54
|
+
- lib/smsc_manager/smsc_stomp_connection.rb
|
53
55
|
- lib/smsc_manager/sms_statistics_listener.rb
|
54
56
|
- lib/smsc_manager/sms_send_topic.rb
|
55
57
|
- lib/smsc_manager/broadcast.rb
|
@@ -57,6 +59,7 @@ files:
|
|
57
59
|
- lib/smsc_manager/smsc_connection.rb
|
58
60
|
- lib/smsc_manager.rb
|
59
61
|
- test/test_helper.rb
|
62
|
+
- app/models/sms_log.rb
|
60
63
|
- test/smsc_manager_test.rb
|
61
64
|
- examples/receive_sms_controller.rb
|
62
65
|
- examples/stomp
|