net.i2p.sam
Class SAMv3Handler

java.lang.Object
  extended by net.i2p.sam.SAMHandler
      extended by net.i2p.sam.SAMv1Handler
          extended by net.i2p.sam.SAMv3Handler
All Implemented Interfaces:
Runnable, Handler, SAMDatagramReceiver, SAMRawReceiver, SAMStreamReceiver

 class SAMv3Handler
extends SAMv1Handler

Class able to handle a SAM version 3 client connection.

Author:
mkvore

Nested Class Summary
static class SAMv3Handler.DatagramServer
           
(package private) static interface SAMv3Handler.Session
           
static class SAMv3Handler.SessionRecord
          The values in the SessionsDB
static class SAMv3Handler.SessionsDB
          basically a HashMap from String to SessionRecord
 
Field Summary
static SAMv3Handler.SessionsDB sSessionsHash
           
 
Fields inherited from class net.i2p.sam.SAMv1Handler
_id, datagramSession, rawSession, streamSession
 
Fields inherited from class net.i2p.sam.SAMHandler
_log, bridge, i2cpProps, socket, stopHandler, stopLock, thread, verMajor, verMinor
 
Constructor Summary
SAMv3Handler(SocketChannel s, int verMajor, int verMinor, Properties i2cpProps, SAMBridge parent)
          Create a new SAM version 3 handler.
SAMv3Handler(SocketChannel s, int verMajor, int verMinor, SAMBridge parent)
          Create a new SAM version 3 handler.
 
Method Summary
protected  boolean execSessionMessage(String opcode, Properties props)
           
protected  boolean execStreamAccept(Properties props)
           
protected  boolean execStreamConnect(Properties props)
           
protected  boolean execStreamForwardIncoming(Properties props)
           
protected  boolean execStreamMessage(String opcode, Properties props)
           
(package private)  SAMBridge getBridge()
          For SAMv3StreamSession
 String getClientIP()
           
 void handle()
          Actually handle the SAM protocol.
 void notifyStreamIncomingConnection(Destination d)
           
static void notifyStreamIncomingConnection(SocketChannel client, Destination d)
           
 void notifyStreamResult(boolean verbose, String result, String message)
           
 void stealSocket()
          For SAMv3StreamSession connect and accept
 void stopHandling()
          Stop the SAM handler, close the socket, unregister with the bridge.
 boolean verifVersion()
           
 
Methods inherited from class net.i2p.sam.SAMv1Handler
createMessageString, execDatagramMessage, execDestMessage, execNamingMessage, execRawMessage, execStreamClose, execStreamSend, getDatagramSession, getRawSession, getStreamSession, notifyStreamDisconnection, notifyStreamIncomingConnection, notifyStreamOutgoingConnection, notifyStreamSendBufferFree, receiveDatagramBytes, receiveRawBytes, receiveStreamBytes, stopDatagramReceiving, stopRawReceiving, stopStreamReceiving, streamSendAnswer
 
Methods inherited from class net.i2p.sam.SAMHandler
closeClientSocket, getClientSocket, getWriteLock, run, shouldStop, startHandling, toString, writeBytes, writeBytes, writeString, writeString
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

sSessionsHash

public static final SAMv3Handler.SessionsDB sSessionsHash
Constructor Detail

SAMv3Handler

public SAMv3Handler(SocketChannel s,
                    int verMajor,
                    int verMinor,
                    SAMBridge parent)
             throws SAMException,
                    IOException
Create a new SAM version 3 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 3)
verMinor - SAM minor version to manage
Throws:
SAMException
IOException

SAMv3Handler

public SAMv3Handler(SocketChannel s,
                    int verMajor,
                    int verMinor,
                    Properties i2cpProps,
                    SAMBridge parent)
             throws SAMException,
                    IOException
Create a new SAM version 3 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 3)
verMinor - SAM minor version to manage
i2cpProps - properties to configure the I2CP connection (host, port, etc)
Throws:
SAMException
IOException
Method Detail

verifVersion

public boolean verifVersion()
Overrides:
verifVersion in class SAMv1Handler

getClientIP

public String getClientIP()

stealSocket

public void stealSocket()
For SAMv3StreamSession connect and accept


getBridge

SAMBridge getBridge()
For SAMv3StreamSession

Since:
0.9.20

handle

public void handle()
Description copied from class: SAMHandler
Actually handle the SAM protocol.

Overrides:
handle in class SAMv1Handler

stopHandling

public void stopHandling()
Stop the SAM handler, close the socket, unregister with the bridge. Overridden to not close the client socket if stolen.

Specified by:
stopHandling in interface Handler
Overrides:
stopHandling in class SAMHandler
Since:
0.9.20

execSessionMessage

protected boolean execSessionMessage(String opcode,
                                     Properties props)
Overrides:
execSessionMessage in class SAMv1Handler

execStreamMessage

protected boolean execStreamMessage(String opcode,
                                    Properties props)
Overrides:
execStreamMessage in class SAMv1Handler

execStreamConnect

protected boolean execStreamConnect(Properties props)
Overrides:
execStreamConnect in class SAMv1Handler

execStreamForwardIncoming

protected boolean execStreamForwardIncoming(Properties props)

execStreamAccept

protected boolean execStreamAccept(Properties props)

notifyStreamResult

public void notifyStreamResult(boolean verbose,
                               String result,
                               String message)
                        throws IOException
Throws:
IOException

notifyStreamIncomingConnection

public void notifyStreamIncomingConnection(Destination d)
                                    throws IOException
Throws:
IOException

notifyStreamIncomingConnection

public static void notifyStreamIncomingConnection(SocketChannel client,
                                                  Destination d)
                                           throws IOException
Throws:
IOException