Changeset 3849a96


Ignore:
Timestamp:
Aug 24, 2011 2:21:44 PM (8 years ago)
Author:
zzz <zzz@…>
Branches:
master
Children:
f99f9e4
Parents:
6d06427
Message:

initial reverse/firewall support

File:
1 edited

Legend:

Unmodified
Added
Removed
  • apps/i2ptunnel/java/src/net/i2p/i2ptunnel/irc/IRCFilter.java

    r6d06427 r3849a96  
    22
    33import net.i2p.data.DataHelper;
     4import net.i2p.util.Log;
    45
    56
     
    357358            return null;
    358359        }
     360        if (cPort < 0 || cPort > 65535)
     361            return null;
    359362
    360363        int port = -1;
    361364        if (haveIP) {
    362             port = helper.newIncoming(b32, cPort, type);
     365            if (cPort > 0)
     366                port = helper.newIncoming(b32, cPort, type);
     367            else
     368                // "reverse/firewall DCC" - send it through without tracking
     369                port = cPort;
    363370        } else if (type.equals("ACCEPT")) {
    364371            port = helper.acceptIncoming(cPort);
     
    372379           .append(type).append(' ').append(arg).append(' ');
    373380        if (haveIP) {
    374             byte[] myIP = helper.getLocalAddress();
    375             buf.append(DataHelper.fromLong(myIP, 0, myIP.length)).append(' ');
     381            if (port > 0) {
     382                byte[] myIP = helper.getLocalAddress();
     383                buf.append(DataHelper.fromLong(myIP, 0, myIP.length)).append(' ');
     384            } else {
     385                // "reverse/firewall DCC" - set dummy IP and send it through
     386                buf.append("0 ");
     387            }
    376388        }
    377389        buf.append(port);
     
    436448                    // http://en.wikipedia.org/wiki/Direct_Client-to-Client
    437449                    // xchat sends an IP of 199 and a port of 0
    438                     System.err.println("Reverse / Firewall DCC not supported IP = 0x" + Long.toHexString(ipl));
    439                     return null;
     450                    Log log = new Log(IRCFilter.class);
     451                    log.logAlways(Log.WARN, "Reverse / Firewall DCC, IP = 0x" + Long.toHexString(ipl));
     452                    //return null;
    440453                }
    441454                ip = DataHelper.toLong(4, ipl);
     
    451464            return null;
    452465        }
    453         if (cPort <= 0) {
    454             // "reverse/firewall DCC"
    455             // http://en.wikipedia.org/wiki/Direct_Client-to-Client
    456             System.err.println("Reverse / Firewall DCC not supported");
    457             return null;
    458         }
     466        if (cPort < 0 || cPort > 65535)
     467            return null;
    459468
    460469        int port = -1;
    461470        if (haveIP) {
    462             port = helper.newOutgoing(ip, cPort, type);
     471            if (cPort > 0) {
     472                // nonzero port but bogus IP? hmm. Fix IP and hope.
     473                if (ip[0] == 0)
     474                    ip = new byte[] {127, 0, 0, 1};
     475                port = helper.newOutgoing(ip, cPort, type);
     476            } else {
     477                // "reverse/firewall DCC" - send it through without tracking
     478                Log log = new Log(IRCFilter.class);
     479                log.logAlways(Log.WARN, "Reverse / Firewall DCC, port = 0");
     480                port = cPort;
     481            }
    463482        } else if (type.equals("ACCEPT")) {
    464483            port = helper.acceptOutgoing(cPort);
     
    471490        buf.append(pfx)
    472491           .append(type).append(' ').append(arg).append(' ');
    473         if (haveIP)
    474             buf.append(helper.getB32Hostname()).append(' ');
     492        if (haveIP) {
     493            if (port > 0)
     494                buf.append(helper.getB32Hostname()).append(' ');
     495            else
     496                // "reverse/firewall DCC" - set dummy IP and send it through
     497                buf.append("0 ");
     498        }
    475499        buf.append(port);
    476500        while (args.length > nextArg) {
Note: See TracChangeset for help on using the changeset viewer.