Menu

Netlib TorNetLayer Implementation Details

Tobias Boese

Abstract: This page describes the TorNetLayer implementation details - only relevant for developer/contributors of the silvertunnel-ng.org Netlib project.

Introduction

Not relevant for Netlib users.

Package Structure

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).

Method Call Hierarachy

... 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]


Related

Wiki: Netlib TorNetLayer
Wiki: Netlib

Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.