Skip to content

Commit

Permalink
Add max holding seconds in relay packet
Browse files Browse the repository at this point in the history
Signed-off-by: Yilun <[email protected]>
  • Loading branch information
yilunzhang committed Oct 2, 2018
1 parent 462c946 commit 4cc39a0
Show file tree
Hide file tree
Showing 7 changed files with 100 additions and 40 deletions.
98 changes: 71 additions & 27 deletions api/websocket/client/messages.pb.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions api/websocket/client/messages.proto
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ message OutboundMessage {
string dest = 1;
bytes payload = 2;
repeated string dests = 3;
uint32 max_holding_seconds = 4;
}

message InboundMessage {
Expand Down
2 changes: 1 addition & 1 deletion api/websocket/server/relay.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ func (ws *WsServer) SendRelayPacket(clientId string, msg *client.OutboundMessage

var signature []byte
for _, dest := range append(msg.Dests, msg.Dest) {
err := ws.node.SendRelayPacket(srcAddrStr, dest, msg.Payload, signature)
err := ws.node.SendRelayPacket(srcAddrStr, dest, msg.Payload, signature, msg.MaxHoldingSeconds)
if err != nil {
log.Error("Send relay packet error:", err)
}
Expand Down
30 changes: 21 additions & 9 deletions net/message/relay.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,23 +15,25 @@ import (
)

type RelayPacket struct {
SrcAddr string
DestID []byte
Payload []byte
SigChain *por.SigChain
SrcAddr string
DestID []byte
Payload []byte
SigChain *por.SigChain
MaxHoldingSeconds uint32
}

type RelayMessage struct {
msgHdr
packet RelayPacket
}

func NewRelayPacket(srcAddr string, destID, payload []byte, sigChain *por.SigChain) (*RelayPacket, error) {
func NewRelayPacket(srcAddr string, destID, payload []byte, sigChain *por.SigChain, maxHoldingSeconds uint32) (*RelayPacket, error) {
relayPakcet := &RelayPacket{
SrcAddr: srcAddr,
DestID: destID,
Payload: payload,
SigChain: sigChain,
SrcAddr: srcAddr,
DestID: destID,
Payload: payload,
SigChain: sigChain,
MaxHoldingSeconds: maxHoldingSeconds,
}
return relayPakcet, nil
}
Expand Down Expand Up @@ -129,6 +131,11 @@ func (packet *RelayPacket) Serialize(w io.Writer) error {
return err
}

err = serialization.WriteUint32(w, packet.MaxHoldingSeconds)
if err != nil {
return err
}

return nil
}

Expand Down Expand Up @@ -161,5 +168,10 @@ func (packet *RelayPacket) Deserialize(r io.Reader) error {
return err
}

packet.MaxHoldingSeconds, err = serialization.ReadUint32(r)
if err != nil {
return err
}

return nil
}
4 changes: 2 additions & 2 deletions net/node/relay.go
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ func (node *node) NextHop(key []byte) (protocol.Noder, error) {
// return nil, nil
}

func (node *node) SendRelayPacket(srcAddr, destAddr string, payload, signature []byte) error {
func (node *node) SendRelayPacket(srcAddr, destAddr string, payload, signature []byte, maxHoldingSeconds uint32) error {
srcID, srcPubkey, err := address.ParseClientAddress(srcAddr)
if err != nil {
log.Error("Parse src client address error:", err)
Expand Down Expand Up @@ -89,7 +89,7 @@ func (node *node) SendRelayPacket(srcAddr, destAddr string, payload, signature [
por.ECDSA,
)

relayPacket, err := message.NewRelayPacket(srcAddr, destID, payload, sigChain)
relayPacket, err := message.NewRelayPacket(srcAddr, destID, payload, sigChain, maxHoldingSeconds)
if err != nil {
log.Error("Create relay packet error: ", err)
return err
Expand Down
2 changes: 1 addition & 1 deletion net/protocol/protocol.go
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,7 @@ type Noder interface {
GetChordRing() *chord.Ring
StartRelayer(wallet vault.Wallet)
NextHop(key []byte) (Noder, error)
SendRelayPacket(srcAddr, destAddr string, payload, signature []byte) error
SendRelayPacket(srcAddr, destAddr string, payload, signature []byte, maxHoldingSeconds uint32) error
SendRelayPacketsInBuffer(clientId []byte) error
}

Expand Down
3 changes: 3 additions & 0 deletions relay/relay.go
Original file line number Diff line number Diff line change
Expand Up @@ -203,6 +203,9 @@ func (rs *RelayService) ReceiveRelayMsgNoError(v interface{}) {
}

func (rs *RelayService) addRelayPacketToBuffer(clientID []byte, packet *message.RelayPacket) {
if packet.MaxHoldingSeconds == 0 {
return
}
clientIDStr := hex.EncodeToString(clientID)
rs.Lock()
defer rs.Unlock()
Expand Down

0 comments on commit 4cc39a0

Please sign in to comment.