Url路由 泛解析

This commit is contained in:
刘河
2019-02-15 22:59:28 +08:00
parent 44d314515b
commit 9f6b33a62b
26 changed files with 262 additions and 156 deletions

View File

@@ -54,7 +54,9 @@ func (s *TRPClient) Close() {
s.tunnel.Close()
s.stop <- true
for _, v := range s.linkMap {
v.Stop <- true
if v.Conn != nil {
v.Conn.Close()
}
}
}
@@ -74,7 +76,6 @@ func (s *TRPClient) processor(c *conn.Conn) {
if link, err := c.GetLinkInfo(); err != nil {
break
} else {
link.Stop = make(chan bool)
s.Lock()
s.linkMap[link.Id] = link
s.Unlock()
@@ -95,6 +96,7 @@ func (s *TRPClient) processor(c *conn.Conn) {
}
func (s *TRPClient) linkProcess(link *conn.Link, c *conn.Conn) {
link.Host = common.FormatAddress(link.Host)
//与目标建立连接
server, err := net.DialTimeout(link.ConnType, link.Host, time.Second*3)
@@ -106,26 +108,23 @@ func (s *TRPClient) linkProcess(link *conn.Link, c *conn.Conn) {
c.WriteSuccess(link.Id)
go func() {
link.Conn = conn.NewConn(server)
buf := pool.BufPoolCopy.Get().([]byte)
for {
if n, err := server.Read(buf); err != nil {
s.tunnel.SendMsg([]byte(common.IO_EOF), link)
link.Conn = conn.NewConn(server)
buf := pool.BufPoolCopy.Get().([]byte)
for {
if n, err := server.Read(buf); err != nil {
s.tunnel.SendMsg([]byte(common.IO_EOF), link)
break
} else {
if _, err := s.tunnel.SendMsg(buf[:n], link); err != nil {
c.Close()
break
} else {
if _, err := s.tunnel.SendMsg(buf[:n], link); err != nil {
c.Close()
break
}
}
}
pool.PutBufPoolCopy(buf)
s.Lock()
delete(s.linkMap, link.Id)
s.Unlock()
}()
<-link.Stop
}
pool.PutBufPoolCopy(buf)
s.Lock()
delete(s.linkMap, link.Id)
s.Unlock()
}
//隧道模式处理

View File

@@ -43,7 +43,7 @@ func TestConfig(t *testing.T) {
}
tunnel := &file.Tunnel{
Port: 9001,
Mode: "tunnelServer",
Mode: "tcpServer",
Target: "127.0.0.1:8082",
Remark: "333",
}