faye-websocket 0.1.1 → 0.1.2

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.

Potentially problematic release.


This version of faye-websocket might be problematic. Click here for more details.

@@ -0,0 +1,21 @@
1
+ defaults
2
+ mode http
3
+ timeout client 5s
4
+ timeout connect 5s
5
+ timeout server 5s
6
+
7
+ frontend all 0.0.0.0:3000
8
+ mode http
9
+ timeout client 120s
10
+
11
+ option forwardfor
12
+ option http-server-close
13
+ option http-pretend-keepalive
14
+
15
+ default_backend sockets
16
+
17
+ backend sockets
18
+ balance uri depth 2
19
+ timeout server 120s
20
+ server socket1 127.0.0.1:7000
21
+
@@ -80,7 +80,10 @@ module Faye
80
80
  event.init_event('open', false, false)
81
81
  dispatch_event(event)
82
82
 
83
- @env[Thin::Request::WEBSOCKET_RECEIVE_CALLBACK] = @parser.method(:parse)
83
+ @env[Thin::Request::WEBSOCKET_RECEIVE_CALLBACK] = lambda do |data|
84
+ response = @parser.parse(data)
85
+ @stream.write(response) if response
86
+ end
84
87
  end
85
88
 
86
89
  private
@@ -24,6 +24,7 @@ module Faye
24
24
 
25
25
  def parse(data)
26
26
  data.each_byte(&method(:handle_byte))
27
+ nil
27
28
  end
28
29
 
29
30
  def frame(data, type = nil, error_type = nil)
@@ -8,16 +8,7 @@ module Faye
8
8
 
9
9
  def handshake_response
10
10
  env = @socket.env
11
-
12
- key1 = env['HTTP_SEC_WEBSOCKET_KEY1']
13
- value1 = number_from_key(key1) / spaces_in_key(key1)
14
-
15
- key2 = env['HTTP_SEC_WEBSOCKET_KEY2']
16
- value2 = number_from_key(key2) / spaces_in_key(key2)
17
-
18
- hash = Digest::MD5.digest(big_endian(value1) +
19
- big_endian(value2) +
20
- env['rack.input'].read)
11
+ signature = handshake_signature(env['rack.input'].read)
21
12
 
22
13
  upgrade = "HTTP/1.1 101 Web Socket Protocol Handshake\r\n"
23
14
  upgrade << "Upgrade: WebSocket\r\n"
@@ -25,10 +16,32 @@ module Faye
25
16
  upgrade << "Sec-WebSocket-Origin: #{env['HTTP_ORIGIN']}\r\n"
26
17
  upgrade << "Sec-WebSocket-Location: #{@socket.url}\r\n"
27
18
  upgrade << "\r\n"
28
- upgrade << hash
19
+ upgrade << signature if signature
29
20
  upgrade
30
21
  end
31
22
 
23
+ def handshake_signature(head)
24
+ return nil if head.empty?
25
+ @handshake_complete = true
26
+
27
+ env = @socket.env
28
+
29
+ key1 = env['HTTP_SEC_WEBSOCKET_KEY1']
30
+ value1 = number_from_key(key1) / spaces_in_key(key1)
31
+
32
+ key2 = env['HTTP_SEC_WEBSOCKET_KEY2']
33
+ value2 = number_from_key(key2) / spaces_in_key(key2)
34
+
35
+ Digest::MD5.digest(big_endian(value1) +
36
+ big_endian(value2) +
37
+ head)
38
+ end
39
+
40
+ def parse(data)
41
+ return super if @handshake_complete
42
+ handshake_signature(data)
43
+ end
44
+
32
45
  private
33
46
 
34
47
  def number_from_key(key)
@@ -129,6 +129,7 @@ module Faye
129
129
  end
130
130
  emit_frame if @stage == 4 and @length == 0
131
131
  end
132
+ nil
132
133
  end
133
134
 
134
135
  def frame(data, type = nil, code = nil)
metadata CHANGED
@@ -1,109 +1,144 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: faye-websocket
3
- version: !ruby/object:Gem::Version
4
- version: 0.1.1
3
+ version: !ruby/object:Gem::Version
4
+ hash: 31
5
5
  prerelease:
6
+ segments:
7
+ - 0
8
+ - 1
9
+ - 2
10
+ version: 0.1.2
6
11
  platform: ruby
7
- authors:
12
+ authors:
8
13
  - James Coglan
9
14
  autorequire:
10
15
  bindir: bin
11
16
  cert_chain: []
12
- date: 2011-11-30 00:00:00.000000000 Z
13
- dependencies:
14
- - !ruby/object:Gem::Dependency
17
+
18
+ date: 2011-12-05 00:00:00 Z
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
15
21
  name: eventmachine
16
- requirement: &5563640 !ruby/object:Gem::Requirement
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
17
24
  none: false
18
- requirements:
19
- - - ! '>='
20
- - !ruby/object:Gem::Version
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ hash: 47
29
+ segments:
30
+ - 0
31
+ - 12
32
+ - 0
21
33
  version: 0.12.0
22
34
  type: :runtime
23
- prerelease: false
24
- version_requirements: *5563640
25
- - !ruby/object:Gem::Dependency
35
+ version_requirements: *id001
36
+ - !ruby/object:Gem::Dependency
26
37
  name: thin
