use socks instead of http proxy for http upload

Daniel Gultsch created

http proxy doesn’t seem to work with onion v3

Change summary

src/main/java/eu/siacs/conversations/http/HttpConnectionManager.java  | 2 
src/main/java/eu/siacs/conversations/http/HttpDownloadConnection.java | 4 
src/main/java/eu/siacs/conversations/http/HttpUploadConnection.java   | 5 
3 files changed, 8 insertions(+), 3 deletions(-)

Detailed changes

src/main/java/eu/siacs/conversations/http/HttpConnectionManager.java 🔗

@@ -36,7 +36,7 @@ public class HttpConnectionManager extends AbstractConnectionManager {
     }
 
     public static Proxy getProxy() throws IOException {
-        return new Proxy(Proxy.Type.HTTP, new InetSocketAddress(InetAddress.getByAddress(new byte[]{127, 0, 0, 1}), 8118));
+        return new Proxy(Proxy.Type.SOCKS, new InetSocketAddress(InetAddress.getByAddress(new byte[]{127, 0, 0, 1}), 9050));
     }
 
     public void createNewDownloadConnection(Message message) {

src/main/java/eu/siacs/conversations/http/HttpDownloadConnection.java 🔗

@@ -276,7 +276,9 @@ public class HttpDownloadConnection implements Transferable {
 				Log.d(Config.LOGTAG, "retrieve file size. interactive:" + String.valueOf(interactive));
 				changeStatus(STATUS_CHECKING);
 				HttpURLConnection connection;
-				if (mUseTor || message.getConversation().getAccount().isOnion()) {
+				final String hostname = mUrl.getHost();
+				final boolean onion = hostname != null && hostname.endsWith(".onion");
+				if (mUseTor || message.getConversation().getAccount().isOnion() || onion) {
 					connection = (HttpURLConnection) mUrl.openConnection(HttpConnectionManager.getProxy());
 				} else {
 					connection = (HttpURLConnection) mUrl.openConnection();

src/main/java/eu/siacs/conversations/http/HttpUploadConnection.java 🔗

@@ -155,11 +155,14 @@ public class HttpUploadConnection implements Transferable {
 		PowerManager.WakeLock wakeLock = mHttpConnectionManager.createWakeLock("http_upload_"+message.getUuid());
 		try {
 			fileInputStream = new FileInputStream(file);
+			final String slotHostname = slot.getPutUrl().getHost();
+			final boolean onionSlot = slotHostname != null && slotHostname.endsWith(".onion");
 			final int expectedFileSize = (int) file.getExpectedSize();
 			final int readTimeout = (expectedFileSize / 2048) + Config.SOCKET_TIMEOUT; //assuming a minimum transfer speed of 16kbit/s
 			wakeLock.acquire(readTimeout);
 			Log.d(Config.LOGTAG, "uploading to " + slot.getPutUrl().toString()+ " w/ read timeout of "+readTimeout+"s");
-			if (mUseTor || message.getConversation().getAccount().isOnion()) {
+
+			if (mUseTor || message.getConversation().getAccount().isOnion() || onionSlot) {
 				connection = (HttpURLConnection) slot.getPutUrl().openConnection(HttpConnectionManager.getProxy());
 			} else {
 				connection = (HttpURLConnection) slot.getPutUrl().openConnection();