dcs

package
v0.40.0-rc.1 Latest Latest
Warning

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

Go to latest
Published: May 7, 2021 License: MIT Imports: 18 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.

func ProdDCs

func ProdDCs() []tg.DCOption

ProdDCs returns production DC list.

func StagingDCs

func StagingDCs() []tg.DCOption

StagingDCs returns staging DC list.

Types

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.PlainResolver(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.PlainResolver(dcs.PlainOptions{
			Dial: dc.DialContext,
		}),
	})

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

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
	// Network to use. Defaults to "tcp".
	Network string
	// 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, dcOptions []tg.DCOption) (transport.Conn, error)
	MediaOnly(ctx context.Context, dc int, dcOptions []tg.DCOption) (transport.Conn, error)
	CDN(ctx context.Context, dc int, dcOptions []tg.DCOption) (transport.Conn, error)
}

Resolver resolves DC and creates transport MTProto connection.

func MTProxyResolver

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

MTProxyResolver creates MTProxy obfuscated DC resolver.

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

func PlainResolver

func PlainResolver(opts PlainOptions) Resolver

PlainResolver creates plain DC resolver.

func WebsocketResolver added in v0.39.0

func WebsocketResolver(opts WebsocketOptions) Resolver

WebsocketResolver 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
	// Domain resolves connection URL by DC ID.
	Domain func(dc int) (string, error)
}

WebsocketOptions is Websocket resolver creation options.

Jump to

Keyboard shortcuts

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