[or-cvs] r24204: {projects} removing unused Socks client code from Orbot (in projects/android/trunk/Orbot: . assets res/values res/xml src/org/torproject/android src/org/torproject/android/net src/org/torproject/android/service)

Nathan Freitas nathan at freitas.net
Wed Feb 9 21:11:54 UTC 2011


Author: n8fr8
Date: 2011-02-09 21:11:53 +0000 (Wed, 09 Feb 2011)
New Revision: 24204

Removed:
   projects/android/trunk/Orbot/src/org/torproject/android/net/ModSSLSocketFactory.java
   projects/android/trunk/Orbot/src/org/torproject/android/net/MyDefaultClientConnectionOperator.java
   projects/android/trunk/Orbot/src/org/torproject/android/net/MyThreadSafeClientConnManager.java
   projects/android/trunk/Orbot/src/org/torproject/android/net/SOCKSHttpClient.java
   projects/android/trunk/Orbot/src/org/torproject/android/net/SocksClient.java
   projects/android/trunk/Orbot/src/org/torproject/android/net/SocksSocketFactory.java
Modified:
   projects/android/trunk/Orbot/AndroidManifest.xml
   projects/android/trunk/Orbot/CHANGELOG
   projects/android/trunk/Orbot/assets/torrc
   projects/android/trunk/Orbot/default.properties
   projects/android/trunk/Orbot/res/values/strings.xml
   projects/android/trunk/Orbot/res/xml/preferences.xml
   projects/android/trunk/Orbot/src/org/torproject/android/Orbot.java
   projects/android/trunk/Orbot/src/org/torproject/android/service/TorService.java
   projects/android/trunk/Orbot/src/org/torproject/android/service/TorServiceConstants.java
   projects/android/trunk/Orbot/src/org/torproject/android/service/TorServiceUtils.java
   projects/android/trunk/Orbot/src/org/torproject/android/service/TorTransProxy.java
Log:
removing unused Socks client code from Orbot

Modified: projects/android/trunk/Orbot/AndroidManifest.xml
===================================================================
--- projects/android/trunk/Orbot/AndroidManifest.xml	2011-02-09 05:03:20 UTC (rev 24203)
+++ projects/android/trunk/Orbot/AndroidManifest.xml	2011-02-09 21:11:53 UTC (rev 24204)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
-      package="org.torproject.android" android:versionName="1.0.4" android:versionCode="11">
+      package="org.torproject.android" android:versionName="1.0.5" android:versionCode="11">
        
        <uses-permission android:name="android.permission.INTERNET" />
        <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
@@ -33,8 +33,7 @@
         <activity android:name=".AppManager"  android:label="@string/app_name"/>
         <activity android:name=".WizardActivity"  android:label="@string/app_name"/>
       
-    	<!-- <service android:name=".service.TorService" android:process=":remote"> -->
-    	<service android:name=".service.TorService">
+    	<service android:name=".service.TorService" android:process=":remote">
 	            <intent-filter>
 	                <action android:name="org.torproject.android.service.ITorService" />
 	              	<action android:name="org.torproject.android.service.TOR_SERVICE" />

Modified: projects/android/trunk/Orbot/CHANGELOG
===================================================================
--- projects/android/trunk/Orbot/CHANGELOG	2011-02-09 05:03:20 UTC (rev 24203)
+++ projects/android/trunk/Orbot/CHANGELOG	2011-02-09 21:11:53 UTC (rev 24204)
@@ -1,5 +1,7 @@
 NOTE: Specific #s below correspond to Trac tickets logged and maintained at https://trac.torproject.org/projects/tor/
 
+1.0.5
+- Removed unused Socks client code from android.net package
 
 1.0.4
 - Added Russian, Persian, Arabic and other .po translations (see res/values-* folders)

Modified: projects/android/trunk/Orbot/assets/torrc
===================================================================
--- projects/android/trunk/Orbot/assets/torrc	2011-02-09 05:03:20 UTC (rev 24203)
+++ projects/android/trunk/Orbot/assets/torrc	2011-02-09 21:11:53 UTC (rev 24204)
@@ -1,6 +1,6 @@
 SocksPort 9050
-SocksListenAddress 127.0.0.1
-SafeSocks 1
+TestSocks 1
+WarnUnsafeSocks 1
 Log notice stdout
 DataDirectory /data/data/org.torproject.android/data
 ControlPort 9051

Modified: projects/android/trunk/Orbot/default.properties
===================================================================
--- projects/android/trunk/Orbot/default.properties	2011-02-09 05:03:20 UTC (rev 24203)
+++ projects/android/trunk/Orbot/default.properties	2011-02-09 21:11:53 UTC (rev 24204)
@@ -10,5 +10,5 @@
 # Indicates whether an apk should be generated for each density.
 split.density=false
 # Project target.
-target=android-4
+target=android-8
 apk-configurations=

Modified: projects/android/trunk/Orbot/res/values/strings.xml
===================================================================
--- projects/android/trunk/Orbot/res/values/strings.xml	2011-02-09 05:03:20 UTC (rev 24203)
+++ projects/android/trunk/Orbot/res/values/strings.xml	2011-02-09 21:11:53 UTC (rev 24204)
@@ -50,6 +50,13 @@
 <string name="pref_transparent_all_title">Tor Everything</string>
 <string name="pref_transparent_all_summary">Proxy traffic for all apps through Tor</string>
 
+<string name="pref_transparent_port_fallback_title">Port Proxy Fallback</string>
+<string name="pref_transparent_port_fallback_summary">WARNING: Circumvents common ports (80, 443, etc). *USE ONLY* if \'All\' or \'App\' mode doesn\'t work.</string>
+
+<string name="pref_transparent_port_title">Port List</string>
+<string name="pref_transparent_port_summary">List of ports to proxy. *USE ONLY* if \'All\' or \'App\' mode doesn\'t work</string>
+<string name="pref_transparent_port_dialog">Enter ports to proxy</string>
+
 <string name="status_install_success">Tor binaries successfully installed!</string>
 <string name="status_install_fail">The Tor binary files were unable to be installed. Please check the log and notify tor-assistants at torproject.org</string>
 

Modified: projects/android/trunk/Orbot/res/xml/preferences.xml
===================================================================
--- projects/android/trunk/Orbot/res/xml/preferences.xml	2011-02-09 05:03:20 UTC (rev 24203)
+++ projects/android/trunk/Orbot/res/xml/preferences.xml	2011-02-09 21:11:53 UTC (rev 24204)
@@ -33,7 +33,19 @@
 android:enabled="true"/>
 
 
