Changeset d054c6bc


Ignore:
Timestamp:
Dec 5, 2018 1:50:07 PM (16 months ago)
Author:
zzz <zzz@…>
Branches:
master
Children:
926bce7
Parents:
2876da2
Message:

I2CP: Set offline keys in generated LS2
(router side to follow)
Propagate error from disconnect message to session listener
Refactor RLSMH options

Location:
core/java/src/net/i2p/client/impl
Files:
3 edited

Legend:

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

    r2876da2 rd054c6bc  
    149149    protected final Object _leaseSetWait = new Object();
    150150
     151    /** set in propogateError(), sync with _stateLock */
     152    private String _errorMessage;
     153    private Throwable _errorCause;
     154
    151155    /**
    152156     *  @since 0.9.8
     
    695699            // protect w/ closeSocket()
    696700            synchronized(_stateLock) {
     701                _errorMessage = null;
     702                _errorCause = null;
    697703                // If we are in the router JVM, connect using the internal queue
    698704                if (_context.isRouterContext()) {
     
    781787                }
    782788                // if we got a disconnect message while waiting
    783                 if (isClosed())
    784                     throw new IOException("Disconnected from router while waiting for tunnels");
     789                synchronized (_stateLock) {
     790                    if (isClosed()) {
     791                        String msg = "Disconnected from router while waiting for tunnels";
     792                        if (_errorMessage != null)
     793                            msg += ": " + _errorMessage;
     794                        IOException ioe =  new IOException(msg);
     795                        if (_errorCause != null)
     796                            ioe.initCause(_errorCause);
     797                        throw ioe;
     798                    }
     799                }
    785800            }
    786801            if (_log.shouldLog(Log.INFO)) {
     
    12591274            _log.log(level, getPrefix() + msgpfx + msg, error);
    12601275        if (_sessionListener != null) _sessionListener.errorOccurred(this, msg, error);
     1276        // Save for throwing out of connect()
     1277        _errorMessage = msg;
     1278        _errorCause = error;
    12611279    }
    12621280
  • core/java/src/net/i2p/client/impl/RequestLeaseSetMessageHandler.java

    r2876da2 rd054c6bc  
    5050    private final Map<Destination, LeaseInfo> _existingLeaseSets;
    5151
     52    // LS 1
     53    private static final String PROP_LS_ENCRYPT = "i2cp.encryptLeaseSet";
     54    private static final String PROP_LS_KEY = "i2cp.leaseSetKey";
     55    private static final String PROP_LS_PK = "i2cp.leaseSetPrivateKey";
     56    private static final String PROP_LS_SPK = "i2cp.leaseSetSigningPrivateKey";
     57    // LS 2
     58    private static final String PROP_LS_TYPE = "i2cp.leaseSetType";
     59    private static final String PROP_LS_ENCTYPE = "i2cp.leaseSetEncType";
     60
    5261    public RequestLeaseSetMessageHandler(I2PAppContext context) {
    5362        this(context, RequestLeaseSetMessage.MESSAGE_TYPE);
     
    7180        if (!session.supportsLS2())
    7281            return false;
    73         String s = session.getOptions().getProperty("crypto.encType");
     82        if (session.isOffline())
     83            return true;
     84        String s = session.getOptions().getProperty(PROP_LS_ENCTYPE);
    7485        if (s != null) {
    7586            EncType type = EncType.parseEncType(s);
     
    7788                return true;
    7889        }
    79         s = session.getOptions().getProperty("i2cp.leaseSetType");
     90        s = session.getOptions().getProperty(PROP_LS_TYPE);
    8091        if (s != null) {
    8192            try {
     
    118129        if (li == null) {
    119130            // [enctype:]b64 of private key
    120             String spk = session.getOptions().getProperty("i2cp.leaseSetPrivateKey");
     131            String spk = session.getOptions().getProperty(PROP_LS_PK);
    121132            // [sigtype:]b64 of private key
    122             String sspk = session.getOptions().getProperty("i2cp.leaseSetSigningPrivateKey");
     133            String sspk = session.getOptions().getProperty(PROP_LS_SPK);
    123134            PrivateKey privKey = null;
    124135            SigningPrivateKey signingPrivKey = null;
     
    179190            } else {
    180191                EncType type = EncType.ELGAMAL_2048;
    181                 String senc = session.getOptions().getProperty("crypto.encType");
     192                String senc = session.getOptions().getProperty(PROP_LS_ENCTYPE);
    182193                if (senc != null) {
    183194                    EncType newtype = EncType.parseEncType(senc);
     
    216227        else
    217228            opts = session.getOptions();
    218         boolean encrypt = Boolean.parseBoolean(opts.getProperty("i2cp.encryptLeaseSet"));
    219         String sk = opts.getProperty("i2cp.leaseSetKey");
     229        boolean encrypt = Boolean.parseBoolean(opts.getProperty(PROP_LS_ENCRYPT));
     230        String sk = opts.getProperty(PROP_LS_KEY);
    220231        Hash h = dest.calculateHash();
    221232        if (encrypt && sk != null) {
     
    231242        } else {
    232243            _context.keyRing().remove(h);
     244        }
     245        // offline keys
     246        if (session.isOffline()) {
     247            LeaseSet2 ls2 = (LeaseSet2) leaseSet;
     248            boolean ok = ls2.setOfflineSignature(session.getOfflineExpiration(), session.getTransientSigningPublicKey(),
     249                                                 session.getOfflineSignature());
     250            if (!ok) {
     251                session.propogateError("Bad offline signature", new Exception());
     252                // TODO just let the router handle it for now
     253            }
    233254        }
    234255        try {
  • core/java/src/net/i2p/client/impl/SetDateMessageHandler.java

    r2876da2 rd054c6bc  
    3535        if (!_context.isRouterContext())
    3636            Clock.getInstance().setNow(msg.getDate().getTime());
    37         // TODO - save router's version string for future reference
     37        // This saves the various support capabilities based on
     38        // the router's version string for future reference
    3839        session.dateUpdated(msg.getVersion());
     40        if (session.isOffline() && !session.supportsLS2()) {
     41            // TODO check other options also? see RLSMH.requiresLS2()
     42            session.propogateError("Router does not support offline keys", new Exception());
     43            session.destroySession(false);
     44        }
    3945    }
    4046}
Note: See TracChangeset for help on using the changeset viewer.