websocket 1.2.5 → 1.2.7

Sign up to get free protection for your applications and to get access to all the features.
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 = {})