MCPcopy
hub / github.com/txthinking/brook / NewBrookLink

Function NewBrookLink

brooklink.go:54–147  ·  view source on GitHub ↗
(link string)

Source from the content-addressed store, hash-verified

52}
53
54func NewBrookLink(link string) (*BrookLink, error) {
55 var address, host, path string
56 kind, server, v, err := ParseLink(link)
57 if err != nil {
58 return nil, err
59 }
60 p := []byte(v.Get("password"))
61 if kind == "server" {
62 address = server
63 }
64 var tc *tls.Config
65 var tlsfingerprint utls.ClientHelloID
66 var fragmentMinLength int64
67 var fragmentMaxLength int64
68 var fragmentMinDelay int64
69 var fragmentMaxDelay int64
70 if kind == "socks5" || kind == "wsserver" || kind == "wssserver" || kind == "quicserver" {
71 u, err := url.Parse(server)
72 if err != nil {
73 return nil, err
74 }
75 host = u.Host
76 path = u.Path
77 if path == "" {
78 path = "/ws"
79 }
80 address = host
81 if kind == "wsserver" || kind == "wssserver" || kind == "quicserver" {
82 if v.Get("address") != "" {
83 address = v.Get("address")
84 }
85 }
86 if kind == "wssserver" || kind == "quicserver" {
87 h, _, err := net.SplitHostPort(u.Host)
88 if err != nil {
89 return nil, err
90 }
91 tc = &tls.Config{ServerName: h}
92 if v.Get("insecure") == "true" {
93 tc.InsecureSkipVerify = true
94 }
95 if v.Get("ca") != "" {
96 roots := x509.NewCertPool()
97 ok := roots.AppendCertsFromPEM([]byte(v.Get("ca")))
98 if !ok {
99 return nil, errors.New("failed to parse root certificate")
100 }
101 tc.RootCAs = roots
102 }
103 if kind == "wssserver" {
104 tc.NextProtos = []string{"http/1.1"}
105 }
106 if kind == "quicserver" {
107 tc.NextProtos = []string{"h3"}
108 }
109 }
110 if kind == "wsserver" || kind == "wssserver" || kind == "quicserver" {
111 if v.Get("withoutBrookProtocol") == "true" {

Callers 2

mainFunction · 0.92
NewRelayOverBrookFunction · 0.85

Calls 3

ParseLinkFunction · 0.85
SHA256BytesFunction · 0.85
GetMethod · 0.80

Tested by

no test coverage detected