diff options
author | xengineering <me@xengineering.eu> | 2023-05-13 17:44:42 +0200 |
---|---|---|
committer | xengineering <me@xengineering.eu> | 2023-05-14 12:10:42 +0200 |
commit | 4c920880da47f771ad695e980f5bae807c1ac4e9 (patch) | |
tree | c835b1df2c1e1b4f9a900922bb6a301c0a39ee53 | |
parent | 35540f642a7ba21af0e3b58a36f0aefd353473c4 (diff) | |
download | limox-4c920880da47f771ad695e980f5bae807c1ac4e9.tar limox-4c920880da47f771ad695e980f5bae807c1ac4e9.tar.zst limox-4c920880da47f771ad695e980f5bae807c1ac4e9.zip |
Rework error management
Error handling was not consistent and quite bad to be honest ...
-rw-r--r-- | gui.go | 2 | ||||
-rw-r--r-- | limox.go | 4 | ||||
-rw-r--r-- | xmpp.go | 45 |
3 files changed, 37 insertions, 14 deletions
@@ -70,7 +70,7 @@ func (l *Limox) buttonLabel() string { case Connected: label = "Disconnect" default: - log.Fatalf("Unknown Limox state '%d'\n", l.State) + log.Printf("Unknown Limox state '%d'\n", l.State) } return label } @@ -72,10 +72,10 @@ func (l *Limox) run() error { case XmppConnect: l.State = Connected default: - log.Fatalf("Unknown XmppEvent '%d'\n", ev) + log.Printf("Unknown XmppEvent '%d'\n", ev) } default: - log.Fatalf("Unknown event type '%s'.\n", reflect.TypeOf(ev)) + log.Printf("Unknown event type '%s'.\n", reflect.TypeOf(ev)) } l.Window.Invalidate() } @@ -20,7 +20,7 @@ func xmpp(rxChan chan GuiEvent, txChan chan any, jid string, pwd string) { conn, err := setupConn(jid) if err != nil { - txChan <- err + log.Print(err) return } defer conn.Close() @@ -31,7 +31,9 @@ func xmpp(rxChan chan GuiEvent, txChan chan any, jid string, pwd string) { defer func() { termination <- true }() enc := xml.NewEncoder(conn) + defer enc.Close() dbg := xml.NewEncoder(os.Stdout) + defer dbg.Close() end := sendStreamStart(enc, dbg, jid) defer sendStreamEnd(enc, dbg, end) @@ -45,7 +47,7 @@ func xmpp(rxChan chan GuiEvent, txChan chan any, jid string, pwd string) { case Disconnect: return default: - log.Fatalf("Unknown GuiEvent '%d'!\n", ev) + log.Printf("Unknown GuiEvent '%d'!\n", ev) } case rx := <-receiver: dbg.Indent("S: ", " ") @@ -68,12 +70,16 @@ func setupConn(jid string) (*tls.Conn, error) { func rxRoutine(conn *tls.Conn, tokens chan xml.Token, terminator chan bool) { dec := xml.NewDecoder(conn) + for { select { case <-terminator: return default: - t, _ := dec.Token() // TODO error handling + t, err := dec.Token() + if err != nil { + log.Print(err) + } if t != nil { tokens <- t } @@ -95,35 +101,52 @@ func sendStreamStart(enc *xml.Encoder, dbg *xml.Encoder, jid string) xml.EndElem err := enc.EncodeToken(start) if err != nil { - log.Fatal("Could not encode stream start!") + log.Println("Could not encode stream start to TCP channel!") } err = enc.Flush() if err != nil { - log.Fatal("Could not flush XML encoder!") + log.Println("Could not flush TCP channel XML encoder!") } dbg.Indent("C: ", " ") - dbg.EncodeToken(start) - dbg.Flush() + + err = dbg.EncodeToken(start) + if err != nil { + log.Println("Could not encode stream start to debug output!") + } + + err = dbg.Flush() + if err != nil { + log.Println("Could not flush debug XML encoder!") + } return start.End() } func sendStreamEnd(enc *xml.Encoder, dbg *xml.Encoder, end xml.EndElement) { + err := enc.EncodeToken(end) if err != nil { - log.Fatal("Could not encode stream end!") + log.Println("Could not encode stream end to TCP channel!") } err = enc.Flush() if err != nil { - log.Fatal("Could not flush XML encoder!") + log.Println("Could not flush TCP channel XML encoder!") } dbg.Indent("C: ", " ") - dbg.EncodeToken(end) - dbg.Flush() + + err = dbg.EncodeToken(end) + if err != nil { + log.Println("Could not encode stream end to debug output!") + } + + err = dbg.Flush() + if err != nil { + log.Println("Could not flush debug XML encoder!") + } } // domainpart extracts the domain name from a JID / XMPP address. See |