全面修订代码;完成 grpcSimple包;使用 tag选择编译quic 和 grpc

grpcSimple包的服务端和客户端现在都已完成,且兼容v2ray等内核。
grpcSimple包 简洁、高效,更加科学。暂不支持multiMode。

若 grpc_full 给出,则使用grpc包,否则默认使用 grpcSimple包。
若 noquic给出,则不使用 quic,否则 默认使用 quic。

修复 ws early 失效问题;
This commit is contained in:
e1732a364fed
2022-04-28 05:41:56 +08:00
parent 4e700d7475
commit cc758dec66
31 changed files with 613 additions and 222 deletions

View File

@@ -4,68 +4,57 @@ import (
"net"
"net/url"
"github.com/e1732a364fed/v2ray_simple/httpLayer"
"github.com/e1732a364fed/v2ray_simple/advLayer"
"github.com/e1732a364fed/v2ray_simple/tlsLayer"
)
func updateAlpnListByAdvLayer(com ProxyCommon, alpnList []string) (result []string) {
result = alpnList
if adv := com.AdvancedLayer(); adv != "" {
if creator := advLayer.ProtocolsMap[adv]; creator != nil {
if alpn, must := creator.GetDefaultAlpn(); must {
has_alpn := false
for _, a := range alpnList {
if a == alpn {
has_alpn = true
break
}
}
if !has_alpn {
result = append([]string{alpn}, alpnList...)
}
}
}
}
return
}
//use dc.Host, dc.Insecure, dc.Utls, dc.Alpn.
func prepareTLS_forClient(com ProxyCommon, dc *DialConf) error {
alpnList := dc.Alpn
alpnList := updateAlpnListByAdvLayer(com, dc.Alpn)
clic := com.getCommon()
if clic == nil {
return nil
}
switch com.AdvancedLayer() {
case "quic":
clic.setNetwork("udp")
return nil
case "grpc":
has_h2 := false
for _, a := range alpnList {
if a == httpLayer.H2_Str {
has_h2 = true
break
}
}
if !has_h2 {
alpnList = append([]string{httpLayer.H2_Str}, alpnList...)
}
}
clic.setTLS_Client(tlsLayer.NewClient(dc.Host, dc.Insecure, dc.Utls, alpnList))
return nil
}
//use lc.Host, lc.TLSCert, lc.TLSKey, lc.Insecure, lc.Alpn.
func prepareTLS_forServer(com ProxyCommon, lc *ListenConf) error {
// 这里直接不检查 字符串就直接传给 tlsLayer.NewServer
// 所以要求 cert和 key 不在程序本身目录 的话,就要给出完整路径
serc := com.getCommon()
if serc == nil {
return nil
}
alpnList := lc.Alpn
switch com.AdvancedLayer() {
case "quic":
serc.setNetwork("udp")
return nil
case "grpc":
has_h2 := false
for _, a := range alpnList {
if a == httpLayer.H2_Str {
has_h2 = true
break
}
}
if !has_h2 {
alpnList = append([]string{httpLayer.H2_Str}, alpnList...)
}
}
alpnList := updateAlpnListByAdvLayer(com, lc.Alpn)
tlsserver, err := tlsLayer.NewServer(lc.Host, lc.TLSCert, lc.TLSKey, lc.Insecure, alpnList)
if err == nil {