mirror of
https://github.com/libp2p/go-libp2p-core.git
synced 2025-03-15 11:10:08 +08:00
* add SignedEnvelope type * use struct for SignedEnvelope instead of exposing protobuf directly * doc comments for envelopes * tests for SignedEnvelopes * add helpers to make routing records for Host * fix doc comment * go fmt * add method to peerstore to retrieve signed routing records * update to match spec changes * just use nanoseconds * use proto3 & rename fields to match spec changes * use proto3 for routing records * make envelope fields private & validate on unmarshal * use buffer pool for envelope signatures * tests for RoutingState * go fmt * rename Equals -> Equal, add some comments * use test helpers * get rid of unsigned RoutingState struct, only expose SignedRoutingState * rm batching SignedRoutingStates accessor in peerstore the datastore peerstore implementation doesn't support batched reads, so it's no more efficient to get a bunch of states at once than it is to call SignedRoutingState multiple times. * whitespace * expose struct fields & remove accessors * use camelCase in protos for consistency * use multiformats uvarint for length-prefixes * remove payloadType check when unmarhaling * rm stray ref to golang/protobuf * define CertifiedAddrBook to avoid breaking API change * add events for updated addresses and routing state * remove SignedRoutingStateFromHost helper moving this to go-libp2p * add routing state records, extend peerstore API * fix: rebuild protos with new gogofaster generator * filter private addrs from signed routing records * envelope: use byte slices from pool; adjust interface. * move envelope to record package. * move protobuf files; adjust imports everywhere. * rename RoutingStateRecord -> PeerRecord also removes embedded reference to Envelope from the record, as that was confusing. as a result, the CertifiedAddrBook now accepts/returns record.SignedEnvelope instead of a specialized type. * hoist Seq from PeerRecord to SignedEnvelope * test that PeerRecords can't be signed by wrong key * commit go.sum * add Seq field to envelope signature * fix proto_path in Makefile * fix import ordering * comments for PeerRecord proto message also removes the seq field from PeerMessage proto, since it was moved to the SignedEnvelope * use Record type for envelope payloads * rename SignedEnvelope -> Envelope, unmarshal payload in ConsumeEnvelope * return buffer to pool before early return * doc comments * rename CertifiedAddrBook methods, update comments * cache unmarshalled Record payload inside Envelope * doc comments * store reflect.Type when registering Record * Revert "return buffer to pool before early return"8d8da386f2
misread this - unsigned will be nil if there's an error, so it was right the way it was * use a DefaultRecord for unregistered PayloadTypes instead of returning an error if we don't have a registered Record for a given PayloadType, we can have a catch-all DefaultRecord type that just preserves the original payload as a []byte * cleanup DefaultRecord code a bit - removes unused error return from blankRecordForPayloadType - just references instead of copying in DefaultRecord.UnmarshalRecord I figure this is likely safe, since we'll be unmarshalling from the payload of an Envelope, which shouldn't get altered after it's created. * use explicit payloadType in MakeEnvelopeWithRecord * Revert DefaultRecord commitsae3bc7bdfb
a26c845a76
* doc comments * move Seq field back to PeerRecord * make diffs optional in EvtLocalAddressesUpdated * more envelope tests * replace MakeEnvelope with record.Seal also: - add Domain and Codec fields to Record interface * fix import * add interface check * rename ProcessPeerRecord -> ConsumePeerRecord also, adds bool `accepted` return value * rename event field, add doc comment * peer record protobuf: fix field casing. * record protobuf: add docs and fix casing. * cleanup: group imports. * nit: split test/utils.go => test/{addrs,errors}.go. Co-authored-by: Raúl Kripalani <raul.kripalani@gmail.com>
83 lines
3.1 KiB
Go
83 lines
3.1 KiB
Go
package event
|
|
|
|
import (
|
|
"github.com/libp2p/go-libp2p-core/record"
|
|
ma "github.com/multiformats/go-multiaddr"
|
|
)
|
|
|
|
// AddrAction represents an action taken on one of a Host's listen addresses.
|
|
// It is used to add context to address change events in EvtLocalAddressesUpdated.
|
|
type AddrAction int
|
|
|
|
const (
|
|
// Unknown means that the event producer was unable to determine why the address
|
|
// is in the current state.
|
|
Unknown AddrAction = iota
|
|
|
|
// Added means that the address is new and was not present prior to the event.
|
|
Added
|
|
|
|
// Maintained means that the address was not altered between the current and
|
|
// previous states.
|
|
Maintained
|
|
|
|
// Removed means that the address was removed from the Host.
|
|
Removed
|
|
)
|
|
|
|
// UpdatedAddress is used in the EvtLocalAddressesUpdated event to convey
|
|
// address change information.
|
|
type UpdatedAddress struct {
|
|
// Address contains the address that was updated.
|
|
Address ma.Multiaddr
|
|
|
|
// Action indicates what action was taken on the address during the
|
|
// event. May be Unknown if the event producer cannot produce diffs.
|
|
Action AddrAction
|
|
}
|
|
|
|
// EvtLocalAddressesUpdated should be emitted when the set of listen addresses for
|
|
// the local host changes. This may happen for a number of reasons. For example,
|
|
// we may have opened a new relay connection, established a new NAT mapping via
|
|
// UPnP, or been informed of our observed address by another peer.
|
|
//
|
|
// EvtLocalAddressesUpdated contains a snapshot of the current listen addresses,
|
|
// and may also contain a diff between the current state and the previous state.
|
|
// If the event producer is capable of creating a diff, the Diffs field will be
|
|
// true, and event consumers can inspect the Action field of each UpdatedAddress
|
|
// to see how each address was modified.
|
|
//
|
|
// For example, the Action will tell you whether an address in
|
|
// the Current list was Added by the event producer, or was Maintained without
|
|
// changes. Addresses that were removed from the Host will have the AddrAction
|
|
// of Removed, and will be in the Removed list.
|
|
//
|
|
// If the event producer is not capable or producing diffs, the Diffs field will
|
|
// be false, the Removed list will always be empty, and the Action for each
|
|
// UpdatedAddress in the Current list will be Unknown.
|
|
type EvtLocalAddressesUpdated struct {
|
|
|
|
// Diffs indicates whether this event contains a diff of the Host's previous
|
|
// address set.
|
|
Diffs bool
|
|
|
|
// Current contains all current listen addresses for the Host.
|
|
// If Diffs == true, the Action field of each UpdatedAddress will tell
|
|
// you whether an address was Added, or was Maintained from the previous
|
|
// state.
|
|
Current []UpdatedAddress
|
|
|
|
// Removed contains addresses that were removed from the Host.
|
|
// This field is only set when Diffs == true.
|
|
Removed []UpdatedAddress
|
|
}
|
|
|
|
// EvtLocalPeerRoutingStateUpdated should be emitted when a new signed PeerRecord
|
|
// for the local peer has been produced. This will happen whenever the set of listen
|
|
// addresses changes.
|
|
type EvtLocalPeerRecordUpdated struct {
|
|
// Record contains the updated peer.PeerRecord, wrapped in a record.Envelope and
|
|
// signed by the Host's private key.
|
|
Record *record.Envelope
|
|
}
|