dht_pb

package
v0.0.12 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 29, 2024 License: MIT Imports: 19 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	ErrInvalidLengthDht        = fmt.Errorf("proto: negative length found during unmarshaling")
	ErrIntOverflowDht          = fmt.Errorf("proto: integer overflow")
	ErrUnexpectedEndOfGroupDht = fmt.Errorf("proto: unexpected end of group")
)
View Source
var Message_ConnectionType_name = map[int32]string{
	0: "NOT_CONNECTED",
	1: "CONNECTED",
	2: "CAN_CONNECT",
	3: "CANNOT_CONNECT",
}
View Source
var Message_ConnectionType_value = map[string]int32{
	"NOT_CONNECTED":  0,
	"CONNECTED":      1,
	"CAN_CONNECT":    2,
	"CANNOT_CONNECT": 3,
}
View Source
var Message_MessageType_name = map[int32]string{
	0: "PUT_VALUE",
	1: "GET_VALUE",
	2: "ADD_PROVIDER",
	3: "GET_PROVIDERS",
	4: "FIND_NODE",
	5: "PING",
}
View Source
var Message_MessageType_value = map[string]int32{
	"PUT_VALUE":     0,
	"GET_VALUE":     1,
	"ADD_PROVIDER":  2,
	"GET_PROVIDERS": 3,
	"FIND_NODE":     4,
	"PING":          5,
}

Functions

func Connectedness

Connectedness 函数返回与 Message_ConnectionType 关联的 network.Connectedness。

func PBPeerToPeerInfo

func PBPeerToPeerInfo(pbp Message_Peer) peer.AddrInfo

PBPeerToPeerInfo 将 *Message_Peer 转换为其 peer.AddrInfo 对应项

func PBPeersToPeerInfos

func PBPeersToPeerInfos(pbps []Message_Peer) []*peer.AddrInfo

PBPeersToPeerInfos 将给定的 []*Message_Peer 转换为 []peer.AddrInfo 无效的地址将被静默忽略。

Types

type Message

type Message struct {
	ClosestPeers *Message_ClosestPeers `protobuf:"bytes,11,opt,name=closestPeers,proto3" json:"closestPeers,omitempty"`
	// 定义它是什么类型的消息。
	Type Message_MessageType `protobuf:"varint,1,opt,name=type,proto3,enum=dht.pb.Message_MessageType" json:"type,omitempty"`
	// 定义此查询/响应属于哪个珊瑚簇级别。
	// 如果我们将来想实现珊瑚的簇环。
	ClusterLevelRaw int32 `protobuf:"varint,10,opt,name=clusterLevelRaw,proto3" json:"clusterLevelRaw,omitempty"`
	// 用于指定与该消息关联的密钥。
	// PUT_VALUE, GET_VALUE, ADD_PROVIDER, GET_PROVIDERS
	Key []byte `protobuf:"bytes,2,opt,name=key,proto3" json:"key,omitempty"`
	// 用于传输附加值
	Value []byte `protobuf:"bytes,12,opt,name=value,proto3" json:"value,omitempty"`
	// 用于返回一个值
	// PUT_VALUE, GET_VALUE
	Record *pb.Record `protobuf:"bytes,3,opt,name=record,proto3" json:"record,omitempty"`
	// 用于返回更接近查询中的键的对等点
	// GET_VALUE, GET_PROVIDERS, FIND_NODE
	CloserPeers []Message_Peer `protobuf:"bytes,8,rep,name=closerPeers,proto3" json:"closerPeers"`
	// 用于返回Provider
	// GET_VALUE, ADD_PROVIDER, GET_PROVIDERS
	ProviderPeers        []Message_Peer `protobuf:"bytes,9,rep,name=providerPeers,proto3" json:"providerPeers"`
	XXX_NoUnkeyedLiteral struct{}       `json:"-"`
	XXX_unrecognized     []byte         `json:"-"`
	XXX_sizecache        int32          `json:"-"`
}

func NewMessage

func NewMessage(typ Message_MessageType, key, value []byte, level int) *Message

NewMessage 构造一个具有给定类型、键和级别的新的 DHT 消息

func (*Message) Descriptor

func (*Message) Descriptor() ([]byte, []int)

func (*Message) GetCloserPeers

func (m *Message) GetCloserPeers() []Message_Peer

func (*Message) GetClosestPeers

