stomp 1.3.1 → 1.3.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.rdoc +15 -0
- data/README.rdoc +3 -1
- data/examples/conn11_hb1.rb +2 -2
- data/examples/examplogger.rb +306 -0
- data/examples/logexamp.rb +2 -2
- data/examples/logexamp_ssl.rb +2 -2
- data/lib/client/utils.rb +3 -1
- data/lib/connection/heartbeats.rb +20 -38
- data/lib/connection/netio.rb +22 -25
- data/lib/connection/utils.rb +22 -17
- data/lib/stomp/client.rb +29 -13
- data/lib/stomp/connection.rb +33 -14
- data/lib/stomp/constants.rb +81 -17
- data/lib/stomp/null_logger.rb +2 -0
- data/lib/stomp/version.rb +1 -1
- data/spec/connection_spec.rb +6 -1
- data/stomp.gemspec +11 -8
- data/test/test_anonymous.rb +2 -2
- data/test/test_urlogin.rb +3 -3
- metadata +61 -40
- checksums.yaml +0 -15
    
        data/lib/connection/netio.rb
    CHANGED
    
    | @@ -130,9 +130,7 @@ module Stomp | |
| 130 130 | 
             
                      @failure = $!
         | 
| 131 131 | 
             
                      raise unless @reliable
         | 
| 132 132 | 
             
                      errstr = "transmit to #{@host} failed: #{$!}\n"
         | 
| 133 | 
            -
                       | 
| 134 | 
            -
                        @logger.on_miscerr(log_params, "es_trans: " + errstr)
         | 
| 135 | 
            -
                      else
         | 
| 133 | 
            +
                      unless slog(:on_miscerr, log_params, "es_trans: " + errstr)
         | 
| 136 134 | 
             
                        $stderr.print errstr
         | 
| 137 135 | 
             
                      end
         | 
| 138 136 | 
             
                      # !!! This loop initiates a re-connect !!!
         | 
| @@ -200,15 +198,10 @@ module Stomp | |
| 200 198 | 
             
                # open_tcp_socket opens a TCP socket.
         | 
| 201 199 | 
             
                def open_tcp_socket()
         | 
| 202 200 | 
             
                  tcp_socket = nil
         | 
| 203 | 
            -
             | 
| 204 | 
            -
                  if @logger && @logger.respond_to?(:on_connecting)
         | 
| 205 | 
            -
                    @logger.on_connecting(log_params)
         | 
| 206 | 
            -
                  end
         | 
| 207 | 
            -
             | 
| 201 | 
            +
                  slog(:on_connecting, log_params)
         | 
| 208 202 | 
             
                  Timeout::timeout(@connect_timeout, Stomp::Error::SocketOpenTimeout) do
         | 
| 209 203 | 
             
                    tcp_socket = TCPSocket.open(@host, @port)
         | 
| 210 204 | 
             
                  end
         | 
| 211 | 
            -
             | 
| 212 205 | 
             
                  tcp_socket
         | 
| 213 206 | 
             
                end
         | 
| 214 207 |  | 
| @@ -219,15 +212,19 @@ module Stomp | |
| 219 212 | 
             
                    ctx = OpenSSL::SSL::SSLContext.new
         | 
| 220 213 | 
             
                    ctx.verify_mode = OpenSSL::SSL::VERIFY_NONE # Assume for now
         | 
| 221 214 | 
             
                    #
         | 
| 222 | 
            -
                    # Note: if a client uses :ssl => true this  | 
| 215 | 
            +
                    # Note: if a client uses :ssl => true this would result in the gem using
         | 
| 223 216 | 
             
                    # the _default_ Ruby ciphers list.  This is _known_ to fail in later
         | 
| 224 | 
            -
                    # Ruby releases.  The gem  | 
| 225 | 
            -
                    #  | 
| 217 | 
            +
                    # Ruby releases.  The gem now detects :ssl => true, and replaces that
         | 
| 218 | 
            +
                    # with:
         | 
| 226 219 | 
             
                    # * :ssl => Stomp::SSLParams.new
         | 
| 220 | 
            +
                    #
         | 
| 221 | 
            +
                    # The above results in the use of Stomp default parameters.
         | 
| 222 | 
            +
                    #
         | 
| 223 | 
            +
                    # To specifically request Stomp default parameters, use:
         | 
| 227 224 | 
             
                    # * :ssl => Stomp::SSLParams.new(..., :ciphers => Stomp::DEFAULT_CIPHERS)
         | 
| 228 225 | 
             
                    #
         | 
| 229 226 | 
             
                    # If connecting with an SSLParams instance, and the _default_ Ruby
         | 
| 230 | 
            -
                    # ciphers list is required, use:
         | 
| 227 | 
            +
                    # ciphers list is actually required, use:
         | 
| 231 228 | 
             
                    # * :ssl => Stomp::SSLParams.new(..., :use_ruby_ciphers => true)
         | 
| 232 229 | 
             
                    #
         | 
| 233 230 | 
             
                    # If a custom ciphers list is required, connect with:
         | 
| @@ -275,16 +272,15 @@ module Stomp | |
| 275 272 | 
             
                        if @ssl.ciphers # User ciphers list?
         | 
