Changeset 2681c4b


Ignore:
Timestamp:
Jul 7, 2015 1:35:55 PM (5 years ago)
Author:
zzz <zzz@…>
Branches:
master
Children:
6cb3d1d3
Parents:
05959d5
Message:

Streaming: New config to add to DSA-only list

File:
1 edited

Legend:

Unmodified
Added
Removed
  • apps/streaming/java/src/net/i2p/client/streaming/impl/I2PSocketManagerFull.java

    r05959d5 r2681c4b  
    1515import java.util.Properties;
    1616import java.util.Set;
     17import java.util.StringTokenizer;
    1718import java.util.concurrent.atomic.AtomicBoolean;
    1819import java.util.concurrent.atomic.AtomicInteger;
     
    107108    }
    108109
     110    /** cache of the property to detect changes */
     111    private static volatile String _userDsaList = "";
     112    private static final Set<Hash> _userDsaOnly = new ConcurrentHashSet<Hash>(4);
     113    private static final String PROP_DSALIST = "i2p.streaming.dsalist";
     114
    109115    /**
    110116     * How long to wait for the client app to accept() before sending back CLOSE?
     
    479485        I2PSession session = _session;
    480486        if (!_subsessions.isEmpty()) {
     487            updateUserDsaList();
    481488            Hash h = peer.calculateHash();
    482             if (_dsaOnly.contains(h)) {
     489            if (_dsaOnly.contains(h) || (!_userDsaOnly.isEmpty() && _userDsaOnly.contains(h))) {
    483490                // FIXME just taking the first one for now
    484491                for (I2PSession sess : _subsessions) {
     
    502509        }
    503510        return socket;
     511    }
     512
     513    /**
     514     * Update the global user DSA-only list.
     515     * This does not affect the hardcoded DSA_ONLY_HASHES list above,
     516     * the user can only add, not remove.
     517     *
     518     * @since 0.9.21
     519     */
     520    private void updateUserDsaList() {
     521        String hashes = _context.getProperty(PROP_DSALIST, "");
     522        if (!_userDsaList.equals(hashes)) {
     523            // rebuild _userDsaOnly when property changes
     524            synchronized(_userDsaOnly) {
     525                if (hashes.length() > 0) {
     526                    Set<Hash> newSet = new HashSet<Hash>();
     527                    StringTokenizer tok = new StringTokenizer(hashes, ",; ");
     528                    while (tok.hasMoreTokens()) {
     529                        String hashstr = tok.nextToken();
     530                        Hash hh = ConvertToHash.getHash(hashstr);
     531                        if (hh != null)
     532                            newSet.add(hh);
     533                        else
     534                            _log.error("Bad " + PROP_DSALIST + " entry: " + hashstr);
     535                    }
     536                    _userDsaOnly.addAll(newSet);
     537                    _userDsaOnly.retainAll(newSet);
     538                    _userDsaList = hashes;
     539                } else {
     540                    _userDsaOnly.clear();
     541                    _userDsaList = "";
     542                }
     543            }
     544        }
    504545    }
    505546
Note: See TracChangeset for help on using the changeset viewer.