func (m *Message) GetClosestPeers() *Message_ClosestPeers

func (*Message) GetClusterLevel

func (m *Message) GetClusterLevel() int

GetClusterLevel 获取并调整消息中的集群级别。 需要进行 +/- 1 的调整以区分有效的第一级 (1) 和默认的 "无值" 的 protobuf 行为 (0)。

func (*Message) GetClusterLevelRaw

func (m *Message) GetClusterLevelRaw() int32

func (*Message) GetKey

func (m *Message) GetKey() []byte

func (*Message) GetProviderPeers

func (m *Message) GetProviderPeers() []Message_Peer

func (*Message) GetRecord

func (m *Message) GetRecord() *pb.Record

func (*Message) GetType

func (m *Message) GetType() Message_MessageType

func (*Message) GetValue

func (m *Message) GetValue() []byte

func (*Message) Marshal

func (m *Message) Marshal() (dAtA []byte, err error)

func (*Message) MarshalTo

func (m *Message) MarshalTo(dAtA []byte) (int, error)

func (*Message) MarshalToSizedBuffer

func (m *Message) MarshalToSizedBuffer(dAtA []byte) (int, error)

func (*Message) ProtoMessage

func (*Message) ProtoMessage()

func (*Message) Reset

func (m *Message) Reset()

func (*Message) SetClusterLevel

func (m *Message) SetClusterLevel(level int)

SetClusterLevel 调整并设置消息中的集群级别。 需要进行 +/- 1 的调整以区分有效的第一级 (1) 和默认的 "无值" 的 protobuf 行为 (0)。

func (*Message) Size

func (m *Message) Size() (n int)

func (*Message) String

func (m *Message) String() string

func (*Message) Unmarshal

func (m *Message) Unmarshal(dAtA []byte) error

func (*Message) XXX_DiscardUnknown

func (m *Message) XXX_DiscardUnknown()

func (*Message) XXX_Marshal

func (m *Message) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)

func (*Message) XXX_Merge

func (m *Message) XXX_Merge(src proto.Message)

func (*Message) XXX_Size

func (m *Message) XXX_Size() int

func (*Message) XXX_Unmarshal

func (m *Message) XXX_Unmarshal(b []byte) error

type MessageSender

type MessageSender interface {
	// SendRequest 向对等方发送消息并等待其响应
	SendRequest(ctx context.Context, p peer.ID, pmes *Message) (*Message, error)
	// SendMessage 向对等方发送消息而不等待响应
	SendMessage(ctx context.Context, p peer.ID, pmes *Message) error
}

MessageSender 处理向给定对等方发送有线协议消息

type MessageSenderWithDisconnect

type MessageSenderWithDisconnect interface {
	MessageSender

	OnDisconnect(context.Context, peer.ID)
}

type Message_ClosestPeers

