mirror of
https://github.com/ScuroNeko/mtg.git
synced 2026-08-31 19:14:01 +03:00
Preliminary debug state
This commit is contained in:
@@ -1,12 +1,14 @@
|
||||
package wrappers
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"crypto/aes"
|
||||
"crypto/cipher"
|
||||
"fmt"
|
||||
"net"
|
||||
|
||||
"github.com/juju/errors"
|
||||
|
||||
"github.com/9seconds/mtg/utils"
|
||||
)
|
||||
|
||||
type BlockCipherReadWriteCloserWithAddr struct {
|
||||
@@ -19,16 +21,18 @@ type BlockCipherReadWriteCloserWithAddr struct {
|
||||
|
||||
func (c *BlockCipherReadWriteCloserWithAddr) Read(p []byte) (int, error) {
|
||||
return c.BufferedRead(p, func() error {
|
||||
buf := &bytes.Buffer{}
|
||||
for buf.Len()%aes.BlockSize != 0 || buf.Len() == 0 {
|
||||
n, err := c.conn.Read(p)
|
||||
var buf []byte
|
||||
|
||||
for len(buf) == 0 || len(buf)%aes.BlockSize != 0 {
|
||||
rv, err := utils.ReadCurrentData(c.conn)
|
||||
if err != nil {
|
||||
return errors.Annotate(err, "Cannot read from socket")
|
||||
}
|
||||
buf.Write(p[:n])
|
||||
buf = append(buf, rv...)
|
||||
}
|
||||
c.decryptor.CryptBlocks(buf.Bytes(), buf.Bytes())
|
||||
c.Buffer.Write(buf.Bytes())
|
||||
|
||||
c.decryptor.CryptBlocks(buf, buf)
|
||||
c.Buffer.Write(buf)
|
||||
|
||||
return nil
|
||||
})
|
||||
@@ -46,6 +50,7 @@ func (c *BlockCipherReadWriteCloserWithAddr) Write(p []byte) (int, error) {
|
||||
}
|
||||
|
||||
func (c *BlockCipherReadWriteCloserWithAddr) Close() error {
|
||||
fmt.Println("BlockCipherReadWriteCloserWithAddr closes", "sockid", c.SocketID(), "bufsize", c.Buffer.Len())
|
||||
return c.conn.Close()
|
||||
}
|
||||
|
||||
@@ -57,6 +62,10 @@ func (c *BlockCipherReadWriteCloserWithAddr) RemoteAddr() *net.TCPAddr {
|
||||
return c.conn.RemoteAddr()
|
||||
}
|
||||
|
||||
func (c *BlockCipherReadWriteCloserWithAddr) SocketID() string {
|
||||
return c.conn.SocketID()
|
||||
}
|
||||
|
||||
func NewBlockCipherRWC(conn ReadWriteCloserWithAddr, encryptor, decryptor cipher.BlockMode) ReadWriteCloserWithAddr {
|
||||
return &BlockCipherReadWriteCloserWithAddr{
|
||||
BufferedReader: NewBufferedReader(),
|
||||
|
||||
@@ -1,11 +1,19 @@
|
||||
package wrappers
|
||||
|
||||
import "bytes"
|
||||
import (
|
||||
"bytes"
|
||||
|
||||
"github.com/juju/errors"
|
||||
)
|
||||
|
||||
type BufferedReader struct {
|
||||
Buffer *bytes.Buffer
|
||||
}
|
||||
|
||||
var (
|
||||
BufferedReaderContinue = errors.New("Please continue reading")
|
||||
)
|
||||
|
||||
func (b *BufferedReader) BufferedRead(p []byte, callback func() error) (int, error) {
|
||||
if b.Buffer.Len() > 0 {
|
||||
return b.flush(p)
|
||||
@@ -17,7 +25,7 @@ func (b *BufferedReader) BufferedRead(p []byte, callback func() error) (int, err
|
||||
}
|
||||
|
||||
func (b *BufferedReader) flush(p []byte) (int, error) {
|
||||
if b.Buffer.Len() < len(p) {
|
||||
if b.Buffer.Len() <= len(p) {
|
||||
sizeToReturn := b.Buffer.Len()
|
||||
copy(p, b.Buffer.Bytes())
|
||||
b.Buffer.Reset()
|
||||
|
||||
@@ -56,6 +56,10 @@ func (c *CtxReadWriteCloserWithAddr) RemoteAddr() *net.TCPAddr {
|
||||
return c.conn.RemoteAddr()
|
||||
}
|
||||
|
||||
func (c *CtxReadWriteCloserWithAddr) SocketID() string {
|
||||
return c.conn.SocketID()
|
||||
}
|
||||
|
||||
// NewCtxRWC returns ReadWriteCloser which respects given context,
|
||||
// cancellation etc.
|
||||
func NewCtxRWC(ctx context.Context, cancel context.CancelFunc, conn ReadWriteCloserWithAddr) ReadWriteCloserWithAddr {
|
||||
|
||||
+6
-2
@@ -18,14 +18,14 @@ type LogReadWriteCloserWithAddr struct {
|
||||
// Read reads from connection
|
||||
func (l *LogReadWriteCloserWithAddr) Read(p []byte) (n int, err error) {
|
||||
n, err = l.conn.Read(p)
|
||||
l.logger.Debugw("Finish reading", "name", l.name, "socketid", l.sockid, "nbytes", n, "error", err)
|
||||
l.logger.Debugw("Finish reading", "name", l.name, "socketid", l.sockid, "nbytes", n, "error", err, "localAddr", l.LocalAddr())
|
||||
return
|
||||
}
|
||||
|
||||
// Write writes into connection.
|
||||
func (l *LogReadWriteCloserWithAddr) Write(p []byte) (n int, err error) {
|
||||
n, err = l.conn.Write(p)
|
||||
l.logger.Debugw("Finish writing", "name", l.name, "socketid", l.sockid, "nbytes", n, "error", err)
|
||||
l.logger.Debugw("Finish writing", "name", l.name, "socketid", l.sockid, "nbytes", n, "error", err, "localAddr", l.LocalAddr())
|
||||
return
|
||||
}
|
||||
|
||||
@@ -44,6 +44,10 @@ func (l *LogReadWriteCloserWithAddr) RemoteAddr() *net.TCPAddr {
|
||||
return l.conn.RemoteAddr()
|
||||
}
|
||||
|
||||
func (l *LogReadWriteCloserWithAddr) SocketID() string {
|
||||
return l.sockid
|
||||
}
|
||||
|
||||
// NewLogRWC wraps ReadWriteCloser with logger calls.
|
||||
func NewLogRWC(conn ReadWriteCloserWithAddr, logger *zap.SugaredLogger, sockid string, name string) ReadWriteCloserWithAddr {
|
||||
return &LogReadWriteCloserWithAddr{
|
||||
|
||||
@@ -10,4 +10,5 @@ type ReadWriteCloserWithAddr interface {
|
||||
|
||||
LocalAddr() *net.TCPAddr
|
||||
RemoteAddr() *net.TCPAddr
|
||||
SocketID() string
|
||||
}
|
||||
|
||||
@@ -51,6 +51,10 @@ func (c *StreamCipherReadWriteCloserWithAddr) RemoteAddr() *net.TCPAddr {
|
||||
return c.conn.RemoteAddr()
|
||||
}
|
||||
|
||||
func (c *StreamCipherReadWriteCloserWithAddr) SocketID() string {
|
||||
return c.conn.SocketID()
|
||||
}
|
||||
|
||||
// NewStreamCipherRWC returns wrapper which transparently
|
||||
// encrypts/decrypts traffic with obfuscated2 protocol.
|
||||
func NewStreamCipherRWC(conn ReadWriteCloserWithAddr, encryptor, decryptor cipher.Stream) ReadWriteCloserWithAddr {
|
||||
|
||||
@@ -9,6 +9,7 @@ import (
|
||||
|
||||
type TimeoutReadWriteCloserWithAddr struct {
|
||||
conn net.Conn
|
||||
sock string
|
||||
publicIPv4 net.IP
|
||||
publicIPv6 net.IP
|
||||
}
|
||||
@@ -46,10 +47,15 @@ func (t *TimeoutReadWriteCloserWithAddr) LocalAddr() *net.TCPAddr {
|
||||
return &newAddr
|
||||
}
|
||||
|
||||
func NewTimeoutRWC(conn net.Conn, ipv4, ipv6 net.IP) ReadWriteCloserWithAddr {
|
||||
func (t *TimeoutReadWriteCloserWithAddr) SocketID() string {
|
||||
return t.sock
|
||||
}
|
||||
|
||||
func NewTimeoutRWC(conn net.Conn, sock string, ipv4, ipv6 net.IP) ReadWriteCloserWithAddr {
|
||||
return &TimeoutReadWriteCloserWithAddr{
|
||||
conn: conn,
|
||||
publicIPv4: ipv4,
|
||||
publicIPv6: ipv6,
|
||||
sock: sock,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -37,6 +37,10 @@ func (t *TrafficReadWriteCloserWithAddr) RemoteAddr() *net.TCPAddr {
|
||||
return t.conn.RemoteAddr()
|
||||
}
|
||||
|
||||
func (t *TrafficReadWriteCloserWithAddr) SocketID() string {
|
||||
return t.conn.SocketID()
|
||||
}
|
||||
|
||||
// NewTrafficRWC wraps ReadWriteCloser to have read/write callbacks.
|
||||
func NewTrafficRWC(conn ReadWriteCloserWithAddr, readCallback, writeCallback func(int)) ReadWriteCloserWithAddr {
|
||||
return &TrafficReadWriteCloserWithAddr{
|
||||
|
||||
Reference in New Issue
Block a user