stomp 1.2.0 → 1.2.1

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG.rdoc CHANGED
@@ -1,3 +1,12 @@
1
+ == 1.2.1 2012-13-03
2
+
3
+ * Robust SSL certificate support. See examples and: https://github.com/morellon/stomp/wiki/extended-ssl-overview
4
+ * Really remove the deprecated #send methods
5
+ * Fix exception in Stomp 1.1 code when headers are frozen
6
+ * Revert 245e734a0. See ce8335fb2f for details. Fixes broken Connection#poll.
7
+ * Add reconnection attempts to callback logging.
8
+ * Add SSL specific connection information to callback logging.
9
+
1
10
  == 1.2.0 2011-14-12
2
11
 
3
12
  * Stomp 1.1 protocol support. A significant change. Please test existing 1.0 code well. See the examples directory for 1.1 examples.
@@ -0,0 +1,66 @@
1
+ require 'rubygems'
2
+ require 'stomp'
3
+ require 'logger' # for the 'local' logger
4
+ #
5
+ $:.unshift(File.dirname(__FILE__))
6
+ #
7
+ require 'slogger'
8
+ #
9
+ # A STOMP client program which uses the callback logging facility.
10
+ #
11
+ llog = Logger::new(STDOUT)
12
+ llog.level = Logger::DEBUG
13
+ llog.debug "LESSL Starting"
14
+
15
+ # //////////////////////////////////////////////////////////////////////////////
16
+ mylog = Slogger::new # The client provided STOMP callback logger
17
+ # -*- encoding: utf-8 -*-
18
+
19
+ # //////////////////////////////////////////////////////////////////////////////
20
+ user = ENV['STOMP_USER'] ? ENV['STOMP_USER'] : 'guest'
21
+ password = ENV['STOMP_PASSWORD'] ? ENV['STOMP_PASSWORD'] : 'guest'
22
+ host = ENV['STOMP_HOST'] ? ENV['STOMP_HOST'] : 'localhost'
23
+ port = ENV['STOMP_PORT'] ? ENV['STOMP_PORT'].to_i : 61612
24
+ # //////////////////////////////////////////////////////////////////////////////
25
+ # A hash type connect *MUST* be used to enable callback logging.
26
+ # //////////////////////////////////////////////////////////////////////////////
27
+ hash = { :hosts => [
28
+ {:login => user, :passcode => password, :host => host, :port => port,
29
+ :ssl => true}, # Or provide your insance of SSLParams instead
30
+ ],
31
+ :logger => mylog, # This enables callback logging!
32
+ :max_reconnect_attempts => 2,
33
+ }
34
+
35
+ # //////////////////////////////////////////////////////////////////////////////
36
+ # For a Connection:
37
+ llog.debug "LESSL Connection processing starts"
38
+ conn = Stomp::Connection.new(hash)
39
+ conn.disconnect
40
+ # //////////////////////////////////////////////////////////////////////////////
41
+ llog.debug "LESSL Connection processing complete"
42
+
43
+ # //////////////////////////////////////////////////////////////////////////////
44
+ # For a Client:
45
+ llog.debug "LESSL Client processing starts"
46
+ conn = Stomp::Client.new(hash)
47
+ conn.close
48
+ # //////////////////////////////////////////////////////////////////////////////
49
+ llog.debug "LESSL Client processing complete"
50
+
51
+ # //////////////////////////////////////////////////////////////////////////////
52
+ # For a Connection with other calls:
53
+ llog.debug "LESSL Connection Enhanced processing starts"
54
+ conn = Stomp::Connection.new(hash)
55
+ #
56
+ dest = "/queue/loggerq1"
57
+ conn.publish dest, "a logger message"
58
+ conn.subscribe dest
59
+ msg = conn.receive
60
+ conn.disconnect
61
+ # //////////////////////////////////////////////////////////////////////////////
62
+ llog.debug "LESSL Connection Enhanced processing complete"
63
+
64
+ # //////////////////////////////////////////////////////////////////////////////
65
+ llog.debug "LESSL Ending"
66
+
data/examples/slogger.rb CHANGED
@@ -158,6 +158,22 @@ class Slogger
158
158
  end
159
159
  end
160
160
 
