package net.i2p.client;
/*
* 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 java.util.Properties;
import net.i2p.I2PException;
import net.i2p.crypto.SigType;
import net.i2p.data.Certificate;
import net.i2p.data.Destination;
/**
* Define the standard means of interacting with the I2P system
*
* An I2PClient contains no state, it is just a facility for creating private key files
* and generating sesssions from existing private key files.
*
* @author jrandom
*/
public interface I2PClient {
/** Standard host property, defaulting to localhost if not specified */
public final static String PROP_TCP_HOST = "i2cp.tcp.host";
/** Standard port number property */
public final static String PROP_TCP_PORT = "i2cp.tcp.port";
/** Reliability property */
public final static String PROP_RELIABILITY = "i2cp.messageReliability";
/** Reliability value: best effort */
public final static String PROP_RELIABILITY_BEST_EFFORT = "BestEffort";
/** Reliability value: guaranteed */
public final static String PROP_RELIABILITY_GUARANTEED = "Guaranteed";
/** @since 0.8.1 */
public final static String PROP_RELIABILITY_NONE = "none";
/** @since 0.9.12 */
public static final String PROP_SIGTYPE = "i2cp.destination.sigType";
/** @since 0.9.12 */
public static final SigType DEFAULT_SIGTYPE = SigType.DSA_SHA1;
/**
* For router->client payloads.
*
* If false, the router will send the MessageStatus,
* the client must respond with a ReceiveMessageBegin,
* the router will send the MessagePayload,
* and the client respond with a ReceiveMessageEnd.
*
* If true, the router will send the MessagePayload immediately,
* and will not send a MessageStatus.
* The client will not send ReceiveMessageBegin or ReceiveMessageEnd.
*
* Default false, but the implementation in this package sets to true.
*
* @since 0.9.4
*/
public final static String PROP_FAST_RECEIVE = "i2cp.fastReceive";
/** protocol flag that must be sent when opening the i2cp connection to the router */
public final static int PROTOCOL_BYTE = 0x2A;
/** Create a new client session for the Destination stored at the destKeyStream
* using the specified options to both connect to the router, to instruct
* the router how to handle the new session, and to configure the end to end
* encryption.
*
* As of 0.9.19, defaults in options are honored.
*
* @param destKeyStream location from which to read the Destination, PrivateKey, and SigningPrivateKey from,
* format is specified in {@link net.i2p.data.PrivateKeyFile PrivateKeyFile}
* @param options set of options to configure the router with, if null will use System properties
* @return new session allowing a Destination to recieve all of its messages and send messages to any other Destination.
*/
public I2PSession createSession(InputStream destKeyStream, Properties options) throws I2PSessionException;
/** Create a new destination with the default certificate creation properties and store
* it, along with the private encryption and signing keys at the specified location
*
* Caller must close stream.
*
* @param destKeyStream create a new destination and write out the object to the given stream,
* formatted as Destination, PrivateKey, and SigningPrivateKey
* format is specified in {@link net.i2p.data.PrivateKeyFile PrivateKeyFile}
* @return new destination
*/
public Destination createDestination(OutputStream destKeyStream) throws I2PException, IOException;
/**
* Create a destination with the given signature type.
* It will have a null certificate for DSA 1024/160 and KeyCertificate otherwise.
* This is not bound to the I2PClient, you must supply the data back again
* in createSession().
*
* Caller must close stream.
*
* @param destKeyStream location to write out the destination, PrivateKey, and SigningPrivateKey,
* format is specified in {@link net.i2p.data.PrivateKeyFile PrivateKeyFile}
* @since 0.9.12
*/
public Destination createDestination(OutputStream destKeyStream, SigType type) throws I2PException, IOException;
/** Create a new destination with the given certificate and store it, along with the private
* encryption and signing keys at the specified location
*
* Caller must close stream.
*
* @param destKeyStream location to write out the destination, PrivateKey, and SigningPrivateKey,
* format is specified in {@link net.i2p.data.PrivateKeyFile PrivateKeyFile}
* @param cert certificate to tie to the destination
* @return newly created destination
*/
public Destination createDestination(OutputStream destKeyStream, Certificate cert) throws I2PException, IOException;
}