Changeset fc8b7276


Ignore:
Timestamp:
Apr 25, 2016 7:25:30 PM (4 years ago)
Author:
zzz <zzz@…>
Branches:
master
Children:
6a71c23
Parents:
0ac83bd
Message:

NamingService?, BFNS: Add API methods to lookup all reverse entries
Addressbook: Use new API methods to simplify delete-all code
i2ptunnel: Output full authentication line
HostTxtEntry?: More tweaks for i2ptunnel

Files:
5 edited

Legend:

Unmodified
Added
Removed
  • apps/addressbook/java/src/net/i2p/addressbook/Daemon.java

    r0ac83bd rfc8b7276  
    575575                                        }
    576576                                        // reverse lookup, delete all
    577                                         // There's no NamingService API to get a list of all reverse
    578                                         String rev;
    579                                         String rev2 = null;
    580                                         while ((rev = router.reverseLookup(pod)) != null) {
    581                                             // prevent getting stuck from buggy NS
    582                                             if (rev.equals(rev2))
    583                                                 break;
    584                                             rev2 = rev;
    585                                             // forward check in case hash collision or something
    586                                             List<Destination> fwd = router.lookupAll(rev);
    587                                             if (!fwd.contains(pod))
    588                                                 break;  // can't go around again, fail
    589                                             if (knownNames != null)
    590                                                 knownNames.remove(rev);
    591                                             boolean success = router.remove(rev, pod);
    592                                             if (success)
    593                                                 deleted++;
    594                                             if (log != null) {
     577                                        List<String> revs = router.reverseLookupAll(pod);
     578                                        if (revs != null) {
     579                                            for (String rev : revs) {
     580                                                if (knownNames != null)
     581                                                    knownNames.remove(rev);
     582                                                boolean success = router.remove(rev, pod);
    595583                                                if (success)
    596                                                     log.append("Removed: " + rev +
    597                                                                " as requested" +
    598                                                                ". From: " + addressbook.getLocation());
    599                                                 else
    600                                                     log.append("Remove failed for: " + rev +
    601                                                                " as requested" +
    602                                                                ". From: " + addressbook.getLocation());
    603                                             }
    604                                             // now update the published addressbook
    605                                             if (published != null) {
    606                                                 if (publishedNS == null)
    607                                                     publishedNS = new SingleFileNamingService(I2PAppContext.getGlobalContext(), published.getAbsolutePath());
    608                                                 success = publishedNS.remove(rev, pod);
    609                                                 if (log != null && !success)
    610                                                     log.append("Remove from published address book " + published.getAbsolutePath() + " failed for " + rev);
     584                                                    deleted++;
     585                                                if (log != null) {
     586                                                    if (success)
     587                                                        log.append("Removed: " + rev +
     588                                                                   " as requested" +
     589                                                                   ". From: " + addressbook.getLocation());
     590                                                    else
     591                                                        log.append("Remove failed for: " + rev +
     592                                                                   " as requested" +
     593                                                                   ". From: " + addressbook.getLocation());
     594                                                }
     595                                                // now update the published addressbook
     596                                                if (published != null) {
     597                                                    if (publishedNS == null)
     598                                                        publishedNS = new SingleFileNamingService(I2PAppContext.getGlobalContext(), published.getAbsolutePath());
     599                                                    success = publishedNS.remove(rev, pod);
     600                                                    if (log != null && !success)
     601                                                        log.append("Remove from published address book " + published.getAbsolutePath() + " failed for " + rev);
     602                                                }
    611603                                            }
    612604                                        }
  • apps/i2ptunnel/jsp/register.jsp

    r0ac83bd rfc8b7276  
    129129                    <%=intl._t("Authentication for adding host")%>
    130130                </label>
    131                 <textarea rows="1" style="height: 3em;" cols="60" readonly="readonly" id="localDestination" title="Copy and paste this to the registration site" wrap="off" spellcheck="false"><% he.writeProps(out); %></textarea>               
     131                <textarea rows="1" style="height: 3em;" cols="60" readonly="readonly" id="localDestination" title="Copy and paste this to the registration site" wrap="off" spellcheck="false"><% he.write(out); %></textarea>               
    132132            </div>
    133133        </div>
     
    181181                   props.setProperty(HostTxtEntry.PROP_OLDNAME, oldname);
    182182                   he.sign(spk);
    183                 %><textarea rows="1" style="height: 3em;" cols="60" readonly="readonly" id="localDestination" title="Copy and paste this to the registration site" wrap="off" spellcheck="false"><% he.writeProps(out); %></textarea>               
     183                %><textarea rows="1" style="height: 3em;" cols="60" readonly="readonly" id="localDestination" title="Copy and paste this to the registration site" wrap="off" spellcheck="false"><% he.write(out); %></textarea>               
    184184                <span class="comment"><%=intl._t("This will change the name from {0} to {1}, using the same destination", oldname, name)%></span>
    185185<%
     
    204204                   props.setProperty(HostTxtEntry.PROP_OLDNAME, oldname);
    205205                   he.sign(spk);
    206                 %><textarea rows="1" style="height: 3em;" cols="60" readonly="readonly" id="localDestination" title="Copy and paste this to the registration site" wrap="off" spellcheck="false"><% he.writeProps(out); %></textarea>               
     206                %><textarea rows="1" style="height: 3em;" cols="60" readonly="readonly" id="localDestination" title="Copy and paste this to the registration site" wrap="off" spellcheck="false"><% he.write(out); %></textarea>               
    207207                <span class="comment"><%=intl._t("This will add an alias {0} for {1}, using the same destination", name, oldname)%></span>
    208208<%
     
    228228                   he.signInner(spk2);
    229229                   he.sign(spk);
    230                 %><textarea rows="1" style="height: 3em;" cols="60" readonly="readonly" id="localDestination" title="Copy and paste this to the registration site" wrap="off" spellcheck="false"><% he.writeProps(out); %></textarea>               
     230                %><textarea rows="1" style="height: 3em;" cols="60" readonly="readonly" id="localDestination" title="Copy and paste this to the registration site" wrap="off" spellcheck="false"><% he.write(out); %></textarea>               
    231231                <span class="comment"><%=intl._t("This will change the destination for {0}", name)%></span>
    232232<%
     
    253253                   he.signInner(spk2);
    254254                   he.sign(spk);
    255                 %><textarea rows="1" style="height: 3em;" cols="60" readonly="readonly" id="localDestination" title="Copy and paste this to the registration site" wrap="off" spellcheck="false"><% he.writeProps(out); %></textarea>               
     255                %><textarea rows="1" style="height: 3em;" cols="60" readonly="readonly" id="localDestination" title="Copy and paste this to the registration site" wrap="off" spellcheck="false"><% he.write(out); %></textarea>               
    256256                <span class="comment"><%=intl._t("This will add an alternate destination for {0}", name)%></span>
    257257<%
     
    279279                   he.signInner(spk2);
    280280                   he.sign(spk);
    281                 %><textarea rows="1" style="height: 3em;" cols="60" readonly="readonly" id="localDestination" title="Copy and paste this to the registration site" wrap="off" spellcheck="false"><% he.writeProps(out); %></textarea>               
     281                %><textarea rows="1" style="height: 3em;" cols="60" readonly="readonly" id="localDestination" title="Copy and paste this to the registration site" wrap="off" spellcheck="false"><% he.write(out); %></textarea>               
    282282                <span class="comment"><%=intl._t("This will add a subdomain {0} of {1}, with a different destination", name, oldname)%></span>
    283283<%
  • core/java/src/net/i2p/client/naming/BlockfileNamingService.java

    r0ac83bd rfc8b7276  
    621621     *  Returns without logging if no reverse skiplist (version 1).
    622622     *
    623      *  @return the first one found if more than one
    624      *  @since 0.8.9
    625      */
    626     private String getReverseEntry(Hash hash) {
     623     *  @return all found if more than one
     624     *  @since 0.9.26 from getReverseEntry() 0.8.9
     625     */
     626    private List<String> getReverseEntries(Hash hash) {
    627627        try {
    628628            SkipList<Integer, Properties> rev = _bf.getIndex(REVERSE_SKIPLIST, _hashIndexSerializer, _infoSerializer);
     
    634634            if (props == null)
    635635                return null;
    636             for (Object okey : props.keySet()) {
    637                 String key = (String) okey;
     636            List<String> rv = new ArrayList<String>(props.size());
     637            for (String key : props.stringPropertyNames()) {
    638638                // now do the forward lookup to verify (using the cache)
    639                 Destination d = lookup(key);
    640                 if (d != null && d.calculateHash().equals(hash))
    641                     return key;
    642             }
     639                List<Destination> ld = lookupAll(key);
     640                if (ld != null) {
     641                    for (Destination d : ld) {
     642                        if (d.calculateHash().equals(hash)) {
     643                            rv.add(key);
     644                            break;
     645                        }
     646                    }
     647                }
     648            }
     649            if (!rv.isEmpty())
     650                return rv;
    643651        } catch (IOException ioe) {
    644652            _log.error("DB get reverse error", ioe);
     
    13861394    @Override
    13871395    public String reverseLookup(Hash h) {
     1396        List<String> ls;
    13881397        synchronized(_bf) {
    13891398            if (_isClosed)
    13901399                return null;
    1391             return getReverseEntry(h);
     1400            ls = getReverseEntries(h);
     1401        }
     1402        return (ls != null) ? ls.get(0) : null;
     1403    }
     1404
     1405    /**
     1406     * @param options ignored
     1407     * @since 0.9.26
     1408     */
     1409    @Override
     1410    public List<String> reverseLookupAll(Destination d, Properties options) {
     1411        return reverseLookupAll(d.calculateHash());
     1412    }
     1413
     1414    /**
     1415     * @since 0.9.26
     1416     */
     1417    @Override
     1418    public List<String> reverseLookupAll(Hash h) {
     1419        synchronized(_bf) {
     1420            if (_isClosed)
     1421                return null;
     1422            return getReverseEntries(h);
    13921423        }
    13931424    }
  • core/java/src/net/i2p/client/naming/HostTxtEntry.java

    r0ac83bd rfc8b7276  
    135135     */
    136136    public void write(BufferedWriter out) throws IOException {
     137        write((Writer) out);
     138        out.newLine();
     139    }
     140
     141    /**
     142     * Write as a standard line name=dest[#!k1=v1#k2=v2...]
     143     * Does not include newline.
     144     */
     145    public void write(Writer out) throws IOException {
    137146        if (name != null && dest != null) {
    138147            out.write(name);
     
    141150        }
    142151        writeProps(out);
    143         out.newLine();
    144152    }
    145153
  • core/java/src/net/i2p/client/naming/NamingService.java

    r0ac83bd rfc8b7276  
    690690            return false;
    691691        return remove(hostname, options);
     692    }
     693
     694    /**
     695     * Reverse lookup a hash.
     696     * This implementation returns the result from reverseLookup, or null.
     697     * Subclasses implementing reverse lookups should override.
     698     *
     699     * @param h non-null
     700     * @return a non-empty list of host names for this hash, or <code>null</code>
     701     * if none is known. It is safe for subclasses to always return
     702     * <code>null</code> if no reverse lookup is possible.
     703     * @since 0.9.26
     704     */
     705    public List<String> reverseLookupAll(Hash h) {
     706        String s = reverseLookup(h);
     707        return (s != null) ? Collections.singletonList(s) : null;
     708    }
     709
     710    /**
     711     * Reverse lookup a destination
     712     * This implementation returns reverseLookupAll(dest, null).
     713     *
     714     * @param dest non-null
     715     * @return a non-empty list of host names for this Destination, or <code>null</code>
     716     * if none is known. It is safe for subclasses to always return
     717     * <code>null</code> if no reverse lookup is possible.
     718     * @since 0.9.26
     719     */
     720    public List<String> reverseLookupAll(Destination dest) {
     721        return reverseLookupAll(dest, null);
     722    }
     723
     724    /**
     725     *  Same as reverseLookupAll(dest) but with options
     726     *  This implementation returns the result from reverseLookup, or null.
     727     *  Subclasses implementing reverse lookups should override.
     728     *
     729     *  @param d non-null
     730     *  @param options NamingService-specific, can be null
     731     *  @return a non-empty list of host names for this Destination, or <code>null</code>
     732     *  @since 0.9.26
     733     */
     734    public List<String> reverseLookupAll(Destination d, Properties options) {
     735        String s = reverseLookup(d, options);
     736        return (s != null) ? Collections.singletonList(s) : null;
    692737    }
    693738
Note: See TracChangeset for help on using the changeset viewer.