+<CheckBoxPreference
+android:defaultValue="false" 
+android:key="pref_transparent_port_fallback"
+android:summary="@string/pref_transparent_port_fallback_summary"
+android:enabled="true" 
+android:title="@string/pref_transparent_port_fallback_title"/>
 
+<EditTextPreference android:key="pref_port_list"
+android:defaultValue="80,443,8080,8888,8443"
+android:title="@string/pref_transparent_port_title"
+android:summary="@string/pref_transparent_port_summary"
+android:dialogTitle="@string/pref_transparent_port_dialog"
+/>
 </PreferenceCategory>
 
  

Modified: projects/android/trunk/Orbot/src/org/torproject/android/Orbot.java
===================================================================
--- projects/android/trunk/Orbot/src/org/torproject/android/Orbot.java	2011-02-09 05:03:20 UTC (rev 24203)
+++ projects/android/trunk/Orbot/src/org/torproject/android/Orbot.java	2011-02-09 21:11:53 UTC (rev 24204)
@@ -825,7 +825,7 @@
     	
     	//unbindService();
 		
-        //stopService(new Intent(ITorService.class.getName()));
+        stopService(new Intent(ITorService.class.getName()));
 	
     	
     }

Deleted: projects/android/trunk/Orbot/src/org/torproject/android/net/ModSSLSocketFactory.java
===================================================================
--- projects/android/trunk/Orbot/src/org/torproject/android/net/ModSSLSocketFactory.java	2011-02-09 05:03:20 UTC (rev 24203)
+++ projects/android/trunk/Orbot/src/org/torproject/android/net/ModSSLSocketFactory.java	2011-02-09 21:11:53 UTC (rev 24204)
@@ -1,442 +0,0 @@
-/*
- * $HeadURL: http://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk/module-client/src/main/java/org/apache/http/conn/ssl/SSLSocketFactory.java $
- * $Revision: 659194 $
- * $Date: 2008-05-22 11:33:47 -0700 (Thu, 22 May 2008) $
- *
- * ====================================================================
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- */
-
-package org.torproject.android.net;
-
-import java.io.IOException;
-import java.net.InetAddress;
-import java.net.InetSocketAddress;
-import java.net.Socket;
-import java.net.UnknownHostException;
-import java.security.KeyManagementException;
-import java.security.KeyStore;
-import java.security.KeyStoreException;
-import java.security.NoSuchAlgorithmException;
-import java.security.SecureRandom;
-import java.security.UnrecoverableKeyException;
-
-import javax.net.ssl.KeyManager;
-import javax.net.ssl.KeyManagerFactory;
-import javax.net.ssl.SSLContext;
-import javax.net.ssl.SSLSocket;
-import javax.net.ssl.TrustManager;
-import javax.net.ssl.TrustManagerFactory;
-
-import org.apache.http.conn.scheme.HostNameResolver;
-import org.apache.http.conn.scheme.LayeredSocketFactory;
-import org.apache.http.conn.ssl.AllowAllHostnameVerifier;
-import org.apache.http.conn.ssl.BrowserCompatHostnameVerifier;
-import org.apache.http.conn.ssl.SSLSocketFactory;
-import org.apache.http.conn.ssl.StrictHostnameVerifier;
-import org.apache.http.conn.ssl.X509HostnameVerifier;
-import org.apache.http.params.HttpConnectionParams;
-import org.apache.http.params.HttpParams;
-
-
-
-/**
- * Layered socket factory for TLS/SSL connections, based on JSSE.
- *.
- * <p>
- * SSLSocketFactory can be used to validate the identity of the HTTPS 
- * server against a list of trusted certificates and to authenticate to
- * the HTTPS server using a private key. 
- * </p>
- * 
- * <p>
- * SSLSocketFactory will enable server authentication when supplied with
- * a {@link KeyStore truststore} file containg one or several trusted
- * certificates. The client secure socket will reject the connection during
- * the SSL session handshake if the target HTTPS server attempts to
- * authenticate itself with a non-trusted certificate.
- * </p>
- * 
- * <p>
- * Use JDK keytool utility to import a trusted certificate and generate a truststore file:    
- *    <pre>
- *     keytool -import -alias "my server cert" -file server.crt -keystore my.truststore
- *    </pre>
- * </p>
- * 
- * <p>
- * SSLSocketFactory will enable client authentication when supplied with
- * a {@link KeyStore keystore} file containg a private key/public certificate
- * pair. The client secure socket will use the private key to authenticate
- * itself to the target HTTPS server during the SSL session handshake if
- * requested to do so by the server.
- * The target HTTPS server will in its turn verify the certificate presented
- * by the client in order to establish client's authenticity
- * </p>
- * 
- * <p>
- * Use the following sequence of actions to generate a keystore file
- * </p>
- *   <ul>
- *     <li>
- *      <p>
- *      Use JDK keytool utility to generate a new key
- *      <pre>keytool -genkey -v -alias "my client key" -validity 365 -keystore my.keystore</pre>
- *      For simplicity use the same password for the key as that of the keystore
- *      </p>
- *     </li>
- *     <li>
- *      <p>
- *      Issue a certificate signing request (CSR)
- *      <pre>keytool -certreq -alias "my client key" -file mycertreq.csr -keystore my.keystore</pre>
- *     </p>
- *     </li>
- *     <li>
- *      <p>
- *      Send the certificate request to the trusted Certificate Authority for signature. 
- *      One may choose to act as her own CA and sign the certificate request using a PKI 
- *      tool, such as OpenSSL.
- *      </p>
- *     </li>
- *     <li>
- *      <p>
- *       Import the trusted CA root certificate
- *       <pre>keytool -import -alias "my trusted ca" -file caroot.crt -keystore my.keystore</pre> 
- *      </p>
- *     </li>
- *     <li>
- *      <p>
- *       Import the PKCS#7 file containg the complete certificate chain
- *       <pre>keytool -import -alias "my client key" -file mycert.p7 -keystore my.keystore</pre> 
- *      </p>
- *     </li>
- *     <li>
- *      <p>
- *       Verify the content the resultant keystore file
- *       <pre>keytool -list -v -keystore my.keystore</pre> 
- *      </p>
- *     </li>
- *   </ul>
- * @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a>
- * @author Julius Davies
- */
-
-public class ModSSLSocketFactory implements LayeredSocketFactory {
-
-    public static final String TLS   = "TLS";
-    public static final String SSL   = "SSL";
-    public static final String SSLV2 = "SSLv2";
-    
-    public static final X509HostnameVerifier ALLOW_ALL_HOSTNAME_VERIFIER 
-        = new AllowAllHostnameVerifier();
-    
-    public static final X509HostnameVerifier BROWSER_COMPATIBLE_HOSTNAME_VERIFIER 
-        = new BrowserCompatHostnameVerifier();
-    
-    public static final X509HostnameVerifier STRICT_HOSTNAME_VERIFIER 
-        = new StrictHostnameVerifier();
-    /**
-     * The factory using the default JVM settings for secure connections.
-     */
-    private static ModSSLSocketFactory DEFAULT_FACTORY = null;
-    
-    /**
-     * Gets an singleton instance of the SSLProtocolSocketFactory.
-     * @return a SSLProtocolSocketFactory
-     */
-    public static ModSSLSocketFactory getSocketFactory() {
-    	if (DEFAULT_FACTORY == null) {
-    		DEFAULT_FACTORY = new ModSSLSocketFactory();
-    	}
-		return DEFAULT_FACTORY;
-    }
-    
-    private final SSLContext sslcontext;
-    private final SSLSocketFactory socketfactory;
-    //private final HostNameResolver nameResolver;
-    private X509HostnameVerifier hostnameVerifier = BROWSER_COMPATIBLE_HOSTNAME_VERIFIER;
-    private SocksSocketFactory mSocksSocketFactory = null;
-
-    public ModSSLSocketFactory(
-        String algorithm, 
-        final KeyStore keystore, 
-        final String keystorePassword, 
-        final KeyStore truststore,
-        final SecureRandom random,
-        final HostNameResolver nameResolver) 
-        throws NoSuchAlgorithmException, KeyManagementException, KeyStoreException, UnrecoverableKeyException
-    {
-        super();
-        if (algorithm == null) {
-            algorithm = SSL;
-        }
-        KeyManager[] keymanagers = null;
-        if (keystore != null) {
-            keymanagers = createKeyManagers(keystore, keystorePassword);
-        }
-        TrustManager[] trustmanagers = null;
-        if (truststore != null) {
-            trustmanagers = createTrustManagers(truststore);
-        }
-        this.sslcontext = SSLContext.getInstance(algorithm);
-        this.sslcontext.init(keymanagers, trustmanagers, random);
-        this.socketfactory = SSLSocketFactory.getSocketFactory();
-        //this.nameResolver = nameResolver;
-        
-         
-    }
-
-    public ModSSLSocketFactory(
-            final KeyStore keystore, 
-            final String keystorePassword, 
-            final KeyStore truststore) 
-            throws NoSuchAlgorithmException, KeyManagementException, KeyStoreException, UnrecoverableKeyException
-    {
-        this(SSL, keystore, keystorePassword, truststore, null, null);
-    }
-
-    public ModSSLSocketFactory(final KeyStore keystore, final String keystorePassword) 
-            throws NoSuchAlgorithmException, KeyManagementException, KeyStoreException, UnrecoverableKeyException
-    {
-        this(SSL, keystore, keystorePassword, null, null, null);
-    }
-
-    public ModSSLSocketFactory(final KeyStore truststore) 
-            throws NoSuchAlgorithmException, KeyManagementException, KeyStoreException, UnrecoverableKeyException
-    {
-        this(SSL, null, null, truststore, null, null);
-    }
-
-    /**
-     * Constructs an HttpClient SSLSocketFactory backed by the given JSSE
-     * SSLSocketFactory.
-     *
-     * @hide
-     */
-    public ModSSLSocketFactory(SSLSocketFactory socketfactory) {
-        super();
-        this.sslcontext = null;
-        this.socketfactory = socketfactory;
-        //this.nameResolver = null;
-    }
-
-    /**
-     * Creates the default SSL socket factory.
-     * This constructor is used exclusively to instantiate the factory for
-     * {@link #getSocketFactory getSocketFactory}.
-     */
-    private ModSSLSocketFactory() {
-        super();
-        this.sslcontext = null;
-        this.socketfactory = SSLSocketFactory.getSocketFactory();
-        //this.nameResolver = null;
-        
-        this.mSocksSocketFactory = new SocksSocketFactory("127.0.0.1",9050);
-    }
-
-    private static KeyManager[] createKeyManagers(final KeyStore keystore, final String password)
-        throws KeyStoreException, NoSuchAlgorithmException, UnrecoverableKeyException {
-        if (keystore == null) {
-            throw new IllegalArgumentException("Keystore may not be null");
-        }
-        KeyManagerFactory kmfactory = KeyManagerFactory.getInstance(
-            KeyManagerFactory.getDefaultAlgorithm());
-        kmfactory.init(keystore, password != null ? password.toCharArray(): null);
-        return kmfactory.getKeyManagers(); 
-    }
-
-    private static TrustManager[] createTrustManagers(final KeyStore keystore)
-        throws KeyStoreException, NoSuchAlgorithmException { 
-        if (keystore == null) {
-            throw new IllegalArgumentException("Keystore may not be null");
-        }
-        TrustManagerFactory tmfactory = TrustManagerFactory.getInstance(
-            TrustManagerFactory.getDefaultAlgorithm());
-        tmfactory.init(keystore);
-        return tmfactory.getTrustManagers();
-    }
-
-
-    // non-javadoc, see interface org.apache.http.conn.SocketFactory
-    public Socket createSocket()
-        throws IOException {
-
-    	// SSL Sockets don't work at the moment.
-    	//throw new SSLException("SSL socket functionality broken");
-        // the cast makes sure that the factory is working as expected
-        return (SSLSocket) this.socketfactory.createSocket();
-    	//return new Socket();
-    	//return null;
-        
-    }
-
-
-    // non-javadoc, see interface org.apache.http.conn.SocketFactory
-    public Socket connectSocket(
-        final Socket sock,
-        final String host,
-        final int port,
-        final InetAddress localAddress,
-        int localPort,
-        final HttpParams params
-    ) throws IOException {
-
-        if (host == null) {
-            throw new IllegalArgumentException("Target host may not be null.");
-        }
-        if (params == null) {
-            throw new IllegalArgumentException("Parameters may not be null.");
-        }
-
-        //Socket underlying = (Socket)
-        //    ((sock != null) ? sock : createSocket());
-        Socket underlying =  null;
-        
-        /*sock;
-        if (underlying == null)// underlying = new Socket(); 
-        {
-        	underlying = mSocksSocketFactory.createSocket();
-          
-        }*/
-        
-        Socket sSocket = mSocksSocketFactory.connectSocket(underlying, host, port, localAddress, localPort, params);
-        
-       // SSLSocket sslsock =  (SSLSocket) socketfactory.connectSocket(sSocket, host, port, localAddress, localPort, params);
-        SSLSocket sslsock = (SSLSocket)socketfactory.createSocket(sSocket, host, port, true);
-        
-        if ((localAddress != null) || (localPort > 0)) {
-
-            // we need to bind explicitly
-            if (localPort < 0)
-                localPort = 0; // indicates "any"
-
-            InetSocketAddress isa =
-                new InetSocketAddress(localAddress, localPort);
-
-            sslsock.bind(isa);
-        }
-
-        int connTimeout = HttpConnectionParams.getConnectionTimeout(params);
-        int soTimeout = HttpConnectionParams.getSoTimeout(params);
-
-        InetSocketAddress remoteAddress;
-//        if (this.nameResolver != null) {
-//            remoteAddress = new InetSocketAddress(this.nameResolver.resolve(host), port); 
-//        } else {
-         remoteAddress = new InetSocketAddress(host, port);            
-//        }
-//        
-
-         sslsock.connect(remoteAddress, connTimeout);
-
-       // sslsock.setSoTimeout(0);
-        try {
-            hostnameVerifier.verify(host, sslsock);
-            // verifyHostName() didn't blowup - good!
-        } catch (IOException iox) {
-            // close the socket before re-throwing the exception
-            try { sslsock.close(); } catch (Exception x) {  }
-            throw iox;
-        }
-
-        return sslsock;
-       
-    }
-
-
-    /**
-     * Checks whether a socket connection is secure.
-     * This factory creates TLS/SSL socket connections
-     * which, by default, are considered secure.
-     * <br/>
-     * Derived classes may override this method to perform
-     * runtime checks, for example based on the cypher suite.
-     *
-     * @param sock      the connected socket
-     *
-     * @return  <code>true</code>
-     *
-     * @throws IllegalArgumentException if the argument is invalid
-     */
-    public boolean isSecure(Socket sock)
-        throws IllegalArgumentException {
-
-        if (sock == null) {
-            throw new IllegalArgumentException("Socket may not be null.");
-        }
-        // This instanceof check is in line with createSocket() above.
-        if (!(sock instanceof SSLSocket)) {
-            throw new IllegalArgumentException
-                ("Socket not created by this factory.");
-        }
-        // This check is performed last since it calls the argument object.
-        if (sock.isClosed()) {
-            throw new IllegalArgumentException("Socket is closed.");
-        }
-
-        return true;
-
-    } // isSecure
-
-
-    // non-javadoc, see interface LayeredSocketFactory
-    public Socket createSocket(
-        final Socket socket,
-        final String host,
-        final int port,
-        final boolean autoClose
-    ) throws IOException, UnknownHostException {
-        SSLSocket sslSocket = (SSLSocket) this.socketfactory.createSocket(
-              socket,
-              host,
-              port,
-              autoClose
-        );
-        hostnameVerifier.verify(host, sslSocket);
-        // verifyHostName() didn't blowup - good!
-        return sslSocket;
-    }
-
-    public void setHostnameVerifier(X509HostnameVerifier hostnameVerifier) {
-        if ( hostnameVerifier == null ) {
-            throw new IllegalArgumentException("Hostname verifier may not be null");
-        }
-        this.hostnameVerifier = hostnameVerifier;
-    }
-
-    public X509HostnameVerifier getHostnameVerifier() {
-        return hostnameVerifier;
-    }
-
-    public class SSLException extends IOException {
-		private static final long serialVersionUID = 1L;
-
-		public SSLException(String msg) {
-			super(msg);
-		}
-    };
-    
-    
-}
\ No newline at end of file

