|
|
|
@ -503,24 +503,8 @@ func HandleTcpWorkConnection(localInfo *config.LocalSvrConf, proxyPlugin plugin.
|
|
|
|
|
remote = frpIo.WithCompression(remote)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if proxyPlugin != nil {
|
|
|
|
|
// if plugin is set, let plugin handle connections first
|
|
|
|
|
workConn.Debug("handle by plugin: %s", proxyPlugin.Name())
|
|
|
|
|
proxyPlugin.Handle(remote, workConn)
|
|
|
|
|
workConn.Debug("handle by plugin finished")
|
|
|
|
|
return
|
|
|
|
|
} else {
|
|
|
|
|
localConn, err := frpNet.ConnectServer("tcp", fmt.Sprintf("%s:%d", localInfo.LocalIp, localInfo.LocalPort))
|
|
|
|
|
if err != nil {
|
|
|
|
|
workConn.Close()
|
|
|
|
|
workConn.Error("connect to local service [%s:%d] error: %v", localInfo.LocalIp, localInfo.LocalPort, err)
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
workConn.Debug("join connections, localConn(l[%s] r[%s]) workConn(l[%s] r[%s])", localConn.LocalAddr().String(),
|
|
|
|
|
localConn.RemoteAddr().String(), workConn.LocalAddr().String(), workConn.RemoteAddr().String())
|
|
|
|
|
|
|
|
|
|
// check if we need to send proxy protocol info
|
|
|
|
|
var extraInfo []byte
|
|
|
|
|
if baseInfo.ProxyProtocolVersion != "" {
|
|
|
|
|
if m.SrcAddr != "" && m.SrcPort != 0 {
|
|
|
|
|
if m.DstAddr == "" {
|
|
|
|
@ -546,8 +530,31 @@ func HandleTcpWorkConnection(localInfo *config.LocalSvrConf, proxyPlugin plugin.
|
|
|
|
|
h.Version = 2
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
h.WriteTo(localConn)
|
|
|
|
|
buf := bytes.NewBuffer(nil)
|
|
|
|
|
h.WriteTo(buf)
|
|
|
|
|
extraInfo = buf.Bytes()
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if proxyPlugin != nil {
|
|
|
|
|
// if plugin is set, let plugin handle connections first
|
|
|
|
|
workConn.Debug("handle by plugin: %s", proxyPlugin.Name())
|
|
|
|
|
proxyPlugin.Handle(remote, workConn, extraInfo)
|
|
|
|
|
workConn.Debug("handle by plugin finished")
|
|
|
|
|
return
|
|
|
|
|
} else {
|
|
|
|
|
localConn, err := frpNet.ConnectServer("tcp", fmt.Sprintf("%s:%d", localInfo.LocalIp, localInfo.LocalPort))
|
|
|
|
|
if err != nil {
|
|
|
|
|
workConn.Close()
|
|
|
|
|
workConn.Error("connect to local service [%s:%d] error: %v", localInfo.LocalIp, localInfo.LocalPort, err)
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
workConn.Debug("join connections, localConn(l[%s] r[%s]) workConn(l[%s] r[%s])", localConn.LocalAddr().String(),
|
|
|
|
|
localConn.RemoteAddr().String(), workConn.LocalAddr().String(), workConn.RemoteAddr().String())
|
|
|
|
|
|
|
|
|
|
if len(extraInfo) > 0 {
|
|
|
|
|
localConn.Write(extraInfo)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
frpIo.Join(localConn, remote)
|
|
|
|
|