/******************************************************************
*
* CyberHTTP for Java
*
* Copyright (C) Satoshi Konno 2002
*
* File: HTTP.java
*
* Revision:
*
* 11/18/02 - first revision. 08/30/03 - Giordano Sassaroli
* <sassarol@cefriel.it> - Problem : the method getPort should return the
* default http port 80 when a port is not specified - Description : the method
* is used in ControlRequest.setRequestHost() and in
* SubscriptionRequest.setService(). maybe the default port check could be done
* in these methods. 09/03/02 - Added getRequestHostURL(). 03/11/04 - Added the
* following methods to send big content stream. post(HTTPResponse, byte[])
* post(HTTPResponse, InputStream) 05/26/04 - Added NO_CATCH and MAX_AGE.
* 10/20/04 - Brent Hills <bhills@openshores.com> - Added Range and MYNAME;
*
******************************************************************/
package com.guo.duoduo.airplayreceiver.http;
import java.net.URL;
public class HTTP
{
////////////////////////////////////////////////
// Constants
////////////////////////////////////////////////
public static final String HOST = "HOST";
public static final String VERSION = "1.1";
public static final String VERSION_10 = "1.0";
public static final String VERSION_11 = "1.1";
public static final String CRLF = "\r\n";
public static final byte CR = '\r';
public static final byte LF = '\n';
public static final String TAB = "\t";
public static final String SOAP_ACTION = "SOAPACTION";
public static final String M_SEARCH = "M-SEARCH";
public static final String NOTIFY = "NOTIFY";
public static final String POST = "POST";
public static final String GET = "GET";
public static final String HEAD = "HEAD";
public static final String SUBSCRIBE = "SUBSCRIBE";
public static final String UNSUBSCRIBE = "UNSUBSCRIBE";
public static final String DATE = "Date";
public static final String CACHE_CONTROL = "Cache-Control";
public static final String NO_CACHE = "no-cache";
public static final String MAX_AGE = "max-age";
public static final String CONNECTION = "Connection";
public static final String CLOSE = "close";
public static final String KEEP_ALIVE = "Keep-Alive";
public static final String CONTENT_TYPE = "Content-Type";
public static final String CHARSET = "charset";
public static final String CONTENT_LENGTH = "Content-Length";
public static final String CONTENT_LANGUAGE = "Content-Language";
public static final String CONTENT_RANGE = "Content-Range";
public static final String CONTENT_RANGE_BYTES = "bytes";
public static final String RANGE = "Range";
public static final String TRANSFER_ENCODING = "Transfer-Encoding";
public static final String CHUNKED = "Chunked";
public static final String LOCATION = "Location";
public static final String SERVER = "Server";
public static final String ST = "ST";
public static final String MX = "MX";
public static final String MAN = "MAN";
public static final String NT = "NT";
public static final String NTS = "NTS";
public static final String USN = "USN";
public static final String EXT = "EXT";
public static final String SID = "SID";
public static final String SEQ = "SEQ";
public final static String CALLBACK = "CALLBACK";
public final static String TIMEOUT = "TIMEOUT";
public final static String BOOTID_UPNP_ORG = "BOOTID.UPNP.ORG";
// Thanks for Brent Hills (10/20/04)
public final static String MYNAME = "MYNAME";
public static final String REQEST_LINE_DELIM = " ";
public static final String HEADER_LINE_DELIM = " :";
public static final String STATUS_LINE_DELIM = " ";
public static final int DEFAULT_PORT = 80;
public static final int DEFAULT_CHUNK_SIZE = 512 * 1024;
public static final int DEFAULT_TIMEOUT = 30;
////////////////////////////////////////////////
// URL
////////////////////////////////////////////////
private static int chunkSize = DEFAULT_CHUNK_SIZE;
public static final boolean isAbsoluteURL(String urlStr)
{
try
{
new URL(urlStr);
return true;
}
catch (Exception e)
{
return false;
}
}
public static final String getHost(String urlStr)
{
try
{
URL url = new URL(urlStr);
return url.getHost();
}
catch (Exception e)
{
return "";
}
}
public static final int getPort(String urlStr)
{
try
{
URL url = new URL(urlStr);
// Thanks for Giordano Sassaroli <sassarol@cefriel.it> (08/30/03)
int port = url.getPort();
if (port <= 0)
port = DEFAULT_PORT;
return port;
}
catch (Exception e)
{
return DEFAULT_PORT;
}
}
public static final String getRequestHostURL(String host, int port)
{
String reqHost = "http://" + host + ":" + port;
return reqHost;
}
public static final String toRelativeURL(String urlStr, boolean withParam)
{
String uri = urlStr;
if (isAbsoluteURL(urlStr) == false)
{
if (0 < urlStr.length() && urlStr.charAt(0) != '/')
uri = "/" + urlStr;
}
else
{
try
{
URL url = new URL(urlStr);
uri = url.getPath();
if (withParam == true)
{
String queryStr = url.getQuery();
if (!queryStr.equals(""))
{
uri += "?" + queryStr;
}
}
if (uri.endsWith("/"))
uri = uri.substring(0, uri.length() - 1);
}
catch (Exception e)
{
}
}
return uri;
}
public static final String toRelativeURL(String urlStr)
{
return toRelativeURL(urlStr, true);
}
////////////////////////////////////////////////
// Chunk Size
////////////////////////////////////////////////
public static final String getAbsoluteURL(String baseURLStr, String relURlStr)
{
try
{
URL baseURL = new URL(baseURLStr);
String url = baseURL.getProtocol() + "://" + baseURL.getHost() + ":"
+ baseURL.getPort() + toRelativeURL(relURlStr);
return url;
}
catch (Exception e)
{
return "";
}
}
public static final int getChunkSize()
{
return chunkSize;
}
public static final void setChunkSize(int size)
{
chunkSize = size;
}
}