/** * Copyright (c) 2006 Parity Communications, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Sergey Yakovlev - initial API and implementation */ package org.eclipse.ecf.internal.provider.rss.http; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.MalformedURLException; import java.net.URI; import java.net.URL; /** * A HTTP request message * */ public class HttpRequest extends HttpMessage { private String method; private URL url; private String version; private static final int DEFAULT_PORT = 80; /** Creates a new instance of HttpRequest * @param method * @param url * @param version */ public HttpRequest(String method, URL url, String version) { this.method = method; this.version = version; setURL(url); hasBody = false; } public HttpRequest(String method, String urlstring, String version) throws MalformedURLException { this(method, new URL(urlstring), version); } public HttpRequest(String method, String urlstring) throws MalformedURLException { this(method, new URL(urlstring), DEFAULT_VERSION); } public HttpRequest(String method, URL url) { this(method, url, DEFAULT_VERSION); } /** * generate a Request Message which will be read from the specified * InputStream * @param in * @throws MalformedURLException * @throws IOException */ public HttpRequest(InputStream in) throws MalformedURLException, IOException { super(in); } /** * Reads the head of the message (startline and headers) from the * InputStream, and parses the startline for command, url and protocol. * @throws IOException * @throws MalformedURLException */ public void readHead() throws IOException, MalformedURLException { super.readHead(); String strURI; // parse requestline final int i = startLine.indexOf(' '); final int j = startLine.indexOf(' ', i + 1); method = startLine.substring(0, i); strURI = startLine.substring(i + 1, j); version = startLine.substring(j + 1); setURL(URI.create("http://localhost").resolve(strURI).toURL()); if (method.equals("POST")) { hasBody = true; } else { hasBody = false; } } public String getHost() { return url.getHost(); } public int getPort() { if (url.getPort() == -1) { return DEFAULT_PORT; } else { return url.getPort(); } } public String getURLString() { return url.toString(); } public URL getURL() { return url; } public String getPath() { return url.getPath(); } public String getAbsPath() { String ref; String absPath; if (url.getRef() != null) { ref = "#" + url.getRef(); } else { ref = ""; } absPath = url.getFile() + ref; if (absPath == "/" && method.equalsIgnoreCase("OPTIONS")) { absPath = "*"; } return absPath; } public void setHost(String host) { } public void setURL(URL url) { this.url = url; setHeader("Host", url.getHost()); } public void setVersion(String s) { version = s; } public String getStartLine() { return method + " " + this.getAbsPath() + " " + version; } public String getAbsoluteStartLine() { return method + " " + this.getURLString() + " " + version; } /** * write to stream using the default startline (absulute URI) * @param stream * @throws IOException */ public void writeToStream(OutputStream stream) throws IOException { super.writeToStream(getAbsoluteStartLine(), stream); } /* * // Detects browser public boolean isIEBrowser() { if * (containsHeader("user-agent")) { if * (getHeader("user-agent").indexOf("MSIE 4") > -1) { return true; } else * if(getHeader("user-agent").indexOf("MSIE 5") > -1) { return true; } else * if(getHeader("user-agent").indexOf("MSIE 6") > -1) { return true; } } * return false; } * * public boolean isNNBrowser() { if (containsHeader("user-agent")) { if * (getHeader("user-agent").indexOf("Mozilla/4") > -1) { return true; } else * if(getHeader("user-agent").indexOf("Mozilla/5") > -1) { return true; } } * return false; } */ }