Skip to content

Commit 3076d00

Browse files
committed
improved handshake classes ( initiated by eab25a4 and 7c84fb6)
1 parent 86ebec4 commit 3076d00

23 files changed

Lines changed: 175 additions & 144 deletions

example/AutobahnClientTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import java.net.URI;
55

66
import org.java_websocket.Draft;
7-
import org.java_websocket.Handshakedata;
7+
import org.java_websocket.ServerHandshake;
88
import org.java_websocket.WebSocket;
99
import org.java_websocket.WebSocketClient;
1010
import org.java_websocket.drafts.Draft_17;
@@ -150,7 +150,7 @@ public void onError( Exception ex ) {
150150
}
151151

152152
@Override
153-
public void onOpen( Handshakedata handshake ) {
153+
public void onOpen( ServerHandshake handshake ) {
154154
}
155155

156156
@Override

example/AutobahnServerTest.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import java.net.InetSocketAddress;
22
import java.net.UnknownHostException;
33

4+
import org.java_websocket.ClientHandshake;
45
import org.java_websocket.Draft;
5-
import org.java_websocket.Handshakedata;
66
import org.java_websocket.WebSocket;
77
import org.java_websocket.WebSocketServer;
88
import org.java_websocket.drafts.Draft_17;
@@ -19,7 +19,7 @@ public AutobahnServerTest( InetSocketAddress address, Draft d ) {
1919
}
2020

2121
@Override
22-
public void onOpen( WebSocket conn, Handshakedata handshake ) {
22+
public void onOpen( WebSocket conn, ClientHandshake handshake ) {
2323
counter++;
2424
System.out.println( "///////////Opened connection number" + counter );
2525
}
@@ -42,6 +42,7 @@ public void onMessage( WebSocket conn, String message ) {
4242
e.printStackTrace();
4343
}
4444
}
45+
4546
@Override
4647
public void onMessage( WebSocket conn, byte[] blob ) {
4748
try {

example/ChatClient.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
import javax.swing.JTextField;
1515

1616
import org.java_websocket.Draft;
17-
import org.java_websocket.Handshakedata;
17+
import org.java_websocket.ServerHandshake;
1818
import org.java_websocket.WebSocket;
1919
import org.java_websocket.WebSocketClient;
2020
import org.java_websocket.drafts.Draft_10;
@@ -104,16 +104,19 @@ public void actionPerformed( ActionEvent e ) {
104104
// cc = new ChatClient(new URI(uriField.getText()), area, ( Draft ) draft.getSelectedItem() );
105105
cc = new WebSocketClient( new URI( uriField.getText() ), (Draft) draft.getSelectedItem() ) {
106106

107+
@Override
107108
public void onMessage( String message ) {
108109
ta.append( "got: " + message + "\n" );
109110
ta.setCaretPosition( ta.getDocument().getLength() );
110111
}
111112

112-
public void onOpen( Handshakedata handshake ) {
113+
@Override
114+
public void onOpen( ServerHandshake handshake ) {
113115
ta.append( "You are connected to ChatServer: " + getURI() + "\n" );
114116
ta.setCaretPosition( ta.getDocument().getLength() );
115117
}
116118

119+
@Override
117120
public void onClose( int code, String reason, boolean remote ) {
118121
ta.append( "You have been disconnected from: " + getURI() + "; Code: " + code + " " + reason + "\n" );
119122
ta.setCaretPosition( ta.getDocument().getLength() );
@@ -123,6 +126,7 @@ public void onClose( int code, String reason, boolean remote ) {
123126
close.setEnabled( false );
124127
}
125128

129+
@Override
126130
public void onError( Exception ex ) {
127131
ta.append( "Exception occured ...\n" + ex + "\n" );
128132
ta.setCaretPosition( ta.getDocument().getLength() );

example/ChatServer.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
import java.net.InetSocketAddress;
66
import java.net.UnknownHostException;
77

8-
import org.java_websocket.Handshakedata;
8+
import org.java_websocket.ClientHandshake;
99
import org.java_websocket.WebSocket;
1010
import org.java_websocket.WebSocketServer;
1111

@@ -22,7 +22,8 @@ public ChatServer( InetSocketAddress address ) {
2222
super( address );
2323
}
2424

25-
public void onOpen( WebSocket conn, Handshakedata handshake ) {
25+
@Override
26+
public void onOpen( WebSocket conn, ClientHandshake handshake ) {
2627
try {
2728
this.sendToAll( conn + " entered the room!" );
2829
} catch ( InterruptedException ex ) {
@@ -31,6 +32,7 @@ public void onOpen( WebSocket conn, Handshakedata handshake ) {
3132
System.out.println( conn + " entered the room!" );
3233
}
3334

35+
@Override
3436
public void onClose( WebSocket conn, int code, String reason, boolean remote ) {
3537
try {
3638
this.sendToAll( conn + " has left the room!" );
@@ -40,6 +42,7 @@ public void onClose( WebSocket conn, int code, String reason, boolean remote ) {
4042
System.out.println( conn + " has left the room!" );
4143
}
4244

45+
@Override
4346
public void onMessage( WebSocket conn, String message ) {
4447
try {
4548
this.sendToAll( conn + ": " + message );
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package org.java_websocket;
2+
3+
public interface ClientHandshake extends Handshakedata {
4+
public String getResourceDescriptor();
5+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package org.java_websocket;
2+
3+
public interface ClientHandshakeBuilder extends HandshakeBuilder, ClientHandshake {
4+
public void setResourceDescriptor( String resourcedescriptor );
5+
}

src/org/java_websocket/Draft.java

Lines changed: 28 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import java.util.Iterator;
66
import java.util.List;
77
import java.util.Locale;
8+
import java.util.regex.Pattern;
89

910
import org.java_websocket.WebSocket.Role;
1011
import org.java_websocket.exeptions.InvalidDataException;
@@ -26,6 +27,8 @@ public enum HandshakeState {
2627
}
2728

2829
public static final byte[] FLASH_POLICY_REQUEST = Charsetfunctions.utf8Bytes( "<policy-file-request/>\0" );
30+
private static Pattern getpattern = Pattern.compile( "" ); // GET / HTTP/1.1
31+
private static Pattern statuspattern = Pattern.compile( "" ); // HTTP/1.1 101 Switching Protocols
2932

3033
/** In some cases the handshake will be parsed different depending on whether */
3134
protected Role role = null;
@@ -56,42 +59,42 @@ public static String readStringLine( ByteBuffer buf ) {
5659
}
5760

5861
public static HandshakeBuilder translateHandshakeHttp( ByteBuffer buf, Role role ) throws InvalidHandshakeException {
59-
HandshakedataImpl1 draft = new HandshakedataImpl1();
62+
HandshakeBuilder handshake;
6063

6164
String line = readStringLine( buf );
6265
if( line == null )
6366
throw new InvalidHandshakeException( "could not match http status line" );
6467

65-
String[] firstLineTokens = line.split( " " );// eg. GET / HTTP/1.1
66-
67-
if( role == Role.CLIENT && firstLineTokens.length == 4 ) {
68-
// translating/parsing the response from the SERVER
69-
draft.setHttpVersion( firstLineTokens[ 0 ] );
70-
draft.setHttpStatus( Short.parseShort( firstLineTokens[ 1 ] ) );
71-
draft.setHttpStatusMessage( firstLineTokens[ 2 ] + ' ' + firstLineTokens[ 3 ] );
72-
} else if( role == Role.SERVER && firstLineTokens.length == 3 ) {
73-
// translating/parsing the request from the CLIENT
74-
draft.setMethod( firstLineTokens[ 0 ] );
75-
draft.setResourceDescriptor( firstLineTokens[ 1 ] );
76-
draft.setHttpVersion( firstLineTokens[ 2 ] );
77-
} else {
78-
throw new InvalidHandshakeException( "could not match http status line" );
68+
String[] firstLineTokens = line.split( " ", 3 );// eg. HTTP/1.1 101 Switching the Protocols
69+
if( firstLineTokens.length != 3 ) {
70+
throw new InvalidHandshakeException();
71+
}
72+
73+
if( role == Role.CLIENT ) {// translating/parsing the response from the SERVER
74+
handshake = new HandshakeImpl1Server();
75+
ServerHandshakeBuilder serverhandshake = (ServerHandshakeBuilder) handshake;
76+
serverhandshake.setHttpStatus( Short.parseShort( firstLineTokens[ 1 ] ) );
77+
serverhandshake.setHttpStatusMessage( firstLineTokens[ 2 ] );
78+
} else {// translating/parsing the request from the CLIENT
79+
ClientHandshakeBuilder clienthandshake = new HandshakeImpl1Client();
80+
clienthandshake.setResourceDescriptor( firstLineTokens[ 1 ] );
81+
handshake = clienthandshake;
7982
}
8083

8184
line = readStringLine( buf );
8285
while ( line != null && line.length() > 0 ) {
8386
String[] pair = line.split( ":", 2 );
8487
if( pair.length != 2 )
8588
throw new InvalidHandshakeException( "not an http header" );
86-
draft.put( pair[ 0 ], pair[ 1 ].replaceFirst( "^ +", "" ) );
89+
handshake.put( pair[ 0 ], pair[ 1 ].replaceFirst( "^ +", "" ) );
8790
line = readStringLine( buf );
8891
}
89-
return draft;
92+
return handshake;
9093
}
9194

92-
public abstract HandshakeState acceptHandshakeAsClient( Handshakedata request, Handshakedata response ) throws InvalidHandshakeException;
95+
public abstract HandshakeState acceptHandshakeAsClient( ClientHandshake request, ServerHandshake response ) throws InvalidHandshakeException;
9396

94-
public abstract HandshakeState acceptHandshakeAsServer( Handshakedata handshakedata ) throws InvalidHandshakeException;
97+
public abstract HandshakeState acceptHandshakeAsServer( ClientHandshake handshakedata ) throws InvalidHandshakeException;
9598

9699
protected boolean basicAccept( Handshakedata handshakedata ) {
97100
return handshakedata.getFieldValue( "Upgrade" ).equalsIgnoreCase( "websocket" ) && handshakedata.getFieldValue( "Connection" ).toLowerCase( Locale.ENGLISH ).contains( "upgrade" );
@@ -111,12 +114,12 @@ public List<ByteBuffer> createHandshake( Handshakedata handshakedata, Role ownro
111114

112115
public List<ByteBuffer> createHandshake( Handshakedata handshakedata, Role ownrole, boolean withcontent ) {
113116
StringBuilder bui = new StringBuilder( 100 );
114-
if( ownrole == Role.CLIENT ) {
117+
if( handshakedata instanceof ClientHandshake ) {
115118
bui.append( "GET " );
116-
bui.append( handshakedata.getResourceDescriptor() );
119+
bui.append( ( (ClientHandshake) handshakedata ).getResourceDescriptor() );
117120
bui.append( " HTTP/1.1" );
118-
} else if( ownrole == Role.SERVER ) {
119-
bui.append( "HTTP/1.1 101 " + handshakedata.getHttpStatusMessage() );
121+
} else if( handshakedata instanceof ServerHandshake ) {
122+
bui.append( "HTTP/1.1 101 " + ( (ServerHandshake) handshakedata ).getHttpStatusMessage() );
120123
} else {
121124
throw new RuntimeException( "unknow role" );
122125
}
@@ -142,9 +145,9 @@ public List<ByteBuffer> createHandshake( Handshakedata handshakedata, Role ownro
142145
return Collections.singletonList( bytebuffer );
143146
}
144147

145-
public abstract HandshakeBuilder postProcessHandshakeRequestAsClient( HandshakeBuilder request ) throws InvalidHandshakeException;
148+
public abstract ClientHandshakeBuilder postProcessHandshakeRequestAsClient( ClientHandshakeBuilder request ) throws InvalidHandshakeException;
146149

147-
public abstract HandshakeBuilder postProcessHandshakeResponseAsServer( Handshakedata request, HandshakeBuilder response ) throws InvalidHandshakeException;
150+
public abstract HandshakeBuilder postProcessHandshakeResponseAsServer( ClientHandshake request, ServerHandshakeBuilder response ) throws InvalidHandshakeException;
148151

149152
public abstract List<Framedata> translateFrame( ByteBuffer buffer ) throws InvalidDataException;
150153

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,6 @@
11
package org.java_websocket;
22

33
public interface HandshakeBuilder extends Handshakedata {
4-
public abstract void setHttpVersion( String version );
5-
public abstract void setMethod( String method );
64
public abstract void setContent( byte[] content );
7-
public abstract void setResourceDescriptor( String resourcedescriptor );
8-
public abstract void setHttpStatus( short status );
9-
public abstract void setHttpStatusMessage( String message );
105
public abstract void put( String name, String value );
116
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package org.java_websocket;
2+
3+
public class HandshakeImpl1Client extends HandshakedataImpl1 implements ClientHandshakeBuilder {
4+
private String resourcedescriptor;
5+
6+
public HandshakeImpl1Client() {
7+
}
8+
9+
public void setResourceDescriptor( String resourcedescriptor ) throws IllegalArgumentException {
10+
this.resourcedescriptor = resourcedescriptor;
11+
}
12+
13+
public String getResourceDescriptor() {
14+
return resourcedescriptor;
15+
}
16+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package org.java_websocket;
2+
3+
public class HandshakeImpl1Server extends HandshakedataImpl1 implements ServerHandshakeBuilder {
4+
private short httpstatus;
5+
private String httpstatusmessage;
6+
7+
public HandshakeImpl1Server() {
8+
}
9+
10+
@Override
11+
public String getHttpStatusMessage() {
12+
return httpstatusmessage;
13+
}
14+
15+
@Override
16+
public short getHttpStatus() {
17+
return httpstatus;
18+
}
19+
20+
public void setHttpStatusMessage( String message ) {
21+
this.httpstatusmessage = message;
22+
}
23+
24+
public void setHttpStatus( short status ) {
25+
httpstatus = status;
26+
}
27+
28+
29+
}

0 commit comments

Comments
 (0)