161
+ def on_ssl_connecting(parms)
162
+ begin
163
+ @log.debug "SSL Connecting Parms #{info(parms)}"
164
+ rescue
165
+ @log.debug "SSL Connecting oops"
166
+ end
167
+ end
168
+
169
+ def on_ssl_connected(parms)
170
+ begin
171
+ @log.debug "SSL Connected Parms #{info(parms)}"
172
+ rescue
173
+ @log.debug "SSL Connected oops"
174
+ end
175
+ end
176
+
161
177
  private
162
178
 
163
179
  def info(parms)
@@ -172,7 +188,7 @@ class Slogger
172
188
  # parms[:cur_parseto]
173
189
  # parms[:cur_conattempts]
174
190
  #
175
- "Host: #{parms[:cur_host]}, Port: #{parms[:cur_port]}, Login: Port: #{parms[:cur_login]}, Passcode: #{parms[:cur_passcode]}"
191
+ "Host: #{parms[:cur_host]}, Port: #{parms[:cur_port]}, Login: Port: #{parms[:cur_login]}, Passcode: #{parms[:cur_passcode]}, ssl: #{parms[:cur_ssl]}"
176
192
  end
177
193
  end # of class
178
194
 
@@ -0,0 +1,19 @@
1
+ #
2
+ # Reference: https://github.com/morellon/stomp/wiki/extended-ssl-overview
3
+ #
4
+ require "rubygems"
5
+ require "stomp"
6
+ #
7
+ # SSL Use Case 1
8
+ #
9
+ hash = { :hosts => [
10
+ {:login => 'guest', :passcode => 'guest', :host => 'localhost', :port => 61612, :ssl => true},
11
+ ]
12
+ }
13
+ #
14
+ puts "Connect starts, SSL Use Case 1"
15
+ c = Stomp::Connection.new(hash)
16
+ puts "Connect completed"
17
+ #
18
+ c.disconnect
19
+
@@ -0,0 +1,30 @@
1
+ #
2
+ # Reference: https://github.com/morellon/stomp/wiki/extended-ssl-overview
3
+ #
4
+ require "rubygems"
5
+ require "stomp"
6
+ #
7
+ # If you need your own ciphers list, this is how.
8
+ # Stomp's default list will work in many cases. If you need to use this, you
9
+ # will know it because SSL connect's will fail. In that case, determining
10
+ # _what_ should be in the list is your responsibility.
11
+ #
12
+ ciphers_list = [["DHE-RSA-AES256-SHA", "TLSv1/SSLv3", 256, 256], ["DHE-DSS-AES256-SHA", "TLSv1/SSLv3", 256, 256], ["AES256-SHA", "TLSv1/SSLv3", 256, 256], ["EDH-RSA-DES-CBC3-SHA", "TLSv1/SSLv3", 168, 168], ["EDH-DSS-DES-CBC3-SHA", "TLSv1/SSLv3", 168, 168], ["DES-CBC3-SHA", "TLSv1/SSLv3", 168, 168], ["DHE-RSA-AES128-SHA", "TLSv1/SSLv3", 128, 128], ["DHE-DSS-AES128-SHA", "TLSv1/SSLv3", 128, 128], ["AES128-SHA", "TLSv1/SSLv3", 128, 128], ["RC4-SHA", "TLSv1/SSLv3", 128, 128], ["RC4-MD5", "TLSv1/SSLv3", 128, 128], ["EDH-RSA-DES-CBC-SHA", "TLSv1/SSLv3", 56, 56], ["EDH-DSS-DES-CBC-SHA", "TLSv1/SSLv3", 56, 56],
13
+ ["DES-CBC-SHA", "TLSv1/SSLv3", 56, 56], ["EXP-EDH-RSA-DES-CBC-SHA", "TLSv1/SSLv3", 40, 56], ["EXP-EDH-DSS-DES-CBC-SHA", "TLSv1/SSLv3", 40, 56], ["EXP-DES-CBC-SHA", "TLSv1/SSLv3", 40, 56], ["EXP-RC2-CBC-MD5", "TLSv1/SSLv3", 40, 128], ["EXP-RC4-MD5", "TLSv1/SSLv3", 40, 128]]
14
+
15
+ ssl_opts = Stomp::SSLParams.new(:ciphers => ciphers_list)
16
+
17
+ #
18
+ # SSL Use Case 1
19
+ #
20
+ hash = { :hosts => [
21
+ {:login => 'guest', :passcode => 'guest', :host => 'localhost', :port => 61612, :ssl => ssl_opts},
22
+ ]
23
+ }
24
+ #
25
+ puts "Connect starts, SSL Use Case 1"
26
+ c = Stomp::Connection.new(hash)
27
+ puts "Connect completed"
28
+ #
29
+ c.disconnect
30
+
@@ -0,0 +1,30 @@
1
+ #
2
+ # Reference: https://github.com/morellon/stomp/wiki/extended-ssl-overview
3
+ #
4
+ require "rubygems"
5
+ require "stomp"
6
+ #
7
+ # SSL Use Case 2
8
+ #
9
+ ssl_opts = Stomp::SSLParams.new(:key_file => "/home/gmallard/sslwork/twocas_tj/clientCA/ClientTJ.key",
10
+ :cert_file => "/home/gmallard/sslwork/twocas_tj/clientCA/ClientTJ.crt")
11
+
12
+ #
13
+ hash = { :hosts => [
14
+ {:login => 'guest', :passcode => 'guest', :host => 'localhost', :port => 61612, :ssl => ssl_opts},
15
+ ]
16
+ }
17
+ #
18
+ puts "Connect starts, SSL Use Case 2"
19
+ c = Stomp::Connection.new(hash)
20
+ puts "Connect completed"
21
+ #
22
+ # Expect a verify_result == 20
23
+ #
24
+ # This means: the client did not verify the peer's certificate, but the
25
+ # handshake succeeds, and the connection is allowed.
26
+ #
27
+ puts "SSL Verify Result: #{ssl_opts.verify_result}"
28
+ puts "SSL Peer Certificate:\n#{ssl_opts.peer_cert}"
29
+ c.disconnect
30
+
@@ -0,0 +1,38 @@
1
+ #
2
+ # Reference: https://github.com/morellon/stomp/wiki/extended-ssl-overview
3
+ #
4
+ require "rubygems"
5
+ require "stomp"
6
+ #
7
+ # If you need your own ciphers list, this is how.
8
+ # Stomp's default list will work in many cases. If you need to use this, you
9
+ # will know it because SSL connect's will fail. In that case, determining
10
+ # _what_ should be in the list is your responsibility.
11
+ #
12
+ ciphers_list = [["DHE-RSA-AES256-SHA", "TLSv1/SSLv3", 256, 256], ["DHE-DSS-AES256-SHA", "TLSv1/SSLv3", 256, 256], ["AES256-SHA", "TLSv1/SSLv3", 256, 256], ["EDH-RSA-DES-CBC3-SHA", "TLSv1/SSLv3", 168, 168], ["EDH-DSS-DES-CBC3-SHA", "TLSv1/SSLv3", 168, 168], ["DES-CBC3-SHA", "TLSv1/SSLv3", 168, 168], ["DHE-RSA-AES128-SHA", "TLSv1/SSLv3", 128, 128], ["DHE-DSS-AES128-SHA", "TLSv1/SSLv3", 128, 128], ["AES128-SHA", "TLSv1/SSLv3", 128, 128], ["RC4-SHA", "TLSv1/SSLv3", 128, 128], ["RC4-MD5", "TLSv1/SSLv3", 128, 128], ["EDH-RSA-DES-CBC-SHA", "TLSv1/SSLv3", 56, 56], ["EDH-DSS-DES-CBC-SHA", "TLSv1/SSLv3", 56, 56],
13
+ ["DES-CBC-SHA", "TLSv1/SSLv3", 56, 56], ["EXP-EDH-RSA-DES-CBC-SHA", "TLSv1/SSLv3", 40, 56], ["EXP-EDH-DSS-DES-CBC-SHA", "TLSv1/SSLv3", 40, 56], ["EXP-DES-CBC-SHA", "TLSv1/SSLv3", 40, 56], ["EXP-RC2-CBC-MD5", "TLSv1/SSLv3", 40, 128], ["EXP-RC4-MD5", "TLSv1/SSLv3", 40, 128]]
14
+ #
15
+ # SSL Use Case 2
16
+ #
17
+ ssl_opts = Stomp::SSLParams.new(:key_file => "/home/gmallard/sslwork/twocas_tj/clientCA/ClientTJ.key",
18
+ :cert_file => "/home/gmallard/sslwork/twocas_tj/clientCA/ClientTJ.crt", :ciphers => ciphers_list)
19
+
20
+ #
21
+ hash = { :hosts => [
22
+ {:login => 'guest', :passcode => 'guest', :host => 'localhost', :port => 61612, :ssl => ssl_opts},
23
+ ]
24
+ }
25
+ #
26
+ puts "Connect starts, SSL Use Case 2"
27
+ c = Stomp::Connection.new(hash)
28
+ puts "Connect completed"
29
+ #
30
+ # Expect a verify_result == 20
31
+ #
32
+ # This means: the client did not verify the peer's certificate, but the
33
+ # handshake succeeds, and the connection is allowed.
34
+ #
35
+ puts "SSL Verify Result: #{ssl_opts.verify_result}"
36
+ puts "SSL Peer Certificate:\n#{ssl_opts.peer_cert}"
37
+ c.disconnect
38
+
@@ -0,0 +1,29 @@
1
+ #
2
+ # Reference: https://github.com/morellon/stomp/wiki/extended-ssl-overview
3
+ #
4
+ require "rubygems"
5
+ require "stomp"
6
+ #
7
+ # SSL Use Case 3
8
+ #
9
+ ts_flist = []
10
+ ts_flist << "/home/gmallard/sslwork/twocas_tj/serverCA/ServerTJCA.crt"
11
+ ssl_opts = Stomp::SSLParams.new(:ts_files => ts_flist.join(","))
12
+ #
13
+ hash = { :hosts => [
14
+ {:login => 'guest', :passcode => 'guest', :host => 'localhost', :port => 61612, :ssl => ssl_opts},
15
+ ]
16
+ }
17
+ #
18
+ puts "Connect starts, SSL Use Case 3"
19
+ c = Stomp::Connection.new(hash)
20
+ puts "Connect completed"
21
+ #
22
+ # Expect a verify_result == 0
23
+ #
24
+ # This means: the client successfully verified the peer's certificate.
25
+ #
26
+ puts "SSL Verify Result: #{ssl_opts.verify_result}"
27
+ puts "SSL Peer Certificate:\n#{ssl_opts.peer_cert}"
28
+ c.disconnect
29
+
@@ -0,0 +1,37 @@
1
+ #
2
+ # Reference: https://github.com/morellon/stomp/wiki/extended-ssl-overview
3
+ #
4
+ require "rubygems"
5
+ require "stomp"
6
+ #
7
+ # If you need your own ciphers list, this is how.
8
+ # Stomp's default list will work in many cases. If you need to use this, you
9
+ # will know it because SSL connect's will fail. In that case, determining
10
+ # _what_ should be in the list is your responsibility.
11
+ #
12
+ ciphers_list = [["DHE-RSA-AES256-SHA", "TLSv1/SSLv3", 256, 256], ["DHE-DSS-AES256-SHA", "TLSv1/SSLv3", 256, 256], ["AES256-SHA", "TLSv1/SSLv3", 256, 256], ["EDH-RSA-DES-CBC3-SHA", "TLSv1/SSLv3", 168, 168], ["EDH-DSS-DES-CBC3-SHA", "TLSv1/SSLv3", 168, 168], ["DES-CBC3-SHA", "TLSv1/SSLv3", 168, 168], ["DHE-RSA-AES128-SHA", "TLSv1/SSLv3", 128, 128], ["DHE-DSS-AES128-SHA", "TLSv1/SSLv3", 128, 128], ["AES128-SHA", "TLSv1/SSLv3", 128, 128], ["RC4-SHA", "TLSv1/SSLv3", 128, 128], ["RC4-MD5", "TLSv1/SSLv3", 128, 128], ["EDH-RSA-DES-CBC-SHA", "TLSv1/SSLv3", 56, 56], ["EDH-DSS-DES-CBC-SHA", "TLSv1/SSLv3", 56, 56],
13
+ ["DES-CBC-SHA", "TLSv1/SSLv3", 56, 56], ["EXP-EDH-RSA-DES-CBC-SHA", "TLSv1/SSLv3", 40, 56], ["EXP-EDH-DSS-DES-CBC-SHA", "TLSv1/SSLv3", 40, 56], ["EXP-DES-CBC-SHA", "TLSv1/SSLv3", 40, 56], ["EXP-RC2-CBC-MD5", "TLSv1/SSLv3", 40, 128], ["EXP-RC4-MD5", "TLSv1/SSLv3", 40, 128]]
14
+ #
15
+ # SSL Use Case 3
16
+ #
17
+ ts_flist = []
18
+ ts_flist << "/home/gmallard/sslwork/twocas_tj/serverCA/ServerTJCA.crt"
19
+ ssl_opts = Stomp::SSLParams.new(:ts_files => ts_flist.join(","), :ciphers => ciphers_list)
20
+ #
21
+ hash = { :hosts => [
22
+ {:login => 'guest', :passcode => 'guest', :host => 'localhost', :port => 61612, :ssl => ssl_opts},
23
+ ]
24
+ }
25
+ #
26
+ puts "Connect starts, SSL Use Case 3"
27
+ c = Stomp::Connection.new(hash)
28
+ puts "Connect completed"
29
+ #
30
+ # Expect a verify_result == 0
31
+ #
32
+ # This means: the client successfully verified the peer's certificate.
33
+ #
34
+ puts "SSL Verify Result: #{ssl_opts.verify_result}"
35
+ puts "SSL Peer Certificate:\n#{ssl_opts.peer_cert}"
36
+ c.disconnect
37
+
@@ -0,0 +1,29 @@
1
+ #
2
+ # Reference: https://github.com/morellon/stomp/wiki/extended-ssl-overview
3
+ #
4
+ require "rubygems"
5
+ require "stomp"
6
+ #
7
+ # SSL Use Case 4
8
+ #
9
+ ssl_opts = Stomp::SSLParams.new(:key_file => "/home/gmallard/sslwork/twocas_tj/clientCA/ClientTJ.key",
10
+ :cert_file => "/home/gmallard/sslwork/twocas_tj/clientCA/ClientTJ.crt",
11
+ :ts_files => "/home/gmallard/sslwork/twocas_tj/serverCA/ServerTJCA.crt")
12
+ #
13
+ hash = { :hosts => [
14
+ {:login => 'guest', :passcode => 'guest', :host => 'localhost', :port => 61612, :ssl => ssl_opts},
15
+ ]
16
+ }
17
+ #
18
+ puts "Connect starts, SSL Use Case 4"
19
+ c = Stomp::Connection.new(hash)
20
+ puts "Connect completed"
21
+ #
22
+ # Expect a verify_result == 0
23
+ #
24
+ # This means: the client successfully verified the peer's certificate.
25
+ #
26
+ puts "SSL Verify Result: #{ssl_opts.verify_result}"
27
+ puts "SSL Peer Certificate:\n#{ssl_opts.peer_cert}"
28
+ c.disconnect
29
+
@@ -0,0 +1,38 @@
1
+ #
2
+ # Reference: https://github.com/morellon/stomp/wiki/extended-ssl-overview
3
+ #
4
+ require "rubygems"
5
+ require "stomp"
6
+ #
7
+ # If you need your own ciphers list, this is how.
8
+ # Stomp's default list will work in many cases. If you need to use this, you
9
+ # will know it because SSL connect's will fail. In that case, determining
10
+ # _what_ should be in the list is your responsibility.
11
+ #
12
+ ciphers_list = [["DHE-RSA-AES256-SHA", "TLSv1/SSLv3", 256, 256], ["DHE-DSS-AES256-SHA", "TLSv1/SSLv3", 256, 256], ["AES256-SHA", "TLSv1/SSLv3", 256, 256], ["EDH-RSA-DES-CBC3-SHA", "TLSv1/SSLv3", 168, 168], ["EDH-DSS-DES-CBC3-SHA", "TLSv1/SSLv3", 168, 168], ["DES-CBC3-SHA", "TLSv1/SSLv3", 168, 168], ["DHE-RSA-AES128-SHA", "TLSv1/SSLv3", 128, 128], ["DHE-DSS-AES128-SHA", "TLSv1/SSLv3", 128, 128], ["AES128-SHA", "TLSv1/SSLv3", 128, 128], ["RC4-SHA", "TLSv1/SSLv3", 128, 128], ["RC4-MD5", "TLSv1/SSLv3", 128, 128], ["EDH-RSA-DES-CBC-SHA", "TLSv1/SSLv3", 56, 56], ["EDH-DSS-DES-CBC-SHA", "TLSv1/SSLv3", 56, 56],
13
+ ["DES-CBC-SHA", "TLSv1/SSLv3", 56, 56], ["EXP-EDH-RSA-DES-CBC-SHA", "TLSv1/SSLv3", 40, 56], ["EXP-EDH-DSS-DES-CBC-SHA", "TLSv1/SSLv3", 40, 56], ["EXP-DES-CBC-SHA", "TLSv1/SSLv3", 40, 56], ["EXP-RC2-CBC-MD5", "TLSv1/SSLv3", 40, 128], ["EXP-RC4-MD5", "TLSv1/SSLv3", 40, 128]]
14
+ #
15
+ # SSL Use Case 4
16
+ #
17
+ ssl_opts = Stomp::SSLParams.new(:key_file => "/home/gmallard/sslwork/twocas_tj/clientCA/ClientTJ.key",
18
+ :cert_file => "/home/gmallard/sslwork/twocas_tj/clientCA/ClientTJ.crt",
19
+ :ts_files => "/home/gmallard/sslwork/twocas_tj/serverCA/ServerTJCA.crt",
20
+ :ciphers => ciphers_list)
21
+ #
22
+ hash = { :hosts => [
23
+ {:login => 'guest', :passcode => 'guest', :host => 'localhost', :port => 61612, :ssl => ssl_opts},
24
+ ]
25
+ }
26
+ #
27
+ puts "Connect starts, SSL Use Case 4"
28
+ c = Stomp::Connection.new(hash)
29
+ puts "Connect completed"
30
+ #
31
+ # Expect a verify_result == 0
32
+ #
33
+ # This means: the client successfully verified the peer's certificate.
34
+ #
35
+ puts "SSL Verify Result: #{ssl_opts.verify_result}"
36
+ puts "SSL Peer Certificate:\n#{ssl_opts.peer_cert}"
37
+ c.disconnect
38
+
@@ -0,0 +1,25 @@
1
+ #
2
+ # Reference: https://github.com/morellon/stomp/wiki/extended-ssl-overview
3
+ #
4
+ require "rubygems"
5
+ require "stomp"
6
+
7
+ #
8
+ # If you use SSLParams, and need the _default_ Ruby ciphers, this is how.
9
+ #
10
+ ssl_opts = Stomp::SSLParams.new(:use_ruby_ciphers => true)
11
+ #
12
+ # SSL Use Case: Using default Stomp ciphers
13
+ #
14
+ hash = { :hosts => [
15
+ {:login => 'guest', :passcode => 'guest', :host => 'localhost',
16
+ :port => 61612, :ssl => ssl_opts},
17
+ ]
18
+ }
19
+ #
20
+ puts "Connect starts, SSL Use Case X"
21
+ c = Stomp::Connection.new(hash)
22
+ puts "Connect completed"
23
+ #
24
+ c.disconnect
25
+
data/lib/stomp/client.rb CHANGED
@@ -211,11 +211,6 @@ module Stomp
211
211
  __send__(*args)
212
212
  end
213
213
 
214
- def send(*args)
215
- warn("This method is deprecated and will be removed on the next release. Use 'publish' instead")
216
- publish(*args)
217
- end
218
-
219
214
  def connection_frame
220
215
  @connection.connection_frame
221
216
  end
@@ -354,11 +349,11 @@ module Stomp
354
349
  @listener_thread = Thread.start do
355
350
  while true
356
351
  message = @connection.receive
357
- if message.command == 'MESSAGE'
352
+ if message.command == Stomp::CMD_MESSAGE
358
353
  if listener = find_listener(message)
359
354
  listener.call(message)
360
355
  end
361
- elsif message.command == 'RECEIPT'
356
+ elsif message.command == Stomp::CMD_RECEIPT
362
357
  if listener = @receipt_listeners[message.headers['receipt-id']]
363
358
  listener.call(message)
364
359
  end