| 276 273 | 
             
                          ctx.ciphers = @ssl.ciphers # Accept user supplied ciphers
         | 
| 277 274 | 
             
                        else
         | 
| 275 | 
            +
                          ctx.ciphers = Stomp::DEFAULT_CIPHERS # Just use Stomp defaults
         | 
| 278 276 | 
             
                        end
         | 
| 279 277 | 
             
                      end
         | 
| 280 278 | 
             
                    end
         | 
| 281 279 |  | 
| 282 280 | 
             
                    #
         | 
| 283 281 | 
             
                    ssl = nil
         | 
| 284 | 
            -
                     | 
| 285 | 
            -
             | 
| 286 | 
            -
                    end
         | 
| 287 | 
            -
             | 
| 282 | 
            +
                    slog(:on_ssl_connecting, log_params)
         | 
| 283 | 
            +
                    # _dump_ctx(ctx)
         | 
| 288 284 | 
             
                    Timeout::timeout(@connect_timeout, Stomp::Error::SocketOpenTimeout) do
         | 
| 289 285 | 
             
                      tcp_socket = TCPSocket.open(@host, @port)
         | 
| 290 286 | 
             
                      ssl = OpenSSL::SSL::SSLSocket.new(tcp_socket, ctx)
         | 
| @@ -304,16 +300,12 @@ module Stomp | |
| 304 300 | 
             
                      end
         | 
| 305 301 | 
             
                      @ssl.peer_cert = ssl.peer_cert
         | 
| 306 302 | 
             
                    end
         | 
| 307 | 
            -
                     | 
| 308 | 
            -
                      @logger.on_ssl_connected(log_params)
         | 
| 309 | 
            -
                    end
         | 
| 303 | 
            +
                    slog(:on_ssl_connected, log_params)
         | 
| 310 304 | 
             
                    ssl
         | 
| 311 305 | 
             
                  rescue Exception => ex
         | 
| 312 | 
            -
                     | 
| 313 | 
            -
             | 
| 314 | 
            -
             | 
| 315 | 
            -
                      @logger.on_ssl_connectfail(lp)
         | 
| 316 | 
            -
                    end
         | 
| 306 | 
            +
                    lp = log_params.clone
         | 
| 307 | 
            +
                    lp[:ssl_exception] = ex
         | 
| 308 | 
            +
                    slog(:on_ssl_connectfail, lp)
         | 
| 317 309 | 
             
                    #
         | 
| 318 310 | 
             
                    raise # Reraise
         | 
| 319 311 | 
             
                  end
         | 
| @@ -401,6 +393,11 @@ module Stomp | |
| 401 393 | 
             
                    line
         | 
| 402 394 | 
             
                end
         | 
| 403 395 |  | 
| 396 | 
            +
                # Used for debugging
         | 
| 397 | 
            +
                def _dump_ctx(ctx)
         | 
| 398 | 
            +
                  p [ "dc01", ctx.inspect ]
         | 
| 399 | 
            +
                  p [ "dc02ciphers", ctx.ciphers ]
         | 
| 400 | 
            +
                end
         | 
| 404 401 | 
             
              end # class Connection
         | 
| 405 402 |  | 
| 406 403 | 
             
            end # module Stomp
         | 
    
        data/lib/connection/utils.rb
    CHANGED
    
    | @@ -116,9 +116,7 @@ module Stomp | |
| 116 116 | 
             
                        used_socket = open_socket() # sets @closed = false if OK
         | 
| 117 117 | 
             
                        # Open is complete
         | 
| 118 118 | 
             
                        connect(used_socket)
         | 
| 119 | 
            -
                         | 
| 120 | 
            -
                          @logger.on_connected(log_params)
         | 
| 121 | 
            -
                        end
         | 
| 119 | 
            +
                        slog(:on_connected, log_params)
         | 
| 122 120 | 
             
                        @connection_attempts = 0
         | 
| 123 121 | 
             
                      rescue
         | 
| 124 122 | 
             
                        @failure = $!
         | 
| @@ -132,20 +130,16 @@ module Stomp | |
| 132 130 | 
             
                        # b) should never be retried
         | 
| 133 131 | 
             
                        raise if @failure.is_a?(Stomp::Error::ProtocolError11p)
         | 
| 134 132 |  | 
| 135 | 
            -
                         | 
| 136 | 
            -
                           | 
| 137 | 
            -
             | 
| 138 | 
            -
                            @logger.on_connectfail(log_params)
         | 
| 139 | 
            -
                          rescue Exception => aex
         | 
| 140 | 
            -
                            raise if aex.is_a?(Stomp::Error::LoggerConnectionError)
         | 
| 133 | 
            +
                        begin
         | 
| 134 | 
            +
                          unless slog(:on_connectfail,log_params)
         | 
| 135 | 
            +
                            $stderr.print "connect to #{@host} failed: #{$!} will retry(##{@connection_attempts}) in #{@reconnect_delay}\n"
         | 
| 141 136 | 
             
                          end
         | 
| 142 | 
            -
                         | 
| 143 | 
            -
                           | 
| 137 | 
            +
                        rescue Exception => aex
         | 
| 138 | 
            +
                          raise if aex.is_a?(Stomp::Error::LoggerConnectionError)
         | 
| 144 139 | 
             
                        end
         | 
