diff --git a/core/.classpath b/core/.classpath
index 340040a3..1931bb1c 100644
--- a/core/.classpath
+++ b/core/.classpath
@@ -10,6 +10,5 @@
-
diff --git a/core/libs/transdroid-connect.jar b/core/libs/transdroid-connect.jar
new file mode 100644
index 00000000..42191a8f
Binary files /dev/null and b/core/libs/transdroid-connect.jar differ
diff --git a/lib/src/org/transdroid/daemon/Transmission/TransmissionAdapter.java b/lib/src/org/transdroid/daemon/Transmission/TransmissionAdapter.java
index f8494013..706de516 100644
--- a/lib/src/org/transdroid/daemon/Transmission/TransmissionAdapter.java
+++ b/lib/src/org/transdroid/daemon/Transmission/TransmissionAdapter.java
@@ -114,7 +114,7 @@ public class TransmissionAdapter implements IDaemonAdapter {
private DaemonSettings settings;
private DefaultHttpClient httpclient;
- private String sessionToken;
+ private static String sessionToken;
private long rpcVersion = -1;
diff --git a/lib/src/org/transdroid/daemon/Utorrent/UtorrentAdapter.java b/lib/src/org/transdroid/daemon/Utorrent/UtorrentAdapter.java
index 24268c45..32bb6e54 100644
--- a/lib/src/org/transdroid/daemon/Utorrent/UtorrentAdapter.java
+++ b/lib/src/org/transdroid/daemon/Utorrent/UtorrentAdapter.java
@@ -87,7 +87,7 @@ public class UtorrentAdapter implements IDaemonAdapter {
private DaemonSettings settings;
private DefaultHttpClient httpclient;
- private String authtoken;
+ private static String authtoken;
/**
* Initialises an adapter that provides operations to the uTorrent web daemon
@@ -286,6 +286,10 @@ public class UtorrentAdapter implements IDaemonAdapter {
}
private JSONObject makeUtorrentRequest(String addToUrl) throws DaemonException {
+ return makeUtorrentRequest(addToUrl, 0);
+ }
+
+ private JSONObject makeUtorrentRequest(String addToUrl, int retried) throws DaemonException {
try {
@@ -304,7 +308,11 @@ public class UtorrentAdapter implements IDaemonAdapter {
InputStream instream = response.getEntity().getContent();
String result = HttpHelper.convertStreamToString(instream);
if ((result.equals("") || result.trim().equals("invalid request"))) {
- authtoken = null;
+ // 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) {
+ return makeUtorrentRequest(addToUrl, retried++);
+ }
throw new DaemonException(ExceptionType.AuthenticationFailure, "Response was '" + result.replace("\n", "") + "' instead of a proper JSON object (and we used auth token '" + authtoken + "')");
}
JSONObject json = new JSONObject(result);
@@ -329,7 +337,7 @@ public class UtorrentAdapter implements IDaemonAdapter {
if (authtoken == null) {
// Make a request to /gui/token.html
- // See http://trac.utorrent.com/trac/wiki/TokenSystem
+ // See https://github.com/bittorrent/webui/wiki/TokenSystem
HttpGet httpget = new HttpGet(buildWebUIUrl() + "token.html");
// Parse the response HTML