No description
Find a file
ppfeiffer 9a2753de73 Implement B-protocol forwarding to OpenBCM
Adds bidirectional bulletin/mail forwarding between the BBS and an
OpenBCM-compatible remote BBS using the FBB B-protocol over AX.25.

Changes:
- ax25/frame.py: add build_ax25_sabm_frame() and build_ax25_disc_frame()
  as command-frames with C-bit and P-bit set
- db/database.py: non-destructive schema migration (_add_column_if_missing),
  bid/forward_pending/forwarded columns on bulletins+mail, new forward_bids
  table, and 7 new forwarding methods (bid_exists, record_bid,
  get_pending_*_for_forward, mark_forwarded, store_forwarded_*)
- bbs/forward.py: new ForwardSession class with full B-protocol FSM
  (IDLE→CONNECTING→BANNER_WAIT→EXCHANGING⇄RECV_BODY→DISC_SENT→DONE)
- bbs/engine.py: route UA/I/DISC/DM frames to ForwardSession before
  user-session handling; add start_forward_session(); extend active_sessions
- bbs/scheduler.py: new ForwardScheduler with thread-safe trigger() for
  periodic and on-demand forward runs
- config.yaml: new forward: block with all configuration options
- main.py: run transport and scheduler concurrently via asyncio.gather()
- web/app.py: GET /api/forward/status and POST /api/forward/trigger routes

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-21 19:27:48 +01:00
ax25 Implement B-protocol forwarding to OpenBCM 2026-02-21 19:27:48 +01:00
bbs Implement B-protocol forwarding to OpenBCM 2026-02-21 19:27:48 +01:00
db Implement B-protocol forwarding to OpenBCM 2026-02-21 19:27:48 +01:00
kiss Implement B-protocol forwarding to OpenBCM 2026-02-21 19:27:48 +01:00
web Implement B-protocol forwarding to OpenBCM 2026-02-21 19:27:48 +01:00
config.yaml Implement B-protocol forwarding to OpenBCM 2026-02-21 19:27:48 +01:00
main.py Implement B-protocol forwarding to OpenBCM 2026-02-21 19:27:48 +01:00
README.md Implement B-protocol forwarding to OpenBCM 2026-02-21 19:27:48 +01:00
requirements.txt Implement B-protocol forwarding to OpenBCM 2026-02-21 19:27:48 +01:00

Packet BBS Python Grundgerüst

Ein vollständiges Packet Radio BBS über KISS/TCP mit Web-Dashboard.

Voraussetzungen

  • Python 3.11+
  • TheNetNode mit KISS/TCP aktiviert
  • pip install -r requirements.txt

Installation

pip install -r requirements.txt

Konfiguration

config.yaml anpassen:

  • bbs.callsign → Dein BBS-Rufzeichen (z.B. DD0XYZ-8)
  • kiss.host / kiss.port → TheNetNode KISS/TCP Adresse
  • web.port → Dashboard Port (Standard: 5000)

Starten

python main.py

Dashboard: http://localhost:5000

BBS-Befehle (Packet-Seite)

Befehl Funktion
H oder ? Hilfe anzeigen
L Alle Bulletins listen
L Bulletins eines Boards
R Bulletin lesen
SB Bulletin posten
SM Mail senden
LM Eigene Mails anzeigen
RM Mail lesen
KM Mail löschen
F Dateiliste
DF Datei herunterladen
B / BYE Verbindung trennen

Mehrzeilige Nachrichten mit /EX in einer eigenen Zeile abschließen.

Projektstruktur

packet-bbs/
├── main.py              # Einstiegspunkt
├── config.yaml          # Konfiguration
├── requirements.txt
├── kiss/
│   └── client.py        # KISS/TCP Handler
├── ax25/
│   └── frame.py         # AX.25 Parser/Builder
├── bbs/
│   └── engine.py        # BBS Logik + Session-Verwaltung
├── db/
│   └── database.py      # SQLite (aiosqlite)
├── web/
│   ├── app.py           # Flask + SocketIO
│   └── templates/
│       └── dashboard.html
├── files_store/         # Datei-Bereich
├── data/                # Datenbank
└── logs/                # Logfiles

Nächste Schritte / Erweiterungen

  • APRS-Gateway Integration
  • Forward-Protokoll (FBB/WP) für Bulletin-Austausch mit anderen BBS
  • YAPP/ZMODEM Dateiübertragung
  • Sysop-Befehle (Kill-User, Remote-Befehle)
  • TNC2-Monitormode