Deleted: projects/android/trunk/Orbot/src/org/torproject/android/net/MyDefaultClientConnectionOperator.java
===================================================================
--- projects/android/trunk/Orbot/src/org/torproject/android/net/MyDefaultClientConnectionOperator.java	2011-02-09 05:03:20 UTC (rev 24203)
+++ projects/android/trunk/Orbot/src/org/torproject/android/net/MyDefaultClientConnectionOperator.java	2011-02-09 21:11:53 UTC (rev 24204)
@@ -1,70 +0,0 @@
-package org.torproject.android.net;
-
-import java.io.IOException;
-import java.net.ConnectException;
-import java.net.InetAddress;
-import java.net.Socket;
-
-import org.apache.http.HttpHost;
-import org.apache.http.conn.HttpHostConnectException;
-import org.apache.http.conn.OperatedClientConnection;
-import org.apache.http.conn.scheme.Scheme;
-import org.apache.http.conn.scheme.SchemeRegistry;
-import org.apache.http.conn.scheme.SocketFactory;
-import org.apache.http.impl.conn.DefaultClientConnectionOperator;
-import org.apache.http.params.HttpParams;
-import org.apache.http.protocol.HttpContext;
-
-public class MyDefaultClientConnectionOperator extends
-		DefaultClientConnectionOperator {
-
-	public MyDefaultClientConnectionOperator(SchemeRegistry schemes) {
-		super(schemes);
-	}
-	
-	@Override
-	public void openConnection(OperatedClientConnection conn, HttpHost target,
-			InetAddress local, HttpContext context, HttpParams params)
-			throws IOException {
-		if (conn == null) {
-            throw new IllegalArgumentException
-                ("Connection must not be null.");
-        }
-        if (target == null) {
-            throw new IllegalArgumentException
-                ("Target host must not be null.");
-        }
-        // local address may be null
-        //@@@ is context allowed to be null?
-        if (params == null) {
-            throw new IllegalArgumentException
-                ("Parameters must not be null.");
-        }
-        if (conn.isOpen()) {
-            throw new IllegalArgumentException
-                ("Connection must not be open.");
-        }
-
-        final Scheme schm = schemeRegistry.getScheme(target.getSchemeName());
-        final SocketFactory sf = schm.getSocketFactory();
-
-        Socket sock = sf.createSocket();
-        conn.opening(sock, target);
-	
-        try {
-        	Socket connsock = sf.connectSocket(sock, target.getHostName(),
-                    schm.resolvePort(target.getPort()),
-                    local, 0, params);
-        	
-        			if (sock != connsock) {
-		                sock = connsock;
-		                conn.opening(sock, target);
-		            }
-        } catch (ConnectException ex) {
-            throw new HttpHostConnectException(target, ex);
-        }
-        prepareSocket(sock, context, params);
-        conn.openCompleted(sf.isSecure(sock), params);
-	}
-
-}

