Changeset b503f03 for core


Ignore:
Timestamp:
Mar 27, 2017 2:10:01 PM (3 years ago)
Author:
zzz <zzz@…>
Branches:
master
Children:
c199124
Parents:
cff8eaf
Message:

Blockfile: Include authentication strings in exports

Location:
core/java/src/net/i2p/client/naming
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • core/java/src/net/i2p/client/naming/BlockfileNamingService.java

    rcff8eaf rb503f03  
    1616import java.io.InputStreamReader;
    1717import java.io.IOException;
     18import java.io.Writer;
    1819import java.util.ArrayList;
    1920import java.util.Collections;
     
    12931294
    12941295    /**
     1296     *  Export in a hosts.txt format.
     1297     *  Output is sorted.
     1298     *  Caller must close writer.
     1299     *
     1300     *  @param options If non-null and contains the key "list", get
     1301     *                from that list (default "hosts.txt", NOT all lists)
     1302     *                Key "search": return only those matching substring
     1303     *                Key "startsWith": return only those starting with
     1304     *                                  ("[0-9]" allowed)
     1305     *                Key "beginWith": start here in the iteration
     1306     *  @since 0.9.30 override NamingService to add stored authentication strings
     1307     */
     1308    @Override
     1309    public void export(Writer out, Properties options) throws IOException {
     1310        String listname = FALLBACK_LIST;
     1311        String search = null;
     1312        String startsWith = null;
     1313        String beginWith = null;
     1314        if (options != null) {
     1315            String ln = options.getProperty("list");
     1316            if (ln != null)
     1317                listname = ln;
     1318            search = options.getProperty("search");
     1319            startsWith = options.getProperty("startsWith");
     1320            beginWith = options.getProperty("beginWith");
     1321            if (beginWith == null && startsWith != null) {
     1322                if (startsWith.equals("[0-9]"))
     1323                    beginWith = "0";
     1324                else
     1325                    beginWith = startsWith;
     1326            }
     1327        }
     1328        out.write("# Address book: ");
     1329        out.write(getName());
     1330        out.write(" (" + listname + ')');
     1331        final String nl = System.getProperty("line.separator", "\n");
     1332        out.write(nl);
     1333        out.write("# Exported: ");
     1334        out.write((new Date()).toString());
     1335        out.write(nl);
     1336        synchronized(_bf) {
     1337            if (_isClosed)
     1338                return;
     1339            try {
     1340                SkipList<String, DestEntry> sl = _bf.getIndex(listname, _stringSerializer, _destSerializer);
     1341                if (sl == null) {
     1342                    if (_log.shouldLog(Log.WARN))
     1343                        _log.warn("No skiplist found for lookup in " + listname);
     1344                    return;
     1345                }
     1346                if (beginWith == null && search == null) {
     1347                    int sz = sl.size();
     1348                    if (sz <= 0) {
     1349                        out.write("# No entries");
     1350                        out.write(nl);
     1351                        return;
     1352                    }
     1353                    if (sz > 1) {
     1354                        // actually not right due to multidest
     1355                        out.write("# " + sz + " entries");
     1356                        out.write(nl);
     1357                    }
     1358                }
     1359                SkipIterator<String, DestEntry> iter;
     1360                if (beginWith != null)
     1361                    iter = sl.find(beginWith);
     1362                else
     1363                    iter = sl.iterator();
     1364                int cnt = 0;
     1365                while (iter.hasNext()) {
     1366                    String key = iter.nextKey();
     1367                    if (startsWith != null) {
     1368                        if (startsWith.equals("[0-9]")) {
     1369                            if (key.charAt(0) > '9')
     1370                                break;
     1371                        } else if (!key.startsWith(startsWith)) {
     1372                            break;
     1373                        }
     1374                    }
     1375                    DestEntry de = iter.next();
     1376                    if (!validate(key, de, listname))
     1377                        continue;
     1378                    if (search != null && key.indexOf(search) < 0)
     1379                        continue;
     1380                    int dsz = de.destList != null ? de.destList.size() : 1;
     1381                    // new non-DSA dest is put first, so put in reverse
     1382                    // order so importers will see the older dest first
     1383                    for (int i = dsz - 1; i >= 0; i--) {
     1384                        Properties p;
     1385                        Destination d;
     1386                        if (i == 0) {
     1387                            p = de.props;
     1388                            d = de.dest;
     1389                        } else {
     1390                            p = de.propsList.get(i);
     1391                            d = de.destList.get(i);
     1392                        }
     1393                        out.write(key);
     1394                        out.write('=');
     1395                        out.write(d.toBase64());
     1396                        if (p != null)
     1397                            SingleFileNamingService.writeOptions(p, out);
     1398                        out.write(nl);
     1399                        cnt++;
     1400                    }
     1401                }
     1402                if (beginWith != null || search != null) {
     1403                    if (cnt <= 0) {
     1404                        out.write("# No entries");
     1405                        out.write(nl);
     1406                        return;
     1407                    }
     1408                    if (cnt > 1) {
     1409                        out.write("# " + cnt + " entries");
     1410                        out.write(nl);
     1411                    }
     1412                }
     1413            } catch (RuntimeException re) {
     1414                throw new IOException("DB lookup error", re);
     1415            } finally {
     1416                deleteInvalid();
     1417            }
     1418        }
     1419    }
     1420
     1421    /**
    12951422     * @param options If non-null and contains the key "list", get
    12961423     *                from that list (default "hosts.txt", NOT all lists)
  • core/java/src/net/i2p/client/naming/SingleFileNamingService.java

    rcff8eaf rb503f03  
    269269     *
    270270     *  @param options non-null
    271      *  @since 0.9.26
    272      */
    273     private static void writeOptions(Properties options, Writer out) throws IOException {
     271     *  @since 0.9.26, package private since 0.9.30
     272     */
     273    static void writeOptions(Properties options, Writer out) throws IOException {
    274274        boolean started = false;
    275275        for (Map.Entry<Object, Object> e : options.entrySet()) {
Note: See TracChangeset for help on using the changeset viewer.