vpn

package
v0.0.0-...-249e25c Latest Latest
Warning

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

Go to latest
Published: Jun 10, 2025 License: AGPL-3.0 Imports: 42 Imported by: 0

Documentation

Index

Constants

View Source
const (
	Mcompress uint16 = 1 << iota
	Mencrypt
	Mbroadcast
	Mnorelay
	MstdFlags uint16 = Mencrypt
)

Variables

View Source
var (
	ErrDuplicateNetworkKey      = errors.New("duplicate network key")
	ErrNetworkNotFound          = errors.New("network not found")
	ErrPeerClosed               = errors.New("peer closed")
	ErrNetworkBindingsEmpty     = errors.New("network bindings empty")
	ErrDiscriminatorBounds      = errors.New("discriminator out of range")
	ErrNetworkOwnerMismatch     = errors.New("init and network certificate key mismatch")
	ErrNetworkAuthorityMismatch = errors.New("network ca mismatch")
	ErrNetworkIDBounds          = errors.New("network id out of range")
)

errors ...

Functions

func DisableCache

func DisableCache() func(*hashTableGetOptions)

DisableCache ...

func WithTimeout

func WithTimeout(d time.Duration) func(*hashTableGetOptions)

WithTimeout ...

Types

type Channel

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

Channel ...

func NewChannel

func NewChannel(ctx context.Context, network *Network, dstID kademlia.ID, dstPort uint16, srcPort uint16) *Channel

NewChannel ...

func (*Channel) Close

func (c *Channel) Close() error

Close ...

func (*Channel) Read

func (c *Channel) Read(b []byte) (int, error)

Read ...

func (*Channel) Write

func (c *Channel) Write(b []byte) (int, error)

Write ...

type HashTable

type HashTable interface {
	Set(ctx context.Context, key *key.Key, salt, value []byte) (*HashTablePublisher, error)
	Get(ctx context.Context, key, salt []byte, options ...HashTableOption) (<-chan []byte, error)
}

HashTable ...

type HashTableOption

type HashTableOption func(*hashTableGetOptions)

HashTableOption ...

type HashTablePublisher

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

HashTablePublisher ...

func (*HashTablePublisher) Close

func (p *HashTablePublisher) Close()

Close ...

func (*HashTablePublisher) Update

func (p *HashTablePublisher) Update(v []byte)

Update ...

type HashTableStore

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

HashTableStore ...

type Host

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

Host ...

func New

func New(logger *zap.Logger, vnic *vnic.Host) (*Host, error)

New ...

func (*Host) AddNetwork

func (h *Host) AddNetwork(key []byte) (*Node, error)

AddNetwork ...

func (*Host) Node

func (h *Host) Node(key []byte) (*Node, bool)

Node ...

func (*Host) Nodes

func (h *Host) Nodes() []*Node

Nodes ...

func (*Host) NotifyNetwork

func (h *Host) NotifyNetwork(ch chan *Network)

NotifyNetwork ...

func (*Host) NotifyPeerNetwork

func (h *Host) NotifyPeerNetwork(ch chan PeerNetwork)

NotifyPeerNetwork ...

func (*Host) RemoveNetwork

func (h *Host) RemoveNetwork(key []byte) error

RemoveNetwork ...

func (*Host) StopNotifyingNetwork

func (h *Host) StopNotifyingNetwork(ch chan *Network)

StopNotifyingNetwork ...

func (*Host) VNIC

func (h *Host) VNIC() *vnic.Host

VNIC ...

type Message

type Message struct {
	Header  MessageHeader
	Body    []byte
	Trailer MessageTrailer
	// contains filtered or unexported fields
}

Message ...

func (*Message) ID

func (m *Message) ID() (id MessageID)

ID ...

func (*Message) Marshal

func (m *Message) Marshal(b []byte, host *vnic.Host) (n int, err error)

Marshal ...

func (Message) ShallowClone

func (m Message) ShallowClone() *Message

ShallowClone ...

func (*Message) Size

func (m *Message) Size() int

Size ...

func (*Message) SrcHostID

func (m *Message) SrcHostID() (id kademlia.ID)

SrcHostID ...

func (*Message) Unmarshal

func (m *Message) Unmarshal(b []byte) (n int, err error)

Unmarshal ...

func (*Message) Verify

func (m *Message) Verify(hop int) bool

Verify checks the integrity of a message with the signature at the given hop.

func (Message) WriteTo

func (m Message) WriteTo(w io.Writer, host *vnic.Host) (int64, error)

WriteTo ...

type MessageHandler

type MessageHandler interface {
	HandleMessage(m *Message) error
}

MessageHandler ...

func MessageHandlerFunc

func MessageHandlerFunc(fn func(*Message) error) MessageHandler

MessageHandlerFunc ...

type MessageHeader

type MessageHeader struct {
	DstID   kademlia.ID
	DstPort uint16
	SrcPort uint16
	Seq     uint16
	Length  uint16
	Flags   uint16
}

MessageHeader ...

func (MessageHeader) Marshal

