stomp 1.2.14 → 1.2.16
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.
- checksums.yaml +15 -0
- data/CHANGELOG.rdoc +10 -0
- data/README.rdoc +3 -0
- data/Rakefile +1 -0
- data/lib/client/utils.rb +27 -32
- data/lib/connection/netio.rb +44 -21
- data/lib/connection/utils.rb +2 -2
- data/lib/stomp/client.rb +9 -22
- data/lib/stomp/connection.rb +7 -1
- data/lib/stomp/errors.rb +8 -0
- data/lib/stomp/version.rb +1 -1
- data/spec/client_spec.rb +72 -41
- data/spec/connection_spec.rb +5 -2
- data/stomp.gemspec +2 -1
- metadata +5 -8
checksums.yaml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
MDM0Njc0MjJhMzYzOTBjZGQ0NGZiZTM4MDA2MzRlNzgwZmE2M2JmZg==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
YmY5YmNlNTFkMTEwMzFlMDRjYWJlNWQ4MmRjZWEwNWJmNjU3YTZjZA==
|
7
|
+
!binary "U0hBNTEy":
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
ZmRmZWI0MGUyMDZjNDM2Yjc3YjY5ZmRiODQwZmNhZDIwYmNiOGY0NDczMWI2
|
10
|
+
Nzg2NWNiMWQ4YmY4YWQ5MzRhNjAwOTZlYWUwZDU4ZDhhYWNkMmJmYmI1MDFl
|
11
|
+
ZDFkOWNmMDdjZTgxZmQ3NmZkYTk5YmYzMDk2ZTljYmE4ZjhlOTk=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
MjQ5YWQ3MjYwMjAyYWVkNDRiY2Q1ZGUxYTU0MzFhOTE1NGNlYjU1MGRjN2I3
|
14
|
+
NzU4ZDJkNmZiYTZkNjU3YmQ0MTQxOGUzM2ZhMDIxNmY4NGYwNDhjYTcxNGQ5
|
15
|
+
MWVmNzI5ZjIwMjEwN2E2ZjM0MzBkM2RmZmEwMjk3NTNiNWM2MzM=
|
data/CHANGELOG.rdoc
CHANGED
@@ -1,3 +1,13 @@
|
|
1
|
+
== 1.2.16 20130812
|
2
|
+
|
3
|
+
* Stomp::Client's should expose connection's host params
|
4
|
+
|
5
|
+
== 1.2.15 20130809
|
6
|
+
|
7
|
+
* Add user-specified timeout for initial CONNECTED/ERROR frame read.
|
8
|
+
* Eliminate dup Timeout::timeout in ssl connect
|
9
|
+
* Add license information to gemspec (#69)
|
10
|
+
|
1
11
|
== 1.2.14 20130819
|
2
12
|
|
3
13
|
* Version bump (1.2.13 release had Stomp::Version of 1.1.12.)
|
data/README.rdoc
CHANGED
@@ -12,6 +12,8 @@ An implementation of the Stomp protocol for Ruby. See:
|
|
12
12
|
|
13
13
|
See _CHANGELOG.rdoc_ for details.
|
14
14
|
|
15
|
+
* Gem version 1.2.16. Fixed Stomp::Client to expose its connection's host parameters.
|
16
|
+
* Gem version 1.2.15. Timeout cleanup, added license info to gemspec.
|
15
17
|
* Gem version 1.2.14. Cleanup.
|
16
18
|
* Gem version 1.2.13. Stomp::Client#unreceive max_redeliveries fix.
|
17
19
|
* Gem version 1.2.12. Miscellaneous issue fixes and cleanup.
|
@@ -60,6 +62,7 @@ See _CHANGELOG.rdoc_ for details.
|
|
60
62
|
:fast_hbs_adjust => 0.0, # Fast heartbeat senders sleep adjustment, seconds, needed ...
|
61
63
|
# For fast heartbeat senders. 'fast' == YMMV. If not
|
62
64
|
# correct for your environment, expect unnecessary fail overs
|
65
|
+
:connread_timeout => 0, # Timeout during CONNECT for read of CONNECTED/ERROR, secs
|
63
66
|
}
|
64
67
|
|
65
68
|
# for client
|
data/Rakefile
CHANGED
@@ -30,6 +30,7 @@ begin
|
|
30
30
|
gem.name = "stomp"
|
31
31
|
gem.version = Stomp::Version::STRING
|
32
32
|
gem.summary = %Q{Ruby client for the Stomp messaging protocol}
|
33
|
+
gem.license = "Apache 2.0"
|
33
34
|
gem.description = %Q{Ruby client for the Stomp messaging protocol. Note that this gem is no longer supported on rubyforge.}
|
34
35
|
gem.email = ["brianm@apache.org", 'marius@stones.com', 'morellon@gmail.com',
|
35
36
|
'allard.guy.m@gmail.com' ]
|
data/lib/client/utils.rb
CHANGED
@@ -13,25 +13,20 @@ module Stomp
|
|
13
13
|
return false unless params.is_a?(Hash)
|
14
14
|
|
15
15
|
@parameters = params
|
16
|
-
|
17
|
-
|
18
|
-
@passcode = first_host[:passcode]
|
19
|
-
@host = first_host[:host]
|
20
|
-
@port = first_host[:port] || Connection::default_port(first_host[:ssl])
|
21
|
-
@reliable = true
|
16
|
+
@parameters[:reliable] = true
|
17
|
+
|
22
18
|
true
|
23
19
|
end
|
24
20
|
|
25
21
|
def parse_stomp_url(login)
|
26
22
|
regexp = /^stomp:\/\/#{URL_REPAT}/
|
27
|
-
return false unless
|
28
|
-
|
29
|
-
@login = $3 || ""
|
30
|
-
@passcode = $4 || ""
|
31
|
-
@host = $5
|
32
|
-
@port = $6.to_i
|
23
|
+
return false unless url = regexp.match(login)
|
33
24
|
|
34
|
-
@
|
25
|
+
@parameters = { :reliable => false,
|
26
|
+
:hosts => [ { :login => url[3] || "",
|
27
|
+
:passcode => url[4] || "",
|
28
|
+
:host => url[5],
|
29
|
+
:port => url[6].to_i} ] }
|
35
30
|
true
|
36
31
|
end
|
37
32
|
|
@@ -40,31 +35,28 @@ module Stomp
|
|
40
35
|
rval = nil
|
41
36
|
if md = FAILOVER_REGEX.match(login)
|
42
37
|
finhosts = parse_hosts(login)
|
43
|
-
|
44
|
-
@login = finhosts[0][:login] || ""
|
45
|
-
@passcode = finhosts[0][:passcode] || ""
|
46
|
-
@host = finhosts[0][:host] || ""
|
47
|
-
@port = finhosts[0][:port] || ""
|
48
|
-
#
|
38
|
+
|
49
39
|
options = {}
|
50
|
-
if md_last = md[
|
40
|
+
if md_last = md[-1]
|
51
41
|
parts = md_last.split(/&|=/)
|
52
|
-
raise Stomp::Error::MalformedFailoverOptionsError unless (parts.size % 2 ) == 0
|
42
|
+
raise Stomp::Error::MalformedFailoverOptionsError unless ( parts.size % 2 ) == 0
|
53
43
|
options = Hash[*parts]
|
54
44
|
end
|
55
|
-
|
56
|
-
@
|
45
|
+
|
46
|
+
@parameters = {:hosts => finhosts}.merge!(filter_options(options))
|
47
|
+
|
48
|
+
@parameters[:reliable] = true
|
57
49
|
rval = true
|
58
50
|
end
|
59
51
|
rval
|
60
52
|
end
|
61
53
|
|
62
54
|
def parse_positional_params(login, passcode, host, port, reliable)
|
63
|
-
@
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
55
|
+
@parameters = { :reliable => reliable,
|
56
|
+
:hosts => [ { :login => login,
|
57
|
+
:passcode => passcode,
|
58
|
+
:host => host,
|
59
|
+
:port => port.to_i } ] }
|
68
60
|
true
|
69
61
|
end
|
70
62
|
|
@@ -108,9 +100,12 @@ end
|
|
108
100
|
|
109
101
|
# A very basic check of required arguments.
|
110
102
|
def check_arguments!()
|
111
|
-
|
112
|
-
|
113
|
-
raise ArgumentError
|
103
|
+
first_host = @parameters && @parameters[:hosts] && @parameters[:hosts].first
|
104
|
+
|
105
|
+
raise ArgumentError if first_host.nil?
|
106
|
+
raise ArgumentError if first_host[:host].nil? || first_host[:host].empty?
|
107
|
+
raise ArgumentError if first_host[:port].nil? || first_host[:port] == '' || first_host[:port] < 1 || first_host[:port] > 65535
|
108
|
+
raise ArgumentError unless @parameters[:reliable].is_a?(TrueClass) || @parameters[:reliable].is_a?(FalseClass)
|
114
109
|
end
|
115
110
|
|
116
111
|
# filter_options returns a new Hash of filtered options.
|
@@ -149,7 +144,7 @@ end
|
|
149
144
|
while true
|
150
145
|
message = @connection.receive
|
151
146
|
# AMQ specific behavior
|
152
|
-
if message.nil? && (!@reliable)
|
147
|
+
if message.nil? && (!@parameters[:reliable])
|
153
148
|
raise Stomp::Error::NilMessageError
|
154
149
|
end
|
155
150
|
if message # message can be nil on rapid AMQ stop / start sequences
|
data/lib/connection/netio.rb
CHANGED
@@ -12,28 +12,24 @@ module Stomp
|
|
12
12
|
private
|
13
13
|
|
14
14
|
# Really read from the wire.
|
15
|
-
def _receive(read_socket)
|
15
|
+
def _receive(read_socket, connread = false)
|
16
16
|
@read_semaphore.synchronize do
|
17
|
-
line =
|
18
|
-
if
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
line = read_socket.gets # Data from wire
|
23
|
-
break unless line == "\n"
|
24
|
-
line = ''
|
17
|
+
line = nil
|
18
|
+
if connread
|
19
|
+
begin
|
20
|
+
Timeout::timeout(@connread_timeout, Stomp::Error::ConnectReadTimeout) do
|
21
|
+
line = _init_line_read(read_socket)
|
25
22
|
end
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
line = read_socket.gets # Data from wire
|
32
|
-
break unless line == "\n"
|
33
|
-
line = ''
|
34
|
-
@lr = Time.now.to_f
|
23
|
+
rescue Stomp::Error::ConnectReadTimeout => ex
|
24
|
+
if @reliable
|
25
|
+
_reconn_prep()
|
26
|
+
end
|
27
|
+
raise ex
|
35
28
|
end
|
29
|
+
else
|
30
|
+
line = _init_line_read(read_socket)
|
36
31
|
end
|
32
|
+
#
|
37
33
|
return nil if line.nil?
|
38
34
|
# p [ "wiredatain_01", line ]
|
39
35
|
line = _normalize_line_end(line) if @protocol >= Stomp::SPL_12
|
@@ -290,7 +286,8 @@ module Stomp
|
|
290
286
|
end
|
291
287
|
|
292
288
|
Timeout::timeout(@connect_timeout, Stomp::Error::SocketOpenTimeout) do
|
293
|
-
|
289
|
+
tcp_socket = TCPSocket.open(@host, @port)
|
290
|
+
ssl = OpenSSL::SSL::SSLSocket.new(tcp_socket, ctx)
|
294
291
|
ssl.hostname = @host if ssl.respond_to? :hostname=
|
295
292
|
ssl.sync_close = true # Sync ssl close with underlying TCP socket
|
296
293
|
ssl.connect
|
@@ -345,7 +342,9 @@ module Stomp
|
|
345
342
|
|
346
343
|
@closed = false
|
347
344
|
if @parameters # nil in some rspec tests
|
348
|
-
@reconnect_delay
|
345
|
+
unless @reconnect_delay
|
346
|
+
@reconnect_delay = @parameters[:initial_reconnect_delay] ? @parameters[:initial_reconnect_delay] : 0.01
|
347
|
+
end
|
349
348
|
end
|
350
349
|
# Use keepalive
|
351
350
|
used_socket.setsockopt(Socket::SOL_SOCKET, Socket::SO_KEEPALIVE, true)
|
@@ -364,7 +363,7 @@ module Stomp
|
|
364
363
|
else
|
365
364
|
_transmit(used_socket, Stomp::CMD_CONNECT, headers)
|
366
365
|
end
|
367
|
-
@connection_frame = _receive(used_socket)
|
366
|
+
@connection_frame = _receive(used_socket, true)
|
368
367
|
_post_connect
|
369
368
|
@disconnect_receipt = nil
|
370
369
|
@session = @connection_frame.headers["session"] if @connection_frame
|
@@ -374,6 +373,30 @@ module Stomp
|
|
374
373
|
}
|
375
374
|
end
|
376
375
|
|
376
|
+
def _init_line_read(read_socket)
|
377
|
+
line = ''
|
378
|
+
if @protocol == Stomp::SPL_10 || (@protocol >= Stomp::SPL_11 && !@hbr)
|
379
|
+
if @jruby
|
380
|
+
# Handle JRuby specific behavior.
|
381
|
+
while true
|
382
|
+
line = read_socket.gets # Data from wire
|
383
|
+
break unless line == "\n"
|
384
|
+
line = ''
|
385
|
+
end
|
386
|
+
else
|
387
|
+
line = read_socket.gets # The old way
|
388
|
+
end
|
389
|
+
else # We are >= 1.1 *AND* receiving heartbeats.
|
390
|
+
while true
|
391
|
+
line = read_socket.gets # Data from wire
|
392
|
+
break unless line == "\n"
|
393
|
+
line = ''
|
394
|
+
@lr = Time.now.to_f
|
395
|
+
end
|
396
|
+
end
|
397
|
+
line
|
398
|
+
end
|
399
|
+
|
377
400
|
end # class Connection
|
378
401
|
|
379
402
|
end # module Stomp
|
data/lib/connection/utils.rb
CHANGED
@@ -182,6 +182,7 @@ module Stomp
|
|
182
182
|
:max_hbread_fails => 0,
|
183
183
|
:max_hbrlck_fails => 0,
|
184
184
|
:fast_hbs_adjust => 0.0,
|
185
|
+
:connread_timeout => 0,
|
185
186
|
}
|
186
187
|
|
187
188
|
res_params = default_params.merge(params)
|
@@ -191,7 +192,7 @@ module Stomp
|
|
191
192
|
return res_params
|
192
193
|
end
|
193
194
|
|
194
|
-
# change_host selects the next host for
|
195
|
+
# change_host selects the next host for retries.
|
195
196
|
def change_host
|
196
197
|
@parameters[:hosts] = @parameters[:hosts].sort_by { rand } if @parameters[:randomize]
|
197
198
|
|
@@ -204,7 +205,6 @@ module Stomp
|
|
204
205
|
@port = current_host[:port] || Connection::default_port(@ssl)
|
205
206
|
@login = current_host[:login] || ""
|
206
207
|
@passcode = current_host[:passcode] || ""
|
207
|
-
|
208
208
|
end
|
209
209
|
|
210
210
|
# max_reconnect_attempts? returns nil or the number of maximum reconnect
|
data/lib/stomp/client.rb
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|
require 'thread'
|
4
4
|
require 'digest/sha1'
|
5
|
+
require 'forwardable'
|
5
6
|
|
6
7
|
module Stomp
|
7
8
|
|
@@ -11,25 +12,14 @@ module Stomp
|
|
11
12
|
# Receives all happen in one thread, so consider not doing much processing
|
12
13
|
# in that thread if you have much message volume.
|
13
14
|
class Client
|
15
|
+
extend Forwardable
|
14
16
|
|
15
|
-
#
|
16
|
-
attr_reader :login
|
17
|
-
|
18
|
-
# The login credentials used by the client.
|
19
|
-
attr_reader :passcode
|
20
|
-
|
21
|
-
# The Stomp host specified by the client.
|
22
|
-
attr_reader :host
|
23
|
-
|
24
|
-
# The Stomp host's listening port.
|
25
|
-
attr_reader :port
|
26
|
-
|
27
|
-
# Is this connection reliable?
|
28
|
-
attr_reader :reliable
|
29
|
-
|
30
|
-
# Parameters Hash, possibly nil for a non-hashed connect.
|
17
|
+
# Parameters hash
|
31
18
|
attr_reader :parameters
|
32
19
|
|
20
|
+
def_delegators :@connection, :login, :passcode, :port, :host, :ssl
|
21
|
+
def_delegator :@parameters, :reliable
|
22
|
+
|
33
23
|
# A new Client object can be initialized using three forms:
|
34
24
|
#
|
35
25
|
# Hash (this is the recommended Client initialization method):
|
@@ -58,6 +48,7 @@ module Stomp
|
|
58
48
|
# :max_hbread_fails => 0,
|
59
49
|
# :max_hbrlck_fails => 0,
|
60
50
|
# :fast_hbs_adjust => 0.0,
|
51
|
+
# :connread_timeout => 0,
|
61
52
|
# }
|
62
53
|
#
|
63
54
|
# e.g. c = Stomp::Client.new(hash)
|
@@ -99,12 +90,8 @@ module Stomp
|
|
99
90
|
end
|
100
91
|
|
101
92
|
def create_connection(autoflush)
|
102
|
-
|
103
|
-
|
104
|
-
else
|
105
|
-
@connection = Connection.new(@login, @passcode, @host, @port, @reliable)
|
106
|
-
@connection.autoflush = autoflush
|
107
|
-
end
|
93
|
+
@connection = Connection.new(@parameters)
|
94
|
+
@connection.autoflush = autoflush
|
108
95
|
end
|
109
96
|
private :create_connection
|
110
97
|
|
data/lib/stomp/connection.rb
CHANGED
@@ -38,6 +38,9 @@ module Stomp
|
|
38
38
|
# dynamically by calling code.
|
39
39
|
attr_accessor :autoflush
|
40
40
|
|
41
|
+
# Currently-connected host and port
|
42
|
+
attr_reader :host, :port
|
43
|
+
|
41
44
|
# default_port returns the default port used by the gem for TCP or SSL.
|
42
45
|
def self.default_port(ssl)
|
43
46
|
ssl ? 61612 : 61613
|
@@ -71,6 +74,7 @@ module Stomp
|
|
71
74
|
# :max_hbread_fails => 0,
|
72
75
|
# :max_hbrlck_fails => 0,
|
73
76
|
# :fast_hbs_adjust => 0.0,
|
77
|
+
# :connread_timeout => 0,
|
74
78
|
# }
|
75
79
|
#
|
76
80
|
# e.g. c = Stomp::Connection.new(hash)
|
@@ -117,7 +121,8 @@ module Stomp
|
|
117
121
|
@usecrlf = false # If true, use \r\n as line ends (1.2 only)
|
118
122
|
@max_hbread_fails = 0 # 0 means never retry for HB read failures
|
119
123
|
@max_hbrlck_fails = 0 # 0 means never retry for HB read lock failures
|
120
|
-
@fast_hbs_adjust = 0.0 # Fast heartbeat senders sleep adjustment
|
124
|
+
@fast_hbs_adjust = 0.0 # Fast heartbeat senders sleep adjustment
|
125
|
+
@connread_timeout = 0 # Connect read CONNECTED/ERROR timeout
|
121
126
|
warn "login looks like a URL, do you have the correct parameters?" if @login =~ /:\/\//
|
122
127
|
end
|
123
128
|
|
@@ -153,6 +158,7 @@ module Stomp
|
|
153
158
|
@max_hbread_fails = @parameters[:max_hbread_fails]
|
154
159
|
@max_hbrlck_fails = @parameters[:max_hbrlck_fails]
|
155
160
|
@fast_hbs_adjust = @parameters[:fast_hbs_adjust]
|
161
|
+
@connread_timeout = @parameters[:connread_timeout]
|
156
162
|
#sets the first host to connect
|
157
163
|
change_host
|
158
164
|
end
|
data/lib/stomp/errors.rb
CHANGED
@@ -213,6 +213,14 @@ module Stomp
|
|
213
213
|
end
|
214
214
|
end
|
215
215
|
|
216
|
+
# ConnectReadTimeout is raised if:
|
217
|
+
# * A read for CONNECTED/ERROR is untimely
|
218
|
+
class ConnectReadTimeout < RuntimeError
|
219
|
+
def message
|
220
|
+
"Connect read for CONNECTED/ERROR timeout"
|
221
|
+
end
|
222
|
+
end
|
223
|
+
|
216
224
|
end # module Error
|
217
225
|
|
218
226
|
end # module Stomp
|
data/lib/stomp/version.rb
CHANGED
data/spec/client_spec.rb
CHANGED
@@ -7,8 +7,8 @@ require 'client_shared_examples'
|
|
7
7
|
describe Stomp::Client do
|
8
8
|
|
9
9
|
before(:each) do
|
10
|
-
@mock_connection =
|
11
|
-
Stomp::Connection.stub
|
10
|
+
@mock_connection = double('connection', :autoflush= => true)
|
11
|
+
Stomp::Connection.stub(:new).and_return(@mock_connection)
|
12
12
|
end
|
13
13
|
|
14
14
|
describe "(created with no params)" do
|
@@ -33,6 +33,29 @@ describe Stomp::Client do
|
|
33
33
|
|
34
34
|
end
|
35
35
|
|
36
|
+
describe 'delegated params' do
|
37
|
+
before :each do
|
38
|
+
@mock_connection = double('connection', :autoflush= => true,
|
39
|
+
:login => 'dummy login',
|
40
|
+
:passcode => 'dummy passcode',
|
41
|
+
:port => 12345,
|
42
|
+
:host => 'dummy host',
|
43
|
+
:ssl => 'dummy ssl')
|
44
|
+
Stomp::Connection.stub(:new).and_return(@mock_connection)
|
45
|
+
@client = Stomp::Client.new
|
46
|
+
end
|
47
|
+
|
48
|
+
describe 'it should delegate parameters to its connection' do
|
49
|
+
subject { @client }
|
50
|
+
|
51
|
+
its(:login) { should eql 'dummy login' }
|
52
|
+
its(:passcode) { should eql 'dummy passcode' }
|
53
|
+
its(:port) { should eql 12345 }
|
54
|
+
its(:host) { should eql 'dummy host' }
|
55
|
+
its(:ssl) { should eql 'dummy ssl' }
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
36
59
|
describe "(autoflush)" do
|
37
60
|
it "should delegate to the connection for accessing the autoflush property" do
|
38
61
|
@mock_connection.should_receive(:autoflush)
|
@@ -98,17 +121,17 @@ describe Stomp::Client do
|
|
98
121
|
|
99
122
|
|
100
123
|
describe "(created with positional params)" do
|
101
|
-
|
102
124
|
before(:each) do
|
103
125
|
@client = Stomp::Client.new('testlogin', 'testpassword', 'localhost', '12345', false)
|
104
126
|
end
|
105
127
|
|
106
128
|
it "should properly parse the URL provided" do
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
129
|
+
Stomp::Connection.should_receive(:new).with(:hosts => [{:login => 'testlogin',
|
130
|
+
:passcode => 'testpassword',
|
131
|
+
:host => 'localhost',
|
132
|
+
:port => 12345}],
|
133
|
+
:reliable => false)
|
134
|
+
Stomp::Client.new('testlogin', 'testpassword', 'localhost', '12345', false)
|
112
135
|
end
|
113
136
|
|
114
137
|
it_should_behave_like "standard Client"
|
@@ -122,11 +145,12 @@ describe Stomp::Client do
|
|
122
145
|
end
|
123
146
|
|
124
147
|
it "should properly parse the URL provided" do
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
148
|
+
Stomp::Connection.should_receive(:new).with(:hosts => [{:login => '',
|
149
|
+
:passcode => '',
|
150
|
+
:host => 'foobar',
|
151
|
+
:port => 12345}],
|
152
|
+
:reliable => false)
|
153
|
+
Stomp::Client.new('stomp://foobar:12345')
|
130
154
|
end
|
131
155
|
|
132
156
|
it_should_behave_like "standard Client"
|
@@ -140,11 +164,12 @@ describe Stomp::Client do
|
|
140
164
|
end
|
141
165
|
|
142
166
|
it "should properly parse the URL provided" do
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
167
|
+
Stomp::Connection.should_receive(:new).with(:hosts => [{:login => '',
|
168
|
+
:passcode => '',
|
169
|
+
:host => 'foo-bar',
|
170
|
+
:port => 12345}],
|
171
|
+
:reliable => false)
|
172
|
+
Stomp::Client.new('stomp://foo-bar:12345')
|
148
173
|
end
|
149
174
|
|
150
175
|
it_should_behave_like "standard Client"
|
@@ -158,11 +183,12 @@ describe Stomp::Client do
|
|
158
183
|
end
|
159
184
|
|
160
185
|
it "should properly parse the URL provided" do
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
186
|
+
Stomp::Connection.should_receive(:new).with(:hosts => [{:login => 'test-login',
|
187
|
+
:passcode => 'testpasscode',
|
188
|
+
:host => 'foobar',
|
189
|
+
:port => 12345}],
|
190
|
+
:reliable => false)
|
191
|
+
Stomp::Client.new('stomp://test-login:testpasscode@foobar:12345')
|
166
192
|
end
|
167
193
|
|
168
194
|
it_should_behave_like "standard Client"
|
@@ -176,11 +202,12 @@ describe Stomp::Client do
|
|
176
202
|
end
|
177
203
|
|
178
204
|
it "should properly parse the URL provided" do
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
205
|
+
Stomp::Connection.should_receive(:new).with(:hosts => [{:login => 'test-login',
|
206
|
+
:passcode => 'testpasscode',
|
207
|
+
:host => 'foo-bar',
|
208
|
+
:port => 12345}],
|
209
|
+
:reliable => false)
|
210
|
+
Stomp::Client.new('stomp://test-login:testpasscode@foo-bar:12345')
|
184
211
|
end
|
185
212
|
|
186
213
|
it_should_behave_like "standard Client"
|
@@ -197,11 +224,12 @@ describe Stomp::Client do
|
|
197
224
|
end
|
198
225
|
|
199
226
|
it "should properly parse the URL provided" do
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
227
|
+
Stomp::Connection.should_receive(:new).with(:hosts => [{:login => '',
|
228
|
+
:passcode => '',
|
229
|
+
:host => 'host.foobar.com',
|
230
|
+
:port => 12345}],
|
231
|
+
:reliable => false)
|
232
|
+
Stomp::Client.new('stomp://host.foobar.com:12345')
|
205
233
|
end
|
206
234
|
|
207
235
|
it_should_behave_like "standard Client"
|
@@ -215,11 +243,12 @@ describe Stomp::Client do
|
|
215
243
|
end
|
216
244
|
|
217
245
|
it "should properly parse the URL provided" do
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
246
|
+
Stomp::Connection.should_receive(:new).with(:hosts => [{:login => 'testlogin',
|
247
|
+
:passcode => 'testpasscode',
|
248
|
+
:host => 'host.foobar.com',
|
249
|
+
:port => 12345}],
|
250
|
+
:reliable => false)
|
251
|
+
Stomp::Client.new('stomp://testlogin:testpasscode@host.foobar.com:12345')
|
223
252
|
end
|
224
253
|
|
225
254
|
it_should_behave_like "standard Client"
|
@@ -236,7 +265,8 @@ describe Stomp::Client do
|
|
236
265
|
:back_off_multiplier => 2,
|
237
266
|
:max_reconnect_attempts => 0,
|
238
267
|
:randomize => false,
|
239
|
-
:connect_timeout => 0
|
268
|
+
:connect_timeout => 0,
|
269
|
+
:reliable => true
|
240
270
|
}
|
241
271
|
end
|
242
272
|
it "should properly parse a URL with failover://" do
|
@@ -303,14 +333,15 @@ describe Stomp::Client do
|
|
303
333
|
url = "failover:(stomp://login1:passcode1@localhost:61616,stomp://login2:passcode2@remotehost:61617)?#{query}"
|
304
334
|
|
305
335
|
#
|
306
|
-
@parameters = {
|
336
|
+
@parameters = {
|
307
337
|
:initial_reconnect_delay => 5.0,
|
308
338
|
:max_reconnect_delay => 60.0,
|
309
339
|
:use_exponential_back_off => false,
|
310
340
|
:back_off_multiplier => 3,
|
311
341
|
:max_reconnect_attempts => 4,
|
312
342
|
:randomize => true,
|
313
|
-
:connect_timeout => 0
|
343
|
+
:connect_timeout => 0,
|
344
|
+
:reliable => true
|
314
345
|
}
|
315
346
|
|
316
347
|
@parameters[:hosts] = [
|
data/spec/connection_spec.rb
CHANGED
@@ -28,11 +28,12 @@ describe Stomp::Connection do
|
|
28
28
|
:max_hbread_fails => 0,
|
29
29
|
:max_hbrlck_fails => 0,
|
30
30
|
:fast_hbs_adjust => 0.0,
|
31
|
+
:connread_timeout => 0,
|
31
32
|
}
|
32
33
|
|
33
34
|
#POG:
|
34
35
|
class Stomp::Connection
|
35
|
-
def _receive( s )
|
36
|
+
def _receive( s, connread = false )
|
36
37
|
end
|
37
38
|
end
|
38
39
|
|
@@ -96,6 +97,7 @@ describe Stomp::Connection do
|
|
96
97
|
:maxHbreadFails => 0,
|
97
98
|
:maxHbrlckFails => 0,
|
98
99
|
:fastHbsAdjust => 0.0,
|
100
|
+
:connreadTimeout => 0,
|
99
101
|
}
|
100
102
|
|
101
103
|
@connection = Stomp::Connection.new(used_hash)
|
@@ -350,6 +352,7 @@ describe Stomp::Connection do
|
|
350
352
|
:max_hbread_fails => 0,
|
351
353
|
:max_hbrlck_fails => 0,
|
352
354
|
:fast_hbs_adjust => 0.0,
|
355
|
+
:connread_timeout => 0,
|
353
356
|
}
|
354
357
|
|
355
358
|
used_hash = {
|
@@ -389,6 +392,7 @@ describe Stomp::Connection do
|
|
389
392
|
:max_hbread_fails => 123,
|
390
393
|
:max_hbrlck_fails => 456,
|
391
394
|
:fast_hbs_adjust => 0.2,
|
395
|
+
:connread_timeout => 42,
|
392
396
|
}
|
393
397
|
|
394
398
|
@connection = Stomp::Connection.new(used_hash)
|
@@ -438,7 +442,6 @@ describe Stomp::Connection do
|
|
438
442
|
@connection.instance_variable_set(:@connection_attempts, limit)
|
439
443
|
@connection.send(:max_reconnect_attempts?).should be_true
|
440
444
|
end
|
441
|
-
|
442
445
|
# These should be raised for the user to deal with
|
443
446
|
it "should not rescue MaxReconnectAttempts" do
|
444
447
|
@connection = Stomp::Connection.new(@parameters)
|
data/stomp.gemspec
CHANGED
@@ -5,7 +5,8 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{stomp}
|
8
|
-
s.version = "1.2.
|
8
|
+
s.version = "1.2.16"
|
9
|
+
s.license = "Apache 2.0"
|
9
10
|
|
10
11
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
12
|
s.authors = ["Brian McCallister", "Marius Mathiesen", "Thiago Morello", "Guy M. Allard"]
|
metadata
CHANGED
@@ -1,8 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: stomp
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.2.
|
5
|
-
prerelease:
|
4
|
+
version: 1.2.16
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Brian McCallister
|
@@ -17,7 +16,6 @@ dependencies:
|
|
17
16
|
- !ruby/object:Gem::Dependency
|
18
17
|
name: rspec
|
19
18
|
requirement: !ruby/object:Gem::Requirement
|
20
|
-
none: false
|
21
19
|
requirements:
|
22
20
|
- - ! '>='
|
23
21
|
- !ruby/object:Gem::Version
|
@@ -25,7 +23,6 @@ dependencies:
|
|
25
23
|
type: :development
|
26
24
|
prerelease: false
|
27
25
|
version_requirements: !ruby/object:Gem::Requirement
|
28
|
-
none: false
|
29
26
|
requirements:
|
30
27
|
- - ! '>='
|
31
28
|
- !ruby/object:Gem::Version
|
@@ -160,26 +157,26 @@ files:
|
|
160
157
|
- test/test_urlogin.rb
|
161
158
|
- test/tlogger.rb
|
162
159
|
homepage: https://github.com/stompgem/stomp
|
163
|
-
licenses:
|
160
|
+
licenses:
|
161
|
+
- Apache 2.0
|
162
|
+
metadata: {}
|
164
163
|
post_install_message:
|
165
164
|
rdoc_options: []
|
166
165
|
require_paths:
|
167
166
|
- lib
|
168
167
|
required_ruby_version: !ruby/object:Gem::Requirement
|
169
|
-
none: false
|
170
168
|
requirements:
|
171
169
|
- - ! '>='
|
172
170
|
- !ruby/object:Gem::Version
|
173
171
|
version: '0'
|
174
172
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
175
|
-
none: false
|
176
173
|
requirements:
|
177
174
|
- - ! '>='
|
178
175
|
- !ruby/object:Gem::Version
|
179
176
|
version: '0'
|
180
177
|
requirements: []
|
181
178
|
rubyforge_project:
|
182
|
-
rubygems_version:
|
179
|
+
rubygems_version: 2.0.5
|
183
180
|
signing_key:
|
184
181
|
specification_version: 3
|
185
182
|
summary: Ruby client for the Stomp messaging protocol
|