Fix conn relay logic

This commit is contained in:
wweir
2018-11-25 11:43:43 +08:00
parent be646215e3
commit 40be243a96
3 changed files with 35 additions and 18 deletions
+1 -1
View File
@@ -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
View File
@@ -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
View File
@@ -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