Deleted: projects/android/trunk/Orbot/src/org/torproject/android/net/MyThreadSafeClientConnManager.java
===================================================================
--- projects/android/trunk/Orbot/src/org/torproject/android/net/MyThreadSafeClientConnManager.java	2011-02-09 05:03:20 UTC (rev 24203)
+++ projects/android/trunk/Orbot/src/org/torproject/android/net/MyThreadSafeClientConnManager.java	2011-02-09 21:11:53 UTC (rev 24204)
@@ -1,21 +0,0 @@
-package org.torproject.android.net;
-
-import org.apache.http.conn.ClientConnectionOperator;
-import org.apache.http.conn.scheme.SchemeRegistry;
-import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager;
-import org.apache.http.params.HttpParams;
-
-
-public class MyThreadSafeClientConnManager extends ThreadSafeClientConnManager {
-
-	public MyThreadSafeClientConnManager(HttpParams params, SchemeRegistry schreg) {
-		super(params, schreg);
-		
-	}
-
-	@Override
-	protected ClientConnectionOperator createConnectionOperator(
-			SchemeRegistry schreg) {
-		return new MyDefaultClientConnectionOperator(schreg);
-	}
-}

Deleted: projects/android/trunk/Orbot/src/org/torproject/android/net/SOCKSHttpClient.java
===================================================================
--- projects/android/trunk/Orbot/src/org/torproject/android/net/SOCKSHttpClient.java	2011-02-09 05:03:20 UTC (rev 24203)
+++ projects/android/trunk/Orbot/src/org/torproject/android/net/SOCKSHttpClient.java	2011-02-09 21:11:53 UTC (rev 24204)
@@ -1,71 +0,0 @@
-package org.torproject.android.net;
-
-import org.apache.http.HttpVersion;
-import org.apache.http.conn.ClientConnectionManager;
-import org.apache.http.conn.scheme.PlainSocketFactory;
-import org.apache.http.conn.scheme.Scheme;
-import org.apache.http.conn.scheme.SchemeRegistry;
-import org.apache.http.conn.ssl.SSLSocketFactory;
-import org.apache.http.impl.client.DefaultHttpClient;
-import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager;
-import org.apache.http.params.BasicHttpParams;
-import org.apache.http.params.HttpParams;
-import org.apache.http.params.HttpProtocolParams;
-
-public class SOCKSHttpClient extends DefaultHttpClient {
-
-	private final static String DEFAULT_HOST = "127.0.0.1";
-	private final static int DEFAULT_PORT = 9050;
-	
-	private static ClientConnectionManager ccm = null;
-	private static HttpParams params = null;
-	
-	public SOCKSHttpClient ()
-	{
-		
-       super(initConnectionManager(), initParams());
-
-
-	}
-	
-	private void setSystemProperties ()
-	{
-//       System.getProperties().put("socks.proxySet","true");
-  //     System.getProperties().put("socks.proxyHost",DEFAULT_HOST);
-	//	System.getProperties().put("socks.proxyPort", DEFAULT_PORT+"");
-
-	}
-	
-	private static ClientConnectionManager initConnectionManager ()
-	{
-		if (ccm == null)
-		{
-		SchemeRegistry supportedSchemes = new SchemeRegistry();
-		
-		
-		 supportedSchemes.register(new Scheme("http", 
-	                SocksSocketFactory.getSocketFactory(), 80));
-	    
-		 supportedSchemes.register(new Scheme("https", 
-	                ModSSLSocketFactory.getSocketFactory(), 443));
-	
-			ccm = new MyThreadSafeClientConnManager(initParams(), supportedSchemes);
-		}
-		
-      return ccm;
-	}
-	
-	private static HttpParams initParams ()
-	{
-	    if (params == null)
-	    {
-	      // prepare parameters
-	      params = new BasicHttpParams();
-	      HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
-	      HttpProtocolParams.setContentCharset(params, "UTF-8");
-	      HttpProtocolParams.setUseExpectContinue(params, true);
-	    }
-	    
-	    return params;
-	}
-}

