20 return fn(network, addr) |
20 return fn(network, addr) |
21 } |
21 } |
22 |
22 |
23 func init() { |
23 func init() { |
24 proxy_RegisterDialerType("http", func(proxyURL *url.URL, forwardDialer proxy_Dialer) (proxy_Dialer, error) { |
24 proxy_RegisterDialerType("http", func(proxyURL *url.URL, forwardDialer proxy_Dialer) (proxy_Dialer, error) { |
25 return &httpProxyDialer{proxyURL: proxyURL, fowardDial: forwardDialer.Dial}, nil |
25 return &httpProxyDialer{proxyURL: proxyURL, forwardDial: forwardDialer.Dial}, nil |
26 }) |
26 }) |
27 } |
27 } |
28 |
28 |
29 type httpProxyDialer struct { |
29 type httpProxyDialer struct { |
30 proxyURL *url.URL |
30 proxyURL *url.URL |
31 fowardDial func(network, addr string) (net.Conn, error) |
31 forwardDial func(network, addr string) (net.Conn, error) |
32 } |
32 } |
33 |
33 |
34 func (hpd *httpProxyDialer) Dial(network string, addr string) (net.Conn, error) { |
34 func (hpd *httpProxyDialer) Dial(network string, addr string) (net.Conn, error) { |
35 hostPort, _ := hostPortNoPort(hpd.proxyURL) |
35 hostPort, _ := hostPortNoPort(hpd.proxyURL) |
36 conn, err := hpd.fowardDial(network, hostPort) |
36 conn, err := hpd.forwardDial(network, hostPort) |
37 if err != nil { |
37 if err != nil { |
38 return nil, err |
38 return nil, err |
39 } |
39 } |
40 |
40 |
41 connectHeader := make(http.Header) |
41 connectHeader := make(http.Header) |