diff --git a/client/middle.go b/client/middle.go index bbc7347..4f0be19 100644 --- a/client/middle.go +++ b/client/middle.go @@ -15,7 +15,7 @@ func MiddleInit(ctx context.Context, cancel context.CancelFunc, socket net.Conn, if err != nil { return nil, nil, err } - connStream := conn.(wrappers.WrapStreamReadWriteCloser) + connStream := conn.(wrappers.StreamReadWriteCloser) newConn := wrappers.NewMTProtoAbridged(connStream, opts) if opts.ConnectionType != mtproto.ConnectionTypeAbridged { diff --git a/proxy/proxy.go b/proxy/proxy.go index 182b980..f559f68 100644 --- a/proxy/proxy.go +++ b/proxy/proxy.go @@ -58,26 +58,26 @@ func (p *Proxy) accept(conn net.Conn) { log.Errorw("Cannot initialize client connection", "error", err) return } - defer client.(wrappers.WrapCloser).Close() + defer client.(io.Closer).Close() server, err := p.getTelegramConn(ctx, cancel, opts, connID) if err != nil { log.Errorw("Cannot initialize server connection", "error", err) return } - defer server.(wrappers.WrapCloser).Close() + defer server.(io.Closer).Close() wait := &sync.WaitGroup{} wait.Add(2) if p.conf.UseMiddleProxy() { - clientPacket := client.(wrappers.WrapPacketReadWriteCloser) - serverPacket := server.(wrappers.WrapPacketReadWriteCloser) + clientPacket := client.(wrappers.PacketReadWriteCloser) + serverPacket := server.(wrappers.PacketReadWriteCloser) go p.middlePipe(clientPacket, serverPacket, wait, &opts.ReadHacks) go p.middlePipe(serverPacket, clientPacket, wait, &opts.WriteHacks) } else { - clientStream := client.(wrappers.WrapStreamReadWriteCloser) - serverStream := server.(wrappers.WrapStreamReadWriteCloser) + clientStream := client.(wrappers.StreamReadWriteCloser) + serverStream := server.(wrappers.StreamReadWriteCloser) go p.directPipe(clientStream, serverStream, wait) go p.directPipe(serverStream, clientStream, wait) } @@ -104,9 +104,8 @@ func (p *Proxy) getTelegramConn(ctx context.Context, cancel context.CancelFunc, return packetConn, nil } -func (p *Proxy) middlePipe(src wrappers.WrapPacketReader, dst wrappers.WrapPacketWriter, wait *sync.WaitGroup, hacks *mtproto.Hacks) { +func (p *Proxy) middlePipe(src wrappers.PacketReader, dst wrappers.PacketWriter, wait *sync.WaitGroup, hacks *mtproto.Hacks) { defer wait.Done() - for { hacks.SimpleAck = false hacks.QuickAck = false diff --git a/telegram/dialer.go b/telegram/dialer.go index d710f38..fc70d64 100644 --- a/telegram/dialer.go +++ b/telegram/dialer.go @@ -30,14 +30,12 @@ func (t *tgDialer) dial(addr string) (net.Conn, error) { return conn, nil } -func (t *tgDialer) dialRWC(addr, connID string) (wrappers.WrapStreamReadWriteCloser, error) { +func (t *tgDialer) dialRWC(addr, connID string) (wrappers.StreamReadWriteCloser, error) { conn, err := t.dial(addr) if err != nil { return nil, err } - - tgConn := wrappers.NewConn(conn, connID, wrappers.ConnPurposeTelegram, - t.conf.PublicIPv4, t.conf.PublicIPv6) + tgConn := wrappers.NewConn(conn, connID, wrappers.ConnPurposeTelegram, t.conf.PublicIPv4, t.conf.PublicIPv6) return tgConn, nil } diff --git a/telegram/direct.go b/telegram/direct.go index 23ca66c..749aa07 100644 --- a/telegram/direct.go +++ b/telegram/direct.go @@ -32,7 +32,7 @@ type DirectTelegram struct { baseTelegram } -func (t *DirectTelegram) Dial(connID string, connOpts *mtproto.ConnectionOpts) (wrappers.WrapStreamReadWriteCloser, error) { +func (t *DirectTelegram) Dial(connID string, connOpts *mtproto.ConnectionOpts) (wrappers.StreamReadWriteCloser, error) { dc := connOpts.DC if dc < 0 { dc = -dc @@ -43,7 +43,7 @@ func (t *DirectTelegram) Dial(connID string, connOpts *mtproto.ConnectionOpts) ( return t.baseTelegram.dial(dc-1, connID, connOpts.ConnectionProto) } -func (t *DirectTelegram) Init(connOpts *mtproto.ConnectionOpts, conn wrappers.WrapStreamReadWriteCloser) (wrappers.Wrap, error) { +func (t *DirectTelegram) Init(connOpts *mtproto.ConnectionOpts, conn wrappers.StreamReadWriteCloser) (wrappers.Wrap, error) { obfs2, frame := obfuscated2.MakeTelegramObfuscated2Frame(connOpts) if _, err := conn.Write(frame); err != nil { diff --git a/telegram/middle.go b/telegram/middle.go index 5069e9a..b800860 100644 --- a/telegram/middle.go +++ b/telegram/middle.go @@ -19,7 +19,7 @@ type MiddleTelegram struct { conf *config.Config } -func (t *MiddleTelegram) Init(connOpts *mtproto.ConnectionOpts, conn wrappers.WrapStreamReadWriteCloser) (wrappers.Wrap, error) { +func (t *MiddleTelegram) Init(connOpts *mtproto.ConnectionOpts, conn wrappers.StreamReadWriteCloser) (wrappers.Wrap, error) { rpcNonceConn := wrappers.NewMTProtoFrame(conn, rpc.SeqNoNonce) rpcNonceReq, err := t.sendRPCNonceRequest(rpcNonceConn) @@ -46,7 +46,7 @@ func (t *MiddleTelegram) Init(connOpts *mtproto.ConnectionOpts, conn wrappers.Wr return wrappers.NewMTProtoProxy(frameConn, connOpts, t.conf.AdTag) } -func (t *MiddleTelegram) sendRPCNonceRequest(conn wrappers.WrapPacketWriter) (*rpc.NonceRequest, error) { +func (t *MiddleTelegram) sendRPCNonceRequest(conn wrappers.PacketWriter) (*rpc.NonceRequest, error) { rpcNonceReq, err := rpc.NewNonceRequest(t.proxySecret) if err != nil { return nil, errors.Annotate(err, "Cannot create RPC nonce request") @@ -58,7 +58,7 @@ func (t *MiddleTelegram) sendRPCNonceRequest(conn wrappers.WrapPacketWriter) (*r return rpcNonceReq, nil } -func (t *MiddleTelegram) receiveRPCNonceResponse(conn wrappers.WrapPacketReader, req *rpc.NonceRequest) (*rpc.NonceResponse, error) { +func (t *MiddleTelegram) receiveRPCNonceResponse(conn wrappers.PacketReader, req *rpc.NonceRequest) (*rpc.NonceResponse, error) { packet, err := conn.Read() if err != nil { return nil, errors.Annotate(err, "Cannot read RPC nonce response") @@ -75,7 +75,7 @@ func (t *MiddleTelegram) receiveRPCNonceResponse(conn wrappers.WrapPacketReader, return rpcNonceResp, nil } -func (t *MiddleTelegram) sendRPCHandshakeRequest(conn wrappers.WrapPacketWriter) (*rpc.HandshakeRequest, error) { +func (t *MiddleTelegram) sendRPCHandshakeRequest(conn wrappers.PacketWriter) (*rpc.HandshakeRequest, error) { req := rpc.NewHandshakeRequest() if _, err := conn.Write(req.Bytes()); err != nil { return nil, errors.Annotate(err, "Cannot send RPC handshake request") @@ -84,7 +84,7 @@ func (t *MiddleTelegram) sendRPCHandshakeRequest(conn wrappers.WrapPacketWriter) return req, nil } -func (t *MiddleTelegram) receiveRPCHandshakeResponse(conn wrappers.WrapPacketReader, req *rpc.HandshakeRequest) (*rpc.HandshakeResponse, error) { +func (t *MiddleTelegram) receiveRPCHandshakeResponse(conn wrappers.PacketReader, req *rpc.HandshakeRequest) (*rpc.HandshakeResponse, error) { packet, err := conn.Read() if err != nil { return nil, errors.Annotate(err, "Cannot read RPC handshake response") diff --git a/telegram/middle_caller.go b/telegram/middle_caller.go index c0d40a2..832430a 100644 --- a/telegram/middle_caller.go +++ b/telegram/middle_caller.go @@ -28,7 +28,7 @@ const ( tgUserAgent = "mtg" ) -var middleTelegramProxyConfigSplitter *regexp.Regexp +var middleTelegramProxyConfigSplitter = regexp.MustCompile(`\s+`) type middleTelegramCaller struct { baseTelegram @@ -38,7 +38,7 @@ type middleTelegramCaller struct { httpClient *http.Client } -func (t *middleTelegramCaller) Dial(connID string, connOpts *mtproto.ConnectionOpts) (wrappers.WrapStreamReadWriteCloser, error) { +func (t *middleTelegramCaller) Dial(connID string, connOpts *mtproto.ConnectionOpts) (wrappers.StreamReadWriteCloser, error) { dc := connOpts.DC if dc == 0 { dc = 1 @@ -150,7 +150,3 @@ func (t *middleTelegramCaller) call(url string) (*http.Response, error) { return t.httpClient.Do(req) } - -func init() { - middleTelegramProxyConfigSplitter = regexp.MustCompile(`\s+`) -} diff --git a/telegram/telegram.go b/telegram/telegram.go index a24531e..43f436d 100644 --- a/telegram/telegram.go +++ b/telegram/telegram.go @@ -10,8 +10,8 @@ import ( ) type Telegram interface { - Dial(string, *mtproto.ConnectionOpts) (wrappers.WrapStreamReadWriteCloser, error) - Init(*mtproto.ConnectionOpts, wrappers.WrapStreamReadWriteCloser) (wrappers.Wrap, error) + Dial(string, *mtproto.ConnectionOpts) (wrappers.StreamReadWriteCloser, error) + Init(*mtproto.ConnectionOpts, wrappers.StreamReadWriteCloser) (wrappers.Wrap, error) } type baseTelegram struct { @@ -21,7 +21,7 @@ type baseTelegram struct { v6Addresses map[int16][]string } -func (b *baseTelegram) dial(dcIdx int16, connID string, proto mtproto.ConnectionProtocol) (wrappers.WrapStreamReadWriteCloser, error) { +func (b *baseTelegram) dial(dcIdx int16, connID string, proto mtproto.ConnectionProtocol) (wrappers.StreamReadWriteCloser, error) { addrs := make([]string, 2) if proto&mtproto.ConnectionProtocolIPv6 != 0 { diff --git a/wrappers/blockcipher.go b/wrappers/blockcipher.go index 5283f90..b4348c2 100644 --- a/wrappers/blockcipher.go +++ b/wrappers/blockcipher.go @@ -13,7 +13,7 @@ import ( type BlockCipher struct { buf *bytes.Buffer - conn WrapStreamReadWriteCloser + conn StreamReadWriteCloser encryptor cipher.BlockMode decryptor cipher.BlockMode } @@ -88,7 +88,7 @@ func (b *BlockCipher) Close() error { return b.conn.Close() } -func NewBlockCipher(conn WrapStreamReadWriteCloser, encryptor, decryptor cipher.BlockMode) WrapStreamReadWriteCloser { +func NewBlockCipher(conn StreamReadWriteCloser, encryptor, decryptor cipher.BlockMode) StreamReadWriteCloser { return &BlockCipher{ buf: &bytes.Buffer{}, conn: conn, diff --git a/wrappers/conn.go b/wrappers/conn.go index 2a84941..f5484c6 100644 --- a/wrappers/conn.go +++ b/wrappers/conn.go @@ -96,7 +96,7 @@ func (c *Conn) LogError(msg string, data ...interface{}) { c.logger.Errorw(msg, data...) } -func NewConn(conn net.Conn, connID string, purpose ConnPurpose, publicIPv4, publicIPv6 net.IP) WrapStreamReadWriteCloser { +func NewConn(conn net.Conn, connID string, purpose ConnPurpose, publicIPv4, publicIPv6 net.IP) StreamReadWriteCloser { logger := zap.S().With( "connection_id", connID, "local_address", conn.LocalAddr(), diff --git a/wrappers/ctx.go b/wrappers/ctx.go index bc38211..0ea4af4 100644 --- a/wrappers/ctx.go +++ b/wrappers/ctx.go @@ -9,7 +9,7 @@ import ( type Ctx struct { cancel context.CancelFunc - conn WrapStreamReadWriteCloser + conn StreamReadWriteCloser ctx context.Context } @@ -67,7 +67,7 @@ func (c *Ctx) Close() error { return c.conn.Close() } -func NewCtx(ctx context.Context, cancel context.CancelFunc, conn WrapStreamReadWriteCloser) WrapStreamReadWriteCloser { +func NewCtx(ctx context.Context, cancel context.CancelFunc, conn StreamReadWriteCloser) StreamReadWriteCloser { return &Ctx{ ctx: ctx, cancel: cancel, diff --git a/wrappers/mtproto_abridged.go b/wrappers/mtproto_abridged.go index f1c1a5c..a844452 100644 --- a/wrappers/mtproto_abridged.go +++ b/wrappers/mtproto_abridged.go @@ -18,7 +18,7 @@ const ( ) type MTProtoAbridged struct { - conn WrapStreamReadWriteCloser + conn StreamReadWriteCloser opts *mtproto.ConnectionOpts readCounter uint32 @@ -156,7 +156,7 @@ func (m *MTProtoAbridged) Close() error { return m.conn.Close() } -func NewMTProtoAbridged(conn WrapStreamReadWriteCloser, opts *mtproto.ConnectionOpts) WrapPacketReadWriteCloser { +func NewMTProtoAbridged(conn StreamReadWriteCloser, opts *mtproto.ConnectionOpts) PacketReadWriteCloser { return &MTProtoAbridged{ conn: conn, opts: opts, diff --git a/wrappers/mtproto_cipher.go b/wrappers/mtproto_cipher.go index 71170dc..72dad3f 100644 --- a/wrappers/mtproto_cipher.go +++ b/wrappers/mtproto_cipher.go @@ -22,7 +22,7 @@ const ( var emptyIP = [4]byte{0x00, 0x00, 0x00, 0x00} -func NewMiddleProxyCipher(conn WrapStreamReadWriteCloser, req *rpc.NonceRequest, resp *rpc.NonceResponse, secret []byte) WrapStreamReadWriteCloser { +func NewMiddleProxyCipher(conn StreamReadWriteCloser, req *rpc.NonceRequest, resp *rpc.NonceResponse, secret []byte) StreamReadWriteCloser { localAddr := conn.LocalAddr() remoteAddr := conn.RemoteAddr() diff --git a/wrappers/mtproto_frame.go b/wrappers/mtproto_frame.go index d3eff6f..7ace6f8 100644 --- a/wrappers/mtproto_frame.go +++ b/wrappers/mtproto_frame.go @@ -20,7 +20,7 @@ const ( var mtprotoFramePadding = []byte{0x04, 0x00, 0x00, 0x00} type MTProtoFrame struct { - conn WrapStreamReadWriteCloser + conn StreamReadWriteCloser readSeqNo int32 writeSeqNo int32 } @@ -142,7 +142,7 @@ func (m *MTProtoFrame) Close() error { return m.conn.Close() } -func NewMTProtoFrame(conn WrapStreamReadWriteCloser, seqNo int32) WrapPacketReadWriteCloser { +func NewMTProtoFrame(conn StreamReadWriteCloser, seqNo int32) PacketReadWriteCloser { return &MTProtoFrame{ conn: conn, readSeqNo: seqNo, diff --git a/wrappers/mtproto_intermediate.go b/wrappers/mtproto_intermediate.go index 2605a71..d9ed753 100644 --- a/wrappers/mtproto_intermediate.go +++ b/wrappers/mtproto_intermediate.go @@ -13,7 +13,7 @@ import ( const mtprotoIntermediateQuickAckLength = 0x80000000 type MTProtoIntermediate struct { - conn WrapStreamReadWriteCloser + conn StreamReadWriteCloser opts *mtproto.ConnectionOpts readCounter uint32 @@ -111,7 +111,7 @@ func (m *MTProtoIntermediate) Close() error { return m.conn.Close() } -func NewMTProtoIntermediate(conn WrapStreamReadWriteCloser, opts *mtproto.ConnectionOpts) WrapPacketReadWriteCloser { +func NewMTProtoIntermediate(conn StreamReadWriteCloser, opts *mtproto.ConnectionOpts) PacketReadWriteCloser { return &MTProtoIntermediate{ conn: conn, opts: opts, diff --git a/wrappers/mtproto_proxy.go b/wrappers/mtproto_proxy.go index c8f1796..ea2552d 100644 --- a/wrappers/mtproto_proxy.go +++ b/wrappers/mtproto_proxy.go @@ -11,7 +11,7 @@ import ( ) type MTProtoProxy struct { - conn WrapPacketReadWriteCloser + conn PacketReadWriteCloser req *rpc.ProxyRequest readCounter uint32 @@ -129,7 +129,7 @@ func (m *MTProtoProxy) Close() error { return m.conn.Close() } -func NewMTProtoProxy(conn WrapPacketReadWriteCloser, connOpts *mtproto.ConnectionOpts, adTag []byte) (WrapPacketReadWriteCloser, error) { +func NewMTProtoProxy(conn PacketReadWriteCloser, connOpts *mtproto.ConnectionOpts, adTag []byte) (PacketReadWriteCloser, error) { req, err := rpc.NewProxyRequest(connOpts.ClientAddr, conn.LocalAddr(), connOpts, adTag) if err != nil { return nil, errors.Annotate(err, "Cannot create new RPC proxy request") diff --git a/wrappers/streamcipher.go b/wrappers/streamcipher.go index 1057d33..f7c6376 100644 --- a/wrappers/streamcipher.go +++ b/wrappers/streamcipher.go @@ -10,7 +10,7 @@ import ( type StreamCipher struct { encryptor cipher.Stream decryptor cipher.Stream - conn WrapStreamReadWriteCloser + conn StreamReadWriteCloser } func (s *StreamCipher) Read(p []byte) (int, error) { @@ -58,7 +58,7 @@ func (s *StreamCipher) Close() error { return s.conn.Close() } -func NewStreamCipher(conn WrapStreamReadWriteCloser, encryptor, decryptor cipher.Stream) WrapStreamReadWriteCloser { +func NewStreamCipher(conn StreamReadWriteCloser, encryptor, decryptor cipher.Stream) StreamReadWriteCloser { return &StreamCipher{ conn: conn, encryptor: encryptor, diff --git a/wrappers/wrap.go b/wrappers/wrap.go index 7ebe04c..05ba8ea 100644 --- a/wrappers/wrap.go +++ b/wrappers/wrap.go @@ -15,74 +15,74 @@ type Wrap interface { RemoteAddr() *net.TCPAddr } -type WrapWriter interface { +type Writer interface { io.Writer Wrap } -type WrapCloser interface { +type Closer interface { io.Closer Wrap } -type WrapWriteCloser interface { +type WriteCloser interface { io.Closer - WrapWriter + Writer } -type WrapStreamReader interface { +type StreamReader interface { io.Reader Wrap } -type WrapStreamReadCloser interface { +type StreamReadCloser interface { io.Closer - WrapStreamReader + StreamReader } -type WrapStreamReadWriter interface { +type StreamReadWriter interface { io.Writer - WrapStreamReader + StreamReader } -type WrapStreamWriteCloser interface { +type StreamWriteCloser interface { io.Closer io.Writer Wrap } -type WrapStreamReadWriteCloser interface { +type StreamReadWriteCloser interface { io.Closer - WrapStreamReadWriter + StreamReadWriter } -type WrapPacketReader interface { +type PacketReader interface { Read() ([]byte, error) Wrap } -type WrapPacketWriter interface { +type PacketWriter interface { io.Writer Wrap } -type WrapPacketReadWriter interface { +type PacketReadWriter interface { io.Writer - WrapPacketReader + PacketReader } -type WrapBlockReadCloser interface { +type BlockReadCloser interface { io.Closer - WrapPacketReader + PacketReader } -type WrapPacketWriteCloser interface { +type PacketWriteCloser interface { io.Writer io.Closer Wrap } -type WrapPacketReadWriteCloser interface { +type PacketReadWriteCloser interface { io.Closer - WrapPacketReadWriter + PacketReadWriter }