Deleted: projects/android/trunk/Orbot/src/org/torproject/android/net/SocksClient.java
===================================================================
--- projects/android/trunk/Orbot/src/org/torproject/android/net/SocksClient.java	2011-02-09 05:03:20 UTC (rev 24203)
+++ projects/android/trunk/Orbot/src/org/torproject/android/net/SocksClient.java	2011-02-09 21:11:53 UTC (rev 24204)
@@ -1,146 +0,0 @@
-/* Copyright (c) 2009, Nathan Freitas, Orbot / The Guardian Project - http://openideals.com/guardian */
-/* See LICENSE for licensing information */
-
-/** SOCKS aware echo client*/
-
-package org.torproject.android.net;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.OutputStream;
-import java.net.InetAddress;
-import java.net.Socket;
-import java.net.UnknownHostException;
-
-import net.sourceforge.jsocks.socks.InetRange;
-import net.sourceforge.jsocks.socks.Proxy;
-import net.sourceforge.jsocks.socks.SocksException;
-import net.sourceforge.jsocks.socks.SocksSocket;
-
-import org.torproject.android.TorConstants;
-
-import android.util.Log;
-
-
-public class SocksClient implements Runnable {
-  
-	   @SuppressWarnings("unused")
-   private int port;
-	   
-	   @SuppressWarnings("unused")
-   private InetAddress hostIP;
-
-   private Socket ss;
-   private InputStream in;
-   private OutputStream out;
-
-   @SuppressWarnings("unused")
-private static final int BUF_SIZE = 1024;
-   private static final String IP_LOCALHOST = "127.0.0.1";
-   
-   public SocksClient(String host,int port) 
-	  throws IOException,UnknownHostException,SocksException{
-      this.port = port;
-
-      ss = new SocksSocket(host, port);
-      out = ss.getOutputStream();
-      in  = ss.getInputStream();
-      Log.d(getClass().getName(),"Connected...");
-      Log.d(getClass().getName(),"TO: "+host+":"+port);
-      Log.d(getClass().getName(),"ViaProxy: "+ss.getLocalAddress().getHostAddress()
-                                 +":"+ss.getLocalPort());
-
-   }
-
-   public void close()throws IOException{
-     ss.close();
-   }
-   public void send(String s) throws IOException{
-      out.write(s.getBytes());
-   }
-
-   public void run(){
-      byte[] buf = new byte[1024];
-      int bytes_read;
-      try{
-	  while((bytes_read = in.read(buf)) > 0){
-	     System.out.write(buf,0,bytes_read);
-	  }
-      }catch(IOException io_ex){
-	 io_ex.printStackTrace();
-      }
-   }
-
-   public static void usage(){
-      System.err.print(
-      "Usage: java SocksTest host port [socksHost socksPort]\n");
-   }
-
-
-   public static void main(String args[]){
-      int port;
-      String host;
-      int proxyPort;
-      String proxyHost;
-
-      if(args.length > 1 && args.length < 5){
-	 try{
-
-	     host = args[0];
-	     port = Integer.parseInt(args[1]);
-
-	     proxyPort =(args.length > 3)? Integer.parseInt(args[3])	     
-	                                 : 9050;
-
-	     host = args[0];
-	     proxyHost =(args.length > 2)? args[2]
-	                                 : IP_LOCALHOST;
-
-	     Proxy.setDefaultProxy(proxyHost,proxyPort,"KOUKY001");
-	     //Proxy.setDefaultProxy(proxyHost,proxyPort);
-	     InetRange inetRange = new InetRange();
-	     inetRange.add(InetAddress.getByName("localhost"));
-	     Proxy.getDefaultProxy().setDirect(inetRange);
-
-
-	     SocksClient st = new SocksClient(host,port);
-	     Thread thread = new Thread(st);
-	     thread.start();
-
-	     BufferedReader in = new BufferedReader(
-				 new InputStreamReader(System.in));
-             String s;
-
-             s = in.readLine();
-	     while(s != null){
-                st.send(s+"\r\n");
-		//try{
-		   //Thread.currentThread().sleep(10);
-		//}catch(InterruptedException i_ex){
-		//}
-                s = in.readLine();
-	     }
-	     st.close();
-	     System.exit(1);
-
-	 }catch(SocksException s_ex){
-	   System.err.println("SocksException:"+s_ex);
-	   s_ex.printStackTrace();
-	   System.exit(1); 
-	 }catch(IOException io_ex){
-	   io_ex.printStackTrace();
-	   System.exit(1);
-	 }catch(NumberFormatException num_ex){
-	   usage();
-	   num_ex.printStackTrace();
-	   System.exit(1);
-	 }
-
-      }else{
-	usage();
-      }
-   }
-
-}//End of class

