Mercurial > hg > nginx-tests
annotate proxy_websocket.t @ 1328:a682c219af45
Tests: updated ssl_engine_keys.t test.
After merge with libp11, pkcs11 engine shared object was renamed
from "engine_pkcs11.so" to "pkcs11.so". Changed configuration
accordingly.
Additionally, changed "init" to "1" in the engine configuration. This
keeps pkcs11 engine loaded and prevents segmentation faults observed
during nginx shutdown.
While here, restored correct order of ssl_certificate and ssl_certificate_key.
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Tue, 22 May 2018 17:46:59 +0300 |
parents | 882267679006 |
children |
rev | line source |
---|---|
248
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
1 #!/usr/bin/perl |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
2 |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
3 # (C) Maxim Dounin |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
4 |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
5 # Tests for http proxy websockets support. |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
6 |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
7 ############################################################################### |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
8 |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
9 use warnings; |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
10 use strict; |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
11 |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
12 use Test::More; |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
13 |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
14 use IO::Poll; |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
15 use IO::Select; |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
16 use IO::Socket::INET; |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
17 |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
18 BEGIN { use FindBin; chdir($FindBin::Bin); } |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
19 |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
20 use lib 'lib'; |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
21 use Test::Nginx; |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
22 |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
23 ############################################################################### |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
24 |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
25 select STDERR; $| = 1; |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
26 select STDOUT; $| = 1; |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
27 |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
28 eval { |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
29 require Protocol::WebSocket::Handshake::Client; |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
30 require Protocol::WebSocket::Handshake::Server; |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
31 require Protocol::WebSocket::Frame; |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
32 }; |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
33 |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
34 plan(skip_all => 'Protocol::WebSocket not installed') if $@; |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
35 |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
36 my $t = Test::Nginx->new()->has(qw/http proxy/) |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
37 ->write_file_expand('nginx.conf', <<'EOF')->plan(26); |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
38 |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
39 %%TEST_GLOBALS%% |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
40 |
249
6a0d934950bc
Tests: remove extra spaces in "daemon off".
Maxim Dounin <mdounin@mdounin.ru>
parents:
248
diff
changeset
|
41 daemon off; |
248
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
42 |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
43 events { |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
44 } |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
45 |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
46 http { |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
47 %%TEST_GLOBALS_HTTP%% |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
48 |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
49 server { |
974
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
952
diff
changeset
|
50 listen 127.0.0.1:8080; |
248
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
51 server_name localhost; |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
52 |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
53 location / { |
974
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
952
diff
changeset
|
54 proxy_pass http://127.0.0.1:8081; |
248
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
55 proxy_http_version 1.1; |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
56 proxy_set_header Upgrade $http_upgrade; |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
57 proxy_set_header Connection "Upgrade"; |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
58 proxy_read_timeout 2s; |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
59 send_timeout 2s; |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
60 } |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
61 } |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
62 } |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
63 |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
64 EOF |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
65 |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
66 $t->run_daemon(\&websocket_fake_daemon); |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
67 $t->run(); |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
68 |
974
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
952
diff
changeset
|
69 $t->waitforsocket('127.0.0.1:' . port(8081)) |
274
ccebd3168b5b
Tests: fix startup race in proxy_websocket.t, proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents:
263
diff
changeset
|
70 or die "Can't start test backend"; |
ccebd3168b5b
Tests: fix startup race in proxy_websocket.t, proxy_upgrade.t.
Maxim Dounin <mdounin@mdounin.ru>
parents:
263
diff
changeset
|
71 |
248
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
72 ############################################################################### |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
73 |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
74 # establish websocket connection |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
75 |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
76 my $s = websocket_connect(); |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
77 ok($s, "websocket handshake"); |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
78 |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
79 SKIP: { |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
80 skip "handshake failed", 22 unless $s; |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
81 |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
82 # send a frame |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
83 |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
84 websocket_write($s, 'foo'); |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
85 is(websocket_read($s), 'bar', "websocket response"); |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
86 |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
87 # send some big frame |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
88 |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
89 websocket_write($s, 'foo' x 16384); |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
90 like(websocket_read($s), qr/^(bar){16384}$/, "websocket big response"); |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
91 |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
92 # send multiple frames |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
93 |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
94 for my $i (1 .. 10) { |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
95 websocket_write($s, ('foo' x 16384) . $i); |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
96 websocket_write($s, 'bazz' . $i); |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
97 } |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
98 |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
99 for my $i (1 .. 10) { |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
100 like(websocket_read($s), qr/^(bar){16384}\d+$/, "websocket $i"); |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
101 is(websocket_read($s), 'bazz' . $i, "websocket small $i"); |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
102 } |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
103 } |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
104 |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
105 # establish websocket connection with some pipelined data |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
106 # and make sure they are correctly passed upstream |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
107 |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
108 undef $s; |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
109 $s = websocket_connect("foo"); |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
110 ok($s, "handshake pipelined"); |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
111 |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
112 SKIP: { |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
113 skip "handshake failed", 2 unless $s; |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
114 |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
115 is(websocket_read($s), "bar", "response pipelined"); |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
116 |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
117 websocket_write($s, "foo"); |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
118 is(websocket_read($s), "bar", "next to pipelined"); |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
119 } |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
120 |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
121 ############################################################################### |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
122 |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
123 sub websocket_connect { |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
124 my ($message) = @_; |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
125 |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
126 my $s = IO::Socket::INET->new( |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
127 Proto => 'tcp', |
974
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
952
diff
changeset
|
128 PeerAddr => '127.0.0.1:' . port(8080) |
248
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
129 ) |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
130 or die "Can't connect to nginx: $!\n"; |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
131 |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
132 my $h = Protocol::WebSocket::Handshake::Client->new( |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
133 url => 'ws://localhost'); |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
134 |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
135 # send request, $h->to_string |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
136 |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
137 my $buf = $h->to_string; |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
138 $buf .= Protocol::WebSocket::Frame->new($message)->to_bytes |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
139 if $message; |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
140 |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
141 local $SIG{PIPE} = 'IGNORE'; |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
142 |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
143 log_out($buf); |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
144 $s->syswrite($buf); |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
145 |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
146 # read response |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
147 |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
148 my $got = ''; |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
149 $buf = ''; |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
150 |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
151 $s->blocking(0); |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
152 while (IO::Select->new($s)->can_read(1.5)) { |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
153 my $n = $s->sysread($buf, 1024); |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
154 last unless $n; |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
155 log_in($buf); |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
156 $got .= $buf; |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
157 last if $got =~ /\x0d?\x0a\x0d?\x0a$/; |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
158 } |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
159 |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
160 # parse server response |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
161 |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
162 $h->parse($got); |
278
b6f0537afa01
Tests: fix pipelining tests in proxy_websocket.t.
Maxim Dounin <mdounin@mdounin.ru>
parents:
274
diff
changeset
|
163 |
b6f0537afa01
Tests: fix pipelining tests in proxy_websocket.t.
Maxim Dounin <mdounin@mdounin.ru>
parents:
274
diff
changeset
|
164 # store the rest for later websocket_read() |
b6f0537afa01
Tests: fix pipelining tests in proxy_websocket.t.
Maxim Dounin <mdounin@mdounin.ru>
parents:
274
diff
changeset
|
165 # see websocket_read() for details |
b6f0537afa01
Tests: fix pipelining tests in proxy_websocket.t.
Maxim Dounin <mdounin@mdounin.ru>
parents:
274
diff
changeset
|
166 |
b6f0537afa01
Tests: fix pipelining tests in proxy_websocket.t.
Maxim Dounin <mdounin@mdounin.ru>
parents:
274
diff
changeset
|
167 ${*$s}->{_websocket_frame} ||= Protocol::WebSocket::Frame->new(); |
b6f0537afa01
Tests: fix pipelining tests in proxy_websocket.t.
Maxim Dounin <mdounin@mdounin.ru>
parents:
274
diff
changeset
|
168 ${*$s}->{_websocket_frame}->append($got); |
b6f0537afa01
Tests: fix pipelining tests in proxy_websocket.t.
Maxim Dounin <mdounin@mdounin.ru>
parents:
274
diff
changeset
|
169 |
248
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
170 return $s if $h->is_done; |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
171 } |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
172 |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
173 sub websocket_write { |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
174 my ($s, $message) = @_; |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
175 my $frame = Protocol::WebSocket::Frame->new($message); |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
176 |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
177 local $SIG{PIPE} = 'IGNORE'; |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
178 $s->blocking(1); |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
179 |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
180 log_out($frame->to_bytes); |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
181 $s->syswrite($frame->to_bytes); |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
182 } |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
183 |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
184 sub websocket_read { |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
185 my ($s) = @_; |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
186 my ($buf, $got); |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
187 |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
188 # store frame object in socket itself to simplify things |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
189 # this works as $s is IO::Handle, see man IO::Handle |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
190 |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
191 ${*$s}->{_websocket_frame} ||= Protocol::WebSocket::Frame->new(); |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
192 my $frame = ${*$s}->{_websocket_frame}; |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
193 |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
194 $s->blocking(0); |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
195 $got = $frame->next(); |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
196 return $got if defined $got; |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
197 |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
198 while (IO::Select->new($s)->can_read(1.5)) { |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
199 my $n = $s->sysread($buf, 65536); |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
200 return $got unless $n; |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
201 log_in($buf); |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
202 $frame->append($buf); |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
203 $got = $frame->next(); |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
204 return $got if defined $got; |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
205 } |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
206 } |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
207 |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
208 ############################################################################### |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
209 |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
210 sub websocket_fake_daemon { |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
211 my $server = IO::Socket::INET->new( |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
212 Proto => 'tcp', |
974
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
952
diff
changeset
|
213 LocalAddr => '127.0.0.1:' . port(8081), |
248
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
214 Listen => 5, |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
215 Reuse => 1 |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
216 ) |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
217 or die "Can't create listening socket: $!\n"; |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
218 |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
219 while (my $client = $server->accept()) { |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
220 websocket_handle_client($client); |
589
a9569f57da98
Tests: whitespaces fix.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
474
diff
changeset
|
221 } |
248
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
222 } |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
223 |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
224 sub websocket_handle_client { |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
225 my ($client) = @_; |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
226 |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
227 $client->autoflush(1); |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
228 $client->blocking(0); |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
229 |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
230 my $poll = IO::Poll->new; |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
231 |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
232 my $hs = Protocol::WebSocket::Handshake::Server->new; |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
233 my $frame = Protocol::WebSocket::Frame->new; |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
234 my $buffer = ''; |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
235 my $closed; |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
236 my $n; |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
237 |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
238 log2c("(new connection $client)"); |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
239 |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
240 while (1) { |
343
e7dc8f4d0a4b
Tests: whitespace and spelling fixes.
Sergey Kandaurov <pluknet@nginx.com>
parents:
317
diff
changeset
|
241 $poll->mask($client => ($buffer ? POLLIN|POLLOUT : POLLIN)); |
248
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
242 my $p = $poll->poll(0.5); |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
243 log2c("(poll $p)"); |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
244 |
925
6bb1f2ccd386
Tests: removed unused variables.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
589
diff
changeset
|
245 foreach ($poll->handles(POLLIN)) { |
248
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
246 $n = $client->sysread(my $chunk, 65536); |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
247 return unless $n; |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
248 |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
249 log2i($chunk); |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
250 |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
251 if (!$hs->is_done) { |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
252 unless (defined $hs->parse($chunk)) { |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
253 log2c("(error: " . $hs->error . ")"); |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
254 return; |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
255 } |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
256 |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
257 if ($hs->is_done) { |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
258 $buffer = $hs->to_string; |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
259 log2o($buffer); |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
260 } |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
261 |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
262 log2c("(parse: $chunk)"); |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
263 } |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
264 |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
265 $frame->append($chunk); |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
266 |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
267 while (defined(my $message = $frame->next)) { |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
268 my $f; |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
269 |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
270 if ($frame->is_close) { |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
271 log2c("(close frame)"); |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
272 $closed = 1; |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
273 $f = $frame->new(type => 'close') |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
274 ->to_bytes; |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
275 } else { |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
276 $message =~ s/foo/bar/g; |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
277 $f = $frame->new($message)->to_bytes; |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
278 } |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
279 |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
280 log2o($f); |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
281 $buffer .= $f; |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
282 } |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
283 } |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
284 |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
285 foreach my $writer ($poll->handles(POLLOUT)) { |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
286 next unless length $buffer; |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
287 $n = $writer->syswrite($buffer); |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
288 substr $buffer, 0, $n, ''; |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
289 } |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
290 |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
291 if ($closed && length $buffer == 0) { |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
292 log2c("(closed)"); |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
293 return; |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
294 } |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
295 } |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
296 } |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
297 |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
298 sub log2i { Test::Nginx::log_core('|| <<', @_); } |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
299 sub log2o { Test::Nginx::log_core('|| >>', @_); } |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
300 sub log2c { Test::Nginx::log_core('||', @_); } |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
301 |
c388d7c3a666
Tests: tests for upcoming websocket proxy support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
302 ############################################################################### |