mirror of
https://github.com/e1732a364fed/v2ray_simple.git
synced 2025-09-26 21:01:46 +08:00
修订代码,令grpc回落写入响应头,关联 #208
This commit is contained in:
@@ -184,6 +184,7 @@ func (s *Server) StartHandle(underlay net.Conn, newSubConnFunc func(net.Conn), f
|
||||
|
||||
fm.IsH2 = true
|
||||
fm.H2Request = rq
|
||||
fm.H2RW = rw
|
||||
|
||||
if s.closed {
|
||||
return
|
||||
|
@@ -47,6 +47,7 @@ type FallbackMeta struct {
|
||||
Reason string
|
||||
|
||||
H2Request *http.Request
|
||||
H2RW http.ResponseWriter
|
||||
XFF net.Addr
|
||||
}
|
||||
|
||||
|
1
iics.go
1
iics.go
@@ -79,6 +79,7 @@ type incomingInserverConnState struct {
|
||||
isFallbackH2 bool
|
||||
fallbackRequestPath string
|
||||
fallbackH2Request *http.Request
|
||||
fallbackRW http.ResponseWriter
|
||||
fallbackFirstBuffer *bytes.Buffer
|
||||
|
||||
fallbackXver int //若大于等于0,则证明该进项已经被确定需要进行fallback。
|
||||
|
16
main.go
16
main.go
@@ -399,6 +399,7 @@ func handleNewIncomeConnection(inServer proxy.Server, defaultClientForThis proxy
|
||||
newiics.wrappedConn = fallbackMeta.Conn
|
||||
newiics.isFallbackH2 = fallbackMeta.IsH2
|
||||
newiics.fallbackH2Request = fallbackMeta.H2Request
|
||||
newiics.fallbackRW = fallbackMeta.H2RW
|
||||
|
||||
passToOutClient(newiics, true, nil, nil, netLayer.Addr{})
|
||||
})
|
||||
@@ -663,8 +664,8 @@ func passToOutClient(iics incomingInserverConnState, isfallback bool, wlc net.Co
|
||||
rq.Host = targetAddr.Name
|
||||
|
||||
urlStr := "https://" + targetAddr.String() + iics.fallbackRequestPath
|
||||
url, _ := url.Parse(urlStr)
|
||||
rq.URL = url
|
||||
u, _ := url.Parse(urlStr)
|
||||
rq.URL = u
|
||||
|
||||
var transport *http2.Transport
|
||||
|
||||
@@ -679,6 +680,11 @@ func passToOutClient(iics incomingInserverConnState, isfallback bool, wlc net.Co
|
||||
},
|
||||
AllowHTTP: true,
|
||||
}
|
||||
|
||||
if ce := utils.CanLogDebug("fallback grpc"); ce != nil {
|
||||
ce.Write(zap.String("path", iics.fallbackRequestPath))
|
||||
}
|
||||
rq.URL, _ = url.Parse("http://127.0.0.1" + iics.fallbackRequestPath)
|
||||
}
|
||||
|
||||
} else if fbResult > 0 {
|
||||
@@ -733,6 +739,12 @@ func passToOutClient(iics incomingInserverConnState, isfallback bool, wlc net.Co
|
||||
return
|
||||
}
|
||||
|
||||
for k, v := range rsp.Header {
|
||||
iics.fallbackRW.Header().Set(k, v[0])
|
||||
}
|
||||
|
||||
iics.fallbackRW.WriteHeader(rsp.StatusCode)
|
||||
|
||||
netLayer.TryCopy(wlc, rsp.Body, iics.id)
|
||||
|
||||
return
|
||||
|
Reference in New Issue
Block a user