// --------------------------------------------------------------------------- // jWebSocket - RequestHeader Object // Copyright (c) 2010 Alexander Schulze, Innotrade GmbH // --------------------------------------------------------------------------- // This program is free software; you can redistribute it and/or modify it // under the terms of the GNU Lesser General Public License as published by the // Free Software Foundation; either version 3 of the License, or (at your // option) any later version. // This program is distributed in the hope that it will be useful, but WITHOUT // ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or // FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for // more details. // You should have received a copy of the GNU Lesser General Public License along // with this program; if not, see <http://www.gnu.org/licenses/lgpl.html>. // --------------------------------------------------------------------------- package org.jwebsocket.kit; import java.util.Map; import javolution.util.FastMap; /** * Holds the header of the initial WebSocket request from the client * to the server. The RequestHeader internally maintains a FastMap to store * key/values pairs. * @author aschulze * @version $Id: RequestHeader.java 596 2010-06-22 17:09:54Z fivefeetfurther $ */ public final class RequestHeader { private Map<String, Object> args = new FastMap<String, Object>(); private static final String ARGS = "args"; private static final String PROT = "prot"; private static final String TIMEOUT = "timeout"; /** * Puts a new object value to the request header. * @param aKey * @param aValue */ public void put(String aKey, Object aValue) { args.put(aKey, aValue); } /** * Returns the object value for the given key or {@code null} if the * key does not exist in the header. * @param aKey * @return object value for the given key or {@code null}. */ public Object get(String aKey) { return args.get(aKey); } /** * Returns the string value for the given key or {@code null} if the * key does not exist in the header. * @param aKey * @return String value for the given key or {@code null}. */ public String getString(String aKey) { return (String) args.get(aKey); } /** * Returns a FastMap of the optional URL arguments passed by the client. * @return FastMap of the optional URL arguments. */ public Map getArgs() { return (Map) args.get(ARGS); } /** * Returns the sub protocol passed by the client or a default value * if no sub protocol has been passed either in the header or in the * URL arguments. * @param aDefault * @return Sub protocol passed by the client or default value. */ public String getSubProtocol(String aDefault) { Map lArgs = getArgs(); String lSubProt = null; if (lArgs != null) { lSubProt = (String) lArgs.get(PROT); } return (lSubProt != null ? lSubProt : aDefault); } /** * Returns the session timeout passed by the client or a default value * if no session timeout has been passed either in the header or in the * URL arguments. * @param aDefault * @return Session timeout passed by the client or default value. */ public Integer getTimeout(Integer aDefault) { Map lArgs = getArgs(); Integer lTimeout = null; if (lArgs != null) { try { lTimeout = Integer.parseInt((String) (lArgs.get(TIMEOUT))); } catch (Exception ex) { } } return (lTimeout != null ? lTimeout : aDefault); } }