mirror of
https://github.com/e1732a364fed/v2ray_simple.git
synced 2025-10-10 03:00:08 +08:00
全面修订代码;完成 grpcSimple包;使用 tag选择编译quic 和 grpc
grpcSimple包的服务端和客户端现在都已完成,且兼容v2ray等内核。 grpcSimple包 简洁、高效,更加科学。暂不支持multiMode。 若 grpc_full 给出,则使用grpc包,否则默认使用 grpcSimple包。 若 noquic给出,则不使用 quic,否则 默认使用 quic。 修复 ws early 失效问题;
This commit is contained in:
@@ -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 {
|
||||
|
Reference in New Issue
Block a user