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.
Files changed (74) hide show
  1. checksums.yaml +5 -5
  2. data/.codeclimate.yml +1 -0
  3. data/.rubocop.yml +4 -1
  4. data/.travis.yml +1 -5
  5. data/CHANGELOG.md +8 -0
  6. data/Gemfile +5 -3
  7. data/Rakefile +3 -1
  8. data/lib/websocket.rb +3 -1
  9. data/lib/websocket/error.rb +2 -0
  10. data/lib/websocket/exception_handler.rb +2 -0
  11. data/lib/websocket/frame.rb +2 -0
  12. data/lib/websocket/frame/base.rb +2 -0
  13. data/lib/websocket/frame/data.rb +3 -1
  14. data/lib/websocket/frame/handler.rb +2 -0
  15. data/lib/websocket/frame/handler/base.rb +4 -2
  16. data/lib/websocket/frame/handler/handler03.rb +5 -4
  17. data/lib/websocket/frame/handler/handler04.rb +1 -0
  18. data/lib/websocket/frame/handler/handler05.rb +1 -0
  19. data/lib/websocket/frame/handler/handler07.rb +2 -1
  20. data/lib/websocket/frame/handler/handler75.rb +2 -1
  21. data/lib/websocket/frame/incoming.rb +2 -0
  22. data/lib/websocket/frame/incoming/client.rb +2 -0
  23. data/lib/websocket/frame/incoming/server.rb +2 -0
  24. data/lib/websocket/frame/outgoing.rb +2 -0
  25. data/lib/websocket/frame/outgoing/client.rb +2 -0
  26. data/lib/websocket/frame/outgoing/server.rb +2 -0
  27. data/lib/websocket/handshake.rb +2 -0
  28. data/lib/websocket/handshake/base.rb +12 -3
  29. data/lib/websocket/handshake/client.rb +2 -0
  30. data/lib/websocket/handshake/handler.rb +2 -0
  31. data/lib/websocket/handshake/handler/base.rb +2 -0
  32. data/lib/websocket/handshake/handler/client.rb +2 -0
  33. data/lib/websocket/handshake/handler/client01.rb +2 -0
  34. data/lib/websocket/handshake/handler/client04.rb +4 -2
  35. data/lib/websocket/handshake/handler/client11.rb +2 -0
  36. data/lib/websocket/handshake/handler/client75.rb +4 -2
  37. data/lib/websocket/handshake/handler/client76.rb +4 -2
  38. data/lib/websocket/handshake/handler/server.rb +2 -0
  39. data/lib/websocket/handshake/handler/server04.rb +4 -2
  40. data/lib/websocket/handshake/handler/server75.rb +4 -2
  41. data/lib/websocket/handshake/handler/server76.rb +2 -0
  42. data/lib/websocket/handshake/server.rb +2 -0
  43. data/lib/websocket/nice_inspect.rb +2 -0
  44. data/lib/websocket/version.rb +3 -1
  45. data/spec/frame/incoming_03_spec.rb +18 -16
  46. data/spec/frame/incoming_04_spec.rb +18 -16
  47. data/spec/frame/incoming_05_spec.rb +20 -18
  48. data/spec/frame/incoming_07_spec.rb +22 -20
  49. data/spec/frame/incoming_75_spec.rb +11 -9
  50. data/spec/frame/incoming_common_spec.rb +1 -0
  51. data/spec/frame/masking_spec.rb +1 -0
  52. data/spec/frame/outgoing_03_spec.rb +10 -8
  53. data/spec/frame/outgoing_04_spec.rb +10 -8
  54. data/spec/frame/outgoing_05_spec.rb +10 -8
  55. data/spec/frame/outgoing_07_spec.rb +11 -9
  56. data/spec/frame/outgoing_75_spec.rb +6 -4
  57. data/spec/frame/outgoing_common_spec.rb +1 -0
  58. data/spec/handshake/client_04_spec.rb +6 -4
  59. data/spec/handshake/client_11_spec.rb +3 -1
  60. data/spec/handshake/client_75_spec.rb +4 -2
  61. data/spec/handshake/client_76_spec.rb +4 -2
  62. data/spec/handshake/server_04_spec.rb +4 -2
  63. data/spec/handshake/server_75_spec.rb +4 -2
  64. data/spec/handshake/server_76_spec.rb +4 -2
  65. data/spec/spec_helper.rb +2 -0
  66. data/spec/support/all_client_drafts.rb +2 -0
  67. data/spec/support/all_server_drafts.rb +2 -0
  68. data/spec/support/frames_base.rb +2 -0
  69. data/spec/support/handshake_requests.rb +65 -63
  70. data/spec/support/incoming_frames.rb +2 -0
  71. data/spec/support/outgoing_frames.rb +2 -0
  72. data/spec/support/overwrites.rb +2 -0
  73. data/websocket.gemspec +2 -2
  74. 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
- it_should_behave_like 'valid_outgoing_frame'
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
- it_should_behave_like 'valid_outgoing_frame'
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
- it_should_behave_like 'valid_outgoing_frame'
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
- it_should_behave_like 'valid_outgoing_frame'
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
- it_should_behave_like 'valid_outgoing_frame'
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
- it_should_behave_like 'valid_outgoing_frame'
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
- it_should_behave_like 'valid_outgoing_frame'
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
- it_should_behave_like 'valid_outgoing_frame'
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
- it_should_behave_like 'valid_outgoing_frame'
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
- it_should_behave_like 'valid_outgoing_frame'
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
- it_should_behave_like 'valid_outgoing_frame'
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
- it_should_behave_like 'valid_outgoing_frame'
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
- it_should_behave_like 'valid_outgoing_frame'
43
+ it_behaves_like 'valid_outgoing_frame'
42
44
  end
43
45
  end
@@ -1,4 +1,5 @@
1
1
  # encoding: binary
2
+ # frozen_string_literal: true
2
3
 
3
4
  require 'spec_helper'
4
5
 
@@ -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
- it_should_behave_like 'all client drafts'
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(binary) }
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(binary xmpp) }
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(binary xmpp) }
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
- it_should_behave_like 'all client drafts'
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
- it_should_behave_like 'all client drafts'
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(binary)) }
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
- it_should_behave_like 'all client drafts'
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(binary)) }
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
- it_should_behave_like 'all server drafts'
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(binary xmpp)) }
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
- it_should_behave_like 'all server drafts'
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(binary)) }
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
- it_should_behave_like 'all server drafts'
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(binary)) }
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
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'rspec'
2
4
 
3
5
  require 'websocket'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  RSpec.shared_examples_for 'all client drafts' do
2
4
  def validate_request
3
5
  expect(handshake.to_s).to eql(client_request)
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'webrick'
2
4
 
3
5
  RSpec.shared_examples_for 'all server drafts' do
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module WebSocket
2
4
  module Frame
3
5
  class Base
@@ -1,87 +1,89 @@
1
+ # frozen_string_literal: true
2
+
1
3
  def client_handshake_75(args = {})
2
- <<-EOF
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
- EOF
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
- <<-EOF
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
- EOF
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 = <<-EOF
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
- EOF
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 = <<-EOF
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
- EOF
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
- <<-EOF
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
- EOF
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
- <<-EOF
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
- EOF
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
- <<-EOF
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
- EOF
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 = {})