SilverTunnel-NG Wiki
Java library for easy accessing Tor network.
Status: Beta
Brought to you by:
b4dt0bi
Abstract: This page describes the TorNetLayer implementation details - only relevant for developer/contributors of the silvertunnel-ng.org Netlib project.
Not relevant for Netlib users.
The TorNetLayer implementation comprises several packages but only very few classes are relevant if you just using this NetLayer:
| **Package** | **Description** |
| [org.silvertunnel.netlib.layer.tor](http://sourceforge.net/apps/trac/silvertunnel/browser/netlib/trunk/src/main/java/org/silvertunnel/netlib/layer/tor) | TorNetLayer entry |
| [org.silvertunnel.netlib.layer.tor.TorNetLayer](http://sourceforge.net/apps/trac/silvertunnel/browser/netlib/trunk/src/main/java/org/silvertunnel/netlib/layer/tor/TorNetLayer.java) | class TorNetLayer |
| [org.silvertunnel.netlib.layer.tor.TorHiddenServicePortPrivateNetAddress](http://sourceforge.net/apps/trac/silvertunnel/browser/netlib/trunk/src/main/java/org/silvertunnel/netlib/layer/tor/TorHiddenServicePortPrivateNetAddress.java) | private key, public key and port number needed to create a hidden service (only needed when publishing a hidden service) |
| org.silvertunnel.netlib.layer.tor.api | API classes/interfaces that can be used by non-Tor code to access TorNetLayer |
| org.silvertunnel.netlib.layer.tor.util | classes wth no further dependencies that are not Tor specific |
| org.silvertunnel.netlib.layer.tor.common | Tor specific base classes wth no further dependencies |
| org.silvertunnel.netlib.layer.tor.directory | Directory/authority server access implementation |
| org.silvertunnel.netlib.layer.tor.circuit | Cell and Ciruit implementation |
| org.silvertunnel.netlib.layer.tor.stream | Stream (on top of a Circuit) implementation |
| org.silvertunnel.netlib.layer.tor.clientimpl | overall Tor client logic |
| org.silvertunnel.netlib.layer.tor.serverimpl | (start of a) Tor server implementation - not yet usable |
There are no cyclic dependencies between all packages (enfored by a JUnit test case).
... for some use cases:
// (client side) open connection: client -> server
TorNetLayer.createNetSocket()
Tor.connect()
HiddenServiceClient.connectToHiddenService()
TCPStream.<init>
TCPStream.queue=new Queue()
TCPStream.sendCell(new CellRelayBegin(...))
Circuit.sendCell()
TLSConnection.sendCell()
for all nodes:
node.symEncrypt(cell.payload)
DataOutputStream.write()
TCPStream.outputStream=new TCPStreamOutputStream()
// (client side) send data: client -> server
TCPStreamOutputStream.write()
TCPStreamOutputStream().flush()
TCPStream.sendCell(new CellRelayData(stream))
Circuit.sendCell()
TLSConnection.sendCell()
for all nodes of the Circuit:
node.symEncrypt(cell.payload)
DataOutputStream.write()
// (client side) receive data: server -> client
// fill queue:
Circuit.<init>
Circuit.TLSConnection = TLSConnectionAdmin.getConnection()
TLSConnection.<init>
// this was initialization - now handle the data:
TLSDispatcherThread.run()
Queue.add(Cell cell)
QueueTor2JavaHandler.handleCell()
PipedInputStream.write(CellRelay.getDate)
// read queue (for user data)
TorNetSocket.getInputStream()
TCPStream.getInputStream()
QueueTor2JavaHandler.getInputStream()
PipedInputStream
// alternative read (only for special cells)
Queue.receiveCell()/receiveRelayCell()
Queue.get()
</init></init></init>
Top: [Netlib], Next: [Netlib TorNetLayer Performance Tests] (can be skipped), [Netlib NetAddressNameService]