/****************************************************************************** * * Copyright 2011-2012 Tavendo GmbH * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * ******************************************************************************/ package de.tavendo.autobahn; import java.net.URI; /** * WebSockets message classes. * The master thread and the background reader/writer threads communicate using these messages * for WebSockets connections. */ public class WebSocketMessage { public static class WebSocketCloseCode { public static final int NORMAL = 1000; public static final int ENDPOINT_GOING_AWAY = 1001; public static final int ENDPOINT_PROTOCOL_ERROR = 1002; public static final int ENDPOINT_UNSUPPORTED_DATA_TYPE = 1003; public static final int RESERVED = 1004; public static final int RESERVED_NO_STATUS = 1005; public static final int RESERVED_NO_CLOSING_HANDSHAKE = 1006; public static final int ENDPOINT_BAD_DATA = 1007; public static final int POLICY_VIOLATION = 1008; public static final int MESSAGE_TOO_BIG = 1009; public static final int ENDPOINT_NEEDS_EXTENSION = 1010; public static final int UNEXPECTED_CONDITION = 1011; public static final int RESERVED_TLS_REQUIRED = 1015; } /// Base message class. public static class Message { } /// Quite background thread. public static class Quit extends Message { } /// Initial WebSockets handshake (client request). public static class ClientHandshake extends Message { private final URI mURI; private final URI mOrigin; private final String[] mSubprotocols; ClientHandshake(URI uri) { this.mURI = uri; this.mOrigin = null; this.mSubprotocols = null; } ClientHandshake(URI uri, URI origin, String[] subprotocols) { this.mURI = uri; this.mOrigin = origin; this.mSubprotocols = subprotocols; } public URI getURI() { return mURI; } public URI getOrigin() { return mOrigin; } public String[] getSubprotocols() { return mSubprotocols; } } /// Initial WebSockets handshake (server response). public static class ServerHandshake extends Message { public boolean mSuccess; public ServerHandshake(boolean success) { mSuccess = success; } } /// WebSockets connection lost public static class ConnectionLost extends Message { } public static class ServerError extends Message { public int mStatusCode; public String mStatusMessage; public ServerError(int statusCode, String statusMessage) { mStatusCode = statusCode; mStatusMessage = statusMessage; } } /// WebSockets reader detected WS protocol violation. public static class ProtocolViolation extends Message { public WebSocketException mException; public ProtocolViolation(WebSocketException e) { mException = e; } } /// An exception occured in the WS reader or WS writer. public static class Error extends Message { public Exception mException; public Error(Exception e) { mException = e; } } /// WebSockets text message to send or received. public static class TextMessage extends Message { public String mPayload; TextMessage(String payload) { mPayload = payload; } } /// WebSockets raw (UTF-8) text message to send or received. public static class RawTextMessage extends Message { public byte[] mPayload; RawTextMessage(byte[] payload) { mPayload = payload; } } /// WebSockets binary message to send or received. public static class BinaryMessage extends Message { public byte[] mPayload; BinaryMessage(byte[] payload) { mPayload = payload; } } /// WebSockets close to send or received. public static class Close extends Message { private int mCode; private String mReason; Close() { mCode = WebSocketCloseCode.UNEXPECTED_CONDITION; mReason = null; } Close(int code) { mCode = code; mReason = null; } Close(int code, String reason) { mCode = code; mReason = reason; } public int getCode() { return mCode; } public String getReason() { return mReason; } } /// WebSockets ping to send or received. public static class Ping extends Message { public byte[] mPayload; Ping() { mPayload = null; } Ping(byte[] payload) { mPayload = payload; } } /// WebSockets pong to send or received. public static class Pong extends Message { public byte[] mPayload; Pong() { mPayload = null; } Pong(byte[] payload) { mPayload = payload; } } }