# anold20046/abdal-4iproto-client-android architecture

> Architecture diagram of the GitHub repository anold20046/abdal-4iproto-client-android, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-12). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/anold20046/abdal-4iproto-client-android
- Repository: https://github.com/anold20046/abdal-4iproto-client-android

## Overview

Abdal 4iProto Android is a Compose VPN client that routes device traffic through an SSH-based tunnel to the user’s server. The documented workflow is to configure/select a server, connect through Android’s VPN interface, and send captured traffic through the tunnel; optional capabilities include UDP, remote DNS, split tunneling, kill switch, reconnection, and logs. The README supports the product-level relationships below; most implementation files were not sampled, so internal calls and persistence wiring are not inferred.

Main entry points: [`app/src/main/java/com/example/vpn/AbdalVpnService.kt`](https://github.com/anold20046/abdal-4iproto-client-android/blob/main/app/src/main/java/com/example/vpn/AbdalVpnService.kt) (VPN Service), [`app/src/main/java/com/example/vpn/SshUdpTunnel.kt`](https://github.com/anold20046/abdal-4iproto-client-android/blob/main/app/src/main/java/com/example/vpn/SshUdpTunnel.kt) (UDP Tunnel), [`app/src/main/java/com/example/MainActivity.kt`](https://github.com/anold20046/abdal-4iproto-client-android/blob/main/app/src/main/java/com/example/MainActivity.kt) (App Entry), [`app/src/main/java/com/example/ui/screens/ServerManagementScreen.kt`](https://github.com/anold20046/abdal-4iproto-client-android/blob/main/app/src/main/java/com/example/ui/screens/ServerManagementScreen.kt) (Server Management)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["App and Settings"]
  node_app["App Entry<br/>[MainActivity.kt]"]
  node_server_ui["Server Management"]
  node_server_edit["Server Editor<br/>[AddServerScreen.kt]"]
  node_settings["Advanced Settings"]
  node_split_ui["Per-App Split"]
  node_logs_ui["Live Logs<br/>[LogScreen.kt]"]
end

subgraph group_vpn["VPN Routing"]
  node_vpn_service["VPN Service<br/>[AbdalVpnService.kt]"]
  node_tun2socks["tun2socks Bridge<br/>[TProxyService.java]"]
  node_dns["Fake DNS<br/>[FakeDnsResolver.kt]"]
end

subgraph group_transport["Tunnel Transport"]
  node_socks_tunnel["SOCKS Tunnel<br/>[HevSocksTunnel.kt]"]
  node_ssh_proxy["SSH SOCKS Proxy<br/>[SshSocksProxy.kt]"]
  node_udp_tunnel["UDP Tunnel<br/>[SshUdpTunnel.kt]"]
  node_udp_channel["UDP Channel Factory"]
end

subgraph group_state["App State"]
  node_vpn_state["VPN State<br/>[VpnState.kt]"]
  node_app_vm["App ViewModel<br/>[AppViewModel.kt]"]
  node_server_repo["Server Repository"]
  node_server_db[("Server Database<br/>[AppDatabase.kt]")]
end

node_user(("User"))
node_android(("Android VPN"))
node_server(("4iProto Server"))

node_user -->|"uses"| node_app
node_user -->|"manages servers"| node_server_ui
node_user -->|"adds server"| node_server_edit
node_user -->|"configures"| node_settings
node_user -->|"selects apps"| node_split_ui
node_user -->|"views logs"| node_logs_ui
node_app -->|"connects"| node_vpn_service
node_android -->|"provides VPN"| node_vpn_service
node_vpn_service -->|"bridges TUN"| node_tun2socks
node_vpn_service -->|"routes traffic"| node_socks_tunnel
node_socks_tunnel -->|"forwards SOCKS"| node_ssh_proxy
node_ssh_proxy -->|"tunnels via SSH"| node_server
node_vpn_service -->|"supports UDP"| node_udp_tunnel
node_udp_tunnel -.->|"opens UDP channel"| node_udp_channel
node_udp_tunnel -->|"tunnels UDP"| node_server
node_vpn_service -->|"supports remote DNS"| node_dns
node_server_ui -.->|"persists server data"| node_server_repo
node_server_repo -.->|"uses storage"| node_server_db
node_vpn_service -.->|"tracks state"| node_vpn_state

click node_app "https://github.com/anold20046/abdal-4iproto-client-android/blob/main/app/src/main/java/com/example/MainActivity.kt"
click node_server_ui "https://github.com/anold20046/abdal-4iproto-client-android/blob/main/app/src/main/java/com/example/ui/screens/ServerManagementScreen.kt"
click node_server_edit "https://github.com/anold20046/abdal-4iproto-client-android/blob/main/app/src/main/java/com/example/ui/screens/AddServerScreen.kt"
click node_settings "https://github.com/anold20046/abdal-4iproto-client-android/blob/main/app/src/main/java/com/example/ui/screens/AdvancedSettingsScreen.kt"
click node_split_ui "https://github.com/anold20046/abdal-4iproto-client-android/blob/main/app/src/main/java/com/example/ui/screens/PerAppSplitTunScreen.kt"
click node_logs_ui "https://github.com/anold20046/abdal-4iproto-client-android/blob/main/app/src/main/java/com/example/ui/screens/LogScreen.kt"
click node_vpn_service "https://github.com/anold20046/abdal-4iproto-client-android/blob/main/app/src/main/java/com/example/vpn/AbdalVpnService.kt"
click node_vpn_state "https://github.com/anold20046/abdal-4iproto-client-android/blob/main/app/src/main/java/com/example/vpn/VpnState.kt"
click node_app_vm "https://github.com/anold20046/abdal-4iproto-client-android/blob/main/app/src/main/java/com/example/ui/AppViewModel.kt"
click node_server_repo "https://github.com/anold20046/abdal-4iproto-client-android/blob/main/app/src/main/java/com/example/data/ServerRepository.kt"
click node_server_db "https://github.com/anold20046/abdal-4iproto-client-android/blob/main/app/src/main/java/com/example/data/AppDatabase.kt"
click node_tun2socks "https://github.com/anold20046/abdal-4iproto-client-android/blob/main/app/src/main/java/hev/sockstun/TProxyService.java"
click node_socks_tunnel "https://github.com/anold20046/abdal-4iproto-client-android/blob/main/app/src/main/java/com/example/vpn/HevSocksTunnel.kt"
click node_ssh_proxy "https://github.com/anold20046/abdal-4iproto-client-android/blob/main/app/src/main/java/com/example/vpn/SshSocksProxy.kt"
click node_udp_tunnel "https://github.com/anold20046/abdal-4iproto-client-android/blob/main/app/src/main/java/com/example/vpn/SshUdpTunnel.kt"
click node_udp_channel "https://github.com/anold20046/abdal-4iproto-client-android/blob/main/app/src/main/java/com/jcraft/jsch/AbdalUdpChannelFactory.java"
click node_dns "https://github.com/anold20046/abdal-4iproto-client-android/blob/main/app/src/main/java/com/example/vpn/FakeDnsResolver.kt"

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_app,node_server_ui,node_server_edit,node_settings,node_split_ui,node_logs_ui,node_user toneBlue
class node_vpn_service,node_tun2socks,node_dns toneAmber
class node_socks_tunnel,node_ssh_proxy,node_udp_tunnel,node_udp_channel,node_server toneMint
class node_vpn_state,node_app_vm,node_server_repo,node_server_db toneRose
class node_android toneIndigo
```

## Components

### App and Settings

- [App Entry](https://github.com/anold20046/abdal-4iproto-client-android/blob/main/app/src/main/java/com/example/MainActivity.kt): `app/src/main/java/com/example/MainActivity.kt`
- [Server Management](https://github.com/anold20046/abdal-4iproto-client-android/blob/main/app/src/main/java/com/example/ui/screens/ServerManagementScreen.kt): `app/src/main/java/com/example/ui/screens/ServerManagementScreen.kt`
- [Server Editor](https://github.com/anold20046/abdal-4iproto-client-android/blob/main/app/src/main/java/com/example/ui/screens/AddServerScreen.kt): `app/src/main/java/com/example/ui/screens/AddServerScreen.kt`
- [Advanced Settings](https://github.com/anold20046/abdal-4iproto-client-android/blob/main/app/src/main/java/com/example/ui/screens/AdvancedSettingsScreen.kt): `app/src/main/java/com/example/ui/screens/AdvancedSettingsScreen.kt`
- [Per-App Split](https://github.com/anold20046/abdal-4iproto-client-android/blob/main/app/src/main/java/com/example/ui/screens/PerAppSplitTunScreen.kt): `app/src/main/java/com/example/ui/screens/PerAppSplitTunScreen.kt`
- [Live Logs](https://github.com/anold20046/abdal-4iproto-client-android/blob/main/app/src/main/java/com/example/ui/screens/LogScreen.kt): `app/src/main/java/com/example/ui/screens/LogScreen.kt`

### VPN Routing

- [VPN Service](https://github.com/anold20046/abdal-4iproto-client-android/blob/main/app/src/main/java/com/example/vpn/AbdalVpnService.kt): `app/src/main/java/com/example/vpn/AbdalVpnService.kt`
- [tun2socks Bridge](https://github.com/anold20046/abdal-4iproto-client-android/blob/main/app/src/main/java/hev/sockstun/TProxyService.java): `app/src/main/java/hev/sockstun/TProxyService.java`
- [Fake DNS](https://github.com/anold20046/abdal-4iproto-client-android/blob/main/app/src/main/java/com/example/vpn/FakeDnsResolver.kt): `app/src/main/java/com/example/vpn/FakeDnsResolver.kt`

### Tunnel Transport

- [SOCKS Tunnel](https://github.com/anold20046/abdal-4iproto-client-android/blob/main/app/src/main/java/com/example/vpn/HevSocksTunnel.kt): `app/src/main/java/com/example/vpn/HevSocksTunnel.kt`
- [SSH SOCKS Proxy](https://github.com/anold20046/abdal-4iproto-client-android/blob/main/app/src/main/java/com/example/vpn/SshSocksProxy.kt): `app/src/main/java/com/example/vpn/SshSocksProxy.kt`
- [UDP Tunnel](https://github.com/anold20046/abdal-4iproto-client-android/blob/main/app/src/main/java/com/example/vpn/SshUdpTunnel.kt): `app/src/main/java/com/example/vpn/SshUdpTunnel.kt`
- [UDP Channel Factory](https://github.com/anold20046/abdal-4iproto-client-android/blob/main/app/src/main/java/com/jcraft/jsch/AbdalUdpChannelFactory.java): `app/src/main/java/com/jcraft/jsch/AbdalUdpChannelFactory.java`

### App State

- [VPN State](https://github.com/anold20046/abdal-4iproto-client-android/blob/main/app/src/main/java/com/example/vpn/VpnState.kt): `app/src/main/java/com/example/vpn/VpnState.kt`
- [App ViewModel](https://github.com/anold20046/abdal-4iproto-client-android/blob/main/app/src/main/java/com/example/ui/AppViewModel.kt): `app/src/main/java/com/example/ui/AppViewModel.kt`
- [Server Repository](https://github.com/anold20046/abdal-4iproto-client-android/blob/main/app/src/main/java/com/example/data/ServerRepository.kt): `app/src/main/java/com/example/data/ServerRepository.kt`
- [Server Database](https://github.com/anold20046/abdal-4iproto-client-android/blob/main/app/src/main/java/com/example/data/AppDatabase.kt): `app/src/main/java/com/example/data/AppDatabase.kt`

### Other components

- **User**
- **Android VPN**
- **4iProto Server**

## Connections

- User → App Entry: uses (evidence: `README.md`)
- User → Server Management: manages servers (evidence: `README.md`)
- User → Server Editor: adds server (evidence: `README.md`)
- User → Advanced Settings: configures (evidence: `README.md`)
- User → Per-App Split: selects apps (evidence: `README.md`)
- User → Live Logs: views logs (evidence: `README.md`)
- App Entry → VPN Service: connects (evidence: `README.md`)
- Android VPN → VPN Service: provides VPN (evidence: `README.md`)
- VPN Service → tun2socks Bridge: bridges TUN (evidence: `README.md`)
- VPN Service → SOCKS Tunnel: routes traffic (evidence: `README.md`)
- SOCKS Tunnel → SSH SOCKS Proxy: forwards SOCKS (evidence: `README.md`)
- SSH SOCKS Proxy → 4iProto Server: tunnels via SSH (evidence: `README.md`)
- VPN Service → UDP Tunnel: supports UDP (evidence: `README.md`)
- UDP Tunnel → UDP Channel Factory: opens UDP channel
- UDP Tunnel → 4iProto Server: tunnels UDP (evidence: `README.md`)
- VPN Service → Fake DNS: supports remote DNS (evidence: `README.md`)
- Server Management → Server Repository: persists server data
- Server Repository → Server Database: uses storage
- VPN Service → VPN State: tracks state
