@@ -38,6 +38,15 @@ const gescheitert = new Set();
//: RealVNC Server zaehlt abgebrochene Versuche mit -- wer dreimal anklopft,
//: sperrt sich aus.
const HOECHSTENS = 2 ;
//: So lange darf "wird aufgebaut" stehen, bevor die Seite selbst nachsieht.
//:
//: Der Server hat eigene Grenzen und meldet sich, wenn das Geraet schweigt --
//: aber nur, wenn die Leitung dorthin ueberhaupt steht. Kommt die
//: WebSocket-Verbindung gar nicht erst zustande, wartet noVNC ohne jedes
//: Ereignis, und die Seite stuende stumm bis zum Seitenwechsel. Genau so
//: gemeldet: "Verbindung wird aufgebaut ..." und sonst nichts.
const AUFBAU _GRENZE = 12000 ;
// Den *Grund* eines Fehlschlags kennt nur ``_fail`` -- das Ereignis
// "disconnect" traegt ihn nicht, und der Weg ueber die Protokollausgabe
// funktioniert nicht: die Bibliothek bindet ``console.error`` beim Laden, also
@@ -87,6 +96,7 @@ function starten(wurzel) {
) ;
let rfb = null ;
let aufbauUhr = 0 ;
let versuche = 0 ;
let stand = false ;
let letzterZugang = { } ;
@@ -164,6 +174,25 @@ function starten(wurzel) {
letzterCode = 0 ;
letzterZugang = zugang ;
versuche += 1 ;
window . clearTimeout ( aufbauUhr ) ;
aufbauUhr = window . setTimeout ( ( ) => {
// Weder verbunden noch abgebrochen noch nach Zugangsdaten gefragt --
// dann haengt es an der Leitung, nicht am VNC-Server.
melden ( "Es kommt keine Antwort. Wird geprüft, woran es liegt …" , "warnung" ) ;
streckeTesten ( ) . then ( ( steht ) => {
melden (
steht
? "Die WebSocket-Strecke zu TESM steht, aber die Sitzung kommt nicht " +
"zustande. Antwortet der VNC-Server auf dem Gerät noch? Ein Neustart " +
"des VNC-Dienstes räumt eine Sperre ab."
: "Die WebSocket-Verbindung zu TESM kommt nicht zustande – auch eine " +
"einfache Probe scheitert. Ein Proxy zwischen Browser und TESM muss " +
"die Kopfzeilen Upgrade und Connection durchreichen (nginx: " +
"location /ws/ mit proxy_set_header Upgrade $http_upgrade)." ,
"fehler" ,
) ;
} ) ;
} , AUFBAU _GRENZE ) ;
// Was abgerissen ist, wird nicht noch einmal gewaehlt. Sonst faende noVNC
// dasselbe Verfahren wieder zuerst -- und der zweite Anlauf waere eine
@@ -185,6 +214,7 @@ function starten(wurzel) {
rfb . focusOnClick = true ;
rfb . addEventListener ( "connect" , ( ) => {
window . clearTimeout ( aufbauUhr ) ;
stand = true ;
melden ( ` Verbunden mit ${ wurzel . dataset . ziel } ` , "ok" ) ;
abfrage . hidden = true ;
@@ -194,6 +224,7 @@ function starten(wurzel) {
} ) ;
rfb . addEventListener ( "disconnect" , ( ereignis ) => {
window . clearTimeout ( aufbauUhr ) ;
leinwand . hidden = true ;
knopfTrennen . hidden = true ;
knopfStrg . hidden = true ;
@@ -236,6 +267,7 @@ function starten(wurzel) {
} ) ;
rfb . addEventListener ( "credentialsrequired" , ( ereignis ) => {
window . clearTimeout ( aufbauUhr ) ;
const gefragt = ereignis . detail . types || [ "password" ] ;
abfrage . hidden = false ;
feldBenutzer . closest ( "label" ) . hidden = ! gefragt . includes ( "username" ) ;
@@ -244,6 +276,7 @@ function starten(wurzel) {
} ) ;
rfb . addEventListener ( "securityfailure" , ( ereignis ) => {
window . clearTimeout ( aufbauUhr ) ;
melden (
` Anmeldung abgelehnt: ${ ereignis . detail . reason || "kein Grund genannt" } ` ,
"fehler" ,