mirror of
https://github.com/e1732a364fed/v2ray_simple.git
synced 2025-12-24 13:27:56 +08:00
修订代码,注释;fix #158
This commit is contained in:
6
iics.go
6
iics.go
@@ -66,7 +66,7 @@ type incomingInserverConnState struct {
|
||||
|
||||
isInner bool
|
||||
|
||||
inTag string //在inServer为nil时,可用此项确定 inTag
|
||||
inTag string //在inServer为nil时,可用此项确定 inTag。比如tproxy就属于这种情况
|
||||
useSniffing bool //在inServer为nil时,可用此项确定 是否使用sniffing
|
||||
|
||||
cachedRemoteAddr string
|
||||
@@ -114,7 +114,7 @@ func (iics *incomingInserverConnState) extractFirstBufFromErr(err error) bool {
|
||||
//通过err找出 并赋值给 iics.theFallbackFirstBuffer
|
||||
{
|
||||
|
||||
fe, ok := err.(*utils.ErrBuffer)
|
||||
be, ok := err.(*utils.ErrBuffer)
|
||||
if !ok {
|
||||
// 能fallback 但是返回的 err却不是fallback err,证明遇到了更大问题,可能是底层read问题,所以也不用继续fallback了
|
||||
if iics.wrappedConn != nil {
|
||||
@@ -123,7 +123,7 @@ func (iics *incomingInserverConnState) extractFirstBufFromErr(err error) bool {
|
||||
return false
|
||||
}
|
||||
|
||||
if firstbuffer := fe.Buf; firstbuffer == nil {
|
||||
if firstbuffer := be.Buf; firstbuffer == nil {
|
||||
//不应该,至少能读到1字节的。
|
||||
|
||||
panic("No FirstBuffer")
|
||||
|
||||
30
main.go
30
main.go
@@ -523,11 +523,25 @@ func handshakeInserver_and_passToOutClient(iics incomingInserverConnState) {
|
||||
case utils.ErrHandled:
|
||||
return
|
||||
|
||||
default:
|
||||
default: //回落
|
||||
if !iics.extractFirstBufFromErr(err) {
|
||||
return
|
||||
}
|
||||
|
||||
if iics.isTlsLazyServerEnd {
|
||||
iics.isTlsLazyServerEnd = false
|
||||
|
||||
/*
|
||||
我们这里取巧,认为只要进行了回落,那么客户端就一定不是vs客户端,进而不再应用lazy
|
||||
关联 issue #158
|
||||
|
||||
开启了lazy后,如果进行回落了,那么是要先从iics.firstbuffer 来读的,但是目前lazy函数根本不接收 iics.
|
||||
|
||||
而回落一般用于正常客户端的浏览网页,一般的客户端就是浏览器,是不用lazy的,所以可以如此取巧
|
||||
|
||||
*/
|
||||
}
|
||||
|
||||
passToOutClient(iics, true, nil, nil, netLayer.Addr{})
|
||||
}
|
||||
|
||||
@@ -847,7 +861,7 @@ func passToOutClient(iics incomingInserverConnState, isfallback bool, wlc net.Co
|
||||
ce.Write(zap.Any("source", desc))
|
||||
}
|
||||
|
||||
outtag := re.RoutePolicy.GetOutTag(desc)
|
||||
outtag := re.RoutePolicy.CalcuOutTag(desc)
|
||||
|
||||
if len(re.ClientsTagMap) > 0 {
|
||||
if tagC := re.GetClient(outtag); tagC != nil {
|
||||
@@ -1038,24 +1052,24 @@ func dialClient(iics incomingInserverConnState, targetAddr netLayer.Addr,
|
||||
if iics.fallbackXver >= 0 {
|
||||
if iics.fallbackXver > 0 {
|
||||
ce.Write(
|
||||
zap.String("fallback from", iics.cachedRemoteAddr),
|
||||
zap.String("target", targetAddr.UrlString()),
|
||||
zap.String("Fallback from", iics.cachedRemoteAddr),
|
||||
zap.String("Target", targetAddr.UrlString()),
|
||||
zap.String("through", proxy.GetVSI_url(client)),
|
||||
zap.Int("with xver", iics.fallbackXver),
|
||||
)
|
||||
|
||||
} else {
|
||||
ce.Write(
|
||||
zap.String("fallback from", iics.cachedRemoteAddr),
|
||||
zap.String("target", targetAddr.UrlString()),
|
||||
zap.String("Fallback from", iics.cachedRemoteAddr),
|
||||
zap.String("Target", targetAddr.UrlString()),
|
||||
zap.String("through", proxy.GetVSI_url(client)),
|
||||
)
|
||||
|
||||
}
|
||||
} else {
|
||||
ce.Write(
|
||||
zap.String("from", iics.cachedRemoteAddr),
|
||||
zap.String("target", targetAddr.UrlString()),
|
||||
zap.String("From", iics.cachedRemoteAddr),
|
||||
zap.String("Target", targetAddr.UrlString()),
|
||||
zap.String("through", proxy.GetVSI_url(client)),
|
||||
)
|
||||
}
|
||||
|
||||
@@ -284,10 +284,10 @@ func (rp *RoutePolicy) AddRouteSet(rs *RouteSet) {
|
||||
}
|
||||
}
|
||||
|
||||
// 返回一个 proxy.Client 的 tag。
|
||||
// 根据td 以及 RoutePolicy的配置 计算出 一个 对应的 proxy.Client 的 tag。
|
||||
// 默认情况下,始终具有direct这个tag以及 proxy这个tag,无需用户额外在配置文件中指定。
|
||||
// 默认如果不匹配任何值的话,就会流向 "proxy" tag,也就是客户设置的 remoteClient的值。
|
||||
func (rp *RoutePolicy) GetOutTag(td *TargetDescription) string {
|
||||
func (rp *RoutePolicy) CalcuOutTag(td *TargetDescription) string {
|
||||
for _, rs := range rp.List {
|
||||
if rs.IsIn(td) {
|
||||
switch n := len(rs.OutTags); n {
|
||||
|
||||
@@ -108,8 +108,6 @@ func (c *UserTCPConn) WriteBuffers(buffers [][]byte) (int64, error) {
|
||||
|
||||
}
|
||||
|
||||
//如果是udp,则是多线程不安全的,如果是tcp,则安不安全看底层的链接。
|
||||
// 这里规定,如果是UDP,则 每Write一遍,都要Write一个 完整的UDP 数据包
|
||||
func (c *UserTCPConn) Write(p []byte) (int, error) {
|
||||
|
||||
if c.version == 0 {
|
||||
|
||||
Reference in New Issue
Block a user