protocol-websocket 0.3.2 → 0.4.0
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.
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 6dbf808fd6d8859dccb3ce6b8e9578ec62fbb9f2530aa1adc809d0143e16141e
         | 
| 4 | 
            +
              data.tar.gz: d674db6e338b18db74b8a170aa81980d609a9c4ae235921c4a87a188a333654a
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 3fe42aa9dabd6965081a86b9eae2b9deffcff628ef4081c48ed3b53b33854a1782deffde2cb84a91f9ec1d5acd69dc38b2e36c82390cd0ea55b49eac431a0908
         | 
| 7 | 
            +
              data.tar.gz: d60e9344e0f386a158549bc1e8a332a5ef4b3e7adc934ffde273dfed73def85a3fd994f4d58e0bddbcfba42cee2fcb7250aa1b4afe0ba9df29721d9ff5be0285
         | 
| @@ -23,14 +23,21 @@ require_relative 'framer' | |
| 23 23 | 
             
            module Protocol
         | 
| 24 24 | 
             
            	module WebSocket
         | 
| 25 25 | 
             
            		class Connection
         | 
| 26 | 
            -
            			 | 
| 26 | 
            +
            			# @option mask [String] 4-byte mask to be used for frames generated by this connection.
         | 
| 27 | 
            +
            			def initialize(framer, mask: nil)
         | 
| 27 28 | 
             
            				@framer = framer
         | 
| 29 | 
            +
            				@mask = mask
         | 
| 30 | 
            +
            				
         | 
| 28 31 | 
             
            				@state = :open
         | 
| 29 32 | 
             
            				@frames = []
         | 
| 30 33 | 
             
            			end
         | 
| 31 34 |  | 
| 35 | 
            +
            			# The framer which is used for reading and writing frames.
         | 
| 32 36 | 
             
            			attr :framer
         | 
| 33 37 |  | 
| 38 | 
            +
            			# The (optional) mask which is used when generating frames.
         | 
| 39 | 
            +
            			attr :mask
         | 
| 40 | 
            +
            			
         | 
| 34 41 | 
             
            			# Buffered frames which form part of a complete message.
         | 
| 35 42 | 
             
            			attr_accessor :frames
         | 
| 36 43 |  | 
| @@ -97,21 +104,21 @@ module Protocol | |
| 97 104 | 
             
            			end
         | 
| 98 105 |  | 
| 99 106 | 
             
            			def send_text(buffer)
         | 
| 100 | 
            -
            				frame = TextFrame.new
         | 
| 107 | 
            +
            				frame = TextFrame.new(mask: @mask)
         | 
| 101 108 | 
             
            				frame.pack buffer
         | 
| 102 109 |  | 
| 103 110 | 
             
            				write_frame(frame)
         | 
| 104 111 | 
             
            			end
         | 
| 105 112 |  | 
| 106 113 | 
             
            			def send_binary(buffer)
         | 
| 107 | 
            -
            				frame = BinaryFrame.new
         | 
| 114 | 
            +
            				frame = BinaryFrame.new(mask: @mask)
         | 
| 108 115 | 
             
            				frame.pack buffer
         | 
| 109 116 |  | 
| 110 117 | 
             
            				write_frame(frame)
         | 
| 111 118 | 
             
            			end
         | 
| 112 119 |  | 
| 113 120 | 
             
            			def send_close(code = Error::NO_ERROR, message = nil)
         | 
| 114 | 
            -
            				frame = CloseFrame.new
         | 
| 121 | 
            +
            				frame = CloseFrame.new(mask: @mask)
         | 
| 115 122 | 
             
            				frame.pack(code, message)
         | 
| 116 123 |  | 
| 117 124 | 
             
            				write_frame(frame)
         | 
| @@ -131,8 +138,8 @@ module Protocol | |
| 131 138 |  | 
| 132 139 | 
             
            			def send_ping(data)
         | 
| 133 140 | 
             
            				if @state != :closed
         | 
| 134 | 
            -
            					frame = PingFrame.new
         | 
| 135 | 
            -
            					frame.pack | 
| 141 | 
            +
            					frame = PingFrame.new(mask: @mask)
         | 
| 142 | 
            +
            					frame.pack(data)
         | 
| 136 143 |  | 
| 137 144 | 
             
            					write_frame(frame)
         | 
| 138 145 | 
             
            				else
         | 
| @@ -28,7 +28,7 @@ module Protocol | |
| 28 28 | 
             
            			OPCODE = 0
         | 
