< RETURN TO BASE

OPERATOR MANUAL (v2.x)

UDP-7777 // THE SIGNAL

1. The Concept

UDP-7777 is a high-availability, low-overhead paging system. It sends short text messages over UDP port 7777. It is designed for LANs, VPNs (Tailscale, WireGuard, ZeroTier, etc), and localhost loopback.

Contact us: pager@dosaygo.com

The Protocol

The system is intentionally raw. No headers, no JSON, no XML.

2. Interface Guide

RX (RECEIVER)

This is your listening station. When a signal is received, the window flashes red and a system beep sounds every 3 seconds until ACK.

Receiver Interface
[FIG 2.1: INCOMING SIGNAL ALERT]

TX (TRANSMITTER)

Send signals to other operators.

CFG (CONFIG)

3. CLI Operations (The Hacker Way)

You don't need the app to SEND a signal. You can use standard unix tools like netcat (nc).

CLI Sender Interface
[FIG 3.1: MANUAL TRANSMISSION VIA NC]
# SYNTAX: echo "MESSAGE" | nc -u TARGET_IP 7777 # Example 1: Page yourself (Loopback) echo "WAKE UP NEO" | nc -w 1 -u 127.0.0.1 7777 # Example 2: Page a friend on Tailscale/LAN echo "LUNCH TIME" | nc -w 1 -u 100.64.0.5 7777 # Example 3: The "Annoy-o-Tron" Loop while true; do echo "PING" | nc -w 1 -u 192.168.1.50 7777 sleep 5 done

Note: If the receiver has SQUELCH enabled, you must prefix your message with the secret:

# If secret is "hunter2" echo "hunter2::THE PAYLOAD" | nc -w 1 -u 127.0.0.1 7777

4. The Capcode Protocol

To make IP addresses more memorable (like old pager numbers!), UDP-7777 converts IPv4 addresses into a 10-digit phone number format. This is purely a UI convenience; on the wire, it's still raw IP.

IP ADDRESS CAPCODE (PHONE) CONTEXT
127.0.0.1 (213) 070-6433 Loopback (Local)
192.168.1.101 (323) 223-5877 Home LAN
192.168.0.1 (323) 223-5521 Classic Router
10.0.0.5 (016) 777-2165 Private Network
100.64.0.1 (168) 191-5905 Tailscale / CGNAT
8.8.8.8 (013) 474-4072 Google DNS
1.1.1.1 (001) 684-3009 Cloudflare

IP to Capcode (Phone Number)

An IPv4 address (e.g., 192.168.1.101) is treated as a 32-bit unsigned integer, then formatted.

func ipToPhoneNumber(ip net.IP) string { if ip == nil { return "UNKNOWN" } v4 := ip.To4() if v4 != nil { ip = v4 } else { if len(ip) >= 4 { ip = ip[len(ip)-4:] // Use last 4 bytes for IPv6 fallback } } val := binary.BigEndian.Uint32(ip) str := fmt.Sprintf("%010d", val) return fmt.Sprintf("(%s) %s-%s", str[0:3], str[3:6], str[6:]) }

Capcode (Phone Number) to IP

The 10-digit number is parsed back into a 32-bit integer, then converted to an IPv4 address.

func resolveTarget(input string) string { if net.ParseIP(input) != nil { return input } var digits string for _, c := range input { if c >= '0' && c <= '9' { digits += string(c) } } if len(digits) == 0 { return "" } var val uint32 fmt.Sscanf(digits, "%d", &val) ipBytes := make(net.IP, 4) binary.BigEndian.PutUint32(ipBytes, val) return ipBytes.String() }

5. Troubleshooting