summaryrefslogtreecommitdiffstats
path: root/pki/base/silent/src/http/HTTPResponse.java
diff options
context:
space:
mode:
Diffstat (limited to 'pki/base/silent/src/http/HTTPResponse.java')
-rw-r--r--pki/base/silent/src/http/HTTPResponse.java382
1 files changed, 382 insertions, 0 deletions
diff --git a/pki/base/silent/src/http/HTTPResponse.java b/pki/base/silent/src/http/HTTPResponse.java
new file mode 100644
index 000000000..f4d66adb5
--- /dev/null
+++ b/pki/base/silent/src/http/HTTPResponse.java
@@ -0,0 +1,382 @@
+// --- BEGIN COPYRIGHT BLOCK ---
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; version 2 of the License.
+//
+// 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 General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this program; if not, write to the Free Software Foundation, Inc.,
+// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+//
+// (C) 2007 Red Hat, Inc.
+// All rights reserved.
+// --- END COPYRIGHT BLOCK ---
+
+
+import java.net.*;
+import java.util.*;
+
+
+public class HTTPResponse
+{
+ // The set of cookie values included in this response.
+ ArrayList cookieValueList;
+
+ // The names of the headers included in this response.
+ ArrayList headerNameList;
+
+ // The values of the headers included in this response.
+ ArrayList headerValueList;
+
+ // The actual data associated with this response.
+ byte[] responseData;
+
+ // The HTML document included in the response, if appropriate.
+ HTMLDocument htmlDocument;
+
+ // The number of bytes contained in the content of the response.
+ int contentLength;
+
+ // The HTTP status code for the response.
+ int statusCode;
+
+ // The MIME type of the response.
+ String contentType;
+
+ // The protocol version string for this response.
+ String protolVersion;
+
+ // The response message for this response.
+ String responseMessage;
+
+ // Parsed Content Name/Value pair info
+ ArrayList contentName;
+ ArrayList contentValue;
+
+
+
+ /**
+ * Creates a new HTTP response with the provided status code.
+ *
+ * @param statusCode The HTTP status code for this response.
+ * @param protocolVersion The protocol and version for this response.
+ * @param responseMessage The message associated with this response.
+ */
+ public HTTPResponse(int statusCode, String protocolVersion,
+ String responseMessage)
+ {
+ this.statusCode = statusCode;
+ this.protolVersion = protocolVersion;
+ this.responseMessage = responseMessage;
+
+ htmlDocument = null;
+ contentType = null;
+ contentLength = -1;
+ responseData = new byte[0];
+ cookieValueList = new ArrayList();
+ headerNameList = new ArrayList();
+ headerValueList = new ArrayList();
+ contentName = new ArrayList();
+ contentValue = new ArrayList();
+ }
+
+
+
+ /**
+ * Retrieves the status code for this HTTP response.
+ *
+ * @return The status code for this HTTP response.
+ */
+ public int getStatusCode()
+ {
+ return statusCode;
+ }
+
+
+
+ /**
+ * Retrieves the protocol version for this HTTP response.
+ *
+ * @return The protocol version for this HTTP response.
+ */
+ public String getProtocolVersion()
+ {
+ return protolVersion;
+ }
+
+
+
+ /**
+ * Retrieves the response message for this HTTP response.
+ *
+ * @return The response message for this HTTP response.
+ */
+ public String getResponseMessage()
+ {
+ return responseMessage;
+ }
+
+
+
+ /**
+ * Retrieves the value of the header with the specified name. If the
+ * specified header has more than one value, then only the first will be
+ * retrieved.
+ *
+ * @return The value of the header with the specified name, or
+ * <CODE>null</CODE> if no such header is available.
+ */
+ public String getHeader(String headerName)
+ {
+ String lowerName = headerName.toLowerCase();
+
+ for (int i=0; i < headerNameList.size(); i++)
+ {
+ if (lowerName.equals(headerNameList.get(i)))
+ {
+ return (String) headerValueList.get(i);
+ }
+ }
+
+ return null;
+ }
+
+
+
+ /**
+ * Retrieves the set of values for the specified header.
+ *
+ * @return The set of values for the specified header.
+ */
+ public String[] getHeaderValues(String headerName)
+ {
+ ArrayList valueList = new ArrayList();
+ String lowerName = headerName.toLowerCase();
+
+ for (int i=0; i < headerNameList.size(); i++)
+ {
+ if (lowerName.equals(headerNameList.get(i)))
+ {
+ valueList.add(headerValueList.get(i));
+ }
+ }
+
+ String[] values = new String[valueList.size()];
+ valueList.toArray(values);
+ return values;
+ }
+
+
+
+ /**
+ * Adds a header with the given name and value to this response.
+ *
+ * @param headerName The name of the header to add to this response.
+ * @param headerValue The value of the header to add to this response.
+ */
+ public void addHeader(String headerName, String headerValue)
+ {
+ String lowerName = headerName.toLowerCase();
+ headerNameList.add(lowerName);
+ headerValueList.add(headerValue);
+
+ if (lowerName.equals("content-length"))
+ {
+ try
+ {
+ contentLength = Integer.parseInt(headerValue);
+ } catch (NumberFormatException nfe) {}
+ }
+ else if (lowerName.equals("content-type"))
+ {
+ contentType = headerValue;
+ }
+ else if (lowerName.equals("set-cookie"))
+ {
+ cookieValueList.add(headerValue);
+ }
+ }
+
+
+
+ /**
+ * Retrieves a two-dimensional array containing the header data for this
+ * response, with each element being an array containing a name/value pair.
+ *
+ * @return A two-dimensional array containing the header data for this
+ * response.
+ */
+ public String[][] getHeaderElements()
+ {
+ String[][] headerElements = new String[headerNameList.size()][2];
+ for (int i=0; i < headerNameList.size(); i++)
+ {
+ headerElements[i][0] = (String) headerNameList.get(i);
+ headerElements[i][1] = (String) headerValueList.get(i);
+ }
+
+ return headerElements;
+ }
+
+
+
+ /**
+ * Retrieves the raw data included in this HTTP response. If the response did
+ * not include any data, an empty array will be returned.
+ *
+ * @return The raw data included in this HTTP response.
+ */
+ public byte[] getResponseData()
+ {
+ return responseData;
+ }
+
+
+ public String getHTML()
+ {
+ String htmlString = new String(responseData);
+ return htmlString;
+ }
+
+ public String getHTMLwithoutTags()
+ {
+ String htmlString = new String(responseData);
+ HTMLDocument htmldocument = new HTMLDocument(htmlString);
+ return htmldocument.getTextData();
+ }
+ public void parseContent()
+ {
+ // parse the responseData byte[] buffer and split content into name
+ // value pair
+ String htmlString = new String(responseData);
+ StringTokenizer st = new StringTokenizer(htmlString, "\n");
+ Utilities ut = new Utilities();
+
+ while(st.hasMoreTokens())
+ {
+ String line = st.nextToken();
+ // format for line assumed to be name="value"; format
+
+ int eqPos = line.indexOf('=') ;
+ if(eqPos != -1)
+ {
+ String name = line.substring(0,eqPos);
+ String tempval = line.substring(eqPos+1).trim();
+ String value = ut.cleanupQuotes(ut.removechar(tempval));
+
+ // add to array
+ this.contentName.add(name.trim());
+ this.contentValue.add(value);
+ }
+
+ }
+
+ }
+
+
+
+ public String getContentValue(String headerName)
+ {
+ for (int i=0; i < contentName.size(); i++)
+ {
+ if (headerName.equals(contentName.get(i)))
+ {
+ return (String) contentValue.get(i);
+ }
+ }
+
+ return null;
+ }
+
+ public ArrayList getContentNames()
+ {
+ return contentName;
+ }
+
+ public ArrayList getContentValues()
+ {
+ return contentValue;
+ }
+
+ /**
+ * Sets the actual data associated with this response.
+ *
+ * @param responseData The actual data associated with this response.
+ */
+ public void setResponseData(byte[] responseData)
+ {
+ if (responseData == null)
+ {
+ this.responseData = new byte[0];
+ }
+ else
+ {
+ this.responseData = responseData;
+ }
+ }
+
+
+
+ /**
+ * Retrieves the content length associated with this response.
+ *
+ * @return The content length associated with this response, or -1 if no
+ * content length is available.
+ */
+ public int getContentLength()
+ {
+ return contentLength;
+ }
+
+
+
+ /**
+ * Retrieves the content type associated with this response.
+ *
+ * @return The content type associated with this response, or
+ * <CODE>null</CODE> if no content type is available.
+ */
+ public String getContentType()
+ {
+ return contentType;
+ }
+
+
+
+ /**
+ * Retrieves an array containing the values of the cookies that should be set
+ * based on the information in this response.
+ *
+ * @return An array containing the values of the cookies that should be set
+ * based on the information in this response.
+ */
+ public String[] getCookieValues()
+ {
+ String[] cookieValues = new String[cookieValueList.size()];
+ cookieValueList.toArray(cookieValues);
+ return cookieValues;
+ }
+
+ public String getCookieValue(String headerName)
+ {
+ for (int i=0; i < cookieValueList.size(); i++)
+ {
+ System.out.println("cookie list: " + cookieValueList.get(i));
+
+ String temp = (String) cookieValueList.get(i);
+ if (temp.startsWith(headerName))
+ {
+ return (String) cookieValueList.get(i);
+ }
+ }
+
+ return null;
+ }
+
+
+}
+