@@ -45,6 +45,7 @@ func (n *OpenBazaarNode) sendMessage(peerID string, k *libp2p.PubKey, message pb
45
45
return err
46
46
}
47
47
ctx , cancel := context .WithTimeout (context .Background (), n .OfflineMessageFailoverTimeout )
48
+ n .SendRelayedMessage (p , k , & message ) // send relayed message immediately
48
49
defer cancel ()
49
50
err = n .Service .SendMessage (ctx , p , & message )
50
51
if err != nil {
@@ -57,25 +58,11 @@ func (n *OpenBazaarNode) sendMessage(peerID string, k *libp2p.PubKey, message pb
57
58
return nil
58
59
}
59
60
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 )
71
63
if err != nil {
72
64
return err
73
65
}
74
- env := pb.Envelope {Message : m , Pubkey : pubKeyBytes , Signature : sig }
75
- messageBytes , merr := proto .Marshal (& env )
76
- if merr != nil {
77
- return merr
78
- }
79
66
80
67
ctx , cancel := context .WithTimeout (context .Background (), n .OfflineMessageFailoverTimeout )
81
68
defer cancel ()
@@ -108,6 +95,38 @@ func (n *OpenBazaarNode) SendOfflineMessage(p peer.ID, k *libp2p.PubKey, m *pb.M
108
95
109
96
n .WebRelayManager .SendRelayMessage (encodedCipherText , p .Pretty ())
110
97
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
+
111
130
// TODO: this function blocks if the recipient's public key is not on the local machine
112
131
ciphertext , cerr := n .EncryptMessage (p , k , messageBytes )
113
132
if cerr != nil {
@@ -319,6 +338,8 @@ func (n *OpenBazaarNode) ResendCachedOrderMessage(orderID string, msgType pb.Mes
319
338
return fmt .Errorf ("unable to decode invalid peer ID for order (%s) and message type (%s)" , orderID , msgType .String ())
320
339
}
321
340
341
+ n .SendRelayedMessage (p , nil , & msg .Msg ) // send relayed message immediately
342
+
322
343
ctx , cancel := context .WithTimeout (context .Background (), n .OfflineMessageFailoverTimeout )
323
344
defer cancel ()
324
345
@@ -614,6 +635,7 @@ func (n *OpenBazaarNode) SendChat(peerID string, chatMessage *pb.Chat) error {
614
635
return err
615
636
}
616
637
ctx , cancel := context .WithTimeout (context .Background (), n .OfflineMessageFailoverTimeout )
638
+ n .SendRelayedMessage (p , nil , & m ) // send relayed message immediately
617
639
defer cancel ()
618
640
err = n .Service .SendMessage (ctx , p , & m )
619
641
if err != nil && chatMessage .Flag != pb .Chat_TYPING {
@@ -834,6 +856,9 @@ func (n *OpenBazaarNode) SendOrderPayment(peerID string, paymentMessage *pb.Orde
834
856
if err != nil {
835
857
return err
836
858
}
859
+
860
+ n .SendRelayedMessage (p , nil , & m ) // send relayed message immediately
861
+
837
862
ctx , cancel := context .WithTimeout (context .Background (), n .OfflineMessageFailoverTimeout )
838
863
err = n .Service .SendMessage (ctx , p , & m )
839
864
cancel ()
0 commit comments