stomp 1.4.1 → 1.4.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|