| 145 | 
            -
                        raise Stomp::Error::MaxReconnectAttempts if max_reconnect_attempts?
         | 
| 146 140 |  | 
| 141 | 
            +
                        raise Stomp::Error::MaxReconnectAttempts if max_reconnect_attempts?
         | 
| 147 142 | 
             
                        sleep(@reconnect_delay)
         | 
| 148 | 
            -
             | 
| 149 143 | 
             
                        @connection_attempts += 1
         | 
| 150 144 |  | 
| 151 145 | 
             
                        if @parameters
         | 
| @@ -183,7 +177,8 @@ module Stomp | |
| 183 177 | 
             
                    :max_hbrlck_fails => 0,
         | 
| 184 178 | 
             
                    :fast_hbs_adjust => 0.0,
         | 
| 185 179 | 
             
                    :connread_timeout => 0,
         | 
| 186 | 
            -
                    :tcp_nodelay => true
         | 
| 180 | 
            +
                    :tcp_nodelay => true,
         | 
| 181 | 
            +
                    :start_timeout => 10,
         | 
| 187 182 | 
             
                  }
         | 
| 188 183 |  | 
| 189 184 | 
             
                  res_params = default_params.merge(params)
         | 
| @@ -208,6 +203,18 @@ module Stomp | |
| 208 203 | 
             
                  @passcode = current_host[:passcode] || ""
         | 
| 209 204 | 
             
                end
         | 
| 210 205 |  | 
| 206 | 
            +
                # Duplicate parameters hash
         | 
| 207 | 
            +
                def _hdup(h)
         | 
| 208 | 
            +
                  ldup = {}
         | 
| 209 | 
            +
                  ldup.merge!(h)
         | 
| 210 | 
            +
                  ldup[:hosts] = []
         | 
| 211 | 
            +
                  hvals = h[:hosts].nil? ? h["hosts"] : h[:hosts]
         | 
| 212 | 
            +
                  hvals.each do |hv|
         | 
| 213 | 
            +
                    ldup[:hosts] << hv.dup
         | 
| 214 | 
            +
                  end
         | 
| 215 | 
            +
                  ldup
         | 
| 216 | 
            +
                end
         | 
| 217 | 
            +
             | 
| 211 218 | 
             
                # max_reconnect_attempts? returns nil or the number of maximum reconnect
         | 
| 212 219 | 
             
                # attempts.
         | 
| 213 220 | 
             
                def max_reconnect_attempts?
         | 
| @@ -237,9 +244,7 @@ module Stomp | |
| 237 244 | 
             
                      @failure = $!
         | 
| 238 245 | 
             
                      raise unless @reliable
         | 
| 239 246 | 
             
                      errstr = "receive failed: #{$!}"
         | 
| 240 | 
            -
                       | 
| 241 | 
            -
                        @logger.on_miscerr(log_params, "es_oldrecv: " + errstr)
         | 
| 242 | 
            -
                      else
         | 
| 247 | 
            +
                      unless slog(:on_miscerr, log_params, "es_oldrecv: " + errstr)
         | 
| 243 248 | 
             
                        $stderr.print errstr
         | 
| 244 249 | 
             
                      end
         | 
| 245 250 |  | 
    
        data/lib/stomp/client.rb
    CHANGED
    
    | @@ -50,6 +50,8 @@ module Stomp | |
| 50 50 | 
             
                #     :max_hbrlck_fails => 0,
         | 
| 51 51 | 
             
                #     :fast_hbs_adjust => 0.0,
         | 
| 52 52 | 
             
                #     :connread_timeout => 0,
         | 
| 53 | 
            +
                #     :tcp_nodelay => true,
         | 
| 54 | 
            +
                #     :start_timeout => 10,
         | 
| 53 55 | 
             
                #   }
         | 
| 54 56 | 
             
                #
         | 
| 55 57 | 
             
                #   e.g. c = Stomp::Client.new(hash)
         | 
| @@ -84,10 +86,15 @@ module Stomp | |
| 84 86 | 
             
                  @logger = @parameters[:logger] ||= Stomp::NullLogger.new
         | 
| 85 87 |  | 
| 86 88 | 
             
                  @start_timeout = @parameters[:start_timeout] || 10
         | 
| 87 | 
            -
                   | 
| 88 | 
            -
                     | 
| 89 | 
            -
             | 
| 90 | 
            -
             | 
| 89 | 
            +
                  begin
         | 
| 90 | 
            +
                    timeout(@start_timeout) {
         | 
| 91 | 
            +
                      create_error_handler
         | 
| 92 | 
            +
                      create_connection(autoflush)
         | 
| 93 | 
            +
                      start_listeners()
         | 
| 94 | 
            +
                    }
         | 
| 95 | 
            +
                  rescue TimeoutError
         | 
| 96 | 
            +
                    ex = Stomp::Error::StartTimeoutException.new(@start_timeout)
         | 
| 97 | 
            +
                    raise ex
         | 
| 91 98 | 
             
                  end
         | 
| 92 99 | 
             
                end
         | 
| 93 100 |  | 
| @@ -190,14 +197,8 @@ module Stomp | |
| 190 197 | 
             
                  if block_given?
         | 
| 191 198 | 
             
                    headers['receipt'] = register_receipt_listener lambda {|r| yield r}
         | 
