stomp 1.4.4 → 1.4.5

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.
Files changed (74) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +13 -0
  3. data/README.md +96 -100
  4. data/examples/EXAMPLES.md +251 -0
  5. data/examples/amqdurasub.rb +14 -17
  6. data/examples/artemis/cliwaiter_not_reliable.rb +12 -5
  7. data/examples/artemis/{cliwaiter_reliable.rb → cliwaiter_reliable_hb.rb} +24 -23
  8. data/examples/client_conndisc.rb +66 -0
  9. data/examples/client_putget.rb +94 -0
  10. data/examples/conn_conndisc.rb +102 -0
  11. data/examples/conn_putget.rb +124 -0
  12. data/examples/contrib.sh +2 -3
  13. data/examples/contributors.rb +26 -14
  14. data/examples/examplogger.rb +1 -1
  15. data/examples/{consumer.rb → historical/consumer.rb} +0 -0
  16. data/examples/{publisher.rb → historical/publisher.rb} +0 -0
  17. data/examples/{topic_consumer.rb → historical/topic_consumer.rb} +0 -0
  18. data/examples/{topic_publisher.rb → historical/topic_publisher.rb} +0 -0
  19. data/examples/logexamp.rb +23 -14
  20. data/examples/putget_file.rb +79 -0
  21. data/examples/{putget11_rh1.rb → putget_rephdrs.rb} +16 -15
  22. data/examples/ssl/SSL.md +189 -0
  23. data/examples/{ssl_ctxoptions.rb → ssl/misc/ssl_ctxoptions.rb} +23 -14
  24. data/examples/ssl/misc/ssl_newparm.rb +53 -0
  25. data/examples/ssl/misc/ssl_ucx_default_ciphers.rb +54 -0
  26. data/examples/ssl/ssl_common.rb +96 -0
  27. data/examples/ssl/sslexall.sh +17 -0
  28. data/examples/{ssl_uc1.rb → ssl/uc1/ssl_uc1.rb} +15 -11
  29. data/examples/ssl/uc1/ssl_uc1_ciphers.rb +60 -0
  30. data/examples/{ssl_uc2.rb → ssl/uc2/ssl_uc2.rb} +17 -10
  31. data/examples/ssl/uc2/ssl_uc2_ciphers.rb +67 -0
  32. data/examples/{ssl_uc3.rb → ssl/uc3/ssl_uc3.rb} +15 -16
  33. data/examples/ssl/uc3/ssl_uc3_ciphers.rb +65 -0
  34. data/examples/{ssl_uc4.rb → ssl/uc4/ssl_uc4.rb} +15 -15
  35. data/examples/ssl/uc4/ssl_uc4_ciphers.rb +66 -0
  36. data/examples/stomp_common.rb +97 -0
  37. data/lib/connection/netio.rb +83 -37
  38. data/lib/connection/utf8.rb +0 -7
  39. data/lib/connection/utils.rb +4 -1
  40. data/lib/stomp/client.rb +5 -1
  41. data/lib/stomp/connection.rb +25 -15
  42. data/lib/stomp/constants.rb +109 -0
  43. data/lib/stomp/errors.rb +11 -0
  44. data/lib/stomp/sslparams.rb +3 -4
  45. data/lib/stomp/version.rb +2 -2
  46. data/stomp.gemspec +31 -37
  47. data/test/test_anonymous.rb +4 -0
  48. data/test/test_client.rb +2 -0
  49. data/test/test_connection.rb +4 -0
  50. data/test/test_connection1p.rb +2 -4
  51. data/test/test_helper.rb +11 -0
  52. metadata +30 -36
  53. data/examples/artemis/artlogger.rb +0 -41
  54. data/examples/client11_ex1.rb +0 -89
  55. data/examples/client11_putget1.rb +0 -71
  56. data/examples/conn11_ex1.rb +0 -112
  57. data/examples/conn11_ex2.rb +0 -87
  58. data/examples/conn11_hb1.rb +0 -57
  59. data/examples/consume_file.rb +0 -63
  60. data/examples/get11conn_ex1.rb +0 -117
  61. data/examples/get11conn_ex2.rb +0 -77
  62. data/examples/lflogger.rb +0 -316
  63. data/examples/logexamp_ssl.rb +0 -81
  64. data/examples/publish_file.rb +0 -76
  65. data/examples/publish_file_conn.rb +0 -75
  66. data/examples/put11conn_ex1.rb +0 -56
  67. data/examples/ssl_common.rb +0 -73
  68. data/examples/ssl_newparm.rb +0 -43
  69. data/examples/ssl_uc1_ciphers.rb +0 -53
  70. data/examples/ssl_uc2_ciphers.rb +0 -60
  71. data/examples/ssl_uc3_ciphers.rb +0 -64
  72. data/examples/ssl_uc4_ciphers.rb +0 -65
  73. data/examples/ssl_ucx_default_ciphers.rb +0 -41
  74. data/examples/stomp11_common.rb +0 -54
