websocket 1.2.5 → 1.2.7
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 +5 -5
- data/.codeclimate.yml +1 -0
- data/.rubocop.yml +4 -1
- data/.travis.yml +1 -5
- data/CHANGELOG.md +8 -0
- data/Gemfile +5 -3
- data/Rakefile +3 -1
- data/lib/websocket.rb +3 -1
- data/lib/websocket/error.rb +2 -0
- data/lib/websocket/exception_handler.rb +2 -0
- data/lib/websocket/frame.rb +2 -0
- data/lib/websocket/frame/base.rb +2 -0
- data/lib/websocket/frame/data.rb +3 -1
- data/lib/websocket/frame/handler.rb +2 -0
- data/lib/websocket/frame/handler/base.rb +4 -2
- data/lib/websocket/frame/handler/handler03.rb +5 -4
- data/lib/websocket/frame/handler/handler04.rb +1 -0
- data/lib/websocket/frame/handler/handler05.rb +1 -0
- data/lib/websocket/frame/handler/handler07.rb +2 -1
- data/lib/websocket/frame/handler/handler75.rb +2 -1
- data/lib/websocket/frame/incoming.rb +2 -0
- data/lib/websocket/frame/incoming/client.rb +2 -0
- data/lib/websocket/frame/incoming/server.rb +2 -0
- data/lib/websocket/frame/outgoing.rb +2 -0
- data/lib/websocket/frame/outgoing/client.rb +2 -0
- data/lib/websocket/frame/outgoing/server.rb +2 -0
- data/lib/websocket/handshake.rb +2 -0
- data/lib/websocket/handshake/base.rb +12 -3
- data/lib/websocket/handshake/client.rb +2 -0
- data/lib/websocket/handshake/handler.rb +2 -0
- data/lib/websocket/handshake/handler/base.rb +2 -0
- data/lib/websocket/handshake/handler/client.rb +2 -0
- data/lib/websocket/handshake/handler/client01.rb +2 -0
- data/lib/websocket/handshake/handler/client04.rb +4 -2
- data/lib/websocket/handshake/handler/client11.rb +2 -0
- data/lib/websocket/handshake/handler/client75.rb +4 -2
- data/lib/websocket/handshake/handler/client76.rb +4 -2
- data/lib/websocket/handshake/handler/server.rb +2 -0
- data/lib/websocket/handshake/handler/server04.rb +4 -2
- data/lib/websocket/handshake/handler/server75.rb +4 -2
- data/lib/websocket/handshake/handler/server76.rb +2 -0
- data/lib/websocket/handshake/server.rb +2 -0
- data/lib/websocket/nice_inspect.rb +2 -0
- data/lib/websocket/version.rb +3 -1
- data/spec/frame/incoming_03_spec.rb +18 -16
- data/spec/frame/incoming_04_spec.rb +18 -16
- data/spec/frame/incoming_05_spec.rb +20 -18
- data/spec/frame/incoming_07_spec.rb +22 -20
- data/spec/frame/incoming_75_spec.rb +11 -9
- data/spec/frame/incoming_common_spec.rb +1 -0
- data/spec/frame/masking_spec.rb +1 -0
- data/spec/frame/outgoing_03_spec.rb +10 -8
- data/spec/frame/outgoing_04_spec.rb +10 -8
- data/spec/frame/outgoing_05_spec.rb +10 -8
- data/spec/frame/outgoing_07_spec.rb +11 -9
- data/spec/frame/outgoing_75_spec.rb +6 -4
- data/spec/frame/outgoing_common_spec.rb +1 -0
- data/spec/handshake/client_04_spec.rb +6 -4
- data/spec/handshake/client_11_spec.rb +3 -1
- data/spec/handshake/client_75_spec.rb +4 -2
- data/spec/handshake/client_76_spec.rb +4 -2
- data/spec/handshake/server_04_spec.rb +4 -2
- data/spec/handshake/server_75_spec.rb +4 -2
- data/spec/handshake/server_76_spec.rb +4 -2
- data/spec/spec_helper.rb +2 -0
- data/spec/support/all_client_drafts.rb +2 -0
- data/spec/support/all_server_drafts.rb +2 -0
- data/spec/support/frames_base.rb +2 -0
- data/spec/support/handshake_requests.rb +65 -63
- data/spec/support/incoming_frames.rb +2 -0
- data/spec/support/outgoing_frames.rb +2 -0
- data/spec/support/overwrites.rb +2 -0
- data/websocket.gemspec +2 -2
- metadata +3 -3
@@ -1,9 +1,11 @@
|
|
1
1
|
# encoding: binary
|
2
|
+
# frozen_string_literal: true
|
2
3
|
|
3
4
|
require 'spec_helper'
|
4
5
|
|
5
6
|
RSpec.describe 'Outgoing frame draft 07' do
|
6
7
|
subject { frame }
|
8
|
+
|
7
9
|
let(:version) { 7 }
|
8
10
|
let(:frame) { WebSocket::Frame::Outgoing.new(version: version, data: decoded_text, type: frame_type, code: close_code) }
|
9
11
|
let(:decoded_text) { '' }
|
@@ -13,7 +15,7 @@ RSpec.describe 'Outgoing frame draft 07' do
|
|
13
15
|
let(:require_sending) { true }
|
14
16
|
let(:error) { nil }
|
15
17
|
|
16
|
-
|
18
|
+
it_behaves_like 'valid_outgoing_frame'
|
17
19
|
|
18
20
|
context 'should properly encode close frame without close code' do
|
19
21
|
let(:frame_type) { :close }
|
@@ -21,7 +23,7 @@ RSpec.describe 'Outgoing frame draft 07' do
|
|
21
23
|
let(:encoded_text) { "\x88\x07\x03\xE8" + decoded_text }
|
22
24
|
let(:require_sending) { true }
|
23
25
|
|
24
|
-
|
26
|
+
it_behaves_like 'valid_outgoing_frame'
|
25
27
|
end
|
26
28
|
|
27
29
|
context 'should properly encode close frame with close code' do
|
@@ -31,7 +33,7 @@ RSpec.describe 'Outgoing frame draft 07' do
|
|
31
33
|
let(:encoded_text) { "\x88\x07\x03\xE9" + decoded_text }
|
32
34
|
let(:require_sending) { true }
|
33
35
|
|
34
|
-
|
36
|
+
it_behaves_like 'valid_outgoing_frame'
|
35
37
|
end
|
36
38
|
|
37
39
|
context 'should properly encode ping frame' do
|
@@ -40,7 +42,7 @@ RSpec.describe 'Outgoing frame draft 07' do
|
|
40
42
|
let(:encoded_text) { "\x89\x05" + decoded_text }
|
41
43
|
let(:require_sending) { true }
|
42
44
|
|
43
|
-
|
45
|
+
it_behaves_like 'valid_outgoing_frame'
|
44
46
|
end
|
45
47
|
|
46
48
|
context 'should properly encode pong frame' do
|
@@ -49,7 +51,7 @@ RSpec.describe 'Outgoing frame draft 07' do
|
|
49
51
|
let(:encoded_text) { "\x8a\x05" + decoded_text }
|
50
52
|
let(:require_sending) { true }
|
51
53
|
|
52
|
-
|
54
|
+
it_behaves_like 'valid_outgoing_frame'
|
53
55
|
end
|
54
56
|
|
55
57
|
context 'should properly encode text frame' do
|
@@ -57,7 +59,7 @@ RSpec.describe 'Outgoing frame draft 07' do
|
|
57
59
|
let(:encoded_text) { "\x81\x05" + decoded_text }
|
58
60
|
let(:require_sending) { true }
|
59
61
|
|
60
|
-
|
62
|
+
it_behaves_like 'valid_outgoing_frame'
|
61
63
|
end
|
62
64
|
|
63
65
|
context 'should properly encode 256 bytes binary frame' do
|
@@ -66,7 +68,7 @@ RSpec.describe 'Outgoing frame draft 07' do
|
|
66
68
|
let(:encoded_text) { "\x82\x7E\x01\x00" + decoded_text }
|
67
69
|
let(:require_sending) { true }
|
68
70
|
|
69
|
-
|
71
|
+
it_behaves_like 'valid_outgoing_frame'
|
70
72
|
end
|
71
73
|
|
72
74
|
context 'should properly encode 64KiB binary frame' do
|
@@ -75,7 +77,7 @@ RSpec.describe 'Outgoing frame draft 07' do
|
|
75
77
|
let(:encoded_text) { "\x82\x7F\x00\x00\x00\x00\x00\x01\x00\x00" + decoded_text }
|
76
78
|
let(:require_sending) { true }
|
77
79
|
|
78
|
-
|
80
|
+
it_behaves_like 'valid_outgoing_frame'
|
79
81
|
end
|
80
82
|
|
81
83
|
context 'should return error for unknown frame type' do
|
@@ -85,6 +87,6 @@ RSpec.describe 'Outgoing frame draft 07' do
|
|
85
87
|
let(:error) { :unknown_frame_type }
|
86
88
|
let(:require_sending) { false }
|
87
89
|
|
88
|
-
|
90
|
+
it_behaves_like 'valid_outgoing_frame'
|
89
91
|
end
|
90
92
|
end
|
@@ -1,9 +1,11 @@
|
|
1
1
|
# encoding: binary
|
2
|
+
# frozen_string_literal: true
|
2
3
|
|
3
4
|
require 'spec_helper'
|
4
5
|
|
5
6
|
RSpec.describe 'Outgoing frame draft 75' do
|
6
7
|
subject { frame }
|
8
|
+
|
7
9
|
let(:version) { 75 }
|
8
10
|
let(:frame) { WebSocket::Frame::Outgoing.new(version: version, data: decoded_text, type: frame_type) }
|
9
11
|
let(:decoded_text) { '' }
|
@@ -12,14 +14,14 @@ RSpec.describe 'Outgoing frame draft 75' do
|
|
12
14
|
let(:require_sending) { true }
|
13
15
|
let(:error) { nil }
|
14
16
|
|
15
|
-
|
17
|
+
it_behaves_like 'valid_outgoing_frame'
|
16
18
|
|
17
19
|
context 'should properly encode text frame' do
|
18
20
|
let(:decoded_text) { 'abc' }
|
19
21
|
let(:encoded_text) { "\x00abc\xFF" }
|
20
22
|
let(:require_sending) { true }
|
21
23
|
|
22
|
-
|
24
|
+
it_behaves_like 'valid_outgoing_frame'
|
23
25
|
end
|
24
26
|
|
25
27
|
context 'should properly encode close frame' do
|
@@ -28,7 +30,7 @@ RSpec.describe 'Outgoing frame draft 75' do
|
|
28
30
|
let(:encoded_text) { "\xFF\x00" }
|
29
31
|
let(:require_sending) { true }
|
30
32
|
|
31
|
-
|
33
|
+
it_behaves_like 'valid_outgoing_frame'
|
32
34
|
end
|
33
35
|
|
34
36
|
context 'should return error for unknown frame type' do
|
@@ -38,6 +40,6 @@ RSpec.describe 'Outgoing frame draft 75' do
|
|
38
40
|
let(:error) { :unknown_frame_type }
|
39
41
|
let(:require_sending) { false }
|
40
42
|
|
41
|
-
|
43
|
+
it_behaves_like 'valid_outgoing_frame'
|
42
44
|
end
|
43
45
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
|
3
5
|
RSpec.describe 'Client draft 4 handshake' do
|
@@ -7,7 +9,7 @@ RSpec.describe 'Client draft 4 handshake' do
|
|
7
9
|
let(:client_request) { client_handshake_04({ key: handshake.handler.send(:key), version: version }.merge(@request_params || {})) }
|
8
10
|
let(:server_response) { server_handshake_04({ accept: handshake.handler.send(:accept) }.merge(@request_params || {})) }
|
9
11
|
|
10
|
-
|
12
|
+
it_behaves_like 'all client drafts'
|
11
13
|
|
12
14
|
it 'disallows client with invalid challenge' do
|
13
15
|
@request_params = { accept: 'invalid' }
|
@@ -22,7 +24,7 @@ RSpec.describe 'Client draft 4 handshake' do
|
|
22
24
|
let(:handshake) { WebSocket::Handshake::Client.new(uri: 'ws://example.com/demo', origin: 'http://example.com', version: version, protocols: protocols) }
|
23
25
|
|
24
26
|
context 'single protocol requested' do
|
25
|
-
let(:protocols) { %w
|
27
|
+
let(:protocols) { %w[binary] }
|
26
28
|
|
27
29
|
it 'returns a valid handshake' do
|
28
30
|
@request_params = { headers: { 'Sec-WebSocket-Protocol' => 'binary' } }
|
@@ -34,7 +36,7 @@ RSpec.describe 'Client draft 4 handshake' do
|
|
34
36
|
end
|
35
37
|
|
36
38
|
context 'multiple protocols requested' do
|
37
|
-
let(:protocols) { %w
|
39
|
+
let(:protocols) { %w[binary xmpp] }
|
38
40
|
|
39
41
|
it 'returns with a valid handshake' do
|
40
42
|
@request_params = { headers: { 'Sec-WebSocket-Protocol' => 'xmpp' } }
|
@@ -46,7 +48,7 @@ RSpec.describe 'Client draft 4 handshake' do
|
|
46
48
|
end
|
47
49
|
|
48
50
|
context 'unsupported protocol requested' do
|
49
|
-
let(:protocols) { %w
|
51
|
+
let(:protocols) { %w[binary xmpp] }
|
50
52
|
|
51
53
|
it 'fails with an unsupported protocol error' do
|
52
54
|
@request_params = { headers: { 'Sec-WebSocket-Protocol' => 'generic' } }
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
|
3
5
|
RSpec.describe 'Client draft 11 handshake' do
|
@@ -7,7 +9,7 @@ RSpec.describe 'Client draft 11 handshake' do
|
|
7
9
|
let(:client_request) { client_handshake_11({ key: handshake.handler.send(:key), version: version }.merge(@request_params || {})) }
|
8
10
|
let(:server_response) { server_handshake_11({ accept: handshake.handler.send(:accept) }.merge(@request_params || {})) }
|
9
11
|
|
10
|
-
|
12
|
+
it_behaves_like 'all client drafts'
|
11
13
|
|
12
14
|
it 'disallows client with invalid challenge' do
|
13
15
|
@request_params = { accept: 'invalid' }
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
|
3
5
|
RSpec.describe 'Client draft 75 handshake' do
|
@@ -7,10 +9,10 @@ RSpec.describe 'Client draft 75 handshake' do
|
|
7
9
|
let(:client_request) { client_handshake_75(@request_params || {}) }
|
8
10
|
let(:server_response) { server_handshake_75(@request_params || {}) }
|
9
11
|
|
10
|
-
|
12
|
+
it_behaves_like 'all client drafts'
|
11
13
|
|
12
14
|
context 'protocol header specified' do
|
13
|
-
let(:handshake) { WebSocket::Handshake::Client.new(uri: 'ws://example.com/demo', origin: 'http://example.com', version: version, protocols: %w
|
15
|
+
let(:handshake) { WebSocket::Handshake::Client.new(uri: 'ws://example.com/demo', origin: 'http://example.com', version: version, protocols: %w[binary]) }
|
14
16
|
|
15
17
|
context 'supported' do
|
16
18
|
it 'returns a valid handshake' do
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
|
3
5
|
RSpec.describe 'Client draft 76 handshake' do
|
@@ -7,7 +9,7 @@ RSpec.describe 'Client draft 76 handshake' do
|
|
7
9
|
let(:client_request) { client_handshake_76({ key1: handshake.handler.send(:key1), key2: handshake.handler.send(:key2), key3: handshake.handler.send(:key3) }.merge(@request_params || {})) }
|
8
10
|
let(:server_response) { server_handshake_76({ challenge: handshake.handler.send(:challenge) }.merge(@request_params || {})) }
|
9
11
|
|
10
|
-
|
12
|
+
it_behaves_like 'all client drafts'
|
11
13
|
|
12
14
|
it 'disallows client with invalid challenge' do
|
13
15
|
@request_params = { challenge: 'invalid' }
|
@@ -19,7 +21,7 @@ RSpec.describe 'Client draft 76 handshake' do
|
|
19
21
|
end
|
20
22
|
|
21
23
|
context 'protocol header specified' do
|
22
|
-
let(:handshake) { WebSocket::Handshake::Client.new(uri: 'ws://example.com/demo', origin: 'http://example.com', version: version, protocols: %w
|
24
|
+
let(:handshake) { WebSocket::Handshake::Client.new(uri: 'ws://example.com/demo', origin: 'http://example.com', version: version, protocols: %w[binary]) }
|
23
25
|
|
24
26
|
context 'supported' do
|
25
27
|
it 'returns a valid handshake' do
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
|
3
5
|
RSpec.describe 'Server draft 04 handshake' do
|
@@ -6,7 +8,7 @@ RSpec.describe 'Server draft 04 handshake' do
|
|
6
8
|
let(:client_request) { client_handshake_04(@request_params || {}) }
|
7
9
|
let(:server_response) { server_handshake_04(@request_params || {}) }
|
8
10
|
|
9
|
-
|
11
|
+
it_behaves_like 'all server drafts'
|
10
12
|
|
11
13
|
it 'disallows request without Sec-WebSocket-Key' do
|
12
14
|
handshake << client_request.gsub(/^Sec-WebSocket-Key:.*\n/, '')
|
@@ -17,7 +19,7 @@ RSpec.describe 'Server draft 04 handshake' do
|
|
17
19
|
end
|
18
20
|
|
19
21
|
context 'protocol header specified' do
|
20
|
-
let(:handshake) { WebSocket::Handshake::Server.new(protocols: %w
|
22
|
+
let(:handshake) { WebSocket::Handshake::Server.new(protocols: %w[binary xmpp]) }
|
21
23
|
|
22
24
|
context 'single protocol requested' do
|
23
25
|
it 'returns with the same protocol' do
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
|
3
5
|
RSpec.describe 'Server draft 75 handshake' do
|
@@ -7,10 +9,10 @@ RSpec.describe 'Server draft 75 handshake' do
|
|
7
9
|
let(:client_request) { client_handshake_75(@request_params || {}) }
|
8
10
|
let(:server_response) { server_handshake_75(@request_params || {}) }
|
9
11
|
|
10
|
-
|
12
|
+
it_behaves_like 'all server drafts'
|
11
13
|
|
12
14
|
context 'protocol header specified' do
|
13
|
-
let(:handshake) { WebSocket::Handshake::Server.new(protocols: %w
|
15
|
+
let(:handshake) { WebSocket::Handshake::Server.new(protocols: %w[binary]) }
|
14
16
|
|
15
17
|
context 'supported' do
|
16
18
|
it 'returns with the same protocol' do
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
|
3
5
|
RSpec.describe 'Server draft 76 handshake' do
|
@@ -6,7 +8,7 @@ RSpec.describe 'Server draft 76 handshake' do
|
|
6
8
|
let(:client_request) { client_handshake_76(@request_params || {}) }
|
7
9
|
let(:server_response) { server_handshake_76(@request_params || {}) }
|
8
10
|
|
9
|
-
|
11
|
+
it_behaves_like 'all server drafts'
|
10
12
|
|
11
13
|
it 'disallows request without spaces in key 1' do
|
12
14
|
@request_params = { key1: '4@146546xW%0l15' }
|
@@ -45,7 +47,7 @@ RSpec.describe 'Server draft 76 handshake' do
|
|
45
47
|
end
|
46
48
|
|
47
49
|
context 'protocol header specified' do
|
48
|
-
let(:handshake) { WebSocket::Handshake::Server.new(protocols: %w
|
50
|
+
let(:handshake) { WebSocket::Handshake::Server.new(protocols: %w[binary]) }
|
49
51
|
|
50
52
|
context 'supported' do
|
51
53
|
it 'returns with the same protocol' do
|
data/spec/spec_helper.rb
CHANGED
data/spec/support/frames_base.rb
CHANGED
@@ -1,87 +1,89 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
def client_handshake_75(args = {})
|
2
|
-
|
3
|
-
GET #{args[:path] || '/demo'}#{"?#{args[:query]}" if args[:query]} HTTP/1.1\r
|
4
|
-
Upgrade: WebSocket\r
|
5
|
-
Connection: Upgrade\r
|
6
|
-
Host: #{args[:host] || 'example.com'}#{":#{args[:port]}" if args[:port]}\r
|
7
|
-
Origin: http://example.com\r
|
8
|
-
#{(args[:headers] || {}).map { |key, value| "#{key}: #{value}\r\n" }.join('')}\r
|
9
|
-
|
4
|
+
<<~REQUEST
|
5
|
+
GET #{args[:path] || '/demo'}#{"?#{args[:query]}" if args[:query]} HTTP/1.1\r
|
6
|
+
Upgrade: WebSocket\r
|
7
|
+
Connection: Upgrade\r
|
8
|
+
Host: #{args[:host] || 'example.com'}#{":#{args[:port]}" if args[:port]}\r
|
9
|
+
Origin: http://example.com\r
|
10
|
+
#{(args[:headers] || {}).map { |key, value| "#{key}: #{value}\r\n" }.join('')}\r
|
11
|
+
REQUEST
|
10
12
|
end
|
11
13
|
|
12
14
|
def server_handshake_75(args = {})
|
13
|
-
|
14
|
-
HTTP/1.1 101 Web Socket Protocol Handshake\r
|
15
|
-
Upgrade: WebSocket\r
|
16
|
-
Connection: Upgrade\r
|
17
|
-
#{(args[:headers] || {}).map { |key, value| "#{key}: #{value}\r\n" }.join('')}WebSocket-Origin: http://example.com\r
|
18
|
-
WebSocket-Location: ws#{args[:secure] ? 's' : ''}://#{args[:host] || 'example.com'}#{":#{args[:port]}" if args[:port]}#{args[:path] || '/demo'}\r
|
19
|
-
\r
|
20
|
-
|
15
|
+
<<~REQUEST
|
16
|
+
HTTP/1.1 101 Web Socket Protocol Handshake\r
|
17
|
+
Upgrade: WebSocket\r
|
18
|
+
Connection: Upgrade\r
|
19
|
+
#{(args[:headers] || {}).map { |key, value| "#{key}: #{value}\r\n" }.join('')}WebSocket-Origin: http://example.com\r
|
20
|
+
WebSocket-Location: ws#{args[:secure] ? 's' : ''}://#{args[:host] || 'example.com'}#{":#{args[:port]}" if args[:port]}#{args[:path] || '/demo'}\r
|
21
|
+
\r
|
22
|
+
REQUEST
|
21
23
|
end
|
22
24
|
|
23
25
|
def client_handshake_76(args = {})
|
24
|
-
request =
|
25
|
-
GET #{args[:path] || '/demo'}#{"?#{args[:query]}" if args[:query]} HTTP/1.1\r
|
26
|
-
Upgrade: WebSocket\r
|
27
|
-
Connection: Upgrade\r
|
28
|
-
Host: #{args[:host] || 'example.com'}#{":#{args[:port]}" if args[:port]}\r
|
29
|
-
Origin: http://example.com\r
|
30
|
-
#{(args[:headers] || {}).map { |key, value| "#{key}: #{value}\r\n" }.join('')}Sec-WebSocket-Key1: #{args[:key1] || '4 @1 46546xW%0l 1 5'}\r
|
31
|
-
Sec-WebSocket-Key2: #{args[:key2] || '12998 5 Y3 1 .P00'}\r
|
32
|
-
\r
|
33
|
-
#{args[:key3] || '^n:ds[4U'}
|
34
|
-
|
26
|
+
request = <<~REQUEST
|
27
|
+
GET #{args[:path] || '/demo'}#{"?#{args[:query]}" if args[:query]} HTTP/1.1\r
|
28
|
+
Upgrade: WebSocket\r
|
29
|
+
Connection: Upgrade\r
|
30
|
+
Host: #{args[:host] || 'example.com'}#{":#{args[:port]}" if args[:port]}\r
|
31
|
+
Origin: http://example.com\r
|
32
|
+
#{(args[:headers] || {}).map { |key, value| "#{key}: #{value}\r\n" }.join('')}Sec-WebSocket-Key1: #{args[:key1] || '4 @1 46546xW%0l 1 5'}\r
|
33
|
+
Sec-WebSocket-Key2: #{args[:key2] || '12998 5 Y3 1 .P00'}\r
|
34
|
+
\r
|
35
|
+
#{args[:key3] || '^n:ds[4U'}
|
36
|
+
REQUEST
|
35
37
|
request[0..-2]
|
36
38
|
end
|
37
39
|
|
38
40
|
def server_handshake_76(args = {})
|
39
|
-
request =
|
40
|
-
HTTP/1.1 101 WebSocket Protocol Handshake\r
|
41
|
-
Upgrade: WebSocket\r
|
42
|
-
Connection: Upgrade\r
|
43
|
-
#{(args[:headers] || {}).map { |key, value| "#{key}: #{value}\r\n" }.join('')}Sec-WebSocket-Origin: http://example.com\r
|
44
|
-
Sec-WebSocket-Location: ws#{args[:secure] ? 's' : ''}://#{args[:host] || 'example.com'}#{":#{args[:port]}" if args[:port]}#{args[:path] || '/demo'}\r
|
45
|
-
\r
|
46
|
-
#{args[:challenge] || "8jKS'y:G*Co,Wxa-"}
|
47
|
-
|
41
|
+
request = <<~REQUEST
|
42
|
+
HTTP/1.1 101 WebSocket Protocol Handshake\r
|
43
|
+
Upgrade: WebSocket\r
|
44
|
+
Connection: Upgrade\r
|
45
|
+
#{(args[:headers] || {}).map { |key, value| "#{key}: #{value}\r\n" }.join('')}Sec-WebSocket-Origin: http://example.com\r
|
46
|
+
Sec-WebSocket-Location: ws#{args[:secure] ? 's' : ''}://#{args[:host] || 'example.com'}#{":#{args[:port]}" if args[:port]}#{args[:path] || '/demo'}\r
|
47
|
+
\r
|
48
|
+
#{args[:challenge] || "8jKS'y:G*Co,Wxa-"}
|
49
|
+
REQUEST
|
48
50
|
request[0..-2]
|
49
51
|
end
|
50
52
|
|
51
53
|
def client_handshake_04(args = {})
|
52
|
-
|
53
|
-
GET #{args[:path] || '/demo'}#{"?#{args[:query]}" if args[:query]} HTTP/1.1\r
|
54
|
-
Upgrade: websocket\r
|
55
|
-
Connection: Upgrade\r
|
56
|
-
Host: #{args[:host] || 'example.com'}#{":#{args[:port]}" if args[:port]}\r
|
57
|
-
#{(args[:headers] || {}).map { |key, value| "#{key}: #{value}\r\n" }.join('')}Sec-WebSocket-Origin: http://example.com\r
|
58
|
-
Sec-WebSocket-Version: #{args[:version] || '4'}\r
|
59
|
-
Sec-WebSocket-Key: #{args[:key] || 'dGhlIHNhbXBsZSBub25jZQ=='}\r
|
60
|
-
\r
|
61
|
-
|
54
|
+
<<~REQUEST
|
55
|
+
GET #{args[:path] || '/demo'}#{"?#{args[:query]}" if args[:query]} HTTP/1.1\r
|
56
|
+
Upgrade: websocket\r
|
57
|
+
Connection: Upgrade\r
|
58
|
+
Host: #{args[:host] || 'example.com'}#{":#{args[:port]}" if args[:port]}\r
|
59
|
+
#{(args[:headers] || {}).map { |key, value| "#{key}: #{value}\r\n" }.join('')}Sec-WebSocket-Origin: http://example.com\r
|
60
|
+
Sec-WebSocket-Version: #{args[:version] || '4'}\r
|
61
|
+
Sec-WebSocket-Key: #{args[:key] || 'dGhlIHNhbXBsZSBub25jZQ=='}\r
|
62
|
+
\r
|
63
|
+
REQUEST
|
62
64
|
end
|
63
65
|
|
64
66
|
def server_handshake_04(args = {})
|
65
|
-
|
66
|
-
HTTP/1.1 101 Switching Protocols\r
|
67
|
-
Upgrade: websocket\r
|
68
|
-
Connection: Upgrade\r
|
69
|
-
#{(args[:headers] || {}).map { |key, value| "#{key}: #{value}\r\n" }.join('')}Sec-WebSocket-Accept: #{args[:accept] || 's3pPLMBiTxaQ9kYGzzhZRbK+xOo='}\r
|
70
|
-
\r
|
71
|
-
|
67
|
+
<<~REQUEST
|
68
|
+
HTTP/1.1 101 Switching Protocols\r
|
69
|
+
Upgrade: websocket\r
|
70
|
+
Connection: Upgrade\r
|
71
|
+
#{(args[:headers] || {}).map { |key, value| "#{key}: #{value}\r\n" }.join('')}Sec-WebSocket-Accept: #{args[:accept] || 's3pPLMBiTxaQ9kYGzzhZRbK+xOo='}\r
|
72
|
+
\r
|
73
|
+
REQUEST
|
72
74
|
end
|
73
75
|
|
74
76
|
def client_handshake_11(args = {})
|
75
|
-
|
76
|
-
GET #{args[:path] || '/demo'}#{"?#{args[:query]}" if args[:query]} HTTP/1.1\r
|
77
|
-
Upgrade: websocket\r
|
78
|
-
Connection: Upgrade\r
|
79
|
-
Host: #{args[:host] || 'example.com'}#{":#{args[:port]}" if args[:port]}\r
|
80
|
-
#{(args[:headers] || {}).map { |key, value| "#{key}: #{value}\r\n" }.join('')}Origin: http://example.com\r
|
81
|
-
Sec-WebSocket-Version: #{args[:version] || '4'}\r
|
82
|
-
Sec-WebSocket-Key: #{args[:key] || 'dGhlIHNhbXBsZSBub25jZQ=='}\r
|
83
|
-
\r
|
84
|
-
|
77
|
+
<<~REQUEST
|
78
|
+
GET #{args[:path] || '/demo'}#{"?#{args[:query]}" if args[:query]} HTTP/1.1\r
|
79
|
+
Upgrade: websocket\r
|
80
|
+
Connection: Upgrade\r
|
81
|
+
Host: #{args[:host] || 'example.com'}#{":#{args[:port]}" if args[:port]}\r
|
82
|
+
#{(args[:headers] || {}).map { |key, value| "#{key}: #{value}\r\n" }.join('')}Origin: http://example.com\r
|
83
|
+
Sec-WebSocket-Version: #{args[:version] || '4'}\r
|
84
|
+
Sec-WebSocket-Key: #{args[:key] || 'dGhlIHNhbXBsZSBub25jZQ=='}\r
|
85
|
+
\r
|
86
|
+
REQUEST
|
85
87
|
end
|
86
88
|
|
87
89
|
def server_handshake_11(args = {})
|