| 192 199 | 
             
                  end
         | 
| 193 | 
            -
                   | 
| 194 | 
            -
             | 
| 195 | 
            -
                  elsif protocol == Stomp::SPL_11
         | 
| 196 | 
            -
                    headers.merge!(:subscription => message.headers['subscription'])
         | 
| 197 | 
            -
                    @connection.ack(message.headers['message-id'], headers)
         | 
| 198 | 
            -
                  else
         | 
| 199 | 
            -
                    @connection.ack(message.headers['message-id'], headers)
         | 
| 200 | 
            -
                  end
         | 
| 200 | 
            +
                  context = ack_context_for(message, headers)
         | 
| 201 | 
            +
                  @connection.ack context[:message_id], context[:headers]
         | 
| 201 202 | 
             
                end
         | 
| 202 203 |  | 
| 203 204 | 
             
                # For posterity, we alias:
         | 
| @@ -205,7 +206,22 @@ module Stomp | |
| 205 206 |  | 
| 206 207 | 
             
                # Stomp 1.1+ NACK.
         | 
| 207 208 | 
             
                def nack(message, headers = {})
         | 
| 208 | 
            -
                   | 
| 209 | 
            +
                  context = ack_context_for(message, headers)
         | 
| 210 | 
            +
                  @connection.nack context[:message_id], context[:headers]
         | 
| 211 | 
            +
                end
         | 
| 212 | 
            +
             | 
| 213 | 
            +
                #
         | 
| 214 | 
            +
                def ack_context_for(message, headers)
         | 
| 215 | 
            +
                  id = case protocol
         | 
| 216 | 
            +
                    when Stomp::SPL_12
         | 
| 217 | 
            +
                     'ack'
         | 
| 218 | 
            +
                    when Stomp::SPL_11
         | 
| 219 | 
            +
                     headers.merge!(:subscription => message.headers['subscription'])
         | 
| 220 | 
            +
                     'message-id'
         | 
| 221 | 
            +
                    else
         | 
| 222 | 
            +
                     'message-id'
         | 
| 223 | 
            +
                  end
         | 
| 224 | 
            +
                  {:message_id => message.headers[id], :headers => headers}
         | 
| 209 225 | 
             
                end
         | 
| 210 226 |  | 
| 211 227 | 
             
                # Unreceive a message, sending it back to its queue or to the DLQ.
         | 
    
        data/lib/stomp/connection.rb
    CHANGED
    
    | @@ -75,6 +75,8 @@ module Stomp | |
| 75 75 | 
             
                #     :max_hbrlck_fails => 0,
         | 
| 76 76 | 
             
                #     :fast_hbs_adjust => 0.0,
         | 
| 77 77 | 
             
                #     :connread_timeout => 0,
         | 
| 78 | 
            +
                #     :tcp_nodelay => true,
         | 
| 79 | 
            +
                #     :start_timeout => 10,
         | 
| 78 80 | 
             
                #   }
         | 
| 79 81 | 
             
                #
         | 
| 80 82 | 
             
                #   e.g. c = Stomp::Connection.new(hash)
         | 
| @@ -123,6 +125,8 @@ module Stomp | |
| 123 125 | 
             
                    @max_hbrlck_fails = 0 # 0 means never retry for HB read lock failures
         | 
| 124 126 | 
             
                    @fast_hbs_adjust = 0.0 # Fast heartbeat senders sleep adjustment
         | 
| 125 127 | 
             
                    @connread_timeout = 0 # Connect read CONNECTED/ERROR timeout
         | 
| 128 | 
            +
                    @tcp_nodelay = true # Disable Nagle
         | 
| 129 | 
            +
                    @start_timeout = 10 # Client only, startup timeout
         | 
| 126 130 | 
             
                    warn "login looks like a URL, do you have the correct parameters?" if @login =~ /:\/\//
         | 
| 127 131 | 
             
                  end
         | 
| 128 132 |  | 
| @@ -142,7 +146,8 @@ module Stomp | |
| 142 146 | 
             
                # hashed_initialize prepares a new connection with a Hash of initialization
         | 
| 143 147 | 
             
                # parameters.
         | 
| 144 148 | 
             
                def hashed_initialize(params)
         | 
| 145 | 
            -
                   | 
| 149 | 
            +
                  lp = _hdup(params)
         | 
| 150 | 
            +
                  @parameters = refine_params(lp)
         | 
| 146 151 | 
             
                  @reliable =  @parameters[:reliable]
         | 
| 147 152 | 
             
                  @reconnect_delay = @parameters[:initial_reconnect_delay]
         | 
| 148 153 | 
             
                  @connect_headers = @parameters[:connect_headers]
         | 
| @@ -158,6 +163,13 @@ module Stomp | |
| 158 163 | 
             
                  @max_hbrlck_fails = @parameters[:max_hbrlck_fails]
         | 
| 159 164 | 
             
                  @fast_hbs_adjust = @parameters[:fast_hbs_adjust]
         | 
| 160 165 | 
             
                  @connread_timeout = @parameters[:connread_timeout]
         | 
| 166 | 
            +
                  #
         | 
| 167 | 
            +
                  # Try to support Ruby 1.9.x and 2.x ssl.
         | 
