Browse Source

Prevent multiple threads from initing http at once

pull/599/head
Nathaniel Brandes 3 years ago
parent
commit
d3ddf34b88
  1. 17
      app/src/main/java/org/transdroid/daemon/adapters/aria2c/Aria2Adapter.java
  2. 11
      app/src/main/java/org/transdroid/daemon/adapters/bitComet/BitCometAdapter.java
  3. 11
      app/src/main/java/org/transdroid/daemon/adapters/bitflu/BitfluAdapter.java
  4. 12
      app/src/main/java/org/transdroid/daemon/adapters/buffaloNas/BuffaloNasAdapter.java
  5. 11
      app/src/main/java/org/transdroid/daemon/adapters/dLinkRouterBT/DLinkRouterBTAdapter.java
  6. 23
      app/src/main/java/org/transdroid/daemon/adapters/deluge/DelugeAdapter.java
  7. 9
      app/src/main/java/org/transdroid/daemon/adapters/kTorrent/KTorrentAdapter.java
  8. 3
      app/src/main/java/org/transdroid/daemon/adapters/qBittorrent/QBittorrentAdapter.java
  9. 25
      app/src/main/java/org/transdroid/daemon/adapters/rTorrent/RTorrentAdapter.java
  10. 19
      app/src/main/java/org/transdroid/daemon/adapters/synology/SynologyAdapter.java
  11. 11
      app/src/main/java/org/transdroid/daemon/adapters/tTorrent/TTorrentAdapter.java
  12. 19
      app/src/main/java/org/transdroid/daemon/adapters/tfb4rt/Tfb4rtAdapter.java
  13. 11
      app/src/main/java/org/transdroid/daemon/adapters/transmission/TransmissionAdapter.java
  14. 37
      app/src/main/java/org/transdroid/daemon/adapters/uTorrent/UTorrentAdapter.java
  15. 12
      app/src/main/java/org/transdroid/daemon/adapters/vuze/VuzeAdapter.java

17
app/src/main/java/org/transdroid/daemon/adapters/aria2c/Aria2Adapter.java

