Changeset 6373c8a


Ignore:
Timestamp:
Nov 26, 2015 9:39:18 PM (5 years ago)
Author:
zzz <zzz@…>
Branches:
master
Children:
4291450
Parents:
bd048b0
Message:

v1 datagram and raw support for sink

Location:
apps/sam/java/src/net/i2p/sam/client
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • apps/sam/java/src/net/i2p/sam/client/SAMClientEventListenerImpl.java

    rbd048b0 r6373c8a  
    1515    public void streamDataReceived(String id, byte[] data, int offset, int length) {}
    1616    public void streamStatusReceived(String result, String id, String message) {}
     17    public void datagramReceived(String dest, byte[] data, int offset, int length, int fromPort, int toPort) {}
     18    public void rawReceived(byte[] data, int offset, int length, int fromPort, int toPort, int protocol) {}
    1719    public void pingReceived(String data) {}
    1820    public void pongReceived(String data) {}
  • apps/sam/java/src/net/i2p/sam/client/SAMReader.java

    rbd048b0 r6373c8a  
    8181        public void namingReplyReceived(String name, String result, String value, String message);
    8282        public void destReplyReceived(String publicKey, String privateKey);
     83        public void datagramReceived(String dest, byte[] data, int offset, int length, int fromPort, int toPort);
     84        public void rawReceived(byte[] data, int offset, int length, int fromPort, int toPort, int protocol);
    8385        public void pingReceived(String data);
    8486        public void pongReceived(String data);
     
    232234                _listener.unknownMessageReceived(major, minor, params);
    233235            }
     236        } else if ("DATAGRAM".equals(major)) {
     237            if ("RECEIVED".equals(minor)) {
     238                String dest = params.getProperty("DESTINATION");
     239                String size = params.getProperty("SIZE");
     240                String fp = params.getProperty("FROM_PORT");
     241                String tp = params.getProperty("TO_PORT");
     242                int fromPort = 0;
     243                int toPort = 0;
     244                if (dest != null) {
     245                    try {
     246                      if (fp != null)
     247                          fromPort = Integer.parseInt(fp);
     248                      if (tp != null)
     249                          toPort = Integer.parseInt(tp);
     250                        int sizeVal = Integer.parseInt(size);
     251                        byte data[] = new byte[sizeVal];
     252                        int read = DataHelper.read(_inRaw, data);
     253                        if (read != sizeVal) {
     254                            _listener.unknownMessageReceived(major, minor, params);
     255                        } else {
     256                            _listener.datagramReceived(dest, data, 0, sizeVal, fromPort, toPort);
     257                        }
     258                    } catch (NumberFormatException nfe) {
     259                        _listener.unknownMessageReceived(major, minor, params);
     260                    } catch (IOException ioe) {
     261                        _live = false;
     262                        _listener.unknownMessageReceived(major, minor, params);
     263                    }
     264                } else {
     265                    _listener.unknownMessageReceived(major, minor, params);
     266                }
     267            } else {
     268                _listener.unknownMessageReceived(major, minor, params);
     269            }
     270        } else if ("RAW".equals(major)) {
     271            if ("RECEIVED".equals(minor)) {
     272                String size = params.getProperty("SIZE");
     273                String fp = params.getProperty("FROM_PORT");
     274                String tp = params.getProperty("TO_PORT");
     275                String pr = params.getProperty("PROTOCOL");
     276                int fromPort = 0;
     277                int toPort = 0;
     278                int protocol = 18;
     279                try {
     280                    if (fp != null)
     281                        fromPort = Integer.parseInt(fp);
     282                    if (tp != null)
     283                        toPort = Integer.parseInt(tp);
     284                    if (pr != null)
     285                        protocol = Integer.parseInt(pr);
     286                    int sizeVal = Integer.parseInt(size);
     287                    byte data[] = new byte[sizeVal];
     288                    int read = DataHelper.read(_inRaw, data);
     289                    if (read != sizeVal) {
     290                        _listener.unknownMessageReceived(major, minor, params);
     291                    } else {
     292                        _listener.rawReceived(data, 0, sizeVal, fromPort, toPort, protocol);
     293                    }
     294                } catch (NumberFormatException nfe) {
     295                    _listener.unknownMessageReceived(major, minor, params);
     296                } catch (IOException ioe) {
     297                    _live = false;
     298                    _listener.unknownMessageReceived(major, minor, params);
     299                }
     300            } else {
     301                _listener.unknownMessageReceived(major, minor, params);
     302            }
    234303        } else if ("NAMING".equals(major)) {
    235304            if ("REPLY".equals(minor)) {
  • apps/sam/java/src/net/i2p/sam/client/SAMStreamSink.java

    rbd048b0 r6373c8a  
    128128            if (_log.shouldLog(Log.DEBUG))
    129129                _log.debug("Handshake complete.  we are " + ourDest);
    130             if (_isV3) {
     130            if (_isV3 && mode != V1DG && mode != V1RAW) {
    131131                Socket sock2 = connect(isSSL);
    132132                out = sock2.getOutputStream();
     
    159159        @Override
    160160        public void streamClosedReceived(String result, String id, String message) {
    161             Sink sink = null;
     161            Sink sink;
    162162            synchronized (_remotePeers) {
    163163                sink = _remotePeers.remove(id);
     
    174174        @Override
    175175        public void streamDataReceived(String id, byte data[], int offset, int length) {
    176             Sink sink = null;
     176            Sink sink;
    177177            synchronized (_remotePeers) {
    178178                sink = _remotePeers.get(id);
     
    212212                }
    213213            }
     214        }
     215
     216        @Override
     217        public void datagramReceived(String dest, byte[] data, int offset, int length, int fromPort, int toPort) {
     218            // just get the first
     219            Sink sink;
     220            synchronized (_remotePeers) {
     221                if (_remotePeers.isEmpty()) {
     222                    _log.error("not connected but we received datagram " + length + "?");
     223                    return;
     224                }
     225                sink = _remotePeers.values().iterator().next();
     226            }
     227            sink.received(data, offset, length);
     228        }
     229
     230        @Override
     231        public void rawReceived(byte[] data, int offset, int length, int fromPort, int toPort, int protocol) {
     232            // just get the first
     233            Sink sink;
     234            synchronized (_remotePeers) {
     235                if (_remotePeers.isEmpty()) {
     236                    _log.error("not connected but we received raw " + length + "?");
     237                    return;
     238                }
     239                sink = _remotePeers.values().iterator().next();
     240            }
     241            sink.received(data, offset, length);
    214242        }
    215243    }
     
    370398                if (_log.shouldLog(Log.DEBUG))
    371399                    _log.debug("Session create sent");
    372                 boolean ok = eventHandler.waitForSessionCreateReply();
    373                 if (!ok)
    374                     throw new IOException("Session create failed");
    375                 if (_log.shouldLog(Log.DEBUG))
    376                     _log.debug("Session create reply found: " + ok);
    377 
     400                if (mode == STREAM) {
     401                    boolean ok = eventHandler.waitForSessionCreateReply();
     402                    if (!ok)
     403                        throw new IOException("Session create failed");
     404                    if (_log.shouldLog(Log.DEBUG))
     405                        _log.debug("Session create reply found: " + ok);
     406                }
    378407                req = "NAMING LOOKUP NAME=ME\n";
    379408                samOut.write(req.getBytes());
     
    387416                    _log.error("No naming lookup reply found!");
    388417                    return null;
    389                 } else {
    390                     if (_log.shouldInfo())
    391                         _log.info(_destFile + " is located at " + destination);
     418                }
     419                if (_log.shouldInfo())
     420                    _log.info(_destFile + " is located at " + destination);
     421                if (mode != STREAM) {
     422                    // fake it so the sink starts
     423                    eventHandler.streamConnectedReceived(destination, "FAKE");
    392424                }
    393425                return destination;
Note: See TracChangeset for help on using the changeset viewer.