type Message_ClosestPeers struct {
	Self                 []byte   `protobuf:"bytes,1,opt,name=self,proto3" json:"self,omitempty"`
	Mode                 int32    `protobuf:"varint,2,opt,name=mode,proto3" json:"mode,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

新增的 ClosestPeers 数据结构,用于节点发现时握手

func (*Message_ClosestPeers) Descriptor

func (*Message_ClosestPeers) Descriptor() ([]byte, []int)

func (*Message_ClosestPeers) GetMode

func (m *Message_ClosestPeers) GetMode() int32

func (*Message_ClosestPeers) GetSelf

func (m *Message_ClosestPeers) GetSelf() []byte

func (*Message_ClosestPeers) Marshal

func (m *Message_ClosestPeers) Marshal() (dAtA []byte, err error)

func (*Message_ClosestPeers) MarshalTo

func (m *Message_ClosestPeers) MarshalTo(dAtA []byte) (int, error)

func (*Message_ClosestPeers) MarshalToSizedBuffer

func (m *Message_ClosestPeers) MarshalToSizedBuffer(dAtA []byte) (int, error)

func (*Message_ClosestPeers) ProtoMessage

func (*Message_ClosestPeers) ProtoMessage()

func (*Message_ClosestPeers) Reset

func (m *Message_ClosestPeers) Reset()

func (*Message_ClosestPeers) Size

func (m *Message_ClosestPeers) Size() (n int)

func (*Message_ClosestPeers) String

func (m *Message_ClosestPeers) String() string

func (*Message_ClosestPeers) Unmarshal

func (m *Message_ClosestPeers) Unmarshal(dAtA []byte) error

func (*Message_ClosestPeers) XXX_DiscardUnknown

func (m *Message_ClosestPeers) XXX_DiscardUnknown()

func (*Message_ClosestPeers) XXX_Marshal

func (m *Message_ClosestPeers) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)

func (*Message_ClosestPeers) XXX_Merge

func (m *Message_ClosestPeers) XXX_Merge(src proto.Message)

func (*Message_ClosestPeers) XXX_Size

func (m *Message_ClosestPeers) XXX_Size() int

func (*Message_ClosestPeers) XXX_Unmarshal

func (m *Message_ClosestPeers) XXX_Unmarshal(b []byte) error

type Message_ConnectionType

type Message_ConnectionType int32
const (
	// 发送方没有与对等方的连接,并且没有额外信息(默认)
	Message_NOT_CONNECTED Message_ConnectionType = 0
	// 发送者与对等方有实时连接
	Message_CONNECTED Message_ConnectionType = 1
	// 发件人最近连接到对等方
	Message_CAN_CONNECT Message_ConnectionType = 2
	// 发件人最近多次尝试连接对等方但连接失败
	// ("try" here is loose, but this should signal "made strong effort, failed")
	Message_CANNOT_CONNECT Message_ConnectionType = 3
)

func ConnectionType

ConnectionType 返回与 network.Connectedness 关联的 Message_ConnectionType。

func (Message_ConnectionType) EnumDescriptor

func (Message_ConnectionType) EnumDescriptor() ([]byte, []int)

func (Message_ConnectionType) String

func (x Message_ConnectionType) String() string

type Message_MessageType

type Message_MessageType int32
const (
	Message_PUT_VALUE     Message_MessageType = 0
	Message_GET_VALUE     Message_MessageType = 1
	Message_ADD_PROVIDER  Message_MessageType = 2
	Message_GET_PROVIDERS Message_MessageType = 3
	Message_FIND_NODE     Message_MessageType = 4
	Message_PING          Message_MessageType = 5
)

func (Message_MessageType) EnumDescriptor

func (Message_MessageType) EnumDescriptor() ([]byte, []int)

func (Message_MessageType) String

func (x Message_MessageType) String() string

type Message_Peer

type Message_Peer struct {
	// 给定对等点的 ID。
	Id byteString `protobuf:"bytes,1,opt,name=id,proto3,customtype=byteString" json:"id"`
	// 给定对等点的多地址
	Addrs [][]byte `protobuf:"bytes,2,rep,name=addrs,proto3" json:"addrs,omitempty"`
	// 用于向对等方表明发送方的连接能力
	Connection           Message_ConnectionType `protobuf:"varint,3,opt,name=connection,proto3,enum=dht.pb.Message_ConnectionType" json:"connection,omitempty"`
	XXX_NoUnkeyedLiteral struct{}               `json:"-"`
	XXX_unrecognized     []byte                 `json:"-"`
	XXX_sizecache        int32                  `json:"-"`
}

func PeerInfosToPBPeers

func PeerInfosToPBPeers(n network.Network, peers []peer.AddrInfo) []Message_Peer

PeerInfosToPBPeers 将给定的 []peer.AddrInfo 转换为 []*Message_Peer,可以写入消息并发送出去。 除了执行 PeersToPBPeers 的操作外,此函数还使用给定的 network.Network 设置 ConnectionType。

func PeerRoutingInfosToPBPeers

func PeerRoutingInfosToPBPeers(peers []PeerRoutingInfo) []Message_Peer

PeerRoutingInfosToPBPeers 将给定的 []PeerRoutingInfo 转换为 []Message_Peer

func RawPeerInfosToPBPeers

func RawPeerInfosToPBPeers(peers []peer.AddrInfo) []Message_Peer

RawPeerInfosToPBPeers 将一组 Peers 转换为一组 *Message_Peer,准备发送出去

func (*Message_Peer) Addresses

func (m *Message_Peer) Addresses() []ma.Multiaddr

Addresses 返回与 Message_Peer 条目关联的 multiaddr

func (*Message_Peer) Descriptor

func (*Message_Peer) Descriptor() ([]byte, []int)

func (*Message_Peer) GetAddrs

func (m *Message_Peer) GetAddrs() [][]byte

func (*Message_Peer) GetConnection

func (m *Message_Peer) GetConnection() Message_ConnectionType

func (*Message_Peer) Marshal

func (m *Message_Peer) Marshal() (dAtA []byte, err error)

func (*Message_Peer) MarshalTo

func (m *Message_Peer) MarshalTo(dAtA []byte) (int, error)

func (*Message_Peer) MarshalToSizedBuffer

func (m *Message_Peer) MarshalToSizedBuffer(dAtA []byte) (int, error)

func (*Message_Peer) ProtoMessage

func (*Message_Peer) ProtoMessage()

func (*Message_Peer) Reset

func (m *Message_Peer) Reset()

func (*Message_Peer) Size

func (m *Message_Peer) Size() (n int)

func (*Message_Peer) String

func (m *Message_Peer) String() string

func (*Message_Peer) Unmarshal

func (m *Message_Peer) Unmarshal(dAtA []byte) error

func (*Message_Peer) XXX_DiscardUnknown

func (m *Message_Peer) XXX_DiscardUnknown()

func (*Message_Peer) XXX_Marshal

func (m *Message_Peer) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)

func (*Message_Peer) XXX_Merge

func (m *Message_Peer) XXX_Merge(src proto.Message)

func (*Message_Peer) XXX_Size

func (m *Message_Peer) XXX_Size() int

func (*Message_Peer) XXX_Unmarshal

func (m *Message_Peer) XXX_Unmarshal(b []byte) error

type PeerRoutingInfo

type PeerRoutingInfo struct {
	peer.AddrInfo
	network.Connectedness
}

PeerRoutingInfo 结构体定义了对等节点的路由信息

type ProtocolMessenger

type ProtocolMessenger struct {
	// contains filtered or unexported fields
}

ProtocolMessenger 可用于向对等方发送 DHT 消息并处理他们的响应。 这将有线协议格式与 DHT 协议实现和routing.Routing 接口的实现解耦。

注意:ProtocolMessenger 的 MessageSender 仍然需要处理一些有线协议细节,例如使用 varint 描述的 protobuf

func NewProtocolMessenger

func NewProtocolMessenger(msgSender MessageSender, opts ...ProtocolMessengerOption) (*ProtocolMessenger, error)

NewProtocolMessenger 创建一个新的 ProtocolMessenger,用于向对等方发送 DHT 消息并处理他们的响应。

func (*ProtocolMessenger) GetClosestPeers

func (pm *ProtocolMessenger) GetClosestPeers(ctx context.Context, p peer.ID, id peer.ID, value []byte) (closerPeers []*peer.AddrInfo, err error)

GetClosestPeers 要求对等点返回 XOR 空间中最接近 id 的 K(DHT 范围参数)DHT 服务器对等点 注意:如果peer碰巧知道另一个peerID与给定id完全匹配的peer,它将返回该peer,即使该peer不是DHT服务器节点。

func (*ProtocolMessenger) GetProviders

func (pm *ProtocolMessenger) GetProviders(ctx context.Context, p peer.ID, key multihash.Multihash) (provs []*peer.AddrInfo, closerPeers []*peer.AddrInfo, err error)

GetProviders 向对等方询问其所知道的给定密钥的提供者。 还返回与该键最接近的 K 个对等点,如 GetClosestPeers 中所述。

func (*ProtocolMessenger) GetValue

func (pm *ProtocolMessenger) GetValue(ctx context.Context, p peer.ID, key string) (record *recpb.Record, closerPeers []*peer.AddrInfo, err error)

GetValue 向对等方询问与给定键对应的值。 还返回与该键最接近的 K 个对等点,如 GetClosestPeers 中所述。

func (*ProtocolMessenger) Ping

func (pm *ProtocolMessenger) Ping(ctx context.Context, p peer.ID) (err error)

Ping 向传递的对等方发送 ping 消息并等待响应。

func (*ProtocolMessenger) PutProvider

func (pm *ProtocolMessenger) PutProvider(ctx context.Context, p peer.ID, key multihash.Multihash, host host.Host) (err error)

PutProvider 要求对等方存储我们是给定密钥的提供者。

func (*ProtocolMessenger) PutValue

func (pm *ProtocolMessenger) PutValue(ctx context.Context, p peer.ID, rec *recpb.Record) (err error)

PutValue 要求对等方存储给定的键/值对。

type ProtocolMessengerOption

type ProtocolMessengerOption func(*ProtocolMessenger) error

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL