ws-soap-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From snic...@apache.org
Subject cvs commit: xml-soap/java/src/org/apache/soap/util/net HTTPUtils.java SSLUtils.java
Date Fri, 18 Oct 2002 20:30:54 GMT
snichol     2002/10/18 13:30:54

  Modified:    java/src/org/apache/soap/util/net HTTPUtils.java
                        SSLUtils.java
  Log:
  Allow proxyUserName and proxyPassword to be used for SSL connection as well
  as straight HTTP.  Move all auth string manipulation out of SSLUtils.
  
  Thanks to Mike Ladwig (MLadwig@northropgrumman.com) for testing this change.
  
  Revision  Changes    Path
  1.35      +11 -4     xml-soap/java/src/org/apache/soap/util/net/HTTPUtils.java
  
  Index: HTTPUtils.java
  ===================================================================
  RCS file: /home/cvs/xml-soap/java/src/org/apache/soap/util/net/HTTPUtils.java,v
  retrieving revision 1.34
  retrieving revision 1.35
  diff -u -r1.34 -r1.35
  --- HTTPUtils.java	16 Oct 2002 04:16:15 -0000	1.34
  +++ HTTPUtils.java	18 Oct 2002 20:30:54 -0000	1.35
  @@ -118,6 +118,7 @@
                                           Hashtable headers, Boolean tcpNoDelay)
           throws Exception {
   
  +    String proxyAuth = null;
       if (httpProxyHost == null) {
         String proxyHost = System.getProperty("https.proxyHost");
         String nonProxyHosts = System.getProperty("https.nonProxyHosts");
  @@ -126,21 +127,27 @@
           // use proxy from system values
           httpProxyHost = proxyHost;
           httpProxyPort = Integer.getInteger("https.proxyPort", HTTPS_DEFAULT_PORT).intValue();
  -        // TODO: build authentication string here instead of SSLUtils,
  -        //       but into headers, and pass headers to SSLUtils.
         }
       }
   
  +    if (httpProxyHost != null) {
  +      proxyAuth = (String) headers.get(Constants.HEADER_PROXY_AUTHORIZATION);
  +      if (proxyAuth == null)
  +        proxyAuth = System.getProperty("https.proxyAuth");
  +      else
  +        headers.remove(Constants.HEADER_PROXY_AUTHORIZATION);
  +    }
  +
       // Using reflection to avoid compile time dependencies
       Class SSLUtilsClass =
           Class.forName("org.apache.soap.util.net.SSLUtils");
       Class[] paramTypes = new Class[] {String.class, int.class,
                                         String.class, int.class,
  -                                      Boolean.class};
  +                                      String.class, Boolean.class};
       Method buildSSLSocket = SSLUtilsClass.getMethod("buildSSLSocket", paramTypes);
       Object[] params = new Object[] {host, new Integer(port),
                                       httpProxyHost, new Integer(httpProxyPort),
  -                                    tcpNoDelay};
  +                                    proxyAuth, tcpNoDelay};
   
       try {
         return (Socket) buildSSLSocket.invoke(null, params);
  
  
  
  1.8       +29 -15    xml-soap/java/src/org/apache/soap/util/net/SSLUtils.java
  
  Index: SSLUtils.java
  ===================================================================
  RCS file: /home/cvs/xml-soap/java/src/org/apache/soap/util/net/SSLUtils.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- SSLUtils.java	4 Oct 2002 19:50:19 -0000	1.7
  +++ SSLUtils.java	18 Oct 2002 20:30:54 -0000	1.8
  @@ -90,7 +90,7 @@
   
           return buildSSLSocket(host, port,
                                 tunnelHost, tunnelPort,
  -                              null);
  +                              null, null);
       }
   
       /**
  @@ -109,6 +109,28 @@
                                           Boolean tcpNoDelay)
           throws IOException, UnknownHostException {
   
  +        return buildSSLSocket(host, port,
  +                              tunnelHost, tunnelPort,
  +                              null, null);
  +    }
  +
  +    /**
  +     * Builds an SSL socket, after auto-starting SSL.
  +     *
  +     * @param host The host to which to connect.
  +     * @param port The port to which to connect.
  +     * @param tunnelHost The host to which to tunnel through.
  +     * @param tunnelPort The port to which to tunnel through.
  +     * @param tunnelAuth The authentication string for the tunnel.
  +     * @param tcpNoDelay Whether or not to disable Nagling.
  +     *
  +     * @return The socket.
  +     */
  +    public static Socket buildSSLSocket(String host, int port,
  +                                        String tunnelHost, int tunnelPort,
  +                                        String tunnelAuth, Boolean tcpNoDelay)
  +        throws IOException, UnknownHostException {
  +
           SSLSocket sslSocket =  null;
           SSLSocketFactory factory =
               (SSLSocketFactory)SSLSocketFactory.getDefault();
  @@ -124,7 +146,7 @@
                * Start it off as a regular socket, then layer SSL
                * over the top of it.
                */
  -            Socket tunnel = doTunnelHandshake(tunnelHost, tunnelPort,
  +            Socket tunnel = doTunnelHandshake(tunnelHost, tunnelPort, tunnelAuth,
                                                 host, port, tcpNoDelay);
   
               // Overlay tunnel socket with SSL
  @@ -150,6 +172,7 @@
       }
   
       static private Socket doTunnelHandshake(String tunnelHost, int tunnelPort,
  +                                            String tunnelAuth,
                                               String host, int port,
                                               Boolean tcpNoDelay)
               throws IOException {
  @@ -158,28 +181,19 @@
           if (tunnel != null && tcpNoDelay != null)
               tunnel.setTcpNoDelay(tcpNoDelay.booleanValue());
   
  -        /*
  -         * The proxy may need an authorization string. Check 
  -         * standard https property.
  -         *
  -         * TODO: pass this as a parameter.
  -         */
  -        String proxyAuth = System.getProperty("https.proxyAuth");
  -                   
           String msg;
           OutputStream out = tunnel.getOutputStream();
   
  -        if (proxyAuth == null) {
  -            // Authorization not required
  -
  +        if (tunnelAuth == null) {
  +            // Authentication not required
               msg = "CONNECT " + host + ":" + port + " HTTP/1.0\r\n"
                     + "User-Agent: "
                     + sun.net.www.protocol.http.HttpURLConnection.userAgent
                     + "\r\n\r\n";
           } else {
  -            // need to specify an authorization string in http header
  +            // need to specify an authentication string in http header
               msg = "CONNECT " + host + ":" + port + " HTTP/1.0\r\n"
  -                  + "Proxy-Authorization: " + proxyAuth + "\r\n"
  +                  + "Proxy-Authorization: " + tunnelAuth + "\r\n"
                     + "User-Agent: "
                     + sun.net.www.protocol.http.HttpURLConnection.userAgent
                     + "\r\n\r\n";
  
  
  

Mime
View raw message