func (m MessageHeader) Marshal(b []byte) (n int, err error)

Marshal ...

func (*MessageHeader) Unmarshal

func (m *MessageHeader) Unmarshal(b []byte) (n int, err error)

Unmarshal ...

type MessageID

type MessageID [2 + kademlia.IDLength]byte

MessageID ...

func (MessageID) String

func (m MessageID) String() string

String ...

type MessageTrailer

type MessageTrailer struct {
	Hops    int
	Entries []MessageTrailerEntry
}

MessageTrailer represents the messages path index 0 is the sender and subsequent indexes are hops

func (MessageTrailer) Contains

func (m MessageTrailer) Contains(hostID kademlia.ID) bool

Contains ...

func (*MessageTrailer) Marshal

func (m *MessageTrailer) Marshal(b []byte) (n int, err error)

Marshal ...

func (*MessageTrailer) Size

func (m *MessageTrailer) Size() int

Size ...

func (*MessageTrailer) Unmarshal

func (m *MessageTrailer) Unmarshal(b []byte) (n int, err error)

Unmarshal ...

type MessageTrailerEntry

type MessageTrailerEntry struct {
	Time      timeutil.Time
	HostID    kademlia.ID
	Signature []byte
}

MessageTrailerEntry represents a node in the message path

func (*MessageTrailerEntry) Marshal

func (m *MessageTrailerEntry) Marshal(b []byte) (n int, err error)

Marshal ...

func (*MessageTrailerEntry) Unmarshal

func (m *MessageTrailerEntry) Unmarshal(b []byte) (n int, err error)

Unmarshal ...

type Network

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

Network ...

func (*Network) AddPeer

func (n *Network) AddPeer(peer *vnic.Peer, srcPort, dstPort uint16)

AddPeer ...

func (*Network) Broadcast

func (n *Network) Broadcast(port, srcPort uint16, b []byte) error

Broadcast ...

func (*Network) BroadcastProto

func (n *Network) BroadcastProto(port, srcPort uint16, msg proto.Message) error

BroadcastProto ...

func (*Network) BroadcastProtoWithFlags

func (n *Network) BroadcastProtoWithFlags(port, srcPort uint16, msg proto.Message, f uint16) error

BroadcastProtoWithFlags ...

func (*Network) BroadcastWithFlags

func (n *Network) BroadcastWithFlags(port, srcPort uint16, b []byte, f uint16) error

BroadcastWithFlags ...

func (*Network) Close

func (n *Network) Close()

Close ...

func (*Network) Handler

func (n *Network) Handler(port uint16) MessageHandler

Handler ...

func (*Network) HasPeer

func (n *Network) HasPeer(id kademlia.ID) bool

HasPeer ...

func (*Network) Key

func (n *Network) Key() []byte

Key ...

func (*Network) ReleasePort

func (n *Network) ReleasePort(port uint16)

ReleasePort ...

func (*Network) RemoveHandler

func (n *Network) RemoveHandler(port uint16)

RemoveHandler ...

func (*Network) RemovePeer

func (n *Network) RemovePeer(id kademlia.ID)

RemovePeer ...

func (*Network) ReservePort

func (n *Network) ReservePort() (uint16, error)

ReservePort ...

func (*Network) Send

func (n *Network) Send(id kademlia.ID, port, srcPort uint16, b []byte) error

Send ...

func (*Network) SendProto

func (n *Network) SendProto(id kademlia.ID, port, srcPort uint16, msg proto.Message) error

SendProto ...

func (*Network) SendProtoWithFlags

func (n *Network) SendProtoWithFlags(id kademlia.ID, port, srcPort uint16, msg proto.Message, f uint16) error

SendProtoWithFlags ...

func (*Network) SendWithFlags

func (n *Network) SendWithFlags(id kademlia.ID, port, srcPort uint16, b []byte, f uint16) error

SendWithFlags ...

func (*Network) SetHandler

func (n *Network) SetHandler(port uint16, h MessageHandler) error

SetHandler ...

func (*Network) VNIC

func (n *Network) VNIC() *vnic.Host

VNIC ...

type Node

type Node struct {
	Host         *Host
	Network      *Network
	HashTable    HashTable
	PeerIndex    PeerIndex
	PeerExchange PeerExchange
}

Node ...

type PeerExchange

type PeerExchange interface {
	HandleMessage(msg *Message) error
	Connect(hostID kademlia.ID) (err error)
}

type PeerIndex

type PeerIndex interface {
	Publish(ctx context.Context, key, salt []byte, port uint16) error
	Search(ctx context.Context, key, salt []byte) (<-chan *PeerIndexHost, error)
}

PeerIndex ...

type PeerIndexHost

type PeerIndexHost struct {
	Timestamp timeutil.Time
	HostID    kademlia.ID
	Port      uint16
}

PeerIndexHost ...

type PeerNetwork

type PeerNetwork struct {
	Peer    *vnic.Peer
	Network *Network
}

PeerNetwork ...

Jump to

Keyboard shortcuts

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