adnl

package
v1.16.0 Latest Latest
Warning

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

Go to latest
Published: Mar 5, 2026 License: MIT Imports: 23 Imported by: 57

Documentation

Index

Constants

View Source
const BasePayloadMTU = 1024
View Source
const HugePacketMaxSz = 1024*8 + 128
View Source
const MaxMTU = 1500 - 40 - 8 // max is for ipv6 over ethernet

Variables

View Source
var DefaultListener = func(addr string) (net.PacketConn, error) {
	lp, err := net.ListenPacket("udp", addr)
	if err != nil {
		return nil, err
	}

	if conn, ok := lp.(*net.UDPConn); ok {
		if err := conn.SetReadBuffer(DefaultUDPBufferSize); err != nil {
			Logger("[ADNL] failed to set read buffer:", err)
		}
		if err := conn.SetWriteBuffer(DefaultUDPBufferSize); err != nil {
			Logger("[ADNL] failed to set write buffer:", err)
		}
	}

	return NewSyncConn(lp, PacketsBufferSize), nil
}
View Source
var DefaultUDPBufferSize = 32 << 20
View Source
var ErrPacketBiggerThanMTU = fmt.Errorf("packet bigger than MTU")
View Source
var ErrPeerConnClosed = errors.New("peer connection was closed")
View Source
var ErrTooShortData = errors.New("too short data")
View Source
var Logger = func(v ...any) {}
View Source
var PacketsBufferSize = 128 * 1024

Functions

This section is empty.

Types

type ADNL

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

func (*ADNL) Answer

func (a *ADNL) Answer(ctx context.Context, queryID []byte, result tl.Serializable) error

func (*ADNL) Close

func (a *ADNL) Close()

func (*ADNL) GetAddressList

func (a *ADNL) GetAddressList() address.List

func (*ADNL) GetCloserCtx added in v1.11.0

func (a *ADNL) GetCloserCtx() context.Context

func (*ADNL) GetDisconnectHandler added in v1.9.3

func (a *ADNL) GetDisconnectHandler() func(addr string, key ed25519.PublicKey)

func (*ADNL) GetID added in v1.5.1

func (a *ADNL) GetID() []byte

func (*ADNL) GetPubKey added in v1.11.1

func (a *ADNL) GetPubKey() ed25519.PublicKey

func (*ADNL) GetQueryHandler added in v1.7.0

func (a *ADNL) GetQueryHandler() func(msg *MessageQuery) error

func (*ADNL) Ping added in v1.13.0

func (a *ADNL) Ping(ctx context.Context) (time.Duration, error)

func (*ADNL) Query

func (a *ADNL) Query(ctx context.Context, req, result tl.Serializable) error

func (*ADNL) Reinit added in v1.11.1

func (a *ADNL) Reinit()

func (*ADNL) RemoteAddr

func (a *ADNL) RemoteAddr() string

func (*ADNL) SendCustomMessage

func (a *ADNL) SendCustomMessage(_ context.Context, req tl.Serializable) error

func (*ADNL) SetAddresses

func (a *ADNL) SetAddresses(list address.List)

func (*ADNL) SetChannelReadyHandler

func (a *ADNL) SetChannelReadyHandler(handler func(ch *Channel))

func (*ADNL) SetCustomMessageHandler

func (a *ADNL) SetCustomMessageHandler(handler func(msg *MessageCustom) error)

func (*ADNL) SetDisconnectHandler

func (a *ADNL) SetDisconnectHandler(handler func(addr string, key ed25519.PublicKey))

func (*ADNL) SetQueryHandler

func (a *ADNL) SetQueryHandler(handler func(msg *MessageQuery) error)

type Channel

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

func (*Channel) SendCustomMessage

func (c *Channel) SendCustomMessage(ctx context.Context, req tl.Serializable) error

type CustomMessageHandler

type CustomMessageHandler func(msg *MessageCustom) error

type DisconnectHandler

type DisconnectHandler func(addr string, key ed25519.PublicKey)