27
- requirement: &5561880 !ruby/object:Gem::Requirement
38
+ prerelease: false
39
+ requirement: &id002 !ruby/object:Gem::Requirement
28
40
  none: false
29
- requirements:
41
+ requirements:
30
42
  - - ~>
31
- - !ruby/object:Gem::Version
32
- version: '1.2'
43
+ - !ruby/object:Gem::Version
44
+ hash: 11
45
+ segments:
46
+ - 1
47
+ - 2
48
+ version: "1.2"
33
49
  type: :runtime
34
- prerelease: false
35
- version_requirements: *5561880
36
- - !ruby/object:Gem::Dependency
50
+ version_requirements: *id002
51
+ - !ruby/object:Gem::Dependency
37
52
  name: rspec
38
- requirement: &5559960 !ruby/object:Gem::Requirement
53
+ prerelease: false
54
+ requirement: &id003 !ruby/object:Gem::Requirement
39
55
  none: false
40
- requirements:
56
+ requirements:
41
57
  - - ~>
42
- - !ruby/object:Gem::Version
58
+ - !ruby/object:Gem::Version
59
+ hash: 27
60
+ segments:
61
+ - 2
62
+ - 5
63
+ - 0
43
64
  version: 2.5.0
44
65
  type: :development
45
- prerelease: false
46
- version_requirements: *5559960
47
- - !ruby/object:Gem::Dependency
66
+ version_requirements: *id003
67
+ - !ruby/object:Gem::Dependency
48
68
  name: rack
49
- requirement: &5558480 !ruby/object:Gem::Requirement
69
+ prerelease: false
70
+ requirement: &id004 !ruby/object:Gem::Requirement
50
71
  none: false
51
- requirements:
52
- - - ! '>='
53
- - !ruby/object:Gem::Version
54
- version: '0'
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ hash: 3
76
+ segments:
77
+ - 0
78
+ version: "0"
55
79
  type: :development
56
- prerelease: false
57
- version_requirements: *5558480
80
+ version_requirements: *id004
58
81
  description:
59
82
  email: jcoglan@gmail.com
60
83
  executables: []
84
+
61
85
  extensions: []
62
- extra_rdoc_files:
86
+
87
+ extra_rdoc_files:
63
88
  - README.rdoc
64
- files:
89
+ files:
65
90
  - README.rdoc
91
+ - examples/autobahn_client.rb
66
92
  - examples/client.rb
67
- - examples/server.rb
93
+ - examples/haproxy.conf
68
94
  - examples/index.html
69
- - examples/autobahn_client.rb
70
- - lib/faye/websocket/draft75_parser.rb
95
+ - examples/server.rb
96
+ - lib/faye/thin_extensions.rb
97
+ - lib/faye/websocket/api.rb
71
98
  - lib/faye/websocket/client.rb
72
- - lib/faye/websocket/protocol8_parser.rb
99
+ - lib/faye/websocket/draft75_parser.rb
73
100
  - lib/faye/websocket/draft76_parser.rb
74
- - lib/faye/websocket/api.rb
101
+ - lib/faye/websocket/protocol8_parser.rb
75
102
  - lib/faye/websocket.rb
76
- - lib/faye/thin_extensions.rb
77
- - spec/faye/websocket/draft75_parser_spec.rb
78
103
  - spec/faye/websocket/client_spec.rb
104
+ - spec/faye/websocket/draft75_parser_spec.rb
79
105
  - spec/faye/websocket/protocol8_parser_spec.rb
80
- - spec/server.key
81
106
  - spec/server.crt
107
+ - spec/server.key
82
108
  - spec/spec_helper.rb
83
109
  homepage: http://github.com/jcoglan/faye-websocket-ruby
84
110
  licenses: []
111
+
85
112
  post_install_message:
86
- rdoc_options:
113
+ rdoc_options:
87
114
  - --main
88
115
  - README.rdoc
89
- require_paths:
116
+ require_paths:
90
117
  - lib
91
- required_ruby_version: !ruby/object:Gem::Requirement
118
+ required_ruby_version: !ruby/object:Gem::Requirement
92
119
  none: false
93
- requirements:
94
- - - ! '>='
95
- - !ruby/object:Gem::Version
96
- version: '0'
97
- required_rubygems_version: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - ">="
122
+ - !ruby/object:Gem::Version
123
+ hash: 3
124
+ segments:
125
+ - 0
126
+ version: "0"
127
+ required_rubygems_version: !ruby/object:Gem::Requirement
98
128
  none: false
99
- requirements:
100
- - - ! '>='
101
- - !ruby/object:Gem::Version
102
- version: '0'
129
+ requirements:
130
+ - - ">="
131
+ - !ruby/object:Gem::Version
132
+ hash: 3
133
+ segments:
134
+ - 0
135
+ version: "0"
103
136
  requirements: []
137
+
104
138
  rubyforge_project:
105
139
  rubygems_version: 1.8.10
106
140
  signing_key:
107
141
  specification_version: 3
108
142
  summary: Robust general-purpose WebSocket server and client
109
143
  test_files: []
144
+