(u *url.URL)
| 258 | } |
| 259 | |
| 260 | func TLSFactoryFromURL(u *url.URL) (func(c net.Conn, config *tls.Config) net.Conn, error) { |
| 261 | params, err := url.ParseQuery(u.RawQuery) |
| 262 | if err != nil { |
| 263 | return nil, fmt.Errorf("unable to parse query string of proxy specification URL %q: %w", u.String(), err) |
| 264 | } |
| 265 | if params.Has("utls-fp") { |
| 266 | var fp utls.ClientHelloID |
| 267 | switch params.Get("utls-fp") { |
| 268 | case "Hello360_11_0": |
| 269 | fp = utls.Hello360_11_0 |
| 270 | case "Hello360_7_5": |
| 271 | fp = utls.Hello360_7_5 |
| 272 | case "Hello360_Auto": |
| 273 | fp = utls.Hello360_Auto |
| 274 | case "HelloAndroid_11_OkHttp": |
| 275 | fp = utls.HelloAndroid_11_OkHttp |
| 276 | case "HelloChrome_100": |
| 277 | fp = utls.HelloChrome_100 |
| 278 | case "HelloChrome_100_PSK": |
| 279 | fp = utls.HelloChrome_100_PSK |
| 280 | case "HelloChrome_102": |
| 281 | fp = utls.HelloChrome_102 |
| 282 | case "HelloChrome_106_Shuffle": |
| 283 | fp = utls.HelloChrome_106_Shuffle |
| 284 | case "HelloChrome_112_PSK_Shuf": |
| 285 | fp = utls.HelloChrome_112_PSK_Shuf |
| 286 | case "HelloChrome_114_Padding_PSK_Shuf": |
| 287 | fp = utls.HelloChrome_114_Padding_PSK_Shuf |
| 288 | case "HelloChrome_115_PQ": |
| 289 | fp = utls.HelloChrome_115_PQ |
| 290 | case "HelloChrome_115_PQ_PSK": |
| 291 | fp = utls.HelloChrome_115_PQ_PSK |
| 292 | case "HelloChrome_120": |
| 293 | fp = utls.HelloChrome_120 |
| 294 | case "HelloChrome_120_PQ": |
| 295 | fp = utls.HelloChrome_120_PQ |
| 296 | case "HelloChrome_131": |
| 297 | fp = utls.HelloChrome_131 |
| 298 | case "HelloChrome_133": |
| 299 | fp = utls.HelloChrome_133 |
| 300 | case "HelloChrome_58": |
| 301 | fp = utls.HelloChrome_58 |
| 302 | case "HelloChrome_62": |
| 303 | fp = utls.HelloChrome_62 |
| 304 | case "HelloChrome_70": |
| 305 | fp = utls.HelloChrome_70 |
| 306 | case "HelloChrome_72": |
| 307 | fp = utls.HelloChrome_72 |
| 308 | case "HelloChrome_83": |
| 309 | fp = utls.HelloChrome_83 |
| 310 | case "HelloChrome_87": |
| 311 | fp = utls.HelloChrome_87 |
| 312 | case "HelloChrome_96": |
| 313 | fp = utls.HelloChrome_96 |
| 314 | case "HelloChrome_Auto": |
| 315 | fp = utls.HelloChrome_Auto |
| 316 | case "HelloCustom": |
| 317 | fp = utls.HelloCustom |
no test coverage detected