Changeset 59424a8


Ignore:
Timestamp:
Jul 16, 2011 12:46:05 PM (9 years ago)
Author:
zzz <zzz@…>
Branches:
master
Children:
c826f7fb
Parents:
a4ec6a5
Message:

stub out resume/accept; allow xdcc

Location:
apps/i2ptunnel/java/src/net/i2p/i2ptunnel
Files:
3 edited

Legend:

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

    ra4ec6a5 r59424a8  
    200200        return rv;
    201201    }
     202
     203    public int resumeOutgoing(int port) {
     204        return -1;
     205    }
     206
     207    public int resumeIncoming(int port) {
     208        return -1;
     209    }
     210
     211    public int acceptOutgoing(int port) {
     212        return -1;
     213    }
     214
     215    public int acceptIncoming(int port) {
     216        return -1;
     217    }
    202218}
  • apps/i2ptunnel/java/src/net/i2p/i2ptunnel/irc/DCCHelper.java

    ra4ec6a5 r59424a8  
    2121     *  @param port local irc client port
    2222     *  @param type string
    23      *  @return i2p port or -1 on error
     23     *  @return local DCC server i2p port or -1 on error
    2424     */
    2525    public int newOutgoing(byte[] ip, int port, String type);
     
    2828     *  An incoming DCC request
    2929     *
    30      *  @param b32 remote dcc server address
    31      *  @param port remote dcc server port
     30     *  @param b32 remote dcc server b32 address
     31     *  @param port remote dcc server I2P port
    3232     *  @param type string
    33      *  @return local server port or -1 on error
     33     *  @return local DCC client tunnel port or -1 on error
    3434     */
    3535    public int newIncoming(String b32, int port, String type);
    3636
     37    /**
     38     *  An outgoing RESUME request
     39     *
     40     *  @param port local DCC client tunnel port
     41     *  @return remote DCC server i2p port or -1 on error
     42     */
     43    public int resumeOutgoing(int port);
     44
     45    /**
     46     *  An incoming RESUME request
     47     *
     48     *  @param port local dcc server I2P port
     49     *  @return local IRC client DCC port or -1 on error
     50     */
     51    public int resumeIncoming(int port);
     52
     53    /**
     54     *  An outgoing ACCEPT response
     55     *
     56     *  @param port local irc client DCC port
     57     *  @return local DCC server i2p port or -1 on error
     58     */
     59    public int acceptOutgoing(int port);
     60
     61    /**
     62     *  An incoming ACCEPT response
     63     *
     64     *  @param port remote dcc server I2P port
     65     *  @return local DCC client tunnel port or -1 on error
     66     */
     67    public int acceptIncoming(int port);
     68
    3769}
  • apps/i2ptunnel/java/src/net/i2p/i2ptunnel/irc/IRCFilter.java

    ra4ec6a5 r59424a8  
    124124                    return filterDCCIn(buf.toString(), msg.substring(4), helper);
    125125                }
     126                // XDCC looks safe, ip/port happens over regular DCC
     127                // http://en.wikipedia.org/wiki/XDCC
     128                if (msg.toUpperCase().startsWith("XDCC ") && helper != null && helper.isEnabled())
     129                    return s;
    126130                if (ALLOW_ALL_CTCP_IN)
    127131                    return s;
     
    266270                if (msg.startsWith("DCC "))
    267271                    return filterDCCOut(field[0] + ' ' + field[1] + " :\001DCC ", msg.substring(4), helper);
     272                // XDCC looks safe, ip/port happens over regular DCC
     273                // http://en.wikipedia.org/wiki/XDCC
     274                if (msg.toUpperCase().startsWith("XDCC ") && helper != null && helper.isEnabled())
     275                    return s;
    268276                if (ALLOW_ALL_CTCP_OUT)
    269277                    return s;
     
    296304
    297305    /**
     306     *<pre>
     307     *  DCC CHAT chat xxx.b32.i2p i2p-port        -> DCC CHAT chat IP port
     308     *  DCC SEND file xxx.b32.i2p i2p-port length -> DCC SEND file IP port length
     309     *  DCC RESUME file i2p-port offset           -> DCC RESUME file port offset
     310     *  DCC ACCEPT file i2p-port offset           -> DCC ACCEPT file port offset
     311     *  DCC xxx                                   -> null
     312     *</pre>
     313     *
    298314     *  @param pfx the message through the "DCC " part
    299315     *  @param msg the message after the "DCC " part
     
    311327            return null;
    312328        String type = args[0];
    313         // no IP in these but port needs to be fixed still
    314         //if (type == "RESUME" || type == "ACCEPT")
    315         //    return msg;
    316         if (!(type.equals("CHAT") || type.equals("SEND"))) {
     329        boolean haveIP = true;
     330        // no IP in these, replace port only
     331        if (type == "RESUME" || type == "ACCEPT") {
     332            haveIP = false;
     333        } else if (!(type.equals("CHAT") || type.equals("SEND"))) {
    317334            if (ALLOW_ALL_DCC_IN) {
    318335                if (ctcp > 0)
     
    324341        if (helper == null || !helper.isEnabled())
    325342            return null;
    326         if (args.length < 4)
     343        if (args.length < 3)
     344            return null;
     345        if (haveIP && args.length < 4)
    327346            return null;
    328347        String arg = args[1];
    329         String b32 = args[2];
     348        int nextArg = 2;
     349        String b32 = null;
     350        if (haveIP)
     351            b32 = args[nextArg++];
    330352        int cPort;
    331353        try {
    332             String cp = args[3];
     354            String cp = args[nextArg++];
    333355            cPort = Integer.parseInt(cp);
    334356        } catch (NumberFormatException nfe) {
     
    336358        }
    337359
    338         int port = helper.newIncoming(b32, cPort, type);
     360        int port = -1;
     361        if (haveIP) {
     362            port = helper.newIncoming(b32, cPort, type);
     363        } else if (type.equals("ACCEPT")) {
     364            port = helper.acceptIncoming(cPort);
     365        } else if (type.equals("RESUME")) {
     366            port = helper.resumeIncoming(cPort);
     367        }
    339368        if (port < 0)
    340369            return null;
    341370        StringBuilder buf = new StringBuilder(256);
    342         // fixme what is our address?
    343         byte[] myIP = { 127, 0, 0, 1 };
    344371        buf.append(pfx)
    345            .append(type).append(' ').append(arg).append(' ')
    346            .append(DataHelper.fromLong(myIP, 0, myIP.length)).append(' ')
    347            .append(port);
    348         if (args.length > 4)
    349             buf.append(' ').append(args[4]);
     372           .append(type).append(' ').append(arg).append(' ');
     373        if (haveIP) {
     374            // fixme what is our address?
     375            byte[] myIP = { 127, 0, 0, 1 };
     376            buf.append(DataHelper.fromLong(myIP, 0, myIP.length)).append(' ');
     377        }
     378        buf.append(port);
     379        while (args.length > nextArg) {
     380            buf.append(' ').append(args[nextArg++]);
     381        }
    350382        if (pfx.indexOf(0x01) >= 0)
    351383            buf.append((char) 0x01);
     
    354386
    355387    /**
     388     *<pre>
     389     *  DCC CHAT chat IP port        -> DCC CHAT chat xxx.b32.i2p i2p-port
     390     *  DCC SEND file IP port length -> DCC SEND file xxx.b32.i2p i2p-port length
     391     *  DCC RESUME file port offset  -> DCC RESUME file i2p-port offset
     392     *  DCC ACCEPT file port offset  -> DCC ACCEPT file i2p-port offset
     393     *  DCC xxx                      -> null
     394     *</pre>
     395     *
    356396     *  @param pfx the message through the "DCC " part
    357397     *  @param msg the message after the "DCC " part
     
    369409            return null;
    370410        String type = args[0];
    371         // no IP in these but port needs to be fixed still
    372         //if (type == "RESUME" || type == "ACCEPT")
    373         //    return msg;
    374         if (!(type.equals("CHAT") || type.equals("SEND"))) {
     411        boolean haveIP = true;
     412        // no IP in these, replace port only
     413        if (type == "RESUME" || type == "ACCEPT") {
     414            haveIP = false;
     415        } else if (!(type.equals("CHAT") || type.equals("SEND"))) {
    375416            if (ALLOW_ALL_DCC_OUT) {
    376417                if (ctcp > 0)
     
    381422        if (helper == null || !helper.isEnabled())
    382423            return null;
    383         if (args.length < 4)
     424        if (args.length < 3)
     425            return null;
     426        if (haveIP && args.length < 4)
    384427            return null;
    385428        String arg = args[1];
    386         byte[] ip;
    387         try {
    388             String ips = args[2];
    389             long ipl = Long.parseLong(ips);
    390             if (ipl < 0x01000000) {
    391                 // "reverse/firewall DCC"
    392                 // http://en.wikipedia.org/wiki/Direct_Client-to-Client
    393                 // xchat sends an IP of 199 and a port of 0
    394                 System.err.println("Reverse / Firewall DCC not supported IP = 0x" + Long.toHexString(ipl));
     429        byte[] ip = null;
     430        int nextArg = 2;
     431        if (haveIP) {
     432            try {
     433                String ips = args[nextArg++];
     434                long ipl = Long.parseLong(ips);
     435                if (ipl < 0x01000000) {
     436                    // "reverse/firewall DCC"
     437                    // http://en.wikipedia.org/wiki/Direct_Client-to-Client
     438                    // xchat sends an IP of 199 and a port of 0
     439                    System.err.println("Reverse / Firewall DCC not supported IP = 0x" + Long.toHexString(ipl));
     440                    return null;
     441                }
     442                ip = DataHelper.toLong(4, ipl);
     443            } catch (NumberFormatException nfe) {
    395444                return null;
    396445            }
    397             ip = DataHelper.toLong(4, ipl);
    398         } catch (NumberFormatException nfe) {
    399             return null;
    400446        }
    401447        int cPort;
    402448        try {
    403             String cp = args[3];
     449            String cp = args[nextArg++];
    404450            cPort = Integer.parseInt(cp);
    405451        } catch (NumberFormatException nfe) {
     
    412458            return null;
    413459        }
    414         int port = helper.newOutgoing(ip, cPort, type);
     460
     461        int port = -1;
     462        if (haveIP) {
     463            port = helper.newOutgoing(ip, cPort, type);
     464        } else if (type.equals("ACCEPT")) {
     465            port = helper.acceptOutgoing(cPort);
     466        } else if (type.equals("RESUME")) {
     467            port = helper.resumeOutgoing(cPort);
     468        }
    415469        if (port < 0)
    416470            return null;
    417471        StringBuilder buf = new StringBuilder(256);
    418472        buf.append(pfx)
    419            .append(type).append(' ').append(arg).append(' ')
    420            .append(helper.getB32Hostname()).append(' ')
    421            .append(port);
    422         if (args.length > 4)
    423             buf.append(' ').append(args[4]);
     473           .append(type).append(' ').append(arg).append(' ');
     474        if (haveIP)
     475            buf.append(helper.getB32Hostname()).append(' ');
     476        buf.append(port);
     477        while (args.length > nextArg) {
     478            buf.append(' ').append(args[nextArg++]);
     479        }
    424480        if (pfx.indexOf(0x01) >= 0)
    425481            buf.append((char) 0x01);
Note: See TracChangeset for help on using the changeset viewer.