type Gateway added in v1.6.0

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

func NewGateway added in v1.6.0

func NewGateway(key ed25519.PrivateKey) *Gateway

func NewGatewayWithNetManager added in v1.12.0

func NewGatewayWithNetManager(key ed25519.PrivateKey, reader NetManager) *Gateway

func (*Gateway) Close added in v1.6.0

func (g *Gateway) Close() error

func (*Gateway) GetActivePeers added in v1.11.1

func (g *Gateway) GetActivePeers() []Peer

func (*Gateway) GetAddressList added in v1.6.0

func (g *Gateway) GetAddressList() address.List

func (*Gateway) GetID added in v1.8.0

func (g *Gateway) GetID() []byte

func (*Gateway) RegisterClient added in v1.6.0

func (g *Gateway) RegisterClient(addr string, key ed25519.PublicKey) (Peer, error)

func (*Gateway) SetAddressList added in v1.12.0

func (g *Gateway) SetAddressList(addresses []*address.UDP)

func (*Gateway) SetConnectionHandler added in v1.6.0

func (g *Gateway) SetConnectionHandler(handler func(client Peer) error)

func (*Gateway) StartClient added in v1.6.0

func (g *Gateway) StartClient(listenThreads ...int) (err error)

func (*Gateway) StartServer added in v1.6.0

func (g *Gateway) StartServer(listenAddr string, listenThreads ...int) (err error)

type MessageAnswer

type MessageAnswer struct {
	ID   []byte `tl:"int256"`
	Data any    `tl:"bytes struct boxed"`
}

type MessageConfirmChannel

type MessageConfirmChannel struct {
	Key     []byte `tl:"int256"`
	PeerKey []byte `tl:"int256"`
	Date    int32  `tl:"int"`
}

type MessageCreateChannel

type MessageCreateChannel struct {
	Key  []byte `tl:"int256"`
	Date int32  `tl:"int"`
}

type MessageCustom

type MessageCustom struct {
	Data any `tl:"bytes struct boxed"`
}

type MessageNop

type MessageNop struct{}

type MessagePart

type MessagePart struct {
	Hash      []byte `tl:"int256"`
	TotalSize int32  `tl:"int"`
	Offset    int32  `tl:"int"`
	Data      []byte `tl:"bytes"`
}

type MessagePing

type MessagePing struct {
	Value int64 `tl:"long"`
}

type MessagePong

type MessagePong struct {
	Value int64 `tl:"long"`
}

type MessageQuery

type MessageQuery struct {
	ID   []byte `tl:"int256"`
	Data any    `tl:"bytes struct boxed"`
}

type MessageReinit

type MessageReinit struct {
	Date int32 `tl:"int"`
}

type MultiNetManager added in v1.12.0

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

func NewMultiNetReader added in v1.12.0

func NewMultiNetReader(conn net.PacketConn) *MultiNetManager

func (*MultiNetManager) Close added in v1.13.0

func (m *MultiNetManager) Close()

func (*MultiNetManager) CloseConnection added in v1.12.0

func (m *MultiNetManager) CloseConnection(gate *Gateway)

func (*MultiNetManager) Free added in v1.12.0

func (m *MultiNetManager) Free(p *UDPPacket)

func (*MultiNetManager) GetReaderChan added in v1.12.0

func (m *MultiNetManager) GetReaderChan(gate *Gateway) <-chan *UDPPacket

func (*MultiNetManager) InitConnection added in v1.12.0

func (m *MultiNetManager) InitConnection(gate *Gateway, addr string) error

func (*MultiNetManager) WritePacket added in v1.12.0

func (m *MultiNetManager) WritePacket(gate *Gateway, p []byte, addr net.Addr) (n int, err error)

type NetManager added in v1.12.0

type NetManager interface {
	Free(p *UDPPacket)
	GetReaderChan(gate *Gateway) <-chan *UDPPacket
	InitConnection(gate *Gateway, addr string) error
	CloseConnection(gate *Gateway)
	WritePacket(gate *Gateway, p []byte, addr net.Addr) (n int, err error)
	Close()
}

