fix: libp2p spec uses bytes instead of a protobuffer for signed peer records

This commit is contained in:
Richard Ramos 2021-10-15 11:22:46 -04:00
parent b53661c585
commit e8f25fa062
7 changed files with 72 additions and 131 deletions

View File

@ -3,12 +3,12 @@
### Overview
Similar to [status-im/rendezvous](https://github.com/status-im/rendezvous)
in using a smaller liveness TTL for records (20s), and not using `UNREGISTER
REQUEST`, due to assuming that the TTL is very low (making it incompatible
in using a smaller liveness TTL for records (20s), and not using unregistering
records, due to assuming that the TTL is very low (making it incompatible
with libp2p original rendezvous spec). This module is intended to be used
in go-waku as a lightweight mechanism for generalized peer discovery.
Another difference compared to [libp2p/rendezvous](https://github.com/libp2p/specs/blob/master/rendezvous/README.md) and status-im/rendezvous is the usage of [routing records](https://github.com/libp2p/specs/blob/master/RFC/0003-routing-records.md) and [signed envelopes](https://github.com/libp2p/specs/blob/master/RFC/0002-signed-envelopes.md)
A difference compared to status-im/rendezvous is the usage of [routing records](https://github.com/libp2p/specs/blob/master/RFC/0003-routing-records.md) and [signed envelopes](https://github.com/libp2p/specs/blob/master/RFC/0002-signed-envelopes.md) instead of ENR records
**Protocol identifier**: `/vac/waku/rendezvous/0.0.1`
@ -98,7 +98,7 @@ message Message {
message Register {
string ns = 1;
record.pb.Envelope peer = 2;
bytes signedPeerRecord = 2;
int64 ttl = 3; // in seconds
}

View File

@ -15,6 +15,7 @@ import (
inet "github.com/libp2p/go-libp2p-core/network"
"github.com/libp2p/go-libp2p-core/peer"
"github.com/libp2p/go-libp2p-core/peerstore"
"github.com/libp2p/go-libp2p-core/record"
)
var (
@ -124,7 +125,6 @@ func (rp *rendezvousPoint) Register(ctx context.Context, ns string, ttl int) (ti
}
return time.Duration(response.Ttl) * time.Second, nil
return time.Duration(1) * time.Second, nil
}
func (rc *rendezvousClient) Register(ctx context.Context, ns string, ttl int) (time.Duration, error) {
@ -205,7 +205,7 @@ func (rp *rendezvousPoint) discoverQuery(ns string, limit int, r ggio.Reader, w
}
if res.GetType() != pb.Message_DISCOVER_RESPONSE {
return nil, fmt.Errorf("Unexpected response: %s", res.GetType().String())
return nil, fmt.Errorf("unexpected response: %s", res.GetType().String())
}
status := res.GetDiscoverResponse().GetStatus()
@ -217,7 +217,8 @@ func (rp *rendezvousPoint) discoverQuery(ns string, limit int, r ggio.Reader, w
result := make([]Registration, 0, len(regs))
for _, reg := range regs {
envelope, err := pbToEnvelope(reg.GetPeer())
reg.GetSignedPeerRecord()
envelope, err := record.UnmarshalEnvelope(reg.GetSignedPeerRecord())
if err != nil {
log.Errorf("Invalid peer info: %s", err.Error())
continue

View File

@ -1,5 +0,0 @@
#!/bin/bash
# rendezvous.proto
protoc --gofast_out=. --proto_path=$(go list -f '{{ .Dir }}' -m github.com/libp2p/go-libp2p-core) --proto_path=. rendezvous.proto
sed -i "s/record\/pb/github.com\/libp2p\/go-libp2p-core\/record\/pb/" rendezvous.pb.go

View File

@ -9,7 +9,6 @@ import (
io "io"
math "math"
math_bits "math/bits"
pb "github.com/libp2p/go-libp2p-core/record/pb"
)
// Reference imports to suppress errors if they are not otherwise used.
@ -175,7 +174,7 @@ func (m *Message) GetDiscoverResponse() *Message_DiscoverResponse {
type Message_Register struct {
Ns string `protobuf:"bytes,1,opt,name=ns,proto3" json:"ns,omitempty"`
Peer *pb.Envelope `protobuf:"bytes,2,opt,name=peer,proto3" json:"peer,omitempty"`
SignedPeerRecord []byte `protobuf:"bytes,2,opt,name=signedPeerRecord,proto3" json:"signedPeerRecord,omitempty"`
Ttl int64 `protobuf:"varint,3,opt,name=ttl,proto3" json:"ttl,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
@ -222,9 +221,9 @@ func (m *Message_Register) GetNs() string {
return ""
}
func (m *Message_Register) GetPeer() *pb.Envelope {
func (m *Message_Register) GetSignedPeerRecord() []byte {
if m != nil {
return m.Peer
return m.SignedPeerRecord
}
return nil
}
@ -430,41 +429,40 @@ func init() {
func init() { proto.RegisterFile("rendezvous.proto", fileDescriptor_ef0a1d5737df1c36) }
var fileDescriptor_ef0a1d5737df1c36 = []byte{
// 543 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x54, 0xcb, 0x6e, 0xd3, 0x40,
0x14, 0xcd, 0xd8, 0x69, 0x48, 0x6f, 0x49, 0x34, 0x9d, 0x52, 0x11, 0x65, 0x11, 0xaa, 0x48, 0xa8,
0x5d, 0xa5, 0xa8, 0x48, 0x6c, 0x10, 0x0b, 0xb7, 0x19, 0xc0, 0xc2, 0xb5, 0xa3, 0x6b, 0x27, 0x48,
0x6c, 0xac, 0xa4, 0x19, 0x2a, 0x4b, 0xc1, 0xb6, 0x3c, 0x6e, 0x44, 0xd9, 0xf2, 0x03, 0x2c, 0xd9,
0xb1, 0x47, 0x7c, 0x00, 0x9f, 0xd0, 0x25, 0x9f, 0x80, 0xc2, 0x8f, 0x20, 0xbf, 0xd2, 0x3c, 0x68,
0x41, 0x62, 0x95, 0xb9, 0x77, 0xce, 0x39, 0x39, 0xf7, 0x5c, 0xdb, 0x40, 0x23, 0xe1, 0x8f, 0xc5,
0x87, 0x69, 0x70, 0x21, 0x3b, 0x61, 0x14, 0xc4, 0x01, 0xab, 0x2d, 0x76, 0x46, 0xcd, 0x46, 0x24,
0xce, 0x82, 0x68, 0x7c, 0x18, 0x8e, 0x0e, 0x85, 0x3f, 0x15, 0x93, 0x20, 0x14, 0x19, 0xb0, 0xfd,
0xb5, 0x0a, 0x77, 0x4e, 0x85, 0x94, 0xc3, 0x73, 0xc1, 0x9e, 0x40, 0x39, 0xbe, 0x0c, 0x45, 0x83,
0xec, 0x91, 0x83, 0xfa, 0x51, 0xbb, 0xb3, 0xa4, 0xd1, 0xc9, 0x51, 0xc5, 0xaf, 0x73, 0x19, 0x0a,
0x4c, 0xf1, 0xec, 0x29, 0x54, 0x23, 0x71, 0xee, 0xc9, 0x58, 0x44, 0x0d, 0x65, 0x8f, 0x1c, 0x6c,
0x1d, 0x3d, 0xb8, 0x81, 0x8b, 0x39, 0x0c, 0xe7, 0x04, 0x66, 0x27, 0xee, 0xf3, 0xae, 0x90, 0x61,
0xe0, 0x4b, 0xd1, 0x50, 0x53, 0x91, 0xfd, 0xbf, 0x89, 0xe4, 0x70, 0x5c, 0x13, 0x48, 0x1c, 0x8d,
0x3d, 0x79, 0x16, 0x4c, 0x45, 0xd4, 0x28, 0xdf, 0xea, 0xa8, 0x9b, 0xc3, 0x70, 0x4e, 0x48, 0x1c,
0x15, 0xe7, 0xb9, 0xa3, 0x8d, 0x5b, 0x1d, 0x75, 0x57, 0xe0, 0xb8, 0x26, 0xd0, 0xec, 0x43, 0xb5,
0xf0, 0xcd, 0xea, 0xa0, 0xf8, 0x32, 0x4d, 0x79, 0x13, 0x15, 0x5f, 0xb2, 0x7d, 0x28, 0x87, 0x62,
0x9e, 0xdd, 0x4e, 0x27, 0x5b, 0x56, 0xf2, 0x07, 0x3c, 0x5f, 0x16, 0xa6, 0x00, 0x46, 0x41, 0x8d,
0xe3, 0x49, 0x1a, 0x8f, 0x8a, 0xc9, 0xb1, 0xf9, 0x91, 0x00, 0x5d, 0xcd, 0x83, 0x3d, 0x83, 0x8a,
0x8c, 0x87, 0xf1, 0x85, 0xcc, 0x37, 0xf9, 0xf0, 0xc6, 0x20, 0x33, 0x82, 0x9d, 0x82, 0x31, 0x27,
0xb1, 0x16, 0x40, 0x76, 0x72, 0xc4, 0xfb, 0x38, 0x35, 0xb5, 0x89, 0x0b, 0x9d, 0x3f, 0xb8, 0x78,
0x04, 0xd5, 0x22, 0x82, 0xb5, 0xe1, 0xee, 0xc1, 0xc6, 0xc4, 0x7b, 0xe7, 0x65, 0x42, 0x2a, 0x66,
0x45, 0xf3, 0x3b, 0x01, 0xba, 0x9a, 0x1a, 0xe3, 0x50, 0xcb, 0x36, 0x19, 0x0d, 0x63, 0x2f, 0x48,
0x55, 0xd4, 0x7f, 0x79, 0x98, 0x96, 0x59, 0x0b, 0xe3, 0xab, 0xff, 0x3f, 0x7e, 0x79, 0x75, 0xfc,
0xf6, 0x6b, 0xd8, 0x5a, 0x78, 0x05, 0xd8, 0x5d, 0xa8, 0x22, 0x7f, 0xa1, 0xdb, 0x0e, 0x47, 0x5a,
0x62, 0xbb, 0xb0, 0x5d, 0x54, 0x2e, 0x72, 0xbb, 0x67, 0x99, 0x36, 0xa7, 0x24, 0x01, 0x75, 0x75,
0xfb, 0xc4, 0x1a, 0x70, 0xa4, 0x4a, 0x02, 0x2a, 0xaa, 0x6b, 0x90, 0xda, 0xfe, 0x42, 0xa0, 0xbe,
0xec, 0x89, 0x55, 0x40, 0xb1, 0x5e, 0xd1, 0x12, 0xbb, 0x0f, 0x3b, 0xdc, 0xd5, 0xcd, 0x81, 0x66,
0xe8, 0x5d, 0xd7, 0xd4, 0x4e, 0xb9, 0xdd, 0xd3, 0x4e, 0x38, 0x1d, 0x2f, 0x5f, 0xf4, 0x38, 0x47,
0x57, 0x37, 0x9f, 0x5b, 0x54, 0xb0, 0x6d, 0xa8, 0x5d, 0x5f, 0x38, 0x8e, 0x41, 0xdf, 0xb2, 0x5d,
0xa0, 0xdc, 0x35, 0x2d, 0xc7, 0xd5, 0xfa, 0xce, 0x4b, 0x0b, 0xf5, 0x37, 0xbc, 0x4b, 0xaf, 0x48,
0xd6, 0xd6, 0x4d, 0x87, 0xa3, 0xa9, 0x19, 0x2e, 0x47, 0xb4, 0x90, 0x7e, 0x53, 0x18, 0x4b, 0x04,
0xfa, 0xa6, 0x36, 0xd0, 0x74, 0x43, 0x3b, 0x36, 0x38, 0xfd, 0xa4, 0x1e, 0xd3, 0xab, 0x59, 0x8b,
0xfc, 0x98, 0xb5, 0xc8, 0xcf, 0x59, 0x8b, 0x7c, 0xfe, 0xd5, 0x2a, 0x8d, 0x2a, 0xe9, 0x57, 0xe4,
0xf1, 0xef, 0x00, 0x00, 0x00, 0xff, 0xff, 0x12, 0xe2, 0x82, 0x67, 0x82, 0x04, 0x00, 0x00,
// 528 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x54, 0xcd, 0x6e, 0xd3, 0x4c,
0x14, 0xcd, 0xd8, 0x69, 0xbe, 0xf4, 0xb6, 0x89, 0xa6, 0xf3, 0x51, 0x11, 0x65, 0x61, 0xaa, 0x48,
0x88, 0x8a, 0x45, 0x84, 0x8a, 0xc4, 0x06, 0xb1, 0x70, 0xeb, 0x01, 0x2c, 0x5c, 0x3b, 0xba, 0x76,
0x03, 0x62, 0x63, 0xa5, 0xf5, 0x10, 0x59, 0x2a, 0x76, 0xe4, 0x71, 0x2b, 0xca, 0x96, 0x17, 0x60,
0xc9, 0x8e, 0x17, 0x80, 0x3d, 0x8f, 0xd0, 0x25, 0x8f, 0x80, 0xc2, 0x8b, 0x20, 0xff, 0xa5, 0xf9,
0xa1, 0x05, 0x89, 0x95, 0xef, 0xbd, 0x73, 0xce, 0xd1, 0xb9, 0x67, 0x6c, 0x03, 0x4d, 0x44, 0x14,
0x88, 0xf7, 0xe7, 0xf1, 0x99, 0xec, 0x4f, 0x92, 0x38, 0x8d, 0x59, 0x6b, 0x7e, 0x72, 0xdc, 0xfb,
0xda, 0x84, 0xff, 0x0e, 0x85, 0x94, 0xa3, 0xb1, 0x60, 0x8f, 0xa0, 0x9e, 0x5e, 0x4c, 0x44, 0x87,
0xec, 0x90, 0xdd, 0xf6, 0x5e, 0xaf, 0xbf, 0x80, 0xec, 0x97, 0xa8, 0xea, 0xe9, 0x5d, 0x4c, 0x04,
0xe6, 0x78, 0xf6, 0x18, 0x9a, 0x89, 0x18, 0x87, 0x32, 0x15, 0x49, 0x47, 0xd9, 0x21, 0xbb, 0x1b,
0x7b, 0x77, 0xae, 0xe1, 0x62, 0x09, 0xc3, 0x19, 0x81, 0xb9, 0x99, 0xc7, 0x72, 0x2a, 0xe4, 0x24,
0x8e, 0xa4, 0xe8, 0xa8, 0xb9, 0xc8, 0xbd, 0x3f, 0x89, 0x94, 0x70, 0x5c, 0x11, 0xc8, 0x1c, 0x05,
0xa1, 0x3c, 0x89, 0xcf, 0x45, 0xd2, 0xa9, 0xdf, 0xe8, 0xc8, 0x28, 0x61, 0x38, 0x23, 0x64, 0x8e,
0xaa, 0x7a, 0xe6, 0x68, 0xed, 0x46, 0x47, 0xc6, 0x12, 0x1c, 0x57, 0x04, 0xba, 0xaf, 0xa0, 0x59,
0xf9, 0x66, 0x6d, 0x50, 0x22, 0x99, 0xa7, 0xbc, 0x8e, 0x4a, 0x24, 0xd9, 0x7d, 0xa0, 0x32, 0x1c,
0x47, 0x22, 0x18, 0x88, 0x8c, 0x71, 0x12, 0x27, 0x41, 0x9e, 0xe3, 0x26, 0xae, 0xcc, 0x19, 0x05,
0x35, 0x4d, 0x4f, 0xf3, 0x84, 0x54, 0xcc, 0xca, 0xee, 0x07, 0x02, 0x74, 0x39, 0x12, 0xf6, 0x04,
0x1a, 0x32, 0x1d, 0xa5, 0x67, 0xb2, 0xbc, 0xcc, 0xbb, 0xd7, 0x66, 0x59, 0x10, 0xdc, 0x1c, 0x8c,
0x25, 0x89, 0x69, 0x00, 0x45, 0xe5, 0x89, 0x77, 0x69, 0xee, 0x65, 0x1d, 0xe7, 0x26, 0xbf, 0x71,
0xf1, 0x00, 0x9a, 0x55, 0x0a, 0x2b, 0xfb, 0xdd, 0x82, 0xb5, 0xd3, 0xf0, 0x6d, 0x58, 0x08, 0xa9,
0x58, 0x34, 0xdd, 0x6f, 0x04, 0xe8, 0x72, 0x70, 0x8c, 0x43, 0xab, 0xb8, 0xcc, 0x64, 0x94, 0x86,
0x71, 0xae, 0xa2, 0xfe, 0xcd, 0xfb, 0xb4, 0xc8, 0x9a, 0x5b, 0x5f, 0xfd, 0xf7, 0xf5, 0xeb, 0xcb,
0xeb, 0xf7, 0x5e, 0xc2, 0xc6, 0xdc, 0x57, 0xc0, 0x36, 0xa1, 0x89, 0xfc, 0x99, 0xe9, 0x7a, 0x1c,
0x69, 0x8d, 0x6d, 0xc3, 0x56, 0xd5, 0xf9, 0xc8, 0xdd, 0x81, 0x63, 0xbb, 0x9c, 0x92, 0x0c, 0x64,
0x98, 0xee, 0x81, 0x33, 0xe4, 0x48, 0x95, 0x0c, 0x54, 0x75, 0x57, 0x20, 0xb5, 0xf7, 0x99, 0x40,
0x7b, 0xd1, 0x13, 0x6b, 0x80, 0xe2, 0xbc, 0xa0, 0x35, 0x76, 0x1b, 0xfe, 0xe7, 0xbe, 0x69, 0x0f,
0x75, 0xcb, 0x34, 0x7c, 0x5b, 0x3f, 0xe4, 0xee, 0x40, 0x3f, 0xe0, 0x34, 0x58, 0x3c, 0x18, 0x70,
0x8e, 0xbe, 0x69, 0x3f, 0x75, 0xa8, 0x60, 0x5b, 0xd0, 0xba, 0x3a, 0xf0, 0x3c, 0x8b, 0xbe, 0x61,
0xdb, 0x40, 0xb9, 0x6f, 0x3b, 0x9e, 0xaf, 0x1f, 0x79, 0xcf, 0x1d, 0x34, 0x5f, 0x73, 0x83, 0x5e,
0x92, 0x62, 0x6c, 0xda, 0x1e, 0x47, 0x5b, 0xb7, 0x7c, 0x8e, 0xe8, 0x20, 0xfd, 0xa2, 0x30, 0x96,
0x09, 0x1c, 0xd9, 0xfa, 0x50, 0x37, 0x2d, 0x7d, 0xdf, 0xe2, 0xf4, 0xa3, 0xba, 0x4f, 0x2f, 0xa7,
0x1a, 0xf9, 0x3e, 0xd5, 0xc8, 0x8f, 0xa9, 0x46, 0x3e, 0xfd, 0xd4, 0x6a, 0xc7, 0x8d, 0xfc, 0xbf,
0xf2, 0xf0, 0x57, 0x00, 0x00, 0x00, 0xff, 0xff, 0x4c, 0x11, 0x6e, 0xa0, 0x6b, 0x04, 0x00, 0x00,
}
func (m *Message) Marshal() (dAtA []byte, err error) {
@ -576,15 +574,10 @@ func (m *Message_Register) MarshalToSizedBuffer(dAtA []byte) (int, error) {
i--
dAtA[i] = 0x18
}
if m.Peer != nil {
{
size, err := m.Peer.MarshalToSizedBuffer(dAtA[:i])
if err != nil {
return 0, err
}
i -= size
i = encodeVarintRendezvous(dAtA, i, uint64(size))
}
if len(m.SignedPeerRecord) > 0 {
i -= len(m.SignedPeerRecord)
copy(dAtA[i:], m.SignedPeerRecord)
i = encodeVarintRendezvous(dAtA, i, uint64(len(m.SignedPeerRecord)))
i--
dAtA[i] = 0x12
}
@ -786,8 +779,8 @@ func (m *Message_Register) Size() (n int) {
if l > 0 {
n += 1 + l + sovRendezvous(uint64(l))
}
if m.Peer != nil {
l = m.Peer.Size()
l = len(m.SignedPeerRecord)
if l > 0 {
n += 1 + l + sovRendezvous(uint64(l))
}
if m.Ttl != 0 {
@ -1148,9 +1141,9 @@ func (m *Message_Register) Unmarshal(dAtA []byte) error {
iNdEx = postIndex
case 2:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field Peer", wireType)
return fmt.Errorf("proto: wrong wireType = %d for field SignedPeerRecord", wireType)
}
var msglen int
var byteLen int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowRendezvous
@ -1160,26 +1153,24 @@ func (m *Message_Register) Unmarshal(dAtA []byte) error {
}
b := dAtA[iNdEx]
iNdEx++
msglen |= int(b&0x7F) << shift
byteLen |= int(b&0x7F) << shift
if b < 0x80 {
break
}
}
if msglen < 0 {
if byteLen < 0 {
return ErrInvalidLengthRendezvous
}
postIndex := iNdEx + msglen
postIndex := iNdEx + byteLen
if postIndex < 0 {
return ErrInvalidLengthRendezvous
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
if m.Peer == nil {
m.Peer = &pb.Envelope{}
}
if err := m.Peer.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
return err
m.SignedPeerRecord = append(m.SignedPeerRecord[:0], dAtA[iNdEx:postIndex]...)
if m.SignedPeerRecord == nil {
m.SignedPeerRecord = []byte{}
}
iNdEx = postIndex
case 3:

View File

@ -2,8 +2,6 @@ syntax = "proto3";
package rendezvous.pb;
import "record/pb/envelope.proto";
message Message {
enum MessageType {
REGISTER = 0;
@ -24,7 +22,7 @@ message Message {
message Register {
string ns = 1;
record.pb.Envelope peer = 2;
bytes signedPeerRecord = 2;
int64 ttl = 3; // in seconds
}

View File

@ -5,10 +5,8 @@ import (
"fmt"
"time"
"github.com/golang/protobuf/proto"
libp2pCrypto "github.com/libp2p/go-libp2p-core/crypto"
"github.com/libp2p/go-libp2p-core/record"
record_pb "github.com/libp2p/go-libp2p-core/record/pb"
pb "github.com/status-im/go-waku-rendezvous/pb"
@ -61,12 +59,7 @@ func newRegisterMessage(privKey libp2pCrypto.PrivKey, ns string, pi peer.AddrInf
return nil, err
}
peerEnvelop := &record_pb.Envelope{}
if err = proto.Unmarshal(envPayload, peerEnvelop); err != nil {
return nil, err
}
msg.Register.Peer = peerEnvelop
msg.Register.SignedPeerRecord = envPayload
return msg, nil
}
@ -85,33 +78,7 @@ func newDiscoverMessage(ns string, limit int) *pb.Message {
return msg
}
func marshalEnvelope(pbEnvelope *record_pb.Envelope) ([]byte, error) {
return proto.Marshal(pbEnvelope)
}
func pbToEnvelope(pbEnvelope *record_pb.Envelope) (*record.Envelope, error) {
if pbEnvelope == nil {
return nil, errors.New("missing envelope information")
}
envelopeBytes, err := proto.Marshal(pbEnvelope)
if err != nil {
return nil, err
}
return record.UnmarshalEnvelope(envelopeBytes)
}
func pbToPeerRecord(pbEnvelope *record_pb.Envelope) (peer.AddrInfo, error) {
if pbEnvelope == nil {
return peer.AddrInfo{}, errors.New("missing envelope information")
}
envelopeBytes, err := proto.Marshal(pbEnvelope)
if err != nil {
return peer.AddrInfo{}, err
}
func unmarshalSignedPeerRecord(envelopeBytes []byte) (peer.AddrInfo, error) {
envelope, rec, err := record.ConsumeEnvelope(envelopeBytes, peer.PeerRecordEnvelopeDomain)
if err != nil {
return peer.AddrInfo{}, err
@ -150,16 +117,10 @@ func newDiscoverResponse(regs []RegistrationRecord) (*pb.Message_DiscoverRespons
rregs := make([]*pb.Message_Register, len(regs))
for i, reg := range regs {
var env = &record_pb.Envelope{}
if err := env.Unmarshal(reg.PeerEnvelope); err != nil {
return nil, err
}
rreg := new(pb.Message_Register)
rns := reg.Ns
rreg.Ns = rns
rreg.Peer = env
rreg.SignedPeerRecord = reg.PeerEnvelope
rttl := int64(reg.Ttl)
rreg.Ttl = rttl
rregs[i] = rreg

13
svc.go
View File

@ -157,12 +157,12 @@ func (rz *RendezvousService) handleRegister(p peer.ID, m *pb.Message_Register) *
return newRegisterResponseError(pb.Message_E_INVALID_NAMESPACE, "namespace too long")
}
mpi := m.GetPeer()
mpi := m.GetSignedPeerRecord()
if mpi == nil {
return newRegisterResponseError(pb.Message_E_INVALID_PEER_INFO, "missing peer info")
return newRegisterResponseError(pb.Message_E_INVALID_PEER_INFO, "missing signed peer record")
}
peerRecord, err := pbToPeerRecord(mpi)
peerRecord, err := unmarshalSignedPeerRecord(mpi)
if err != nil {
return newRegisterResponseError(pb.Message_E_INVALID_PEER_INFO, "invalid peer record")
}
@ -199,12 +199,7 @@ func (rz *RendezvousService) handleRegister(p peer.ID, m *pb.Message_Register) *
deadline := time.Now().Add(time.Duration(ttl)).Add(networkDelay)
envPayload, err := marshalEnvelope(mpi)
if err != nil {
return newRegisterResponseError(pb.Message_E_INTERNAL_ERROR, err.Error())
}
key, err := rz.storage.Add(ns, peerRecord.ID, envPayload, ttl, deadline)
key, err := rz.storage.Add(ns, peerRecord.ID, mpi, ttl, deadline)
if err != nil {
return newRegisterResponseError(pb.Message_E_INTERNAL_ERROR, err.Error())
}