]> Cypherpunks repositories - gostls13.git/commitdiff
http: make NewChunkedReader public
authorAndrew Balholm <andybalholm@gmail.com>
Wed, 29 Jun 2011 19:27:53 +0000 (12:27 -0700)
committerBrad Fitzpatrick <bradfitz@golang.org>
Wed, 29 Jun 2011 19:27:53 +0000 (12:27 -0700)
R=golang-dev, bradfitz
CC=golang-dev
https://golang.org/cl/4634112

src/pkg/http/chunked.go
src/pkg/http/request.go
src/pkg/http/transfer.go

index 59121c5a23e39d0017d648af2fc6f8b9074b6948..6c23e691f023ad1bff77348c99bccec5c4122c24 100644 (file)
@@ -9,6 +9,7 @@ import (
        "log"
        "os"
        "strconv"
+       "bufio"
 )
 
 // NewChunkedWriter returns a new writer that translates writes into HTTP
@@ -64,3 +65,13 @@ func (cw *chunkedWriter) Close() os.Error {
        _, err := io.WriteString(cw.Wire, "0\r\n")
        return err
 }
+
+// NewChunkedReader returns a new reader that translates the data read from r
+// out of HTTP "chunked" format before returning it. 
+// The reader returns os.EOF when the final 0-length chunk is read.
+//
+// NewChunkedReader is not needed by normal applications. The http package
+// automatically decodes chunking when reading response bodies.
+func NewChunkedReader(r *bufio.Reader) io.Reader {
+       return &chunkedReader{r: r}
+}
index 456476a2129c6589ca46c8f944efcc03fe0d07a5..2917cc1e6e18d37d2f8b6eafabb9fd56dadab2f0 100644 (file)
@@ -428,10 +428,6 @@ type chunkedReader struct {
        err os.Error
 }
 
-func newChunkedReader(r *bufio.Reader) *chunkedReader {
-       return &chunkedReader{r: r}
-}
-
 func (cr *chunkedReader) beginChunk() {
        // chunk-size CRLF
        var line string
index 2502c1fee11f479d48fe64900700c19d0388cacc..b65d99a6fd09fbb1f57be638788a7f0167b69602 100644 (file)
@@ -279,7 +279,7 @@ func readTransfer(msg interface{}, r *bufio.Reader) (err os.Error) {
        // or close connection when finished, since multipart is not supported yet
        switch {
        case chunked(t.TransferEncoding):
-               t.Body = &body{Reader: newChunkedReader(r), hdr: msg, r: r, closing: t.Close}
+               t.Body = &body{Reader: NewChunkedReader(r), hdr: msg, r: r, closing: t.Close}
        case t.ContentLength >= 0:
                // TODO: limit the Content-Length. This is an easy DoS vector.
                t.Body = &body{Reader: io.LimitReader(r, t.ContentLength), closing: t.Close}