diff --git a/src/main/java/org/java_websocket/WebSocketFactory.java b/src/main/java/org/java_websocket/WebSocketFactory.java index 651e97430..0d6ff018c 100644 --- a/src/main/java/org/java_websocket/WebSocketFactory.java +++ b/src/main/java/org/java_websocket/WebSocketFactory.java @@ -6,7 +6,20 @@ import org.java_websocket.drafts.Draft; public interface WebSocketFactory { - public WebSocket createWebSocket( WebSocketAdapter a, Draft d, Socket s ); - public WebSocket createWebSocket( WebSocketAdapter a, List drafts, Socket s ); + /** + * Create a new Websocket with the provided listener, drafts and socket + * @param a The Listener for the WebsocketImpl + * @param d The draft which should be used + * @return A WebsocketImpl + */ + WebSocket createWebSocket( WebSocketAdapter a, Draft d); + + /** + * Create a new Websocket with the provided listener, drafts and socket + * @param a The Listener for the WebsocketImpl + * @param drafts The drafts which should be used + * @return A WebsocketImpl + */ + WebSocket createWebSocket( WebSocketAdapter a, List drafts); } diff --git a/src/main/java/org/java_websocket/framing/CloseFrame.java b/src/main/java/org/java_websocket/framing/CloseFrame.java index f253b8dd6..e059f7b1d 100644 --- a/src/main/java/org/java_websocket/framing/CloseFrame.java +++ b/src/main/java/org/java_websocket/framing/CloseFrame.java @@ -93,6 +93,15 @@ public interface CloseFrame extends Framedata { public static final int BUGGYCLOSE = -2; public static final int FLASHPOLICY = -3; - public int getCloseCode() throws InvalidFrameException; - public String getMessage() throws InvalidDataException; + /** + * Getter for the close code used in this close frame + * @return the used close code + */ + int getCloseCode(); + + /** + * Getter for the close message used in this close frame + * @return the used close message + */ + String getMessage(); } diff --git a/src/main/java/org/java_websocket/framing/CloseFrameBuilder.java b/src/main/java/org/java_websocket/framing/CloseFrameBuilder.java index eac66fe0f..a10a790e3 100644 --- a/src/main/java/org/java_websocket/framing/CloseFrameBuilder.java +++ b/src/main/java/org/java_websocket/framing/CloseFrameBuilder.java @@ -7,23 +7,52 @@ import java.nio.ByteBuffer; public class CloseFrameBuilder extends FramedataImpl1 implements CloseFrame { - + /** + * Attribute for just an empty ByteBuffer + */ static final ByteBuffer emptybytebuffer = ByteBuffer.allocate( 0 ); + /** + * The close code used in this close frame + */ private int code; + + /** + * The close message used in this close frame + */ private String reason; + /** + * Constructor for a close frame + * + * Using opcode closing and fin = true + */ public CloseFrameBuilder() { super( Opcode.CLOSING ); setFin( true ); } + /** + * Constructor for a close frame + * + * Using opcode closing and fin = true + * + * @param code The close code causing this close frame + */ public CloseFrameBuilder( int code ) throws InvalidDataException { super( Opcode.CLOSING ); setFin( true ); setCodeAndMessage( code, "" ); } + /** + * Constructor for a close frame + * + * Using opcode closing and fin = true + * + * @param code The close code causing this close frame + * @param m The close message explaining this close frame a bit more + */ public CloseFrameBuilder( int code, String m ) throws InvalidDataException { super( Opcode.CLOSING ); setFin( true ); diff --git a/src/main/java/org/java_websocket/framing/FrameBuilder.java b/src/main/java/org/java_websocket/framing/FrameBuilder.java index 25a20de43..b5206ac06 100644 --- a/src/main/java/org/java_websocket/framing/FrameBuilder.java +++ b/src/main/java/org/java_websocket/framing/FrameBuilder.java @@ -6,12 +6,29 @@ public interface FrameBuilder extends Framedata { - public abstract void setFin( boolean fin ); - - public abstract void setOptcode( Opcode optcode ); - - public abstract void setPayload( ByteBuffer payload ) throws InvalidDataException; - - public abstract void setTransferemasked( boolean transferemasked ); + /** + * Setter for fin to indicate if this frame is the final fragment + * @param fin true, if this frame is the final fragment + */ + void setFin( boolean fin ); + + /** + * Setter for the opcode to use, how the provided "Payload data" should be interpreted + * @param optcode the interpretation as a Opcode + */ + void setOptcode( Opcode optcode ); + + /** + * Setter for the "Payload data" to use in this frame + * @param payload the "Payload data" + * @throws InvalidDataException indicates that the provided "Payload data" is not a valid data + */ + void setPayload( ByteBuffer payload ) throws InvalidDataException; + + /** + * Setter for the transfermask to use in this frame + * @param transferemasked true, "Payload data" is masked + */ + void setTransferemasked( boolean transferemasked ); } \ No newline at end of file diff --git a/src/main/java/org/java_websocket/framing/Framedata.java b/src/main/java/org/java_websocket/framing/Framedata.java index cad82be2f..19791f863 100644 --- a/src/main/java/org/java_websocket/framing/Framedata.java +++ b/src/main/java/org/java_websocket/framing/Framedata.java @@ -8,13 +8,40 @@ public interface Framedata { /** * Enum which contains the different valid opcodes */ - public enum Opcode { + enum Opcode { CONTINUOUS, TEXT, BINARY, PING, PONG, CLOSING // more to come } - public boolean isFin(); - public boolean getTransfereMasked(); - public Opcode getOpcode(); - public ByteBuffer getPayloadData();// TODO the separation of the application data and the extension data is yet to be done - public abstract void append( Framedata nextframe ) throws InvalidFrameException; + + /** + * Indicates that this is the final fragment in a message. The first fragment MAY also be the final fragment. + * @return true, if this frame is the final fragment + */ + boolean isFin(); + + /** + * Defines whether the "Payload data" is masked. + * @return true, "Payload data" is masked + */ + boolean getTransfereMasked(); + + /** + * Defines the interpretation of the "Payload data". + * @return the interpretation as a Opcode + */ + Opcode getOpcode(); + + /** + * The "Payload data" which was sent in this frame + * @return the "Payload data" as ByteBuffer + */ + ByteBuffer getPayloadData();// TODO the separation of the application data and the extension data is yet to be done + + /** + * Appends an additional frame to the current frame + * + * This methods does not override the opcode, but does override the fin + * @param nextframe the additional frame + */ + void append( Framedata nextframe ); } diff --git a/src/main/java/org/java_websocket/framing/FramedataImpl1.java b/src/main/java/org/java_websocket/framing/FramedataImpl1.java index 628dd8ecf..9dce2e4f3 100644 --- a/src/main/java/org/java_websocket/framing/FramedataImpl1.java +++ b/src/main/java/org/java_websocket/framing/FramedataImpl1.java @@ -8,15 +8,40 @@ import org.java_websocket.util.Charsetfunctions; public class FramedataImpl1 implements FrameBuilder { - protected static byte[] emptyarray = {}; + /** + * Attribute for just an empty array + */ + private static byte[] emptyarray = {}; + + /** + * Indicates that this is the final fragment in a message. + */ protected boolean fin; + /** + * Defines the interpretation of the "Payload data". + */ protected Opcode optcode; + + /** + * The unmasked "Payload data" which was sent in this frame + */ private ByteBuffer unmaskedpayload; + + /** + * Defines whether the "Payload data" is masked. + */ protected boolean transferemasked; + /** + * Constructor for a FramedataImpl without any attributes set + */ public FramedataImpl1() { } + /** + * Constructor for a FramedataImpl without any attributes set apart from the opcode + * @param op the opcode to use + */ public FramedataImpl1( Opcode op ) { this.optcode = op; unmaskedpayload = ByteBuffer.wrap( emptyarray ); @@ -75,7 +100,7 @@ public void setTransferemasked( boolean transferemasked ) { } @Override - public void append( Framedata nextframe ) throws InvalidFrameException { + public void append( Framedata nextframe ) { ByteBuffer b = nextframe.getPayloadData(); if( unmaskedpayload == null ) { unmaskedpayload = ByteBuffer.allocate( b.remaining() ); diff --git a/src/main/java/org/java_websocket/server/DefaultSSLWebSocketServerFactory.java b/src/main/java/org/java_websocket/server/DefaultSSLWebSocketServerFactory.java index 32896f9a0..8dd73d557 100644 --- a/src/main/java/org/java_websocket/server/DefaultSSLWebSocketServerFactory.java +++ b/src/main/java/org/java_websocket/server/DefaultSSLWebSocketServerFactory.java @@ -40,12 +40,12 @@ public ByteChannel wrapChannel( SocketChannel channel, SelectionKey key ) throws } @Override - public WebSocketImpl createWebSocket( WebSocketAdapter a, Draft d, Socket c ) { + public WebSocketImpl createWebSocket( WebSocketAdapter a, Draft d) { return new WebSocketImpl( a, d ); } @Override - public WebSocketImpl createWebSocket( WebSocketAdapter a, List d, Socket s ) { + public WebSocketImpl createWebSocket( WebSocketAdapter a, List d) { return new WebSocketImpl( a, d ); } @Override diff --git a/src/main/java/org/java_websocket/server/DefaultWebSocketServerFactory.java b/src/main/java/org/java_websocket/server/DefaultWebSocketServerFactory.java index 4fcd55b61..6cfe7bfb6 100644 --- a/src/main/java/org/java_websocket/server/DefaultWebSocketServerFactory.java +++ b/src/main/java/org/java_websocket/server/DefaultWebSocketServerFactory.java @@ -12,11 +12,11 @@ public class DefaultWebSocketServerFactory implements WebSocketServerFactory { @Override - public WebSocketImpl createWebSocket( WebSocketAdapter a, Draft d, Socket s ) { + public WebSocketImpl createWebSocket( WebSocketAdapter a, Draft d) { return new WebSocketImpl( a, d ); } @Override - public WebSocketImpl createWebSocket( WebSocketAdapter a, List d, Socket s ) { + public WebSocketImpl createWebSocket( WebSocketAdapter a, List d) { return new WebSocketImpl( a, d ); } @Override diff --git a/src/main/java/org/java_websocket/server/WebSocketServer.java b/src/main/java/org/java_websocket/server/WebSocketServer.java index 568734f02..e02a1f787 100644 --- a/src/main/java/org/java_websocket/server/WebSocketServer.java +++ b/src/main/java/org/java_websocket/server/WebSocketServer.java @@ -361,7 +361,7 @@ public void run() { channel.configureBlocking( false ); Socket socket = channel.socket(); socket.setTcpNoDelay( tcpNoDelay ); - WebSocketImpl w = wsf.createWebSocket( this, drafts, socket ); + WebSocketImpl w = wsf.createWebSocket( this, drafts ); w.key = channel.register( selector, SelectionKey.OP_READ, w ); try { w.channel = wsf.wrapChannel( channel, w.key ); @@ -538,22 +538,6 @@ private void handleFatal( WebSocket conn, Exception e ) { } } - /** - * Gets the XML string that should be returned if a client requests a Flash - * security policy. - * - * The default implementation allows access from all remote domains, but - * only on the port that this WebSocketServer is listening on. - * - * This is specifically implemented for gitime's WebSocket client for Flash: - * https://github.com/gimite/web-socket-js - * - * @return An XML String that comforms to Flash's security policy. You MUST - * not include the null char at the end, it is appended automatically. - */ - protected String getFlashSecurityPolicy() { - return ""; - } @Override public final void onWebsocketMessage( WebSocket conn, String message ) { @@ -836,16 +820,10 @@ public void run() { */ public interface WebSocketServerFactory extends WebSocketFactory { @Override - public WebSocketImpl createWebSocket( WebSocketAdapter a, Draft d, Socket s ); + WebSocketImpl createWebSocket( WebSocketAdapter a, Draft d); - /** - * Create a new Websocket with the provided listener, drafts and socket - * @param a The Listener for the WebsocketImpl - * @param drafts The drafts which should be used - * @param s The socket which should be used - * @return A WebsocketImpl - */ - public WebSocketImpl createWebSocket( WebSocketAdapter a, List drafts, Socket s ); + @Override + WebSocketImpl createWebSocket( WebSocketAdapter a, List drafts ); /** * Allows to wrap the Socketchannel( key.channel() ) to insert a protocol layer( like ssl or proxy authentication) beyond the ws layer. @@ -855,11 +833,11 @@ public interface WebSocketServerFactory extends WebSocketFactory { * @return The channel on which the read and write operations will be performed.
* @throws IOException may be thrown while writing on the channel */ - public ByteChannel wrapChannel( SocketChannel channel, SelectionKey key ) throws IOException; + ByteChannel wrapChannel( SocketChannel channel, SelectionKey key ) throws IOException; /** * Allows to shutdown the websocket factory for a clean shutdown */ - public void close(); + void close(); } }