diff --git a/patches/jnotify-0.94.patch b/patches/jnotify-0.94.patch deleted file mode 100644 index 83feb7d5d4375fbe4ee3d316093e101c67b1006a..0000000000000000000000000000000000000000 --- a/patches/jnotify-0.94.patch +++ /dev/null @@ -1,113 +0,0 @@ -briar-desktop/libs/jnotify-0.94.jar is built via: -$ wget "http://downloads.sourceforge.net/project/jnotify/jnotify/jnotify-0.94/jnotify-lib-0.94.zip?r=&ts=$(date +%s)" -$ unzip -d jnotify-lib-0.94 jnotify-lib-0.94.zip && cd jnotify-lib-0.94 -$ unzip -d src jnotify-0.94-src.zip -$ wget -O build.xml "http://jnotify.cvs.sourceforge.net/viewvc/jnotify/jnotify/build.xml?revision=1.7&pathrev=HEAD" -$ wget -O build.properties "http://jnotify.cvs.sourceforge.net/viewvc/jnotify/jnotify/build.properties?revision=1.13" -$ patch -lp1 < /path/to/this/patch -$ ant build_java # if this fails with invalid flag: -g:{lines,vars,source}, try removing the debug attributes from <javac> - -diff -ru jnotify-0.94/net/contentobjects/jnotify/linux/JNotify_linux.java jnotify-0.94-briar/net/contentobjects/jnotify/linux/JNotify_linux.java ---- jnotify-0.94/net/contentobjects/jnotify/linux/JNotify_linux.java 2012-04-25 00:03:54.000000000 +0100 -+++ jnotify-0.94-briar/net/contentobjects/jnotify/linux/JNotify_linux.java 2014-01-30 12:31:41.959082350 +0000 -@@ -37,6 +37,7 @@ - package net.contentobjects.jnotify.linux; - - import net.contentobjects.jnotify.JNotifyException; -+import net.contentobjects.jnotify.Util; - - public class JNotify_linux - { -@@ -45,7 +46,7 @@ - - static - { -- System.loadLibrary("jnotify"); -+ Util.loadNative(); - int res = nativeInit(); - if (res != 0) - { -diff -ru jnotify-0.94/net/contentobjects/jnotify/macosx/JNotify_macosx.java jnotify-0.94-briar/net/contentobjects/jnotify/macosx/JNotify_macosx.java ---- jnotify-0.94/net/contentobjects/jnotify/macosx/JNotify_macosx.java 2010-01-26 19:43:42.000000000 +0000 -+++ jnotify-0.94-briar/net/contentobjects/jnotify/macosx/JNotify_macosx.java 2014-01-30 12:31:41.959082350 +0000 -@@ -1,6 +1,7 @@ - package net.contentobjects.jnotify.macosx; - - import net.contentobjects.jnotify.JNotifyException; -+import net.contentobjects.jnotify.Util; - - public class JNotify_macosx - { -@@ -10,7 +11,7 @@ - - static - { -- System.loadLibrary("jnotify"); //$NON-NLS-1$ -+ Util.loadNative(); - Thread thread = new Thread("FSEvent thread") //$NON-NLS-1$ - { - public void run() -diff -ru jnotify-0.94/net/contentobjects/jnotify/Util.java jnotify-0.94-briar/net/contentobjects/jnotify/Util.java ---- jnotify-0.94/net/contentobjects/jnotify/Util.java 2006-02-14 08:18:10.000000000 +0000 -+++ jnotify-0.94-briar/net/contentobjects/jnotify/Util.java 2014-01-30 12:31:41.959082350 +0000 -@@ -30,4 +30,26 @@ - return "UNKNOWN"; - } - } -+ -+ public static void loadNative() throws UnsatisfiedLinkError { -+ try -+ { -+ try -+ { -+ System.loadLibrary("jnotify"); -+ } -+ catch (UnsatisfiedLinkError e) { -+ System.loadLibrary("jnotify-" + System.getProperty("os.arch")); -+ } -+ } -+ catch (UnsatisfiedLinkError e) -+ { -+ // add some extra debugging info -+ String msg = "Error loading library, os.arch=" + System.getProperty("os.arch") + -+ ", java.library.path=" + System.getProperty("java.library.path"); -+ UnsatisfiedLinkError e2 = new UnsatisfiedLinkError(msg); -+ e2.initCause(e); -+ throw e2; -+ } -+ } - } -diff -ru jnotify-0.94/net/contentobjects/jnotify/win32/JNotify_win32.java jnotify-0.94-briar/net/contentobjects/jnotify/win32/JNotify_win32.java ---- jnotify-0.94/net/contentobjects/jnotify/win32/JNotify_win32.java 2012-04-25 00:04:50.000000000 +0100 -+++ jnotify-0.94-briar/net/contentobjects/jnotify/win32/JNotify_win32.java 2014-01-30 12:31:41.959082350 +0000 -@@ -39,28 +39,13 @@ - package net.contentobjects.jnotify.win32; - - import net.contentobjects.jnotify.JNotifyException; -- -+import net.contentobjects.jnotify.Util; - - public class JNotify_win32 - { - static - { -- try -- { -- if (System.getProperty("os.arch").equals("amd64")) -- { -- System.loadLibrary("jnotify_64bit"); -- } -- else -- { -- System.loadLibrary("jnotify"); -- } -- } -- catch (UnsatisfiedLinkError e) -- { -- System.err.println("Error loading library, java.library.path=" + System.getProperty("java.library.path")); -- throw e; -- } -+ Util.loadNative(); - int res = nativeInit(); - if (res != 0) - { diff --git a/patches/jtorctl.patch b/patches/jtorctl.patch deleted file mode 100644 index 29a4f751af2b8b897256e626c3964d0f7361c303..0000000000000000000000000000000000000000 --- a/patches/jtorctl.patch +++ /dev/null @@ -1,197 +0,0 @@ -diff --git a/README.md b/README.md -index 902d727..359cc69 100644 ---- a/README.md -+++ b/README.md -@@ -1,7 +1,4 @@ -- - A Java library for controlling a Tor instance via its control port. It is - used in the Android app Orbot as well as others. - --To add this library to a gradle project: -- -- compile 'net.freehaven.tor.control:jtorctl:0.2' -+This fork includes patches for managing onion services. -diff --git a/net/freehaven/tor/control/TorControlCommands.java b/net/freehaven/tor/control/TorControlCommands.java -index 36482d5..14486e3 100644 ---- a/net/freehaven/tor/control/TorControlCommands.java -+++ b/net/freehaven/tor/control/TorControlCommands.java -@@ -144,5 +144,8 @@ public interface TorControlCommands { - "No such OR", - }; - -+ public static final String HS_ADDRESS = "onionAddress"; -+ public static final String HS_PRIVKEY = "onionPrivKey"; -+ - } - -diff --git a/net/freehaven/tor/control/TorControlConnection.java b/net/freehaven/tor/control/TorControlConnection.java -index 9524612..eacdd66 100644 ---- a/net/freehaven/tor/control/TorControlConnection.java -+++ b/net/freehaven/tor/control/TorControlConnection.java -@@ -40,10 +40,14 @@ public class TorControlConnection implements TorControlCommands { - static class Waiter { - - List<ReplyLine> response; // Locking: this -+ boolean interrupted; - - synchronized List<ReplyLine> getResponse() throws InterruptedException { - while (response == null) { - wait(); -+ if (interrupted) { -+ throw new InterruptedException(); -+ } - } - return response; - } -@@ -52,6 +56,11 @@ public class TorControlConnection implements TorControlCommands { - this.response = response; - notifyAll(); - } -+ -+ synchronized void interrupt() { -+ interrupted = true; -+ notifyAll(); -+ } - } - - static class ReplyLine { -@@ -171,7 +180,7 @@ public class TorControlConnection implements TorControlCommands { - - protected synchronized List<ReplyLine> sendAndWaitForResponse(String s, - String rest) throws IOException { -- if(parseThreadException != null) throw parseThreadException; -+ if (parseThreadException != null) throw parseThreadException; - checkThread(); - Waiter w = new Waiter(); - if (debugOutput != null) -@@ -305,8 +314,15 @@ public class TorControlConnection implements TorControlCommands { - while (true) { - ArrayList<ReplyLine> lst = readReply(); - if (lst.isEmpty()) { -- // connection has been closed remotely! end the loop! -- return; -+ // interrupted queued waiters, there won't be any response. -+ synchronized (waiters) { -+ if (!waiters.isEmpty()) { -+ for (Waiter w : waiters) { -+ w.interrupt(); -+ } -+ } -+ } -+ throw new IOException("Tor is no longer running"); - } - if ((lst.get(0)).status.startsWith("6")) - handleEvent(lst); -@@ -736,11 +752,111 @@ public class TorControlConnection implements TorControlCommands { - sendAndWaitForResponse("TAKEOWNERSHIP\r\n", null); - } - -+ /** -+ * Tells Tor to generate and set up a new onion service using the best -+ * supported algorithm. -+ * <p/> -+ * ADD_ONION was added in Tor 0.2.7.1-alpha. -+ */ -+ public Map<String,String> addOnion(Map<Integer,String> portLines) -+ throws IOException { -+ return addOnion("NEW:BEST", portLines, null); -+ } -+ -+ /** -+ * Tells Tor to generate and set up a new onion service using the best -+ * supported algorithm. -+ * <p/> -+ * ADD_ONION was added in Tor 0.2.7.1-alpha. -+ */ -+ public Map<String,String> addOnion(Map<Integer,String> portLines, -+ boolean ephemeral, boolean detach) -+ throws IOException { -+ return addOnion("NEW:BEST", portLines, ephemeral, detach); -+ } -+ -+ /** -+ * Tells Tor to set up an onion service using the provided private key. -+ * <p/> -+ * ADD_ONION was added in Tor 0.2.7.1-alpha. -+ */ -+ public Map<String,String> addOnion(String privKey, -+ Map<Integer,String> portLines) -+ throws IOException { -+ return addOnion(privKey, portLines, null); -+ } -+ -+ /** -+ * Tells Tor to set up an onion service using the provided private key. -+ * <p/> -+ * ADD_ONION was added in Tor 0.2.7.1-alpha. -+ */ -+ public Map<String,String> addOnion(String privKey, -+ Map<Integer,String> portLines, -+ boolean ephemeral, boolean detach) -+ throws IOException { -+ List<String> flags = new ArrayList<String>(); -+ if (ephemeral) -+ flags.add("DiscardPK"); -+ if (detach) -+ flags.add("Detach"); -+ return addOnion(privKey, portLines, flags); -+ } -+ -+ /** -+ * Tells Tor to set up an onion service. -+ * <p/> -+ * ADD_ONION was added in Tor 0.2.7.1-alpha. -+ */ -+ public Map<String,String> addOnion(String privKey, -+ Map<Integer,String> portLines, -+ List<String> flags) -+ throws IOException { -+ if (privKey.indexOf(':') < 0) -+ throw new IllegalArgumentException("Invalid privKey"); -+ if (portLines == null || portLines.size() < 1) -+ throw new IllegalArgumentException("Must provide at least one port line"); -+ StringBuilder b = new StringBuilder(); -+ b.append("ADD_ONION ").append(privKey); -+ if (flags != null && flags.size() > 0) { -+ b.append(" Flags="); -+ String separator = ""; -+ for (String flag : flags) { -+ b.append(separator).append(flag); -+ separator = ","; -+ } -+ } -+ for (Map.Entry<Integer,String> portLine : portLines.entrySet()) { -+ int virtPort = portLine.getKey(); -+ String target = portLine.getValue(); -+ b.append(" Port=").append(virtPort); -+ if (target != null && target.length() > 0) -+ b.append(",").append(target); -+ } -+ b.append("\r\n"); -+ List<ReplyLine> lst = sendAndWaitForResponse(b.toString(), null); -+ Map<String,String> ret = new HashMap<String,String>(); -+ ret.put(HS_ADDRESS, (lst.get(0)).msg.split("=", 2)[1]); -+ if (lst.size() > 2) -+ ret.put(HS_PRIVKEY, (lst.get(1)).msg.split("=", 2)[1]); -+ return ret; -+ } -+ -+ /** -+ * Tells Tor to take down an onion service previously set up with -+ * addOnion(). The hostname excludes the .onion extension. -+ * <p/> -+ * DEL_ONION was added in Tor 0.2.7.1-alpha. -+ */ -+ public void delOnion(String hostname) throws IOException { -+ sendAndWaitForResponse("DEL_ONION " + hostname + "\r\n", null); -+ } -+ - /** Tells Tor to forget any cached client state relating to the hidden - * service with the given hostname (excluding the .onion extension). - */ - public void forgetHiddenService(String hostname) throws IOException { -- sendAndWaitForResponse("FORGETHS " + hostname + "\r\n", null); -+ sendAndWaitForResponse("HSFORGET " + hostname + "\r\n", null); - } - } - diff --git a/patches/tor.patch b/patches/tor.patch deleted file mode 100644 index 1b3f8447c4201b094a04dd91cf0860f2fafcd5d8..0000000000000000000000000000000000000000 --- a/patches/tor.patch +++ /dev/null @@ -1,153 +0,0 @@ -diff --git a/src/or/control.c b/src/or/control.c -index c8c5062..f38ba23 100644 ---- a/src/or/control.c -+++ b/src/or/control.c -@@ -196,6 +196,8 @@ static int handle_control_hsfetch(control_connection_t *conn, uint32_t len, - const char *body); - static int handle_control_hspost(control_connection_t *conn, uint32_t len, - const char *body); -+static int handle_control_hsforget(control_connection_t *conn, uint32_t len, -+ const char *body); - static int handle_control_add_onion(control_connection_t *conn, uint32_t len, - const char *body); - static int handle_control_del_onion(control_connection_t *conn, uint32_t len, -@@ -4246,6 +4248,33 @@ handle_control_hspost(control_connection_t *conn, - return 0; - } - -+/** Called when we get an HSFORGET command: parse the hidden service's onion -+ * address and purge any cached state related to the service. */ -+static int -+handle_control_hsforget(control_connection_t *conn, uint32_t len, -+ const char *body) -+{ -+ smartlist_t *args; -+ char *onion_address; -+ -+ args = getargs_helper("HSFORGET", conn, body, 1, 1); -+ if (!args) -+ return -1; -+ onion_address = smartlist_get(args, 0); -+ smartlist_free(args); -+ -+ if (!rend_valid_service_id(onion_address)) { -+ connection_write_str_to_buf("513 Invalid hidden service address\r\n", conn); -+ tor_free(onion_address); -+ return -1; -+ } -+ -+ rend_client_purge_hidden_service(onion_address); -+ tor_free(onion_address); -+ send_control_done(conn); -+ return 0; -+} -+ - /** Called when we get a ADD_ONION command; parse the body, and set up - * the new ephemeral Onion Service. */ - static int -@@ -5065,6 +5094,9 @@ connection_control_process_inbuf(control_connection_t *conn) - } else if (!strcasecmp(conn->incoming_cmd, "+HSPOST")) { - if (handle_control_hspost(conn, cmd_data_len, args)) - return -1; -+ } else if (!strcasecmp(conn->incoming_cmd, "HSFORGET")) { -+ if (handle_control_hsforget(conn, cmd_data_len, args)) -+ return -1; - } else if (!strcasecmp(conn->incoming_cmd, "ADD_ONION")) { - int ret = handle_control_add_onion(conn, cmd_data_len, args); - memwipe(args, 0, cmd_data_len); /* Scrub the private key. */ -diff --git a/src/or/rendcache.c b/src/or/rendcache.c -index aa69d73..473a6a4 100644 ---- a/src/or/rendcache.c -+++ b/src/or/rendcache.c -@@ -587,6 +587,34 @@ rend_cache_lookup_v2_desc_as_service(const char *query, rend_cache_entry_t **e) - return ret; - } - -+/** Remove any cached descriptors for <b>service_id</b>. */ -+void -+rend_cache_remove_entry(const char *service_id) -+{ -+ char key[REND_SERVICE_ID_LEN_BASE32 + 2]; /* <version><service_id>\0 */ -+ rend_cache_entry_t *removed; -+ -+ tor_assert(rend_valid_service_id(service_id)); -+ if (!rend_cache) -+ return; -+ -+ tor_snprintf(key, sizeof(key), "2%s", service_id); -+ removed = (rend_cache_entry_t *)strmap_remove_lc(rend_cache, key); -+ if (removed) { -+ log_info(LD_REND, "Removed cached v2 descriptor for service %s.", -+ safe_str_client(service_id)); -+ rend_cache_entry_free(removed); -+ } -+ -+ tor_snprintf(key, sizeof(key), "0%s", service_id); -+ removed = (rend_cache_entry_t *)strmap_remove_lc(rend_cache, key); -+ if (removed) { -+ log_info(LD_REND, "Removed cached v0 descriptor for service %s.", -+ safe_str_client(service_id)); -+ rend_cache_entry_free(removed); -+ } -+} -+ - /** Lookup the v2 service descriptor with base32-encoded <b>desc_id</b> and - * copy the pointer to it to *<b>desc</b>. Return 1 on success, 0 on - * well-formed-but-not-found, and -1 on failure. -diff --git a/src/or/rendcache.h b/src/or/rendcache.h -index 270b614..69d1b1b 100644 ---- a/src/or/rendcache.h -+++ b/src/or/rendcache.h -@@ -61,6 +61,7 @@ void rend_cache_purge(void); - void rend_cache_free_all(void); - int rend_cache_lookup_entry(const char *query, int version, - rend_cache_entry_t **entry_out); -+void rend_cache_remove_entry(const char *service_id); - int rend_cache_lookup_v2_desc_as_service(const char *query, - rend_cache_entry_t **entry_out); - int rend_cache_lookup_v2_desc_as_dir(const char *query, const char **desc); -diff --git a/src/or/rendclient.c b/src/or/rendclient.c -index a93bc94..f311e1f 100644 ---- a/src/or/rendclient.c -+++ b/src/or/rendclient.c -@@ -32,6 +32,9 @@ static extend_info_t *rend_client_get_random_intro_impl( - const rend_cache_entry_t *rend_query, - const int strict, const int warnings); - -+static void purge_hid_serv_from_last_hid_serv_requests( -+ const char *onion_address); -+ - /** Purge all potentially remotely-detectable state held in the hidden - * service client code. Called on SIGNAL NEWNYM. */ - void -@@ -43,6 +46,15 @@ rend_client_purge_state(void) - rend_client_purge_last_hid_serv_requests(); - } - -+/** Purge all cached state relating to the given hidden service. */ -+void -+rend_client_purge_hidden_service(const char *onion_address) -+{ -+ tor_assert(rend_valid_service_id(onion_address)); -+ rend_cache_remove_entry(onion_address); -+ purge_hid_serv_from_last_hid_serv_requests(onion_address); -+} -+ - /** Called when we've established a circuit to an introduction point: - * send the introduction request. */ - void -diff --git a/src/or/rendclient.h b/src/or/rendclient.h -index b8f8c2f..b1da48c 100644 ---- a/src/or/rendclient.h -+++ b/src/or/rendclient.h -@@ -15,6 +15,7 @@ - #include "rendcache.h" - - void rend_client_purge_state(void); -+void rend_client_purge_hidden_service(const char *onion_address); - - void rend_client_introcirc_has_opened(origin_circuit_t *circ); - void rend_client_rendcirc_has_opened(origin_circuit_t *circ); --- -2.9.3 - diff --git a/patches/weupnp-0.1.3-SNAPSHOT.patch b/patches/weupnp-0.1.3-SNAPSHOT.patch deleted file mode 100644 index 686fac9270b980c6d159df7e67ddfe61c8733431..0000000000000000000000000000000000000000 --- a/patches/weupnp-0.1.3-SNAPSHOT.patch +++ /dev/null @@ -1,40 +0,0 @@ -diff -Bbur weupnp-0.1.3-SNAPSHOT/src/main/java/org/bitlet/weupnp/GatewayDiscover.java weupnp-0.1.3-SNAPSHOT-briar/src/main/java/org/bitlet/weupnp/GatewayDiscover.java ---- weupnp-0.1.3-SNAPSHOT/src/main/java/org/bitlet/weupnp/GatewayDiscover.java 2013-05-01 21:09:27.000000000 +0100 -+++ weupnp-0.1.3-SNAPSHOT-briar/src/main/java/org/bitlet/weupnp/GatewayDiscover.java 2013-12-05 20:49:00.000000000 +0000 -@@ -253,7 +253,7 @@ - while (st.hasMoreTokens()) { - String line = st.nextToken().trim(); - -- if (line.isEmpty()) -+ if (line.equals("")) - continue; - - if (line.startsWith("HTTP/1.") || line.startsWith("NOTIFY *")) -@@ -331,16 +331,6 @@ - // For every suitable network interface, get all IP addresses - while (networkInterfaces.hasMoreElements()) { - NetworkInterface card = networkInterfaces.nextElement(); -- -- try { -- // skip devices, not suitable to search gateways for -- if (card.isLoopback() || card.isPointToPoint() || -- card.isVirtual() || !card.isUp()) -- continue; -- } catch (SocketException e) { -- continue; -- } -- - Enumeration<InetAddress> addresses = card.getInetAddresses(); - - if (addresses == null) -@@ -348,6 +338,10 @@ - - while (addresses.hasMoreElements()) { - InetAddress inetAddress = addresses.nextElement(); -+ -+ if (inetAddress.isLoopbackAddress()) -+ continue; -+ - int index = arrayIPAddress.size(); - - if (!getIPv4 || !getIPv6) {