Packages that use I2PSession
Package
Description
Interfaces and factories for the base I2P SDK used to develop applications that communicate through I2P.
Provides a standard way for reading and writing messages transferred over I2P so that the recipient has an authenticated mechanism to reply to the sender.
Internal implementation of the I2P client SDK - the client side of the Invisible Internet Client Protocol (I2CP), separating implementation from the interfaces in
net.i2p.client. API, interfaces, and factory for a TCP-like (reliable, authenticated, in order) set of sockets for communicating over IP-like (unreliable, unauthenticated, unordered) I2P messages.
Implementation of a TCP-like (reliable, authenticated, in order) set of sockets for communicating over the IP-like (unreliable, unauthenticated, unordered) I2P messages.
Common data structures used by the I2P protocols: Destination, LeaseSet, PublicKey, Signature, Certificate and their friends.
Implementation of preconfigured tunnels for clients and servers, including special-purpose tunnels for IRC, SOCKS, HTTP and streaming.
Datagram plumbing for UDP tunnels: sinks and sources that bridge a local UDP socket and an I2P stream, framing each datagram onto the stream and back.
Base classes for UDP client and server tunnels, mapping a local UDP port to an I2P tunnel through the sinks and sources in
net.i2p.i2ptunnel.udp. The SAM bridge: a simple text protocol server letting applications in any language use I2P streaming and datagram sessions without implementing the Invisible Internet Client Protocol (I2CP).
I2P version of the Snark BitTorrent client, enhanced for I2P: peers are I2P destinations, torrents can be served anonymously as hidden services, and metadata carries I2P-specific comment fields.
BitTorrent distributed hash table (DHT) implementation following the Mainline protocol, for trackerless peer discovery.
Uses of I2PSession in net.i2p.client
Methods in net.i2p.client that return I2PSessionModifier and TypeMethodDescriptionI2PSession.addSubsession(InputStream privateKeyStream, Properties opts) Add a subsession.I2PClient.createSession(InputStream destKeyStream, Properties options) 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.I2PSimpleClient.createSession(InputStream destKeyStream, Properties options) Create a new session (though do not connect it yet).I2PSimpleClient.createSession(I2PAppContext context, Properties options) Create a new session (though do not connect it yet).Methods in net.i2p.client that return types with arguments of type I2PSessionMethods in net.i2p.client with parameters of type I2PSessionModifier and TypeMethodDescriptionvoidI2PSessionListener.disconnected(I2PSession session) Notify the client that the session has been terminated.voidI2PSessionMuxedListener.disconnected(I2PSession session) Notify the client that the session has been terminated.voidI2PSessionListener.errorOccurred(I2PSession session, String message, Throwable error) Notify the client that some error occurred.voidI2PSessionMuxedListener.errorOccurred(I2PSession session, String message, Throwable error) Notify the client that some error occurred.voidI2PSessionListener.messageAvailable(I2PSession session, int msgId, long size) Instruct the client that the given session has received a message with size # of bytes.voidI2PSessionMuxedListener.messageAvailable(I2PSession session, int msgId, long size) Will be called only if you register via setSessionListener() or addSessionListener().voidI2PSessionMuxedListener.messageAvailable(I2PSession session, int msgId, long size, int proto, int fromport, int toport) Instruct the client that the given session has received a messagevoidSendMessageStatusListener.messageStatus(I2PSession session, long msgId, int status) Tell the client of an update in the send status for a message previously sent withI2PSession.sendMessage(Destination, byte[]).voidI2PSession.removeSubsession(I2PSession session) Remove a subsession.voidI2PSessionListener.reportAbuse(I2PSession session, int severity) Instruct the client that the session specified seems to be under attack and that the client may wish to move its destination to another router.voidI2PSessionMuxedListener.reportAbuse(I2PSession session, int severity) Instruct the client that the session specified seems to be under attack and that the client may wish to move its destination to another router.Uses of I2PSession in net.i2p.client.datagram
Methods in net.i2p.client.datagram with parameters of type I2PSessionModifier and TypeMethodDescriptionstatic Datagram2Datagram2.load(I2PAppContext ctx, I2PSession session, byte[] dgram) Load an I2P repliable datagram and verify the signature.static Datagram3Datagram3.load(I2PAppContext ctx, I2PSession session, byte[] dgram) Load an I2P repliable datagram3.static byte[]Datagram2.make(I2PAppContext ctx, I2PSession session, byte[] payload, Hash tohash) Make a repliable I2P datagram2 containing the specified payload.static byte[]Datagram2.make(I2PAppContext ctx, I2PSession session, byte[] payload, Hash tohash, Properties options) Make a repliable I2P datagram2 containing the specified payload.static byte[]Datagram3.make(I2PAppContext ctx, I2PSession session, byte[] payload) Make a repliable I2P datagram3 containing the specified payload.static byte[]Datagram3.make(I2PAppContext ctx, I2PSession session, byte[] payload, Properties options) Make a repliable I2P datagram3 containing the specified payload.voidI2PDatagramMaker.setI2PDatagramMaker(I2PSession session) Does NOT support LS2 offline keys!Constructors in net.i2p.client.datagram with parameters of type I2PSessionModifierConstructorDescriptionI2PDatagramMaker(I2PSession session) An I2PDatagramMaker able to create I2P repliable datagrams going to be sent through the specified I2PSession.Uses of I2PSession in net.i2p.client.impl
Classes in net.i2p.client.impl that implement I2PSessionModifier and TypeClassDescriptionclassImplementation of an I2P session running over TCP.(package private) classThread safe implementation of an I2P session running over TCP.(package private) classI2PSession with protocol and portsclassCreate a new session for doing naming and bandwidth queries only.(package private) classAn additional session using another session's connection.Fields in net.i2p.client.impl declared as I2PSessionModifier and TypeFieldDescriptionprivate final I2PSessionMessageState._sessionThe session the message was sent on.Methods in net.i2p.client.impl that return I2PSessionModifier and TypeMethodDescriptionI2PSessionImpl.addSubsession(InputStream privateKeyStream, Properties opts) Router must be connected or was connected...SubSession.addSubsession(InputStream destKeyStream, Properties opts) Unsupported in a subsession.I2PClientImpl.createSession(InputStream destKeyStream, Properties options) Create a new session (though do not connect it yet).I2PClientImpl.createSession(I2PAppContext context, InputStream destKeyStream, Properties options) Create a new session (though do not connect it yet).Methods in net.i2p.client.impl that return types with arguments of type I2PSessionModifier and TypeMethodDescriptionI2PSessionImpl.getSubsessions()List of subsessions, non-null, does not include the primary session.SubSession.getSubsessions()Unsupported in a subsession.Methods in net.i2p.client.impl with parameters of type I2PSessionModifier and TypeMethodDescriptionvoidI2PSessionDemultiplexer.disconnected(I2PSession session) voidI2PSessionDemultiplexer.NoPortsListener.disconnected(I2PSession session) voidI2PSessionDemultiplexer.errorOccurred(I2PSession session, String message, Throwable error) voidI2PSessionDemultiplexer.NoPortsListener.errorOccurred(I2PSession session, String message, Throwable error) voidI2PSessionDemultiplexer.messageAvailable(I2PSession session, int msgId, long size) Intentional no-op.voidI2PSessionDemultiplexer.messageAvailable(I2PSession session, int msgId, long size, int proto, int fromport, int toport) Notify the best-matching listener for the protocol and port.voidI2PSessionDemultiplexer.NoPortsListener.messageAvailable(I2PSession session, int msgId, long size) voidI2PSessionDemultiplexer.NoPortsListener.messageAvailable(I2PSession session, int msgId, long size, int proto, int fromport, int toport) voidI2PSessionImpl.removeSubsession(I2PSession session) No-op, this session has no subsessions.voidSubSession.removeSubsession(I2PSession session) Unsupported in a subsession.voidI2PSessionDemultiplexer.NoPortsListener.reportAbuse(I2PSession session, int severity) voidI2PSessionDemultiplexer.reportAbuse(I2PSession session, int severity) Constructors in net.i2p.client.impl with parameters of type I2PSessionModifierConstructorDescriptionMessageState(I2PAppContext ctx, long nonce, I2PSession session, long expires, SendMessageStatusListener listener) Track a sent message's delivery state for asynchronous notification.SubSession(I2PSession primary, InputStream destKeyStream, Properties options) Must be a I2PSessionMuxedImpl.Uses of I2PSession in net.i2p.client.streaming
Methods in net.i2p.client.streaming that return I2PSessionModifier and TypeMethodDescriptionI2PSocketManager.addSubsession(InputStream privateKeyStream, Properties opts) For a server, you must call connect() on the returned object.I2PSocketManager.getSession()The I2P session associated with this manager.Methods in net.i2p.client.streaming that return types with arguments of type I2PSessionModifier and TypeMethodDescriptionI2PSocketManager.getSubsessions()All subsessions of the primary session.Methods in net.i2p.client.streaming with parameters of type I2PSessionModifier and TypeMethodDescriptionprivate static I2PSocketManagerI2PSocketManagerFactory.createManager(I2PSession session, Properties opts, String name, IncomingConnectionFilter filter) Wraps a session as a socket manager.voidI2PSocketManager.removeSubsession(I2PSession session) Remove a subsession.Uses of I2PSession in net.i2p.client.streaming.impl
Fields in net.i2p.client.streaming.impl declared as I2PSessionModifier and TypeFieldDescriptionprivate final I2PSessionConnection._sessionI2P session used to send and receive messages.private final I2PSessionConnectionManager._sessionThe session carrying the packets.private final I2PSessionI2PSocketManagerFull._sessionThe session serving this manager.protected final I2PSessionPacket._sessionSession the packet travels over, set at construction.Fields in net.i2p.client.streaming.impl with type parameters of type I2PSessionModifier and TypeFieldDescriptionprivate final Set<I2PSession> I2PSocketManagerFull._subsessionsExtra sessions opened for bandwidth.private final Map<I2PSession, ConnectionOptions> I2PSocketManagerFull._subsessionsOptionsOptions each subsession was opened with.Methods in net.i2p.client.streaming.impl that return I2PSessionModifier and TypeMethodDescriptionI2PSocketManagerFull.addSubsession(InputStream privateKeyStream, Properties opts) For a server, you must callI2PSocketManagerFull.connect(Destination, I2PSocketOptions)on the returned object.Connection.getSession()I2P session for this connection.ConnectionManager.getSession()This is the primary session only.I2PSocketManagerFull.getSession()The I2P session for this socket manager.Packet.getSession()Return the session this packet belongs to.Methods in net.i2p.client.streaming.impl that return types with arguments of type I2PSessionModifier and TypeMethodDescriptionI2PSocketManagerFull.getSubsessions()Subsession list, not including the primary session.Methods in net.i2p.client.streaming.impl with parameters of type I2PSessionModifier and TypeMethodDescriptionConnectionManager.connect(Destination peer, ConnectionOptions opts, I2PSession session) Build a new connection to the given peer.voidMessageHandler.disconnected(I2PSession session) Notify the client that the session has been terminated.voidMessageHandler.errorOccurred(I2PSession session, String message, Throwable error) Notify the client that some error occurred.voidMessageHandler.messageAvailable(I2PSession session, int msgId, long size) Instruct the client that the given session has received a message with size # of bytes.voidMessageHandler.messageAvailable(I2PSession session, int msgId, long size, int proto, int fromPort, int toPort) Instruct the client that the given session has received a message with size # of bytes.voidPacketQueue.messageStatus(I2PSession session, long msgId, int status) SendMessageStatusListener interfacebooleanConnectionManager.ping(Destination peer, I2PSession session, int fromPort, int toPort, long timeoutMs) Ping the destination through a specific subsession, waiting for the pong.booleanConnectionManager.ping(Destination peer, I2PSession session, int fromPort, int toPort, long timeoutMs, boolean blocking) Ping the destination through a specific subsession, optionally blocking.byte[]ConnectionManager.ping(Destination peer, I2PSession session, int fromPort, int toPort, long timeoutMs, byte[] payload) Ping the destination with a payload through a specific subsession.booleanI2PSocketManagerFull.ping(Destination peer, I2PSession session, int localPort, int remotePort, long timeoutMs) Ping the specified peer through a specific subsession, returning true if they replied to the ping within the timeout specified, false otherwise.byte[]I2PSocketManagerFull.ping(Destination peer, I2PSession session, int localPort, int remotePort, long timeoutMs, byte[] payload) Ping the specified peer through a specific subsession, returning true if they replied to the ping within the timeout specified, false otherwise.voidI2PSocketManagerFull.removeSubsession(I2PSession session) Remove the subsession.voidMessageHandler.reportAbuse(I2PSession session, int severity) Instruct the client that the session specified seems to be under attack and that the client may wish to move its destination to another router.voidI2PSocketManagerFull.setDefaultOptions(I2PSession session, I2PSocketOptions options) Update the options on a running subsession.private voidI2PSocketManagerFull.verifySession(I2PSession session) Throw unless the session is alive and ready.Constructors in net.i2p.client.streaming.impl with parameters of type I2PSessionModifierConstructorDescriptionConnection(I2PAppContext ctx, ConnectionManager manager, I2PSession session, SchedulerChooser chooser, SimpleTimer2 timer, PacketQueue queue, ConnectionPacketHandler handler, ConnectionOptions opts, boolean isInbound) Constructor for this connection.ConnectionManager(I2PAppContext context, I2PSession session, ConnectionOptions defaultOptions, IncomingConnectionFilter connectionFilter) Manage all conns for this session.I2PSocketManagerFull(I2PAppContext context, I2PSession session, Properties opts, String name, IncomingConnectionFilter connectionFilter) This is whatI2PSocketManagerFactory.createManager()returns.Packet(I2PSession session) Does no initialization.PacketLocal(I2PAppContext ctx, Destination to, I2PSession session) Constructor for a packet not bound to a connection.Uses of I2PSession in net.i2p.data
Methods in net.i2p.data that return I2PSessionModifier and TypeMethodDescriptionPrivateKeyFile.open()Open an I2P session.PrivateKeyFile.open(Properties opts) Open a session with the given options.Constructors in net.i2p.data with parameters of type I2PSessionModifierConstructorDescriptionPrivateKeyFile(File file, I2PSession session) Create a new PrivateKeyFile from an I2P session.Uses of I2PSession in net.i2p.i2ptunnel
Fields in net.i2p.i2ptunnel with type parameters of type I2PSessionModifier and TypeFieldDescriptionprivate final Set<I2PSession> I2PTunnel._sessionsThe sessions the tunnel holds open.private List<I2PSession> TunnelController._sessionsThe tunnel's open I2CP sessions.private final Map<I2PSession, Set<TunnelController>> TunnelControllerGroup._sessionsSession ownership map for preventing premature session close.Methods in net.i2p.i2ptunnel that return I2PSessionModifier and TypeMethodDescriptionprivate I2PSessionI2PTunnelServer.addSubsession(I2PSocketManager sMgr, String alt) Add an alternate EdDSA_SHA512_Ed25519 subsession alongside a DSA_SHA1 primary session.Methods in net.i2p.i2ptunnel that return types with arguments of type I2PSessionModifier and TypeMethodDescriptionprivate Collection<I2PSession> TunnelController.getAllSessions()Get all the sessions we may be using.I2PTunnel.getSessions()Snapshot of the primary sessions in use by this tunnel's tasks.Methods in net.i2p.i2ptunnel with parameters of type I2PSessionModifier and TypeMethodDescription(package private) voidTunnelControllerGroup.acquire(TunnelController controller, I2PSession session) Note the fact that the controller is using the session so that it isn't destroyed prematurely.(package private) voidI2PTunnel.addSession(I2PSession session) Add a session to the tunnel.private voidI2PTunnelServer.checkOfflineExpiration(I2PSession session, String name, String detail) Check if the session's offline signature is about to expire.voidI2PTunnelTask.connected(I2PSession session) For tasks that don't callI2PTunnel.addSession(I2PSession)directly.voidI2PTunnelTask.disconnected(I2PSession session) Called when a session is disconnected.voidI2PTunnelTask.errorOccurred(I2PSession session, String message, Throwable error) Does nothing here.(package private) voidTunnelControllerGroup.release(TunnelController controller, I2PSession session) Note the fact that the controller is no longer using the session, and if no other controllers are using it, destroy the session.(package private) voidI2PTunnel.removeSession(I2PSession session) Remove a session from the tunnel.voidI2PTunnelTask.reportAbuse(I2PSession session, int severity) Does nothing here.Method parameters in net.i2p.i2ptunnel with type arguments of type I2PSessionModifier and TypeMethodDescriptionprivate voidTunnelController.release(Collection<I2PSession> sessions) Note the fact that we are no longer using some sessions, and if no other tunnels are using them, close them.Uses of I2PSession in net.i2p.i2ptunnel.udp
Fields in net.i2p.i2ptunnel.udp declared as I2PSessionModifier and TypeFieldDescriptionprotected final I2PSessionI2PSink.sessSession the datagrams are sent out on.protected final I2PSessionI2PSinkAnywhere.sessThe session datagrams are sent over.protected final I2PSessionI2PSource.sessThe I2P session.Methods in net.i2p.i2ptunnel.udp with parameters of type I2PSessionModifier and TypeMethodDescriptionvoidI2PSource.Listener.disconnected(I2PSession arg0) voidI2PSource.Listener.errorOccurred(I2PSession arg0, String arg1, Throwable arg2) voidI2PSource.Listener.messageAvailable(I2PSession sess, int id, long size) Always throws, since the muxed variant must be used.voidI2PSource.Listener.messageAvailable(I2PSession session, int id, long size, int proto, int fromPort, int toPort) Receive a datagram from I2P and queue it for the local socket.voidI2PSource.Listener.reportAbuse(I2PSession arg0, int arg1) Constructors in net.i2p.i2ptunnel.udp with parameters of type I2PSessionModifierConstructorDescriptionI2PSink(I2PSession sess, Destination dest) Creates a repliable (non-raw) sink for the given session and destination.I2PSink(I2PSession sess, Destination dest, boolean raw) Creates a sink for the given session and destination.I2PSink(I2PSession sess, Destination dest, boolean raw, int toPort) Creates a sink for the given session, destination, and port.I2PSinkAnywhere(I2PSession sess) Creates a repliable (non-raw) sink for the given session.I2PSinkAnywhere(I2PSession sess, boolean raw) Creates a sink for the given session.I2PSource(I2PSession sess) Creates a source handling both repliable and raw datagrams on all ports.I2PSource(I2PSession sess, I2PSource.Protocol protocol) Creates a source listening on all I2CP ports for the specified protocol.I2PSource(I2PSession sess, I2PSource.Protocol protocol, int port) Creates a source listening on the specified port for the specified protocol.Uses of I2PSession in net.i2p.i2ptunnel.udpTunnel
Fields in net.i2p.i2ptunnel.udpTunnel declared as I2PSessionModifier and TypeFieldDescriptionprivate final I2PSessionI2PTunnelUDPClientBase._sessionThe session carrying the datagrams.private I2PSessionI2PTunnelUDPServerBase._sessionThe session carrying the datagrams.Uses of I2PSession in net.i2p.sam
Fields in net.i2p.sam declared as I2PSessionModifier and TypeFieldDescriptionprivate final I2PSessionSAMMessageSession.SAMMessageSessionHandler._sessionThe session whose messages are received.private final I2PSessionSAMMessageSession.sessionThe I2P session of this SAM session.Methods in net.i2p.sam that return I2PSessionModifier and TypeMethodDescriptionprotected I2PSessionSAMMessageSession.getI2PSession()Get the I2PSession object used by the SAM message-based session.final I2PSessionSAMMessageSession.SAMMessageSessionHandler.getSession()The session.Methods in net.i2p.sam with parameters of type I2PSessionModifier and TypeMethodDescriptionvoidMasterSession.disconnected(I2PSession session) Called when the I2P session is disconnected, from the session muxed interface.voidSAMMessageSession.SAMMessageSessionHandler.disconnected(I2PSession session) Stops the session when the underlying I2P session drops.voidMasterSession.errorOccurred(I2PSession session, String message, Throwable error) Called when an I2P error occurs.voidSAMMessageSession.SAMMessageSessionHandler.errorOccurred(I2PSession session, String message, Throwable error) (package private) static DestinationSAMMessageSession.lookupDest(I2PSession session, String name) Lookup a destination through the I2CP session.voidMasterSession.messageAvailable(I2PSession session, int msgId, long size) Called when a message is available (unmuxed).voidMasterSession.messageAvailable(I2PSession session, int msgId, long size, int proto, int fromPort, int toPort) Called when a muxed message is available.voidSAMMessageSession.SAMMessageSessionHandler.messageAvailable(I2PSession session, int msgId, long size) Fetches the named message with unspecified protocol and ports.voidSAMMessageSession.SAMMessageSessionHandler.messageAvailable(I2PSession session, int msgId, long size, int proto, int fromPort, int toPort) Forward a received message to the SAM client.voidMasterSession.reportAbuse(I2PSession session, int severity) Called when abuse is reported on the session.voidSAMMessageSession.SAMMessageSessionHandler.reportAbuse(I2PSession session, int severity) Logs the abuse report and stops the session.Constructors in net.i2p.sam with parameters of type I2PSessionModifierConstructorDescriptionprotectedSAMDatagramSession(I2PSession sess, Properties props, int listenProtocol, int listenPort, SAMDatagramReceiver recv) Create a new SAM DATAGRAM session on an existing I2P session.protectedSAMMessageSession(I2PSession sess, int listenProtocol, int listenPort) Initialize a new SAM message-based session using an existing I2PSession.Create a new SAM message-based session handler on an existing I2PSession.protectedSAMRawSession(I2PSession sess, Properties props, int listenProtocol, int listenPort, SAMRawReceiver recv) Create a new SAM RAW session on an existing I2P session.SAMv3DatagramSession(String nick, Properties props, SAMv3Handler handler, I2PSession isess, int listenProtocol, int listenPort, SAMv3DatagramServer dgServer) Build a Datagram Session on an existing i2p session registered with the given nicknameSAMv3RawSession(String nick, Properties props, SAMv3Handler handler, I2PSession isess, int listenProtocol, int listenPort, SAMv3DatagramServer dgServer) Build a Raw Session on an existing i2p session registered with the given nicknameUses of I2PSession in org.klomp.snark
Fields in org.klomp.snark declared as I2PSessionModifier and TypeFieldDescriptionprivate final I2PSessionUDPTrackerClient._sessionHook to inject and receive datagrams.Methods in org.klomp.snark with parameters of type I2PSessionModifier and TypeMethodDescriptionvoidUDPTrackerClient.disconnected(I2PSession session) Handle a session disconnect.voidUDPTrackerClient.errorOccurred(I2PSession session, String message, Throwable error) Handle a session error.voidUDPTrackerClient.messageAvailable(I2PSession session, int msgId, long size) For non-muxed.voidUDPTrackerClient.messageAvailable(I2PSession session, int msgId, long size, int proto, int fromPort, int toPort) Instruct the client that the given session has received a message.voidUDPTrackerClient.reportAbuse(I2PSession session, int severity) Handle a reportAbuse message from the session.Constructors in org.klomp.snark with parameters of type I2PSessionModifierConstructorDescriptionUDPTrackerClient(I2PAppContext ctx, I2PSession session, I2PSnarkUtil util) Create a client bound to one torrent's session, listening on the port just belowTrackerClient.PORTso it never collides with the HTTP tracker client.Uses of I2PSession in org.klomp.snark.dht
Fields in org.klomp.snark.dht declared as I2PSessionModifier and TypeFieldDescriptionprotected I2PSessionKRPC._sessionHook to inject and receive datagrams.Methods in org.klomp.snark.dht with parameters of type I2PSessionModifier and TypeMethodDescriptionvoidKRPC.disconnected(I2PSession session) Handle a session disconnect.voidKRPC.errorOccurred(I2PSession session, String message, Throwable error) Handle a session error.voidKRPC.messageAvailable(I2PSession session, int msgId, long size) For non-muxed.voidKRPC.messageAvailable(I2PSession session, int msgId, long size, int proto, int fromPort, int toPort) Instruct the client that the given session has received a message.voidKRPC.reportAbuse(I2PSession session, int severity) Handle a reportAbuse message from the session.static booleanDatagramSender.send(I2PSession session, SendMessageOptions opts, Destination dest, byte[] payload, int fromPort, int toPort, boolean repliable) Send a pre-wrapped datagram payload through the session.Constructors in org.klomp.snark.dht with parameters of type I2PSessionModifierConstructorDescriptionKRPC(I2PAppContext ctx, String baseName, I2PSession session) Create the DHT instance.protectedKRPC(I2PAppContext ctx, String baseName, I2PSession session, KRPC shared) Create the DHT instance sharing state.TorrentKRPC(I2PAppContext ctx, KRPC shared, I2PSession session, Collection<InfoHash> ihs) Create a DHT instance on a torrent's transient destination.