| 29 29 |  | 
| 30 30 | 
             
            			# @param length [Integer] the length of the payload, or nil if the header has not been read yet.
         | 
| 31 | 
            -
            			def initialize(finished = true,  | 
| 31 | 
            +
            			def initialize(finished = true, payload = nil, opcode: self.class::OPCODE, mask: false)
         | 
| 32 32 | 
             
            				@finished = finished
         | 
| 33 33 | 
             
            				@opcode = opcode
         | 
| 34 34 | 
             
            				@mask = mask
         | 
| @@ -83,19 +83,21 @@ module Protocol | |
| 83 83 | 
             
            			attr_accessor :length
         | 
| 84 84 | 
             
            			attr_accessor :payload
         | 
| 85 85 |  | 
| 86 | 
            -
            			def pack(data | 
| 86 | 
            +
            			def pack(data)
         | 
| 87 87 | 
             
            				length = data.bytesize
         | 
| 88 88 |  | 
| 89 89 | 
             
            				if length.bit_length > 63
         | 
| 90 90 | 
             
            					raise ProtocolError, "Frame length #{@length} bigger than allowed maximum!"
         | 
| 91 91 | 
             
            				end
         | 
| 92 92 |  | 
| 93 | 
            -
            				if @mask | 
| 93 | 
            +
            				if @mask
         | 
| 94 94 | 
             
            					@payload = String.new.b
         | 
| 95 95 |  | 
| 96 96 | 
             
            					for i in 0...data.bytesize do
         | 
| 97 97 | 
             
            						@payload << (data.getbyte(i) ^ mask.getbyte(i % 4))
         | 
| 98 98 | 
             
            					end
         | 
| 99 | 
            +
            					
         | 
| 100 | 
            +
            					@length = length
         | 
| 99 101 | 
             
            				else
         | 
| 100 102 | 
             
            					@payload = data
         | 
| 101 103 | 
             
            					@length = length
         | 
| @@ -159,14 +161,14 @@ module Protocol | |
| 159 161 | 
             
            					raise EOFError, "Incorrect payload length: #{@length} != #{@payload.bytesize}!"
         | 
| 160 162 | 
             
            				end
         | 
| 161 163 |  | 
| 162 | 
            -
            				return self.new(finished, opcode, mask | 
| 164 | 
            +
            				return self.new(finished, payload, opcode: opcode, mask: mask)
         | 
| 163 165 | 
             
            			end
         | 
| 164 166 |  | 
| 165 167 | 
             
            			def write(stream)
         | 
| 166 168 | 
             
            				buffer = String.new.b
         | 
| 167 169 |  | 
| 168 170 | 
             
            				if @payload&.bytesize != @length
         | 
| 169 | 
            -
            					raise ProtocolError, "Invalid payload length: #{@length} != #{@payload.bytesize}!"
         | 
| 171 | 
            +
            					raise ProtocolError, "Invalid payload length: #{@length} != #{@payload.bytesize} for #{self}!"
         | 
| 170 172 | 
             
            				end
         | 
| 171 173 |  | 
| 172 174 | 
             
            				if @mask and @mask.bytesize != 4
         | 
| @@ -192,6 +194,8 @@ module Protocol | |
| 192 194 | 
             
            					buffer << [@length].pack('Q>')
         | 
| 193 195 | 
             
            				end
         | 
| 194 196 |  | 
| 197 | 
            +
            				buffer << @mask if @mask
         | 
| 198 | 
            +
            				
         | 
| 195 199 | 
             
            				stream.write(buffer)
         | 
| 196 200 | 
             
            				stream.write(@payload)
         | 
| 197 201 | 
             
            			end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: protocol-websocket
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0. | 
| 4 | 
            +
              version: 0.4.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Samuel Williams
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2019-05- | 
| 11 | 
            +
            date: 2019-05-12 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: protocol-http
         | 
| @@ -140,7 +140,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 140 140 | 
             
                - !ruby/object:Gem::Version
         | 
| 141 141 | 
             
                  version: '0'
         | 
| 142 142 | 
             
            requirements: []
         | 
| 143 | 
            -
            rubygems_version: 3.0. | 
| 143 | 
            +
            rubygems_version: 3.0.2
         | 
| 144 144 | 
             
            signing_key: 
         | 
| 145 145 | 
             
            specification_version: 4
         | 
| 146 146 | 
             
            summary: A low level implementation of the WebSocket protocol.
         |