aboutsummaryrefslogtreecommitdiff
path: root/xmpp/gateway/gateway.go
diff options
context:
space:
mode:
Diffstat (limited to 'xmpp/gateway/gateway.go')
-rw-r--r--xmpp/gateway/gateway.go55
1 files changed, 41 insertions, 14 deletions
diff --git a/xmpp/gateway/gateway.go b/xmpp/gateway/gateway.go
index d6b7826..074d2d0 100644
--- a/xmpp/gateway/gateway.go
+++ b/xmpp/gateway/gateway.go
@@ -5,6 +5,7 @@ import (
"github.com/pkg/errors"
"strings"
"sync"
+ "time"
"dev.narayana.im/narayana/telegabber/badger"
"dev.narayana.im/narayana/telegabber/xmpp/extensions"
@@ -42,26 +43,26 @@ var DirtySessions = false
var MessageOutgoingPermissionVersion = 0
// SendMessage creates and sends a message stanza
-func SendMessage(to string, from string, body string, id string, component *xmpp.Component, reply *Reply, isCarbon bool) {
- sendMessageWrapper(to, from, body, id, component, reply, "", isCarbon)
+func SendMessage(to string, from string, body string, id string, component *xmpp.Component, reply *Reply, timestamp int64, isCarbon, isGroupchat bool) {
+ sendMessageWrapper(to, from, body, id, component, reply, timestamp, "", isCarbon, isGroupchat)
}
// SendServiceMessage creates and sends a simple message stanza from transport
func SendServiceMessage(to string, body string, component *xmpp.Component) {
- sendMessageWrapper(to, "", body, "", component, nil, "", false)
+ sendMessageWrapper(to, "", body, "", component, nil, 0, "", false, false)
}
// SendTextMessage creates and sends a simple message stanza
func SendTextMessage(to string, from string, body string, component *xmpp.Component) {
- sendMessageWrapper(to, from, body, "", component, nil, "", false)
+ sendMessageWrapper(to, from, body, "", component, nil, 0, "", false, false)
}
// SendMessageWithOOB creates and sends a message stanza with OOB URL
-func SendMessageWithOOB(to string, from string, body string, id string, component *xmpp.Component, reply *Reply, oob string, isCarbon bool) {
- sendMessageWrapper(to, from, body, id, component, reply, oob, isCarbon)
+func SendMessageWithOOB(to string, from string, body string, id string, component *xmpp.Component, reply *Reply, timestamp int64, oob string, isCarbon bool, isGroupchat bool) {
+ sendMessageWrapper(to, from, body, id, component, reply, timestamp, oob, isCarbon, isGroupchat)
}
-func sendMessageWrapper(to string, from string, body string, id string, component *xmpp.Component, reply *Reply, oob string, isCarbon bool) {
+func sendMessageWrapper(to string, from string, body string, id string, component *xmpp.Component, reply *Reply, timestamp int64, oob string, isCarbon bool, isGroupchat bool) {
toJid, err := stanza.NewJid(to)
if err != nil {
log.WithFields(log.Fields{
@@ -76,12 +77,17 @@ func sendMessageWrapper(to string, from string, body string, id string, componen
var logFrom string
var messageFrom string
var messageTo string
- if from == "" {
- logFrom = componentJid
- messageFrom = componentJid
- } else {
+ if isGroupchat {
logFrom = from
- messageFrom = from + "@" + componentJid
+ messageFrom = from
+ } else {
+ if from == "" {
+ logFrom = componentJid
+ messageFrom = componentJid
+ } else {
+ logFrom = from
+ messageFrom = from + "@" + componentJid
+ }
}
if isCarbon {
messageTo = messageFrom
@@ -95,11 +101,18 @@ func sendMessageWrapper(to string, from string, body string, id string, componen
"to": to,
}).Warn("Got message")
+ var messageType stanza.StanzaType
+ if isGroupchat {
+ messageType = stanza.MessageTypeGroupchat
+ } else {
+ messageType = stanza.MessageTypeChat
+ }
+
message := stanza.Message{
Attrs: stanza.Attrs{
From: messageFrom,
To: messageTo,
- Type: "chat",
+ Type: messageType,
Id: id,
},
Body: body,
@@ -122,13 +135,27 @@ func sendMessageWrapper(to string, from string, body string, id string, componen
if !isCarbon && toJid.Resource != "" {
message.Extensions = append(message.Extensions, stanza.HintNoCopy{})
}
+ if timestamp != 0 {
+ var delayFrom string
+ if isGroupchat {
+ delayFrom, _, _ = SplitJID(from)
+ }
+ message.Extensions = append(message.Extensions, extensions.MessageDelay{
+ From: delayFrom,
+ Stamp: time.Unix(timestamp, 0).UTC().Format(time.RFC3339),
+ })
+ message.Extensions = append(message.Extensions, extensions.MessageDelayLegacy{
+ From: delayFrom,
+ Stamp: time.Unix(timestamp, 0).UTC().Format("20060102T15:04:05"),
+ })
+ }
if isCarbon {
carbonMessage := extensions.ClientMessage{
Attrs: stanza.Attrs{
From: bareTo,
To: to,
- Type: "chat",
+ Type: messageType,
},
}
carbonMessage.Extensions = append(carbonMessage.Extensions, extensions.CarbonSent{