-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Significant extension to http.Response, which now adheres to the
usage pattern of http.Request and paves the way to persistent connection handling. R=rsc CC=golang-dev https://golang.org/cl/185043
- Loading branch information
Showing
7 changed files
with
550 additions
and
96 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,56 @@ | ||
// Copyright 2009 The Go Authors. All rights reserved. | ||
// Use of this source code is governed by a BSD-style | ||
// license that can be found in the LICENSE file. | ||
|
||
package http | ||
|
||
import ( | ||
"io" | ||
"os" | ||
"strconv" | ||
) | ||
|
||
// NewChunkedWriter returns a new writer that translates writes into HTTP | ||
// "chunked" format before writing them to w. Closing the returned writer | ||
// sends the final 0-length chunk that marks the end of the stream. | ||
func NewChunkedWriter(w io.Writer) io.WriteCloser { | ||
return &chunkedWriter{w} | ||
} | ||
|
||
// Writing to ChunkedWriter translates to writing in HTTP chunked Transfer | ||
// Encoding wire format to the undering Wire writer. | ||
type chunkedWriter struct { | ||
Wire io.Writer | ||
} | ||
|
||
// Write the contents of data as one chunk to Wire. | ||
// NOTE: Note that the corresponding chunk-writing procedure in Conn.Write has | ||
// a bug since it does not check for success of io.WriteString | ||
func (cw *chunkedWriter) Write(data []byte) (n int, err os.Error) { | ||
|
||
// Don't send 0-length data. It looks like EOF for chunked encoding. | ||
if len(data) == 0 { | ||
return 0, nil | ||
} | ||
|
||
head := strconv.Itob(len(data), 16) + "\r\n" | ||
|
||
if _, err = io.WriteString(cw.Wire, head); err != nil { | ||
return 0, err | ||
} | ||
if n, err = cw.Wire.Write(data); err != nil { | ||
return | ||
} | ||
if n != len(data) { | ||
err = io.ErrShortWrite | ||
return | ||
} | ||
_, err = io.WriteString(cw.Wire, "\r\n") | ||
|
||
return | ||
} | ||
|
||
func (cw *chunkedWriter) Close() os.Error { | ||
_, err := io.WriteString(cw.Wire, "0\r\n") | ||
return err | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.