Documentation ¶
Overview ¶
Package transport contains different MTProto transport implementations.
Index ¶
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Codec ¶
type Codec interface { // WriteHeader sends protocol tag if needed. WriteHeader(w io.Writer) error // ReadHeader reads protocol tag if needed. ReadHeader(r io.Reader) error // Write encode to writer message from given buffer. Write(w io.Writer, b *bin.Buffer) error // Read fills buffer with received message. Read(r io.Reader, b *bin.Buffer) error }
Codec is MTProto transport protocol encoding abstraction.
type Conn ¶ added in v0.12.0
type Conn interface { Send(ctx context.Context, b *bin.Buffer) error Recv(ctx context.Context, b *bin.Buffer) error Close() error }
Conn is transport connection.
type DialFunc ¶
DialFunc is functional helper for Dialer.
Example ¶
package main import ( "context" "fmt" "time" "golang.org/x/net/proxy" "github.com/gotd/td/telegram" "github.com/gotd/td/telegram/dcs" "github.com/gotd/td/transport" ) func main() { // 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{Dialer: transport.DialFunc(proxy.Dial)}), }) _ = client.Run(ctx, func(ctx context.Context) error { fmt.Println("Started") return nil }) }
Output:
type Dialer ¶
type Dialer interface {
DialContext(ctx context.Context, network, address string) (net.Conn, error)
}
Dialer dials using a context.
Example ¶
ExampleDialer for socks5. Methods form https://stackoverflow.com/questions/59456936/socks5-proxy-client-with-context-support
package main import ( "context" "fmt" "time" "golang.org/x/net/proxy" "github.com/gotd/td/telegram" "github.com/gotd/td/telegram/dcs" ) func main() { // No error would be return. 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{Dialer: dc}), }) _ = client.Run(ctx, func(ctx context.Context) error { fmt.Println("Started") return nil }) }
Output:
type Server ¶
type Server struct {
// contains filtered or unexported fields
}
Server is a simple MTProto server.
func NewCustomServer ¶
NewCustomServer creates new MTProto server with custom transport codec.
func NewFullServer ¶ added in v0.12.0
NewFullServer creates new MTProto server with Full transport codec.
func NewIntermediateServer ¶
NewIntermediateServer creates new MTProto server with Intermediate transport codec.
type Transport ¶
type Transport struct {
// contains filtered or unexported fields
}
Transport is MTProto connection creator.
func Abridged ¶ added in v0.14.0
func Abridged() *Transport
Abridged creates Abridged transport.
See https://core.telegram.org/mtproto/mtproto-transports#abridged
func Full ¶
func Full() *Transport
Full creates Full transport.
See https://core.telegram.org/mtproto/mtproto-transports#full
func Intermediate ¶
func Intermediate() *Transport
Intermediate creates Intermediate transport.
See https://core.telegram.org/mtproto/mtproto-transports#intermediate
func NewTransport ¶ added in v0.12.0
NewTransport creates transport using user Codec constructor.
func PaddedIntermediate ¶ added in v0.14.0
func PaddedIntermediate() *Transport
PaddedIntermediate creates Padded intermediate transport.
See https://core.telegram.org/mtproto/mtproto-transports#padded-intermediate