From a857e5fef649fc2f5fa66f96dec4a541b69f73dd Mon Sep 17 00:00:00 2001 From: xdavidwu Date: Tue, 18 Jun 2019 00:05:23 +0800 Subject: [PATCH] don't reuse SFTPv3Client, it's not costy and this enables concurrency --- src/main/java/org/safsftp/ReadTask.java | 1 + .../org/safsftp/SFTPDocumentsProvider.java | 39 +++++++++---------- 2 files changed, 19 insertions(+), 21 deletions(-) diff --git a/src/main/java/org/safsftp/ReadTask.java b/src/main/java/org/safsftp/ReadTask.java index bc33f92..2769377 100644 --- a/src/main/java/org/safsftp/ReadTask.java +++ b/src/main/java/org/safsftp/ReadTask.java @@ -44,6 +44,7 @@ public class ReadTask extends AsyncTask { catch(Exception e){ Log.e("SFTP","close file "+e.toString()); } + sftp.close(); return null; } } diff --git a/src/main/java/org/safsftp/SFTPDocumentsProvider.java b/src/main/java/org/safsftp/SFTPDocumentsProvider.java index a7d8874..b4f05d4 100644 --- a/src/main/java/org/safsftp/SFTPDocumentsProvider.java +++ b/src/main/java/org/safsftp/SFTPDocumentsProvider.java @@ -31,7 +31,6 @@ import org.safsftp.ReadTask; public class SFTPDocumentsProvider extends DocumentsProvider { private Connection connection; - private SFTPv3Client sftp; private String host=null,port=null; //TODO: multiple server support private ToastThread lthread; @@ -62,21 +61,21 @@ public class SFTPDocumentsProvider extends DocumentsProvider { return "application/octet-stream"; } - private boolean retriveConnection() { + private SFTPv3Client retriveConnection() { try { connection.ping(); - return true; + return new SFTPv3Client(connection); } catch(Exception e){ } + SharedPreferences settings=PreferenceManager + .getDefaultSharedPreferences(getContext()); + if(host==null||port==null){ + host=settings.getString("host",""); + port=settings.getString("port","22"); + } Log.v("SFTP","connect "+host+":"+port); try { - SharedPreferences settings=PreferenceManager - .getDefaultSharedPreferences(getContext()); - if(host==null||port==null){ - host=settings.getString("host",""); - port=settings.getString("port","22"); - } connection=new Connection(host,Integer.parseInt(port)); connection.connect(null,10000,10000); if(!connection.authenticateWithPassword(settings.getString("username",""), @@ -85,22 +84,16 @@ public class SFTPDocumentsProvider extends DocumentsProvider { msg.obj="SFTP auth failed."; lthread.handler.sendMessage(msg); } - sftp=new SFTPv3Client(connection); - sftp.setCharset(null); - Message msg=lthread.handler.obtainMessage(); - msg.obj="SFTP connect succeed."; - lthread.handler.sendMessage(msg); + return new SFTPv3Client(connection); } catch(Exception e){ Log.e("SFTP","connect "+e.toString()); Message msg=lthread.handler.obtainMessage(); msg.obj=e.toString(); lthread.handler.sendMessage(msg); - sftp.close(); connection.close(); - return false; } - return true; + return null; } private void editPolicyIfMainThread(){ @@ -124,7 +117,8 @@ public class SFTPDocumentsProvider extends DocumentsProvider { throw new UnsupportedOperationException("Mode "+mode+" is not supported yet."); } editPolicyIfMainThread(); - if(!retriveConnection()){ + SFTPv3Client sftp; + if((sftp=retriveConnection())==null){ //TODO notify error return null; } @@ -151,7 +145,8 @@ public class SFTPDocumentsProvider extends DocumentsProvider { MatrixCursor result=new MatrixCursor(projection!=null?projection:DEFAULT_DOC_PROJECTION); Log.v("SFTP","qcf "+parentDocumentId+" on "+host+":"+port); editPolicyIfMainThread(); - if(!retriveConnection()){ + SFTPv3Client sftp; + if((sftp=retriveConnection())==null){ //TODO notify error return result; } @@ -180,6 +175,7 @@ public class SFTPDocumentsProvider extends DocumentsProvider { msg.obj=e.toString(); lthread.handler.sendMessage(msg); } + sftp.close(); return result; } @@ -187,7 +183,8 @@ public class SFTPDocumentsProvider extends DocumentsProvider { MatrixCursor result=new MatrixCursor(projection!=null?projection:DEFAULT_DOC_PROJECTION); Log.v("SFTP","qf "+documentId+" on "+host+":"+port); editPolicyIfMainThread(); - if(!retriveConnection()){ + SFTPv3Client sftp; + if((sftp=retriveConnection())==null){ //TODO notify error return result; } @@ -207,13 +204,13 @@ public class SFTPDocumentsProvider extends DocumentsProvider { msg.obj=e.toString(); lthread.handler.sendMessage(msg); } + sftp.close(); return result; } public Cursor queryRoots(String[] projection) { try { connection.ping(); - sftp.close(); connection.close(); } catch(Exception e){ -- 2.43.0