protocol-websocket 0.7.4 → 0.7.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 519265fe5ebe9530d3ddec6e9bc3836dd0a2af827e377ef4ac7f390f5791f2a9
4
- data.tar.gz: 32a7ab9ab4e4b065ee6b0f738396ea575b49da9c8ac927ee38da8afa1ab595fb
3
+ metadata.gz: 0d2733227a287e2dfb58f393566e6afea44470aba32c7a8eda8bd9a8f25c2d72
4
+ data.tar.gz: bdd0966fcc837f1314cf2b88e55699f2de57e6d6af36ecbe3bcdf0c12350935a
5
5
  SHA512:
6
- metadata.gz: 5f5e59c42893bf46ba3581f4a44952c919b56d94db139b558fd6fafa3d4c360d52d58741da99fb456afe72fb8679c27a4f22eaf551b014b4e774dd5cb31f39ff
7
- data.tar.gz: '08611be52a6cbbfb10ec656bf820bc3241afb626de9aa9fb2ce19f9efa21e3d5f38bfe6f5f1b86f7ec184355bd236505469705559d7e234c4d3a8f04d5b536fa'
6
+ metadata.gz: a3fdd8546a648fa96663aafe278499e3a19266d1dfd9d2c68cd6d330f24c8af7d31ee94fd88c632a4bddec85dd56456980bf5a27d02197548279e069eae3d515
7
+ data.tar.gz: 2b4faa47644b9811dab2d856831176b282c83df85863fad5db5a7b28055b123230ac89ae2e29eb3529843fec12d80ec11f26b2894ca85a2f243eef2d09bf10fb
@@ -24,12 +24,8 @@ require 'securerandom'
24
24
  module Protocol
25
25
  module WebSocket
26
26
  class Connection
27
- # @option mask [String] 4-byte mask to be used for frames generated by this connection.
27
+ # @parameter mask [String] 4-byte mask to be used for frames generated by this connection.
28
28
  def initialize(framer, mask: nil)
29
- if mask == true
30
- mask = SecureRandom.bytes(4)
31
- end
32
-
33
29
  @framer = framer
34
30
  @mask = mask
35
31
 
@@ -82,6 +78,8 @@ module Protocol
82
78
 
83
79
  def write_frame(frame)
84
80
  @framer.write_frame(frame)
81
+
82
+ return frame
85
83
  end
86
84
 
87
85
  def receive_text(frame)
@@ -161,7 +159,7 @@ module Protocol
161
159
 
162
160
  def receive_ping(frame)
163
161
  if @state != :closed
164
- write_frame(frame.reply)
162
+ write_frame(frame.reply(mask: @mask))
165
163
  else
166
164
  raise ProtocolError, "Cannot receive ping in state #{@state}"
167
165
  end
@@ -27,8 +27,13 @@ module Protocol
27
27
 
28
28
  OPCODE = 0
29
29
 
30
- # @param length [Integer] the length of the payload, or nil if the header has not been read yet.
30
+ # @parameter length [Integer] The length of the payload, or nil if the header has not been read yet.
31
+ # @parameter mask [Boolean | String] An optional 4-byte string which is used to mask the payload.
31
32
  def initialize(finished = true, payload = nil, opcode: self.class::OPCODE, mask: false)
33
+ if mask == true
34
+ mask = SecureRandom.bytes(4)
35
+ end
36
+
32
37
  @finished = finished
33
38
  @opcode = opcode
34
39
  @mask = mask
@@ -109,7 +114,7 @@ module Protocol
109
114
  end
110
115
 
111
116
  def unpack
112
- if @mask
117
+ if @mask and !@payload.empty?
113
118
  data = String.new.b
114
119
 
115
120
  for i in 0...@payload.bytesize do
@@ -26,8 +26,8 @@ module Protocol
26
26
  class PingFrame < Frame
27
27
  OPCODE = 0x9
28
28
 
29
- def reply
30
- PongFrame.new(true, @payload, mask: @mask)
29
+ def reply(**options)
30
+ PongFrame.new(true, self.unpack, **options)
31
31
  end
