mirror of
https://github.com/wweir/sower.git
synced 2024-04-21 12:42:15 +00:00
Test close conn
This commit is contained in:
+3
-4
@@ -7,7 +7,6 @@ import (
|
||||
"github.com/wweir/sower/proxy/kcp"
|
||||
"github.com/wweir/sower/proxy/quic"
|
||||
"github.com/wweir/sower/proxy/tcp"
|
||||
"github.com/wweir/sower/shadow"
|
||||
)
|
||||
|
||||
type Client interface {
|
||||
@@ -37,9 +36,9 @@ func StartClient(netType, server, password string) {
|
||||
continue
|
||||
}
|
||||
|
||||
if rc, err = shadow.Shadow(rc, password); err != nil {
|
||||
glog.Fatalln(err)
|
||||
}
|
||||
// if rc, err = shadow.Shadow(rc, password); err != nil {
|
||||
// glog.Fatalln(err)
|
||||
// }
|
||||
|
||||
go relay(conn, rc)
|
||||
}
|
||||
|
||||
+5
-8
@@ -9,7 +9,6 @@ import (
|
||||
"github.com/wweir/sower/proxy/kcp"
|
||||
"github.com/wweir/sower/proxy/quic"
|
||||
"github.com/wweir/sower/proxy/tcp"
|
||||
"github.com/wweir/sower/shadow"
|
||||
)
|
||||
|
||||
type Server interface {
|
||||
@@ -40,18 +39,16 @@ func StartServer(netType, port, password string) {
|
||||
|
||||
for {
|
||||
conn := <-connCh
|
||||
conn, err := shadow.Shadow(conn, password)
|
||||
if err != nil {
|
||||
glog.Fatalln(err)
|
||||
}
|
||||
// conn, err := shadow.Shadow(conn, password)
|
||||
// if err != nil {
|
||||
// glog.Fatalln(err)
|
||||
// }
|
||||
|
||||
go handle(conn)
|
||||
}
|
||||
}
|
||||
|
||||
func handle(conn net.Conn) {
|
||||
defer conn.Close()
|
||||
|
||||
conn, addr, err := parse.ParseAddr(conn)
|
||||
if err != nil {
|
||||
glog.Warningln(err)
|
||||
@@ -64,7 +61,7 @@ func handle(conn net.Conn) {
|
||||
glog.Warningln(err)
|
||||
return
|
||||
}
|
||||
defer rc.Close()
|
||||
|
||||
if err := rc.(*net.TCPConn).SetKeepAlive(true); err != nil {
|
||||
glog.Warningln(err)
|
||||
}
|
||||
|
||||
+4
-8
@@ -5,7 +5,6 @@ import (
|
||||
"net"
|
||||
"sync"
|
||||
"sync/atomic"
|
||||
"time"
|
||||
|
||||
"github.com/golang/glog"
|
||||
)
|
||||
@@ -22,10 +21,10 @@ const (
|
||||
func relay(conn1, conn2 net.Conn) {
|
||||
wg := &sync.WaitGroup{}
|
||||
exitFlag := new(int32)
|
||||
wg.Add(2)
|
||||
|
||||
go redirect(conn2, conn1, wg, exitFlag)
|
||||
redirect(conn1, conn2, wg, exitFlag)
|
||||
wg.Wait()
|
||||
|
||||
}
|
||||
|
||||
func redirect(dst, src net.Conn, wg *sync.WaitGroup, exitFlag *int32) {
|
||||
@@ -34,9 +33,6 @@ func redirect(dst, src net.Conn, wg *sync.WaitGroup, exitFlag *int32) {
|
||||
}
|
||||
atomic.AddInt32(exitFlag, 1)
|
||||
|
||||
// wakeup all conn goroutine
|
||||
now := time.Now()
|
||||
dst.SetDeadline(now)
|
||||
src.SetDeadline(now)
|
||||
wg.Done()
|
||||
src.Close()
|
||||
dst.Close()
|
||||
}
|
||||
|
||||
+4
-5
@@ -28,6 +28,10 @@ func (c *conn) Read(b []byte) (n int, err error) {
|
||||
c.readBuf, err = c.aead.Open(b[:0], c.decryptNonce(), b[:n], nil)
|
||||
return len(c.readBuf), err
|
||||
}
|
||||
func (c *conn) Write(b []byte) (n int, err error) {
|
||||
c.writeBuf = c.aead.Seal(nil, c.encryptNonce(), b, nil)
|
||||
return c.Conn.Write(c.writeBuf)
|
||||
}
|
||||
|
||||
func Shadow(c net.Conn, password string) (net.Conn, error) {
|
||||
aead, err := newAEAD(password)
|
||||
@@ -43,11 +47,6 @@ func Shadow(c net.Conn, password string) (net.Conn, error) {
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (c *conn) Write(b []byte) (n int, err error) {
|
||||
c.writeBuf = c.aead.Seal(nil, c.encryptNonce(), b, nil)
|
||||
return c.Conn.Write(c.writeBuf)
|
||||
}
|
||||
|
||||
func newAEAD(password string) (cipher.AEAD, error) {
|
||||
block, err := aes.NewCipher([]byte(password + password)[:16])
|
||||
if err != nil {
|
||||
|
||||
Reference in New Issue
Block a user