aboutsummaryrefslogtreecommitdiff
path: root/federationapi/routing/send.go
diff options
context:
space:
mode:
authorTill <2353100+S7evinK@users.noreply.github.com>2022-09-07 12:16:04 +0200
committerGitHub <noreply@github.com>2022-09-07 12:16:04 +0200
commit7e8c605f98458f829fc914c3476cf4999e317bcd (patch)
tree45ca1a4df90174276c177b0d752966a0f3fb71ac /federationapi/routing/send.go
parent4e352390b6827870a2fb19e01c59bd5c267dd7e0 (diff)
Avoid unneeded JSON operations (#2698)
We were `json.Unmarshal`ing the EDU and `json.Marshal`ing right before sending the EDU to the stream. Those are now removed and the consumer does `json.Unmarshal` once.
Diffstat (limited to 'federationapi/routing/send.go')
-rw-r--r--federationapi/routing/send.go22
1 files changed, 3 insertions, 19 deletions
diff --git a/federationapi/routing/send.go b/federationapi/routing/send.go
index 3d931996..a9714c65 100644
--- a/federationapi/routing/send.go
+++ b/federationapi/routing/send.go
@@ -359,7 +359,9 @@ func (t *txnReq) processEDUs(ctx context.Context) {
}
}
case gomatrixserverlib.MDeviceListUpdate:
- t.processDeviceListUpdate(ctx, e)
+ if err := t.producer.SendDeviceListUpdate(ctx, e.Content, e.Origin); err != nil {
+ util.GetLogger(ctx).WithError(err).Error("failed to InputDeviceListUpdate")
+ }
case gomatrixserverlib.MReceipt:
// https://matrix.org/docs/spec/server_server/r0.1.4#receipts
payload := map[string]types.FederationReceiptMRead{}
@@ -454,21 +456,3 @@ func (t *txnReq) processReceiptEvent(ctx context.Context,
return nil
}
-
-func (t *txnReq) processDeviceListUpdate(ctx context.Context, e gomatrixserverlib.EDU) {
- var payload gomatrixserverlib.DeviceListUpdateEvent
- if err := json.Unmarshal(e.Content, &payload); err != nil {
- util.GetLogger(ctx).WithError(err).Error("Failed to unmarshal device list update event")
- return
- }
- if _, serverName, err := gomatrixserverlib.SplitID('@', payload.UserID); err != nil {
- return
- } else if serverName == t.ourServerName {
- return
- } else if serverName != t.Origin {
- return
- }
- if err := t.producer.SendDeviceListUpdate(ctx, &payload); err != nil {
- util.GetLogger(ctx).WithError(err).WithField("user_id", payload.UserID).Error("failed to InputDeviceListUpdate")
- }
-}