Skip to content
This repository was archived by the owner on Mar 28, 2023. It is now read-only.

Commit 806a563

Browse files
committed
Refactor relayed messages out of offline
1 parent bac369e commit 806a563

File tree

1 file changed

+41
-16
lines changed

1 file changed

+41
-16
lines changed

core/net.go

+41-16
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ func (n *OpenBazaarNode) sendMessage(peerID string, k *libp2p.PubKey, message pb
4545
return err
4646
}
4747
ctx, cancel := context.WithTimeout(context.Background(), n.OfflineMessageFailoverTimeout)
48+
n.SendRelayedMessage(p, k, &message) // send relayed message immediately
4849
defer cancel()
4950
err = n.Service.SendMessage(ctx, p, &message)
5051
if err != nil {
@@ -57,25 +58,11 @@ func (n *OpenBazaarNode) sendMessage(peerID string, k *libp2p.PubKey, message pb
5758
return nil
5859
}
5960

60-
// SendOfflineMessage Supply of a public key is optional, if nil is instead provided n.EncryptMessage does a lookup
61-
func (n *OpenBazaarNode) SendOfflineMessage(p peer.ID, k *libp2p.PubKey, m *pb.Message) error {
62-
pubKeyBytes, err := n.IpfsNode.PrivateKey.GetPublic().Bytes()
63-
if err != nil {
64-
return err
65-
}
66-
ser, err := proto.Marshal(m)
67-
if err != nil {
68-
return err
69-
}
70-
sig, err := n.IpfsNode.PrivateKey.Sign(ser)
61+
func (n *OpenBazaarNode) SendRelayedMessage(p peer.ID, k *libp2p.PubKey, m *pb.Message) error {
62+
messageBytes, err := n.getMessageBytes(m)
7163
if err != nil {
7264
return err
7365
}
74-
env := pb.Envelope{Message: m, Pubkey: pubKeyBytes, Signature: sig}
75-
messageBytes, merr := proto.Marshal(&env)
76-
if merr != nil {
77-
return merr
78-
}
7966

8067
ctx, cancel := context.WithTimeout(context.Background(), n.OfflineMessageFailoverTimeout)
8168
defer cancel()
@@ -108,6 +95,38 @@ func (n *OpenBazaarNode) SendOfflineMessage(p peer.ID, k *libp2p.PubKey, m *pb.M
10895

10996
n.WebRelayManager.SendRelayMessage(encodedCipherText, p.Pretty())
11097

98+
return nil
99+
}
100+
101+
func (n *OpenBazaarNode) getMessageBytes(m *pb.Message) ([]byte, error) {
102+
pubKeyBytes, err := n.IpfsNode.PrivateKey.GetPublic().Bytes()
103+
if err != nil {
104+
return nil, err
105+
}
106+
ser, err := proto.Marshal(m)
107+
if err != nil {
108+
return nil, err
109+
}
110+
sig, err := n.IpfsNode.PrivateKey.Sign(ser)
111+
if err != nil {
112+
return nil, err
113+
}
114+
115+
env := pb.Envelope{Message: m, Pubkey: pubKeyBytes, Signature: sig}
116+
messageBytes, merr := proto.Marshal(&env)
117+
if merr != nil {
118+
return nil, merr
119+
}
120+
return messageBytes, nil
121+
}
122+
123+
// SendOfflineMessage Supply of a public key is optional, if nil is instead provided n.EncryptMessage does a lookup
124+
func (n *OpenBazaarNode) SendOfflineMessage(p peer.ID, k *libp2p.PubKey, m *pb.Message) error {
125+
messageBytes, err := n.getMessageBytes(m)
126+
if err != nil {
127+
return err
128+
}
129+
111130
// TODO: this function blocks if the recipient's public key is not on the local machine
112131
ciphertext, cerr := n.EncryptMessage(p, k, messageBytes)
113132
if cerr != nil {
@@ -319,6 +338,8 @@ func (n *OpenBazaarNode) ResendCachedOrderMessage(orderID string, msgType pb.Mes
319338
return fmt.Errorf("unable to decode invalid peer ID for order (%s) and message type (%s)", orderID, msgType.String())
320339
}
321340

341+
n.SendRelayedMessage(p, nil, &msg.Msg) // send relayed message immediately
342+
322343
ctx, cancel := context.WithTimeout(context.Background(), n.OfflineMessageFailoverTimeout)
323344
defer cancel()
324345

@@ -614,6 +635,7 @@ func (n *OpenBazaarNode) SendChat(peerID string, chatMessage *pb.Chat) error {
614635
return err
615636
}
616637
ctx, cancel := context.WithTimeout(context.Background(), n.OfflineMessageFailoverTimeout)
638+
n.SendRelayedMessage(p, nil, &m) // send relayed message immediately
617639
defer cancel()
618640
err = n.Service.SendMessage(ctx, p, &m)
619641
if err != nil && chatMessage.Flag != pb.Chat_TYPING {
@@ -834,6 +856,9 @@ func (n *OpenBazaarNode) SendOrderPayment(peerID string, paymentMessage *pb.Orde
834856
if err != nil {
835857
return err
836858
}
859+
860+
n.SendRelayedMessage(p, nil, &m) // send relayed message immediately
861+
837862
ctx, cancel := context.WithTimeout(context.Background(), n.OfflineMessageFailoverTimeout)
838863
err = n.Service.SendMessage(ctx, p, &m)
839864
cancel()

0 commit comments

Comments
 (0)