diff options
author | Shivansh Vij <shivanshvij@loopholelabs.io> | 2021-11-08 00:44:02 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-11-08 09:44:02 +0100 |
commit | 2ca01c7efb6dcd2d75b36571c857847b9a1b2592 (patch) | |
tree | 2c8c8013bb8a59500e1e78b0f75869a48111705d /status.go | |
parent | Fix lint (diff) | |
download | fasthttp-2ca01c7efb6dcd2d75b36571c857847b9a1b2592.tar.gz fasthttp-2ca01c7efb6dcd2d75b36571c857847b9a1b2592.tar.bz2 fasthttp-2ca01c7efb6dcd2d75b36571c857847b9a1b2592.zip |
fix: Status Line parsing and writing (#1135)
* Adding zero-allocation uint64 to byte slice conversion and fixing the ResponseHeader.SetStatusLine function call signature
* Removing unnecessary i2b function
* Fixing various bugs
* Adding test cases
* Commenting AppendStatusLine
* Update status.go
Co-authored-by: Erik Dubbelboer <erik@dubbelboer.com>
* Update header.go
Co-authored-by: Erik Dubbelboer <erik@dubbelboer.com>
* Cleaning up references to strHTTP11, using formatStatusLine for invalidStatusLine, and making `appendStatusLine` an unexported function
Issue: https://github.com/valyala/fasthttp/issues/1132
* Fixing merge conflicts
Issue: https://github.com/valyala/fasthttp/issues/1132
* Replacing []byte{} with nil in some test cases
Issue: https://github.com/valyala/fasthttp/issues/1132
* Cleaning up parsing first line, and improving StatusMessage function
Issue: https://github.com/valyala/fasthttp/issues/1132
* Fixing as per PR
* Update header.go
Co-authored-by: Erik Dubbelboer <erik@dubbelboer.com>
* Update header.go
Co-authored-by: Erik Dubbelboer <erik@dubbelboer.com>
* Fixing as per requested changes
* Update header_test.go
Co-authored-by: Erik Dubbelboer <erik@dubbelboer.com>
Co-authored-by: Erik Dubbelboer <erik@dubbelboer.com>
Diffstat (limited to 'status.go')
-rw-r--r-- | status.go | 46 |
1 files changed, 15 insertions, 31 deletions
@@ -1,7 +1,6 @@ package fasthttp import ( - "fmt" "strconv" ) @@ -81,7 +80,7 @@ const ( ) var ( - statusLines = make([][]byte, statusMessageMax+1) + unknownStatusCode = "Unknown Status Code" statusMessages = []string{ StatusContinue: "Continue", @@ -155,39 +154,24 @@ var ( // StatusMessage returns HTTP status message for the given status code. func StatusMessage(statusCode int) string { if statusCode < statusMessageMin || statusCode > statusMessageMax { - return "Unknown Status Code" + return unknownStatusCode } - s := statusMessages[statusCode] - if s == "" { - s = "Unknown Status Code" + if s := statusMessages[statusCode]; s != "" { + return s } - return s + return unknownStatusCode } -func init() { - // Fill all valid status lines - for i := 0; i < len(statusLines); i++ { - statusLines[i] = []byte(fmt.Sprintf("HTTP/1.1 %d %s\r\n", i, StatusMessage(i))) +func formatStatusLine(dst []byte, protocol []byte, statusCode int, statusText []byte) []byte { + dst = append(dst, protocol...) + dst = append(dst, ' ') + dst = strconv.AppendInt(dst, int64(statusCode), 10) + dst = append(dst, ' ') + if len(statusText) == 0 { + dst = append(dst, s2b(StatusMessage(statusCode))...) + } else { + dst = append(dst, statusText...) } -} - -func statusLine(statusCode int) []byte { - if statusCode < 0 || statusCode > statusMessageMax { - return invalidStatusLine(statusCode) - } - - return statusLines[statusCode] -} - -func invalidStatusLine(statusCode int) []byte { - statusText := StatusMessage(statusCode) - // xxx placeholder of status code - var line = make([]byte, 0, len("HTTP/1.1 xxx \r\n")+len(statusText)) - line = append(line, "HTTP/1.1 "...) - line = strconv.AppendInt(line, int64(statusCode), 10) - line = append(line, ' ') - line = append(line, statusText...) - line = append(line, "\r\n"...) - return line + return append(dst, strCRLF...) } |