… | |
… | |
4 | |
4 | |
5 | use Digest::SHA1 (); |
5 | use Digest::SHA1 (); |
6 | |
6 | |
7 | # websocket requests can be very long, and we want the tcp code to buffer for us |
7 | # websocket requests can be very long, and we want the tcp code to buffer for us |
8 | our $detector = ext::tcp::register websocket => 4096, sub { |
8 | our $detector = ext::tcp::register websocket => 4096, sub { |
9 | m{^(?i:GET) \ (?i:http://[^/]+)? /ws \ (?:(?i)HTTP/[0-9\.]+)}xs |
9 | m{^(?i:GET) \ (?i:http://[^/]+)? /ws \ (?:(?i)HTTP/[0-9\.]+).*\015\012\015\012}xs |
10 | }, sub { |
10 | }, sub { |
11 | my ($id, $fh, $buf) = @_; |
11 | my ($id, $fh, $buf) = @_; |
12 | |
12 | |
13 | $buf =~ /^Sec-WebSocket-Version\s*:\s*([0-9]+)/mi |
13 | $buf =~ /^Sec-WebSocket-Version\s*:\s*([0-9]+)/mi |
14 | or return; |
14 | or return; |
15 | my $version = $1; # 8 ff10, 13 rfc |
15 | my $version = $1; # 8=ff10, 13=rfc |
16 | |
16 | |
17 | $buf =~ /^Sec-WebSocket-Key\s*:\s*(\S+)/mi |
17 | $buf =~ /^Sec-WebSocket-Key\s*:\s*(\S+)/mi |
18 | or return; |
18 | or return; |
19 | my $key = $1; |
19 | my $key = $1; |
20 | |
20 | |