type PacketContent

type PacketContent struct {
	Rand1                       []byte
	From                        *keys.PublicKeyED25519
	FromIDShort                 []byte
	Messages                    []any
	Address                     *address.List
	PriorityAddress             *address.List
	Seqno                       *int64
	ConfirmSeqno                *int64
	RecvAddrListVersion         *int32
	RecvPriorityAddrListVersion *int32
	ReinitDate                  *int32
	DstReinitDate               *int32
	Signature                   []byte
	Rand2                       []byte
}

func (*PacketContent) Serialize

func (p *PacketContent) Serialize(buf *bytes.Buffer) (int, error)

type PacketWriter added in v1.11.0

type PacketWriter interface {
	Write(b []byte, deadline time.Time) (n int, err error)
	Close() error
}

type Peer added in v1.6.0

type Peer interface {
	SetCustomMessageHandler(handler func(msg *MessageCustom) error)
	SetQueryHandler(handler func(msg *MessageQuery) error)
	GetDisconnectHandler() func(addr string, key ed25519.PublicKey)
	SetDisconnectHandler(handler func(addr string, key ed25519.PublicKey))
	SendCustomMessage(ctx context.Context, req tl.Serializable) error
	Query(ctx context.Context, req, result tl.Serializable) error
	Answer(ctx context.Context, queryID []byte, result tl.Serializable) error
	Ping(ctx context.Context) (time.Duration, error)
	GetQueryHandler() func(msg *MessageQuery) error
	GetCloserCtx() context.Context
	SetAddresses(addresses address.List)
	RemoteAddr() string
	GetID() []byte
	GetPubKey() ed25519.PublicKey
	Reinit()
	Close()
}

type QueryHandler

type QueryHandler func(msg *MessageQuery) error

type SingleNetManager added in v1.12.0

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

func NewSingleNetReader added in v1.12.0

func NewSingleNetReader(connector func(addr string) (net.PacketConn, error)) *SingleNetManager

func (*SingleNetManager) Close added in v1.13.0

func (s *SingleNetManager) Close()

func (*SingleNetManager) CloseConnection added in v1.12.0

func (s *SingleNetManager) CloseConnection(gate *Gateway)

func (*SingleNetManager) Free added in v1.12.0

func (s *SingleNetManager) Free(p *UDPPacket)

func (*SingleNetManager) GetReaderChan added in v1.12.0

func (s *SingleNetManager) GetReaderChan(gate *Gateway) <-chan *UDPPacket

func (*SingleNetManager) InitConnection added in v1.12.0

func (s *SingleNetManager) InitConnection(gate *Gateway, addr string) error

func (*SingleNetManager) WritePacket added in v1.12.0

func (s *SingleNetManager) WritePacket(gate *Gateway, p []byte, addr net.Addr) (n int, err error)

type SyncConn added in v1.11.0

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

func NewSyncConn added in v1.11.0

func NewSyncConn(conn net.PacketConn, packetsBufSz int) *SyncConn

func (*SyncConn) Close added in v1.11.0

func (s *SyncConn) Close() error

func (*SyncConn) LocalAddr added in v1.11.0

func (s *SyncConn) LocalAddr() net.Addr

func (*SyncConn) ReadFrom added in v1.11.0

func (s *SyncConn) ReadFrom(p []byte) (n int, addr net.Addr, err error)

func (*SyncConn) SetDeadline added in v1.11.0

func (s *SyncConn) SetDeadline(t time.Time) error

func (*SyncConn) SetReadDeadline added in v1.11.0

func (s *SyncConn) SetReadDeadline(t time.Time) error

func (*SyncConn) SetWriteDeadline added in v1.11.0

func (s *SyncConn) SetWriteDeadline(t time.Time) error

func (*SyncConn) WriteTo added in v1.11.0

func (s *SyncConn) WriteTo(p []byte, addr net.Addr) (n int, err error)

type UDPPacket added in v1.12.0

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

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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