|
8 | 8 | import java.util.Collections;
|
9 | 9 | import java.util.LinkedList;
|
10 | 10 | import java.util.List;
|
| 11 | +import java.util.Random; |
11 | 12 |
|
12 | 13 | import net.tootallnate.websocket.Draft;
|
13 | 14 | import net.tootallnate.websocket.FrameBuilder;
|
@@ -221,30 +222,39 @@ public boolean acceptHandshakeAsServer( Handshakedata handshakedata ) throws Inv
|
221 | 222 |
|
222 | 223 | @Override
|
223 | 224 | 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" ) ) |
229 | 226 | 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 ) ) |
231 | 233 | return true;
|
232 | 234 | return false;
|
233 | 235 | }
|
234 | 236 |
|
235 | 237 | @Override
|
236 | 238 | public HandshakeBuilder postProcessHandshakeRequestAsClient( HandshakeBuilder request ) {
|
237 | 239 | 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 | + |
238 | 246 | return super.postProcessHandshakeRequestAsClient ( request );
|
239 | 247 | }
|
240 | 248 |
|
241 | 249 | @Override
|
242 | 250 | public HandshakeBuilder postProcessHandshakeResponseAsServer( Handshakedata request , HandshakeBuilder response) throws InvalidHandshakeException {
|
| 251 | + super.postProcessHandshakeResponseAsServer ( request , response ); |
| 252 | + response.setHttpStatusMessage( "Switching Protocols" ); |
243 | 253 | String seckey = request.getFieldValue ( "Sec-WebSocket-Key" );
|
244 | 254 | if ( seckey == null )
|
245 | 255 | throw new InvalidHandshakeException ( "missing Sec-WebSocket-Key" );
|
246 | 256 | response.put( "Sec-WebSocket-Accept" , generateFinalKey( seckey ) );
|
247 |
| - return super.postProcessHandshakeResponseAsServer ( request , response ); |
| 257 | + return response; |
248 | 258 | }
|
249 | 259 |
|
250 | 260 | private Opcode toOpcode( byte opcode ){
|
|
0 commit comments