diff options
author | Endi Sukma Dewata <edewata@redhat.com> | 2012-03-24 02:27:47 -0500 |
---|---|---|
committer | Endi Sukma Dewata <edewata@redhat.com> | 2012-03-26 11:43:54 -0500 |
commit | 621d9e5c413e561293d7484b93882d985b3fe15f (patch) | |
tree | 638f3d75761c121d9a8fb50b52a12a6686c5ac5c /pki/base/silent/src/com/netscape/pkisilent/http | |
parent | 40d3643b8d91886bf210aa27f711731c81a11e49 (diff) | |
download | pki-621d9e5c413e561293d7484b93882d985b3fe15f.tar.gz pki-621d9e5c413e561293d7484b93882d985b3fe15f.tar.xz pki-621d9e5c413e561293d7484b93882d985b3fe15f.zip |
Removed unnecessary pki folder.
Previously the source code was located inside a pki folder.
This folder was created during svn migration and is no longer
needed. This folder has now been removed and the contents have
been moved up one level.
Ticket #131
Diffstat (limited to 'pki/base/silent/src/com/netscape/pkisilent/http')
4 files changed, 0 insertions, 2185 deletions
diff --git a/pki/base/silent/src/com/netscape/pkisilent/http/CertSelection.java b/pki/base/silent/src/com/netscape/pkisilent/http/CertSelection.java deleted file mode 100644 index ff541b6c6..000000000 --- a/pki/base/silent/src/com/netscape/pkisilent/http/CertSelection.java +++ /dev/null @@ -1,45 +0,0 @@ -package com.netscape.pkisilent.http; - -// --- 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.util.Vector; - -import org.mozilla.jss.ssl.SSLClientCertificateSelectionCallback; - -public class CertSelection implements SSLClientCertificateSelectionCallback { - - // make the select() call to use this client cert - public static String client_cert = null; - - public void setClientCert(String nickname) { - client_cert = nickname; - } - - public String select(@SuppressWarnings("rawtypes") Vector nicknames) { - - // when this method is called by SSLSocket we get a vector - // of nicknames to select similar to the way the browser presents - // the list. - - // We will just use the one thats set by setClientCert() - - return client_cert; - } - -}; // end class diff --git a/pki/base/silent/src/com/netscape/pkisilent/http/HTMLDocument.java b/pki/base/silent/src/com/netscape/pkisilent/http/HTMLDocument.java deleted file mode 100644 index e8de29081..000000000 --- a/pki/base/silent/src/com/netscape/pkisilent/http/HTMLDocument.java +++ /dev/null @@ -1,595 +0,0 @@ -package com.netscape.pkisilent.http; - -// --- 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.io.File; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.LinkedHashSet; -import java.util.StringTokenizer; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -public class HTMLDocument { - // Indicates whether this HTML document has been parsed. - boolean parsed; - - // A list of URLs of files that should be retrieved along with the main - // contents of the document. This may include any images contained in the - // document, and possibly any external stylesheets. - LinkedHashSet<String> associatedFiles; - - // A list of URLs of frames that are contained in the document. - LinkedHashSet<String> documentFrames; - - // A list of URLs of links that are contained in the document. - LinkedHashSet<String> documentLinks; - - // A list of URLs of images that are contained in the document. - LinkedHashSet<String> documentImages; - - // A regular expression pattern that can be used to extract a URI from an HREF - // tag. - Pattern hrefPattern; - - // A regular expression pattern that can be used to extract a URI from a SRC - // tag. - Pattern srcPattern; - - // The base URL for relative links in this document. - String baseURL; - - // The URL that may be used to access this document. - String documentURL; - - // The actual contents of the page. - String htmlData; - - // The contents of the page converted to lowercase for easier matching. - String lowerData; - - // The URL for this document with only protocol, host, and port (i.e., no - // file). - String protocolHostPort; - - // A string buffer containing the contents of the page with tags removed. - StringBuffer textData; - - // A set of private variables used for internal processing. - private boolean lastElementIsAssociatedFile; - private boolean lastElementIsChunk; - private boolean lastElementIsComment; - private boolean lastElementIsFrame; - private boolean lastElementIsImage; - private boolean lastElementIsLink; - private boolean lastElementIsText; - private int lastElementEndPos; - private int lastElementStartPos; - private String lastURL; - - // constructor that helps to parse without url stuff - public HTMLDocument(String htmlData) { - this.documentURL = null; - this.htmlData = htmlData; - lowerData = htmlData.toLowerCase(); - associatedFiles = null; - documentLinks = null; - documentImages = null; - textData = null; - parsed = false; - - // Create the regex patterns that we will use for extracting URIs from tags. - hrefPattern = Pattern.compile(".*?[hH][rR][eE][fF][\\s=\\\"\\']+" + - "([^\\s\\\"\\'\\>]+).*", Pattern.DOTALL); - srcPattern = Pattern.compile(".*?[sS][rR][cC][\\s=\\\"\\']+" + - "([^\\s\\\"\\'\\>]+).*", Pattern.DOTALL); - } - - /** - * Creates a new HTML document using the provided data. - * - * @param documentURL The URL for this document. - * @param htmlData The actual data contained in the HTML document. - */ - public HTMLDocument(String documentURL, String htmlData) - throws MalformedURLException { - this.documentURL = documentURL; - this.htmlData = htmlData; - lowerData = htmlData.toLowerCase(); - associatedFiles = null; - documentLinks = null; - documentImages = null; - textData = null; - parsed = false; - - // Create the regex patterns that we will use for extracting URIs from tags. - hrefPattern = Pattern.compile(".*?[hH][rR][eE][fF][\\s=\\\"\\']+" + - "([^\\s\\\"\\'\\>]+).*", Pattern.DOTALL); - srcPattern = Pattern.compile(".*?[sS][rR][cC][\\s=\\\"\\']+" + - "([^\\s\\\"\\'\\>]+).*", Pattern.DOTALL); - - URL url = new URL(documentURL); - String urlPath = url.getPath(); - if ((urlPath == null) || (urlPath.length() == 0)) { - baseURL = documentURL; - protocolHostPort = documentURL; - } else if (urlPath.equals("/")) { - baseURL = documentURL; - protocolHostPort = documentURL.substring(0, documentURL.length() - 1); - } else if (urlPath.endsWith("/")) { - baseURL = documentURL; - - int port = url.getPort(); - if (port > 0) { - protocolHostPort = url.getProtocol() + "://" + url.getHost() + ":" + - port; - } else { - protocolHostPort = url.getProtocol() + "://" + url.getHost(); - } - } else { - int port = url.getPort(); - if (port > 0) { - protocolHostPort = url.getProtocol() + "://" + url.getHost() + ":" + - port; - } else { - protocolHostPort = url.getProtocol() + "://" + url.getHost(); - } - - File urlFile = new File(urlPath); - String parentDirectory = urlFile.getParent(); - if ((parentDirectory == null) || (parentDirectory.length() == 0)) { - parentDirectory = "/"; - } else if (!parentDirectory.startsWith("/")) { - parentDirectory = "/" + parentDirectory; - } - - baseURL = protocolHostPort + parentDirectory; - } - - if (!baseURL.endsWith("/")) { - baseURL = baseURL + "/"; - } - } - - /** - * Actually parses the HTML document and extracts useful elements from it. - * - * @return <CODE>true</CODE> if the page could be parsed successfully, or <CODE>false</CODE> if not. - */ - public boolean parse() { - if (parsed) { - return true; - } - - try { - associatedFiles = new LinkedHashSet<String>(); - documentFrames = new LinkedHashSet<String>(); - documentLinks = new LinkedHashSet<String>(); - documentImages = new LinkedHashSet<String>(); - textData = new StringBuffer(); - - lastElementStartPos = 0; - lastElementEndPos = -1; - String element; - while ((element = nextDocumentElement()) != null) { - if (element.length() == 0) { - continue; - } - - if (lastElementIsText) { - char lastChar; - if (textData.length() == 0) { - lastChar = ' '; - } else { - lastChar = textData.charAt(textData.length() - 1); - } - char firstChar = element.charAt(0); - if (!((lastChar == ' ') || (lastChar == '\t') || - (lastChar == '\r') || (lastChar == '\n')) || - (firstChar == ' ') || (firstChar == '\t') || - (firstChar == '\r') || (firstChar == '\n')) { - textData.append(" "); - } - - textData.append(element); - } else if (lastElementIsImage) { - if (lastURL != null) { - documentImages.add(lastURL); - associatedFiles.add(lastURL); - } - } else if (lastElementIsFrame) { - if (lastURL != null) { - documentFrames.add(lastURL); - associatedFiles.add(lastURL); - } - } else if (lastElementIsLink) { - if (lastURL != null) { - documentLinks.add(lastURL); - } - } else if (lastElementIsAssociatedFile) { - if (lastURL != null) { - associatedFiles.add(lastURL); - } - } else if (lastElementIsChunk || lastElementIsComment) { - // Don't need to do anything with this. - } else { - // Also don't need anything here. - } - } - - parsed = true; - } catch (Exception e) { - associatedFiles = null; - documentLinks = null; - documentImages = null; - textData = null; - parsed = false; - } - - return parsed; - } - - /** - * Retrieves the next element from the HTML document. An HTML element can - * include a string of plain text, a single HTML tag, or a larger chunk of - * HTML including a start and end tag, all of which should be considered a - * single element. - */ - private String nextDocumentElement() { - // If we're at the end of the HTML, then return null. - if (lastElementEndPos >= htmlData.length()) { - return null; - } - - // Initialize the variables we will use for the search. - lastElementStartPos = lastElementEndPos + 1; - lastElementIsAssociatedFile = false; - lastElementIsChunk = false; - lastElementIsComment = false; - lastElementIsFrame = false; - lastElementIsImage = false; - lastElementIsLink = false; - lastElementIsText = false; - lastURL = null; - - // Find the location of the next open angle bracket. If there is none, then - // the rest of the document must be plain text. - int openPos = lowerData.indexOf('<', lastElementStartPos); - if (openPos < 0) { - lastElementEndPos = htmlData.length(); - lastElementIsText = true; - return htmlData.substring(lastElementStartPos); - } - - // If the location of the next open tag is not we started looking, then read - // everything up to that tag as text. - if (openPos > lastElementStartPos) { - lastElementEndPos = openPos - 1; - lastElementIsText = true; - return htmlData.substring(lastElementStartPos, openPos); - } - - // The start position is an open tag. See if the tag is actually "<!--", - // which indicates an HTML comment. If that's the case, then find the - // closing "-->". - if (openPos == lowerData.indexOf("<!--", lastElementStartPos)) { - int closePos = lowerData.indexOf("-->", openPos + 1); - if (closePos < 0) { - // This looks like an unterminated comment. We can't do much else - // here, so just stop parsing. - return null; - } else { - lastElementEndPos = closePos + 2; - lastElementIsComment = true; - return htmlData.substring(lastElementStartPos, lastElementEndPos + 1); - } - } - - // Find the location of the next close angle bracket. If there is none, - // then we have an unmatched open tag. What to do here? I guess just treat - // the rest of the document as text. - int closePos = lowerData.indexOf('>', openPos + 1); - if (closePos < 0) { - lastElementEndPos = htmlData.length(); - lastElementIsText = true; - return htmlData.substring(lastElementStartPos); - } - - // Grab the contents of the tag in both normal and lowercase. - String tag = htmlData.substring(openPos, closePos + 1); - String strippedTag = htmlData.substring(openPos + 1, closePos).trim(); - StringTokenizer tokenizer = new StringTokenizer(strippedTag, " \t\r\n=\"'"); - lastElementEndPos = closePos; - - if (!tokenizer.hasMoreTokens()) { - return tag; - } - - String token = tokenizer.nextToken(); - String lowerToken = token.toLowerCase(); - - if (lowerToken.equals("a") || lowerToken.equals("area")) { - while (tokenizer.hasMoreTokens()) { - token = tokenizer.nextToken(); - if (token.equalsIgnoreCase("href")) { - try { - Matcher matcher = hrefPattern.matcher(tag); - lastURL = uriToURL(matcher.replaceAll("$1")); - if (lastURL != null) { - lastElementIsLink = true; - } - } catch (Exception e) { - } - break; - } - } - } else if (lowerToken.equals("base")) { - while (tokenizer.hasMoreTokens()) { - token = tokenizer.nextToken(); - if (token.equalsIgnoreCase("href")) { - try { - Matcher matcher = hrefPattern.matcher(tag); - String uri = matcher.replaceAll("$1"); - if (!uri.endsWith("/")) { - uri = uri + "/"; - } - - baseURL = uri; - } catch (Exception e) { - } - break; - } - } - } else if (lowerToken.equals("frame") || lowerToken.equals("iframe") || - lowerToken.equals("input")) { - while (tokenizer.hasMoreTokens()) { - token = tokenizer.nextToken(); - if (token.equalsIgnoreCase("src")) { - try { - Matcher matcher = srcPattern.matcher(tag); - String uri = matcher.replaceAll("$1"); - lastURL = uriToURL(uri); - if (lastURL != null) { - lastElementIsFrame = true; - lastElementIsAssociatedFile = true; - } - } catch (Exception e) { - } - break; - } - } - } else if (lowerToken.equals("img")) { - while (tokenizer.hasMoreTokens()) { - token = tokenizer.nextToken(); - if (token.equalsIgnoreCase("src")) { - try { - Matcher matcher = srcPattern.matcher(tag); - String uri = matcher.replaceAll("$1"); - lastURL = uriToURL(uri); - if (lastURL != null) { - lastElementIsImage = true; - } - } catch (Exception e) { - } - break; - } - } - } else if (lowerToken.equals("link")) { - boolean isStyleSheet = false; - - while (tokenizer.hasMoreTokens()) { - token = tokenizer.nextToken(); - if (token.equalsIgnoreCase("href")) { - try { - Matcher matcher = hrefPattern.matcher(tag); - String uri = matcher.replaceAll("$1"); - lastURL = uriToURL(uri); - if (lastURL != null) { - lastElementIsLink = true; - } - } catch (Exception e) { - } - break; - } else if (token.equalsIgnoreCase("rel")) { - if (tokenizer.hasMoreTokens()) { - String relType = tokenizer.nextToken(); - if (relType.equalsIgnoreCase("stylesheet")) { - isStyleSheet = true; - } - } - } - } - - if (lastURL != null) { - if (isStyleSheet) { - lastElementIsAssociatedFile = true; - } else { - lastElementIsLink = true; - } - } - } else if (lowerToken.equals("script")) { - while (tokenizer.hasMoreTokens()) { - token = tokenizer.nextToken(); - if (token.equalsIgnoreCase("src")) { - try { - Matcher matcher = srcPattern.matcher(tag); - String uri = matcher.replaceAll("$1"); - lastURL = uriToURL(uri); - } catch (Exception e) { - } - break; - } - } - - if (lastURL == null) { - int endScriptPos = lowerData.indexOf("</script>", lastElementEndPos + 1); - if (endScriptPos > 0) { - lastElementEndPos = endScriptPos + 8; - tag = htmlData.substring(lastElementStartPos, lastElementEndPos + 1); - lastElementIsChunk = true; - } - } else { - lastElementIsAssociatedFile = true; - } - } - - return tag; - } - - /** - * Converts the provided URI to a URL. The provided URI may be a URL already, - * or it may also be an absolute path on the server or a path relative to the - * base URL. - * - * @param uri The URI to convert to a URL. - * - * @return The URL based on the provided URI. - */ - private String uriToURL(String uri) { - String url = null; - - if (uri.indexOf("://") > 0) { - if (uri.startsWith("http")) { - url = uri; - } - } else if (uri.startsWith("/")) { - url = protocolHostPort + uri; - } else { - url = baseURL + uri; - } - - return url; - } - - /** - * Retrieves the URL of this HTML document. - * - * @return The URL of this HTML document. - */ - public String getDocumentURL() { - return documentURL; - } - - /** - * Retrieves the original HTML data used to create this document. - * - * @return The orginal HTML data used to create this document. - */ - public String getHTMLData() { - return htmlData; - } - - /** - * Retrieves the contents of the HTML document with all tags removed. - * - * @return The contents of the HTML document with all tags removed, or <CODE>null</CODE> if a problem occurs while - * trying to parse the - * HTML. - */ - public String getTextData() { - if (!parsed) { - if (!parse()) { - return null; - } - } - - return textData.toString(); - } - - /** - * Retrieves an array containing a set of URLs parsed from the HTML document - * that reference files that would normally be downloaded as part of - * retrieving a page in a browser. This includes images and external style - * sheets. - * - * @return An array containing a set of URLs to files associated with the - * HTML document, or <CODE>null</CODE> if a problem occurs while - * trying to parse the HTML. - */ - public String[] getAssociatedFiles() { - if (!parsed) { - if (!parse()) { - return null; - } - } - - String[] urlArray = new String[associatedFiles.size()]; - associatedFiles.toArray(urlArray); - return urlArray; - } - - /** - * Retrieves an array containing a set of URLs parsed from the HTML document - * that are in the form of links to other content. - * - * @return An array containing a set of URLs parsed from the HTML document - * that are in the form of links to other content, or <CODE>null</CODE> if a problem occurs while trying to - * parse the - * HTML. - */ - public String[] getDocumentLinks() { - if (!parsed) { - if (!parse()) { - return null; - } - } - - String[] urlArray = new String[documentLinks.size()]; - documentLinks.toArray(urlArray); - return urlArray; - } - - /** - * Retrieves an array containing a set of URLs parsed from the HTML document - * that reference images used in the document. - * - * @return An array containing a set of URLs parsed from the HTML document - * that reference images used in the document. - */ - public String[] getDocumentImages() { - if (!parsed) { - if (!parse()) { - return null; - } - } - - String[] urlArray = new String[documentImages.size()]; - documentImages.toArray(urlArray); - return urlArray; - } - - /** - * Retrieves an array containing a set of URLs parsed from the HTML document - * that reference frames used in the document. - * - * @return An array containing a set of URLs parsed from the HTML document - * that reference frames used in the document. - */ - public String[] getDocumentFrames() { - if (!parsed) { - if (!parse()) { - return null; - } - } - - String[] urlArray = new String[documentFrames.size()]; - documentFrames.toArray(urlArray); - return urlArray; - } -} diff --git a/pki/base/silent/src/com/netscape/pkisilent/http/HTTPClient.java b/pki/base/silent/src/com/netscape/pkisilent/http/HTTPClient.java deleted file mode 100644 index f3980c0ed..000000000 --- a/pki/base/silent/src/com/netscape/pkisilent/http/HTTPClient.java +++ /dev/null @@ -1,1231 +0,0 @@ -package com.netscape.pkisilent.http; - -// --- 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.io.BufferedOutputStream; -import java.io.DataOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.io.PrintStream; -import java.io.UnsupportedEncodingException; -import java.net.InetAddress; -import java.net.Socket; -import java.net.URLDecoder; -import java.nio.ByteBuffer; -import java.util.ArrayList; -import java.util.StringTokenizer; - -import org.mozilla.jss.crypto.X509Certificate; -import org.mozilla.jss.ssl.SSLCertificateApprovalCallback; -import org.mozilla.jss.ssl.SSLClientCertificateSelectionCallback; -import org.mozilla.jss.ssl.SSLSocket; -import org.mozilla.jss.ssl.TestCertApprovalCallback; -import org.mozilla.jss.ssl.TestClientCertificateSelectionCallback; - -import com.netscape.pkisilent.argparser.ArgParser; -import com.netscape.pkisilent.argparser.StringHolder; -import com.netscape.pkisilent.common.ComCrypto; -import com.netscape.cmsutil.util.Utils; - -public class HTTPClient implements SSLCertificateApprovalCallback { - - public static final int BUFFER_SIZE = 4096; - public boolean debugMode = true; - - public static String basic_auth_header_value = null; - - public static String cs_hostname = null; - public static String cs_port = null; - public static String ssl = null; - public static String client_certdb_dir = null; - public static String client_certdb_pwd = null; - public static String client_cert_nickname = null; - public static String uri = null; - public static String query = null; - public static String request_type = null; - public static String user_id = null; - public static String user_password = null; - public static String auth_type = null; - public static String debug = null; - - public static boolean parse_xml = false; - - public static X509Certificate server_cert = null; - - // cookie variable for CS install UI - public static String j_session_id = null; - public static boolean ecc_support = false; - - public HTTPClient() { - // constructor - // turn off ecc by default - ecc_support = true; - } - - public HTTPClient(boolean ecc) { - ecc_support = ecc; - } - - public boolean setCipherPref(SSLSocket socket) { - - if (ecc_support) { - int ecc_Ciphers[] = { - SSLSocket.TLS_ECDH_ECDSA_WITH_NULL_SHA, SSLSocket.TLS_ECDH_ECDSA_WITH_RC4_128_SHA, - SSLSocket.TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA, SSLSocket.TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA, - SSLSocket.TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA, SSLSocket.TLS_ECDHE_ECDSA_WITH_NULL_SHA, - SSLSocket.TLS_ECDHE_ECDSA_WITH_RC4_128_SHA, SSLSocket.TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA, - SSLSocket.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, SSLSocket.TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, - SSLSocket.TLS_ECDH_RSA_WITH_NULL_SHA, SSLSocket.TLS_ECDH_RSA_WITH_RC4_128_SHA, - SSLSocket.TLS_ECDH_RSA_WITH_AES_128_CBC_SHA, SSLSocket.TLS_ECDH_RSA_WITH_AES_256_CBC_SHA, - SSLSocket.TLS_ECDHE_RSA_WITH_NULL_SHA, SSLSocket.TLS_ECDHE_RSA_WITH_RC4_128_SHA, - SSLSocket.TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA, SSLSocket.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, - SSLSocket.TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, - 0 }; - - try { - for (int i = 0; i < ecc_Ciphers.length; i++) { - if (ecc_Ciphers[i] > 0) - socket.setCipherPreference( - ecc_Ciphers[i], true); - } - } catch (Exception e) { - System.out.println("ERROR: unable to set ECC Cipher List"); - System.out.println("ERROR: Exception = " + e.getMessage()); - } - - } - return true; - } - - public boolean disableSSL2(SSLSocket socket) { - try { - SSLSocket.enableSSL3Default(true); - socket.enableSSL3(true); - socket.enableSSL2(false); - SSLSocket.enableSSL2Default(false); - socket.enableV2CompatibleHello(false); - } catch (Exception e) { - System.out.println("ERROR: Exception = " + e.getMessage()); - } - return true; - } - - public X509Certificate getServerCert() { - return server_cert; - } - - public void set_parse_xml(boolean b) { - parse_xml = b; - } - - public boolean approve(X509Certificate cert, - SSLCertificateApprovalCallback.ValidityStatus status) { - - // when this method is called by SSLSocket we get the server cert - // we can capture this for future use. - server_cert = cert; - return true; - } - - public boolean testsslConnect(String hostname, String portnumber) { - boolean st = true; - - try { - - System.out.println("#############################################"); - System.out.println("Attempting to connect to: " + hostname + ":" + - portnumber); - - Integer x = new Integer(portnumber); - int port = x.intValue(); - - SSLClientCertificateSelectionCallback certSelectionCallback = - new TestClientCertificateSelectionCallback(); - - Socket js = new Socket(InetAddress.getByName(hostname), port); - SSLSocket socket = new SSLSocket(js, hostname, this, - certSelectionCallback); - setCipherPref(socket); - disableSSL2(socket); - socket.forceHandshake(); - System.out.println("Connected."); - socket.setUseClientMode(true); - - // test connection to obtain server cert. close it. - socket.close(); - - } - - catch (Exception e) { - System.err.println("Exception: Unable to Send Request:" + e); - e.printStackTrace(); - st = false; - } - - if (!st) - return false; - else - return true; - } - - // performs ssl connect to given host/port requiring client auth - // posts the given query data - // returns HTTPResponse - public HTTPResponse sslConnectClientAuth(String hostname, String portnumber, - String client_cert, String url, String query) { - - boolean st = true; - HTTPResponse hr = null; - - try { - - System.out.println("#############################################"); - System.out.println("Attempting to connect to: " + hostname + ":" + - portnumber); - - Integer x = new Integer(portnumber); - int port = x.intValue(); - - SSLCertificateApprovalCallback approvalCallback = - new TestCertApprovalCallback(); - CertSelection certSelectionCallback = - new CertSelection(); - - // Client Cert for Auth is set here - certSelectionCallback.setClientCert(client_cert); - - Socket js = new Socket(InetAddress.getByName(hostname), port); - SSLSocket socket = new SSLSocket(js, hostname, approvalCallback, - certSelectionCallback); - disableSSL2(socket); - setCipherPref(socket); - socket.forceHandshake(); - System.out.println("Connected."); - socket.setUseClientMode(true); - - System.out.println("Posting Query = " + - "https://" + hostname + - ":" + portnumber + - "/" + url + - "?" + query); - - OutputStream rawos = socket.getOutputStream(); - BufferedOutputStream os = new BufferedOutputStream(rawos); - PrintStream ps = new PrintStream(os); - - ps.println("POST " + url + " HTTP/1.0"); - ps.println("Connection: Keep-Alive"); - ps.println("Content-type: application/x-www-form-urlencoded"); - ps.println("Content-length: " + query.length()); - ps.println(""); - ps.print(query); - ps.flush(); - os.flush(); - - try { - hr = readResponse(socket.getInputStream()); - hr.parseContent(); - - } catch (Exception e) { - System.out.println("Exception"); - e.printStackTrace(); - st = false; - } - - socket.close(); - os.close(); - rawos.close(); - ps.close(); - - os = null; - rawos = null; - ps = null; - - } - - catch (Exception e) { - System.err.println("Exception: Unable to Send Request:" + e); - e.printStackTrace(); - st = false; - } - - if (!st) - return null; - else - return hr; - } - - // performs ssl connect to given host/port - // posts the given query data - // returns HTTPResponse - public HTTPResponse sslConnect(String hostname, String portnumber, - String url, String query) { - - boolean st = true; - HTTPResponse hr = null; - - try { - - System.out.println("#############################################"); - System.out.println("Attempting to connect to: " + hostname + ":" + - portnumber); - - Integer x = new Integer(portnumber); - int port = x.intValue(); - - SSLCertificateApprovalCallback approvalCallback = - new TestCertApprovalCallback(); - SSLClientCertificateSelectionCallback certSelectionCallback = - new TestClientCertificateSelectionCallback(); - - Socket js = new Socket(InetAddress.getByName(hostname), port); - SSLSocket socket = new SSLSocket(js, hostname, approvalCallback, - certSelectionCallback); - setCipherPref(socket); - disableSSL2(socket); - socket.forceHandshake(); - System.out.println("Connected."); - socket.setUseClientMode(true); - - System.out.println("Posting Query = " + - "https://" + hostname + - ":" + portnumber + - "/" + url + - "?" + query); - - OutputStream rawos = socket.getOutputStream(); - BufferedOutputStream os = new BufferedOutputStream(rawos); - PrintStream ps = new PrintStream(os); - - ps.println("POST " + url + " HTTP/1.0"); - - // check to see if we have a cookie to send - if (j_session_id != null) - ps.println("Cookie: " + j_session_id); - - ps.println("Content-type: application/x-www-form-urlencoded"); - ps.println("Content-length: " + query.length()); - ps.println("Connection: Keep-Alive"); - - // special header posting if available - if (basic_auth_header_value != null) { - System.out.println("basic_auth = " + basic_auth_header_value); - ps.println("Authorization: Basic " + basic_auth_header_value); - } - - ps.println(""); - ps.println(query); - ps.println("\r"); - ps.flush(); - os.flush(); - - try { - hr = readResponse(socket.getInputStream()); - hr.parseContent(); - - } catch (Exception e) { - System.out.println("Exception"); - e.printStackTrace(); - st = false; - } - - socket.close(); - os.close(); - rawos.close(); - ps.close(); - - os = null; - rawos = null; - ps = null; - - } - - catch (Exception e) { - System.err.println("Exception: Unable to Send Request:" + e); - e.printStackTrace(); - st = false; - } - - if (!st) - return null; - else - return hr; - } - - // performs non ssl connect to given host/port - // posts the given query data - // returns HTTPResponse - public HTTPResponse nonsslConnect(String hostname, String portnumber, - String url, String query) { - - boolean st = true; - HTTPResponse hr = null; - - try { - - System.out.println("#############################################"); - System.out.println("Attempting to connect to: " + hostname + ":" + - portnumber); - - Integer x = new Integer(portnumber); - int port = x.intValue(); - - Socket socket = new Socket(hostname, port); - - System.out.println("Posting Query = " + - "http://" + hostname + - ":" + portnumber + - "/" + url + - "?" + query); - - OutputStream rawos = socket.getOutputStream(); - BufferedOutputStream os = new BufferedOutputStream(rawos); - PrintStream ps = new PrintStream(os); - - System.out.println("Connected."); - - ps.println("POST " + url + " HTTP/1.0"); - - // check to see if we have a cookie to send - if (j_session_id != null) - ps.println("Cookie: " + j_session_id); - - ps.println("Content-type: application/x-www-form-urlencoded"); - ps.println("Content-length: " + query.length()); - ps.println("Connection: Keep-Alive"); - - // special header posting if available - if (basic_auth_header_value != null) { - System.out.println("basic_auth = " + basic_auth_header_value); - ps.println("Authorization: Basic " + basic_auth_header_value); - } - - ps.println(""); - ps.println(query); - ps.println("\r"); - ps.flush(); - os.flush(); - - try { - hr = readResponse(socket.getInputStream()); - hr.parseContent(); - - } catch (Exception e) { - System.out.println("Exception"); - e.printStackTrace(); - st = false; - } - - socket.close(); - os.close(); - rawos.close(); - ps.close(); - - os = null; - rawos = null; - ps = null; - - } - - catch (Exception e) { - System.err.println("Exception: Unable to Send Request:" + e); - e.printStackTrace(); - st = false; - } - - if (!st) - return null; - else - return hr; - } - - public HTTPResponse readResponse(InputStream inputStream) - throws Exception { - // read response from http input stream and return HTTPResponse - byte[] buffer = new byte[BUFFER_SIZE]; - HTTPResponse response = null; - int statusCode = 0; - - // Read an initial chunk of the response from the server. - int bytesRead = inputStream.read(buffer); - if (bytesRead < 0) { - throw new IOException("Unexpected end of input stream from server"); - } - - // Hopefully, this initial chunk will contain the entire header, so look for - // it. Technically, HTTP is supposed to use CRLF as the end-of-line - // character, so look for that first, but also check for LF by itself just - // in case. - int headerEndPos = -1; - int dataStartPos = -1; - for (int i = 0; i < (bytesRead - 3); i++) { - if ((buffer[i] == '\r') && (buffer[i + 1] == '\n') && - (buffer[i + 2] == '\r') && (buffer[i + 3] == '\n')) { - headerEndPos = i; - dataStartPos = i + 4; - break; - } - } - - if (headerEndPos < 0) { - for (int i = 0; i < (bytesRead - 1); i++) { - if ((buffer[i] == '\n') && (buffer[i + 1] == '\n')) { - headerEndPos = i; - dataStartPos = i + 2; - break; - } - } - } - - // In the event that we didn't get the entire header in the first pass, keep - // reading until we do have enough. - if (headerEndPos < 0) { - byte[] buffer2 = new byte[BUFFER_SIZE]; - while (headerEndPos < 0) { - int startPos = bytesRead; - int moreBytesRead = inputStream.read(buffer2); - if (moreBytesRead < 0) { - throw new IOException("Unexpected end of input stream from server " + - "when reading more data from response"); - } - - byte[] newBuffer = new byte[bytesRead + moreBytesRead]; - System.arraycopy(buffer, 0, newBuffer, 0, bytesRead); - System.arraycopy(buffer2, 0, newBuffer, bytesRead, moreBytesRead); - buffer = newBuffer; - bytesRead += moreBytesRead; - - for (int i = startPos; i < (bytesRead - 3); i++) { - if ((buffer[i] == '\r') && (buffer[i + 1] == '\n') && - (buffer[i + 2] == '\r') && (buffer[i + 3] == '\n')) { - headerEndPos = i; - dataStartPos = i + 4; - break; - } - } - - if (headerEndPos < 0) { - for (int i = startPos; i < (bytesRead - 1); i++) { - if ((buffer[i] == '\n') && (buffer[i + 1] == '\n')) { - headerEndPos = i; - dataStartPos = i + 2; - break; - } - } - } - } - } - - // At this point, we should have the entire header, so read and analyze it. - String headerStr = new String(buffer, 0, headerEndPos); - StringTokenizer tokenizer = new StringTokenizer(headerStr, "\r\n"); - if (tokenizer.hasMoreTokens()) { - String statusLine = tokenizer.nextToken(); - if (debugMode) { - System.out.println("RESPONSE STATUS: " + statusLine); - } - - int spacePos = statusLine.indexOf(' '); - if (spacePos < 0) { - System.out.println("ERROR: Unable to parse response header -- could " + - "not find protocol/version delimiter"); - return null; - - } - - String protocolVersion = statusLine.substring(0, spacePos); - int spacePos2 = statusLine.indexOf(' ', spacePos + 1); - if (spacePos2 < 0) { - System.out.println("ERROR: Unable to parse response header -- could " + - "not find response code delimiter"); - return null; - } - - try { - statusCode = Integer.parseInt(statusLine.substring(spacePos + 1, - spacePos2)); - } catch (NumberFormatException nfe) { - System.out.println("Unable to parse response header -- could " + - "not interpret status code as an integer"); - return null; - } - - String responseMessage = statusLine.substring(spacePos2 + 1); - response = new HTTPResponse(statusCode, protocolVersion, - responseMessage); - - while (tokenizer.hasMoreTokens()) { - String headerLine = tokenizer.nextToken(); - if (debugMode) { - System.out.println("RESPONSE HEADER: " + headerLine); - } - - int colonPos = headerLine.indexOf(':'); - if (colonPos < 0) { - if (headerLine.toLowerCase().startsWith("http/")) { - // This is a direct violation of RFC 2616, but certain HTTP servers - // seem to immediately follow a 100 continue with a 200 ok without - // the required CRLF in between. - System.out.println("ERROR: Found illegal status line '" + headerLine + - "'in the middle of a response -- attempting " + - "to deal with it as the start of a new " + - "response."); - statusLine = headerLine; - spacePos = statusLine.indexOf(' '); - if (spacePos < 0) { - System.out.println("ERROR: Unable to parse response header -- " + - "could not find protocol/version " + - "delimiter"); - return null; - } - - protocolVersion = statusLine.substring(0, spacePos); - spacePos2 = statusLine.indexOf(' ', spacePos + 1); - if (spacePos2 < 0) { - System.out.println("ERROR: Unable to parse response header -- " + - "could not find response code delimiter"); - return null; - } - - try { - statusCode = Integer.parseInt(statusLine.substring(spacePos + 1, - spacePos2)); - } catch (NumberFormatException nfe) { - System.out.println("ERROR: Unable to parse response header -- " + - "could not interpret status code as an " + - "integer"); - return null; - } - - responseMessage = statusLine.substring(spacePos2 + 1); - response = new HTTPResponse(statusCode, protocolVersion, - responseMessage); - continue; - } else { - System.out.println("ERROR: Unable to parse response header -- no " + - "colon found on header line \"" + - headerLine + "\""); - } - } - - String headerName = headerLine.substring(0, colonPos); - String headerValue = headerLine.substring(colonPos + 1).trim(); - response.addHeader(headerName, headerValue); - } - } else { - // This should never happen -- an empty response - System.out.println("Unable to parse response header -- empty " + - "header"); - } - - // If the status code was 100 (continue), then it was an intermediate header - // and we need to keep reading until we get the real response header. - while (response.getStatusCode() == 100) { - if (dataStartPos < bytesRead) { - byte[] newBuffer = new byte[bytesRead - dataStartPos]; - System.arraycopy(buffer, dataStartPos, newBuffer, 0, newBuffer.length); - buffer = newBuffer; - bytesRead = buffer.length; - - headerEndPos = -1; - for (int i = 0; i < (bytesRead - 3); i++) { - if ((buffer[i] == '\r') && (buffer[i + 1] == '\n') && - (buffer[i + 2] == '\r') && (buffer[i + 3] == '\n')) { - headerEndPos = i; - dataStartPos = i + 4; - break; - } - } - - if (headerEndPos < 0) { - for (int i = 0; i < (bytesRead - 1); i++) { - if ((buffer[i] == '\n') && (buffer[i + 1] == '\n')) { - headerEndPos = i; - dataStartPos = i + 2; - break; - } - } - } - } else { - buffer = new byte[0]; - bytesRead = 0; - headerEndPos = -1; - } - - byte[] buffer2 = new byte[BUFFER_SIZE]; - while (headerEndPos < 0) { - int startPos = bytesRead; - int moreBytesRead = inputStream.read(buffer2); - - if (moreBytesRead < 0) { - throw new IOException("Unexpected end of input stream from server " + - "when reading more data from response"); - } - - byte[] newBuffer = new byte[bytesRead + moreBytesRead]; - System.arraycopy(buffer, 0, newBuffer, 0, bytesRead); - System.arraycopy(buffer2, 0, newBuffer, bytesRead, moreBytesRead); - buffer = newBuffer; - bytesRead += moreBytesRead; - - for (int i = startPos; i < (bytesRead - 3); i++) { - if ((buffer[i] == '\r') && (buffer[i + 1] == '\n') && - (buffer[i + 2] == '\r') && (buffer[i + 3] == '\n')) { - headerEndPos = i; - dataStartPos = i + 4; - break; - } - } - - if (headerEndPos < 0) { - for (int i = startPos; i < (bytesRead - 1); i++) { - if ((buffer[i] == '\n') && (buffer[i + 1] == '\n')) { - headerEndPos = i; - dataStartPos = i + 2; - break; - } - } - } - } - - // We should now have the next header, so examine it. - headerStr = new String(buffer, 0, headerEndPos); - tokenizer = new StringTokenizer(headerStr, "\r\n"); - if (tokenizer.hasMoreTokens()) { - String statusLine = tokenizer.nextToken(); - if (debugMode) { - System.out.println("RESPONSE STATUS: " + statusLine); - } - - int spacePos = statusLine.indexOf(' '); - if (spacePos < 0) { - System.out.println("Unable to parse response header -- could " + - "not find protocol/version delimiter"); - } - - String protocolVersion = statusLine.substring(0, spacePos); - int spacePos2 = statusLine.indexOf(' ', spacePos + 1); - if (spacePos2 < 0) { - System.out.println("Unable to parse response header -- could " + - "not find response code delimiter"); - } - - try { - statusCode = Integer.parseInt(statusLine.substring(spacePos + 1, - spacePos2)); - } catch (NumberFormatException nfe) { - System.out.println("Unable to parse response header -- could " + - "not interpret status code as an integer"); - } - - String responseMessage = statusLine.substring(spacePos2 + 1); - response = new HTTPResponse(statusCode, protocolVersion, - responseMessage); - - while (tokenizer.hasMoreTokens()) { - String headerLine = tokenizer.nextToken(); - if (debugMode) { - System.out.println("RESPONSE HEADER: " + headerLine); - } - - int colonPos = headerLine.indexOf(':'); - if (colonPos < 0) { - System.out.println("Unable to parse response header -- no " + - "colon found on header line \"" + - headerLine + "\""); - } - - String headerName = headerLine.substring(0, colonPos); - String headerValue = headerLine.substring(colonPos + 1).trim(); - response.addHeader(headerName, headerValue); - } - } else { - // This should never happen -- an empty response - System.out.println("Unable to parse response header -- empty " + - "header"); - } - } - - // Now that we have parsed the header, use it to determine how much data - // there is. If we're lucky, the server will have told us using the - // "Content-Length" header. - int contentLength = response.getContentLength(); - - if (contentLength >= 0) { - readContentDataUsingLength(response, inputStream, contentLength, buffer, - dataStartPos, bytesRead); - } else { - // It's not chunked encoding, so our last hope is that the connection - // will be closed when all the data has been sent. - String connectionStr = response.getHeader("connection"); - if ((connectionStr != null) && - (!connectionStr.equalsIgnoreCase("close"))) { - System.out.println("ERROR:Unable to determine how to find when the " + - "end of the data has been reached (no " + - "content length, not chunked encoding, " + - "connection string is \"" + connectionStr + - "\" rather than \"close\")"); - } else { - readContentDataUsingConnectionClose(response, inputStream, buffer, - dataStartPos, bytesRead); - } - } - // Finally, return the response to the caller. - return response; - } - - /** - * Reads the actual data of the response based on the content length provided - * by the server in the response header. - * - * @param response The response with which the data is associated. - * @param inputStream The input stream from which to read the response. - * @param contentLength The number of bytes that the server said are in the - * response. - * @param dataRead The data that we have already read. This includes - * the header data, but may also include some or all of - * the content data as well. - * @param dataStartPos The position in the provided array at which the - * content data starts. - * @param dataBytesRead The total number of valid bytes in the provided - * array that should be considered part of the - * response (the number of header bytes is included in - * this count). - * - * @throws IOException If a problem occurs while reading data from the - * server. - */ - private void readContentDataUsingLength(HTTPResponse response, - InputStream inputStream, - int contentLength, byte[] dataRead, - int dataStartPos, int dataBytesRead) - throws IOException { - if (contentLength <= 0) { - response.setResponseData(new byte[0]); - return; - } - - byte[] contentBytes = new byte[contentLength]; - int startPos = 0; - if (dataBytesRead > dataStartPos) { - // We've already got some data to include in the header, so copy that into - // the content array. Make sure the server didn't do something stupid - // like return more data than it told us was in the response. - int bytesToCopy = Math.min(contentBytes.length, - (dataBytesRead - dataStartPos)); - System.arraycopy(dataRead, dataStartPos, contentBytes, 0, bytesToCopy); - startPos = bytesToCopy; - } - - byte[] buffer = new byte[BUFFER_SIZE]; - while (startPos < contentBytes.length) { - int bytesRead = inputStream.read(buffer); - if (bytesRead < 0) { - throw new IOException("Unexpected end of input stream reached when " + - "reading data from the server"); - } - - System.arraycopy(buffer, 0, contentBytes, startPos, bytesRead); - startPos += bytesRead; - } - - response.setResponseData(contentBytes); - } - - /** - * Reads the actual data of the response using chunked encoding, which is a - * way for the server to provide the data in several chunks rather than all at - * once. - * - * @param response The response with which the data is associated. - * @param inputStream The input stream from which to read the response. - * @param dataRead The data that we have already read. This includes - * the header data, but may also include some or all of - * the content data as well. - * @param dataStartPos The position in the provided array at which the - * content data starts. - * @param dataBytesRead The total number of valid bytes in the provided - * array that should be considered part of the - * response (the number of header bytes is included in - * this count). - * - * @throws IOException If a problem occurs while reading data from the - * server. - */ - private void readContentDataUsingConnectionClose(HTTPResponse response, - InputStream inputStream, - byte[] dataRead, - int dataStartPos, - int dataBytesRead) - throws IOException { - // Create an array list that we will use to hold the chunks of information - // read from the server. - ArrayList<ByteBuffer> bufferList = new ArrayList<ByteBuffer>(); - - // Create a variable to hold the total number of bytes in the data. - int totalBytes = 0; - - // See if we have unread data in the array already provided. - int existingBytes = dataBytesRead - dataStartPos; - if (existingBytes > 0) { - ByteBuffer byteBuffer = ByteBuffer.allocate(existingBytes); - byteBuffer.put(dataRead, dataStartPos, existingBytes); - bufferList.add(byteBuffer); - totalBytes += existingBytes; - } - - // Keep reading until we hit the end of the input stream. - byte[] buffer = new byte[BUFFER_SIZE]; - while (true) { - try { - int bytesRead = inputStream.read(buffer); - if (bytesRead < 0) { - // We've hit the end of the stream and therefore the end of the - // document. - break; - } else if (bytesRead > 0) { - ByteBuffer byteBuffer = ByteBuffer.allocate(bytesRead); - byteBuffer.put(buffer, 0, bytesRead); - bufferList.add(byteBuffer); - totalBytes += bytesRead; - } - } catch (IOException ioe) { - // In this case we'll assume that the end of the stream has been - // reached. It's possible that there was some other error, but we can't - // do anything about it so try to process what we've got so far. - System.out.println("ERROR: unable to read until end of stream"); - System.out.println("ERROR: " + ioe.getMessage()); - break; - } - } - - // Assemble the contents of all the buffers into a big array and store that - // array in the response. - int startPos = 0; - byte[] contentData = new byte[totalBytes]; - for (int i = 0; i < bufferList.size(); i++) { - ByteBuffer byteBuffer = (ByteBuffer) bufferList.get(i); - byteBuffer.flip(); - byteBuffer.get(contentData, startPos, byteBuffer.limit()); - startPos += byteBuffer.limit(); - } - response.setResponseData(contentData); - } - - // performs ssl connect to given host/port - // posts the given query data - format - a byte array - // returns HTTPResponse - - public HTTPResponse sslConnect(String hostname, String portnumber, - String url, byte[] data) { - - boolean st = true; - HTTPResponse hr = null; - - try { - - System.out.println("#############################################"); - System.out.println("Attempting to connect to: " + hostname + ":" + - portnumber); - - Integer x = new Integer(portnumber); - int port = x.intValue(); - - SSLCertificateApprovalCallback approvalCallback = - new TestCertApprovalCallback(); - SSLClientCertificateSelectionCallback certSelectionCallback = - new TestClientCertificateSelectionCallback(); - - Socket js = new Socket(InetAddress.getByName(hostname), port); - SSLSocket socket = new SSLSocket(js, hostname, approvalCallback, - certSelectionCallback); - setCipherPref(socket); - disableSSL2(socket); - socket.forceHandshake(); - System.out.println("Connected."); - socket.setUseClientMode(true); - - DataOutputStream dos = - new DataOutputStream(socket.getOutputStream()); - dos.writeBytes("POST /ocsp HTTP/1.0\r\n"); - dos.writeBytes("Content-length: " + data.length + "\r\n"); - dos.writeBytes("\r\n"); - dos.write(data); - dos.writeBytes("\r\n"); - dos.flush(); - - try { - hr = readResponse(socket.getInputStream()); - hr.parseContent(); - } catch (Exception e) { - System.out.println("Exception"); - e.printStackTrace(); - st = false; - } - - socket.close(); - dos.close(); - - } - - catch (Exception e) { - System.err.println("Exception: Unable to Send Request:" + e); - e.printStackTrace(); - st = false; - } - - if (!st) - return null; - else - return hr; - } - - // performs non ssl connect to given host/port - // posts the given query data - // returns HTTPResponse - public HTTPResponse nonsslConnect(String hostname, String portnumber, - String url, byte[] data) { - - boolean st = true; - HTTPResponse hr = null; - - try { - - System.out.println("#############################################"); - System.out.println("Attempting to connect to: " + hostname + ":" + - portnumber); - - Integer x = new Integer(portnumber); - int port = x.intValue(); - - Socket socket = new Socket(hostname, port); - - System.out.println("Posting Query = " + - "http://" + hostname + - ":" + portnumber + - "/" + url); - - System.out.println("Connected."); - - DataOutputStream dos = - new DataOutputStream(socket.getOutputStream()); - dos.writeBytes("POST " + url + " HTTP/1.0\r\n"); - dos.writeBytes("Content-length: " + data.length + "\r\n"); - dos.writeBytes("\r\n"); - dos.write(data); - dos.writeBytes("\r\n"); - dos.flush(); - - try { - hr = readResponse(socket.getInputStream()); - hr.parseContent(); - } catch (Exception e) { - System.out.println("Exception"); - e.printStackTrace(); - st = false; - } - - socket.close(); - dos.close(); - - } - - catch (Exception e) { - System.err.println("Exception: Unable to Send Request:" + e); - e.printStackTrace(); - st = false; - } - - if (!st) - return null; - else - return hr; - } - - public static boolean init_nss() { - try { - - ComCrypto cCrypt = new ComCrypto(client_certdb_dir, - client_certdb_pwd, - null, - null, - null); - cCrypt.setDebug(true); - cCrypt.setGenerateRequest(false); - cCrypt.loginDB(); - } catch (Exception e) { - System.out.println("ERROR: unable to login to : " + - client_certdb_dir); - return false; - } - - return true; - } - - public static void main(String args[]) throws UnsupportedEncodingException { - HTTPClient hc = new HTTPClient(); - HTTPResponse hr = null; - - // parse args - StringHolder x_hostname = new StringHolder(); - StringHolder x_port = new StringHolder(); - StringHolder x_ssl = new StringHolder(); - StringHolder x_client_certdb_dir = new StringHolder(); - StringHolder x_client_certdb_pwd = new StringHolder(); - StringHolder x_client_cert_nickname = new StringHolder(); - StringHolder x_uri = new StringHolder(); - StringHolder x_query = new StringHolder(); - StringHolder x_request_type = new StringHolder(); - StringHolder x_auth_type = new StringHolder(); - StringHolder x_user_id = new StringHolder(); - StringHolder x_user_password = new StringHolder(); - StringHolder x_debug = new StringHolder(); - StringHolder x_decode = new StringHolder(); - - // parse the args - ArgParser parser = new ArgParser("HTTPClient"); - - parser.addOption("-hostname %s #Hostname", - x_hostname); - parser.addOption("-port %s #port number", - x_port); - parser.addOption("-ssl %s #HTTP or HTTPS[true or false]", - x_ssl); - parser.addOption("-client_certdb_dir %s #CertDB dir", - x_client_certdb_dir); - parser.addOption("-client_certdb_pwd %s #CertDB password", - x_client_certdb_pwd); - parser.addOption("-client_cert_nickname %s #client cert nickname", - x_client_cert_nickname); - parser.addOption("-uri %s #URI", - x_uri); - parser.addOption("-query %s #URL encoded query string[note: url encode value part only for CS operations]", - x_query); - parser.addOption("-request_type %s #Request Type [ post ]", - x_request_type); - parser.addOption("-user_id %s #user id for authorization", - x_user_id); - parser.addOption("-user_password %s #password for authorization", - x_user_password); - parser.addOption("-auth_type %s #type of authorization [ BASIC ]", - x_auth_type); - parser.addOption("-debug %s #enables display of debugging info", - x_debug); - parser.addOption("-decode %s #URL Decode the resulting output", - x_decode); - - // and then match the arguments - String[] unmatched = null; - unmatched = parser.matchAllArgs(args, 0, ArgParser.EXIT_ON_UNMATCHED); - - if (unmatched != null) { - System.out.println("ERROR: Argument Mismatch"); - System.exit(-1); - } - - // set variables - cs_hostname = x_hostname.value; - cs_port = x_port.value; - ssl = x_ssl.value; - client_certdb_dir = x_client_certdb_dir.value; - client_certdb_pwd = x_client_certdb_pwd.value; - client_cert_nickname = x_client_cert_nickname.value; - uri = x_uri.value; - query = x_query.value; - request_type = x_request_type.value; - user_id = x_user_id.value; - user_password = x_user_password.value; - auth_type = x_auth_type.value; - debug = x_debug.value; - - String decode = x_decode.value; - - // init_nss if needed - boolean st = init_nss(); - if (!st) - System.exit(-1); - - // set basic auth if needed - if (auth_type != null && auth_type.equalsIgnoreCase("BASIC")) { - // BASE64Encoder encoder = new BASE64Encoder(); - - // String temp = encoder.encodeBuffer((user_id + - // ":" + user_password).getBytes()); - String temp = Utils.base64encode((user_id + - ":" + user_password).getBytes()); - - // note: temp already contains \r and \n. - // remove \r and \n from the base64 encoded string. - // causes problems when sending http post requests - // using PrintStream.println() - - temp = temp.replaceAll("\\r", ""); - temp = temp.replaceAll("\\n", ""); - - basic_auth_header_value = temp; - } - - // route to proper function - - if (ssl != null && ssl.equalsIgnoreCase("true")) { - if (client_cert_nickname != null && - !client_cert_nickname.equalsIgnoreCase("null")) { - // ssl client auth call - - hr = hc.sslConnectClientAuth(cs_hostname, cs_port, - client_cert_nickname, - uri, query); - } - - else { - // ssl client call - hr = hc.sslConnect(cs_hostname, cs_port, uri, query); - } - } else if (ssl != null && ssl.equalsIgnoreCase("false")) { - // non ssl connect - hr = hc.nonsslConnect(cs_hostname, cs_port, uri, query); - } else { - System.out.println("ERROR: ssl parameter is null"); - System.exit(-1); - } - - // collect and print response - - if (hr.getStatusCode() == 200) - System.out.println("Response from Host:" + cs_hostname + " OK"); - else { - System.out.println("ERROR: unable to get response from host:" + - cs_hostname); - System.exit(-1); - } - - String responseValue = null; - if (decode.equalsIgnoreCase("true")) - responseValue = URLDecoder.decode(hr.getHTML(), "UTF-8"); - else - responseValue = hr.getHTML(); - - System.out.println("###############################"); - System.out.println("RESULT=" + responseValue); - System.out.println("###############################"); - - } - -}; diff --git a/pki/base/silent/src/com/netscape/pkisilent/http/HTTPResponse.java b/pki/base/silent/src/com/netscape/pkisilent/http/HTTPResponse.java deleted file mode 100644 index 9ade1c133..000000000 --- a/pki/base/silent/src/com/netscape/pkisilent/http/HTTPResponse.java +++ /dev/null @@ -1,314 +0,0 @@ -package com.netscape.pkisilent.http; - -// --- 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.util.ArrayList; -import java.util.StringTokenizer; - -import com.netscape.pkisilent.common.Utilities; - -public class HTTPResponse { - // The set of cookie values included in this response. - ArrayList<String> cookieValueList; - - // The names of the headers included in this response. - ArrayList<String> headerNameList; - - // The values of the headers included in this response. - ArrayList<String> 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<String> contentName; - ArrayList<String> 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<String>(); - headerNameList = new ArrayList<String>(); - headerValueList = new ArrayList<String>(); - contentName = new ArrayList<String>(); - contentValue = new ArrayList<String>(); - } - - /** - * 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 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<String> valueList = new ArrayList<String>(); - 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] = headerNameList.get(i); - headerElements[i][1] = 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 contentValue.get(i); - } - } - - return null; - } - - public ArrayList<String> getContentNames() { - return contentName; - } - - public ArrayList<String> 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 = cookieValueList.get(i); - if (temp.startsWith(headerName)) { - return cookieValueList.get(i); - } - } - - return null; - } - -} |