Class UDPTrackerClient

java.lang.Object
org.klomp.snark.UDPTrackerClient
All Implemented Interfaces:
I2PSessionListener, I2PSessionMuxedListener

class UDPTrackerClient extends Object implements I2PSessionMuxedListener
One of these for all trackers and info hashes. Ref: BEP 15, proposal 160 The main difference from BEP 15 is that the announce response contains a 32-byte hash instead of a 4-byte IP and a 2-byte port. This implements only "fast mode". We send only repliable datagrams, and receive only raw datagrams, as follows:
  client                tracker         type
  ------                -------         ----
   announce  -->                        repliable
                <--      ann resp        raw
Since:
0.9.53, enabled in 0.9.54
  • Field Details

  • Constructor Details

  • Method Details

    • start

      public void start()
      Can't be restarted after stopping?
    • stop

      public void stop()
      Stop everything.
    • announce

      public UDPTrackerClient.TrackerResponse announce(byte[] ih, byte[] peerID, int max, long maxWait, String toHost, int toPort, long downloaded, long left, long uploaded, int event, boolean fast)
      Announce and get peers for a torrent. Blocking! Caller should run in a thread.
      Parameters:
      ih - the Info Hash (torrent)
      max - maximum number of peers to return
      maxWait - the maximum time to wait (ms) must be greater than 0
      fast - if true, don't wait for dest, no retx, ...
      Returns:
      null on fail or if fast is true
    • messageAvailable

      public void messageAvailable(I2PSession session, int msgId, long size, int proto, int fromPort, int toPort)
      Instruct the client that the given session has received a message Will be called only if you register via addMuxedSessionListener(). Will be called only for the proto(s) and toPort(s) you register for.
      Specified by:
      messageAvailable in interface I2PSessionMuxedListener
      Parameters:
      session - session to notify
      msgId - message number available
      size - size of the message - why it's a long and not an int is a mystery
      proto - 1-254 or 0 for unspecified
      fromPort - 1-65535 or 0 for unspecified
      toPort - 1-65535 or 0 for unspecified
    • messageAvailable

      public void messageAvailable(I2PSession session, int msgId, long size)
      for non-muxed
      Specified by:
      messageAvailable in interface I2PSessionListener
      Specified by:
      messageAvailable in interface I2PSessionMuxedListener
      Parameters:
      session - session to notify
      msgId - message number available
      size - size of the message - why it's a long and not an int is a mystery
    • reportAbuse

      public void reportAbuse(I2PSession session, int severity)
      Description copied from interface: I2PSessionMuxedListener
      Instruct the client that the session specified seems to be under attack and that the client may wish to move its destination to another router. All registered listeners will be called. Unused. Not fully implemented.
      Specified by:
      reportAbuse in interface I2PSessionListener
      Specified by:
      reportAbuse in interface I2PSessionMuxedListener
      Parameters:
      session - session to report abuse to
      severity - how bad the abuse is
    • disconnected

      public void disconnected(I2PSession session)
      Description copied from interface: I2PSessionMuxedListener
      Notify the client that the session has been terminated. All registered listeners will be called.
      Specified by:
      disconnected in interface I2PSessionListener
      Specified by:
      disconnected in interface I2PSessionMuxedListener
    • errorOccurred

      public void errorOccurred(I2PSession session, String message, Throwable error)
      Description copied from interface: I2PSessionMuxedListener
      Notify the client that some error occurred. All registered listeners will be called.
      Specified by:
      errorOccurred in interface I2PSessionListener
      Specified by:
      errorOccurred in interface I2PSessionMuxedListener
      Parameters:
      error - can be null? or not?