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 Summary
FieldsModifier and TypeFieldDescriptionprotected final longprotected SAMMessageSessprotected SAMMessageSessprotected static final Stringprotected SAMStreamSessionFields inherited from class net.i2p.sam.SAMHandler
_log, bridge, i2cpProps, socket, stopHandler, stopLock, thread, verMajor, verMinor -
Constructor Summary
ConstructorsConstructorDescriptionSAMv1Handler(SocketChannel s, int verMajor, int verMinor, Properties i2cpProps, SAMBridge parent) Create a new SAM version 1 handler.SAMv1Handler(SocketChannel s, int verMajor, int verMinor, SAMBridge parent) Create a new SAM version 1 handler. -
Method Summary
Modifier and TypeMethodDescriptionprotected static StringCreate a string to be appended to a status.protected booleanexecDatagramMessage(String opcode, Properties props) protected booleanexecDestMessage(String opcode, Properties props) protected booleanexecNamingMessage(String opcode, Properties props) protected booleanexecRawMessage(String opcode, Properties props) protected booleanexecSessionMessage(String opcode, Properties props) protected booleanexecStreamClose(Properties props) protected booleanexecStreamConnect(Properties props) protected booleanexecStreamMessage(String opcode, Properties props) protected booleanexecStreamSend(Properties props) protected final SAMMessageSessprotected final SAMMessageSessprotected final SAMStreamSessionvoidhandle()Actually handle the SAM protocol.voidnotifyStreamDisconnection(int id, String result, String msg) Notify that a connection has been closed FIXME: this interface should be cleanervoidnotifyStreamIncomingConnection(int id, Destination d) Notify about a new incoming connectionvoidnotifyStreamOutgoingConnection(int id, String result, String msg) Notify about a new outgoing connectionvoidnotifyStreamSendBufferFree(int id) Notifies that the outwards buffer is free for writingvoidreceiveDatagramBytes(Destination sender, byte[] data, int proto, int fromPort, int toPort) Send a byte array to a SAM client.voidreceiveRawBytes(byte[] data, int proto, int fromPort, int toPort) Send a byte array to a SAM client, without informations regarding the sender.voidreceiveStreamBytes(int id, ByteBuffer data) Transmit a byte array from I2P to a SAM client.voidStop receiving data.voidStop receiving data.voidStop receiving data.voidstreamSendAnswer(int id, String result, String bufferState) Sends the result of a stream send operationbooleanprotected booleanwriteString(String s, String msg) Write a string and message, escaping the message.Methods inherited from class net.i2p.sam.SAMHandler
closeClientSocket, getClientSocket, getWriteLock, run, shouldStop, startHandling, stopHandling, toString, writeBytes, writeString, writeString
-
Field Details
-
rawSession
-
datagramSession
-
streamSession
-
_id
protected final long _id -
SESSION_ERROR
- See Also:
-
-
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 clientverMajor- SAM major version to manage (should be 1)verMinor- SAM minor version to manage- Throws:
SAMExceptionIOException
-
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 clientverMajor- SAM major version to manage (should be 1)verMinor- SAM minor version to managei2cpProps- properties to configure the I2CP connection (host, port, etc)- Throws:
SAMExceptionIOException
-
-
Method Details
-
getRawSession
-
getDatagramSession
-
getStreamSession
-
verifVersion
public boolean verifVersion() -
handle
public void handle()Description copied from class:SAMHandlerActually handle the SAM protocol.- Specified by:
handlein classSAMHandler
-
execSessionMessage
-
execDestMessage
-
execNamingMessage
-
execDatagramMessage
-
execRawMessage
-
execStreamMessage
-
execStreamSend
-
execStreamConnect
-
execStreamClose
-
receiveRawBytes
Description copied from interface:SAMRawReceiverSend a byte array to a SAM client, without informations regarding the sender.- Specified by:
receiveRawBytesin interfaceSAMRawReceiver- Parameters:
data- Byte array to be receivedproto- I2CP protocolfromPort- I2CP from porttoPort- I2CP to port- Throws:
IOException
-
stopRawReceiving
public void stopRawReceiving()Description copied from interface:SAMRawReceiverStop receiving data.- Specified by:
stopRawReceivingin interfaceSAMRawReceiver
-
receiveDatagramBytes
public void receiveDatagramBytes(Destination sender, byte[] data, int proto, int fromPort, int toPort) throws IOException Description copied from interface:SAMDatagramReceiverSend a byte array to a SAM client.- Specified by:
receiveDatagramBytesin interfaceSAMDatagramReceiver- Parameters:
sender- Destinationdata- Byte array to be receivedproto- I2CP protocolfromPort- I2CP from porttoPort- I2CP to port- Throws:
IOException
-
stopDatagramReceiving
public void stopDatagramReceiving()Description copied from interface:SAMDatagramReceiverStop receiving data.- Specified by:
stopDatagramReceivingin interfaceSAMDatagramReceiver
-
streamSendAnswer
Description copied from interface:SAMStreamReceiverSends the result of a stream send operation- Specified by:
streamSendAnswerin interfaceSAMStreamReceiver- Parameters:
id- Stream IDresult- informationbufferState- state of the buffer- Throws:
IOException
-
notifyStreamSendBufferFree
Description copied from interface:SAMStreamReceiverNotifies that the outwards buffer is free for writing- Specified by:
notifyStreamSendBufferFreein interfaceSAMStreamReceiver- Parameters:
id- stream ID- Throws:
IOException
-
notifyStreamIncomingConnection
Description copied from interface:SAMStreamReceiverNotify about a new incoming connection- Specified by:
notifyStreamIncomingConnectionin interfaceSAMStreamReceiver- Parameters:
id- New connection idd- Destination- Throws:
IOException
-
notifyStreamOutgoingConnection
Description copied from interface:SAMStreamReceiverNotify about a new outgoing connection- Specified by:
notifyStreamOutgoingConnectionin interfaceSAMStreamReceiver- Parameters:
id- New connection idresult- message resultmsg- may be null- Throws:
IOException
-
createMessageString
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
Write a string and message, escaping the message. Writes s + createMessageString(msg) + \n- Parameters:
s- The string, non-null- Since:
- 0.9.25
-
receiveStreamBytes
Description copied from interface:SAMStreamReceiverTransmit a byte array from I2P to a SAM client.- Specified by:
receiveStreamBytesin interfaceSAMStreamReceiver- Parameters:
id- Connection iddata- Byte array to be received- Throws:
IOException
-
notifyStreamDisconnection
Description copied from interface:SAMStreamReceiverNotify that a connection has been closed FIXME: this interface should be cleaner- Specified by:
notifyStreamDisconnectionin interfaceSAMStreamReceiver- Parameters:
id- Connection idresult- Disconnection reason ("OK" or something else)msg- may be null- Throws:
IOException
-
stopStreamReceiving
public void stopStreamReceiving()Description copied from interface:SAMStreamReceiverStop receiving data.- Specified by:
stopStreamReceivingin interfaceSAMStreamReceiver
-