// objectPut takes a format option, serializes bytes from stdin and updates the dag with that data func objectPut(n *core.IpfsNode, input io.Reader, encoding string, dataFieldEncoding string) (*Object, error) { data, err := ioutil.ReadAll(io.LimitReader(input, inputLimit+10)) if err != nil { return nil, err } if len(data) >= inputLimit { return nil, ErrObjectTooLarge } var dagnode *dag.Node switch getObjectEnc(encoding) { case objectEncodingJSON: node := new(Node) err = json.Unmarshal(data, node) if err != nil { return nil, err } // check that we have data in the Node to add // otherwise we will add the empty object without raising an error if NodeEmpty(node) { return nil, ErrEmptyNode } dagnode, err = deserializeNode(node, dataFieldEncoding) if err != nil { return nil, err } case objectEncodingProtobuf: dagnode, err = dag.DecodeProtobuf(data) case objectEncodingXML: node := new(Node) err = xml.Unmarshal(data, node) if err != nil { return nil, err } // check that we have data in the Node to add // otherwise we will add the empty object without raising an error if NodeEmpty(node) { return nil, ErrEmptyNode } dagnode, err = deserializeNode(node, dataFieldEncoding) if err != nil { return nil, err } default: return nil, ErrUnknownObjectEnc } if err != nil { return nil, err } _, err = n.DAG.Add(dagnode) if err != nil { return nil, err } return getOutput(dagnode) }
for i, dagnode := range dagnodes { output[i] = LsObject{ Hash: paths[i], Links: make([]LsLink, len(dagnode.Links())), } for j, link := range dagnode.Links() { var linkNode *merkledag.ProtoNode t := unixfspb.Data_DataType(-1) linkKey := link.Cid if ok, err := nd.Blockstore.Has(linkKey); ok && err == nil { b, err := nd.Blockstore.Get(linkKey) if err != nil { res.SetError(err, cmds.ErrNormal) return } linkNode, err = merkledag.DecodeProtobuf(b.RawData()) if err != nil { res.SetError(err, cmds.ErrNormal) return } } if linkNode == nil && resolve { nd, err := link.GetNode(req.Context(), nd.DAG) if err != nil { res.SetError(err, cmds.ErrNormal) return } pbnd, ok := nd.(*merkledag.ProtoNode) if !ok {