32
32
 
33
33
  def apply(connection)
@@ -20,6 +20,6 @@
20
20
 
21
21
  module Protocol
22
22
  module WebSocket
23
- VERSION = "0.7.4"
23
+ VERSION = "0.7.5"
24
24
  end
25
25
  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.7.4
4
+ version: 0.7.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Samuel Williams
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-12-15 00:00:00.000000000 Z
11
+ date: 2020-09-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: protocol-http
@@ -39,7 +39,7 @@ dependencies:
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0.2'
41
41
  - !ruby/object:Gem::Dependency
42
- name: covered
42
+ name: bundler
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - ">="
@@ -53,7 +53,7 @@ dependencies:
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
- name: bundler
56
+ name: covered
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - ">="
@@ -66,20 +66,6 @@ dependencies:
66
66
  - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
- - !ruby/object:Gem::Dependency
70
- name: rake
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - "~>"
74
- - !ruby/object:Gem::Version
75
- version: '10.0'
76
- type: :development
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - "~>"
81
- - !ruby/object:Gem::Version
82
- version: '10.0'
83
69
  - !ruby/object:Gem::Dependency
84
70
  name: rspec
85
71
  requirement: !ruby/object:Gem::Requirement
@@ -94,19 +80,12 @@ dependencies:
94
80
  - - "~>"
95
81
  - !ruby/object:Gem::Version
96
82
  version: '3.0'
97
- description:
83
+ description:
98
84
  email:
99
- - samuel.williams@oriontransfer.co.nz
100
85
  executables: []
101
86
  extensions: []
102
87
  extra_rdoc_files: []
103
88
  files:
104
- - ".gitignore"
105
- - ".rspec"
106
- - ".travis.yml"
107
- - Gemfile
108
- - README.md
109
- - Rakefile
110
89
  - lib/protocol/websocket.rb
111
90
  - lib/protocol/websocket/binary_frame.rb
112
91
  - lib/protocol/websocket/close_frame.rb
@@ -120,12 +99,11 @@ files:
120
99
  - lib/protocol/websocket/pong_frame.rb
121
100
  - lib/protocol/websocket/text_frame.rb
122
101
  - lib/protocol/websocket/version.rb
123
- - protocol-websocket.gemspec
124
102
  homepage: https://github.com/socketry/protocol-websocket
125
103
  licenses:
126
104
  - MIT
127
105
  metadata: {}
128
- post_install_message:
106
+ post_install_message:
129
107
  rdoc_options: []
130
108
  require_paths:
131
109
  - lib
@@ -133,15 +111,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
133
111
  requirements:
134
112
  - - ">="
135
113
  - !ruby/object:Gem::Version
136
- version: '0'
114
+ version: 2.5.0
137
115
  required_rubygems_version: !ruby/object:Gem::Requirement
138
116
  requirements:
139
117
  - - ">="
140
118
  - !ruby/object:Gem::Version
141
119
  version: '0'
142
120
  requirements: []
143
- rubygems_version: 3.0.6
144
- signing_key:
121
+ rubygems_version: 3.1.2
122
+ signing_key:
145
123
  specification_version: 4
146
124
  summary: A low level implementation of the WebSocket protocol.
147
125
  test_files: []
data/.gitignore DELETED
@@ -1,13 +0,0 @@
1
- /.bundle/
2
- /.yardoc
3
- /_yardoc/
4
- /coverage/
5
- /doc/
6
- /pkg/
7
- /spec/reports/
8
- /tmp/
9
-
10
- # rspec failure tracking
11
- .rspec_status
12
- Gemfile.lock
13
- .covered.db
data/.rspec DELETED
@@ -1,3 +0,0 @@
1
- --format documentation
2
- --warnings
3
- --require spec_helper
@@ -1,19 +0,0 @@
1
- language: ruby
2
- dist: xenial
3
- cache: bundler
4
-
5
- matrix:
6
- include:
7
- - rvm: 2.4
8
- - rvm: 2.5
9
- - rvm: 2.6
10
- - rvm: 2.6
11
- env: COVERAGE=PartialSummary,Coveralls
12
- - rvm: truffleruby
13
- - rvm: jruby-head
14
- env: JRUBY_OPTS="--debug -X+O"
15
- - rvm: ruby-head
16
- allow_failures:
17
- - rvm: truffleruby
18
- - rvm: ruby-head
19
- - rvm: jruby-head
data/Gemfile DELETED
@@ -1,4 +0,0 @@
1
- source "https://rubygems.org"
2
-
3
- # Specify your gem's dependencies in protocol-websocket.gemspec
4
- gemspec
data/README.md DELETED
@@ -1,64 +0,0 @@
1
- # Protocol::WebSocket
2
-
3
- Provides a low-level implementation of the WebSocket protocol according to [RFC6455](https://tools.ietf.org/html/rfc6455). It only implements the latest stable version (13).
4
-
5
- [![Build Status](https://travis-ci.com/socketry/protocol-websocket.svg?branch=master)](http://travis-ci.com/socketry/protocol-websocket)
6
-
7
- ## Installation
8
-
9
- Add this line to your application's Gemfile:
10
-
11
- ```ruby
12
- gem 'protocol-websocket'
13
- ```
14
-
15
- And then execute:
16
-
17
- $ bundle
18
-
19
- Or install it yourself as:
20
-
21
- $ gem install protocol-websocket
22
-
23
- ## Usage
24
-
25
- Here is a basic WebSocket client:
26
-
27
- ```ruby
28
- stream = # connect to remote system
29
- framer = Protocol::WebSocket::Framer.new(stream)
30
-
31
- frame = framer.read_frame
32
- ```
33
-
34
- ## Contributing
35
-
36
- 1. Fork it
37
- 2. Create your feature branch (`git checkout -b my-new-feature`)
38
- 3. Commit your changes (`git commit -am 'Add some feature'`)
39
- 4. Push to the branch (`git push origin my-new-feature`)
40
- 5. Create new Pull Request
41
-
42
- ## License
43
-
44
- Released under the MIT license.
45
-
46
- Copyright, 2019, by [Samuel G. D. Williams](http://www.codeotaku.com/samuel-williams).
47
-
48
- Permission is hereby granted, free of charge, to any person obtaining a copy
49
- of this software and associated documentation files (the "Software"), to deal
50
- in the Software without restriction, including without limitation the rights
51
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
52
- copies of the Software, and to permit persons to whom the Software is
53
- furnished to do so, subject to the following conditions:
54
-
55
- The above copyright notice and this permission notice shall be included in
56
- all copies or substantial portions of the Software.
57
-
58
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
59
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
60
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
61
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
62
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
63
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
64
- THE SOFTWARE.
data/Rakefile DELETED
@@ -1,6 +0,0 @@
1
- require "bundler/gem_tasks"
2
- require "rspec/core/rake_task"
3
-
4
- RSpec::Core::RakeTask.new(:spec)
5
-
6
- task :default => :spec
@@ -1,28 +0,0 @@
1
-
2
- require_relative "lib/protocol/websocket/version"
3
-
4
- Gem::Specification.new do |spec|
5
- spec.name = "protocol-websocket"
6
- spec.version = Protocol::WebSocket::VERSION
7
- spec.authors = ["Samuel Williams"]
8
- spec.email = ["samuel.williams@oriontransfer.co.nz"]
9
-
10
- spec.summary = "A low level implementation of the WebSocket protocol."
11
- spec.homepage = "https://github.com/socketry/protocol-websocket"
12
- spec.license = "MIT"
13
-
14
- spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
15
- `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
16
- end
17
-
18
- spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
19
- spec.require_paths = ["lib"]
20
-
21
- spec.add_dependency "protocol-http", "~> 0.2"
22
- spec.add_dependency "protocol-http1", "~> 0.2"
23
-
24
- spec.add_development_dependency "covered"
25
- spec.add_development_dependency "bundler"
26
- spec.add_development_dependency "rake", "~> 10.0"
27
- spec.add_development_dependency "rspec", "~> 3.0"
28
- end