mirror of
https://github.com/ScuroNeko/mtg.git
synced 2026-08-31 19:24:02 +03:00
FILE / ScuroNeko/mtg
wrappers/timeoutrwc.go
Исходный файл и его история в репозитории.
56 lines
1.2 KiB
Go
56 lines
1.2 KiB
Go
package wrappers
|
|
|
|
import (
|
|
"net"
|
|
"time"
|
|
|
|
"github.com/9seconds/mtg/config"
|
|
)
|
|
|
|
type TimeoutReadWriteCloserWithAddr struct {
|
|
conn net.Conn
|
|
publicIPv4 net.IP
|
|
publicIPv6 net.IP
|
|
}
|
|
|
|
func (t *TimeoutReadWriteCloserWithAddr) Read(p []byte) (int, error) {
|
|
t.conn.SetReadDeadline(time.Now().Add(config.TimeoutRead))
|
|
return t.conn.Read(p)
|
|
}
|
|
|
|
func (t *TimeoutReadWriteCloserWithAddr) Write(p []byte) (int, error) {
|
|
t.conn.SetWriteDeadline(time.Now().Add(config.TimeoutWrite))
|
|
return t.conn.Write(p)
|
|
}
|
|
|
|
func (t *TimeoutReadWriteCloserWithAddr) Close() error {
|
|
return t.conn.Close()
|
|
}
|
|
|
|
func (t *TimeoutReadWriteCloserWithAddr) RemoteAddr() *net.TCPAddr {
|
|
return t.conn.RemoteAddr().(*net.TCPAddr)
|
|
}
|
|
|
|
func (t *TimeoutReadWriteCloserWithAddr) LocalAddr() *net.TCPAddr {
|
|
addr := t.conn.LocalAddr().(*net.TCPAddr)
|
|
newAddr := *addr
|
|
|
|
if t.RemoteAddr().IP.To4() != nil {
|
|
if t.publicIPv4 != nil {
|
|
newAddr.IP = t.publicIPv4
|
|
}
|
|
} else if t.publicIPv6 != nil {
|
|
newAddr.IP = t.publicIPv6
|
|
}
|
|
|
|
return &newAddr
|
|
}
|
|
|
|
func NewTimeoutRWC(conn net.Conn, ipv4, ipv6 net.IP) ReadWriteCloserWithAddr {
|
|
return &TimeoutReadWriteCloserWithAddr{
|
|
conn: conn,
|
|
publicIPv4: ipv4,
|
|
publicIPv6: ipv6,
|
|
}
|
|
}
|