@@ -1,81 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
-
3
- require 'rubygems'
4
- require 'stomp'
5
- require 'logger' # for the 'local' logger
6
- #
7
- if Kernel.respond_to?(:require_relative)
8
- require_relative("./examplogger")
9
- else
10
- $LOAD_PATH << File.dirname(__FILE__)
11
- require "examplogger"
12
- end
13
- #
14
- # == A STOMP::Connection program which uses the callback logging facility.
15
- #
16
- class SSLLoggerExample
17
- # Initialize.
18
- def initialize
19
- end
20
- # Run example.
21
- def run
22
- llog = Logger::new(STDOUT)
23
- llog.level = Logger::DEBUG
24
- llog.debug "LESSL Starting"
25
-
26
- # //////////////////////////////////////////////////////////////////////////////
27
- mylog = Slogger::new # The client provided STOMP callback logger
28
-
29
- # //////////////////////////////////////////////////////////////////////////////
30
- user = ENV['STOMP_USER'] ? ENV['STOMP_USER'] : 'guest'
31
- password = ENV['STOMP_PASSWORD'] ? ENV['STOMP_PASSWORD'] : 'guest'
32
- host = ENV['STOMP_HOST'] ? ENV['STOMP_HOST'] : 'localhost'
33
- port = ENV['STOMP_PORT'] ? ENV['STOMP_PORT'].to_i : 61612
34
- # //////////////////////////////////////////////////////////////////////////////
35
- # A hash type connect *MUST* be used to enable callback logging.
36
- # //////////////////////////////////////////////////////////////////////////////
37
- hash = { :hosts => [
38
- {:login => user, :passcode => password, :host => host, :port => port,
39
- :ssl => true}, # Or provide your insance of SSLParams instead
40
- ],
41
- :logger => mylog, # This enables callback logging!
42
- :max_reconnect_attempts => 2,
43
- }
44
-
45
- # //////////////////////////////////////////////////////////////////////////////
46
- # For a Connection:
47
- llog.debug "LESSL Connection processing starts"
48
- conn = Stomp::Connection.new(hash)
49
- conn.disconnect
50
- # //////////////////////////////////////////////////////////////////////////////
51
- llog.debug "LESSL Connection processing complete"
52
-
53
- # //////////////////////////////////////////////////////////////////////////////
54
- # For a Client:
55
- llog.debug "LESSL Client processing starts"
56
- conn = Stomp::Client.new(hash)
57
- conn.close
58
- # //////////////////////////////////////////////////////////////////////////////
59
- llog.debug "LESSL Client processing complete"
60
-
61
- # //////////////////////////////////////////////////////////////////////////////
62
- # For a Connection with other calls:
63
- llog.debug "LESSL Connection Enhanced processing starts"
64
- conn = Stomp::Connection.new(hash)
65
- #
66
- dest = "/queue/loggerq1"
67
- conn.publish dest, "a logger message"
68
- conn.subscribe dest
69
- msg = conn.receive
70
- conn.disconnect
71
- # //////////////////////////////////////////////////////////////////////////////
72
- llog.debug "LESSL Connection Enhanced processing complete"
73
-
74
- # //////////////////////////////////////////////////////////////////////////////
75
- llog.debug "LESSL Ending"
76
- end
77
- end
78
- #
79
- e = SSLLoggerExample.new
80
- e.run
81
-
@@ -1,76 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
-
3
- require 'rubygems'
4
- require 'stomp'
5
-
6
- if Kernel.respond_to?(:require_relative)
7
- require_relative("./stomp11_common")
8
- require_relative("./lflogger")
9
- else
10
- $LOAD_PATH << File.dirname(__FILE__)
11
- require "stomp11_common"
12
- require "./lflogger"
13
- end
14
- include Stomp11Common
15
- #
16
- # Used primarily for testing performance when sending "large" messages.
17
- # "large" => YMMV
18
- #
19
- class FileSender
20
- # Initialize.
21
- def initialize
22
- end
23
- # Run example.
24
- def run
25
- p [ "pub001", Thread.current ]
26
- publogger = Slogger::new
27
- start_time = Time.now.to_f
28
- fname = ARGV[0]
29
- puts "PUBF: File Name: #{fname}"
30
- file = open(fname, "r")
31
- rs = Time.now.to_f
32
- buff = file.read
33
- re = Time.now.to_f
34
- ppt = sprintf("%20.6f", re - rs)
35
- puts "PUBF: File size: #{buff.respond_to?(:bytesize) ? buff.bytesize : buff.length}"
36
- puts "PUBF: File read: #{ppt} seconds"
37
- file.close
38
- #
39
- client_hdrs = {"accept-version" => "1.1",
40
- "host" => virt_host(),
41
- }
42
- client_hash = { :hosts => [
43
- {:login => login(), :passcode => passcode(),
44
- :host => host(), :port => port()},
45
- ],
46
- :connect_headers => client_hdrs,
47
- :logger => publogger,
48
- :reliable => false, ### *NOTE*
49
- }
50
- #
51
- # p [ "ch", client_hash ]
52
- client = Stomp::Client.new(client_hash)
53
- qname = ENV['STOMP_DEST'] ? ENV['STOMP_DEST'] : "/queue/a.big.file"
54
- puts "PUBF: Qname is: #{qname}"
55
- # Try to gracefully handle files that exceed broker size limits.
56
- ph = {:presistent => true}
57
- ph['suppress_content_length'] = 'yes' if suppresscl()
58
- puts "PUBF: Headers are: #{ph.inspect}"
59
- begin
60
- client.publish(qname, buff, ph)
61
- rescue
62
- puts "PUBF: exception on publish: #{$!}"
63
- end
64
- sleep 0.1
65
- e = client.poll() # Check for unsolicited messages from broker
66
- puts "PUBF: unexpected broker message: #{e}" if e
67
- client.close
68
- end_time = Time.now.to_f
69
- ppt = sprintf("%20.6f", end_time - start_time)
70
- puts "PUBF: File published: #{ppt} seconds"
71
- end
72
- end
73
- #
74
- e = FileSender.new
75
- e.run
76
-
@@ -1,75 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
-
3
- require 'rubygems'
4
- require 'stomp'
5
-
6
- if Kernel.respond_to?(:require_relative)
7
- require_relative("./stomp11_common")
8
- require_relative("./lflogger")
9
- else
10
- $LOAD_PATH << File.dirname(__FILE__)
11
- require "stomp11_common"
12
- require "./lflogger"
13
- end
14
- include Stomp11Common
15
- #
16
- # Used primarily for testing performance when sending "large" messages.
17
- # "large" => YMMV
18
- #
19
- class FileSenderConn
20
- # Initialize.
21
- def initialize
22
- end
23
- # Run example.
24
- def run
25
- p [ "pubc001", Thread.current ]
26
- publogger = Slogger::new
27
- start_time = Time.now.to_f
28
- fname = ARGV[0]
29
- puts "PUBFC: File Name: #{fname}"
30
- file = open(fname, "r")
31
- rs = Time.now.to_f
32
- buff = file.read
33
- re = Time.now.to_f
34
- ppt = sprintf("%20.6f", re - rs)
35
- puts "PUBFC: File size: #{buff.respond_to?(:bytesize) ? buff.bytesize : buff.length}"
36
- puts "PUBFC: File read: #{ppt} seconds"
37
- file.close
38
- #
39
- connection_hdrs = {"accept-version" => "1.1",
40
- "host" => virt_host(),
41
- }
42
- connection_hash = { :hosts => [
43
- {:login => login(), :passcode => passcode(),
44
- :host => host(), :port => port()},
45
- ],
46
- :connect_headers => connection_hdrs,
47
- :logger => publogger,
48
- :reliable => false, ### *NOTE*
49
- }
50
- #
51
- # p [ "ch", connection_hash ]
52
- connection = Stomp::Connection.new(connection_hash)
53
- qname = ENV['STOMP_DEST'] ? ENV['STOMP_DEST'] : "/queue/a.big.file"
54
- puts "PUBFC: Qname is: #{qname}"
55
- ph = {:presistent => true}
56
- ph['suppress_content_length'] = 'yes' if suppresscl()
57
- puts "PUBF: Headers are: #{ph.inspect}"
58
- # Try to gracefully handle files that exceed broker size limits.
59
- begin
60
- connection.publish(qname, buff, ph)
61
- rescue
62
- puts "PUBFC: exception on publish: #{$!}"
63
- end
64
- e = connection.poll() # Check for unsolicited messages from broker
65
- puts "PUBFC: unexpected broker message: #{e}" if e
66
- connection.disconnect
67
- end_time = Time.now.to_f
68
- ppt = sprintf("%20.6f", end_time - start_time)
69
- puts "PUBFC: File published: #{ppt} seconds"
70
- end
71
- end
72
- #
73
- e = FileSenderConn.new
74
- e.run
75
-
@@ -1,56 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
-
3
- #
4
- # The current require dance for different Ruby versions.
5
- # Change this to suit your requirements.
6
- #
7
- if Kernel.respond_to?(:require_relative)
8
- require_relative("./stomp11_common")
9
- else
10
- $LOAD_PATH << File.dirname(__FILE__)
11
- require "stomp11_common"
12
- end
13
- include Stomp11Common
14
-
15
- #
16
- # == Stomp 1.1 Publish Example
17
- #
18
- # Purpose: to demonstrate sending messages using Stomp 1.1.
19
- #
20
- class Publish11Example1
21
- # Initialize.
22
- def initialize
23
- end
24
- # Run example.
25
- def run
26
- conn = get_connection() # Use helper method to obtain a Stomp#connection
27
- raise "Unexpected protocol level" if conn.protocol != Stomp::SPL_11
28
- #
29
- # Publishing simple data is as it was with Stomp 1.0.
30
- #
31
- # Note: Stomp 1.1 brokers seem to prefer using '.' as delimiters in queue
32
- # name spaces. Hence, the queue name used here.
33
- #
34
- qname = "/queue/nodea.nodeb.nodec"
35
- data = "message payload"
36
- headers = {}
37
- #
38
- # The 'data' and 'headers' may be omitted, as with Stomp 1.0
39
- #
40
- puts "Writing #{nmsgs()} messages."
41
- 1.upto(nmsgs()) do |i|
42
- msg = "#{data}: #{i}"
43
- conn.publish qname, msg , headers
44
- puts "Sent data: #{msg}"
45
- end
46
- #
47
- # And finally, disconnect.
48
- #
49
- conn.disconnect
50
- end
51
- end
52
- #
53
- e = Publish11Example1.new
54
- e.run
55
-
56
-
@@ -1,73 +0,0 @@
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
-
@@ -1,43 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
-
3
- #
4
- # Reference: https://github.com/stompgem/stomp/wiki/extended-ssl-overview
5
- #
6
- require "rubygems"
7
- require "stomp"
8
- #
9
- # == Demo override of SSLContext.new parameters.
10
- #
11
- # Based roughly on example ssl_uc1.rb.
12
- #
13
- #
14
- class ExampleSSLNewParm
15
- # Initialize.
16
- def initialize
17
- end
18
- # Run example.
19
- def run
20
- ssl_opts = Stomp::SSLParams.new
21
- hash = { :hosts => [
22
- {:login => 'guest', :passcode => 'guest', :host => 'localhost', :port => 61612, :ssl => ssl_opts},
23
- ],
24
- :reliable => false, # YMMV, to test this in a sane manner
25
- :sslctx_newparm => :SSLv2, # An example should you:
26
- # a) Actually want SSLv2 *AND*
27
- # b) Your Ruby version supports SSLv2 *AND*
28
- # c) Your broker supports and allows SSLv2
29
- }
30
- #
31
- puts "Connect starts, SSL Use Case 1"
32
- c = Stomp::Connection.new(hash)
33
- puts "Connect completed"
34
- puts "SSL Verify Result: #{ssl_opts.verify_result}"
35
- # puts "SSL Peer Certificate:\n#{ssl_opts.peer_cert}"
36
- #
37
- c.disconnect
38
- end
39
- end
40
- #
41
- e = ExampleSSLNewParm.new
42
- e.run
43
-
@@ -1,53 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
-
3
- #
4
- # Reference: https://github.com/stompgem/stomp/wiki/extended-ssl-overview
5
- #
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
13
- #
14
- # == SSL Use Case 1 - User Supplied Ciphers
15
- #
16
- # If you need your own ciphers list, this is how.
17
- # Stomp's default list will work in many cases. If you need to use this, you
18
- # will know it because SSL connect will fail. In that case, determining
19
- # _what_ should be in the list is your responsibility.
20
- #
21
- class ExampleSSL1C
22
- # 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
26
- end
27
- # Run example.
28
- def run
29
- 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], ["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]]
30
-
31
- ssl_opts = Stomp::SSLParams.new(:ciphers => ciphers_list)
32
-
33
- #
34
- # SSL Use Case 1
35
- #
36
- hash = { :hosts => [
37
- {:login => 'guest', :passcode => 'guest', :host => @host, :port => @port, :ssl => ssl_opts},
38
- ],
39
- :reliable => false, # YMMV, to test this in a sane manner
40
- }
41
- #
42
- puts "Connect starts, SSL Use Case 1"
43
- c = Stomp::Connection.new(hash)
44
- puts "Connect completed"
45
- puts "SSL Verify Result: #{ssl_opts.verify_result}"
46
- #
47
- c.disconnect
48
- end
49
- end
50
- #
51
- e = ExampleSSL1C.new
52
- e.run
53
-