- Reorganize internal packages and overall project structure - Update imports and wiring to match the new layout - Separate HTTP parsing and streaming from the server package - Separate middleware from the server package - Separate session registry from the session package - Move HTTP, HTTPS, and TCP servers to the transport package - Session package no longer starts the TCP server directly - Server package no longer starts HTTP/HTTPS servers on initialization - Forwarder no longer handles accepting TCP requests - Move session details to the types package - HTTP/HTTPS initialization is now the responsibility of main
50 lines
879 B
Go
50 lines
879 B
Go
package header
|
|
|
|
import (
|
|
"bufio"
|
|
"fmt"
|
|
)
|
|
|
|
func NewRequest(r interface{}) (RequestHeader, error) {
|
|
switch v := r.(type) {
|
|
case []byte:
|
|
return parseHeadersFromBytes(v)
|
|
case *bufio.Reader:
|
|
return parseHeadersFromReader(v)
|
|
default:
|
|
return nil, fmt.Errorf("unsupported type: %T", r)
|
|
}
|
|
}
|
|
|
|
func (req *requestHeader) Value(key string) string {
|
|
val, ok := req.headers[key]
|
|
if !ok {
|
|
return ""
|
|
}
|
|
return val
|
|
}
|
|
|
|
func (req *requestHeader) Set(key string, value string) {
|
|
req.headers[key] = value
|
|
}
|
|
|
|
func (req *requestHeader) Remove(key string) {
|
|
delete(req.headers, key)
|
|
}
|
|
|
|
func (req *requestHeader) GetMethod() string {
|
|
return req.method
|
|
}
|
|
|
|
func (req *requestHeader) GetPath() string {
|
|
return req.path
|
|
}
|
|
|
|
func (req *requestHeader) GetVersion() string {
|
|
return req.version
|
|
}
|
|
|
|
func (req *requestHeader) Finalize() []byte {
|
|
return finalize(req.startLine, req.headers)
|
|
}
|