dcs

package
v0.91.0 Latest Latest
Warning

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

Go to latest
Published: Dec 10, 2023 License: MIT Imports: 24 Imported by: 35

Documentation

Overview

Package dcs contains Telegram DCs list and some helpers.

Index

Examples

Constants

This section is empty.

Variables

This section is empty.

Functions

func FindDCs

func FindDCs(opts []tg.DCOption, dcID int, preferIPv6 bool) []tg.DCOption

FindDCs searches DCs candidates from given config.

func FindPrimaryDCs

func FindPrimaryDCs(opts []tg.DCOption, dcID int, preferIPv6 bool) []tg.DCOption

FindPrimaryDCs searches new primary DC from given config. Unlike FindDC, it filters CDNs and MediaOnly servers, returns error if not found.

Types

type DNSConfig added in v0.53.0

type DNSConfig struct {
	// Date field of HelpConfigSimple.
	Date int
	// Expires field of HelpConfigSimple.
	Expires int
	// Rules field of HelpConfigSimple.
	Rules []tg.AccessPointRule
}

DNSConfig is DC connection config obtained from DNS.

func ParseDNSConfig added in v0.53.0

func ParseDNSConfig(txt []string) (DNSConfig, error)

ParseDNSConfig parses tg.HelpConfigSimple from TXT response.

func (DNSConfig) Options added in v0.53.0

func (d DNSConfig) Options() (r []tg.DCOption)

Options returns DC options from this config.

type DialFunc added in v0.33.0

type DialFunc func(ctx context.Context, network, addr string) (net.Conn, error)

DialFunc connects to the address on the named network.

Example
package main

import (
	"context"
	"fmt"
	"time"

	"golang.org/x/net/proxy"

	"github.com/gotd/td/telegram"
	"github.com/gotd/td/telegram/dcs"
)

func main() {
	// Dial using proxy from environment.

	// Creating connection.
	ctx, cancel := context.WithTimeout(context.Background(), time.Second*5)
	defer cancel()
	client := telegram.NewClient(1, "appHash", telegram.Options{
		Resolver: dcs.Plain(dcs.PlainOptions{Dial: proxy.Dial}),
	})

	_ = client.Run(ctx, func(ctx context.Context) error {
		fmt.Println("Started")
		return nil
	})
}
Output:

Example (Dialer)
package main

import (
	"context"
	"fmt"
	"time"

	"golang.org/x/net/proxy"

	"github.com/gotd/td/telegram"
	"github.com/gotd/td/telegram/dcs"
)

func main() {
	// Dial using SOCKS5 proxy.

	sock5, _ := proxy.SOCKS5("tcp", "IP:PORT", &proxy.Auth{
		User:     "YOURUSERNAME",
		Password: "YOURPASSWORD",
	}, proxy.Direct)
	dc := sock5.(proxy.ContextDialer)

	// Creating connection.
	ctx, cancel := context.WithTimeout(context.Background(), time.Second*5)
	defer cancel()
	client := telegram.NewClient(1, "appHash", telegram.Options{
		Resolver: dcs.Plain(dcs.PlainOptions{
			Dial: dc.DialContext,
		}),
	})

	_ = client.Run(ctx, func(ctx context.Context) error {
		fmt.Println("Started")
		return nil
	})
}
Output:

type List added in v0.41.0

type List struct {
	Options []tg.DCOption
	Domains map[int]string
	Test    bool
}

List is a list of Telegram DC addresses and domains.

func Prod added in v0.41.0

func Prod() List

Prod returns production DC list.

func Staging deprecated added in v0.41.0

func Staging() List

Staging returns staging DC list.

Deprecated: Use Test().

func Test added in v0.51.0

func Test() List

Test returns test DC list.

func (List) Zero added in v0.41.0

func (d List) Zero() bool

Zero returns true if this List is zero value.

type MTProxyOptions

type MTProxyOptions struct {
	// Dial specifies the dial function for creating unencrypted TCP connections.
	// If Dial is nil, then the resolver dials using package net.
	Dial DialFunc
	// Network to use. Defaults to "tcp"
	Network string
	// Random source for MTProxy obfuscator.
	Rand io.Reader
}

MTProxyOptions is MTProxy resolver creation options.

type PlainOptions

type PlainOptions struct {
	// Protocol is the transport protocol to use. Defaults to intermediate.
	Protocol Protocol
	// Dial specifies the dial function for creating unencrypted TCP connections.
	// If Dial is nil, then the resolver dials using package net.
	Dial DialFunc
	// Random source for TCPObfuscated DCs.
	Rand io.Reader
	// Network to use. Defaults to "tcp".
	Network string
	// NoObfuscated denotes to filter out TCP Obfuscated Only DCs.
	NoObfuscated bool
	// PreferIPv6 gives IPv6 DCs higher precedence.
	// Default is to prefer IPv4 DCs over IPv6.
	PreferIPv6 bool
}

PlainOptions is plain resolver creation options.

type Protocol added in v0.33.0

type Protocol interface {
	Codec() transport.Codec
	Handshake(conn net.Conn) (transport.Conn, error)
}

Protocol is MTProto transport protocol.

See https://core.telegram.org/mtproto/mtproto-transports

type Resolver

type Resolver interface {
	Primary(ctx context.Context, dc int, list List) (transport.Conn, error)
	MediaOnly(ctx context.Context, dc int, list List) (transport.Conn, error)
	CDN(ctx context.Context, dc int, list List) (transport.Conn, error)
}

Resolver resolves DC and creates transport MTProto connection.

func DefaultResolver added in v0.41.0

func DefaultResolver() Resolver

DefaultResolver returns default DC resolver for current platform.

func MTProxy added in v0.41.0

func MTProxy(addr string, secret []byte, opts MTProxyOptions) (Resolver, error)

MTProxy creates MTProxy obfuscated DC resolver.

See https://core.telegram.org/mtproto/mtproto-transports#transport-obfuscation.

func Plain added in v0.41.0

func Plain(opts PlainOptions) Resolver

Plain creates plain DC resolver.

func Websocket added in v0.41.0

func Websocket(opts WebsocketOptions) Resolver

Websocket creates Websocket DC resolver.

See https://core.telegram.org/mtproto/transports#websocket.

type WebsocketOptions added in v0.39.0

type WebsocketOptions struct {
	// Dialer specifies the websocket dialer.
	// If Dialer is nil, then the resolver dials using websocket.DefaultDialer.
	DialOptions *websocket.DialOptions
	// Random source for MTProxy obfuscator.
	Rand io.Reader
}

WebsocketOptions is Websocket resolver creation options.

Jump to

Keyboard shortcuts

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