diff --git a/encoding/cid.go b/encoding/cid.go index 4320fdb..21c1251 100644 --- a/encoding/cid.go +++ b/encoding/cid.go @@ -21,7 +21,7 @@ type CID struct { Multibase Type types.CIDType Hash Multihash - Size uint32 + Size uint64 } var _ json.Marshaler = (*CID)(nil) @@ -29,7 +29,7 @@ var _ json.Unmarshaler = (*CID)(nil) var _ msgpack.CustomEncoder = (*CID)(nil) var _ msgpack.CustomDecoder = (*CID)(nil) -func NewCID(Type types.CIDType, Hash Multihash, Size uint32) *CID { +func NewCID(Type types.CIDType, Hash Multihash, Size uint64) *CID { c := &CID{ Type: Type, Hash: Hash, @@ -104,7 +104,7 @@ func CIDFromBytes(bytes []byte) (*CID, error) { return initCID(bytes) } -func CIDFromHash(bytes interface{}, size uint32, cidType types.CIDType) (*CID, error) { +func CIDFromHash(bytes interface{}, size uint64, cidType types.CIDType) (*CID, error) { var ( byteSlice []byte err error @@ -151,7 +151,7 @@ func CIDVerify(bytes interface{}) bool { return err == nil } -func (cid *CID) CopyWith(newType int, newSize uint32) (*CID, error) { +func (cid *CID) CopyWith(newType int, newSize uint64) (*CID, error) { if newType == 0 { newType = int(cid.Type) } @@ -282,7 +282,7 @@ func initCID(bytes []byte) (*CID, error) { hashBytes := bytes[1:34] hash := NewMultihash(hashBytes) - var size uint32 + var size uint64 if len(bytes) > 34 { sizeBytes := bytes[34:] sizeValue := utils.DecodeEndian(sizeBytes) diff --git a/encoding/encrypted_cid.go b/encoding/encrypted_cid.go index 5e528e5..d4aabdc 100644 --- a/encoding/encrypted_cid.go +++ b/encoding/encrypted_cid.go @@ -13,7 +13,7 @@ type EncryptedCID struct { encryptedBlobHash Multihash OriginalCID CID encryptionAlgorithm byte - padding uint32 + padding uint64 chunkSizeAsPowerOf2 int encryptionKey []byte } @@ -23,7 +23,7 @@ var _ msgpack.CustomDecoder = (*EncryptedCID)(nil) var _ json.Marshaler = (*EncryptedCID)(nil) var _ json.Unmarshaler = (*EncryptedCID)(nil) -func NewEncryptedCID(encryptedBlobHash Multihash, originalCID CID, encryptionKey []byte, padding uint32, chunkSizeAsPowerOf2 int, encryptionAlgorithm byte) *EncryptedCID { +func NewEncryptedCID(encryptedBlobHash Multihash, originalCID CID, encryptionKey []byte, padding uint64, chunkSizeAsPowerOf2 int, encryptionAlgorithm byte) *EncryptedCID { e := &EncryptedCID{ encryptedBlobHash: encryptedBlobHash, OriginalCID: originalCID, diff --git a/protocol/registry.go b/protocol/registry.go index 7a60a63..524e45f 100644 --- a/protocol/registry.go +++ b/protocol/registry.go @@ -109,7 +109,7 @@ func MarshalRegistryEntry(data []byte, revision uint64) []byte { var buffer []byte buffer = append(buffer, byte(types.RecordTypeRegistryEntry)) - revBytes := utils.EncodeEndian(uint32(revision), 8) + revBytes := utils.EncodeEndian(revision, 8) buffer = append(buffer, revBytes...) buffer = append(buffer, byte(len(data))) diff --git a/service/http.go b/service/http.go index f9f13d1..6214ae1 100644 --- a/service/http.go +++ b/service/http.go @@ -70,7 +70,7 @@ func (h *HTTPImpl) p2pHandler(ctx jape.Context) { return } go func() { - err := h.node.Services().P2P().OnNewPeer(peer, true) + err := h.node.Services().P2P().OnNewPeer(peer, false) if err != nil { h.node.Logger().Error("error handling new peer", zap.Error(err)) } diff --git a/service/p2p.go b/service/p2p.go index 92aa174..eaade49 100644 --- a/service/p2p.go +++ b/service/p2p.go @@ -248,7 +248,14 @@ func (p *P2PImpl) ConnectToNode(connectionUris []*url.URL, retried bool) error { func (p *P2PImpl) OnNewPeer(peer net.Peer, verifyId bool) error { var wg sync.WaitGroup - pid, _ := peer.Id().ToString() + var pid string + + if peer.Id() != nil { + pid, _ = peer.Id().ToString() + } else { + pid = "unknown" + } + p.logger.Debug("OnNewPeer started", zap.String("peer", pid)) challenge := protocol.GenerateChallenge() @@ -277,18 +284,29 @@ func (p *P2PImpl) OnNewPeer(peer net.Peer, verifyId bool) error { return nil } func (p *P2PImpl) OnNewPeerListen(peer net.Peer, verifyId bool) { - peerId, err := peer.Id().ToString() - if err != nil { - p.logger.Error("failed to get peer id", zap.Error(err)) - return + + var pid string + + if peer.Id() != nil { + pid, _ = peer.Id().ToString() + } else { + pid = "unknown" } + onDone := net.CloseCallback(func() { - // Handle closure of the connection - if p.peers.Contains(peerId) { - p.peers.Remove(peerId) - } - if p.peersPending.Contains(peerId) { - p.peersPending.Remove(peerId) + if peer.Id() != nil { + pid, err := peer.Id().ToString() + if err != nil { + p.logger.Error("failed to get peer id", zap.Error(err)) + return + } + // Handle closure of the connection + if p.peers.Contains(pid) { + p.peers.Remove(pid) + } + if p.peersPending.Contains(pid) { + p.peersPending.Remove(pid) + } } }) @@ -300,7 +318,7 @@ func (p *P2PImpl) OnNewPeerListen(peer net.Peer, verifyId bool) { imsg := base.NewIncomingMessageUnknown() err := msgpack.Unmarshal(message, imsg) - p.logger.Debug("ListenForMessages", zap.Any("message", imsg), zap.String("peer", peerId)) + p.logger.Debug("ListenForMessages", zap.Any("message", imsg), zap.String("peer", pid)) if err != nil { return err } diff --git a/utils/endian.go b/utils/endian.go index 913a231..8f1c76f 100644 --- a/utils/endian.go +++ b/utils/endian.go @@ -2,15 +2,15 @@ package utils import "encoding/binary" -func EncodeEndian(value uint32, length int) []byte { +func EncodeEndian(value uint64, length int) []byte { byteSlice := make([]byte, length) - binary.LittleEndian.PutUint32(byteSlice, value) + binary.LittleEndian.PutUint64(byteSlice, value) return byteSlice } -func DecodeEndian(byteSlice []byte) uint32 { - buffer := make([]byte, 4) +func DecodeEndian(byteSlice []byte) uint64 { + buffer := make([]byte, 8) copy(buffer, byteSlice) - return binary.LittleEndian.Uint32(buffer) + return binary.LittleEndian.Uint64(buffer) }