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:
parent
7ea8cdaabd
commit
a93f70c21a
@ -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 {
|
||||
|
Loading…
Reference in New Issue
Block a user