Deleted: projects/android/trunk/Orbot/src/org/torproject/android/net/SocksSocketFactory.java
===================================================================
--- projects/android/trunk/Orbot/src/org/torproject/android/net/SocksSocketFactory.java	2011-02-09 05:03:20 UTC (rev 24203)
+++ projects/android/trunk/Orbot/src/org/torproject/android/net/SocksSocketFactory.java	2011-02-09 21:11:53 UTC (rev 24204)
@@ -1,141 +0,0 @@
-/**
- * Shadow - Anonymous web browser for Android devices
- * Copyright (C) 2009 Connell Gauld
- * 
- * Thanks to University of Cambridge,
- * 		Alastair Beresford and Andrew Rice
- * 
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * version 2 as published by the Free Software Foundation.
- * 
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
- */
-
-package org.torproject.android.net;
-
-import java.io.IOException;
-import java.net.InetAddress;
-import java.net.InetSocketAddress;
-import java.net.Socket;
-import java.net.UnknownHostException;
-
-import net.sourceforge.jsocks.socks.Socks5Proxy;
-import net.sourceforge.jsocks.socks.SocksException;
-import net.sourceforge.jsocks.socks.SocksSocket;
-
-
-import org.apache.http.conn.ConnectTimeoutException;
-import org.apache.http.conn.scheme.SocketFactory;
-import org.apache.http.params.HttpConnectionParams;
-import org.apache.http.params.HttpParams;
-
-import android.util.Log;
-
-
-/**
- * Provides sockets for an HttpClient connection.
- * @author cmg47
- *
- */
-public class SocksSocketFactory implements SocketFactory {
-
-	SocksSocket server = null;
-	private static Socks5Proxy sProxy = null;
-
-	private final static String DEFAULT_HOST = "127.0.0.1";
-	private final static int DEFAULT_PORT = 9050;
-	
-	/**
-	 * Construct a SocksSocketFactory that uses the provided SOCKS proxy.
-	 * @param proxyaddress the IP address of the SOCKS proxy
-	 * @param proxyport the port of the SOCKS proxy
-	 */
-	public SocksSocketFactory(String proxyaddress, int proxyport) {
-		
-
-		try {
-			sProxy = new Socks5Proxy(proxyaddress, proxyport);
-		} catch (UnknownHostException e) {
-			// TODO Auto-generated catch block
-			Log.d("TOR_SERVICE","SocksSF couldn't connect",e);
-		}
-		
-		sProxy.resolveAddrLocally(false);
-	
-
-	}
-	
-	public Socket connectSocket(Socket sock, String host, int port,
-			InetAddress localAddress, int localPort, HttpParams params) throws IOException,
-			UnknownHostException, ConnectTimeoutException {
-		
-		Log.d("TOR_SERVICE","SocksSocketFactory: connectSocket: " + host + ":" + port);
-		
-		if (host == null) {
-            throw new IllegalArgumentException("Target host may not be null.");
-        }
-        if (params == null) {
-            throw new IllegalArgumentException("Parameters may not be null.");
-        }
-
-     //   int timeout = HttpConnectionParams.getConnectionTimeout(params);
-        
-        // Pipe this socket over the proxy
-      //  sock = mSocksProxy.connectSocksProxy(sock, host, port, timeout);
-        
-        
-    
-		try {
-			sock =  new SocksSocket(sProxy,host, port);
-			
-
-			
-			sock.setSoTimeout(0); //indef
-			
-			
-			 if ((localAddress != null) || (localPort > 0)) {
-
-		            // we need to bind explicitly
-		            if (localPort < 0)
-		                localPort = 0; // indicates "any"
-
-		            InetSocketAddress isa =
-		                new InetSocketAddress(localAddress, localPort);
-		            sock.bind(isa);
-		        }
-
-			
-		} catch (SocksException e) {
-			Log.e("TOR_SERVICE","error connecting socks to" + host + ":" + port,e);
-		} catch (UnknownHostException e) {
-			Log.e("TOR_SERVICE","error connecting socks to" + host + ":" + port,e);
-		}
-		
-        return sock;
-		
-	}
-	
-    
-    
-	public Socket createSocket() throws IOException {
-		return new Socket();
-	}
-
-	public boolean isSecure(Socket sock) throws IllegalArgumentException {
-		return false;
-	}
-	
-	public static SocketFactory getSocketFactory ()
-	{
-		return new SocksSocketFactory (DEFAULT_HOST, DEFAULT_PORT);
-	}
-
-}