| 168 | 
            +
                  unless defined?(RSpec)
         | 
| 169 | 
            +
                    @parameters[:hosts].each do |ah|
         | 
| 170 | 
            +
                      ah[:ssl] = Stomp::SSLParams.new if ah[:ssl] == true
         | 
| 171 | 
            +
                    end
         | 
| 172 | 
            +
                  end
         | 
| 161 173 | 
             
                  #sets the first host to connect
         | 
| 162 174 | 
             
                  change_host
         | 
| 163 175 | 
             
                end
         | 
| @@ -183,7 +195,7 @@ module Stomp | |
| 183 195 | 
             
                  headers = headers.symbolize_keys
         | 
| 184 196 | 
             
                  headers[:transaction] = name
         | 
| 185 197 | 
             
                  _headerCheck(headers)
         | 
| 186 | 
            -
                   | 
| 198 | 
            +
                  slog(:on_begin, log_params, headers)
         | 
| 187 199 | 
             
                  transmit(Stomp::CMD_BEGIN, headers)
         | 
| 188 200 | 
             
                end
         | 
| 189 201 |  | 
| @@ -214,7 +226,7 @@ module Stomp | |
| 214 226 | 
             
                      headers[:'message-id'] = message_id
         | 
| 215 227 | 
             
                  end
         | 
| 216 228 | 
             
                  _headerCheck(headers)
         | 
| 217 | 
            -
                   | 
| 229 | 
            +
                  slog(:on_ack, log_params, headers)
         | 
| 218 230 | 
             
                  transmit(Stomp::CMD_ACK, headers)
         | 
| 219 231 | 
             
                end
         | 
| 220 232 |  | 
| @@ -226,11 +238,11 @@ module Stomp | |
| 226 238 | 
             
                  headers = headers.symbolize_keys
         | 
| 227 239 | 
             
                  case @protocol
         | 
| 228 240 | 
             
                    when Stomp::SPL_12
         | 
| 229 | 
            -
                      # The  | 
| 241 | 
            +
                      # The NACK frame MUST include an id header matching the ack header 
         | 
| 230 242 | 
             
                      # of the MESSAGE being acknowledged.
         | 
| 231 243 | 
             
                      headers[:id] = message_id
         | 
| 232 244 | 
             
                    else # Stomp::SPL_11 only
         | 
| 233 | 
            -
                      #  | 
| 245 | 
            +
                      # NACK has two REQUIRED headers: message-id, which MUST contain a value 
         | 
| 234 246 | 
             
                      # matching the message-id for the MESSAGE being acknowledged and 
         | 
| 235 247 | 
             
                      # subscription, which MUST be set to match the value of the subscription's 
         | 
| 236 248 | 
             
                      # id header.
         | 
| @@ -238,7 +250,7 @@ module Stomp | |
| 238 250 | 
             
                      raise Stomp::Error::SubscriptionRequiredError unless headers[:subscription]
         | 
| 239 251 | 
             
                  end
         | 
| 240 252 | 
             
                  _headerCheck(headers)
         | 
| 241 | 
            -
                   | 
| 253 | 
            +
                  slog(:on_nack, log_params, headers)
         | 
| 242 254 | 
             
                  transmit(Stomp::CMD_NACK, headers)
         | 
| 243 255 | 
             
                end
         | 
| 244 256 |  | 
| @@ -248,7 +260,7 @@ module Stomp | |
| 248 260 | 
             
                  headers = headers.symbolize_keys
         | 
| 249 261 | 
             
                  headers[:transaction] = name
         | 
| 250 262 | 
             
                  _headerCheck(headers)
         | 
| 251 | 
            -
                   | 
| 263 | 
            +
                  slog(:on_commit, log_params, headers)
         | 
| 252 264 | 
             
                  transmit(Stomp::CMD_COMMIT, headers)
         | 
| 253 265 | 
             
                end
         | 
| 254 266 |  | 
| @@ -258,7 +270,7 @@ module Stomp | |
| 258 270 | 
             
                  headers = headers.symbolize_keys
         | 
| 259 271 | 
             
                  headers[:transaction] = name
         | 
| 260 272 | 
             
                  _headerCheck(headers)
         | 
| 261 | 
            -
                   | 
| 273 | 
            +
                  slog(:on_abort, log_params, headers)
         | 
| 262 274 | 
             
                  transmit(Stomp::CMD_ABORT, headers)
         | 
| 263 275 | 
             
                end
         | 
| 264 276 |  | 
| @@ -273,7 +285,7 @@ module Stomp | |
| 273 285 | 
             
                    headers[:id] = subId if headers[:id].nil?
         | 
| 274 286 | 
             
                  end
         | 
| 275 287 | 
             
                  _headerCheck(headers)
         | 
| 276 | 
            -
                   | 
| 288 | 
            +
                  slog(:on_subscribe, log_params, headers)
         | 
| 277 289 |  | 
| 278 290 | 
             
                  # Store the subscription so that we can replay if we reconnect.
         | 
| 279 291 | 
             
                  if @reliable
         | 
| @@ -296,7 +308,7 @@ module Stomp | |
| 296 308 | 
             
                    headers[:id] = subId unless headers[:id]
         | 
| 297 309 | 
             
                  end
         | 
