Skip to content

Commit 825c9c7

Browse files
committed
-added first draft 17 support by bumping /Sec-WebSocket-Version/ number
1 parent 103f87f commit 825c9c7

File tree

3 files changed

+47
-16
lines changed

3 files changed

+47
-16
lines changed

example/ChatClient.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import net.tootallnate.websocket.Draft;
1919
import net.tootallnate.websocket.WebSocketClient;
2020
import net.tootallnate.websocket.drafts.Draft_10;
21+
import net.tootallnate.websocket.drafts.Draft_17;
2122
import net.tootallnate.websocket.drafts.Draft_75;
2223
import net.tootallnate.websocket.drafts.Draft_76;
2324

@@ -41,7 +42,7 @@ public ChatClient() {
4142
layout.setRows(6);
4243
c.setLayout(layout);
4344

44-
Draft[] drafts = { new Draft_10(), new Draft_76(), new Draft_75() };
45+
Draft[] drafts = { new Draft_10(), new Draft_17(), new Draft_76(), new Draft_75() };
4546
draft = new JComboBox( drafts );
4647
c.add(draft);
4748

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

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,19 @@ public class Draft_10 extends Draft {
3030

3131
private ByteBuffer incompleteframe;
3232

33-
33+
public static int readVersion(Handshakedata handshakedata){
34+
String vers = handshakedata.getFieldValue ( "Sec-WebSocket-Version" );
35+
if( !vers.isEmpty () ){
36+
int v;
37+
try {
38+
v = new Integer ( vers.trim () );
39+
return v;
40+
} catch ( NumberFormatException e ) {
41+
return -1;
42+
}
43+
}
44+
return -1;
45+
}
3446
@Override
3547
public List<Framedata> translateFrame( ByteBuffer buffer , int available ) {
3648
List<Framedata> frames = new LinkedList<Framedata> ();
@@ -114,7 +126,7 @@ else if( payloadlength == 126 ){
114126
}
115127
}
116128
int maskskeystart = foff + realpacketsize;
117-
realpacketsize += ( MASK ? 4 : 0 );
129+
realpacketsize += ( MASK ? 4 : 0 );
118130
int payloadstart = foff + realpacketsize;
119131
realpacketsize += payloadlength;
120132

@@ -207,18 +219,9 @@ public List<Framedata> createFrames( byte[] binary , boolean mask ) {
207219
@Override
208220
public HandshakeState acceptHandshakeAsServer( Handshakedata handshakedata ) throws InvalidHandshakeException {
209221
//TODO Do a more detailed formal handshake test
210-
String vers = handshakedata.getFieldValue ( "Sec-WebSocket-Version" );
211-
if( !vers.isEmpty () ){
212-
int v;
213-
try {
214-
v = new Integer ( vers.trim () );
215-
} catch ( NumberFormatException e ) {
216-
return HandshakeState.NOT_MATCHED;
217-
}
218-
if( v == 7 || v == 8 )//g
219-
return HandshakeState.MATCHED;
220-
}
221-
222+
int v = readVersion( handshakedata );
223+
if( v == 7 || v == 8 )//g
224+
return HandshakeState.MATCHED;
222225
return HandshakeState.NOT_MATCHED;
223226
}
224227

@@ -241,7 +244,6 @@ public HandshakeBuilder postProcessHandshakeRequestAsClient( HandshakeBuilder re
241244
request.put ( "Upgrade" , "websocket" );
242245
request.put ( "Connection" , "Upgrade" ); //to respond to a Connection keep alives
243246
request.put ( "Sec-WebSocket-Version" , "8" );
244-
request.put ( "Sec-WebSocket-Key" , "8" );
245247

246248
byte[] random = new byte[16];
247249
new Random().nextBytes( random );
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package net.tootallnate.websocket.drafts;
2+
3+
import java.util.Random;
4+
5+
import com.sun.org.apache.regexp.internal.recompile;
6+
7+
import net.tootallnate.websocket.HandshakeBuilder;
8+
import net.tootallnate.websocket.Handshakedata;
9+
import net.tootallnate.websocket.Draft.HandshakeState;
10+
import net.tootallnate.websocket.exeptions.InvalidHandshakeException;
11+
import sun.misc.BASE64Encoder;
12+
13+
public class Draft_17 extends Draft_10 {
14+
@Override
15+
public HandshakeState acceptHandshakeAsServer( Handshakedata handshakedata ) throws InvalidHandshakeException {
16+
int v = readVersion( handshakedata );
17+
if( v == 13 )
18+
return HandshakeState.MATCHED;
19+
return HandshakeState.NOT_MATCHED;
20+
}
21+
22+
@Override
23+
public HandshakeBuilder postProcessHandshakeRequestAsClient( HandshakeBuilder request ) {
24+
super.postProcessHandshakeRequestAsClient( request );
25+
request.put ( "Sec-WebSocket-Version" , "13" );//overwriting the previous
26+
return request;
27+
}
28+
}

0 commit comments

Comments
 (0)