Skip to content

Ein abgelehnter Sendewunsch sagt, DASS und WARUM - #194

Merged
oe5sos merged 3 commits into
mainfrom
feat/tci-sendesperren-pruefen
Oct 4, 2026
Merged

oe5sos merged 3 commits into
mainfrom
feat/tci-sendesperren-pruefen

Conversation

@oe5sos

@oe5sos oe5sos commented Oct 4, 2026

Copy link
Copy Markdown
Owner

Was ich gesucht und nicht gefunden habe

Vor dem Tastweg wollte ich die drei Sendesperren festnageln. Sie sind
bereits deutlich besser abgedeckt als erwartet — hängender Client
(a_hung_client_that_stops_answering_pings_is_released), verschwundener
Client, Sendezeit-Deckel (inkl. „aus" und negativ), TX-Ton-Mutex,
Schreibweisen (TRX:, trx :). Da war nichts nachzubauen.

Was wirklich fehlte

trx: und tune: werden bei fehlender Freigabe stumm verworfen.

Am Pult fällt das nie auf: dort kommt der Befehl von Loopback und geht
durch. Auf einer Fernbedienung ist ein stummes Nein nicht von einem
Defekt zu unterscheiden
— der Bediener drückt, nichts passiert, nichts
erklärt es. Für die Halteleiste am Telefon ist genau das der Unterschied
zwischen „nicht freigegeben" und „kaputt".

Der Server antwortet jetzt dem ablehnenden Client allein:

tx_err:nicht freigegeben;

Dieselbe Form wie log_qso_err: — ein Longpath-eigener Befehl, erkennbar
als solcher und von fremden Clients gefahrlos zu ignorieren. TCI verwirft
abgelehnte Befehle antwortlos, und daran ändert sich nichts: die Zeile geht
nur an diesen einen Client und nur dort, wo bisher gar nichts kam.
WSJT-X, N1MM und JTDX sprechen über Loopback und laufen nie in die Sperre.

An der Sperre selbst ist nichts geändert.

Geprüft

Zwei neue Punkte in tst_tci_sendesperre, und der zweite ist der wichtigere:

abgelehnt_wird_dem_client_gesagt(trx|tune) die Absage kommt und der Besitzer bleibt leer — eine höfliche Absage, die den Sender tastet, wäre das Schlimmste von beidem
mit_freigabe_kommt_keine_absage ohne diesen Punkt wäre ein Server, der immer tx_err schickt, grün

Gegenprobe gefahren:

ohne die beiden Aufrufe:  16 passed, 2 failed
mit ihnen:                18 passed, 0 failed

Die Attrappe führt die Sperre jetzt mit — absichtlich nicht gutmütiger
als der echte Server. Ein WebSocket-Client gegen sie bekommt
tx_err:nicht freigegeben und kein trx:0,true. Eine Attrappe, die
mehr durchlässt als das Original, verschiebt Fehler nach hinten.

Nicht geprüft

Wie die Zeile am Telefon aussieht. Sie lässt sich noch gar nicht
auslösen, weil die Halteleiste bis heute nicht tastet — der Weg dorthin
ist Absicht und bleibt gesperrt, bis der Betreiber ihn freigibt. Der
Handler ist da; angesehen wird er im selben Zug wie das erste Tasten, an
der Dummy-Last.

🤖 Generated with Claude Code

oe5sos and others added 3 commits October 4, 2026 19:08
`trx:` und `tune:` wurden bei fehlender Freigabe stumm verworfen. Am Pult
faellt das nicht auf — dort kommt der Befehl von Loopback und geht durch.
Auf einer Fernbedienung ist ein stummes Nein nicht von einem Fehler zu
unterscheiden: der Bediener drueckt, nichts passiert, nichts erklaert es.
Fuer die Halteleiste am Telefon ist genau das der Unterschied zwischen
"nicht freigegeben" und "kaputt".

Der Server antwortet dem ABLEHNENDEN CLIENT ALLEIN:

    tx_err:nicht freigegeben;

Dieselbe Form wie log_qso_err: — ein Longpath-eigener Befehl, erkennbar als
solcher und von fremden Clients gefahrlos zu ignorieren. TCI verwirft
abgelehnte Befehle antwortlos, und daran aendert sich nichts: die Zeile geht
nur an diesen einen Client und nur dort, wo bisher gar nichts kam. WSJT-X,
N1MM und JTDX sprechen ueber Loopback und laufen nie in die Sperre.

An der Sperre selbst ist nichts geaendert.

Zwei Pruefpunkte, und der zweite ist der wichtigere:

  abgelehnt_wird_dem_client_gesagt(trx|tune)  — die Absage kommt UND der
      Besitzer bleibt leer (eine hoefliche Absage, die den Sender tastet,
      waere das Schlimmste von beidem)
  mit_freigabe_kommt_keine_absage             — ohne diesen Punkt waere ein
      Server, der IMMER tx_err schickt, gruen

Gegenprobe gefahren: ohne die beiden Aufrufe wird der Stand rot (16 von 18),
mit ihnen 18 von 18.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Gegenstueck zu tx_err: auf der Seite wird aus der Absage eine lesbare Zeile
("SENDEN ABGELEHNT — NICHT FREIGEGEBEN") statt eines stummen Nichts.

Die Attrappe fuehrt die Sperre jetzt mit, und zwar absichtlich NICHT
gutmuetiger als der echte Server: ohne --sendenfrei wird jedes trx/tune mit
true abgelehnt, mit Grund, und es wird nicht getastet. Eine Attrappe, die
mehr durchlaesst als das Original, verschiebt Fehler nach hinten.

Geprueft: ein WebSocket-Client gegen die Attrappe bekommt
`tx_err:nicht freigegeben` und KEIN `trx:0,true` zurueck.

NICHT geprueft: wie die Zeile am Telefon aussieht. Sie laesst sich noch gar
nicht ausloesen, weil die Halteleiste bis heute nicht tastet — der Weg
dorthin ist Absicht und bleibt gesperrt, bis der Betreiber ihn freigibt.
Sobald getastet wird, ist der Handler da und wird im selben Zug am Geraet
angesehen.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Erst stand dort eine abgeblendete Taste mit einer Warnung darunter. Gut
gemeint und im Alltag falsch: ueber `http` — also genau dort, wo das Telefon
die Seite holt — kann sie NIE etwas tun. Eine dauerhaft tote Taste im besten
Daumenbereich sieht aus wie ein Defekt und nimmt Platz fuer etwas, das dort
nicht geht. Dieselbe Ueberlegung wie bei den beiden Sendetasten, die aus
demselben Grund zu einer ruhigen Zeile geschrumpft sind.

Der Grund bleibt lesbar, aber als Zeile statt als Bedienelement, das zum
Druecken einlaedt:

    MIKROFON BRAUCHT EIN ZERTIFIKAT (HTTPS)

Live an beiden Zustaenden geprueft, dieselbe Seite:

    ueber 172.30.30.121  sicher=false  Taste versteckt, Pegel versteckt,
                                       Zeile steht
    ueber 127.0.0.1      sicher=true   Taste da, Pegel da, Zeile leer

Der zweite Lauf ist die Gegenprobe: eine Fassung, die immer versteckt,
waere damit rot.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@oe5sos
oe5sos merged commit cbc7e35 into main Oct 4, 2026
12 checks passed
@oe5sos
oe5sos deleted the feat/tci-sendesperren-pruefen branch October 4, 2026 18:02
@oe5sos oe5sos mentioned this pull request Oct 4, 2026
oe5sos added a commit that referenced this pull request Oct 4, 2026
103 Commits seit 0.6.5, zwei Tage. Thema: eine Anzeige, die schweigt, ist
so schlimm wie eine, die luegt.

Vom Telefon laesst sich loggen (eigener TCI-Befehl log_qso, PR #184/#185).
Der Sendeton ist bis zum fertigen Rahmen gebaut, samt Haltetaste und
Pegelbalken — getastet wird davon nichts, und das ist Absicht.

Befund des Tages: am Telefon fehlen Mikrofon, AudioWorklet und Opus aus
EINEM Grund — isSecureContext ist dort false. Drei Posten, die als drei
verschiedene Eigenheiten in den Unterlagen standen. Zertifikat, https und
TLS auf der TCI-Bruecke sind gebaut (#188).

Dazu eine Reihe Stellen, die etwas wussten und nichts sagten: die
Einstellungs-Hygiene (#182), sieben Audio-Geraete ohne Zeitlimit (#176),
der gescheiterte Versand ohne Grund (#189, auf Windows ueber
WSAGetLastError, weil Winsock errno gar nicht setzt), der stumm verworfene
Sendewunsch (#194), 264 fremde Linux-Warnungen (#177/#178).

Version in CMakeLists auf 0.6.6, [Unreleased] abgeschlossen und ein neuer
leerer Abschnitt eroeffnet.

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant