MCPcopy Index your code
hub / github.com/anazoa/anazoa

github.com/anazoa/anazoa @v0.2.0

Chat with this repo
repository ↗ · DeepWiki ↗ · release v0.2.0 ↗ · + Follow
510 symbols 1,014 edges 33 files 30 documented · 6%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

Anazoa

Anazoa tunnels point-to-point IP traffic over a WebRTC video call on Russia's government-pushed Max platform. Both ends impersonate an Android Max client. IP packets are carried as tunnel frames embedded in the VP9 video bitstream, paced by Google Chrome libwebrtc's internal scheduler.

Inspired by the Protozoa work.

Expected tunneling bandwidth for a 720p video call is around 2 Mbps.

Usage

Two peers need to be configured, A and B.

  1. Use anazoa.toml.sample as a template for creating two anazoa.toml configuration files (it's advised to tweak fingerprint section) and for each peer run
cp anazoa.toml.sample anazoa.toml
edit anazoa.toml
anazoa-auth -c anazoa.toml login --phone +71234567890

Phone numbers must be different for the two peers.

Update both configuration files with: - token, signaling-user-id and remote-peer-id parameters you got after successful authentication, - media parameter pointing to an Opus audio file -- some audiobook will do.

  1. Run on both sides
anazoa-tun -c anazoa.toml

and then configure newly created tun0 (the name chosen via tun-name parameter) network interfaces (see scripts/setup-tun-test.sh for a sample).

  1. Allow to answer a call for peer A
anazoa-ctl -s /run/anazoa.sock answer always

Explicit answer permission is needed to mitigate active probing. In a real deployment, you may want to send an order for a callback via an independent channel (for example, e-mail) and allow answering for a short time period only:

anazoa-ctl -s /run/anazoa.sock answer 120

See scripts/callback.py for a ready-made e-mail based workflow.

  1. Make a call from peer B
anazoa-ctl -s /run/anazoa.sock call

After a WebRTC connection establishes, the tunnel is ready to be used.

To hang up the call, run on any side

anazoa-ctl -s /run/anazoa.sock hangup

Core symbols most depended-on inside this repo

send
called by 25
reveng/ws-capture.js
next_arg
called by 19
mock/src/main.rs
run_cmd
called by 16
mock/src/main.rs
child_mut
called by 13
mock/src/main.rs
success
called by 12
mock/src/main.rs
send_json
called by 11
mock/src/server.rs
log_signaling_ws
called by 10
auth/src/signaling.rs
read_u8
called by 9
auth/src/oneme.rs

Shape

Function 298
Method 131
Class 70
Enum 11

Languages

Rust88%
Python9%
TypeScript2%
C1%

Modules by API surface

auth/src/oneme.rs70 symbols
auth/src/signaling.rs62 symbols
mock/src/main.rs50 symbols
tun/src/protozoa/webrtc.rs49 symbols
tun/src/protozoa/tunnel.rs49 symbols
mock/src/server.rs44 symbols
tun/src/main.rs24 symbols
tun/src/protozoa/media.rs20 symbols
reveng/call_via_sdk.py16 symbols
tun/src/protozoa/raylib.rs11 symbols
scripts/callback.py11 symbols
tun/src/protozoa/noise.rs10 symbols

For agents

$ claude mcp add anazoa \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact