mirror of
https://github.com/wweir/sower.git
synced 2024-04-21 12:42:15 +00:00
Fix conn relay logic
This commit is contained in:
+1
-1
@@ -75,7 +75,7 @@ func initRule(blocklist []string) {
|
||||
for i := range blocklist {
|
||||
rule.Add(strings.Split(blocklist[i], "."))
|
||||
}
|
||||
glog.V(1).Infof("block rule:\n%s", rule)
|
||||
glog.V(2).Infof("block rule:\n%s", rule)
|
||||
}
|
||||
|
||||
func manual(w dns.ResponseWriter, r *dns.Msg, name, dnsServer string) {
|
||||
|
||||
+26
-16
@@ -10,26 +10,20 @@ import (
|
||||
|
||||
func StartClient(server string) {
|
||||
connCh := listenLocal([]string{":80", ":443"})
|
||||
sess, err := quic.DialAddr(server, &tls.Config{InsecureSkipVerify: true}, nil)
|
||||
if err != nil {
|
||||
glog.Fatalf("connect to remote(%s) fail:%s\n", server, err)
|
||||
}
|
||||
|
||||
for {
|
||||
go func(conn net.Conn) {
|
||||
glog.V(1).Infoln("new request to", conn.RemoteAddr())
|
||||
defer conn.Close()
|
||||
conn.(*net.TCPConn).SetKeepAlive(true)
|
||||
sess, err := quic.DialAddr(server, &tls.Config{InsecureSkipVerify: true}, nil)
|
||||
if err != nil {
|
||||
glog.Fatalf("connect to remote(%s) fail:%s\n", server, err)
|
||||
}
|
||||
glog.Infoln("new session to", sess.RemoteAddr())
|
||||
|
||||
stream, err := sess.OpenStream()
|
||||
if err != nil {
|
||||
glog.Warningf("connect to remote(%s) fail:%s\n", server, err)
|
||||
return
|
||||
for conn := range connCh {
|
||||
if err := openStream(conn, sess); err != nil {
|
||||
break
|
||||
}
|
||||
defer stream.Close()
|
||||
|
||||
relay(&streamConn{stream, sess}, conn)
|
||||
}(<-connCh)
|
||||
}
|
||||
sess.Close()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -56,3 +50,19 @@ func listenLocal(ports []string) <-chan net.Conn {
|
||||
glog.Infoln("listening ports:", ports)
|
||||
return connCh
|
||||
}
|
||||
|
||||
func openStream(conn net.Conn, sess quic.Session) error {
|
||||
defer conn.Close()
|
||||
conn.(*net.TCPConn).SetKeepAlive(true)
|
||||
|
||||
glog.V(1).Infoln("new request from", conn.RemoteAddr())
|
||||
stream, err := sess.OpenStream()
|
||||
if err != nil {
|
||||
glog.Warningf("connect to remote(%s) fail:%s\n", sess.RemoteAddr(), err)
|
||||
return err
|
||||
}
|
||||
defer stream.Close()
|
||||
|
||||
relay(&streamConn{stream, sess}, conn)
|
||||
return nil
|
||||
}
|
||||
|
||||
+8
-1
@@ -18,22 +18,29 @@ func StartServer(port string) {
|
||||
sess, err := ln.Accept()
|
||||
if err != nil {
|
||||
glog.Errorln(err)
|
||||
continue
|
||||
}
|
||||
go acceptSession(sess)
|
||||
}
|
||||
}
|
||||
|
||||
func acceptSession(sess quic.Session) {
|
||||
glog.V(1).Infoln("new session from ", sess.RemoteAddr())
|
||||
defer sess.Close()
|
||||
|
||||
for {
|
||||
stream, err := sess.AcceptStream()
|
||||
if err != nil {
|
||||
glog.Errorln(err)
|
||||
return
|
||||
}
|
||||
|
||||
go acceptStream(stream, sess)
|
||||
}
|
||||
}
|
||||
|
||||
func acceptStream(stream quic.Stream, sess quic.Session) {
|
||||
glog.V(1).Infoln("new stream from ", sess.RemoteAddr())
|
||||
defer stream.Close()
|
||||
|
||||
conn, addr, err := parser.ParseAddr(&streamConn{stream, sess})
|
||||
@@ -43,7 +50,7 @@ func acceptStream(stream quic.Stream, sess quic.Session) {
|
||||
}
|
||||
glog.V(1).Infoln(addr)
|
||||
|
||||
rc, err := net.Dial("tcp", addr)
|
||||
rc, err := net.Dial("tcp", "www.baidu.com:80")
|
||||
if err != nil {
|
||||
glog.Warningln(err)
|
||||
return
|
||||
|
||||
Reference in New Issue
Block a user