|
|
|
@ -2,6 +2,7 @@ package gateway
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"encoding/xml"
|
|
|
|
|
"strings"
|
|
|
|
|
|
|
|
|
|
"dev.narayana.im/narayana/telegabber/xmpp/extensions"
|
|
|
|
|
|
|
|
|
@ -55,12 +56,12 @@ func SendMessage(to string, from string, body string, component *xmpp.Component)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
_ = component.Send(message)
|
|
|
|
|
_ = ResumableSend(component, message)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// LogBadPresence verbosely logs a presence
|
|
|
|
|
func LogBadPresence(err error, presence *stanza.Presence) {
|
|
|
|
|
log.Errorf("Couldn't send presence: %v: %#v", err, presence)
|
|
|
|
|
func LogBadPresence(presence *stanza.Presence) {
|
|
|
|
|
log.Errorf("Couldn't send presence: %#v", presence)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// SPFrom is a Telegram user id
|
|
|
|
@ -167,9 +168,9 @@ func SendPresence(component *xmpp.Component, to string, args ...args.V) error {
|
|
|
|
|
|
|
|
|
|
immed := SPImmed.Get(args)
|
|
|
|
|
if immed {
|
|
|
|
|
err := component.Send(presence)
|
|
|
|
|
err := ResumableSend(component, presence)
|
|
|
|
|
if err != nil {
|
|
|
|
|
LogBadPresence(err, &presence)
|
|
|
|
|
LogBadPresence(&presence)
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
@ -178,3 +179,20 @@ func SendPresence(component *xmpp.Component, to string, args ...args.V) error {
|
|
|
|
|
|
|
|
|
|
return nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// ResumableSend tries to resume the connection once and sends the packet again
|
|
|
|
|
func ResumableSend(component *xmpp.Component, packet stanza.Packet) error {
|
|
|
|
|
err := component.Send(packet)
|
|
|
|
|
if err != nil && strings.HasPrefix(err.Error(), "cannot send packet") {
|
|
|
|
|
log.Warn("Packet send failed, trying to resume the connection...")
|
|
|
|
|
err = component.Connect()
|
|
|
|
|
if err == nil {
|
|
|
|
|
err = component.Send(packet)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Error(err.Error())
|
|
|
|
|
}
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|