# gbalog/socks5 architecture

> Architecture diagram of the GitHub repository gbalog/socks5, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-27). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/gbalog/socks5
- Repository: https://github.com/gbalog/socks5

## Overview

This repository implements a SOCKS5 TCP proxy: it accepts client connections, negotiates/authenticates SOCKS requests, opens a destination connection, then relays the TCP stream. The sampled entry point and session code establish the manager, session, authentication, and proxy lifecycle; the tree identifies the protocol and event subsystems. Internal wiring beyond those samples is shown conservatively, so links between protocol helpers and event callbacks are omitted where their callers cannot be verified.

Main entry points: [`src/SessionMng.cpp`](https://github.com/gbalog/socks5/blob/master/src/SessionMng.cpp) (Session manager), [`src/Session.cpp`](https://github.com/gbalog/socks5/blob/master/src/Session.cpp) (Proxy session), [`src/Event/EventTcpServer.cpp`](https://github.com/gbalog/socks5/blob/master/src/Event/EventTcpServer.cpp) (Event TCP server), [`src/SocksLoginPassAuthorizer.cpp`](https://github.com/gbalog/socks5/blob/master/src/SocksLoginPassAuthorizer.cpp) (Password authorizer)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["Application lifecycle"]
  node_main["Program entry<br/>[main.cpp]"]
  node_manager["Session manager<br/>[SessionMng.cpp]"]
end

subgraph group_protocol["SOCKS protocol"]
  node_auth["Password authorizer"]
  node_tracker["Connection tracker<br/>[InConnTracker.cpp]"]
  node_decoder["Request decoder<br/>[SocksDecoder.cpp]"]
  node_encoder["Reply encoder<br/>[SocksEncoder.cpp]"]
  node_common["SOCKS types<br/>[SocksCommon.cpp]"]
end

subgraph group_proxy["Sessions and proxying"]
  node_session["Proxy session<br/>[Session.cpp]"]
  node_stream["TCP stream relay<br/>[TcpStreamProxy.cpp]"]
  node_directed["Directed connection"]
end

subgraph group_event["Event networking"]
  node_eventserver["Event TCP server<br/>[EventTcpServer.cpp]"]
  node_eventsocket["Client socket<br/>[EventSocket.cpp]"]
  node_connected["Destination socket"]
  node_eventbase["Event base"]
  node_signals["Signal listener"]
end

node_client(("SOCKS client"))
node_destination(("TCP destination"))
node_authfile["Credential file"]

node_client -->|"connects"| node_eventserver
node_main -->|"starts"| node_manager
node_manager -->|"runs"| node_eventserver
node_eventserver -->|"accepts clients"| node_manager
node_manager -->|"creates"| node_session
node_manager -->|"initializes"| node_auth
node_auth -->|"reads credentials"| node_authfile
node_session -->|"updates"| node_tracker
node_session -->|"checks password"| node_auth
node_session -->|"requests connection"| node_manager
node_session -->|"creates destination"| node_connected
node_destination -->|"connects"| node_connected
node_session -->|"starts relay"| node_stream
node_eventserver -->|"manages sockets"| node_eventsocket
node_eventsocket -->|"uses"| node_eventbase
node_connected -->|"uses"| node_eventbase
node_manager -->|"registers SIGINT"| node_signals
node_signals -->|"stops server"| node_eventserver

click node_main "https://github.com/gbalog/socks5/blob/master/src/main.cpp"
click node_manager "https://github.com/gbalog/socks5/blob/master/src/SessionMng.cpp"
click node_auth "https://github.com/gbalog/socks5/blob/master/src/SocksLoginPassAuthorizer.cpp"
click node_tracker "https://github.com/gbalog/socks5/blob/master/src/InConnTracker.cpp"
click node_decoder "https://github.com/gbalog/socks5/blob/master/src/SocksDecoder.cpp"
click node_encoder "https://github.com/gbalog/socks5/blob/master/src/SocksEncoder.cpp"
click node_common "https://github.com/gbalog/socks5/blob/master/src/SocksCommon.cpp"
click node_session "https://github.com/gbalog/socks5/blob/master/src/Session.cpp"
click node_stream "https://github.com/gbalog/socks5/blob/master/src/TcpStreamProxy.cpp"
click node_directed "https://github.com/gbalog/socks5/blob/master/src/DirectedProxyConnection.cpp"
click node_eventserver "https://github.com/gbalog/socks5/blob/master/src/Event/EventTcpServer.cpp"
click node_eventsocket "https://github.com/gbalog/socks5/blob/master/src/Event/EventSocket.cpp"
click node_connected "https://github.com/gbalog/socks5/blob/master/src/Event/EventSocketConnected.cpp"
click node_eventbase "https://github.com/gbalog/socks5/blob/master/src/Event/EventBaseObject.cpp"
click node_signals "https://github.com/gbalog/socks5/blob/master/src/Event/EventSignalListener.cpp"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_main,node_manager,node_client toneBlue
class node_auth,node_tracker,node_decoder,node_encoder,node_common toneAmber
class node_session,node_stream,node_directed toneMint
class node_eventserver,node_eventsocket,node_connected,node_eventbase,node_signals toneRose
class node_destination,node_authfile toneIndigo
```

## Components

### Application lifecycle

- [Program entry](https://github.com/gbalog/socks5/blob/master/src/main.cpp): `src/main.cpp`
- [Session manager](https://github.com/gbalog/socks5/blob/master/src/SessionMng.cpp): `src/SessionMng.cpp`

### SOCKS protocol

- [Password authorizer](https://github.com/gbalog/socks5/blob/master/src/SocksLoginPassAuthorizer.cpp): `src/SocksLoginPassAuthorizer.cpp`
- [Connection tracker](https://github.com/gbalog/socks5/blob/master/src/InConnTracker.cpp): `src/InConnTracker.cpp`
- [Request decoder](https://github.com/gbalog/socks5/blob/master/src/SocksDecoder.cpp): `src/SocksDecoder.cpp`
- [Reply encoder](https://github.com/gbalog/socks5/blob/master/src/SocksEncoder.cpp): `src/SocksEncoder.cpp`
- [SOCKS types](https://github.com/gbalog/socks5/blob/master/src/SocksCommon.cpp): `src/SocksCommon.cpp`

### Sessions and proxying

- [Proxy session](https://github.com/gbalog/socks5/blob/master/src/Session.cpp): `src/Session.cpp`
- [TCP stream relay](https://github.com/gbalog/socks5/blob/master/src/TcpStreamProxy.cpp): `src/TcpStreamProxy.cpp`
- [Directed connection](https://github.com/gbalog/socks5/blob/master/src/DirectedProxyConnection.cpp): `src/DirectedProxyConnection.cpp`

### Event networking

- [Event TCP server](https://github.com/gbalog/socks5/blob/master/src/Event/EventTcpServer.cpp): `src/Event/EventTcpServer.cpp`
- [Client socket](https://github.com/gbalog/socks5/blob/master/src/Event/EventSocket.cpp): `src/Event/EventSocket.cpp`
- [Destination socket](https://github.com/gbalog/socks5/blob/master/src/Event/EventSocketConnected.cpp): `src/Event/EventSocketConnected.cpp`
- [Event base](https://github.com/gbalog/socks5/blob/master/src/Event/EventBaseObject.cpp): `src/Event/EventBaseObject.cpp`
- [Signal listener](https://github.com/gbalog/socks5/blob/master/src/Event/EventSignalListener.cpp): `src/Event/EventSignalListener.cpp`

### Other components

- **SOCKS client**
- **TCP destination**
- **Credential file**

## Connections

- SOCKS client → Event TCP server: connects
- Program entry → Session manager: starts
- Session manager → Event TCP server: runs
- Event TCP server → Session manager: accepts clients
- Session manager → Proxy session: creates
- Session manager → Password authorizer: initializes
- Password authorizer → Credential file: reads credentials
- Proxy session → Connection tracker: updates
- Proxy session → Password authorizer: checks password
- Proxy session → Session manager: requests connection
- Proxy session → Destination socket: creates destination
- TCP destination → Destination socket: connects
- Proxy session → TCP stream relay: starts relay
- Event TCP server → Client socket: manages sockets
- Client socket → Event base: uses
- Destination socket → Event base: uses
- Session manager → Signal listener: registers SIGINT
- Signal listener → Event TCP server: stops server