Modified: projects/android/trunk/Orbot/src/org/torproject/android/service/TorService.java
===================================================================
--- projects/android/trunk/Orbot/src/org/torproject/android/service/TorService.java	2011-02-09 05:03:20 UTC (rev 24203)
+++ projects/android/trunk/Orbot/src/org/torproject/android/service/TorService.java	2011-02-09 21:11:53 UTC (rev 24204)
@@ -294,6 +294,8 @@
     
     private void killTorProcess () throws Exception
     {
+		//android.os.Debug.waitForDebugger();
+    	
     	StringBuilder log = new StringBuilder();
     	int procId = -1;
     	
@@ -301,9 +303,9 @@
 		{
     		logNotice("Using control port to shutdown Tor");
     		
+    		
 			try {
 				logNotice("sending SHUTDOWN signal to Tor process");
-				
 				conn.shutdownTor("SHUTDOWN");
 				
 				
@@ -313,30 +315,18 @@
 			
 			conn = null;
 		}
-    	else
-    	{
     	
-	    	
-	    	logNotice("Checking for existing Tor process via path: " + torBinaryPath);
-			procId = TorServiceUtils.findProcessId(torBinaryPath);
-	
-			while (procId != -1)
-			{
-				
-				logNotice("Found Tor PID=" + procId + " - killing now...");
-				
-				String[] cmd = { SHELL_CMD_KILL + ' ' + procId + "" };
-				TorServiceUtils.doShellCommand(cmd,log, false, false);
-	
-				procId = TorServiceUtils.findProcessId(torBinaryPath);
-			}
-    	
-    	}
-		
-    	logNotice("Checking for existing Privoxy process via path: " + privoxyPath);
-		procId = TorServiceUtils.findProcessId(privoxyPath);
+		while ((procId = TorServiceUtils.findProcessId(torBinaryPath)) != -1)
+		{
+			
+			logNotice("Found Tor PID=" + procId + " - killing now...");
+			
+			String[] cmd = { SHELL_CMD_KILL + ' ' + procId + "" };
+			TorServiceUtils.doShellCommand(cmd,log, false, false);
 
-		while (procId != -1)
+		}
+
+		while ((procId = TorServiceUtils.findProcessId(privoxyPath)) != -1)
 		{
 			
 			logNotice("Found Privoxy PID=" + procId + " - killing now...");
@@ -344,7 +334,6 @@
 
 			TorServiceUtils.doShellCommand(cmd,log, false, false);
 
-			procId = TorServiceUtils.findProcessId(privoxyPath);
 		}
 		
     }
@@ -444,7 +433,6 @@
     private boolean checkTorBinaries () throws Exception
     {
     	
-    	
 		appHome = "/data/data/" + TOR_APP_USERNAME + "/";
 		//appHome = getApplicationContext().getFilesDir().getAbsolutePath();
     	
@@ -1353,8 +1341,11 @@
 		boolean enableTransparentProxy = prefs.getBoolean("pref_transparent", false);
 		boolean transProxyAll = prefs.getBoolean("pref_transparent_all", false);
 	
+		boolean transProxyPortFallback = prefs.getBoolean("pref_transparent_port_fallback", false);
+		
     	logNotice ("Transparent Proxying: " + enableTransparentProxy);
     	
+    	String portProxyList = prefs.getString("pref_port_list", "");
 
 		if (enabled)
 		{
@@ -1371,6 +1362,16 @@
 				
 					logNotice ("TorTransProxy resp code: " + code);
 					
+					//this is for Androids w/o owner module support as a circumvention only fallback
+					if (transProxyPortFallback)
+					{
+						StringTokenizer st = new StringTokenizer(portProxyList, ",");
+						
+						while (st.hasMoreTokens())
+							TorTransProxy.setTransparentProxyingByPort(this, Integer.parseInt(st.nextToken()));
+						
+					}
+					
 					return true;
 				
 				

Modified: projects/android/trunk/Orbot/src/org/torproject/android/service/TorServiceConstants.java
===================================================================
--- projects/android/trunk/Orbot/src/org/torproject/android/service/TorServiceConstants.java	2011-02-09 05:03:20 UTC (rev 24203)
+++ projects/android/trunk/Orbot/src/org/torproject/android/service/TorServiceConstants.java	2011-02-09 21:11:53 UTC (rev 24204)
@@ -6,7 +6,7 @@
 
 	public final static String TAG = "ORBOT";
 
-	public static boolean LOG_OUTPUT_TO_DEBUG = false;
+	public static boolean LOG_OUTPUT_TO_DEBUG = true;
 
 	public final static String TOR_APP_USERNAME = "org.torproject.android";
 	
@@ -31,7 +31,7 @@
 		
 	//various console cmds
 	public final static String SHELL_CMD_CHMOD = "chmod";
-	public final static String SHELL_CMD_KILL = "kill";
+	public final static String SHELL_CMD_KILL = "kill -9";
 	public final static String SHELL_CMD_RM = "rm";
 	public final static String SHELL_CMD_PS = "ps";
 	public final static String SHELL_CMD_PIDOF = "pidof";

Modified: projects/android/trunk/Orbot/src/org/torproject/android/service/TorServiceUtils.java
===================================================================
--- projects/android/trunk/Orbot/src/org/torproject/android/service/TorServiceUtils.java	2011-02-09 05:03:20 UTC (rev 24203)
+++ projects/android/trunk/Orbot/src/org/torproject/android/service/TorServiceUtils.java	2011-02-09 21:11:53 UTC (rev 24204)
@@ -3,6 +3,7 @@
 package org.torproject.android.service;
 
 import java.io.BufferedReader;
+import java.io.File;
 import java.io.IOException;
 import java.io.InputStreamReader;
 import java.io.OutputStreamWriter;
@@ -66,7 +67,6 @@
 			try
 			{
 				procId = findProcessIdWithPS(command);
-
 			}
 			catch (Exception e2)
 			{
@@ -87,23 +87,27 @@
 		    	
 		Process procPs = null;
 		
-        procPs = r.exec(SHELL_CMD_PIDOF);
+		String baseName = new File(command).getName();
+		//fix contributed my mikos on 2010.12.10
+		procPs = r.exec(new String[] {SHELL_CMD_PIDOF, baseName});
+        //procPs = r.exec(SHELL_CMD_PIDOF);
             
         BufferedReader reader = new BufferedReader(new InputStreamReader(procPs.getInputStream()));
         String line = null;
-        
 
         while ((line = reader.readLine())!=null)
         {
-        	if (line.indexOf(command)!=-1)
+        
+        	try
         	{
-
         		//this line should just be the process id
         		procId = Integer.parseInt(line.trim());
-
-        		
         		break;
         	}
+        	catch (NumberFormatException e)
+        	{
+        		logNotice("unable to parse process pid: " + line);
+        	}
         }
             
        
@@ -128,7 +132,7 @@
         
         while ((line = reader.readLine())!=null)
         {
-        	if (line.indexOf(command)!=-1)
+        	if (line.indexOf(' ' + command)!=-1)
         	{
         		
         		StringTokenizer st = new StringTokenizer(line," ");

Modified: projects/android/trunk/Orbot/src/org/torproject/android/service/TorTransProxy.java
===================================================================
--- projects/android/trunk/Orbot/src/org/torproject/android/service/TorTransProxy.java	2011-02-09 05:03:20 UTC (rev 24203)
+++ projects/android/trunk/Orbot/src/org/torproject/android/service/TorTransProxy.java	2011-02-09 21:11:53 UTC (rev 24204)
@@ -42,7 +42,7 @@
 				out = out.substring(out.indexOf(" v")+2);
 				out = out.substring(0,out.indexOf(":"));
 				
-				return out;
+				return out.trim();
 			}
 			
 			
@@ -221,6 +221,15 @@
 				
 				logNotice("enabling transproxy for app: " + apps[i].getUsername() + "(" + apps[i].getUid() + ")");
 			 
+				/*
+				 * iptables -t nat -A OUTPUT -p tcp -m owner --uid-owner anonymous -m tcp --syn -j REDIRECT --to-ports 9040 
+iptables -t nat -A OUTPUT -p udp -m owner --uid-owner anonymous -m udp --dport 53 -j REDIRECT --to-ports 53 
+iptables -t nat -A OUTPUT -m owner --uid-owner anonymous -j DROP
+				 */
+				
+				
+				//iptables -t nat -A output -p tcp -m owner --uid-owner 100 -m tcp --sync -j REDIRECT --to-ports 9040
+				
 				//TCP
 				script.append(baseDir);
 				script.append("iptables -t nat");
@@ -243,7 +252,7 @@
 				script.append("iptables -t nat");
 				script.append(" -A OUTPUT -p udp -m owner --uid-owner ");
 				script.append(apps[i].getUid());
-				script.append(" --dport "); 
+				script.append(" -m udp --dport "); 
 				script.append(STANDARD_DNS_PORT);
 				
 				if (ipTablesOld)
@@ -256,15 +265,14 @@
 				script.append(" || exit\n");
 				
 				
-				//EVERYTHING ELSE UDP - DROP!
+				//EVERYTHING ELSE - DROP!
 				if (ipTablesOld) //for some reason this doesn't work on iptables 1.3.7
 				{
 					
-					script.append(baseDir);
-					script.append("iptables");
-					script.append(" -t nat -A OUTPUT -m owner --uid-owner ");
+					script.append("iptables -t nat");
+					script.append(" -A OUTPUT -m owner --uid-owner ");
 					script.append(apps[i].getUid());
-					script.append(" -j DROP"); //drop all other packets as Tor won't handle them
+					script.append(" -j DROP"); 
 					script.append(" || exit\n");
 				}	
 				else
@@ -310,5 +318,92 @@
 		return code;
     }	
 	
+	public static int setTransparentProxyingByPort(Context context, int port) throws Exception
+	{
 
+		//android.os.Debug.waitForDebugger();
+		
+		//redirectDNSResolvConf(); //not working yet
+		
+		String baseDir = findBaseDir();
+
+		String iptablesVersion = getIPTablesVersion();
+		logNotice( "iptables version: " + iptablesVersion);
+		
+		boolean ipTablesOld = false;
+		if (iptablesVersion != null && iptablesVersion.startsWith("1.3")){
+			ipTablesOld = true;
+		}
+		
+    	StringBuilder script = new StringBuilder();
+    	
+    	StringBuilder res = new StringBuilder();
+    	int code = -1;
+    	
+    	String[] cmdFlush = {script.toString()};
+		code = TorServiceUtils.doShellCommand(cmdFlush, res, true, true);
+		//String msg = res.toString(); //get stdout from command
+		
+		script = new StringBuilder();
+		
+		//TCP
+		//iptables -t nat -A PREROUTING -i eth0 -p tcp --dport $srcPortNumber -j REDIRECT --to-port $dstPortNumbe
+
+		script.append(baseDir);
+		script.append("iptables -t nat");
+		script.append(" -A OUTPUT -p tcp");
+		script.append(" --dport ");
+		script.append(port);
+		//script.append(" -m tcp --syn");
+		
+		if (ipTablesOld)
+			script.append(" -j DNAT --to 127.0.0.1:");
+		else
+			script.append(" -j REDIRECT --to-ports ");
+		
+		script.append(TOR_TRANSPROXY_PORT);
+		
+		script.append(" || exit\n");
+		
+		script.append(baseDir);
+		script.append("iptables -t nat");
+		script.append(" -A OUTPUT -p udp");
+		script.append(" --dport ");
+		script.append(port);
+		
+		if (ipTablesOld)
+			script.append(" -j DNAT --to 127.0.0.1:");
+		else
+			script.append(" -j REDIRECT --to-ports ");
+		
+		script.append(TOR_TRANSPROXY_PORT);
+		
+		script.append(" || exit\n");
+		
+		//DNS
+		script.append(baseDir);
+		script.append("iptables -t nat");
+		script.append(" -A OUTPUT -p udp ");
+		script.append(" -m udp --dport "); 
+		script.append(STANDARD_DNS_PORT);
+		
+		if (ipTablesOld)
+			script.append(" -j DNAT --to 127.0.0.1:");
+		else
+			script.append(" -j REDIRECT --to-ports ");
+		
+		script.append(TOR_DNS_PORT);
+		
+		script.append(" || exit\n");
+		
+    	
+    	String[] cmdAdd = {script.toString()};    	
+		code = TorServiceUtils.doShellCommand(cmdAdd, res, true, true);
+		String msg = res.toString();
+		logNotice(cmdAdd[0] + ";errCode=" + code + ";resp=" + msg);
+		
+		return code;
+    }	
+	
+
 }



More information about the tor-commits mailing list