diff options
author | Simon Rettberg | 2015-07-20 12:32:39 +0200 |
---|---|---|
committer | Simon Rettberg | 2015-07-20 12:32:39 +0200 |
commit | 06af3543b39316330555db2baaf305711d943973 (patch) | |
tree | 732203d7cb61b5da681ed14362d6a2e728da8862 /src/main/java/org/openslx/filetransfer/Transfer.java | |
parent | Add TransferState to thrift api (diff) | |
download | master-sync-shared-06af3543b39316330555db2baaf305711d943973.tar.gz master-sync-shared-06af3543b39316330555db2baaf305711d943973.tar.xz master-sync-shared-06af3543b39316330555db2baaf305711d943973.zip |
Thrift API changes, add configurable timeout to file transfer classes
Diffstat (limited to 'src/main/java/org/openslx/filetransfer/Transfer.java')
-rw-r--r-- | src/main/java/org/openslx/filetransfer/Transfer.java | 32 |
1 files changed, 25 insertions, 7 deletions
diff --git a/src/main/java/org/openslx/filetransfer/Transfer.java b/src/main/java/org/openslx/filetransfer/Transfer.java index 3e278c8..fc3d1d8 100644 --- a/src/main/java/org/openslx/filetransfer/Transfer.java +++ b/src/main/java/org/openslx/filetransfer/Transfer.java @@ -34,7 +34,7 @@ public abstract class Transfer * @param log Logger to use * @throws IOException */ - protected Transfer( String host, int port, SSLContext context, Logger log ) throws IOException + protected Transfer( String host, int port, int readTimeoutMs, SSLContext context, Logger log ) throws IOException { this.log = log; // create socket. @@ -44,7 +44,7 @@ public abstract class Transfer SSLSocketFactory sslSocketFactory = context.getSocketFactory(); transferSocket = sslSocketFactory.createSocket(); } - transferSocket.setSoTimeout( 10000 ); // set socket timeout. + transferSocket.setSoTimeout( readTimeoutMs ); transferSocket.connect( new InetSocketAddress( host, port ) ); outStream = new DataOutputStream( transferSocket.getOutputStream() ); @@ -196,7 +196,7 @@ public abstract class Transfer * Method for closing connection, if download has finished. * */ - public void close( String error, UploadStatusCallback callback, boolean sendToPeer ) + protected void close( String error, UploadStatusCallback callback, boolean sendToPeer ) { if ( error != null ) { if ( sendToPeer ) @@ -205,14 +205,30 @@ public abstract class Transfer callback.uploadError( error ); log.info( error ); } - safeClose( dataFromServer, outStream, transferSocket ); + synchronized ( transferSocket ) { + safeClose( dataFromServer, outStream, transferSocket ); + } } - public void close( String error ) + protected void close( String error ) { close( error, null, false ); } + public void cancel() + { + synchronized ( transferSocket ) { + if ( isValid() ) { + try { + transferSocket.shutdownInput(); + transferSocket.shutdownOutput(); + } catch ( Exception e ) { + // Silence + } + } + } + } + /** * Returns whether this transfer/connection is considered valid or usable, * which means the socket is still properly connected to the remote peer. @@ -221,8 +237,10 @@ public abstract class Transfer */ public boolean isValid() { - return transferSocket.isConnected() && !transferSocket.isClosed() - && !transferSocket.isInputShutdown() && !transferSocket.isOutputShutdown(); + synchronized ( transferSocket ) { + return transferSocket.isConnected() && !transferSocket.isClosed() + && !transferSocket.isInputShutdown() && !transferSocket.isOutputShutdown(); + } } /** |