blob: 217f2c70743173f0c6340fff4d1475d6c3f74556 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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 flex.messaging.client;
/**
* A class to hold user agent specific properties. For example, in streaming
* endpoints, a certain number of bytes need to be written before the
* streaming connection can be used and this value is specific to user agents.
* Similarly, the number of simultaneous connections a session can have is user
* agent specific.
*/
public class UserAgentSettings
{
/**
* The prefixes of the version token used by various browsers.
*/
public static final String USER_AGENT_ANDROID = "Android";
public static final String USER_AGENT_CHROME = "Chrome";
public static final String USER_AGENT_FIREFOX = "Firefox";
public static final String USER_AGENT_FIREFOX_1 = "Firefox/1";
public static final String USER_AGENT_FIREFOX_2 = "Firefox/2";
public static final String USER_AGENT_MSIE = "MSIE";
public static final String USER_AGENT_MSIE_5 = "MSIE 5";
public static final String USER_AGENT_MSIE_6 = "MSIE 6";
public static final String USER_AGENT_MSIE_7 = "MSIE 7";
public static final String USER_AGENT_OPERA = "Opera";
public static final String USER_AGENT_OPERA_8 = "Opera 8";
// Opera 10,11 ship as User Agent Opera/9.8.
public static final String USER_AGENT_OPERA_10 = "Opera/9.8";
public static final String USER_AGENT_SAFARI = "Safari";
/**
* Bytes needed to kickstart the streaming connections for IE.
*/
public static final int KICKSTART_BYTES_MSIE = 2048;
/**
* Bytes needed to kickstart the streaming connections for SAFARI.
*/
public static final int KICKSTART_BYTES_SAFARI = 512;
/**
* Bytes needs to kicksart the streaming connections for Android.
*/
public static final int KICKSTART_BYTES_ANDROID = 4010;
/**
* The default number of persistent connections per session for various browsers.
*/
private static final int MAX_PERSISTENT_CONNECTIONS_LEGACY = 1;
public static final int MAX_PERSISTENT_CONNECTIONS_DEFAULT = 5;
private static final int MAX_PERSISTENT_CONNECTIONS_OPERA_LEGACY = 3;
private static final int MAX_PERSISTENT_CONNECTIONS_CHROME = MAX_PERSISTENT_CONNECTIONS_DEFAULT;
private static final int MAX_PERSISTENT_CONNECTIONS_FIREFOX = MAX_PERSISTENT_CONNECTIONS_DEFAULT;
private static final int MAX_PERSISTENT_CONNECTIONS_MSIE = MAX_PERSISTENT_CONNECTIONS_DEFAULT;
private static final int MAX_PERSISTENT_CONNECTIONS_OPERA = 7;
private static final int MAX_PERSISTENT_CONNECTIONS_SAFARI = 3;
private String matchOn;
private int kickstartBytes;
private int maxPersistentConnectionsPerSession = MAX_PERSISTENT_CONNECTIONS_DEFAULT;
/**
* Static method to retrieve pre-initialized user agents which are as follows:
*
* In Chrome 0, 1, 2, the limit is 6:
* match-on="Chrome" max-persistent-connections-per-session="5"
*
* In Firefox 1, 2, the limit is 2:
* match-on="Firefox" max-persistent-connections-per-session="1"
*
* In Firefox 3, the limit is 6:
* match-on="Firefox/3" max-persistent-connections-per-session="5"
*
* In MSIE 5, 6, 7, the limit is 2 with kickstart bytes of 2K:
* match-on="MSIE" max-persistent-connections-per-session="1" kickstart-bytes="2048"
*
* In MSIE 8, the limit is 6 with kickstart bytes of 2K:
* match-on="MSIE 8" max-persistent-connections-per-session="5" kickstart-bytes="2048"
*
* In Opera 7, 9, the limit is 4:
* match-on="Opera" max-persistent-connections-per-session="3"
*
* In Opera 8, the limit is 8:
* match-on="Opera 8" max-persistent-connections-per-session="7"
*
* In Opera 10, the limit is 8.
* match-on="Opera 10" max-persistent-connections-per-session="7"
*
* In Safari 3, 4, the limit is 4.
* match-on="Safari" max-persistent-connections-per-session="3"
*
* @param matchOn String to use match the agent.
*/
public static UserAgentSettings getAgent(String matchOn)
{
UserAgentSettings userAgent = new UserAgentSettings();
userAgent.setMatchOn(matchOn);
if (USER_AGENT_ANDROID.equals(matchOn))
{
userAgent.setKickstartBytes(KICKSTART_BYTES_ANDROID);
userAgent.setMaxPersistentConnectionsPerSession(MAX_PERSISTENT_CONNECTIONS_SAFARI);
}
if (USER_AGENT_CHROME.equals(matchOn))
{
userAgent.setMaxPersistentConnectionsPerSession(MAX_PERSISTENT_CONNECTIONS_CHROME);
}
else if (USER_AGENT_FIREFOX.equals(matchOn))
{
userAgent.setMaxPersistentConnectionsPerSession(MAX_PERSISTENT_CONNECTIONS_FIREFOX);
}
else if (USER_AGENT_FIREFOX_1.equals(matchOn))
{
userAgent.setMaxPersistentConnectionsPerSession(MAX_PERSISTENT_CONNECTIONS_LEGACY);
}
else if (USER_AGENT_FIREFOX_2.equals(matchOn))
{
userAgent.setMaxPersistentConnectionsPerSession(MAX_PERSISTENT_CONNECTIONS_LEGACY);
}
else if (USER_AGENT_MSIE.equals(matchOn))
{
userAgent.setKickstartBytes(KICKSTART_BYTES_MSIE);
userAgent.setMaxPersistentConnectionsPerSession(MAX_PERSISTENT_CONNECTIONS_MSIE);
}
else if (USER_AGENT_MSIE_5.equals(matchOn))
{
userAgent.setKickstartBytes(KICKSTART_BYTES_MSIE);
userAgent.setMaxPersistentConnectionsPerSession(MAX_PERSISTENT_CONNECTIONS_LEGACY);
}
else if (USER_AGENT_MSIE_6.equals(matchOn))
{
userAgent.setKickstartBytes(KICKSTART_BYTES_MSIE);
userAgent.setMaxPersistentConnectionsPerSession(MAX_PERSISTENT_CONNECTIONS_LEGACY);
}
else if (USER_AGENT_MSIE_7.equals(matchOn))
{
userAgent.setKickstartBytes(KICKSTART_BYTES_MSIE);
userAgent.setMaxPersistentConnectionsPerSession(MAX_PERSISTENT_CONNECTIONS_LEGACY);
}
else if (USER_AGENT_OPERA.equals(matchOn))
{
userAgent.setMaxPersistentConnectionsPerSession(MAX_PERSISTENT_CONNECTIONS_OPERA_LEGACY);
}
else if (USER_AGENT_OPERA_8.equals(matchOn))
{
userAgent.setMaxPersistentConnectionsPerSession(MAX_PERSISTENT_CONNECTIONS_OPERA);
}
else if (USER_AGENT_OPERA_10.equals(matchOn))
{
userAgent.setMaxPersistentConnectionsPerSession(MAX_PERSISTENT_CONNECTIONS_OPERA);
}
else if (USER_AGENT_SAFARI.equals(matchOn))
{
userAgent.setKickstartBytes(KICKSTART_BYTES_SAFARI);
userAgent.setMaxPersistentConnectionsPerSession(MAX_PERSISTENT_CONNECTIONS_SAFARI);
}
return userAgent;
}
/**
* Returns the String to use to match the agent.
*
* @return The String to use to match the agent.
*/
public String getMatchOn()
{
return matchOn;
}
/**
* Sets the String to use to match the agent.
*
* @param matchOn The String to use to match the agent.
*/
public void setMatchOn(String matchOn)
{
this.matchOn = matchOn;
}
/**
* Returns the number of bytes needed to kickstart the streaming connections
* for the user agent.
*
* @return The number of bytes needed to kickstart the streaming connections
* for the user agent.
*/
public int getKickstartBytes()
{
return kickstartBytes;
}
/**
* Sets the number of bytes needed to kickstart the streaming connections
* for the user agent.
*
* @param kickstartBytes The number of bytes needed to kickstart the streaming
* connections for the user agent.
*/
public void setKickstartBytes(int kickstartBytes)
{
if (kickstartBytes < 0)
kickstartBytes = 0;
this.kickstartBytes = kickstartBytes;
}
/**
* @deprecated Use {@link UserAgentSettings#getMaxPersistentConnectionsPerSession()} instead.
*/
public int getMaxStreamingConnectionsPerSession()
{
return getMaxPersistentConnectionsPerSession();
}
/**
* @deprecated Use {@link UserAgentSettings#setMaxPersistentConnectionsPerSession(int)} instead.
*/
public void setMaxStreamingConnectionsPerSession(int maxStreamingConnectionsPerSession)
{
setMaxPersistentConnectionsPerSession(maxStreamingConnectionsPerSession);
}
/**
* Returns the number of simultaneous streaming connections per session
* the user agent supports.
*
* @return The number of streaming connections per session the user agent supports.
*/
public int getMaxPersistentConnectionsPerSession()
{
return maxPersistentConnectionsPerSession;
}
/**
* Sets the number of simultaneous streaming connections per session
* the user agent supports.
*
* @param maxStreamingConnectionsPerSession The number of simultaneous
* streaming connections per session the user agent supports.
*/
public void setMaxPersistentConnectionsPerSession(int maxStreamingConnectionsPerSession)
{
this.maxPersistentConnectionsPerSession = maxStreamingConnectionsPerSession;
}
}