Thank you very much, it does exactly what you describe.



"Scott Nichol" <[EMAIL PROTECTED]>

02/25/04 02:25 PM
Please respond to soap-dev

       
        To:        <[EMAIL PROTECTED]>
        cc:        
        Subject:        Re: SOAP timeouts over a proxy



The current code (post-2.3.1) does what you suggest and even gracefully falls back when a pre-1.4 JVM is used.  You can download a nightly build from http://cvs.apache.org/dist/soap/nightly/2003-09-09/, or grab the source from CVS.

Scott Nichol

Do not send e-mail directly to this e-mail address,
because it is filtered to accept only mail from
specific mail lists.
----- Original Message -----
From: <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Tuesday, February 24, 2004 7:56 PM
Subject: SOAP timeouts over a proxy


Greetings,

We're developing a system which uses Apache SOAP over
HTTP / SSL.  We're also finding a situation where the client can
hang indefinitely if it's going through a proxy and the proxy does
not return (we've seen a SOAP call hang for over 10 minutes in
this way - with an exception once the proxy came back to life).
Setting the timeout on the Call object does not help, since that
only applies to the read once the server reached.

Lines 102-118 of SSLUtils.java in Apache SOAP 2.3.1 are as follows:

          /*
           * If a proxy has been set...
           * Set up a socket to do tunneling through the proxy.
           * Start it off as a regular socket, then layer SSL
           * over the top of it.
           */
          if (tunnelHost==null) {
             sslSocket = (SSLSocket)factory.createSocket(host, port);
          } else {
             Socket tunnel = new Socket(tunnelHost, tunnelPort);
             doTunnelHandshake(tunnel, host, port);

             // Overlay tunnel socket with SSL
             sslSocket = (SSLSocket)factory.createSocket(tunnel, host,
port, true);
          }

If the proxy happens to hang during the tunnel handshake, then the
SOAP call will hang indefinitely.  The programmer has no control
on how long to wait as there is no way to currently specify a timeout
period.

What would be nice is if the programmer could specify a timeout period
in which the proxy must respond before throwing an exception.

Something like this:

          /*
           * If a proxy has been set...
           * Set up a socket to do tunneling through the proxy.
           * Start it off as a regular socket, then layer SSL
           * over the top of it.
           */
          if (tunnelHost==null) {
             InetSocketAddress addr = new InetSocketAddress(host, port);
             sslSocket = (SSLSocket)factory.createSocket();
             sslSocket.connect(addr, connectTimeout);
           } else {
             InetSocketAddress tunnelAddr = new
InetSocketAddress(tunnelHost, tunnelPort);
             Socket tunnel = new Socket();
             tunnel.connect(tunnelAddr, connectTimeout);
             tunnel.setSoTimeout(handshakeTimeout);
             doTunnelHandshake(tunnel, host, port);

             // Overlay tunnel socket with SSL
             sslSocket = (SSLSocket)factory.createSocket(tunnel, host,
                                                         port, true);
       }

This specifies a connectTimeout for the connect, and a handshake timeout
for the doTunnelHandshake.

Any thoughts on this?

Many thanks,

Raoul Golan
[EMAIL PROTECTED]


Reply via email to