Package net.i2p.sam

Class SAMv1Handler

java.lang.Object
net.i2p.sam.SAMHandler
net.i2p.sam.SAMv1Handler
All Implemented Interfaces:
Runnable, Handler, SAMDatagramReceiver, SAMRawReceiver, SAMStreamReceiver
Direct Known Subclasses:
SAMv2Handler, SAMv3Handler

class SAMv1Handler extends SAMHandler implements SAMRawReceiver, SAMDatagramReceiver, SAMStreamReceiver
Class able to handle a SAM version 1 client connections.
Author:
human
  • Field Details

  • Constructor Details

    • SAMv1Handler

      public SAMv1Handler(SocketChannel s, int verMajor, int verMinor, SAMBridge parent) throws SAMException, IOException
      Create a new SAM version 1 handler. This constructor expects that the SAM HELLO message has been still answered (and stripped) from the socket input stream.
      Parameters:
      s - Socket attached to a SAM client
      verMajor - SAM major version to manage (should be 1)
      verMinor - SAM minor version to manage
      Throws:
      SAMException
      IOException
    • SAMv1Handler

      public SAMv1Handler(SocketChannel s, int verMajor, int verMinor, Properties i2cpProps, SAMBridge parent) throws SAMException, IOException
      Create a new SAM version 1 handler. This constructor expects that the SAM HELLO message has been still answered (and stripped) from the socket input stream.
      Parameters:
      s - Socket attached to a SAM client
      verMajor - SAM major version to manage (should be 1)
      verMinor - SAM minor version to manage
      i2cpProps - properties to configure the I2CP connection (host, port, etc)
      Throws:
      SAMException
      IOException
  • Method Details

    • getRawSession

      protected final SAMMessageSess getRawSession()
    • getDatagramSession

      protected final SAMMessageSess getDatagramSession()
    • getStreamSession

      protected final SAMStreamSession getStreamSession()
    • verifVersion

      public boolean verifVersion()
    • handle

      public void handle()
      Description copied from class: SAMHandler
      Actually handle the SAM protocol.
      Specified by:
      handle in class SAMHandler
    • execSessionMessage

      protected boolean execSessionMessage(String opcode, Properties props)
    • execDestMessage

      protected boolean execDestMessage(String opcode, Properties props)
    • execNamingMessage

      protected boolean execNamingMessage(String opcode, Properties props)
    • execDatagramMessage

      protected boolean execDatagramMessage(String opcode, Properties props)
    • execRawMessage

      protected boolean execRawMessage(String opcode, Properties props)
    • execStreamMessage

      protected boolean execStreamMessage(String opcode, Properties props)
    • execStreamSend

      protected boolean execStreamSend(Properties props)
    • execStreamConnect

      protected boolean execStreamConnect(Properties props)
    • execStreamClose

      protected boolean execStreamClose(Properties props)
    • receiveRawBytes

      public void receiveRawBytes(byte[] data, int proto, int fromPort, int toPort) throws IOException
      Description copied from interface: SAMRawReceiver
      Send a byte array to a SAM client, without informations regarding the sender.
      Specified by:
      receiveRawBytes in interface SAMRawReceiver
      Parameters:
      data - Byte array to be received
      proto - I2CP protocol
      fromPort - I2CP from port
      toPort - I2CP to port
      Throws:
      IOException
    • stopRawReceiving

      public void stopRawReceiving()
      Description copied from interface: SAMRawReceiver
      Stop receiving data.
      Specified by:
      stopRawReceiving in interface SAMRawReceiver
    • receiveDatagramBytes

      public void receiveDatagramBytes(Destination sender, byte[] data, int proto, int fromPort, int toPort) throws IOException
      Description copied from interface: SAMDatagramReceiver
      Send a byte array to a SAM client.
      Specified by:
      receiveDatagramBytes in interface SAMDatagramReceiver
      Parameters:
      sender - Destination
      data - Byte array to be received
      proto - I2CP protocol
      fromPort - I2CP from port
      toPort - I2CP to port
      Throws:
      IOException
    • stopDatagramReceiving

      public void stopDatagramReceiving()
      Description copied from interface: SAMDatagramReceiver
      Stop receiving data.
      Specified by:
      stopDatagramReceiving in interface SAMDatagramReceiver
    • streamSendAnswer

      public void streamSendAnswer(int id, String result, String bufferState) throws IOException
      Description copied from interface: SAMStreamReceiver
      Sends the result of a stream send operation
      Specified by:
      streamSendAnswer in interface SAMStreamReceiver
      Parameters:
      id - Stream ID
      result - information
      bufferState - state of the buffer
      Throws:
      IOException
    • notifyStreamSendBufferFree

      public void notifyStreamSendBufferFree(int id) throws IOException
      Description copied from interface: SAMStreamReceiver
      Notifies that the outwards buffer is free for writing
      Specified by:
      notifyStreamSendBufferFree in interface SAMStreamReceiver
      Parameters:
      id - stream ID
      Throws:
      IOException
    • notifyStreamIncomingConnection

      public void notifyStreamIncomingConnection(int id, Destination d) throws IOException
      Description copied from interface: SAMStreamReceiver
      Notify about a new incoming connection
      Specified by:
      notifyStreamIncomingConnection in interface SAMStreamReceiver
      Parameters:
      id - New connection id
      d - Destination
      Throws:
      IOException
    • notifyStreamOutgoingConnection

      public void notifyStreamOutgoingConnection(int id, String result, String msg) throws IOException
      Description copied from interface: SAMStreamReceiver
      Notify about a new outgoing connection
      Specified by:
      notifyStreamOutgoingConnection in interface SAMStreamReceiver
      Parameters:
      id - New connection id
      result - message result
      msg - may be null
      Throws:
      IOException
    • createMessageString

      protected static String createMessageString(String msg)
      Create a string to be appended to a status.
      Parameters:
      msg - may be null
      Returns:
      non-null, "" if msg is null, MESSAGE=msg or MESSAGE="msg a b c" with leading space if msg is non-null
      Since:
      0.9.20
    • writeString

      protected boolean writeString(String s, String msg)
      Write a string and message, escaping the message. Writes s + createMessageString(msg) + \n
      Parameters:
      s - The string, non-null
      Since:
      0.9.25
    • receiveStreamBytes

      public void receiveStreamBytes(int id, ByteBuffer data) throws IOException
      Description copied from interface: SAMStreamReceiver
      Transmit a byte array from I2P to a SAM client.
      Specified by:
      receiveStreamBytes in interface SAMStreamReceiver
      Parameters:
      id - Connection id
      data - Byte array to be received
      Throws:
      IOException
    • notifyStreamDisconnection

      public void notifyStreamDisconnection(int id, String result, String msg) throws IOException
      Description copied from interface: SAMStreamReceiver
      Notify that a connection has been closed FIXME: this interface should be cleaner
      Specified by:
      notifyStreamDisconnection in interface SAMStreamReceiver
      Parameters:
      id - Connection id
      result - Disconnection reason ("OK" or something else)
      msg - may be null
      Throws:
      IOException
    • stopStreamReceiving

      public void stopStreamReceiving()
      Description copied from interface: SAMStreamReceiver
      Stop receiving data.
      Specified by:
      stopStreamReceiving in interface SAMStreamReceiver