aboutsummaryrefslogtreecommitdiff
path: root/status.go
diff options
context:
space:
mode:
authorGravatar Shivansh Vij <shivanshvij@loopholelabs.io> 2021-11-08 00:44:02 -0800
committerGravatar GitHub <noreply@github.com> 2021-11-08 09:44:02 +0100
commit2ca01c7efb6dcd2d75b36571c857847b9a1b2592 (patch)
tree2c8c8013bb8a59500e1e78b0f75869a48111705d /status.go
parentFix lint (diff)
downloadfasthttp-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.go46
1 files changed, 15 insertions, 31 deletions
diff --git a/status.go b/status.go
index 28d1286..c88ba11 100644
--- a/status.go
+++ b/status.go
@@ -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...)
}