| 298 310 | 
             
                  _headerCheck(headers)
         | 
| 299 | 
            -
                   | 
| 311 | 
            +
                  slog(:on_unsubscribe, log_params, headers)
         | 
| 300 312 | 
             
                  transmit(Stomp::CMD_UNSUBSCRIBE, headers)
         | 
| 301 313 | 
             
                  if @reliable
         | 
| 302 314 | 
             
                    subId = dest if subId.nil?
         | 
| @@ -312,7 +324,7 @@ module Stomp | |
| 312 324 | 
             
                  headers = headers.symbolize_keys
         | 
| 313 325 | 
             
                  headers[:destination] = destination
         | 
| 314 326 | 
             
                  _headerCheck(headers)
         | 
| 315 | 
            -
                   | 
| 327 | 
            +
                  slog(:on_publish, log_params, message, headers)
         | 
| 316 328 | 
             
                  transmit(Stomp::CMD_SEND, headers, message)
         | 
| 317 329 | 
             
                end
         | 
| 318 330 |  | 
| @@ -375,7 +387,7 @@ module Stomp | |
| 375 387 | 
             
                  end
         | 
| 376 388 | 
             
                  transmit(Stomp::CMD_DISCONNECT, headers)
         | 
| 377 389 | 
             
                  @disconnect_receipt = receive if headers[:receipt]
         | 
| 378 | 
            -
                   | 
| 390 | 
            +
                  slog(:on_disconnect, log_params)
         | 
| 379 391 | 
             
                  close_socket
         | 
| 380 392 | 
             
                end
         | 
| 381 393 |  | 
| @@ -398,7 +410,7 @@ module Stomp | |
| 398 410 | 
             
                  super_result = __old_receive()
         | 
| 399 411 | 
             
                  if super_result.nil? && @reliable && !closed?
         | 
| 400 412 | 
             
                    errstr = "connection.receive returning EOF as nil - resetting connection.\n"
         | 
| 401 | 
            -
                     | 
| 413 | 
            +
                    slog(:on_miscerr, log_params, "es_recv: " + errstr)
         | 
| 402 414 | 
             
                    $stderr.print errstr
         | 
| 403 415 |  | 
| 404 416 | 
             
                    # !!! This initiates a re-connect !!!
         | 
| @@ -417,7 +429,7 @@ module Stomp | |
| 417 429 | 
             
                    @closed = true
         | 
| 418 430 | 
             
                    warn 'warning: broker sent EOF, and connection not reliable' unless defined?(Test)
         | 
| 419 431 | 
             
                  end
         | 
| 420 | 
            -
                   | 
| 432 | 
            +
                  slog(:on_receive, log_params, super_result)
         | 
| 421 433 | 
             
                  return super_result
         | 
| 422 434 | 
             
                end
         | 
| 423 435 |  | 
| @@ -480,6 +492,13 @@ module Stomp | |
| 480 492 | 
             
                  @hbrecv_count
         | 
| 481 493 | 
             
                end
         | 
| 482 494 |  | 
| 495 | 
            +
                # log call router
         | 
| 496 | 
            +
                def slog(name, *parms)
         | 
| 497 | 
            +
                  return false unless @logger
         | 
| 498 | 
            +
                  @logger.send(name, *parms) if @logger.respond_to?(:"#{name}")
         | 
| 499 | 
            +
                  @logger.respond_to?(:"#{name}")
         | 
| 500 | 
            +
                end
         | 
| 501 | 
            +
             | 
| 483 502 | 
             
              end # class
         | 
| 484 503 |  | 
| 485 504 | 
             
            end # module
         | 
    
        data/lib/stomp/constants.rb
    CHANGED
    
    | @@ -90,25 +90,89 @@ module Stomp | |
| 90 90 |  | 
| 91 91 | 
             
              # A fairly safe and generally supported ciphers list.
         | 
