Treat incoming probe presence same as available only first time after transport restart

This commit is contained in:
Bohdan Horbeshko 2025-09-13 17:01:09 -04:00
parent 3fd49923a1
commit 326c94973a
3 changed files with 30 additions and 17 deletions

View file

@ -2,7 +2,7 @@
COMMIT := $(shell git rev-parse --short HEAD)
TD_COMMIT := "5bbfc1cf5dab94f82e02f3430ded7241d4653551"
VERSION := "v1.12.4"
VERSION := "v1.12.5"
MAKEOPTS := "-j4"
all:

View file

@ -16,7 +16,7 @@ import (
goxmpp "gosrc.io/xmpp"
)
var version string = "1.12.4"
var version string = "1.12.5"
var commit string
var sm *goxmpp.StreamManager

View file

@ -7,6 +7,7 @@ import (
"sort"
"strconv"
"strings"
"sync"
"dev.narayana.im/narayana/telegabber/persistence"
"dev.narayana.im/narayana/telegabber/telegram"
@ -25,6 +26,10 @@ const (
TypeVCard4
)
// kludge for client resuming after the transport restart (by full jids)
var probeFired = make(map[string]bool)
var probeFiredLock = sync.Mutex{}
func logPacketType(p stanza.Packet) {
log.Warnf("Ignoring packet: %T\n", p)
}
@ -410,6 +415,13 @@ func handlePresence(s xmpp.Sender, p stanza.Presence) {
if err != nil {
log.Error(errors.Wrap(err, "TDlib connection failure"))
} else {
var probeFiredForFrom bool
probeFiredLock.Lock()
_, probeFiredForFrom = probeFired[p.From]
probeFired[p.From] = true
probeFiredLock.Unlock()
if p.Type != "probe" || !probeFiredForFrom {
for status := range session.StatusesRange() {
show, description, typ := status.Destruct()
newArgs := []args.V{
@ -428,6 +440,7 @@ func handlePresence(s xmpp.Sender, p stanza.Presence) {
probeClientFeatures(p.From, component)
session.UpdateChatNicknames()
}
}
}()
}
}