stomp 1.4.1 → 1.4.2
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/CHANGELOG.md +14 -0
- data/Gemfile +5 -0
- data/README.md +58 -2
- data/examples/ssl_common.rb +73 -0
- data/examples/ssl_uc1.rb +9 -3
- data/examples/ssl_uc1_ciphers.rb +11 -4
- data/examples/ssl_uc2.rb +10 -6
- data/examples/ssl_uc2_ciphers.rb +13 -6
- data/examples/ssl_uc3.rb +17 -6
- data/examples/ssl_uc3_ciphers.rb +22 -11
- data/examples/ssl_uc4.rb +18 -7
- data/examples/ssl_uc4_ciphers.rb +23 -13
- data/lib/client/utils.rb +11 -5
- data/lib/stomp/client.rb +6 -5
- data/lib/stomp/connection.rb +44 -17
- data/lib/stomp/version.rb +4 -3
- data/spec/client_spec.rb +148 -0
- data/stomp.gemspec +27 -11
- data/test/funcs.sh +2 -0
- data/test/test_urlogin.rb +1 -1
- data/test/unitst.sh +18 -0
- metadata +119 -32
- checksums.yaml +0 -7
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,19 @@
|
|
1
1
|
# Stomp Gem Change Log
|
2
2
|
|
3
|
+
## 1.4.2 20160820
|
4
|
+
|
5
|
+
* Refine SSL examples.
|
6
|
+
* Address issue #124 with additional RDOC.
|
7
|
+
* spec for Stomp::Client - check that headers passed to connection contain
|
8
|
+
required values as well as given custom and that given hash is not modified.
|
9
|
+
* Stomp::Client now does not modify given headers hash
|
10
|
+
* spec description enhancement.
|
11
|
+
* fix build_subscription_id - symbol and string were mixed up.
|
12
|
+
* STOMP_TESTSSL flag should enable all SSL tests.
|
13
|
+
* Add a basic Gemfile.
|
14
|
+
* Fix a memory leak in receipt implementation.
|
15
|
+
* Add unit test helper script.
|
16
|
+
|
3
17
|
## 1.4.1 20160623
|
4
18
|
|
5
19
|
* Add call to #post_connection_check to normal SSL processing. This change
|
data/Gemfile
ADDED
data/README.md
CHANGED
@@ -93,6 +93,7 @@ A Stomp URL must begin with 'stomp://' and can be in one of the following forms:
|
|
93
93
|
|
94
94
|
See _CHANGELOG.rdoc_ for details.
|
95
95
|
|
96
|
+
* Gem version 1.4.2. Fix memory leak, and others !: see CHANGELOG.md for details.
|
96
97
|
* Gem version 1.4.1. Important SSL changes !: see CHANGELOG.md for details.
|
97
98
|
* Gem version 1.4.0. Note: Change sementics of :parse_timeout, see CHANGELOG.md for details.
|
98
99
|
* Gem version 1.3.5. Miscellaneous fixes, see CHANGELOG.rdoc for details.
|
@@ -291,7 +292,7 @@ Thiago Morello
|
|
291
292
|
2009-12-25
|
292
293
|
</td>
|
293
294
|
<td style="border: 1px solid black;padding-left: 10px;" >
|
294
|
-
(
|
295
|
+
(0369)
|
295
296
|
</td>
|
296
297
|
<td style="border: 1px solid black;padding-left: 10px;" >
|
297
298
|
<span style="font-weight: bold;" >
|
@@ -706,5 +707,60 @@ Wayne Robinson
|
|
706
707
|
/ wayne.robinson@gmail.com
|
707
708
|
</td>
|
708
709
|
</tr>
|
710
|
+
<tr>
|
711
|
+
<td style="border: 1px solid black;padding-left: 10px;" >
|
712
|
+
2016-07-12
|
713
|
+
</td>
|
714
|
+
<td style="border: 1px solid black;padding-left: 10px;" >
|
715
|
+
(0006)
|
716
|
+
</td>
|
717
|
+
<td style="border: 1px solid black;padding-left: 10px;" >
|
718
|
+
<span style="font-weight: bold;" >
|
719
|
+
Nikolay Khasanov
|
720
|
+
</span>
|
721
|
+
/ nkhasanov@groupon.com
|
722
|
+
</td>
|
723
|
+
</tr>
|
724
|
+
<tr>
|
725
|
+
<td style="border: 1px solid black;padding-left: 10px;" >
|
726
|
+
2016-07-16
|
727
|
+
</td>
|
728
|
+
<td style="border: 1px solid black;padding-left: 10px;" >
|
729
|
+
(0004)
|
730
|
+
</td>
|
731
|
+
<td style="border: 1px solid black;padding-left: 10px;" >
|
732
|
+
<span style="font-weight: bold;" >
|
733
|
+
GitHub
|
734
|
+
</span>
|
735
|
+
/ noreply@github.com
|
736
|
+
</td>
|
737
|
+
</tr>
|
738
|
+
<tr>
|
739
|
+
<td style="border: 1px solid black;padding-left: 10px;" >
|
740
|
+
2016-06-02
|
741
|
+
</td>
|
742
|
+
<td style="border: 1px solid black;padding-left: 10px;" >
|
743
|
+
(0001)
|
744
|
+
</td>
|
745
|
+
<td style="border: 1px solid black;padding-left: 10px;" >
|
746
|
+
<span style="font-weight: bold;" >
|
747
|
+
Ryan Rosenblum
|
748
|
+
</span>
|
749
|
+
/ ryan.rosenblum@gmail.com
|
750
|
+
</td>
|
751
|
+
</tr>
|
752
|
+
<tr>
|
753
|
+
<td style="border: 1px solid black;padding-left: 10px;" >
|
754
|
+
2016-08-17
|
755
|
+
</td>
|
756
|
+
<td style="border: 1px solid black;padding-left: 10px;" >
|
757
|
+
(0002)
|
758
|
+
</td>
|
759
|
+
<td style="border: 1px solid black;padding-left: 10px;" >
|
760
|
+
<span style="font-weight: bold;" >
|
761
|
+
Alexandre Moutot
|
762
|
+
</span>
|
763
|
+
/ a.moutot@alphalink.fr
|
764
|
+
</td>
|
765
|
+
</tr>
|
709
766
|
</table>
|
710
|
-
|
@@ -0,0 +1,73 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
#
|
4
|
+
# Common Stomp 1.1 code.
|
5
|
+
#
|
6
|
+
require "rubygems" if RUBY_VERSION < "1.9"
|
7
|
+
require "stomp"
|
8
|
+
#
|
9
|
+
module SSLCommon
|
10
|
+
|
11
|
+
# CA Data.
|
12
|
+
|
13
|
+
# CA file location/directory. Change or specify.
|
14
|
+
# This is the author's default.
|
15
|
+
def ca_loc()
|
16
|
+
ENV['CA_FLOC'] || "/ad3/gma/sslwork/2013-extended-02" # The CA cert location
|
17
|
+
end
|
18
|
+
# CA file. Change or specify.
|
19
|
+
# This is the author's default.
|
20
|
+
def ca_cert()
|
21
|
+
ENV['CA_FILE'] || "TestCA.crt" # The CA cert File
|
22
|
+
end
|
23
|
+
# CA private key file. Change or specify.
|
24
|
+
# This is the author's default.
|
25
|
+
# This file should not be exposed to the outside world.
|
26
|
+
# Not currently used in stomp examples.
|
27
|
+
def ca_key()
|
28
|
+
ENV['CA_KEY'] || nil # The CA private key File
|
29
|
+
end
|
30
|
+
|
31
|
+
# Client Data.
|
32
|
+
|
33
|
+
# Client file location/directory. Change or specify.
|
34
|
+
# This is the author's default.
|
35
|
+
def cli_loc()
|
36
|
+
ENV['CLI_FLOC'] || "/ad3/gma/sslwork/2013-extended-02" # The client cert location
|
37
|
+
end
|
38
|
+
# Client cert file. Change or specify.
|
39
|
+
# This is the author's default.
|
40
|
+
def cli_cert()
|
41
|
+
ENV['CLI_FILE'] || "client.crt" # The client cert File
|
42
|
+
end
|
43
|
+
# Client private keyfile. Change or specify.
|
44
|
+
# This is the author's default.
|
45
|
+
# This file should not be exposed to the outside world.
|
46
|
+
def cli_key()
|
47
|
+
ENV['CLI_KEY'] || nil # The client private key File
|
48
|
+
end
|
49
|
+
|
50
|
+
# Server Data.
|
51
|
+
|
52
|
+
# Server file location/directory. Change or specify.
|
53
|
+
# This is the author's default.
|
54
|
+
# Not currently used in stomp examples.
|
55
|
+
def svr_loc()
|
56
|
+
ENV['SVR_FLOC'] || "/ad3/gma/sslwork/2013-extended-02" # The server cert location
|
57
|
+
end
|
58
|
+
# Server cert file. Change or specify.
|
59
|
+
# This is the author's default.
|
60
|
+
# Not currently used in stomp examples.
|
61
|
+
def svr_cert()
|
62
|
+
ENV['SVR_FILE'] || "server.crt" # The server cert File
|
63
|
+
end
|
64
|
+
# Server private keyfile. Change or specify.
|
65
|
+
# This is the author's default.
|
66
|
+
# This file should not be exposed to the outside world.
|
67
|
+
# Not currently used in stomp examples.
|
68
|
+
def svr_key()
|
69
|
+
ENV['SVR_KEY'] || nil # The server private key File
|
70
|
+
end
|
71
|
+
|
72
|
+
end
|
73
|
+
|
data/examples/ssl_uc1.rb
CHANGED
@@ -3,8 +3,14 @@
|
|
3
3
|
#
|
4
4
|
# Reference: https://github.com/stompgem/stomp/wiki/extended-ssl-overview
|
5
5
|
#
|
6
|
-
|
7
|
-
|
6
|
+
#
|
7
|
+
if Kernel.respond_to?(:require_relative)
|
8
|
+
require_relative("./ssl_common")
|
9
|
+
else
|
10
|
+
$LOAD_PATH << File.dirname(__FILE__)
|
11
|
+
require "ssl_common"
|
12
|
+
end
|
13
|
+
include SSLCommon
|
8
14
|
#
|
9
15
|
# == SSL Use Case 1 - server does *not* authenticate client, client does *not* authenticate server
|
10
16
|
#
|
@@ -20,7 +26,7 @@ require "stomp"
|
|
20
26
|
#
|
21
27
|
class ExampleSSL1
|
22
28
|
# Initialize.
|
23
|
-
def initialize
|
29
|
+
def initialize # Change the following as needed.
|
24
30
|
@host = ENV['STOMP_HOST'] ? ENV['STOMP_HOST'] : "localhost"
|
25
31
|
@port = ENV['STOMP_PORT'] ? ENV['STOMP_PORT'].to_i : 61612
|
26
32
|
end
|
data/examples/ssl_uc1_ciphers.rb
CHANGED
@@ -3,8 +3,13 @@
|
|
3
3
|
#
|
4
4
|
# Reference: https://github.com/stompgem/stomp/wiki/extended-ssl-overview
|
5
5
|
#
|
6
|
-
|
7
|
-
|
6
|
+
if Kernel.respond_to?(:require_relative)
|
7
|
+
require_relative("./ssl_common")
|
8
|
+
else
|
9
|
+
$LOAD_PATH << File.dirname(__FILE__)
|
10
|
+
require "ssl_common"
|
11
|
+
end
|
12
|
+
include SSLCommon
|
8
13
|
#
|
9
14
|
# == SSL Use Case 1 - User Supplied Ciphers
|
10
15
|
#
|
@@ -15,7 +20,9 @@ require "stomp"
|
|
15
20
|
#
|
16
21
|
class ExampleSSL1C
|
17
22
|
# Initialize.
|
18
|
-
def initialize
|
23
|
+
def initialize # Change the following as needed.
|
24
|
+
@host = ENV['STOMP_HOST'] ? ENV['STOMP_HOST'] : "localhost"
|
25
|
+
@port = ENV['STOMP_PORT'] ? ENV['STOMP_PORT'].to_i : 61612
|
19
26
|
end
|
20
27
|
# Run example.
|
21
28
|
def run
|
@@ -27,7 +34,7 @@ class ExampleSSL1C
|
|
27
34
|
# SSL Use Case 1
|
28
35
|
#
|
29
36
|
hash = { :hosts => [
|
30
|
-
{:login => 'guest', :passcode => 'guest', :host =>
|
37
|
+
{:login => 'guest', :passcode => 'guest', :host => @host, :port => @port, :ssl => ssl_opts},
|
31
38
|
],
|
32
39
|
:reliable => false, # YMMV, to test this in a sane manner
|
33
40
|
}
|
data/examples/ssl_uc2.rb
CHANGED
@@ -3,8 +3,13 @@
|
|
3
3
|
#
|
4
4
|
# Reference: https://github.com/stompgem/stomp/wiki/extended-ssl-overview
|
5
5
|
#
|
6
|
-
|
7
|
-
|
6
|
+
if Kernel.respond_to?(:require_relative)
|
7
|
+
require_relative("./ssl_common")
|
8
|
+
else
|
9
|
+
$LOAD_PATH << File.dirname(__FILE__)
|
10
|
+
require "ssl_common"
|
11
|
+
end
|
12
|
+
include SSLCommon
|
8
13
|
#
|
9
14
|
# == SSL Use Case 2 - server does *not* authenticate client, client *does* authenticate server
|
10
15
|
#
|
@@ -21,8 +26,7 @@ require "stomp"
|
|
21
26
|
class ExampleSSL2
|
22
27
|
# Initialize.
|
23
28
|
def initialize
|
24
|
-
# Change the following
|
25
|
-
@cert_loc = "/ad3/gma/sslwork/2013"
|
29
|
+
# Change the following as needed.
|
26
30
|
@host = ENV['STOMP_HOST'] ? ENV['STOMP_HOST'] : "localhost"
|
27
31
|
@port = ENV['STOMP_PORT'] ? ENV['STOMP_PORT'].to_i : 61612
|
28
32
|
end
|
@@ -32,8 +36,8 @@ class ExampleSSL2
|
|
32
36
|
|
33
37
|
ts_flist = []
|
34
38
|
|
35
|
-
# Possibly change the cert
|
36
|
-
ts_flist << "#{
|
39
|
+
# Possibly change/override the cert data here.
|
40
|
+
ts_flist << "#{ca_loc()}/#{ca_cert()}"
|
37
41
|
|
38
42
|
ssl_opts = Stomp::SSLParams.new(:ts_files => ts_flist.join(","),
|
39
43
|
:fsck => true)
|
data/examples/ssl_uc2_ciphers.rb
CHANGED
@@ -3,8 +3,13 @@
|
|
3
3
|
#
|
4
4
|
# Reference: https://github.com/stompgem/stomp/wiki/extended-ssl-overview
|
5
5
|
#
|
6
|
-
|
7
|
-
|
6
|
+
if Kernel.respond_to?(:require_relative)
|
7
|
+
require_relative("./ssl_common")
|
8
|
+
else
|
9
|
+
$LOAD_PATH << File.dirname(__FILE__)
|
10
|
+
require "ssl_common"
|
11
|
+
end
|
12
|
+
include SSLCommon
|
8
13
|
#
|
9
14
|
# == SSL Use Case 2 - User Supplied Ciphers
|
10
15
|
#
|
@@ -15,7 +20,9 @@ require "stomp"
|
|
15
20
|
#
|
16
21
|
class ExampleSSL2C
|
17
22
|
# Initialize.
|
18
|
-
def initialize
|
23
|
+
def initialize # Change the following as needed.
|
24
|
+
@host = ENV['STOMP_HOST'] ? ENV['STOMP_HOST'] : "localhost"
|
25
|
+
@port = ENV['STOMP_PORT'] ? ENV['STOMP_PORT'].to_i : 61612
|
19
26
|
end
|
20
27
|
# Run example.
|
21
28
|
def run
|
@@ -25,8 +32,8 @@ class ExampleSSL2C
|
|
25
32
|
#
|
26
33
|
ts_flist = []
|
27
34
|
|
28
|
-
#
|
29
|
-
ts_flist << "
|
35
|
+
# Possibly change/override the cert data here.
|
36
|
+
ts_flist << "#{ca_loc()}/#{ca_cert()}"
|
30
37
|
|
31
38
|
ssl_opts = Stomp::SSLParams.new(:ts_files => ts_flist.join(","),
|
32
39
|
:ciphers => ciphers_list,
|
@@ -34,7 +41,7 @@ class ExampleSSL2C
|
|
34
41
|
)
|
35
42
|
#
|
36
43
|
hash = { :hosts => [
|
37
|
-
{:login => 'guest', :passcode => 'guest', :host =>
|
44
|
+
{:login => 'guest', :passcode => 'guest', :host => @host, :port => @port, :ssl => ssl_opts},
|
38
45
|
],
|
39
46
|
:reliable => false, # YMMV, to test this in a sane manner
|
40
47
|
}
|
data/examples/ssl_uc3.rb
CHANGED
@@ -3,8 +3,13 @@
|
|
3
3
|
#
|
4
4
|
# Reference: https://github.com/stompgem/stomp/wiki/extended-ssl-overview
|
5
5
|
#
|
6
|
-
|
7
|
-
|
6
|
+
if Kernel.respond_to?(:require_relative)
|
7
|
+
require_relative("./ssl_common")
|
8
|
+
else
|
9
|
+
$LOAD_PATH << File.dirname(__FILE__)
|
10
|
+
require "ssl_common"
|
11
|
+
end
|
12
|
+
include SSLCommon
|
8
13
|
#
|
9
14
|
# == SSL Use Case 3 - server *does* authenticate client, client does *not* authenticate server
|
10
15
|
#
|
@@ -23,8 +28,7 @@ require "stomp"
|
|
23
28
|
class ExampleSSL3
|
24
29
|
# Initialize.
|
25
30
|
def initialize
|
26
|
-
# Change the following
|
27
|
-
@cert_loc = "/ad3/gma/sslwork/2013"
|
31
|
+
# Change the following as needed.
|
28
32
|
@host = ENV['STOMP_HOST'] ? ENV['STOMP_HOST'] : "localhost"
|
29
33
|
@port = ENV['STOMP_PORT'] ? ENV['STOMP_PORT'].to_i : 61612
|
30
34
|
end
|
@@ -34,8 +38,8 @@ class ExampleSSL3
|
|
34
38
|
|
35
39
|
# Possibly change the cert file(s) name(s) here.
|
36
40
|
ssl_opts = Stomp::SSLParams.new(
|
37
|
-
:key_file => "#{
|
38
|
-
:cert_file => "#{
|
41
|
+
:key_file => "#{cli_loc()}/#{pck()}", # the client's private key, private data
|
42
|
+
:cert_file => "#{cli_loc()}/#{cli_cert()}", # the client's signed certificate
|
39
43
|
:fsck => true # Check that the files exist first
|
40
44
|
)
|
41
45
|
|
@@ -53,6 +57,13 @@ class ExampleSSL3
|
|
53
57
|
# puts "SSL Peer Certificate:\n#{ssl_opts.peer_cert}"
|
54
58
|
c.disconnect
|
55
59
|
end
|
60
|
+
|
61
|
+
private
|
62
|
+
|
63
|
+
def pck()
|
64
|
+
"client.key"
|
65
|
+
end
|
66
|
+
|
56
67
|
end
|
57
68
|
#
|
58
69
|
e = ExampleSSL3.new
|
data/examples/ssl_uc3_ciphers.rb
CHANGED
@@ -3,8 +3,13 @@
|
|
3
3
|
#
|
4
4
|
# Reference: https://github.com/stompgem/stomp/wiki/extended-ssl-overview
|
5
5
|
#
|
6
|
-
|
7
|
-
|
6
|
+
if Kernel.respond_to?(:require_relative)
|
7
|
+
require_relative("./ssl_common")
|
8
|
+
else
|
9
|
+
$LOAD_PATH << File.dirname(__FILE__)
|
10
|
+
require "ssl_common"
|
11
|
+
end
|
12
|
+
include SSLCommon
|
8
13
|
#
|
9
14
|
# == SSL Use Case 3 - User Supplied Ciphers
|
10
15
|
#
|
@@ -15,7 +20,9 @@ require "stomp"
|
|
15
20
|
#
|
16
21
|
class ExampleSSL3C
|
17
22
|
# Initialize.
|
18
|
-
def initialize
|
23
|
+
def initialize # Change the following as needed.
|
24
|
+
@host = ENV['STOMP_HOST'] ? ENV['STOMP_HOST'] : "localhost"
|
25
|
+
@port = ENV['STOMP_PORT'] ? ENV['STOMP_PORT'].to_i : 61612
|
19
26
|
end
|
20
27
|
# Run example.
|
21
28
|
def run
|
@@ -23,18 +30,15 @@ class ExampleSSL3C
|
|
23
30
|
#
|
24
31
|
# SSL Use Case 3
|
25
32
|
#
|
26
|
-
#
|
27
|
-
# * location of your client's signed certificate
|
28
|
-
# * location of tour client's private key.
|
33
|
+
# Possibly change the cert file(s) name(s) here.
|
29
34
|
ssl_opts = Stomp::SSLParams.new(
|
30
|
-
:key_file => "
|
31
|
-
:cert_file => "
|
32
|
-
:fsck => true
|
33
|
-
:ciphers => ciphers_list
|
35
|
+
:key_file => "#{cli_loc()}/#{pck()}", # the client's private key, private data
|
36
|
+
:cert_file => "#{cli_loc()}/#{cli_cert()}", # the client's signed certificate
|
37
|
+
:fsck => true # Check that the files exist first
|
34
38
|
)
|
35
39
|
#
|
36
40
|
hash = { :hosts => [
|
37
|
-
{:login => 'guest', :passcode => 'guest', :host =>
|
41
|
+
{:login => 'guest', :passcode => 'guest', :host => @host, :port => @port, :ssl => ssl_opts},
|
38
42
|
],
|
39
43
|
:reliable => false, # YMMV, to test this in a sane manner
|
40
44
|
}
|
@@ -46,6 +50,13 @@ class ExampleSSL3C
|
|
46
50
|
# puts "SSL Peer Certificate:\n#{ssl_opts.peer_cert}"
|
47
51
|
c.disconnect
|
48
52
|
end
|
53
|
+
|
54
|
+
private
|
55
|
+
|
56
|
+
def pck()
|
57
|
+
"client.key"
|
58
|
+
end
|
59
|
+
|
49
60
|
end
|
50
61
|
#
|
51
62
|
e = ExampleSSL3C.new
|
data/examples/ssl_uc4.rb
CHANGED
@@ -3,8 +3,13 @@
|
|
3
3
|
#
|
4
4
|
# Reference: https://github.com/stompgem/stomp/wiki/extended-ssl-overview
|
5
5
|
#
|
6
|
-
|
7
|
-
|
6
|
+
if Kernel.respond_to?(:require_relative)
|
7
|
+
require_relative("./ssl_common")
|
8
|
+
else
|
9
|
+
$LOAD_PATH << File.dirname(__FILE__)
|
10
|
+
require "ssl_common"
|
11
|
+
end
|
12
|
+
include SSLCommon
|
8
13
|
#
|
9
14
|
# == SSL Use Case 4 - server *does* authenticate client, client *does* authenticate server
|
10
15
|
#
|
@@ -23,8 +28,7 @@ require "stomp"
|
|
23
28
|
class ExampleSSL4
|
24
29
|
# Initialize.
|
25
30
|
def initialize
|
26
|
-
# Change the following
|
27
|
-
@cert_loc = "/ad3/gma/sslwork/2013"
|
31
|
+
# Change the following as needed.
|
28
32
|
@host = ENV['STOMP_HOST'] ? ENV['STOMP_HOST'] : "localhost"
|
29
33
|
@port = ENV['STOMP_PORT'] ? ENV['STOMP_PORT'].to_i : 61612
|
30
34
|
end
|
@@ -34,9 +38,9 @@ class ExampleSSL4
|
|
34
38
|
|
35
39
|
# Possibly change the cert file(s) name(s) here.
|
36
40
|
ssl_opts = Stomp::SSLParams.new(
|
37
|
-
:key_file => "#{
|
38
|
-
:cert_file => "#{
|
39
|
-
:ts_files => "#{
|
41
|
+
:key_file => "#{cli_loc()}/#{pck()}", # the client's private key, private data
|
42
|
+
:cert_file => "#{cli_loc()}/#{cli_cert()}", # the client's signed certificate
|
43
|
+
:ts_files => "#{ca_loc()}/#{ca_cert()}", # The CA's signed sertificate
|
40
44
|
:fsck => true # Check that files exist first
|
41
45
|
)
|
42
46
|
#
|
@@ -53,6 +57,13 @@ class ExampleSSL4
|
|
53
57
|
# puts "SSL Peer Certificate:\n#{ssl_opts.peer_cert}"
|
54
58
|
c.disconnect
|
55
59
|
end
|
60
|
+
|
61
|
+
private
|
62
|
+
|
63
|
+
def pck()
|
64
|
+
"client.key"
|
65
|
+
end
|
66
|
+
|
56
67
|
end
|
57
68
|
#
|
58
69
|
e = ExampleSSL4.new
|
data/examples/ssl_uc4_ciphers.rb
CHANGED
@@ -3,8 +3,13 @@
|
|
3
3
|
#
|
4
4
|
# Reference: https://github.com/stompgem/stomp/wiki/extended-ssl-overview
|
5
5
|
#
|
6
|
-
|
7
|
-
|
6
|
+
if Kernel.respond_to?(:require_relative)
|
7
|
+
require_relative("./ssl_common")
|
8
|
+
else
|
9
|
+
$LOAD_PATH << File.dirname(__FILE__)
|
10
|
+
require "ssl_common"
|
11
|
+
end
|
12
|
+
include SSLCommon
|
8
13
|
#
|
9
14
|
# == SSL Use Case 4 - User Supplied Ciphers
|
10
15
|
#
|
@@ -15,7 +20,9 @@ require "stomp"
|
|
15
20
|
#
|
16
21
|
class ExampleSSL4C
|
17
22
|
# Initialize.
|
18
|
-
def initialize
|
23
|
+
def initialize # Change the following as needed.
|
24
|
+
@host = ENV['STOMP_HOST'] ? ENV['STOMP_HOST'] : "localhost"
|
25
|
+
@port = ENV['STOMP_PORT'] ? ENV['STOMP_PORT'].to_i : 61612
|
19
26
|
end
|
20
27
|
# Run example.
|
21
28
|
def run
|
@@ -23,20 +30,16 @@ class ExampleSSL4C
|
|
23
30
|
#
|
24
31
|
# SSL Use Case 4
|
25
32
|
#
|
26
|
-
#
|
27
|
-
# * location of the client's private key
|
28
|
-
# * location of the client's signed certificate
|
29
|
-
# * location of the server's CA signed certificate
|
33
|
+
# Possibly change the cert file(s) name(s) here.
|
30
34
|
ssl_opts = Stomp::SSLParams.new(
|
31
|
-
:key_file => "
|
32
|
-
:cert_file => "
|
33
|
-
:ts_files => "
|
34
|
-
:fsck => true
|
35
|
-
:ciphers => ciphers_list
|
35
|
+
:key_file => "#{cli_loc()}/#{pck()}", # the client's private key, private data
|
36
|
+
:cert_file => "#{cli_loc()}/#{cli_cert()}", # the client's signed certificate
|
37
|
+
:ts_files => "#{ca_loc()}/#{ca_cert()}", # The CA's signed sertificate
|
38
|
+
:fsck => true # Check that files exist first
|
36
39
|
)
|
37
40
|
#
|
38
41
|
hash = { :hosts => [
|
39
|
-
{:login => 'guest', :passcode => 'guest', :host =>
|
42
|
+
{:login => 'guest', :passcode => 'guest', :host => @host, :port => @port, :ssl => ssl_opts},
|
40
43
|
],
|
41
44
|
:reliable => false, # YMMV, to test this in a sane manner
|
42
45
|
}
|
@@ -48,6 +51,13 @@ class ExampleSSL4C
|
|
48
51
|
# puts "SSL Peer Certificate:\n#{ssl_opts.peer_cert}"
|
49
52
|
c.disconnect
|
50
53
|
end
|
54
|
+
|
55
|
+
private
|
56
|
+
|
57
|
+
def pck()
|
58
|
+
"client.key"
|
59
|
+
end
|
60
|
+
|
51
61
|
end
|
52
62
|
#
|
53
63
|
e = ExampleSSL4C.new
|
data/lib/client/utils.rb
CHANGED
@@ -72,10 +72,13 @@ module Stomp
|
|
72
72
|
# setting an id in the SUBSCRIPTION header is described in the stomp protocol docs:
|
73
73
|
# http://stomp.github.com/
|
74
74
|
def set_subscription_id_if_missing(destination, headers)
|
75
|
-
headers[:id] =
|
76
|
-
|
77
|
-
|
78
|
-
|
75
|
+
headers[:id] = build_subscription_id(destination, headers)
|
76
|
+
end
|
77
|
+
|
78
|
+
def build_subscription_id(destination, headers)
|
79
|
+
return headers[:id] until headers[:id].nil?
|
80
|
+
return headers['id'] until headers['id'].nil?
|
81
|
+
Digest::SHA1.hexdigest(destination)
|
79
82
|
end
|
80
83
|
|
81
84
|
# Parse a stomp URL.
|
@@ -156,7 +159,10 @@ module Stomp
|
|
156
159
|
|
157
160
|
def find_receipt_listener(message)
|
158
161
|
listener = @receipt_listeners[message.headers['receipt-id']]
|
159
|
-
|
162
|
+
if listener
|
163
|
+
listener.call(message)
|
164
|
+
@receipt_listeners.delete(message.headers['receipt-id'])
|
165
|
+
end
|
160
166
|
end
|
161
167
|
|
162
168
|
def create_listener_maps
|
data/lib/stomp/client.rb
CHANGED
@@ -118,6 +118,7 @@ module Stomp
|
|
118
118
|
Stomp::Error::BrokerException.new(error)
|
119
119
|
end
|
120
120
|
|
121
|
+
@receipt_listeners.delete(error.headers['receipt-id']) if error.headers['receipt-id']
|
121
122
|
client_thread.raise exception
|
122
123
|
end
|
123
124
|
end
|
@@ -173,7 +174,7 @@ module Stomp
|
|
173
174
|
# use subscription id to correlate messages to subscription. As described in
|
174
175
|
# the SUBSCRIPTION section of the protocol: http://stomp.github.com/.
|
175
176
|
# If no subscription id is provided, generate one.
|
176
|
-
|
177
|
+
headers = headers.merge(:id => build_subscription_id(destination, headers))
|
177
178
|
if @listeners[headers[:id]]
|
178
179
|
raise "attempting to subscribe to a queue with a previous subscription"
|
179
180
|
end
|
@@ -183,7 +184,7 @@ module Stomp
|
|
183
184
|
|
184
185
|
# Unsubscribe from a subscription by name.
|
185
186
|
def unsubscribe(name, headers = {})
|
186
|
-
|
187
|
+
headers = headers.merge(:id => build_subscription_id(name, headers))
|
187
188
|
@connection.unsubscribe(name, headers)
|
188
189
|
@listeners[headers[:id]] = nil
|
189
190
|
end
|
@@ -203,7 +204,7 @@ module Stomp
|
|
203
204
|
replay_list << message
|
204
205
|
end
|
205
206
|
if block_given?
|
206
|
-
headers
|
207
|
+
headers = headers.merge(:receipt => register_receipt_listener(lambda {|r| yield r}))
|
207
208
|
end
|
208
209
|
context = ack_context_for(message, headers)
|
209
210
|
@connection.ack context[:message_id], context[:headers]
|
@@ -224,7 +225,7 @@ module Stomp
|
|
224
225
|
when Stomp::SPL_12
|
225
226
|
'ack'
|
226
227
|
when Stomp::SPL_11
|
227
|
-
headers.merge
|
228
|
+
headers = headers.merge(:subscription => message.headers['subscription'])
|
228
229
|
'message-id'
|
229
230
|
else
|
230
231
|
'message-id'
|
@@ -243,7 +244,7 @@ module Stomp
|
|
243
244
|
# Accepts a transaction header ( :transaction => 'some_transaction_id' ).
|
244
245
|
def publish(destination, message, headers = {})
|
245
246
|
if block_given?
|
246
|
-
headers
|
247
|
+
headers = headers.merge(:receipt => register_receipt_listener(lambda {|r| yield r}))
|
247
248
|
end
|
248
249
|
@connection.publish(destination, message, headers)
|
249
250
|
end
|
data/lib/stomp/connection.rb
CHANGED
@@ -225,32 +225,51 @@ module Stomp
|
|
225
225
|
end
|
226
226
|
|
227
227
|
# Acknowledge a message, used when a subscription has specified
|
228
|
-
# client acknowledgement
|
229
|
-
#
|
230
|
-
#
|
231
|
-
|
228
|
+
# client acknowledgement e.g.:
|
229
|
+
#
|
230
|
+
# connection.subscribe("/queue/a", :ack => 'client')
|
231
|
+
#
|
232
|
+
# connection.subscribe("/queue/a", :ack => 'client-individual')
|
233
|
+
#
|
234
|
+
# as appropriate for the protocol level.
|
235
|
+
#
|
236
|
+
# Accepts an optional transaction header ( :transaction => 'some_transaction_id' ).
|
237
|
+
#
|
238
|
+
# When the connection protocol level is 1.0 or 1.1 the message_or_ack_id parameter
|
239
|
+
# should match the message-id header of the MESSAGE being acknowledged e.g.:
|
240
|
+
#
|
241
|
+
# connection.ack(message.headers['message-id'])
|
242
|
+
#
|
243
|
+
# When the connection protocol level is 1.2 the message_or_ack_id parameter
|
244
|
+
# should match the ack header of the MESSAGE being acknowledged e.g.:
|
245
|
+
#
|
246
|
+
# connection.ack(message.headers['ack'])
|
247
|
+
#
|
248
|
+
# In summary, the behavior is protocol level dependent, see the specifications
|
249
|
+
# and comments in the code.
|
250
|
+
def ack(message_or_ack_id, headers = {})
|
232
251
|
raise Stomp::Error::NoCurrentConnection if @closed_check && closed?
|
233
252
|
raise Stomp::Error::ProtocolErrorEmptyHeaderKey if headers.has_key?("")
|
234
253
|
raise Stomp::Error::ProtocolErrorEmptyHeaderValue if @protocol == Stomp::SPL_10 && headers.has_value?("")
|
235
|
-
raise Stomp::Error::MessageIDRequiredError if
|
254
|
+
raise Stomp::Error::MessageIDRequiredError if message_or_ack_id.nil? || message_or_ack_id == ""
|
236
255
|
headers = headers.symbolize_keys
|
237
256
|
|
238
257
|
case @protocol
|
239
258
|
when Stomp::SPL_12
|
240
|
-
# The ACK frame MUST include an id header matching the ack header
|
259
|
+
# The ACK frame MUST include an "id" header matching the "ack" header
|
241
260
|
# of the MESSAGE being acknowledged.
|
242
|
-
headers[:id] =
|
261
|
+
headers[:id] = message_or_ack_id
|
243
262
|
when Stomp::SPL_11
|
244
|
-
# ACK has two REQUIRED headers: message-id, which MUST contain a value
|
245
|
-
# matching the message-id
|
246
|
-
# subscription, which MUST be set to match the value of
|
263
|
+
# ACK has two REQUIRED headers: "message-id", which MUST contain a value
|
264
|
+
# matching the message-id header of the MESSAGE being acknowledged and
|
265
|
+
# "subscription", which MUST be set to match the value of SUBSCRIBE's
|
247
266
|
# id header.
|
248
|
-
headers[:'message-id'] =
|
267
|
+
headers[:'message-id'] = message_or_ack_id
|
249
268
|
raise Stomp::Error::SubscriptionRequiredError unless headers[:subscription]
|
250
269
|
else # Stomp::SPL_10
|
251
|
-
# ACK has one required header, message-id, which must contain a value
|
270
|
+
# ACK has one required header, "message-id", which must contain a value
|
252
271
|
# matching the message-id for the MESSAGE being acknowledged.
|
253
|
-
headers[:'message-id'] =
|
272
|
+
headers[:'message-id'] = message_or_ack_id
|
254
273
|
end
|
255
274
|
_headerCheck(headers)
|
256
275
|
slog(:on_ack, log_params, headers)
|
@@ -258,23 +277,31 @@ module Stomp
|
|
258
277
|
end
|
259
278
|
|
260
279
|
# STOMP 1.1+ NACK.
|
261
|
-
|
280
|
+
#
|
281
|
+
# When the connection protocol level is 1.1 the message_or_ack_id parameter
|
282
|
+
# should match the message-id header of the MESSAGE being acknowledged.
|
283
|
+
#
|
284
|
+
# When the connection protocol level is 1.2 the message_or_ack_id parameter
|
285
|
+
# should match the ack header of the MESSAGE being acknowledged.
|
286
|
+
#
|
287
|
+
# Behavior is protocol level dependent, see the specifications and comments below.
|
288
|
+
def nack(message_or_ack_id, headers = {})
|
262
289
|
raise Stomp::Error::NoCurrentConnection if @closed_check && closed?
|
263
290
|
raise Stomp::Error::UnsupportedProtocolError if @protocol == Stomp::SPL_10
|
264
291
|
raise Stomp::Error::ProtocolErrorEmptyHeaderKey if headers.has_key?("")
|
265
|
-
raise Stomp::Error::MessageIDRequiredError if
|
292
|
+
raise Stomp::Error::MessageIDRequiredError if message_or_ack_id.nil? || message_or_ack_id == ""
|
266
293
|
headers = headers.symbolize_keys
|
267
294
|
case @protocol
|
268
295
|
when Stomp::SPL_12
|
269
296
|
# The NACK frame MUST include an id header matching the ack header
|
270
297
|
# of the MESSAGE being acknowledged.
|
271
|
-
headers[:id] =
|
298
|
+
headers[:id] = message_or_ack_id
|
272
299
|
else # Stomp::SPL_11 only
|
273
300
|
# NACK has two REQUIRED headers: message-id, which MUST contain a value
|
274
301
|
# matching the message-id for the MESSAGE being acknowledged and
|
275
302
|
# subscription, which MUST be set to match the value of the subscription's
|
276
303
|
# id header.
|
277
|
-
headers[:'message-id'] =
|
304
|
+
headers[:'message-id'] = message_or_ack_id
|
278
305
|
raise Stomp::Error::SubscriptionRequiredError unless headers[:subscription]
|
279
306
|
end
|
280
307
|
_headerCheck(headers)
|
data/lib/stomp/version.rb
CHANGED
data/spec/client_spec.rb
CHANGED
@@ -402,4 +402,152 @@ describe Stomp::Client do
|
|
402
402
|
end
|
403
403
|
end
|
404
404
|
end
|
405
|
+
|
406
|
+
describe '(used with custom headers)' do
|
407
|
+
before :each do
|
408
|
+
@client = Stomp::Client.new
|
409
|
+
end
|
410
|
+
|
411
|
+
def original_headers
|
412
|
+
{:custom_header => 'value'}
|
413
|
+
end
|
414
|
+
|
415
|
+
let(:connection_headers) { original_headers }
|
416
|
+
let(:headers) { original_headers }
|
417
|
+
|
418
|
+
shared_examples_for 'argument-safe method' do
|
419
|
+
describe 'given headers hash' do
|
420
|
+
subject { headers }
|
421
|
+
it 'is immutable' do
|
422
|
+
is_expected.to match(original_headers)
|
423
|
+
end
|
424
|
+
end
|
425
|
+
end
|
426
|
+
|
427
|
+
describe '#begin' do
|
428
|
+
before {
|
429
|
+
expect(@mock_connection).to receive(:begin).with('name', connection_headers)
|
430
|
+
@client.begin('name', headers)
|
431
|
+
}
|
432
|
+
it_behaves_like 'argument-safe method'
|
433
|
+
end
|
434
|
+
|
435
|
+
describe '#abort' do
|
436
|
+
before {
|
437
|
+
expect(@mock_connection).to receive(:abort).with('name', connection_headers)
|
438
|
+
@client.abort('name', headers)
|
439
|
+
}
|
440
|
+
it_behaves_like 'argument-safe method'
|
441
|
+
end
|
442
|
+
|
443
|
+
describe '#commit' do
|
444
|
+
before {
|
445
|
+
expect(@mock_connection).to receive(:commit).with('name', connection_headers)
|
446
|
+
@client.commit('name', headers)
|
447
|
+
}
|
448
|
+
it_behaves_like 'argument-safe method'
|
449
|
+
end
|
450
|
+
|
451
|
+
describe '#subscribe' do
|
452
|
+
let(:connection_headers) { original_headers.merge({:id => Digest::SHA1.hexdigest('destination')}) }
|
453
|
+
before {
|
454
|
+
expect(@mock_connection).to receive(:subscribe).with('destination', connection_headers)
|
455
|
+
@client.subscribe('destination', headers) {|dummy_subscriber| }
|
456
|
+
}
|
457
|
+
it_behaves_like 'argument-safe method'
|
458
|
+
end
|
459
|
+
|
460
|
+
describe '#unsubscribe' do
|
461
|
+
let(:connection_headers) { original_headers.merge({:id => Digest::SHA1.hexdigest('destination')}) }
|
462
|
+
before {
|
463
|
+
expect(@mock_connection).to receive(:unsubscribe).with('destination', connection_headers)
|
464
|
+
@client.unsubscribe('destination', headers) {|dummy_subscriber| }
|
465
|
+
}
|
466
|
+
it_behaves_like 'argument-safe method'
|
467
|
+
end
|
468
|
+
|
469
|
+
describe '#ack' do
|
470
|
+
describe 'with STOMP 1.0' do
|
471
|
+
let(:message) { double('message', :headers => {'message-id' => 'id'}) }
|
472
|
+
before {
|
473
|
+
allow(@client).to receive(:protocol).and_return(Stomp::SPL_10)
|
474
|
+
expect(@mock_connection).to receive(:ack).with('id', connection_headers)
|
475
|
+
@client.ack(message, headers)
|
476
|
+
}
|
477
|
+
it_behaves_like 'argument-safe method'
|
478
|
+
end
|
479
|
+
describe 'with STOMP 1.1' do
|
480
|
+
let(:message) { double('message', :headers => {'message-id' => 'id', 'subscription' => 'subscription_name'}) }
|
481
|
+
let(:connection_headers) { original_headers.merge({:subscription => 'subscription_name'}) }
|
482
|
+
before {
|
483
|
+
allow(@client).to receive(:protocol).and_return(Stomp::SPL_11)
|
484
|
+
expect(@mock_connection).to receive(:ack).with('id', connection_headers)
|
485
|
+
@client.ack(message, headers)
|
486
|
+
}
|
487
|
+
it_behaves_like 'argument-safe method'
|
488
|
+
end
|
489
|
+
describe 'with STOMP 1.2' do
|
490
|
+
let(:message) { double('message', :headers => {'ack' => 'id'}) }
|
491
|
+
before {
|
492
|
+
allow(@client).to receive(:protocol).and_return(Stomp::SPL_12)
|
493
|
+
expect(@mock_connection).to receive(:ack).with('id', connection_headers)
|
494
|
+
@client.ack(message, headers)
|
495
|
+
}
|
496
|
+
it_behaves_like 'argument-safe method'
|
497
|
+
end
|
498
|
+
end
|
499
|
+
|
500
|
+
describe '#nack' do
|
501
|
+
describe 'with STOMP 1.0' do
|
502
|
+
let(:message) { double('message', :headers => {'message-id' => 'id'}) }
|
503
|
+
before {
|
504
|
+
allow(@client).to receive(:protocol).and_return(Stomp::SPL_10)
|
505
|
+
expect(@mock_connection).to receive(:nack).with('id', connection_headers)
|
506
|
+
@client.nack(message, headers)
|
507
|
+
}
|
508
|
+
it_behaves_like 'argument-safe method'
|
509
|
+
end
|
510
|
+
describe 'with STOMP 1.1' do
|
511
|
+
let(:message) { double('message', :headers => {'message-id' => 'id', 'subscription' => 'subscription_name'}) }
|
512
|
+
let(:connection_headers) { original_headers.merge({:subscription => 'subscription_name'}) }
|
513
|
+
before {
|
514
|
+
allow(@client).to receive(:protocol).and_return(Stomp::SPL_11)
|
515
|
+
expect(@mock_connection).to receive(:nack).with('id', connection_headers)
|
516
|
+
@client.nack(message, headers)
|
517
|
+
}
|
518
|
+
it_behaves_like 'argument-safe method'
|
519
|
+
end
|
520
|
+
describe 'with STOMP 1.2' do
|
521
|
+
let(:message) { double('message', :headers => {'ack' => 'id'}) }
|
522
|
+
before {
|
523
|
+
allow(@client).to receive(:protocol).and_return(Stomp::SPL_12)
|
524
|
+
expect(@mock_connection).to receive(:nack).with('id', connection_headers)
|
525
|
+
@client.nack(message, headers)
|
526
|
+
}
|
527
|
+
it_behaves_like 'argument-safe method'
|
528
|
+
end
|
529
|
+
end
|
530
|
+
|
531
|
+
describe '#publish' do
|
532
|
+
describe 'without listener' do
|
533
|
+
let(:message) { double('message') }
|
534
|
+
before {
|
535
|
+
expect(@mock_connection).to receive(:publish).with('destination', message, connection_headers)
|
536
|
+
@client.publish('destination', message, headers)
|
537
|
+
}
|
538
|
+
it_behaves_like 'argument-safe method'
|
539
|
+
end
|
540
|
+
describe 'with listener' do
|
541
|
+
let(:message) { double('message') }
|
542
|
+
let(:connection_headers) { original_headers.merge({:receipt => 'receipt-uuid'}) }
|
543
|
+
before {
|
544
|
+
allow(@client).to receive(:uuid).and_return('receipt-uuid')
|
545
|
+
expect(@mock_connection).to receive(:publish).with('destination', message, connection_headers)
|
546
|
+
@client.publish('destination', message, headers) {|dummy_listener| }
|
547
|
+
}
|
548
|
+
it_behaves_like 'argument-safe method'
|
549
|
+
end
|
550
|
+
end
|
551
|
+
|
552
|
+
end
|
405
553
|
end
|
data/stomp.gemspec
CHANGED
@@ -2,17 +2,15 @@
|
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
3
3
|
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
|
-
# stub: stomp 1.4.1 ruby lib
|
6
5
|
|
7
6
|
Gem::Specification.new do |s|
|
8
|
-
s.name =
|
9
|
-
s.version = "1.4.
|
7
|
+
s.name = %q{stomp}
|
8
|
+
s.version = "1.4.2"
|
10
9
|
|
11
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
12
|
-
s.require_paths = ["lib"]
|
13
11
|
s.authors = ["Brian McCallister", "Marius Mathiesen", "Thiago Morello", "Guy M. Allard"]
|
14
|
-
s.date =
|
15
|
-
s.description =
|
12
|
+
s.date = %q{2016-08-20}
|
13
|
+
s.description = %q{Ruby client for the Stomp messaging protocol. Note that this gem is no longer supported on rubyforge.}
|
16
14
|
s.email = ["brianm@apache.org", "marius@stones.com", "morellon@gmail.com", "allard.guy.m@gmail.com"]
|
17
15
|
s.executables = ["catstomp", "stompcat"]
|
18
16
|
s.extra_rdoc_files = [
|
@@ -21,6 +19,7 @@ Gem::Specification.new do |s|
|
|
21
19
|
]
|
22
20
|
s.files = [
|
23
21
|
"CHANGELOG.md",
|
22
|
+
"Gemfile",
|
24
23
|
"LICENSE",
|
25
24
|
"README.md",
|
26
25
|
"Rakefile",
|
@@ -56,6 +55,7 @@ Gem::Specification.new do |s|
|
|
56
55
|
"examples/publisher.rb",
|
57
56
|
"examples/put11conn_ex1.rb",
|
58
57
|
"examples/putget11_rh1.rb",
|
58
|
+
"examples/ssl_common.rb",
|
59
59
|
"examples/ssl_ctxoptions.rb",
|
60
60
|
"examples/ssl_newparm.rb",
|
61
61
|
"examples/ssl_uc1.rb",
|
@@ -95,6 +95,7 @@ Gem::Specification.new do |s|
|
|
95
95
|
"spec/spec_helper.rb",
|
96
96
|
"stomp.gemspec",
|
97
97
|
"test/.gitignore",
|
98
|
+
"test/funcs.sh",
|
98
99
|
"test/test_anonymous.rb",
|
99
100
|
"test/test_client.rb",
|
100
101
|
"test/test_codec.rb",
|
@@ -104,22 +105,37 @@ Gem::Specification.new do |s|
|
|
104
105
|
"test/test_message.rb",
|
105
106
|
"test/test_ssl.rb",
|
106
107
|
"test/test_urlogin.rb",
|
107
|
-
"test/tlogger.rb"
|
108
|
+
"test/tlogger.rb",
|
109
|
+
"test/unitst.sh"
|
108
110
|
]
|
109
|
-
s.homepage =
|
111
|
+
s.homepage = %q{https://github.com/stompgem/stomp}
|
110
112
|
s.licenses = ["Apache-2.0"]
|
111
|
-
s.
|
112
|
-
s.
|
113
|
+
s.require_paths = ["lib"]
|
114
|
+
s.rubygems_version = %q{1.3.7}
|
115
|
+
s.summary = %q{Ruby client for the Stomp messaging protocol}
|
113
116
|
|
114
117
|
if s.respond_to? :specification_version then
|
115
|
-
|
118
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
119
|
+
s.specification_version = 3
|
116
120
|
|
117
121
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
122
|
+
s.add_runtime_dependency(%q<stomp>, [">= 0"])
|
123
|
+
s.add_runtime_dependency(%q<rake>, ["~> 0.8.2"])
|
124
|
+
s.add_development_dependency(%q<rspec>, [">= 2.14.1"])
|
125
|
+
s.add_development_dependency(%q<rspec>, [">= 2.14.1"])
|
118
126
|
s.add_development_dependency(%q<rspec>, [">= 2.14.1"])
|
119
127
|
else
|
128
|
+
s.add_dependency(%q<stomp>, [">= 0"])
|
129
|
+
s.add_dependency(%q<rake>, ["~> 0.8.2"])
|
130
|
+
s.add_dependency(%q<rspec>, [">= 2.14.1"])
|
131
|
+
s.add_dependency(%q<rspec>, [">= 2.14.1"])
|
120
132
|
s.add_dependency(%q<rspec>, [">= 2.14.1"])
|
121
133
|
end
|
122
134
|
else
|
135
|
+
s.add_dependency(%q<stomp>, [">= 0"])
|
136
|
+
s.add_dependency(%q<rake>, ["~> 0.8.2"])
|
137
|
+
s.add_dependency(%q<rspec>, [">= 2.14.1"])
|
138
|
+
s.add_dependency(%q<rspec>, [">= 2.14.1"])
|
123
139
|
s.add_dependency(%q<rspec>, [">= 2.14.1"])
|
124
140
|
end
|
125
141
|
end
|
data/test/funcs.sh
ADDED
data/test/test_urlogin.rb
CHANGED
data/test/unitst.sh
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
#!/bin/bash
|
2
|
+
#
|
3
|
+
eval $DeBug
|
4
|
+
# ------------------------------------------------------------------------------
|
5
|
+
cmd_base=$(dirname $0)
|
6
|
+
source $cmd_base/funcs.sh
|
7
|
+
# ------------------------------------------------------------------------------
|
8
|
+
pushd $cmd_base
|
9
|
+
slist=$(ls -1 *.rb | grep -v helper | grep -v 1method)
|
10
|
+
for rbf in $slist
|
11
|
+
do
|
12
|
+
echo "ruby -I ../lib ${rbf}"
|
13
|
+
ruby -I ../lib $rbf
|
14
|
+
done
|
15
|
+
# ------------------------------------------------------------------------------
|
16
|
+
popd
|
17
|
+
set +x
|
18
|
+
exit
|
metadata
CHANGED
@@ -1,9 +1,15 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: stomp
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 3
|
5
|
+
prerelease: false
|
6
|
+
segments:
|
7
|
+
- 1
|
8
|
+
- 4
|
9
|
+
- 2
|
10
|
+
version: 1.4.2
|
5
11
|
platform: ruby
|
6
|
-
authors:
|
12
|
+
authors:
|
7
13
|
- Brian McCallister
|
8
14
|
- Marius Mathiesen
|
9
15
|
- Thiago Morello
|
@@ -11,38 +17,105 @@ authors:
|
|
11
17
|
autorequire:
|
12
18
|
bindir: bin
|
13
19
|
cert_chain: []
|
14
|
-
|
15
|
-
|
16
|
-
|
20
|
+
|
21
|
+
date: 2016-08-20 00:00:00 -04:00
|
22
|
+
default_executable:
|
23
|
+
dependencies:
|
24
|
+
- !ruby/object:Gem::Dependency
|
25
|
+
prerelease: false
|
26
|
+
name: stomp
|
27
|
+
version_requirements: &id001 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ">="
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
hash: 3
|
33
|
+
segments:
|
34
|
+
- 0
|
35
|
+
version: "0"
|
36
|
+
requirement: *id001
|
37
|
+
type: :runtime
|
38
|
+
- !ruby/object:Gem::Dependency
|
39
|
+
prerelease: false
|
40
|
+
name: rake
|
41
|
+
version_requirements: &id002 !ruby/object:Gem::Requirement
|
42
|
+
none: false
|
43
|
+
requirements:
|
44
|
+
- - ~>
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
hash: 59
|
47
|
+
segments:
|
48
|
+
- 0
|
49
|
+
- 8
|
50
|
+
- 2
|
51
|
+
version: 0.8.2
|
52
|
+
requirement: *id002
|
53
|
+
type: :runtime
|
54
|
+
- !ruby/object:Gem::Dependency
|
55
|
+
prerelease: false
|
56
|
+
name: rspec
|
57
|
+
version_requirements: &id003 !ruby/object:Gem::Requirement
|
58
|
+
none: false
|
59
|
+
requirements:
|
60
|
+
- - ">="
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
hash: 53
|
63
|
+
segments:
|
64
|
+
- 2
|
65
|
+
- 14
|
66
|
+
- 1
|
67
|
+
version: 2.14.1
|
68
|
+
requirement: *id003
|
69
|
+
type: :development
|
70
|
+
- !ruby/object:Gem::Dependency
|
71
|
+
prerelease: false
|
17
72
|
name: rspec
|
18
|
-
|
19
|
-
|
73
|
+
version_requirements: &id004 !ruby/object:Gem::Requirement
|
74
|
+
none: false
|
75
|
+
requirements:
|
20
76
|
- - ">="
|
21
|
-
- !ruby/object:Gem::Version
|
77
|
+
- !ruby/object:Gem::Version
|
78
|
+
hash: 53
|
79
|
+
segments:
|
80
|
+
- 2
|
81
|
+
- 14
|
82
|
+
- 1
|
22
83
|
version: 2.14.1
|
84
|
+
requirement: *id004
|
23
85
|
type: :development
|
86
|
+
- !ruby/object:Gem::Dependency
|
24
87
|
prerelease: false
|
25
|
-
|
26
|
-
|
88
|
+
name: rspec
|
89
|
+
version_requirements: &id005 !ruby/object:Gem::Requirement
|
90
|
+
none: false
|
91
|
+
requirements:
|
27
92
|
- - ">="
|
28
|
-
- !ruby/object:Gem::Version
|
93
|
+
- !ruby/object:Gem::Version
|
94
|
+
hash: 53
|
95
|
+
segments:
|
96
|
+
- 2
|
97
|
+
- 14
|
98
|
+
- 1
|
29
99
|
version: 2.14.1
|
30
|
-
|
31
|
-
|
32
|
-
|
100
|
+
requirement: *id005
|
101
|
+
type: :development
|
102
|
+
description: Ruby client for the Stomp messaging protocol. Note that this gem is no longer supported on rubyforge.
|
103
|
+
email:
|
33
104
|
- brianm@apache.org
|
34
105
|
- marius@stones.com
|
35
106
|
- morellon@gmail.com
|
36
107
|
- allard.guy.m@gmail.com
|
37
|
-
executables:
|
108
|
+
executables:
|
38
109
|
- catstomp
|
39
110
|
- stompcat
|
40
111
|
extensions: []
|
41
|
-
|
112
|
+
|
113
|
+
extra_rdoc_files:
|
42
114
|
- LICENSE
|
43
115
|
- README.md
|
44
|
-
files:
|
116
|
+
files:
|
45
117
|
- CHANGELOG.md
|
118
|
+
- Gemfile
|
46
119
|
- LICENSE
|
47
120
|
- README.md
|
48
121
|
- Rakefile
|
@@ -78,6 +151,7 @@ files:
|
|
78
151
|
- examples/publisher.rb
|
79
152
|
- examples/put11conn_ex1.rb
|
80
153
|
- examples/putget11_rh1.rb
|
154
|
+
- examples/ssl_common.rb
|
81
155
|
- examples/ssl_ctxoptions.rb
|
82
156
|
- examples/ssl_newparm.rb
|
83
157
|
- examples/ssl_uc1.rb
|
@@ -117,6 +191,7 @@ files:
|
|
117
191
|
- spec/spec_helper.rb
|
118
192
|
- stomp.gemspec
|
119
193
|
- test/.gitignore
|
194
|
+
- test/funcs.sh
|
120
195
|
- test/test_anonymous.rb
|
121
196
|
- test/test_client.rb
|
122
197
|
- test/test_codec.rb
|
@@ -127,28 +202,40 @@ files:
|
|
127
202
|
- test/test_ssl.rb
|
128
203
|
- test/test_urlogin.rb
|
129
204
|
- test/tlogger.rb
|
205
|
+
- test/unitst.sh
|
206
|
+
has_rdoc: true
|
130
207
|
homepage: https://github.com/stompgem/stomp
|
131
|
-
licenses:
|
208
|
+
licenses:
|
132
209
|
- Apache-2.0
|
133
|
-
metadata: {}
|
134
210
|
post_install_message:
|
135
211
|
rdoc_options: []
|
136
|
-
|
212
|
+
|
213
|
+
require_paths:
|
137
214
|
- lib
|
138
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
139
|
-
|
215
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
216
|
+
none: false
|
217
|
+
requirements:
|
140
218
|
- - ">="
|
141
|
-
- !ruby/object:Gem::Version
|
142
|
-
|
143
|
-
|
144
|
-
|
219
|
+
- !ruby/object:Gem::Version
|
220
|
+
hash: 3
|
221
|
+
segments:
|
222
|
+
- 0
|
223
|
+
version: "0"
|
224
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
225
|
+
none: false
|
226
|
+
requirements:
|
145
227
|
- - ">="
|
146
|
-
- !ruby/object:Gem::Version
|
147
|
-
|
228
|
+
- !ruby/object:Gem::Version
|
229
|
+
hash: 3
|
230
|
+
segments:
|
231
|
+
- 0
|
232
|
+
version: "0"
|
148
233
|
requirements: []
|
234
|
+
|
149
235
|
rubyforge_project:
|
150
|
-
rubygems_version:
|
236
|
+
rubygems_version: 1.3.7
|
151
237
|
signing_key:
|
152
|
-
specification_version:
|
238
|
+
specification_version: 3
|
153
239
|
summary: Ruby client for the Stomp messaging protocol
|
154
240
|
test_files: []
|
241
|
+
|
checksums.yaml
DELETED
@@ -1,7 +0,0 @@
|
|
1
|
-
---
|
2
|
-
SHA1:
|
3
|
-
metadata.gz: d2b75bd10087d8cb1789c73298bad9b9d9451128
|
4
|
-
data.tar.gz: 627b99bc57543821f249e888580658d9b738784a
|
5
|
-
SHA512:
|
6
|
-
metadata.gz: 317386822ea243835a726e445e374146e72e467006af12d15c937d458fa219d8d77140cd08b7a112afa995cdb72c98b953476d06d5790f068346c72bbfef4ef6
|
7
|
-
data.tar.gz: 38d759077e04d9b0f8a35cd9af485692770a98d87b14930f582d71bfdd02a44fdd14813b46b62b5a7cdf03264c4dcd62b08271cc58cf56061c839edda3b7c080
|