mirror of
https://github.com/ScuroNeko/mtg.git
synced 2026-08-31 20:54:02 +03:00
FILE / ScuroNeko/mtg
mtglib/internal/dc/init.go
Исходный файл и его история в репозитории.
78 lines
1.5 KiB
Go
78 lines
1.5 KiB
Go
package dc
|
|
|
|
import (
|
|
"context"
|
|
"net"
|
|
"time"
|
|
|
|
"github.com/9seconds/mtg/v2/essentials"
|
|
)
|
|
|
|
type preferIP uint8
|
|
|
|
const (
|
|
preferIPOnlyIPv4 preferIP = iota
|
|
preferIPOnlyIPv6
|
|
preferIPPreferIPv4
|
|
preferIPPreferIPv6
|
|
)
|
|
|
|
const (
|
|
// Default DC to connect to if not sure.
|
|
DefaultDC = 2
|
|
|
|
// How often should we request updates from
|
|
// https://core.telegram.org/getProxyConfig
|
|
PublicConfigUpdateEach = time.Hour
|
|
PublicConfigUpdateURLv4 = "https://core.telegram.org/getProxyConfig"
|
|
PublicConfigUpdateURLv6 = "https://core.telegram.org/getProxyConfigV6"
|
|
|
|
// How often should we extract hosts from Telegram using help.getConfig
|
|
// method.
|
|
OwnConfigUpdateEach = time.Hour
|
|
)
|
|
|
|
type Logger interface {
|
|
Info(msg string)
|
|
WarningError(msg string, err error)
|
|
}
|
|
|
|
type Updater interface {
|
|
Run(ctx context.Context)
|
|
}
|
|
|
|
// https://github.com/telegramdesktop/tdesktop/blob/master/Telegram/SourceFiles/mtproto/mtproto_dc_options.cpp#L30
|
|
var defaultDCAddrSet = (func() dcAddrSet {
|
|
addrSet := dcAddrSet{
|
|
v4: make(map[int][]Addr),
|
|
v6: make(map[int][]Addr),
|
|
}
|
|
|
|
for dcid, ips := range essentials.TelegramCoreAddresses {
|
|
for _, addr := range ips {
|
|
host, _, err := net.SplitHostPort(addr)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
ip := net.ParseIP(host)
|
|
if ip == nil {
|
|
panic(addr)
|
|
}
|
|
if ip.To4() == nil {
|
|
addrSet.v6[dcid] = append(addrSet.v6[dcid], Addr{
|
|
Network: "tcp6",
|
|
Address: addr,
|
|
})
|
|
} else {
|
|
addrSet.v4[dcid] = append(addrSet.v4[dcid], Addr{
|
|
Network: "tcp4",
|
|
Address: addr,
|
|
})
|
|
}
|
|
}
|
|
}
|
|
|
|
return addrSet
|
|
})()
|