Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit2946123

Browse files
committed
Ensured Netty provider uses CONNECT when proxying ws
The WS standard requires that clients use the CONNECT method whenproxying WebSockets, even if they aren't using SSL. The Grizzlyprovider already supported this, but the Netty didn't.I also implemented a test that tested this case.
1 parent486cc11 commit2946123

File tree

2 files changed

+45
-25
lines changed

2 files changed

+45
-25
lines changed

‎src/main/java/com/ning/http/client/providers/netty/NettyAsyncHttpProvider.java‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -649,7 +649,7 @@ protected final static HttpRequest buildRequest(AsyncHttpClientConfig config, Re
649649
throwsIOException {
650650

651651
Stringmethod =request.getMethod();
652-
if (allowConnect &&proxyServer !=null &&isSecure(uri)) {
652+
if (allowConnect &&proxyServer !=null &&(isSecure(uri) ||isWebSocket(uri.getScheme()))) {
653653
method =HttpMethod.CONNECT.toString();
654654
}
655655
returnconstruct(config,request,newHttpMethod(method),uri,buffer,proxyServer);

‎src/test/java/com/ning/http/client/websocket/ProxyTunnellingTest.java‎

Lines changed: 44 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
importorg.eclipse.jetty.server.nio.SelectChannelConnector;
2828
importorg.eclipse.jetty.server.ssl.SslSelectChannelConnector;
2929
importorg.testng.annotations.AfterClass;
30+
importorg.testng.annotations.AfterMethod;
3031
importorg.testng.annotations.BeforeClass;
3132
importorg.testng.annotations.Test;
3233

@@ -43,39 +44,46 @@ public abstract class ProxyTunnellingTest extends AbstractBasicTest {
4344
intport2;
4445
privateServerserver2;
4546

46-
@BeforeClass(alwaysRun =true)
4747
publicvoidsetUpGlobal()throwsException {
48-
server2 =newServer();
48+
}
49+
50+
privatevoidsetUpServers(Connectorserver2Connector)throwsException {
4951

5052
port1 =findFreePort();
5153
port2 =findFreePort();
52-
5354
Connectorlistener =newSelectChannelConnector();
54-
5555
listener.setHost("127.0.0.1");
5656
listener.setPort(port1);
57-
5857
addConnector(listener);
58+
setHandler(newConnectHandler());
59+
start();
5960

60-
SslSelectChannelConnectorconnector =newSslSelectChannelConnector();
61-
connector.setHost("127.0.0.1");
62-
connector.setPort(port2);
61+
server2 =newServer();
62+
63+
server2Connector.setHost("127.0.0.1");
64+
server2Connector.setPort(port2);
65+
66+
server2.addConnector(server2Connector);
67+
68+
server2.setHandler(getWebSocketHandler());
69+
server2.start();
70+
log.info("Local HTTP server started successfully");
71+
72+
}
73+
74+
privatevoidsetUpServer()throwsException {
75+
setUpServers(newSelectChannelConnector());
76+
}
6377

78+
privatevoidsetUpSSlServer2()throwsException {
79+
SslSelectChannelConnectorconnector =newSslSelectChannelConnector();
6480
ClassLoadercl =getClass().getClassLoader();
6581
URLkeystoreUrl =cl.getResource("ssltest-keystore.jks");
6682
StringkeyStoreFile =newFile(keystoreUrl.toURI()).getAbsolutePath();
6783
connector.setKeystore(keyStoreFile);
6884
connector.setKeyPassword("changeit");
6985
connector.setKeystoreType("JKS");
70-
71-
server2.addConnector(connector);
72-
73-
setHandler(newConnectHandler());
74-
start();
75-
76-
server2.setHandler(getWebSocketHandler());
77-
server2.start();
78-
log.info("Local HTTP server started successfully");
86+
setUpServers(connector);
7987
}
8088

8189
@Override
@@ -88,27 +96,38 @@ public org.eclipse.jetty.websocket.WebSocket doWebSocketConnect(HttpServletReque
8896
};
8997
}
9098

91-
@AfterClass(alwaysRun =true)
99+
@AfterMethod(alwaysRun =true)
92100
publicvoidtearDownGlobal()throwsException {
93101
stop();
94-
server2.stop();
102+
if (server2 !=null) {
103+
server2.stop();
104+
}
105+
server2 =null;
95106
}
96107

97-
protectedStringgetTargetUrl() {
98-
returnString.format("wss://127.0.0.1:%d/",port2);
108+
@Test(timeOut =60000)
109+
publicvoidechoWSText()throwsException {
110+
setUpServer();
111+
runTest("ws");
99112
}
100113

101114
@Test(timeOut =60000)
102-
publicvoidechoText()throwsException {
115+
publicvoidechoWSSText()throwsException {
116+
setUpSSlServer2();
117+
runTest("wss");
118+
}
103119

104-
ProxyServerps =newProxyServer(ProxyServer.Protocol.HTTPS,"127.0.0.1",port1);
120+
privatevoidrunTest(Stringprotocol)throwsException {
121+
StringtargetUrl =String.format("%s://127.0.0.1:%d/",protocol,port2);
122+
123+
ProxyServerps =newProxyServer(ProxyServer.Protocol.HTTP,"127.0.0.1",port1);
105124
AsyncHttpClientConfigconfig =newAsyncHttpClientConfig.Builder().setProxyServer(ps).build();
106125
AsyncHttpClientasyncHttpClient =getAsyncHttpClient(config);
107126
try {
108127
finalCountDownLatchlatch =newCountDownLatch(1);
109128
finalAtomicReference<String>text =newAtomicReference<String>("");
110129

111-
WebSocketwebsocket =asyncHttpClient.prepareGet(getTargetUrl()).execute(newWebSocketUpgradeHandler.Builder().addWebSocketListener(newWebSocketTextListener() {
130+
WebSocketwebsocket =asyncHttpClient.prepareGet(targetUrl).execute(newWebSocketUpgradeHandler.Builder().addWebSocketListener(newWebSocketTextListener() {
112131

113132
@Override
114133
publicvoidonMessage(Stringmessage) {
@@ -143,5 +162,6 @@ public void onError(Throwable t) {
143162
}finally {
144163
asyncHttpClient.close();
145164
}
165+
146166
}
147167
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp