diff options
author | bodqhrohro <bodqhrohro@gmail.com> | 2019-11-08 00:09:53 +0300 |
---|---|---|
committer | bodqhrohro <bodqhrohro@gmail.com> | 2019-11-08 00:09:53 +0300 |
commit | 7185d4ac9b039bbb74291f57ee2dae6120c636f6 (patch) | |
tree | d6c8acc0e02b174c14cfb67068607da3e4b19a50 /xmpp/handlers.go | |
parent | 29da6ac0a08ab955441dcfa83ec1afac2e56efed (diff) |
Fix presence handling and lockup on TDlib instance creation
Diffstat (limited to 'xmpp/handlers.go')
-rw-r--r-- | xmpp/handlers.go | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/xmpp/handlers.go b/xmpp/handlers.go index 4a6c999..ad6e3ba 100644 --- a/xmpp/handlers.go +++ b/xmpp/handlers.go @@ -1,6 +1,8 @@ package xmpp import ( + "github.com/pkg/errors" + "dev.narayana.im/narayana/telegabber/telegram" log "github.com/sirupsen/logrus" @@ -8,8 +10,6 @@ import ( "gosrc.io/xmpp/stanza" ) -var sessions map[string]telegram.Client - func logPacketType(p stanza.Packet) { log.Warn("Ignoring packet: %T\n", p) } @@ -48,7 +48,8 @@ func HandlePresence(s xmpp.Sender, p stanza.Packet) { if prs.Type == "subscribe" { handleSubscription(s, prs) - } else if prs.To == jid.Bare() { + } + if prs.To == jid.Bare() { handlePresence(s, prs) } } @@ -93,17 +94,26 @@ func handlePresence(s xmpp.Sender, p stanza.Presence) { if !ok { client, err := telegram.NewClient(tgConf, bareFromJid) if err != nil { - log.Error("Invalid from JID!") + log.Error(errors.Wrap(err, "TDlib initialization failure")) + return } sessions[bareFromJid] = client } switch p.Type { case "unsubscribed": + session.Disconnect() delete(sessions, bareFromJid) case "unavailable", "error": session.Disconnect() case "": - session.Connect() + // due to the weird implentation of go-tdlib wrapper, it won't + // return the client instance until successful authorization + go func() { + session.Connect() + if err != nil { + log.Error(errors.Wrap(err, "TDlib connection failure")) + } + }() } } |