diff options
Diffstat (limited to 'src/main/java/org/openslx/filetransfer/Transfer.java')
-rw-r--r-- | src/main/java/org/openslx/filetransfer/Transfer.java | 44 |
1 files changed, 36 insertions, 8 deletions
diff --git a/src/main/java/org/openslx/filetransfer/Transfer.java b/src/main/java/org/openslx/filetransfer/Transfer.java index 589d142..aebd3ce 100644 --- a/src/main/java/org/openslx/filetransfer/Transfer.java +++ b/src/main/java/org/openslx/filetransfer/Transfer.java @@ -9,13 +9,14 @@ import java.net.Socket; import java.net.SocketTimeoutException; import java.util.HashMap; import java.util.Map; +import java.util.Map.Entry; import javax.net.ssl.SSLContext; import javax.net.ssl.SSLSocketFactory; import net.jpountz.lz4.LZ4Factory; -import org.apache.log4j.Logger; +import org.apache.logging.log4j.Logger; import org.openslx.util.Util; public abstract class Transfer @@ -23,7 +24,7 @@ public abstract class Transfer protected final Socket transferSocket; protected final DataOutputStream outStream; protected final DataInputStream dataFromServer; - protected String ERROR = null; + private String remoteError; private boolean shouldGetToken; protected boolean useCompression = true; @@ -51,7 +52,7 @@ public abstract class Transfer transferSocket = sslSocketFactory.createSocket(); } transferSocket.setSoTimeout( readTimeoutMs ); - transferSocket.connect( new InetSocketAddress( host, port ) ); + transferSocket.connect( new InetSocketAddress( host, port ), 4000 ); outStream = new DataOutputStream( transferSocket.getOutputStream() ); dataFromServer = new DataInputStream( transferSocket.getInputStream() ); @@ -169,6 +170,7 @@ public abstract class Transfer */ protected MetaData readMetaData() { + Map<String, String> entries = new HashMap<>(); try { while ( true ) { @@ -183,7 +185,7 @@ public abstract class Transfer continue; } if ( splitted[0].equals( "ERROR" ) ) - ERROR = splitted[1]; + remoteError = splitted[1]; if ( entries.containsKey( splitted[0] ) ) { log.warn( "Received meta data key " + splitted[0] + " when already received, ignoring!" ); } else { @@ -192,10 +194,10 @@ public abstract class Transfer } } catch ( SocketTimeoutException ste ) { sendErrorCode( "timeout" ); - this.close( "Socket Timeout occured in readMetaData. " + ERROR ); + this.close( "Socket Timeout occured in readMetaData." ); return null; } catch ( Exception e ) { - this.close( "Exception occured in readMetaData: " + e.toString() + " " + ERROR ); + this.close( "Exception occured in readMetaData: " + e.toString() ); return null; } return new MetaData( entries ); @@ -219,11 +221,17 @@ public abstract class Transfer */ protected void close( String error, UploadStatusCallback callback, boolean sendToPeer ) { + close( error, callback, sendToPeer, null ); + } + + protected void close( String error, UploadStatusCallback callback, boolean sendToPeer, Exception e ) + { if ( error != null ) { if ( sendToPeer ) sendErrorCode( error ); if ( callback != null ) callback.uploadError( error ); + log.info( "Closing with error '" + error + "'", e ); } synchronized ( transferSocket ) { safeClose( dataFromServer, outStream, transferSocket ); @@ -232,7 +240,12 @@ public abstract class Transfer protected void close( String error ) { - close( error, null, false ); + close( error, null ); + } + + protected void close( String error, Exception e ) + { + close( error, null, false, e ); } public void cancel() @@ -272,7 +285,7 @@ public abstract class Transfer */ public String getRemoteError() { - return ERROR; + return remoteError; } /** @@ -406,6 +419,21 @@ public abstract class Transfer return meta.containsKey( "COMPRESS" ); } + @Override + public String toString() + { + StringBuilder sb = new StringBuilder(); + for ( Entry<String, String> it : meta.entrySet() ) { + if ( sb.length() != 0 ) { + sb.append( ' ' ); + } + sb.append( it.getKey() ); + sb.append( '=' ); + sb.append( it.getValue() ); + } + return sb.toString(); + } + } } |