[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[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)
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@xxxxxxxxxxxxxx</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;
+ }
+
+
}