@@ -3,6 +3,7 @@ package message
33import (
44 "bytes"
55 "encoding/binary"
6+ "encoding/hex"
67 "errors"
78 "fmt"
89 "io"
@@ -14,8 +15,8 @@ import (
1415 "github.com/ipfs/go-graphsync/ipldutil"
1516 "github.com/ipfs/go-graphsync/message/ipldbind"
1617 pb "github.com/ipfs/go-graphsync/message/pb"
17- "github.com/ipld/go-ipld-prime"
1818 "github.com/ipld/go-ipld-prime/codec/dagcbor"
19+ "github.com/ipld/go-ipld-prime/datamodel"
1920 "github.com/ipld/go-ipld-prime/node/bindnode"
2021 pool "github.com/libp2p/go-buffer-pool"
2122 "github.com/libp2p/go-libp2p-core/network"
@@ -49,7 +50,7 @@ func NewMessageHandler() *MessageHandler {
4950// FromNet can read a network stream to deserialized a GraphSyncMessage
5051func (mh * MessageHandler ) FromNet (r io.Reader ) (GraphSyncMessage , error ) {
5152 reader := msgio .NewVarintReaderSize (r , network .MessageSizeMax )
52- return mh .FromMsgReaderV11 (reader )
53+ return mh .FromMsgReader (reader )
5354}
5455
5556// FromMsgReader can deserialize a DAG-CBOR message into a GraphySyncMessage
@@ -60,14 +61,16 @@ func (mh *MessageHandler) FromMsgReader(r msgio.Reader) (GraphSyncMessage, error
6061 }
6162
6263 builder := ipldbind .Prototype .Message .Representation ().NewBuilder ()
64+ fmt .Println (hex .EncodeToString (msg ))
6365 err = dagcbor .Decode (builder , bytes .NewReader (msg ))
6466 if err != nil {
67+ fmt .Printf ("dagcbor decode error %v" , err )
6568 return GraphSyncMessage {}, err
6669 }
6770
6871 node := builder .Build ()
6972 ipldGSM := bindnode .Unwrap (node ).(* ipldbind.GraphSyncMessage )
70- return mh .messageFromIPLD (ipldGSM )
73+ return mh .fromIPLD (ipldGSM )
7174}
7275
7376// FromMsgReaderV11 can deserialize a protobuf message into a GraphySyncMessage
@@ -105,14 +108,22 @@ func (mh *MessageHandler) FromMsgReaderV1(p peer.ID, r msgio.Reader) (GraphSyncM
105108}
106109
107110// ToProto converts a GraphSyncMessage to its ipldbind.GraphSyncMessage equivalent
108- func (mh * MessageHandler ) ToIPLD (gsm GraphSyncMessage ) (* ipldbind.GraphSyncMessage , error ) {
111+ func (mh * MessageHandler ) toIPLD (gsm GraphSyncMessage ) (* ipldbind.GraphSyncMessage , error ) {
109112 ibm := new (ipldbind.GraphSyncMessage )
110113 ibm .Requests = make ([]ipldbind.GraphSyncRequest , 0 , len (gsm .requests ))
111114 for _ , request := range gsm .requests {
115+ sel := & request .selector
116+ if request .selector == nil {
117+ sel = nil
118+ }
119+ root := & request .root
120+ if request .root == cid .Undef {
121+ root = nil
122+ }
112123 ibm .Requests = append (ibm .Requests , ipldbind.GraphSyncRequest {
113124 Id : request .id .Bytes (),
114- Root : request . root ,
115- Selector : & request . selector ,
125+ Root : root ,
126+ Selector : sel ,
116127 Priority : request .priority ,
117128 Cancel : request .isCancel ,
118129 Update : request .isUpdate ,
@@ -242,14 +253,14 @@ func (mh *MessageHandler) ToProtoV1(p peer.ID, gsm GraphSyncMessage) (*pb.Messag
242253// prefixed with a length uvar
243254func (mh * MessageHandler ) ToNet (gsm GraphSyncMessage , w io.Writer ) error {
244255 fmt .Printf ("gsm: %v\n " , gsm .String ())
245- msg , err := mh .ToIPLD (gsm )
256+ msg , err := mh .toIPLD (gsm )
246257 if err != nil {
247258 return err
248259 }
249260
250261 fmt .Printf ("ipldgsm: %v\n " , msg )
251262
252- lbuf := make ([]byte , binary .MaxVarintLen32 )
263+ lbuf := make ([]byte , binary .MaxVarintLen64 )
253264 buf := new (bytes.Buffer )
254265 buf .Write (lbuf )
255266
@@ -258,12 +269,16 @@ func (mh *MessageHandler) ToNet(gsm GraphSyncMessage, w io.Writer) error {
258269 if err != nil {
259270 return err
260271 }
272+ //_, err = buf.WriteTo(w)
261273
262- lbuflen := binary .PutUvarint (lbuf , uint64 (buf .Len ()- binary .MaxVarintLen32 ))
274+ lbuflen := binary .PutUvarint (lbuf , uint64 (buf .Len ()- binary .MaxVarintLen64 ))
263275 out := buf .Bytes ()
264- copy (lbuf [:lbuflen ], out [lbuflen :])
276+ // fmt.Printf("%v = %v - %v\n", uint64(buf.Len()-binary.MaxVarintLen64), hex.EncodeToString(lbuf), lbuf[:lbuflen])
277+ copy (out [binary .MaxVarintLen64 - lbuflen :], lbuf [:lbuflen ])
278+
279+ fmt .Println (hex .EncodeToString (out ))
280+ _ , err = w .Write (out [binary .MaxVarintLen64 - lbuflen :])
265281
266- _ , err = w .Write (out [lbuflen :])
267282 return err
268283}
269284
@@ -338,15 +353,23 @@ func intIdToRequestId(p peer.ID, fromV1Map map[v1RequestKey]graphsync.RequestID,
338353}
339354
340355// Mapping from a ipldbind.GraphSyncMessage object to a GraphSyncMessage object
341- func (mh * MessageHandler ) messageFromIPLD (ibm * ipldbind.GraphSyncMessage ) (GraphSyncMessage , error ) {
356+ func (mh * MessageHandler ) fromIPLD (ibm * ipldbind.GraphSyncMessage ) (GraphSyncMessage , error ) {
342357 requests := make (map [graphsync.RequestID ]GraphSyncRequest , len (ibm .Requests ))
343358 for _ , req := range ibm .Requests {
344359 // exts := req.Extensions
345360 id , err := graphsync .ParseRequestID (req .Id )
346361 if err != nil {
347362 return GraphSyncMessage {}, err
348363 }
349- requests [id ] = newRequest (id , req .Root , * req .Selector , graphsync .Priority (req .Priority ), req .Cancel , req .Update , nil )
364+ root := cid .Undef
365+ if req .Root != nil {
366+ root = * req .Root
367+ }
368+ var selector datamodel.Node
369+ if req .Selector != nil {
370+ selector = * req .Selector
371+ }
372+ requests [id ] = newRequest (id , root , selector , graphsync .Priority (req .Priority ), req .Cancel , req .Update , nil )
350373 }
351374
352375 responses := make (map [graphsync.RequestID ]GraphSyncResponse , len (ibm .Responses ))
@@ -400,7 +423,7 @@ func (mh *MessageHandler) newMessageFromProtoV11(pbm *pb.Message) (GraphSyncMess
400423 }
401424 }
402425
403- var selector ipld .Node
426+ var selector datamodel .Node
404427 if ! req .Cancel && ! req .Update {
405428 selector , err = ipldutil .DecodeNode (req .Selector )
406429 if err != nil {
@@ -477,7 +500,7 @@ func (mh *MessageHandler) newMessageFromProtoV1(p peer.ID, pbm *pb.Message_V1_0_
477500 }
478501 }
479502
480- var selector ipld .Node
503+ var selector datamodel .Node
481504 if ! req .Cancel && ! req .Update {
482505 selector , err = ipldutil .DecodeNode (req .Selector )
483506 if err != nil {
0 commit comments