mirror of
https://github.com/ipfs/kubo.git
synced 2026-02-23 11:27:42 +08:00
82 lines
1.6 KiB
Go
82 lines
1.6 KiB
Go
package message
|
|
|
|
import (
|
|
"errors"
|
|
|
|
netmsg "github.com/jbenet/go-ipfs/net/message"
|
|
|
|
blocks "github.com/jbenet/go-ipfs/blocks"
|
|
nm "github.com/jbenet/go-ipfs/net/message"
|
|
peer "github.com/jbenet/go-ipfs/peer"
|
|
u "github.com/jbenet/go-ipfs/util"
|
|
)
|
|
|
|
type BitSwapMessage interface {
|
|
Wantlist() []u.Key
|
|
Blocks() []blocks.Block
|
|
AppendWanted(k u.Key)
|
|
AppendBlock(b *blocks.Block)
|
|
Exportable
|
|
}
|
|
|
|
type Exportable interface {
|
|
ToProto() *PBMessage
|
|
ToNet(p *peer.Peer) (nm.NetMessage, error)
|
|
}
|
|
|
|
// message wraps a proto message for convenience
|
|
type message struct {
|
|
pb PBMessage
|
|
}
|
|
|
|
func newMessageFromProto(pb PBMessage) *message {
|
|
return &message{pb: pb}
|
|
}
|
|
|
|
func New() *message {
|
|
return new(message)
|
|
}
|
|
|
|
// TODO(brian): convert these into keys
|
|
func (m *message) Wantlist() []u.Key {
|
|
wl := make([]u.Key, len(m.pb.Wantlist))
|
|
for _, str := range m.pb.Wantlist {
|
|
wl = append(wl, u.Key(str))
|
|
}
|
|
return wl
|
|
}
|
|
|
|
// TODO(brian): convert these into blocks
|
|
func (m *message) Blocks() []blocks.Block {
|
|
bs := make([]blocks.Block, len(m.pb.Blocks))
|
|
for _, data := range m.pb.Blocks {
|
|
b, err := blocks.NewBlock(data)
|
|
if err != nil {
|
|
continue
|
|
}
|
|
bs = append(bs, *b)
|
|
}
|
|
return bs
|
|
}
|
|
|
|
func (m *message) AppendWanted(k u.Key) {
|
|
m.pb.Wantlist = append(m.pb.Wantlist, string(k))
|
|
}
|
|
|
|
func (m *message) AppendBlock(b *blocks.Block) {
|
|
m.pb.Blocks = append(m.pb.Blocks, b.Data)
|
|
}
|
|
|
|
func FromNet(nmsg netmsg.NetMessage) (BitSwapMessage, error) {
|
|
return nil, errors.New("TODO implement")
|
|
}
|
|
|
|
func (m *message) ToProto() *PBMessage {
|
|
cp := m.pb
|
|
return &cp
|
|
}
|
|
|
|
func (m *message) ToNet(p *peer.Peer) (nm.NetMessage, error) {
|
|
return nm.FromObject(p, m.ToProto())
|
|
}
|