1
// Copyright 2011 The Go Authors. All rights reserved.
2
// Use of this source code is governed by a BSD-style
3
// license that can be found in the LICENSE file.
11
"golang.org/x/net/internal/socks"
14
// SOCKS5 returns a Dialer that makes SOCKSv5 connections to the given
15
// address with an optional username and password.
16
// See RFC 1928 and RFC 1929.
17
func SOCKS5(network, address string, auth *Auth, forward Dialer) (Dialer, error) {
18
d := socks.NewDialer(network, address)
20
if f, ok := forward.(ContextDialer); ok {
21
d.ProxyDial = func(ctx context.Context, network string, address string) (net.Conn, error) {
22
return f.DialContext(ctx, network, address)
25
d.ProxyDial = func(ctx context.Context, network string, address string) (net.Conn, error) {
26
return dialContext(ctx, forward, network, address)
31
up := socks.UsernamePassword{
33
Password: auth.Password,
35
d.AuthMethods = []socks.AuthMethod{
36
socks.AuthMethodNotRequired,
37
socks.AuthMethodUsernamePassword,
39
d.Authenticate = up.Authenticate