/* * Copyright 2014 Red Hat, Inc. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Apache License v2.0 which accompanies this distribution. * * The Eclipse Public License is available at * http://www.eclipse.org/legal/epl-v10.html * * The Apache License v2.0 is available at * http://www.opensource.org/licenses/apache2.0.php * * You may elect to redistribute this code under either of these licenses. */ package com.jetdrone.vertx.yoke.sockjs; import io.vertx.core.json.JsonArray; import io.vertx.core.json.JsonObject; import java.util.HashSet; import java.util.Set; /** * Options for configuring a SockJS handler * * @author <a href="http://tfox.org">Tim Fox</a> */ public class SockJSHandlerOptions { public static final long DEFAULT_SESSION_TIMEOUT = 5l * 1000; public static final boolean DEFAULT_INSERT_JSESSIONID = true; public static final long DEFAULT_HEARTBEAT_INTERVAL = 25l * 1000; public static final int DEFAULT_MAX_BYTES_STREAMING = 128 * 1024; public static final String DEFAULT_LIBRARY_URL = "http://cdn.sockjs.org/sockjs-0.3.4.min.js"; private long sessionTimeout = 5l * 1000; private boolean insertJSESSIONID = true; private long heartbeatInterval = 25l * 1000; private int maxBytesStreaming = 128 * 1024; private String libraryURL = "http://cdn.sockjs.org/sockjs-0.3.4.min.js"; private Set<String> disabledTransports = new HashSet<>(); public SockJSHandlerOptions(SockJSHandlerOptions other) { throw new UnsupportedOperationException("todo"); } public SockJSHandlerOptions() { this.sessionTimeout = DEFAULT_SESSION_TIMEOUT; this.insertJSESSIONID = DEFAULT_INSERT_JSESSIONID; this.heartbeatInterval = DEFAULT_HEARTBEAT_INTERVAL; this.maxBytesStreaming = DEFAULT_MAX_BYTES_STREAMING; this.libraryURL = DEFAULT_LIBRARY_URL; } public SockJSHandlerOptions(JsonObject json) { this.sessionTimeout = json.getLong("sessionTimeout", DEFAULT_SESSION_TIMEOUT); this.insertJSESSIONID = json.getBoolean("insertJSESSIONID", DEFAULT_INSERT_JSESSIONID); this.heartbeatInterval = json.getLong("heartbeatInterval", DEFAULT_HEARTBEAT_INTERVAL); this.maxBytesStreaming = json.getInteger("maxBytesStreaming", DEFAULT_MAX_BYTES_STREAMING); this.libraryURL = json.getString("libraryURL", DEFAULT_LIBRARY_URL); JsonArray arr = json.getJsonArray("disabledTransports"); if (arr != null) { for (Object str : arr) { if (str instanceof String) { String sstr = (String) str; disabledTransports.add(sstr); } else { throw new IllegalArgumentException("Invalid type " + str.getClass() + " in disabledTransports array"); } } } } public long getSessionTimeout() { return sessionTimeout; } public SockJSHandlerOptions setSessionTimeout(long sessionTimeout) { if (sessionTimeout < 1) { throw new IllegalArgumentException("sessionTimeout must be > 0"); } this.sessionTimeout = sessionTimeout; return this; } public boolean isInsertJSESSIONID() { return insertJSESSIONID; } public SockJSHandlerOptions setInsertJSESSIONID(boolean insertJSESSIONID) { this.insertJSESSIONID = insertJSESSIONID; return this; } public long getHeartbeatInterval() { return heartbeatInterval; } public SockJSHandlerOptions setHeartbeatInterval(long heartbeatInterval) { if (heartbeatInterval < 1) { throw new IllegalArgumentException("heartbeatInterval must be > 0"); } this.heartbeatInterval = heartbeatInterval; return this; } public int getMaxBytesStreaming() { return maxBytesStreaming; } public SockJSHandlerOptions setMaxBytesStreaming(int maxBytesStreaming) { if (maxBytesStreaming < 1) { throw new IllegalArgumentException("maxBytesStreaming must be > 0"); } this.maxBytesStreaming = maxBytesStreaming; return this; } public String getLibraryURL() { return libraryURL; } public SockJSHandlerOptions setLibraryURL(String libraryURL) { this.libraryURL = libraryURL; return this; } public SockJSHandlerOptions addDisabledTransport(String subProtocol) { disabledTransports.add(subProtocol); return this; } public Set<String> getDisabledTransports() { return disabledTransports; } }