dc

package
v0.1.7 Latest Latest
Warning

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

Go to latest
Published: Mar 5, 2026 License: Apache-2.0 Imports: 8 Imported by: 0

Documentation

Overview

Package dc manages Telegram datacenter connections.

Index

Constants

View Source
const DefaultDC = 2

DefaultDC is the fallback DC when unknown.

View Source
const ProbeTimeout = 5 * time.Second

ProbeTimeout is the timeout for each probe attempt.

Variables

View Source
var CDNDCs = map[int][]Addr{
	203: {
		{Network: "tcp4", Address: "91.105.192.100:443"},
	},
}

CDN/regional DC overrides for special DCs (200+).

View Source
var DefaultDCs = map[int][]Addr{
	1: {

		{Network: "tcp4", Address: "149.154.175.50:443"},

		{Network: "tcp4", Address: "149.154.175.58:443"},

		{Network: "tcp6", Address: "[2001:b28:f23d:f001::a]:443"},
	},
	2: {

		{Network: "tcp4", Address: "149.154.167.51:443"},
		{Network: "tcp4", Address: "95.161.76.100:443"},

		{Network: "tcp4", Address: "149.154.167.41:443"},

		{Network: "tcp6", Address: "[2001:67c:4e8:f002::a]:443"},
	},
	3: {

		{Network: "tcp4", Address: "149.154.175.100:443"},

		{Network: "tcp6", Address: "[2001:b28:f23d:f003::a]:443"},
	},
	4: {

		{Network: "tcp4", Address: "149.154.167.91:443"},

		{Network: "tcp4", Address: "149.154.167.92:443"},

		{Network: "tcp6", Address: "[2001:67c:4e8:f004::a]:443"},
	},
	5: {

		{Network: "tcp4", Address: "149.154.171.5:443"},

		{Network: "tcp4", Address: "91.108.56.156:443"},

		{Network: "tcp6", Address: "[2001:b28:f23f:f005::a]:443"},
	},
}

Default Telegram DC addresses. Merged from tdesktop source + live API for redundancy. tdesktop: https://github.com/telegramdesktop/tdesktop/blob/master/Telegram/SourceFiles/mtproto/mtproto_dc_options.cpp

Functions

func Init

func Init()

Init probes all DC addresses and sorts them by RTT. Should be called once at startup. Blocks until complete.

func SetProbeLogger

func SetProbeLogger(logger func(format string, args ...any))

SetProbeLogger sets the logger for probe output.

func SetProbeSocks5 added in v0.1.3

func SetProbeSocks5(addr string) error

SetProbeSocks5 sets the SOCKS5 proxy for DC probing.

Types

type Addr

type Addr struct {
	Network string // "tcp4" or "tcp6"
	Address string // "host:port"
}

Addr represents a datacenter address.

func DCAddresses

func DCAddresses(dc int) ([]Addr, bool)

DCAddresses returns addresses for a given DC. Negative DC IDs are media-only variants; we use the absolute value for lookup. Returns (addresses, true) if DC is known, (fallback addresses, false) if unknown.

func DCAddressesIPv4

func DCAddressesIPv4(dc int) ([]Addr, bool)

DCAddressesIPv4 returns only IPv4 addresses for a DC.

func DCAddressesIPv6

func DCAddressesIPv6(dc int) ([]Addr, bool)

DCAddressesIPv6 returns only IPv6 addresses for a DC.

func GetProbedAddresses

func GetProbedAddresses(dc int) ([]Addr, bool)

GetProbedAddresses returns addresses sorted by RTT for a DC. Falls back to default addresses if probing hasn't been done.

func (Addr) IP

func (a Addr) IP() net.IP

IP returns the IP address without port.

func (Addr) IsIPv6

func (a Addr) IsIPv6() bool

IsIPv6 returns true if this is an IPv6 address.

type DCProbeResult

type DCProbeResult struct {
	DCID    int
	Results []ProbeResult
}

DCProbeResult holds all probe results for a single DC.

type IPPreference

type IPPreference int

IPPreference controls which IP version to prefer.

const (
	PreferIPv4 IPPreference = iota
	PreferIPv6
	OnlyIPv4
	OnlyIPv6
)

type ProbeResult

type ProbeResult struct {
	Addr    Addr
	RTT     time.Duration
	Success bool
	Error   string
}

ProbeResult holds the result of probing a single address.

Jump to

Keyboard shortcuts

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