Commit a93f70c2 authored by Brad Fitzpatrick's avatar Brad Fitzpatrick

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
parent 7ea8cdaa
......@@ -211,7 +211,8 @@ type ClientConn struct {
nread, nwritten int
pipereq map[*Request]uint
pipe textproto.Pipeline
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 {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment