Changeset c5432a2


Ignore:
Timestamp:
May 22, 2016 1:18:16 AM (5 years ago)
Author:
str4d <str4d@…>
Branches:
master
Children:
63260aa, e518e67
Parents:
3afe04d
Message:

Dynamically load domain socket code

Files:
2 deleted
2 edited

Legend:

Unmodified
Added
Removed
  • core/java/src/net/i2p/client/impl/I2PSessionImpl.java

    r3afe04d rc5432a2  
    1515import java.io.InputStream;
    1616import java.io.OutputStream;
     17import java.lang.reflect.Constructor;
     18import java.lang.reflect.InvocationTargetException;
     19import java.lang.reflect.Method;
    1720import java.net.Socket;
    1821import java.net.UnknownHostException;
     
    3033import net.i2p.CoreVersion;
    3134import net.i2p.I2PAppContext;
    32 import net.i2p.client.DomainSocketFactory;
    3335import net.i2p.client.I2PClient;
    3436import net.i2p.client.I2PSession;
     
    598600                } else {
    599601                    if (SystemVersion.isAndroid() &&
    600                             Boolean.parseBoolean(_options.getProperty(PROP_DOMAIN_SOCKET))) {
    601                         final DomainSocketFactory fact = new DomainSocketFactory(_context);
    602                         _socket = fact.createSocket(DomainSocketFactory.I2CP_SOCKET_ADDRESS);
     602                            _options.getProperty(PROP_DOMAIN_SOCKET) != null) {
     603                        try {
     604                            Class<?> clazz = Class.forName("net.i2p.client.DomainSocketFactory");
     605                            Constructor<?> ctor = clazz.getDeclaredConstructor(I2PAppContext.class);
     606                            Object fact = ctor.newInstance(_context);
     607                            Method createSocket = clazz.getDeclaredMethod("createSocket", String.class);
     608                            _socket = (Socket) createSocket.invoke(fact, _options.getProperty(PROP_DOMAIN_SOCKET));
     609                        } catch (ClassNotFoundException e) {
     610                            throw new I2PSessionException("Cannot load DomainSocketFactory", e);
     611                        } catch (NoSuchMethodException e) {
     612                            throw new I2PSessionException("Cannot load DomainSocketFactory", e);
     613                        } catch (InstantiationException e) {
     614                            throw new I2PSessionException("Cannot load DomainSocketFactory", e);
     615                        } catch (IllegalAccessException e) {
     616                            throw new I2PSessionException("Cannot load DomainSocketFactory", e);
     617                        } catch (InvocationTargetException e) {
     618                            throw new I2PSessionException("Cannot load DomainSocketFactory", e);
     619                        }
    603620                    } else if (Boolean.parseBoolean(_options.getProperty(PROP_ENABLE_SSL))) {
    604621                        try {
     
    685702                msg = "Failed to build tunnels";
    686703            else if (SystemVersion.isAndroid() &&
    687                     Boolean.parseBoolean(_options.getProperty(PROP_DOMAIN_SOCKET)))
    688                 msg = "Failed to bind to the router and build tunnels";
     704                    _options.getProperty(PROP_DOMAIN_SOCKET) != null)
     705                msg = "Failed to bind to the router on " + _options.getProperty(PROP_DOMAIN_SOCKET) + " and build tunnels";
    689706            else
    690707                msg = "Cannot connect to the router on " + _hostname + ':' + _portNum + " and build tunnels";
  • router/java/src/net/i2p/router/client/ClientManager.java

    r3afe04d rc5432a2  
    1111import java.io.IOException;
    1212import java.io.Writer;
     13import java.lang.reflect.Constructor;
     14import java.lang.reflect.InvocationTargetException;
    1315import java.util.ArrayList;
    1416import java.util.Collections;
     
    124126        ClientListenerRunner listener;
    125127        if (SystemVersion.isAndroid()) {
    126             listener = new DomainClientListenerRunner(_ctx, this);
    127             Thread t = new I2PThread(listener, "DomainClientListener", true);
    128             t.start();
    129             _listeners.add(listener);
     128            try {
     129                Class<? extends ClientListenerRunner> clazz = Class.forName(
     130                        "net.i2p.router.client.DomainClientListenerRunner"
     131                    ).asSubclass(ClientListenerRunner.class);
     132                Constructor<? extends ClientListenerRunner> ctor =
     133                    clazz.getDeclaredConstructor(RouterContext.class,
     134                                                 ClientManager.class);
     135                listener = ctor.newInstance(_ctx, this);
     136                Thread t = new I2PThread(listener, "DomainClientListener", true);
     137                t.start();
     138                _listeners.add(listener);
     139            } catch (ClassNotFoundException e) {
     140                _log.warn("Could not find DomainClientListenerRunner class", e);
     141            } catch (ClassCastException e) {
     142                _log.error("Error creating DomainClientListenerRunner", e);
     143            } catch (NoSuchMethodException e) {
     144                _log.error("Error creating DomainClientListenerRunner", e);
     145            } catch (InstantiationException e) {
     146                _log.error("Error creating DomainClientListenerRunner", e);
     147            } catch (IllegalAccessException e) {
     148                _log.error("Error creating DomainClientListenerRunner", e);
     149            } catch (InvocationTargetException e) {
     150                _log.error("Error creating DomainClientListenerRunner", e);
     151            }
    130152        }
    131153        if (!_ctx.getBooleanProperty(PROP_DISABLE_EXTERNAL)) {
Note: See TracChangeset for help on using the changeset viewer.