package net.i2p.data.i2cp; /* * free (adj.): unencumbered; not under the control of others * Written by jrandom in 2003 and released into the public domain * with no warranty of any kind, either expressed or implied. * It probably won't make your computer catch on fire, or eat * your children, but it might. Use at your own risk. * */ import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import net.i2p.data.DataStructure; /** * Defines the base functionality of API messages * * @author jrandom */ public interface I2CPMessage extends DataStructure { /** * Read the contents from the input stream into the current class's format. * The stream should be the message body as defined by the client access layer * specification after the message header (4 bytes specifying the size of the * message, 1 byte specifying the type of the message). * * @param in stream to read from * @param size number of bytes in the message payload * @param type type of message (should equal getType()) * @throws I2CPMessageException if the stream doesn't contain a valid message * that this class can read. * @throws IOException if there is a problem reading from the stream */ public void readMessage(InputStream in, int size, int type) throws I2CPMessageException, IOException; /** * Read the contents from the input stream into the current class's format. * The stream should be the message header and body as defined by the I2CP * specification * * @param in stream to read from * @throws I2CPMessageException if the stream doesn't contain a valid message * that this class can read. * @throws IOException if there is a problem reading from the stream */ public void readMessage(InputStream in) throws I2CPMessageException, IOException; /** * Write the current message to the output stream as a full message following * the specification from the I2CP definition. * * @param out OutputStream * @throws I2CPMessageException if the current object doesn't have sufficient data * to write a properly formatted message. * @throws IOException if there is a problem writing to the stream */ public void writeMessage(OutputStream out) throws I2CPMessageException, IOException; /** * Return the unique identifier for this type of message, as specified in the * network specification document under #ClientAccessLayerMessages * @return unique identifier for this type of message */ public int getType(); /** * Return the SessionId for this type of message. * Most but not all message types include a SessionId. * The ones that do already define getSessionId(), but some return a SessionId and * some return a long, so we define a new method here. * * @return SessionId or null if this message type does not include a SessionId * @since 0.9.21 */ public SessionId sessionId(); }