cvs commit: xml-soap/java/src/org/apache/soap/util/net SSLUtils.java

[email protected]
Newsgroups gmane.text.xml.soap.devel
Message-ID <[email protected]>
snichol     2003/09/02 08:38:08

  Modified:    java/src/org/apache/soap/util/net SSLUtils.java
  Log:
  Set read timeout before doing handshake, so that handshake cannot hang
  if the calling code specifies a non-zero timeout.
  
  Revision  Changes    Path
  1.13      +22 -18    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.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- SSLUtils.java	1 Apr 2003 14:07:20 -0000	1.12
  +++ SSLUtils.java	2 Sep 2003 15:38:08 -0000	1.13
  @@ -199,9 +199,6 @@
                       sslSocket = (SSLSocket) factory.createSocket(host, port);
                   }
               }
  -
  -            if (sslSocket != null && tcpNoDelay != null)
  -                sslSocket.setTcpNoDelay(tcpNoDelay.booleanValue());
           } else {
               /*                         
                * If a proxy has been set...
  @@ -214,22 +211,27 @@
   
               // Overlay tunnel socket with SSL
               sslSocket = (SSLSocket) factory.createSocket(tunnel, host, port, true);
  -            if (sslSocket != null && tcpNoDelay != null)
  -                sslSocket.setTcpNoDelay(tcpNoDelay.booleanValue());
           }
   
  -        /*
  -         * Handshaking is started manually in this example because
  -         * PrintWriter catches all IOExceptions (including
  -         * SSLExceptions), sets an internal error flag, and then
  -         * returns without rethrowing the exception.
  -         *
  -         * Unfortunately, this means any error messages are lost,
  -         * which caused lots of confusion for others using this
  -         * code.  The only way to tell there was an error is to call
  -         * PrintWriter.checkError().
  -         */
  -        sslSocket.startHandshake();   
  +        if (sslSocket != null) {
  +            if (tcpNoDelay != null)
  +                sslSocket.setTcpNoDelay(tcpNoDelay.booleanValue());
  +            if (timeout > 0)  // Should be redundant but not every JVM likes this
  +                sslSocket.setSoTimeout(timeout);
  +
  +            /*
  +             * Handshaking is started manually in this example because
  +             * PrintWriter catches all IOExceptions (including
  +             * SSLExceptions), sets an internal error flag, and then
  +             * returns without rethrowing the exception.
  +             *
  +             * Unfortunately, this means any error messages are lost,
  +             * which caused lots of confusion for others using this
  +             * code.  The only way to tell there was an error is to call
  +             * PrintWriter.checkError().
  +             */
  +            sslSocket.startHandshake();   
  +        }
   
           return (Socket) sslSocket;  
       }
  @@ -241,8 +243,10 @@
               throws IOException, InvocationTargetException {
   
           Socket tunnel = SocketUtils.createSocket(tunnelHost, tunnelPort, timeout);
  -        if (tunnel != null && tcpNoDelay != null)
  +        if (tcpNoDelay != null)
               tunnel.setTcpNoDelay(tcpNoDelay.booleanValue());
  +        if (timeout > 0)  // Should be redundant but not every JVM likes this
  +            tunnel.setSoTimeout(timeout);
   
           String msg;
           OutputStream out = tunnel.getOutputStream();
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.