Changeset dd47389


Ignore:
Timestamp:
Jun 25, 2015 5:00:52 PM (5 years ago)
Author:
zzz <zzz@…>
Branches:
master
Children:
23f2261b
Parents:
25268e7
Message:

Console: Use registered host/port for eepsite link (ticket #1604)
Jetty starter: Register host/port when started
PortMapper?: Add hostname support

Files:
6 edited

Legend:

Unmodified
Added
Removed
  • apps/jetty/java/src/net/i2p/jetty/JettyStart.java

    r25268e7 rdd47389  
    1717// ========================================================================
    1818
     19import java.io.InputStream;
    1920import java.util.ArrayList;
    2021import java.util.Arrays;
     
    2627import net.i2p.app.*;
    2728import static net.i2p.app.ClientAppState.*;
    28 
    29 import java.io.InputStream;
     29import net.i2p.util.PortMapper;
     30
     31import org.eclipse.jetty.server.Connector;
     32import org.eclipse.jetty.server.Server;
    3033import org.eclipse.jetty.util.component.LifeCycle;
    3134import org.eclipse.jetty.util.resource.Resource;
     
    4649    private final String[] _args;
    4750    private final List<LifeCycle> _jettys;
     51    private final I2PAppContext _context;
    4852    private volatile ClientAppState _state;
     53    private volatile int _port;
    4954
    5055    /**
     
    5257     *  Does not support any of the other argument types from org.mortbay.start.Main.
    5358     *
    54      *  @param context unused, may be null
     59     *  @param context may be null
    5560     *  @param mgr may be null e.g. for use in plugins
    5661     */
     
    6065        _args = args;
    6166        _jettys = new ArrayList<LifeCycle>(args.length);
     67        _context = context;
    6268        parseArgs(args);
    6369        _state = INITIALIZED;
     
    117123                    try {
    118124                        lc.start();
     125                        if (_context != null && _context.portMapper().getPort(PortMapper.SVC_EEPSITE) <= 0) {
     126                            if (lc instanceof Server) {
     127                                Server server = (Server) lc;
     128                                Connector[] connectors = server.getConnectors();
     129                                if (connectors.length > 0) {
     130                                    int port = connectors[0].getPort();
     131                                    if (port > 0) {
     132                                        _port = port;
     133                                        String host = connectors[0].getHost();
     134                                        if (host.equals("0.0.0.0") || host.equals("::"))
     135                                            host = "127.0.0.1";
     136                                        _context.portMapper().register(PortMapper.SVC_EEPSITE, host, port);
     137                                    }
     138                                }
     139                            }
     140                        }
    119141                    } catch (Exception e) {
    120142                        changeState(START_FAILED, e);
     
    154176                    }
    155177                }
     178            }
     179            if (_context != null && _port > 0 && _context.portMapper().getPort(PortMapper.SVC_EEPSITE) == _port) {
     180                _port = 0;
     181                _context.portMapper().unregister(PortMapper.SVC_EEPSITE);
    156182            }
    157183            changeState(STOPPED);
  • apps/routerconsole/java/src/net/i2p/router/web/HomeHelper.java

    r25268e7 rdd47389  
    168168    }
    169169
    170     private static String renderApps(Collection<App> apps) {
     170    private String renderApps(Collection<App> apps) {
     171        String website = _("Website");
    171172        StringBuilder buf = new StringBuilder(1024);
    172173        buf.append("<div class=\"appgroup\">");
    173174        for (App app : apps) {
     175            String url;
     176            if (app.name.equals(website) && app.url.equals("http://127.0.0.1:7658/")) {
     177                // fixup eepsite link
     178                url = "http://" + _context.portMapper().getHost(PortMapper.SVC_EEPSITE, "127.0.0.1") +
     179                      ':' + _context.portMapper().getPort(PortMapper.SVC_EEPSITE, 7658) + '/';
     180            } else {
     181                url = app.url;
     182            }
    174183            buf.append("<div class=\"app\">" +
    175184                       "<div class=\"appimg\">" +
    176                        "<a href=\"").append(app.url).append("\">" +
     185                       "<a href=\"").append(url).append("\">" +
    177186                       "<img class=\"");
    178187            // toopie is 54x68, not 16x16, needs special alignment and sizing
     
    185194                       "<table class=\"app\"><tr class=\"app\"><td class=\"app\">" +
    186195                       "<div class=\"applabel\">" +
    187                        "<a href=\"").append(app.url).append("\" title=\"").append(app.desc).append("\">").append(app.name).append("</a>" +
     196                       "<a href=\"").append(url).append("\" title=\"").append(app.desc).append("\">").append(app.name).append("</a>" +
    188197                       "</div>" +
    189198                       "</td></tr></table>" +
  • apps/routerconsole/java/src/net/i2p/router/web/SummaryBarRenderer.java

    r25268e7 rdd47389  
    1212import net.i2p.data.DataHelper;
    1313import net.i2p.router.RouterContext;
     14import net.i2p.util.PortMapper;
    1415
    1516/**
     
    147148           .append("</a>\n" +
    148149
    149                    "<a href=\"http://127.0.0.1:7658/\" target=\"_blank\" title=\"")
     150                   "<a href=\"http://")
     151           .append(_context.portMapper().getHost(PortMapper.SVC_EEPSITE, "127.0.0.1"))
     152           .append(':')
     153           .append(_context.portMapper().getPort(PortMapper.SVC_EEPSITE, 7658))
     154           .append("/\" target=\"_blank\" title=\"")
    150155           .append(_("Local web server"))
    151156           .append("\">")
  • core/java/src/net/i2p/util/PortMapper.java

    r25268e7 rdd47389  
    33import java.io.IOException;
    44import java.io.Writer;
     5import java.net.InetSocketAddress;
    56import java.util.ArrayList;
    67import java.util.Collections;
     
    1718 */
    1819public class PortMapper {
    19     private final ConcurrentHashMap<String, Integer> _dir;
     20    private final ConcurrentHashMap<String, InetSocketAddress> _dir;
    2021
    2122    public static final String SVC_CONSOLE = "console";
     
    3839     */
    3940    public PortMapper(I2PAppContext context) {
    40         _dir = new ConcurrentHashMap<String, Integer>(8);
     41        _dir = new ConcurrentHashMap<String, InetSocketAddress>(8);
    4142    }
    4243
     
    4748     */
    4849    public boolean register(String service, int port) {
    49         if (port <= 0)
     50        return register(service, "127.0.0.1", port);
     51    }
     52
     53    /**
     54     *  Add the service
     55     *  @param port > 0
     56     *  @return success, false if already registered
     57     *  @since 0.9.21
     58     */
     59    public boolean register(String service, String host, int port) {
     60        if (port <= 0 || port > 65535)
    5061            return false;
    51         return _dir.putIfAbsent(service, Integer.valueOf(port)) == null;
     62        return _dir.putIfAbsent(service, InetSocketAddress.createUnresolved(host, port)) == null;
    5263    }
    5364
     
    7485     */
    7586    public int getPort(String service, int def) {
    76         Integer port = _dir.get(service);
    77         if (port == null)
     87        InetSocketAddress ia = _dir.get(service);
     88        if (ia == null)
    7889            return def;
    79         return port.intValue();
     90        return ia.getPort();
     91    }
     92
     93    /**
     94     *  Get the registered host for a service.
     95     *  Will return "127.0.0.1" if the service was registered without a host.
     96     *  @param def default
     97     *  @return def if not registered
     98     *  @since 0.9.21
     99     */
     100    public String getHost(String service, String def) {
     101        InetSocketAddress ia = _dir.get(service);
     102        if (ia == null)
     103            return def;
     104        return ia.getHostName();
    80105    }
    81106
     
    86111    public void renderStatusHTML(Writer out) throws IOException {
    87112        List<String> services = new ArrayList(_dir.keySet());
    88         out.write("<h2>Port Mapper</h2><table><tr><th>Service<th>Port\n");
     113        out.write("<h2>Port Mapper</h2><table><tr><th>Service<th>Host<th>Port\n");
    89114        Collections.sort(services);
    90115        for (String s : services) {
    91             out.write("<tr><td>" + s + "<td>" + _dir.get(s) + '\n');
     116            InetSocketAddress ia = _dir.get(s);
     117            if (ia == null)
     118                continue;
     119            out.write("<tr><td>" + s + "<td>" + ia.getHostName() + "<td>" + ia.getPort() + '\n');
    92120        }
    93121        out.write("</table>\n");
  • history.txt

    r25268e7 rdd47389  
     12015-06-25 zzz
     2 * Console: Use registered host/port for eepsite link (ticket #1604)
     3 * Jetty starter: Register host/port when started
     4 * PortMapper: Add hostname support
     5
    162015-06-24 zzz
    27 * Transport: Add failsafe to prevent complete SSU stall waiting
  • router/java/src/net/i2p/router/RouterVersion.java

    r25268e7 rdd47389  
    1919    public final static String ID = "Monotone";
    2020    public final static String VERSION = CoreVersion.VERSION;
    21     public final static long BUILD = 11;
     21    public final static long BUILD = 12;
    2222
    2323    /** for example "-test" */
Note: See TracChangeset for help on using the changeset viewer.