diff --git a/src/main/java/org/java_websocket/WebSocketImpl.java b/src/main/java/org/java_websocket/WebSocketImpl.java index 0b9caeb4c..d10c87b80 100644 --- a/src/main/java/org/java_websocket/WebSocketImpl.java +++ b/src/main/java/org/java_websocket/WebSocketImpl.java @@ -261,23 +261,28 @@ private boolean decodeHandshake( ByteBuffer socketBufferNew ) { return false; } ServerHandshake handshake = (ServerHandshake) tmphandshake; - handshakestate = draft.acceptHandshakeAsClient( handshakerequest, handshake ); - if( handshakestate == HandshakeState.MATCHED ) { - try { - wsl.onWebsocketHandshakeReceivedAsClient( this, handshakerequest, handshake ); - } catch ( InvalidDataException e ) { - flushAndClose( e.getCloseCode(), e.getMessage(), false ); - return false; - } catch ( RuntimeException e ) { - wsl.onWebsocketError( this, e ); - flushAndClose( CloseFrame.NEVER_CONNECTED, e.getMessage(), false ); - return false; + if (!handshake.getHttpStatusMessage().equalsIgnoreCase("Connection Established")) // Ignore Proxy CONNECT response + { + handshakestate = draft.acceptHandshakeAsClient( handshakerequest, handshake ); + if( handshakestate == HandshakeState.MATCHED ) { + try { + wsl.onWebsocketHandshakeReceivedAsClient( this, handshakerequest, handshake ); + } catch ( InvalidDataException e ) { + flushAndClose( e.getCloseCode(), e.getMessage(), false ); + return false; + } catch ( RuntimeException e ) { + wsl.onWebsocketError( this, e ); + flushAndClose( CloseFrame.NEVER_CONNECTED, e.getMessage(), false ); + return false; + } + open( handshake ); + return true; + } else { + close( CloseFrame.PROTOCOL_ERROR, "draft " + draft + " refuses handshake" ); } - open( handshake ); - return true; - } else { - close( CloseFrame.PROTOCOL_ERROR, "draft " + draft + " refuses handshake" ); } + else + return false; } } catch ( InvalidHandshakeException e ) { close( e ); diff --git a/src/main/java/org/java_websocket/client/WebSocketClient.java b/src/main/java/org/java_websocket/client/WebSocketClient.java index d885fcda2..b15b506a5 100644 --- a/src/main/java/org/java_websocket/client/WebSocketClient.java +++ b/src/main/java/org/java_websocket/client/WebSocketClient.java @@ -419,10 +419,12 @@ public String buildHandShake() { b.append( host ); b.append( ":" ); b.append( getPort() ); - b.append( " HTTP/1.1\n" ); + b.append( " HTTP/1.1\r\n" ); b.append( "Host: " ); b.append( host ); - b.append( "\n" ); + b.append( ":" ); + b.append( getPort() ); + b.append( "\r\n\r\n" ); return b.toString(); } } diff --git a/src/main/java/org/java_websocket/handshake/HandshakedataImpl1.java b/src/main/java/org/java_websocket/handshake/HandshakedataImpl1.java index d4d9555c6..3f9b2d2d5 100644 --- a/src/main/java/org/java_websocket/handshake/HandshakedataImpl1.java +++ b/src/main/java/org/java_websocket/handshake/HandshakedataImpl1.java @@ -2,14 +2,14 @@ import java.util.Collections; import java.util.Iterator; -import java.util.TreeMap; +import java.util.LinkedHashMap; public class HandshakedataImpl1 implements HandshakeBuilder { private byte[] content; - private TreeMap map; + private LinkedHashMap map; public HandshakedataImpl1() { - map = new TreeMap( String.CASE_INSENSITIVE_ORDER ); + map = new LinkedHashMap(); } /*public HandshakedataImpl1( Handshakedata h ) {