Skip to content

Commit 5891f03

Browse files
committed
-added client side draft10 handshake validation
-completed basic client side draft10 opening handshake
1 parent e3902cf commit 5891f03

File tree

1 file changed

+17
-7
lines changed

1 file changed

+17
-7
lines changed

src/net/tootallnate/websocket/drafts/Draft_10.java

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import java.util.Collections;
99
import java.util.LinkedList;
1010
import java.util.List;
11+
import java.util.Random;
1112

1213
import net.tootallnate.websocket.Draft;
1314
import net.tootallnate.websocket.FrameBuilder;
@@ -221,30 +222,39 @@ public boolean acceptHandshakeAsServer( Handshakedata handshakedata ) throws Inv
221222

222223
@Override
223224
public boolean acceptHandshakeAsClient( Handshakedata request , Handshakedata response ) throws InvalidHandshakeException {
224-
String seckey_challenge = request.getFieldValue ( "Sec-WebSocket-Key" );
225-
if ( seckey_challenge == null )
226-
throw new InvalidHandshakeException ( "missing Sec-WebSocket-Key" );
227-
String seckey_answere = request.getFieldValue ( "Sec-WebSocket-Key" );
228-
if ( seckey_answere == null )
225+
if ( !request.hasFieldValue( "Sec-WebSocket-Key" ) || !response.hasFieldValue( "Sec-WebSocket-Accept" ) )
229226
throw new InvalidHandshakeException ( "missing Sec-WebSocket-Key" );
230-
if( generateFinalKey ( seckey_challenge ).equals ( generateFinalKey ( seckey_answere ) ) )
227+
228+
String seckey_answere = response.getFieldValue ( "Sec-WebSocket-Accept" );
229+
String seckey_challenge = request.getFieldValue ( "Sec-WebSocket-Key" );
230+
seckey_challenge = generateFinalKey ( seckey_challenge );
231+
232+
if( seckey_challenge.equals ( seckey_answere ) )
231233
return true;
232234
return false;
233235
}
234236

235237
@Override
236238
public HandshakeBuilder postProcessHandshakeRequestAsClient( HandshakeBuilder request ) {
237239
request.put ( "Sec-WebSocket-Version" , "8" );
240+
request.put ( "Sec-WebSocket-Key" , "8" );
241+
242+
byte[] random = new byte[16];
243+
new Random().nextBytes( random );
244+
request.put( "Sec-WebSocket-Key" , new BASE64Encoder ().encode ( random ) );
245+
238246
return super.postProcessHandshakeRequestAsClient ( request );
239247
}
240248

241249
@Override
242250
public HandshakeBuilder postProcessHandshakeResponseAsServer( Handshakedata request , HandshakeBuilder response) throws InvalidHandshakeException {
251+
super.postProcessHandshakeResponseAsServer ( request , response );
252+
response.setHttpStatusMessage( "Switching Protocols" );
243253
String seckey = request.getFieldValue ( "Sec-WebSocket-Key" );
244254
if ( seckey == null )
245255
throw new InvalidHandshakeException ( "missing Sec-WebSocket-Key" );
246256
response.put( "Sec-WebSocket-Accept" , generateFinalKey( seckey ) );
247-
return super.postProcessHandshakeResponseAsServer ( request , response );
257+
return response;
248258
}
249259

250260
private Opcode toOpcode( byte opcode ){

0 commit comments

Comments
 (0)