diff options
-rw-r--r-- | xmpp.go | 22 |
1 files changed, 8 insertions, 14 deletions
@@ -1,11 +1,11 @@ package main import ( - "os" "crypto/tls" "crypto/x509" "encoding/xml" "log" + "os" ) type XmppEvent uint8 @@ -16,32 +16,34 @@ const ( ) func (l *Limox) xmpp(jid string, pwd string) { + defer func() { l.XmppEvents <- XmppDisconnect }() conn, err := setupConn(jid) if err != nil { l.XmppEvents <- err return } - - enc := xml.NewEncoder(conn) + defer conn.Close() receiver := make(chan xml.Token) termination := make(chan bool) go rxRoutine(conn, receiver, termination) + enc := xml.NewEncoder(conn) dbg := xml.NewEncoder(os.Stdout) end := sendStreamStart(enc, jid) + defer sendStreamEnd(enc, end) + l.XmppEvents <- XmppConnect - var closing bool = false for { select { case ev := <-l.GuiEvents: switch ev { case Disconnect: termination <- true - closing = true + return default: log.Fatalf("Unknown GuiEvent '%d'!\n", ev) } @@ -50,15 +52,7 @@ func (l *Limox) xmpp(jid string, pwd string) { dbg.EncodeToken(rx) dbg.Flush() } - - if closing { - break - } } - - sendStreamEnd(enc, end) - conn.Close() - l.XmppEvents <- XmppDisconnect } func setupConn(jid string) (*tls.Conn, error) { @@ -91,7 +85,7 @@ func rxRoutine(conn *tls.Conn, tokens chan xml.Token, terminator chan bool) { } } -func sendStreamStart(enc *xml.Encoder, jid string) (xml.EndElement) { +func sendStreamStart(enc *xml.Encoder, jid string) xml.EndElement { start := xml.StartElement{ xml.Name{"jabber:client", "stream:stream"}, []xml.Attr{ |