Package net.i2p.sam

Class SAMHandler

java.lang.Object
net.i2p.sam.SAMHandler
All Implemented Interfaces:
Runnable, Handler
Direct Known Subclasses:
SAMv1Handler

abstract class SAMHandler extends Object implements Runnable, Handler
Base class for SAM protocol handlers. It implements common methods, but is not able to actually parse the protocol itself: this task is delegated to subclasses.
Author:
human
  • Field Details

    • _log

      protected final Log _log
    • thread

      protected I2PAppThread thread
    • bridge

      protected final SAMBridge bridge
    • socket

      protected final SocketChannel socket
    • verMajor

      public final int verMajor
    • verMinor

      public final int verMinor
    • i2cpProps

      protected final Properties i2cpProps
      I2CP options configuring the I2CP connection (port, host, numHops, etc)
    • stopLock

      protected final Object stopLock
    • stopHandler

      protected boolean stopHandler
  • Constructor Details

    • SAMHandler

      protected SAMHandler(SocketChannel s, int verMajor, int verMinor, Properties i2cpProps, SAMBridge parent) throws IOException
      SAMHandler constructor (to be called by subclasses)
      Parameters:
      s - Socket attached to a SAM client
      verMajor - SAM major version to manage
      verMinor - SAM minor version to manage
      i2cpProps - properties to configure the I2CP connection (host, port, etc)
      Throws:
      IOException
  • Method Details

    • startHandling

      public final void startHandling()
      Start handling the SAM connection, detaching an handling thread.
    • handle

      protected abstract void handle()
      Actually handle the SAM protocol.
    • getClientSocket

      protected final SocketChannel getClientSocket()
      Get the channel of the socket connected to the SAM client
      Returns:
      channel
    • writeBytes

      protected final void writeBytes(ByteBuffer data) throws IOException
      Write a byte array on the handler's socket. This method must always be used when writing data, unless you really know what you're doing.
      Parameters:
      data - A byte array to be written
      Throws:
      IOException
    • getWriteLock

      protected Object getWriteLock()
      If you're crazy enough to write to the raw socket, grab the write lock with getWriteLock(), synchronize against it, and write to the getOut()
      Returns:
      socket Write lock object
    • writeString

      protected final boolean writeString(String str)
      Write a string to the handler's socket. This method must always be used when writing strings, unless you really know what you're doing.
      Parameters:
      str - A byte array to be written
      Returns:
      True if the string was successfully written, false otherwise
    • writeString

      public static boolean writeString(String str, SocketChannel out)
      Unsynchronized, use with caution
      Returns:
      success
    • closeClientSocket

      protected final void closeClientSocket() throws IOException
      Close the socket connected to the SAM client.
      Throws:
      IOException
    • stopHandling

      public void stopHandling()
      Stop the SAM handler, close the client socket, unregister with the bridge.
      Specified by:
      stopHandling in interface Handler
    • shouldStop

      protected final boolean shouldStop()
      Should the handler be stopped?
      Returns:
      True if the handler should be stopped, false otherwise
    • toString

      public final String toString()
      Get a string describing the handler.
      Overrides:
      toString in class Object
      Returns:
      A String describing the handler;
    • run

      public final void run()
      Register with the bridge, call handle(), unregister with the bridge.
      Specified by:
      run in interface Runnable