1
0
mirror of https://github.com/golang/go synced 2024-11-22 06:24:38 -07:00

http: add NewProxyClientConn

This just returns a ClientConn suitable for writing
proxy requests.  To be used in Transport.

R=rsc, petar-m
CC=golang-dev
https://golang.org/cl/4290052
This commit is contained in:
Brad Fitzpatrick 2011-03-16 14:32:35 -07:00
parent 7ea8cdaabd
commit a93f70c21a

View File

@ -212,6 +212,7 @@ type ClientConn struct {
pipereq map[*Request]uint
pipe textproto.Pipeline
writeReq func(*Request, io.Writer) os.Error
}
// NewClientConn returns a new ClientConn reading and writing c. If r is not
@ -220,7 +221,20 @@ func NewClientConn(c net.Conn, r *bufio.Reader) *ClientConn {
if r == nil {
r = bufio.NewReader(c)
}
return &ClientConn{c: c, r: r, pipereq: make(map[*Request]uint)}
return &ClientConn{
c: c,
r: r,
pipereq: make(map[*Request]uint),
writeReq: (*Request).Write,
}
}
// NewProxyClientConn works like NewClientConn but writes Requests
// using Request's WriteProxy method.
func NewProxyClientConn(c net.Conn, r *bufio.Reader) *ClientConn {
cc := NewClientConn(c, r)
cc.writeReq = (*Request).WriteProxy
return cc
}
// Close detaches the ClientConn and returns the underlying connection as well
@ -281,7 +295,7 @@ func (cc *ClientConn) Write(req *Request) (err os.Error) {
}
cc.lk.Unlock()
err = req.Write(c)
err = cc.writeReq(req, c)
cc.lk.Lock()
defer cc.lk.Unlock()
if err != nil {