| 92 92 | 
             
              DEFAULT_CIPHERS = [
         | 
| 93 | 
            -
                [" | 
| 94 | 
            -
                [" | 
| 95 | 
            -
                [" | 
| 96 | 
            -
                [" | 
| 97 | 
            -
                [" | 
| 98 | 
            -
                [" | 
| 99 | 
            -
                [" | 
| 100 | 
            -
                [" | 
| 101 | 
            -
                [" | 
| 102 | 
            -
                [" | 
| 103 | 
            -
                [" | 
| 104 | 
            -
                [" | 
| 93 | 
            +
                ["AES128-GCM-SHA256","TLSv1/SSLv3",128,128],
         | 
| 94 | 
            +
                ["AES128-SHA256","TLSv1/SSLv3",128,128],
         | 
| 95 | 
            +
                ["AES128-SHA","TLSv1/SSLv3",128,128],
         | 
| 96 | 
            +
                ["AES256-GCM-SHA384","TLSv1/SSLv3",256,256],
         | 
| 97 | 
            +
                ["AES256-SHA256","TLSv1/SSLv3",256,256],
         | 
| 98 | 
            +
                ["AES256-SHA","TLSv1/SSLv3",256,256],
         | 
| 99 | 
            +
                ["CAMELLIA128-SHA","TLSv1/SSLv3",128,128],
         | 
| 100 | 
            +
                ["CAMELLIA256-SHA","TLSv1/SSLv3",256,256],
         | 
| 101 | 
            +
                ["DES-CBC3-SHA","TLSv1/SSLv3",168,168],
         | 
| 102 | 
            +
                ["DES-CBC-SHA","TLSv1/SSLv3",56,56],
         | 
| 103 | 
            +
                ["DHE-DSS-AES128-GCM-SHA256","TLSv1/SSLv3",128,128],
         | 
| 104 | 
            +
                ["DHE-DSS-AES128-SHA256","TLSv1/SSLv3",128,128],
         | 
| 105 | 
            +
                ["DHE-DSS-AES128-SHA","TLSv1/SSLv3",128,128],
         | 
| 106 | 
            +
                ["DHE-DSS-AES256-GCM-SHA384","TLSv1/SSLv3",256,256],
         | 
| 107 | 
            +
                ["DHE-DSS-AES256-SHA256","TLSv1/SSLv3",256,256],
         | 
| 108 | 
            +
                ["DHE-DSS-AES256-SHA","TLSv1/SSLv3",256,256],
         | 
| 109 | 
            +
                ["DHE-DSS-CAMELLIA128-SHA","TLSv1/SSLv3",128,128],
         | 
| 110 | 
            +
                ["DHE-DSS-CAMELLIA256-SHA","TLSv1/SSLv3",256,256],
         | 
| 111 | 
            +
                ["DHE-DSS-SEED-SHA","TLSv1/SSLv3",128,128],
         | 
| 112 | 
            +
                ["DHE-RSA-AES128-GCM-SHA256","TLSv1/SSLv3",128,128],
         | 
| 113 | 
            +
                ["DHE-RSA-AES128-SHA256","TLSv1/SSLv3",128,128],
         | 
| 114 | 
            +
                ["DHE-RSA-AES128-SHA","TLSv1/SSLv3",128,128],
         | 
| 115 | 
            +
                ["DHE-RSA-AES256-GCM-SHA384","TLSv1/SSLv3",256,256],
         | 
| 116 | 
            +
                ["DHE-RSA-AES256-SHA256","TLSv1/SSLv3",256,256],
         | 
| 117 | 
            +
                ["DHE-RSA-AES256-SHA","TLSv1/SSLv3",256,256],
         | 
| 118 | 
            +
                ["DHE-RSA-CAMELLIA128-SHA","TLSv1/SSLv3",128,128],
         | 
| 119 | 
            +
                ["DHE-RSA-CAMELLIA256-SHA","TLSv1/SSLv3",256,256],
         | 
| 120 | 
            +
                ["DHE-RSA-SEED-SHA","TLSv1/SSLv3",128,128],
         | 
| 121 | 
            +
                ["ECDH-ECDSA-AES128-GCM-SHA256","TLSv1/SSLv3",128,128],
         | 
| 122 | 
            +
                ["ECDH-ECDSA-AES128-SHA256","TLSv1/SSLv3",128,128],
         | 
| 123 | 
            +
                ["ECDH-ECDSA-AES128-SHA","TLSv1/SSLv3",128,128],
         | 
| 124 | 
            +
                ["ECDH-ECDSA-AES256-GCM-SHA384","TLSv1/SSLv3",256,256],
         | 
| 125 | 
            +
                ["ECDH-ECDSA-AES256-SHA384","TLSv1/SSLv3",256,256],
         | 
| 126 | 
            +
                ["ECDH-ECDSA-AES256-SHA","TLSv1/SSLv3",256,256],
         | 
| 127 | 
            +
                ["ECDH-ECDSA-DES-CBC3-SHA","TLSv1/SSLv3",168,168],
         | 
| 128 | 
            +
                ["ECDH-ECDSA-RC4-SHA","TLSv1/SSLv3",128,128],
         | 
| 129 | 
            +
                ["ECDHE-ECDSA-AES128-GCM-SHA256","TLSv1/SSLv3",128,128],
         | 
| 130 | 
            +
                ["ECDHE-ECDSA-AES128-SHA256","TLSv1/SSLv3",128,128],
         | 
| 131 | 
            +
                ["ECDHE-ECDSA-AES128-SHA","TLSv1/SSLv3",128,128],
         | 
| 132 | 
            +
                ["ECDHE-ECDSA-AES256-GCM-SHA384","TLSv1/SSLv3",256,256],
         | 
| 133 | 
            +
                ["ECDHE-ECDSA-AES256-SHA384","TLSv1/SSLv3",256,256],
         | 
| 134 | 
            +
                ["ECDHE-ECDSA-AES256-SHA","TLSv1/SSLv3",256,256],
         | 
| 135 | 
            +
                ["ECDHE-ECDSA-DES-CBC3-SHA","TLSv1/SSLv3",168,168],
         | 
| 136 | 
            +
                ["ECDHE-ECDSA-RC4-SHA","TLSv1/SSLv3",128,128],
         | 
| 137 | 
            +
                ["ECDHE-RSA-AES128-GCM-SHA256","TLSv1/SSLv3",128,128],
         | 
| 138 | 
            +
                ["ECDHE-RSA-AES128-SHA256","TLSv1/SSLv3",128,128],
         | 
| 139 | 
            +
                ["ECDHE-RSA-AES128-SHA","TLSv1/SSLv3",128,128],
         | 
| 140 | 
            +
                ["ECDHE-RSA-AES256-GCM-SHA384","TLSv1/SSLv3",256,256],
         | 
| 141 | 
            +
                ["ECDHE-RSA-AES256-SHA384","TLSv1/SSLv3",256,256],
         | 
| 142 | 
            +
                ["ECDHE-RSA-AES256-SHA","TLSv1/SSLv3",256,256],
         | 
| 143 | 
            +
                ["ECDHE-RSA-DES-CBC3-SHA","TLSv1/SSLv3",168,168],
         | 
| 144 | 
            +
                ["ECDHE-RSA-RC4-SHA","TLSv1/SSLv3",128,128],
         | 
| 145 | 
            +
                ["ECDH-RSA-AES128-GCM-SHA256","TLSv1/SSLv3",128,128],
         | 
| 146 | 
            +
                ["ECDH-RSA-AES128-SHA256","TLSv1/SSLv3",128,128],
         | 
| 147 | 
            +
                ["ECDH-RSA-AES128-SHA","TLSv1/SSLv3",128,128],
         | 
| 148 | 
            +
                ["ECDH-RSA-AES256-GCM-SHA384","TLSv1/SSLv3",256,256],
         | 
| 149 | 
            +
                ["ECDH-RSA-AES256-SHA384","TLSv1/SSLv3",256,256],
         | 
| 150 | 
            +
                ["ECDH-RSA-AES256-SHA","TLSv1/SSLv3",256,256],
         | 
| 151 | 
            +
                ["ECDH-RSA-DES-CBC3-SHA","TLSv1/SSLv3",168,168],
         | 
| 152 | 
            +
                ["ECDH-RSA-RC4-SHA","TLSv1/SSLv3",128,128],
         | 
| 153 | 
            +
                ["EDH-DSS-DES-CBC3-SHA","TLSv1/SSLv3",168,168],
         | 
| 105 154 | 
             
                ["EDH-DSS-DES-CBC-SHA", "TLSv1/SSLv3", 56, 56],
         | 
| 106 | 
            -
                ["DES-CBC-SHA", | 
| 107 | 
            -
                [" | 
| 108 | 
            -
                [" | 
| 109 | 
            -
                ["EXP-DES-CBC-SHA", | 
| 110 | 
            -
                ["EXP- | 
| 155 | 
            +
                ["EDH-DSS-DES-CBC-SHA","TLSv1/SSLv3",56,56],
         | 
| 156 | 
            +
                ["EDH-RSA-DES-CBC3-SHA","TLSv1/SSLv3",168,168],
         | 
| 157 | 
            +
                ["EDH-RSA-DES-CBC-SHA","TLSv1/SSLv3",56,56],
         | 
| 158 | 
            +
                ["EXP-DES-CBC-SHA","TLSv1/SSLv3",40,56],
         | 
| 159 | 
            +
                ["EXP-EDH-DSS-DES-CBC-SHA","TLSv1/SSLv3",40,56],
         | 
| 160 | 
            +
                ["EXP-EDH-RSA-DES-CBC-SHA","TLSv1/SSLv3",40,56],
         | 
| 161 | 
            +
                ["EXP-RC2-CBC-MD5","TLSv1/SSLv3",40,128],
         | 
| 111 162 | 
             
                ["EXP-RC4-MD5", "TLSv1/SSLv3", 40, 128],
         | 
| 163 | 
            +
                ["PSK-3DES-EDE-CBC-SHA","TLSv1/SSLv3",168,168],
         | 
| 164 | 
            +
                ["PSK-AES128-CBC-SHA","TLSv1/SSLv3",128,128],
         | 
| 165 | 
            +
                ["PSK-AES256-CBC-SHA","TLSv1/SSLv3",256,256],
         | 
| 166 | 
            +
                ["PSK-RC4-SHA","TLSv1/SSLv3",128,128],
         | 
| 167 | 
            +
                ["RC4-MD5","TLSv1/SSLv3",128,128],
         | 
| 168 | 
            +
                ["RC4-SHA","TLSv1/SSLv3",128,128],
         | 
| 169 | 
            +
                ["SEED-SHA","TLSv1/SSLv3",128,128],
         | 
| 170 | 
            +
                ["SRP-DSS-3DES-EDE-CBC-SHA","TLSv1/SSLv3",168,168],
         | 
| 171 | 
            +
                ["SRP-DSS-AES-128-CBC-SHA","TLSv1/SSLv3",128,128],
         | 
| 172 | 
            +
                ["SRP-DSS-AES-256-CBC-SHA","TLSv1/SSLv3",256,256],
         | 
| 173 | 
            +
                ["SRP-RSA-3DES-EDE-CBC-SHA","TLSv1/SSLv3",168,168],
         | 
| 174 | 
            +
                ["SRP-RSA-AES-128-CBC-SHA","TLSv1/SSLv3",128,128],
         | 
| 175 | 
            +
                ["SRP-RSA-AES-256-CBC-SHA","TLSv1/SSLv3",256,256],
         | 
| 112 176 | 
             
              ]
         | 
| 113 177 |  | 
| 114 178 | 
             
              # stomp URL regex pattern, for e.g. login:passcode@host:port or host:port
         |