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 { ...@@ -211,7 +211,8 @@ type ClientConn struct {
nread, nwritten int nread, nwritten int
pipereq map[*Request]uint 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 // 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 { ...@@ -220,7 +221,20 @@ func NewClientConn(c net.Conn, r *bufio.Reader) *ClientConn {
if r == nil { if r == nil {
r = bufio.NewReader(c) 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 // Close detaches the ClientConn and returns the underlying connection as well
...@@ -281,7 +295,7 @@ func (cc *ClientConn) Write(req *Request) (err os.Error) { ...@@ -281,7 +295,7 @@ func (cc *ClientConn) Write(req *Request) (err os.Error) {
} }
cc.lk.Unlock() cc.lk.Unlock()
err = req.Write(c) err = cc.writeReq(req, c)
cc.lk.Lock() cc.lk.Lock()
defer cc.lk.Unlock() defer cc.lk.Unlock()
if err != nil { 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