/******************************************************************************
*
* 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 org.magnum.soda.transport.wamp;
/**
* WebSockets connection options. This can be supplied to WebSocketConnection in connect().
* Note that the latter copies the options provided to connect(), so any change after
* connect will have no effect.
*/
public class WebSocketOptions {
private int mMaxFramePayloadSize;
private int mMaxMessagePayloadSize;
private boolean mReceiveTextMessagesRaw;
private boolean mTcpNoDelay;
private int mSocketReceiveTimeout;
private int mSocketConnectTimeout;
private boolean mValidateIncomingUtf8;
private boolean mMaskClientFrames;
private int mReconnectInterval;
/**
* Construct default options.
*/
public WebSocketOptions() {
mMaxFramePayloadSize = 128 * 1024;
mMaxMessagePayloadSize = 128 * 1024;
mReceiveTextMessagesRaw = false;
mTcpNoDelay = true;
mSocketReceiveTimeout = 200;
mSocketConnectTimeout = 6000;
mValidateIncomingUtf8 = true;
mMaskClientFrames = true;
mReconnectInterval = 0; // no reconnection by default
}
/**
* Construct options as copy from other options object.
*
* @param other Options to copy.
*/
public WebSocketOptions(WebSocketOptions other) {
mMaxFramePayloadSize = other.mMaxFramePayloadSize;
mMaxMessagePayloadSize = other.mMaxMessagePayloadSize;
mReceiveTextMessagesRaw = other.mReceiveTextMessagesRaw;
mTcpNoDelay = other.mTcpNoDelay;
mSocketReceiveTimeout = other.mSocketReceiveTimeout;
mSocketConnectTimeout = other.mSocketConnectTimeout;
mValidateIncomingUtf8 = other.mValidateIncomingUtf8;
mMaskClientFrames = other.mMaskClientFrames;
mReconnectInterval = other.mReconnectInterval;
}
/**
* Receive text message as raw byte array with verified,
* but non-decoded UTF-8.
*
* DEFAULT: false
*
* @param enabled True to enable.
*/
public void setReceiveTextMessagesRaw(boolean enabled) {
mReceiveTextMessagesRaw = enabled;
}
/**
* When true, WebSockets text messages are provided as
* verified, but non-decoded UTF-8 in byte arrays.
*
* @return True, iff option is enabled.
*/
public boolean getReceiveTextMessagesRaw() {
return mReceiveTextMessagesRaw;
}
/**
* Set maximum frame payload size that will be accepted
* when receiving.
*
* DEFAULT: 4MB
*
* @param size Maximum size in octets for frame payload.
*/
public void setMaxFramePayloadSize(int size) {
if (size > 0) {
mMaxFramePayloadSize = size;
if (mMaxMessagePayloadSize < mMaxFramePayloadSize) {
mMaxMessagePayloadSize = mMaxFramePayloadSize;
}
}
}
/**
* Get maxium frame payload size that will be accepted
* when receiving.
*
* @return Maximum size in octets for frame payload.
*/
public int getMaxFramePayloadSize() {
return mMaxFramePayloadSize;
}
/**
* Set maximum message payload size (after reassembly of fragmented
* messages) that will be accepted when receiving.
*
* DEFAULT: 4MB
*
* @param size Maximum size in octets for message payload.
*/
public void setMaxMessagePayloadSize(int size) {
if (size > 0) {
mMaxMessagePayloadSize = size;
if (mMaxMessagePayloadSize < mMaxFramePayloadSize) {
mMaxFramePayloadSize = mMaxMessagePayloadSize;
}
}
}
/**
* Get maximum message payload size (after reassembly of fragmented
* messages) that will be accepted when receiving.
*
* @return Maximum size in octets for message payload.
*/
public int getMaxMessagePayloadSize() {
return mMaxMessagePayloadSize;
}
/**
* Set TCP No-Delay ("Nagle") for TCP connection.
*
* DEFAULT: true
*
* @param enabled True to enable TCP No-Delay.
*/
public void setTcpNoDelay(boolean enabled) {
mTcpNoDelay = enabled;
}
/**
* Get TCP No-Delay ("Nagle") for TCP connection.
*
* @return True, iff TCP No-Delay is enabled.
*/
public boolean getTcpNoDelay() {
return mTcpNoDelay;
}
/**
* Set receive timeout on socket. When the TCP connection disappears,
* that will only be recognized by the reader after this timeout.
*
* DEFAULT: 200
*
* @param timeoutMs Socket receive timeout in ms.
*/
public void setSocketReceiveTimeout(int timeoutMs) {
if (timeoutMs >= 0) {
mSocketReceiveTimeout = timeoutMs;
}
}
/**
* Get socket receive timeout.
*
* @return Socket receive timeout in ms.
*/
public int getSocketReceiveTimeout() {
return mSocketReceiveTimeout;
}
/**
* Set connect timeout on socket. When a WebSocket connection is
* about to be established, the TCP socket connect will timeout
* after this period.
*
* DEFAULT: 3000
*
* @param timeoutMs Socket connect timeout in ms.
*/
public void setSocketConnectTimeout(int timeoutMs) {
if (timeoutMs >= 0) {
mSocketConnectTimeout = timeoutMs;
}
}
/**
* Get socket connect timeout.
*
* @return Socket receive timeout in ms.
*/
public int getSocketConnectTimeout() {
return mSocketConnectTimeout;
}
/**
* Controls whether incoming text message payload is verified
* to be valid UTF-8.
*
* DEFAULT: true
*
* @param enabled True to verify incoming UTF-8.
*/
public void setValidateIncomingUtf8(boolean enabled) {
mValidateIncomingUtf8 = enabled;
}
/**
* Get UTF-8 validation option.
*
* @return True, iff incoming UTF-8 is validated.
*/
public boolean getValidateIncomingUtf8() {
return mValidateIncomingUtf8;
}
/**
* Controls whether to mask client-to-server WebSocket frames.
* Beware, normally, WebSockets servers will deny non-masked c2s
* frames and fail the connection.
*
* DEFAULT: true
*
* @param enabled Set true to mask client-to-server frames.
*/
public void setMaskClientFrames(boolean enabled) {
mMaskClientFrames = enabled;
}
/**
* Get mask client frames option.
*
* @return True, iff client-to-server frames are masked.
*/
public boolean getMaskClientFrames() {
return mMaskClientFrames;
}
/**
* Set reconnect interval
*
* @param reconnectInterval Interval in ms, 0 - no reconnection
*/
public void setReconnectInterval(int reconnectInterval) {
mReconnectInterval = reconnectInterval;
}
public int getReconnectInterval() {
return mReconnectInterval;
}
}