@ -19,9 +19,7 @@ package org.transdroid.daemon.adapters.aria2c;
import android.net.Uri; import android.net.Uri;
import android.text.TextUtils; import android.text.TextUtils;
import net.iharder.Base64; import net.iharder.Base64;
import org.apache.http.HttpEntity; import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse; import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpPost; import org.apache.http.client.methods.HttpPost;
@ -86,6 +84,14 @@ public class Aria2Adapter implements IDaemonAdapter {
this.settings = settings; this.settings = settings;
} }
private synchronized void initialise() throws DaemonException {
if (httpclient == null) {
httpclient = HttpHelper.createStandardHttpClient(settings, !TextUtils.isEmpty(settings.getUsername()));
httpclient.addRequestInterceptor(HttpHelper.gzipRequestInterceptor);
httpclient.addResponseInterceptor(HttpHelper.gzipResponseInterceptor);
}
}
@Override @Override
public DaemonTaskResult executeTask(Log log, DaemonTask task) { public DaemonTaskResult executeTask(Log log, DaemonTask task) {
@ -282,13 +288,8 @@ public class Aria2Adapter implements IDaemonAdapter {
private synchronized String makeRawRequest(Log log, String data) throws DaemonException { private synchronized String makeRawRequest(Log log, String data) throws DaemonException {
try { try {
// Initialise the HTTP client // Initialise the HTTP client
if (httpclient == null) { initialise();
httpclient = HttpHelper.createStandardHttpClient(settings, !TextUtils.isEmpty(settings.getUsername()));
httpclient.addRequestInterceptor(HttpHelper.gzipRequestInterceptor);
httpclient.addResponseInterceptor(HttpHelper.gzipResponseInterceptor);
}
// Set POST URL and data // Set POST URL and data
String url = String url =

11
app/src/main/java/org/transdroid/daemon/adapters/bitComet/BitCometAdapter.java

@ -19,7 +19,6 @@ package org.transdroid.daemon.adapters.bitComet;
import com.android.internal.http.multipart.MultipartEntity; import com.android.internal.http.multipart.MultipartEntity;
import com.android.internal.http.multipart.Part; import com.android.internal.http.multipart.Part;
import org.apache.http.HttpEntity; import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse; import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus; import org.apache.http.HttpStatus;
@ -253,8 +252,10 @@ public class BitCometAdapter implements IDaemonAdapter {
* *
* @throws DaemonException On conflicting or missing settings * @throws DaemonException On conflicting or missing settings
*/ */
private void initialise() throws DaemonException { private synchronized void initialise() throws DaemonException {
httpclient = HttpHelper.createStandardHttpClient(settings, true); if(httpclient == null) {
httpclient = HttpHelper.createStandardHttpClient(settings, true);
}
} }
/** /**
@ -271,9 +272,7 @@ public class BitCometAdapter implements IDaemonAdapter {
try { try {
// Initialize the HTTP client // Initialize the HTTP client
if (httpclient == null) { initialise();
initialise();
}
// Add the parameters to the query string // Add the parameters to the query string
boolean first = true; boolean first = true;

11
app/src/main/java/org/transdroid/daemon/adapters/bitflu/BitfluAdapter.java

@ -140,9 +140,7 @@ public class BitfluAdapter implements IDaemonAdapter {
try { try {
// Initialise the HTTP client // Initialise the HTTP client
if (httpclient == null) { initialise();
initialise();
}
// TLog.d(LOG_NAME, "Request to: "+ buildWebUIUrl() + addToUrl); // TLog.d(LOG_NAME, "Request to: "+ buildWebUIUrl() + addToUrl);
@ -268,9 +266,10 @@ public class BitfluAdapter implements IDaemonAdapter {
* *
* @throws DaemonException On conflicting or missing settings * @throws DaemonException On conflicting or missing settings
*/ */
private void initialise() throws DaemonException { private synchronized void initialise() throws DaemonException {
if(httpclient == null) {
httpclient = HttpHelper.createStandardHttpClient(settings, true); httpclient = HttpHelper.createStandardHttpClient(settings, true);
}
} }
/** /**

12
app/src/main/java/org/transdroid/daemon/adapters/buffaloNas/BuffaloNasAdapter.java

@ -20,7 +20,6 @@ package org.transdroid.daemon.adapters.buffaloNas;
import com.android.internal.http.multipart.FilePart; import com.android.internal.http.multipart.FilePart;
import com.android.internal.http.multipart.MultipartEntity; import com.android.internal.http.multipart.MultipartEntity;
import com.android.internal.http.multipart.Part; import com.android.internal.http.multipart.Part;
import org.apache.http.HttpEntity; import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse; import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus; import org.apache.http.HttpStatus;
@ -174,9 +173,7 @@ public class BuffaloNasAdapter implements IDaemonAdapter {
try { try {
// Initialise the HTTP client // Initialise the HTTP client
if (httpclient == null) { initialise();
initialise();
}
// Add the parameters to the query string // Add the parameters to the query string
boolean first = true; boolean first = true;
@ -251,9 +248,10 @@ public class BuffaloNasAdapter implements IDaemonAdapter {
* *
* @throws DaemonException On conflicting or missing settings * @throws DaemonException On conflicting or missing settings
*/ */
private void initialise() throws DaemonException { private synchronized void initialise() throws DaemonException {
if(httpclient == null) {
httpclient = HttpHelper.createStandardHttpClient(settings, true); httpclient = HttpHelper.createStandardHttpClient(settings, true);
}
} }

11
app/src/main/java/org/transdroid/daemon/adapters/dLinkRouterBT/DLinkRouterBTAdapter.java

@ -20,7 +20,6 @@ package org.transdroid.daemon.adapters.dLinkRouterBT;
import com.android.internal.http.multipart.FilePart; import com.android.internal.http.multipart.FilePart;
import com.android.internal.http.multipart.MultipartEntity; import com.android.internal.http.multipart.MultipartEntity;
import com.android.internal.http.multipart.Part; import com.android.internal.http.multipart.Part;
import org.apache.http.HttpEntity; import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse; import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpPost; import org.apache.http.client.methods.HttpPost;
@ -234,9 +233,7 @@ public class DLinkRouterBTAdapter implements IDaemonAdapter {
try { try {
// Initialise the HTTP client // Initialise the HTTP client
if (httpclient == null) { initialise();
initialise();
}
// Setup request using POST stream with URL and data // Setup request using POST stream with URL and data
HttpPost httppost = new HttpPost(buildWebUIUrl() + requestUrl); HttpPost httppost = new HttpPost(buildWebUIUrl() + requestUrl);
@ -304,8 +301,10 @@ public class DLinkRouterBTAdapter implements IDaemonAdapter {
* *
* @throws DaemonException On conflicting or missing settings * @throws DaemonException On conflicting or missing settings
*/ */
private void initialise() throws DaemonException { private synchronized void initialise() throws DaemonException {
httpclient = HttpHelper.createStandardHttpClient(settings, true); if(httpclient == null) {
httpclient = HttpHelper.createStandardHttpClient(settings, true);
}
} }
/** /**

23
app/src/main/java/org/transdroid/daemon/adapters/deluge/DelugeAdapter.java

@ -20,7 +20,6 @@ package org.transdroid.daemon.adapters.deluge;
import com.android.internal.http.multipart.FilePart; import com.android.internal.http.multipart.FilePart;
import com.android.internal.http.multipart.MultipartEntity; import com.android.internal.http.multipart.MultipartEntity;
import com.android.internal.http.multipart.Part; import com.android.internal.http.multipart.Part;
import org.apache.http.HttpEntity; import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse; import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpGet;
@ -163,9 +162,7 @@ public class DelugeAdapter implements IDaemonAdapter {
log.d(LOG_NAME, "Uploading a file to the Deluge daemon: " + url); log.d(LOG_NAME, "Uploading a file to the Deluge daemon: " + url);
// Initialise the HTTP client // Initialise the HTTP client
if (httpclient == null) { initialise();
initialise();
}
// Setup client using POST // Setup client using POST
HttpPost httppost = new HttpPost(url); HttpPost httppost = new HttpPost(url);
@ -437,9 +434,7 @@ public class DelugeAdapter implements IDaemonAdapter {
// We still need to retrieve the version number from the server // We still need to retrieve the version number from the server
// Do this by getting the web interface main html page and trying to parse the version number // Do this by getting the web interface main html page and trying to parse the version number
// Format is something like '<title>Deluge: Web UI 1.3.6</title>' // Format is something like '<title>Deluge: Web UI 1.3.6</title>'
if (httpclient == null) { initialise();
initialise();
}
try { try {
HttpResponse response = httpclient.execute(new HttpGet(buildWebUIUrl() + "/")); HttpResponse response = httpclient.execute(new HttpGet(buildWebUIUrl() + "/"));
String main = HttpHelper.convertStreamToString(response.getEntity().getContent()); String main = HttpHelper.convertStreamToString(response.getEntity().getContent());
@ -478,9 +473,7 @@ public class DelugeAdapter implements IDaemonAdapter {
try { try {
// Initialise the HTTP client // Initialise the HTTP client
if (httpclient == null) { initialise();
initialise();
}
// Login first? // Login first?
if (sessionCookie == null) { if (sessionCookie == null) {
@ -582,11 +575,11 @@ public class DelugeAdapter implements IDaemonAdapter {
* @throws DaemonException On missing settings * @throws DaemonException On missing settings
*/ */
private void initialise() throws DaemonException { private void initialise() throws DaemonException {
if(httpclient == null) {
httpclient = HttpHelper.createStandardHttpClient(settings, settings.getUsername() != null && !settings.getUsername().equals("")); httpclient = HttpHelper.createStandardHttpClient(settings, settings.getUsername() != null && !settings.getUsername().equals(""));
httpclient.addRequestInterceptor(HttpHelper.gzipRequestInterceptor); httpclient.addRequestInterceptor(HttpHelper.gzipRequestInterceptor);
httpclient.addResponseInterceptor(HttpHelper.gzipResponseInterceptor); httpclient.addResponseInterceptor(HttpHelper.gzipResponseInterceptor);
}
} }
/** /**

9
app/src/main/java/org/transdroid/daemon/adapters/kTorrent/KTorrentAdapter.java

@ -20,7 +20,6 @@ package org.transdroid.daemon.adapters.kTorrent;
import com.android.internal.http.multipart.FilePart; import com.android.internal.http.multipart.FilePart;
import com.android.internal.http.multipart.MultipartEntity; import com.android.internal.http.multipart.MultipartEntity;
import com.android.internal.http.multipart.Part; import com.android.internal.http.multipart.Part;
import org.apache.http.HttpResponse; import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair; import org.apache.http.NameValuePair;
import org.apache.http.ProtocolException; import org.apache.http.ProtocolException;
@ -464,12 +463,10 @@ public class KTorrentAdapter implements IDaemonAdapter {
* *
* @throws DaemonException Thrown on settings error * @throws DaemonException Thrown on settings error
*/ */
private void initialise() throws DaemonException { private synchronized void initialise() throws DaemonException {
if (httpclient == null) {
if (httpclient != null) { httpclient = HttpHelper.createStandardHttpClient(settings, false);
httpclient = null;
} }
httpclient = HttpHelper.createStandardHttpClient(settings, false);
} }
/** /**

3
app/src/main/java/org/transdroid/daemon/adapters/qBittorrent/QBittorrentAdapter.java

@ -20,7 +20,6 @@ package org.transdroid.daemon.adapters.qBittorrent;
import com.android.internal.http.multipart.FilePart; import com.android.internal.http.multipart.FilePart;
import com.android.internal.http.multipart.MultipartEntity; import com.android.internal.http.multipart.MultipartEntity;
import com.android.internal.http.multipart.Part; import com.android.internal.http.multipart.Part;
import org.apache.http.HttpEntity; import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse; import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair; import org.apache.http.NameValuePair;
@ -587,7 +586,7 @@ public class QBittorrentAdapter implements IDaemonAdapter {
* *
* @throws DaemonException On conflicting or missing settings * @throws DaemonException On conflicting or missing settings
*/ */
private void initialise() throws DaemonException { private synchronized void initialise() throws DaemonException {
if (httpclient == null) { if (httpclient == null) {
httpclient = HttpHelper.createStandardHttpClient(settings, true); httpclient = HttpHelper.createStandardHttpClient(settings, true);
} }

25
app/src/main/java/org/transdroid/daemon/adapters/rTorrent/RTorrentAdapter.java

@ -18,7 +18,9 @@
package org.transdroid.daemon.adapters.rTorrent; package org.transdroid.daemon.adapters.rTorrent;
import android.text.TextUtils; import android.text.TextUtils;
import de.timroes.axmlrpc.XMLRPCClient;
import de.timroes.axmlrpc.XMLRPCClient.UnauthorizdException;
import de.timroes.axmlrpc.XMLRPCException;
import org.transdroid.core.gui.log.Log; import org.transdroid.core.gui.log.Log;
import org.transdroid.daemon.Daemon; import org.transdroid.daemon.Daemon;
import org.transdroid.daemon.DaemonException; import org.transdroid.daemon.DaemonException;
@ -66,10 +68,6 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Map.Entry; import java.util.Map.Entry;
import de.timroes.axmlrpc.XMLRPCClient;
import de.timroes.axmlrpc.XMLRPCClient.UnauthorizdException;
import de.timroes.axmlrpc.XMLRPCException;
/** /**
* An adapter that allows for easy access to rTorrent torrent data. Communication is handled via the XML-RPC protocol as * An adapter that allows for easy access to rTorrent torrent data. Communication is handled via the XML-RPC protocol as
* implemented by the aXMLRPC library. * implemented by the aXMLRPC library.
@ -328,9 +326,7 @@ public class RTorrentAdapter implements IDaemonAdapter {
throws DaemonException, MalformedURLException { throws DaemonException, MalformedURLException {
// Initialise the HTTP client // Initialise the HTTP client
if (rpcclient == null) { initialise();
initialise();
}
StringBuilder paramsBuilder = new StringBuilder(); StringBuilder paramsBuilder = new StringBuilder();
for (Object arg : arguments) { for (Object arg : arguments) {
@ -365,14 +361,13 @@ public class RTorrentAdapter implements IDaemonAdapter {
* Instantiates a XML-RPC client with proper credentials. * Instantiates a XML-RPC client with proper credentials.
* *
* @throws DaemonException On conflicting settings (i.e. user authentication but no password or username provided) * @throws DaemonException On conflicting settings (i.e. user authentication but no password or username provided)
* @throws MalformedURLException Thrown when the URL could not be properly constructed
*/ */
private void initialise() throws DaemonException, MalformedURLException { private synchronized void initialise() throws DaemonException {
if(rpcclient == null) {
int flags = XMLRPCClient.FLAGS_8BYTE_INT; int flags = XMLRPCClient.FLAGS_8BYTE_INT;
this.rpcclient = new XMLRPCClient(HttpHelper.createStandardHttpClient(settings, true), this.rpcclient = new XMLRPCClient(HttpHelper.createStandardHttpClient(settings, true),
settings.getAddress(), buildWebUIUrl(), flags); settings.getAddress(), buildWebUIUrl(), flags);
}
} }
/** /**

19
app/src/main/java/org/transdroid/daemon/adapters/synology/SynologyAdapter.java

@ -20,7 +20,6 @@ package org.transdroid.daemon.adapters.synology;
import com.android.internal.http.multipart.FilePart; import com.android.internal.http.multipart.FilePart;
import com.android.internal.http.multipart.MultipartEntity; import com.android.internal.http.multipart.MultipartEntity;
import com.android.internal.http.multipart.Part; import com.android.internal.http.multipart.Part;
import org.apache.http.HttpEntity; import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse; import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpGet;
@ -84,10 +83,17 @@ public class SynologyAdapter implements IDaemonAdapter {
this.settings = settings; this.settings = settings;
} }
private synchronized void initialise() throws DaemonException {
if (httpClient == null) {
httpClient = HttpHelper.createStandardHttpClient(settings, true);
}
}
@Override @Override
public DaemonTaskResult executeTask(Log log, DaemonTask task) { public DaemonTaskResult executeTask(Log log, DaemonTask task) {
String tid; String tid;
try { try {
initialise();
switch (task.getMethod()) { switch (task.getMethod()) {
case Retrieve: case Retrieve:
return new RetrieveTaskSuccessResult((RetrieveTask) task, tasksList(log), null); return new RetrieveTaskSuccessResult((RetrieveTask) task, tasksList(log), null);
@ -425,13 +431,6 @@ public class SynologyAdapter implements IDaemonAdapter {
return new SynoRequest(path, api, version).post(sid, params); return new SynoRequest(path, api, version).post(sid, params);
} }
private DefaultHttpClient getHttpClient() throws DaemonException {
if (httpClient == null) {
httpClient = HttpHelper.createStandardHttpClient(settings, true);
}
return httpClient;
}
private static class SynoResponse { private static class SynoResponse {
private final HttpResponse response; private final HttpResponse response;
@ -502,7 +501,7 @@ public class SynologyAdapter implements IDaemonAdapter {
public SynoResponse get(String params) throws DaemonException { public SynoResponse get(String params) throws DaemonException {
try { try {
return new SynoResponse(getHttpClient().execute(new HttpGet(buildURL(params)))); return new SynoResponse(httpClient.execute(new HttpGet(buildURL(params))));
} catch (IOException e) { } catch (IOException e) {
throw new DaemonException(ExceptionType.ConnectionError, e.toString()); throw new DaemonException(ExceptionType.ConnectionError, e.toString());
} }
@ -523,7 +522,7 @@ public class SynologyAdapter implements IDaemonAdapter {
System.arraycopy(params, 0, allParams, baseParams.length, params.length); System.arraycopy(params, 0, allParams, baseParams.length, params.length);
request.setEntity(new MultipartEntity(allParams)); request.setEntity(new MultipartEntity(allParams));
return new SynoResponse(getHttpClient().execute(request)); return new SynoResponse(httpClient.execute(request));
} catch (IOException e) { } catch (IOException e) {
throw new DaemonException(ExceptionType.ConnectionError, e.toString()); throw new DaemonException(ExceptionType.ConnectionError, e.toString());
} }

11
app/src/main/java/org/transdroid/daemon/adapters/tTorrent/TTorrentAdapter.java

@ -20,7 +20,6 @@ package org.transdroid.daemon.adapters.tTorrent;
import com.android.internal.http.multipart.FilePart; import com.android.internal.http.multipart.FilePart;
import com.android.internal.http.multipart.MultipartEntity; import com.android.internal.http.multipart.MultipartEntity;
import com.android.internal.http.multipart.Part; import com.android.internal.http.multipart.Part;
import org.apache.http.HttpEntity; import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse; import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair; import org.apache.http.NameValuePair;
@ -233,9 +232,7 @@ public class TTorrentAdapter implements IDaemonAdapter {
try { try {
// Initialise the HTTP client // Initialise the HTTP client
if (httpclient == null) { initialise();
initialise();
}
// Execute // Execute
HttpResponse response = httpclient.execute(httppost); HttpResponse response = httpclient.execute(httppost);
@ -267,8 +264,10 @@ public class TTorrentAdapter implements IDaemonAdapter {
* *
* @throws DaemonException On conflicting or missing settings * @throws DaemonException On conflicting or missing settings
*/ */
private void initialise() throws DaemonException { private synchronized void initialise() throws DaemonException {
httpclient = HttpHelper.createStandardHttpClient(settings, true); if(httpclient == null) {
httpclient = HttpHelper.createStandardHttpClient(settings, true);
}
} }
/** /**

19
app/src/main/java/org/transdroid/daemon/adapters/tfb4rt/Tfb4rtAdapter.java

@ -20,7 +20,6 @@ package org.transdroid.daemon.adapters.tfb4rt;
import com.android.internal.http.multipart.FilePart; import com.android.internal.http.multipart.FilePart;
import com.android.internal.http.multipart.MultipartEntity; import com.android.internal.http.multipart.MultipartEntity;
import com.android.internal.http.multipart.Part; import com.android.internal.http.multipart.Part;
import org.apache.http.HttpResponse; import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost; import org.apache.http.client.methods.HttpPost;
@ -176,9 +175,7 @@ public class Tfb4rtAdapter implements IDaemonAdapter {
try { try {
// Initialise the HTTP client // Initialise the HTTP client
if (httpclient == null) { initialise();
initialise();
}
// Make request // Make request
HttpGet httpget = new HttpGet(buildWebUIUrl(RPC_URL_STATS)); HttpGet httpget = new HttpGet(buildWebUIUrl(RPC_URL_STATS));
@ -205,9 +202,7 @@ public class Tfb4rtAdapter implements IDaemonAdapter {
try { try {
// Initialise the HTTP client // Initialise the HTTP client
if (httpclient == null) { initialise();
initialise();
}
// Make request // Make request
HttpGet httpget = new HttpGet(buildWebUIUrl(RPC_URL_DISPATCH + action + RPC_URL_DISPATCH2 + RPC_URL_AID HttpGet httpget = new HttpGet(buildWebUIUrl(RPC_URL_DISPATCH + action + RPC_URL_DISPATCH2 + RPC_URL_AID
@ -239,9 +234,7 @@ public class Tfb4rtAdapter implements IDaemonAdapter {
try { try {
// Initialise the HTTP client // Initialise the HTTP client
if (httpclient == null) { initialise();
initialise();
}
// Make request // Make request
HttpPost httppost = new HttpPost(buildWebUIUrl(RPC_URL_DISPATCH + action + RPC_URL_DISPATCH2 + RPC_URL_AID)); HttpPost httppost = new HttpPost(buildWebUIUrl(RPC_URL_DISPATCH + action + RPC_URL_DISPATCH2 + RPC_URL_AID));
@ -276,8 +269,10 @@ public class Tfb4rtAdapter implements IDaemonAdapter {
* *
* @throws DaemonException On conflicting or missing settings * @throws DaemonException On conflicting or missing settings
*/ */
private void initialise() throws DaemonException { private synchronized void initialise() throws DaemonException {
httpclient = HttpHelper.createStandardHttpClient(settings, true); if(httpclient == null) {
httpclient = HttpHelper.createStandardHttpClient(settings, true);
}
} }
/** /**

11
app/src/main/java/org/transdroid/daemon/adapters/transmission/TransmissionAdapter.java

@ -19,7 +19,6 @@ package org.transdroid.daemon.adapters.transmission;
import net.iharder.Base64; import net.iharder.Base64;
import net.iharder.Base64.InputStream; import net.iharder.Base64.InputStream;
import org.apache.http.HttpEntity; import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse; import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpPost; import org.apache.http.client.methods.HttpPost;
@ -403,9 +402,7 @@ public class TransmissionAdapter implements IDaemonAdapter {
try { try {
// Initialise the HTTP client // Initialise the HTTP client
if (httpclient == null) { initialise();
initialise();
}
final String sessionHeader = "X-Transmission-Session-Id"; final String sessionHeader = "X-Transmission-Session-Id";
// Setup request using POST stream with URL and data // Setup request using POST stream with URL and data
@ -477,8 +474,10 @@ public class TransmissionAdapter implements IDaemonAdapter {
* *
* @throws DaemonException On conflicting or missing settings * @throws DaemonException On conflicting or missing settings
*/ */
private void initialise() throws DaemonException { private synchronized void initialise() throws DaemonException {
httpclient = HttpHelper.createStandardHttpClient(settings, true); if(httpclient == null) {
httpclient = HttpHelper.createStandardHttpClient(settings, true);
}
} }
/** /**

37
app/src/main/java/org/transdroid/daemon/adapters/uTorrent/UTorrentAdapter.java

@ -20,12 +20,9 @@ package org.transdroid.daemon.adapters.uTorrent;
import com.android.internal.http.multipart.FilePart; import com.android.internal.http.multipart.FilePart;
import com.android.internal.http.multipart.MultipartEntity; import com.android.internal.http.multipart.MultipartEntity;
import com.android.internal.http.multipart.Part; import com.android.internal.http.multipart.Part;
import org.apache.http.HttpResponse; import org.apache.http.HttpResponse;
import org.apache.http.client.CookieStore;
import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost; import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.BasicCookieStore;
import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONArray; import org.json.JSONArray;
import org.json.JSONException; import org.json.JSONException;
@ -117,12 +114,10 @@ public class UTorrentAdapter implements IDaemonAdapter, RemoteRssSupplier {
private static final int RPC_FILESIZE_IDX = 1; private static final int RPC_FILESIZE_IDX = 1;
private static final int RPC_FILEDOWNLOADED_IDX = 2; private static final int RPC_FILEDOWNLOADED_IDX = 2;
private static final int RPC_FILEPRIORITY_IDX = 3; private static final int RPC_FILEPRIORITY_IDX = 3;
private static String authtoken; private String authtoken;
private static ArrayList<RemoteRssChannel> remoteRssChannels = new ArrayList<>(); private static ArrayList<RemoteRssChannel> remoteRssChannels = new ArrayList<>();
private DaemonSettings settings; private DaemonSettings settings;
private DefaultHttpClient httpclient; private DefaultHttpClient httpclient;
private static CookieStore cookieStore;
/** /**
* Initialises an adapter that provides operations to the uTorrent web daemon * Initialises an adapter that provides operations to the uTorrent web daemon
@ -368,11 +363,8 @@ public class UTorrentAdapter implements IDaemonAdapter, RemoteRssSupplier {
try { try {
// Initialise the HTTP client // Initialise the HTTP client
if (httpclient == null) { initialise();
initialise(); ensureToken(retried > 0);
}
ensureToken();
// Make request // Make request
HttpGet httpget = new HttpGet(buildWebUIUrl() + "?token=" + authtoken + addToUrl); HttpGet httpget = new HttpGet(buildWebUIUrl() + "?token=" + authtoken + addToUrl);
@ -383,7 +375,6 @@ public class UTorrentAdapter implements IDaemonAdapter, RemoteRssSupplier {
String result = HttpHelper.convertStreamToString(instream); String result = HttpHelper.convertStreamToString(instream);
if ((result.equals("") || result.trim().equals("invalid request"))) { if ((result.equals("") || result.trim().equals("invalid request"))) {
// Auth token was invalidated; retry at max 3 times // Auth token was invalidated; retry at max 3 times
authtoken = null; // So that ensureToken() will request a new token on the next try
if (retried < 2) { if (retried < 2) {
return makeUtorrentRequest(log, addToUrl, ++retried); return makeUtorrentRequest(log, addToUrl, ++retried);
} }
@ -407,10 +398,10 @@ public class UTorrentAdapter implements IDaemonAdapter, RemoteRssSupplier {
} }
private synchronized void ensureToken() throws IOException, DaemonException { private synchronized void ensureToken(boolean forceReload) throws IOException, DaemonException {
// Make sure we have a valid token // Make sure we have a valid token or we're regenerating it
if (authtoken == null) { if (authtoken == null || forceReload) {
// Make a request to /gui/token.html // Make a request to /gui/token.html
// See https://github.com/bittorrent/webui/wiki/TokenSystem // See https://github.com/bittorrent/webui/wiki/TokenSystem
@ -437,11 +428,8 @@ public class UTorrentAdapter implements IDaemonAdapter, RemoteRssSupplier {
public JSONObject uploadTorrentFile(String file) throws DaemonException, IOException, JSONException { public JSONObject uploadTorrentFile(String file) throws DaemonException, IOException, JSONException {
// Initialise the HTTP client // Initialise the HTTP client
if (httpclient == null) { initialise();
initialise(); ensureToken(false);
}
ensureToken();
// Build and make request // Build and make request
HttpPost httppost = new HttpPost(buildWebUIUrl() + "?token=" + authtoken + "&action=add-file"); HttpPost httppost = new HttpPost(buildWebUIUrl() + "?token=" + authtoken + "&action=add-file");
@ -464,13 +452,10 @@ public class UTorrentAdapter implements IDaemonAdapter, RemoteRssSupplier {
* *
* @throws DaemonException On conflicting or missing settings * @throws DaemonException On conflicting or missing settings
*/ */
private void initialise() throws DaemonException { private synchronized void initialise() throws DaemonException {
if (this.cookieStore == null) { if(httpclient == null) {
this.cookieStore = new BasicCookieStore(); httpclient = HttpHelper.createStandardHttpClient(settings, true);
} }
this.httpclient = HttpHelper.createStandardHttpClient(settings, true);
this.httpclient.setCookieStore(this.cookieStore);
} }
/** /**

12
app/src/main/java/org/transdroid/daemon/adapters/vuze/VuzeAdapter.java

@ -226,9 +226,7 @@ public class VuzeAdapter implements IDaemonAdapter {
// TODO: It would be nicer to now split each of these steps into separate makeVuzeCalls when there are multiple logical steps such as stopping a torrent before removing it // TODO: It would be nicer to now split each of these steps into separate makeVuzeCalls when there are multiple logical steps such as stopping a torrent before removing it
// Initialise the HTTP client // Initialise the HTTP client
if (rpcclient == null) { initialise();
initialise();
}
if (settings.getAddress() == null || settings.getAddress().equals("")) { if (settings.getAddress() == null || settings.getAddress().equals("")) {
throw new DaemonException(DaemonException.ExceptionType.AuthenticationFailure, "No host name specified."); throw new DaemonException(DaemonException.ExceptionType.AuthenticationFailure, "No host name specified.");
} }
@ -329,10 +327,10 @@ public class VuzeAdapter implements IDaemonAdapter {
* *
* @throws DaemonException On conflicting settings (i.e. user authentication but no password or username provided) * @throws DaemonException On conflicting settings (i.e. user authentication but no password or username provided)
*/ */
private void initialise() throws DaemonException { private synchronized void initialise() throws DaemonException {
if(rpcclient == null) {
this.rpcclient = new VuzeXmlOverHttpClient(settings, buildWebUIUrl()); rpcclient = new VuzeXmlOverHttpClient(settings, buildWebUIUrl());
}
} }
/** /**

Loading…
Cancel
Save