Direct proxy works

This commit is contained in:
9seconds
2019-09-04 10:19:01 +03:00
parent 07985cf418
commit 2492a47d0a
87 changed files with 1883 additions and 1447 deletions
+25
View File
@@ -0,0 +1,25 @@
package utils
import (
"net"
"github.com/juju/errors"
"github.com/9seconds/mtg/config"
)
func InitTCP(conn net.Conn) error {
tcpConn := conn.(*net.TCPConn)
if err := tcpConn.SetNoDelay(true); err != nil {
return errors.Annotate(err, "Cannot set NO_DELAY")
}
if err := tcpConn.SetReadBuffer(config.C.BufferSize.Read); err != nil {
return errors.Annotate(err, "Cannot set read buffer size")
}
if err := tcpConn.SetWriteBuffer(config.C.BufferSize.Write); err != nil {
return errors.Annotate(err, "Cannot set write buffer size")
}
return nil
}
-21
View File
@@ -1,21 +0,0 @@
package utils
import "io"
const readCurrentDataBufferSize = 1024 + 1 // + 1 because telegram operates with blocks mod 4
// ReadCurrentData reads all data from io.Reader which is ready to be read.
func ReadCurrentData(src io.Reader) (rv []byte, err error) {
buf := make([]byte, readCurrentDataBufferSize)
n := readCurrentDataBufferSize
for n == len(buf) {
n, err = src.Read(buf)
if err != nil {
return nil, err
}
rv = append(rv, buf[:n]...)
}
return rv, nil
}
+11
View File
@@ -0,0 +1,11 @@
package utils
import (
"crypto/aes"
"crypto/cipher"
)
func MakeStreamCipher(key, iv []byte) cipher.Stream {
block, _ := aes.NewCipher(key) // nolint: gosec
return cipher.NewCTR(block, iv)
}
-4
View File
@@ -1,15 +1,11 @@
package utils
// Uint24 is a replacement for the absent Go uint24 data type.
// This data type is little endian.
type Uint24 [3]byte
// ToUint24 converts number to Uint24.
func ToUint24(number uint32) Uint24 {
return Uint24{byte(number), byte(number >> 8), byte(number >> 16)}
}
// FromUint24 converts Uint24 to number.
func FromUint24(number Uint24) uint32 {
return uint32(number[0]) + (uint32(number[1]) << 8) + (uint32(number[2]) << 16)
}