make some fields public

This commit is contained in:
gr1ffon
2025-11-14 03:40:56 +03:00
parent a839e42b78
commit 7b3ed68ceb
4 changed files with 68 additions and 68 deletions

View File

@@ -28,7 +28,7 @@ const frameHeaderLen = 16
const maxSmallResponseSize = 4096
type responseWriter struct {
type ResponseWriter struct {
str *Stream
conn *Conn
@@ -54,21 +54,21 @@ type responseWriter struct {
}
var (
_ http.ResponseWriter = &responseWriter{}
_ http.Flusher = &responseWriter{}
_ Hijacker = &responseWriter{}
_ HTTPStreamer = &responseWriter{}
_ http.ResponseWriter = &ResponseWriter{}
_ http.Flusher = &ResponseWriter{}
_ Hijacker = &ResponseWriter{}
_ HTTPStreamer = &ResponseWriter{}
// make sure that we implement (some of the) methods used by the http.ResponseController
_ interface {
SetReadDeadline(time.Time) error
SetWriteDeadline(time.Time) error
Flush()
FlushError() error
} = &responseWriter{}
} = &ResponseWriter{}
)
func newResponseWriter(str *Stream, conn *Conn, isHead bool, logger *slog.Logger) *responseWriter {
return &responseWriter{
func newResponseWriter(str *Stream, conn *Conn, isHead bool, logger *slog.Logger) *ResponseWriter {
return &ResponseWriter{
str: str,
conn: conn,
header: http.Header{},
@@ -78,11 +78,11 @@ func newResponseWriter(str *Stream, conn *Conn, isHead bool, logger *slog.Logger
}
}
func (w *responseWriter) Header() http.Header {
func (w *ResponseWriter) Header() http.Header {
return w.header
}
func (w *responseWriter) WriteHeader(status int) {
func (w *ResponseWriter) WriteHeader(status int) {
if w.headerComplete {
return
}
@@ -124,7 +124,7 @@ func (w *responseWriter) WriteHeader(status int) {
}
}
func (w *responseWriter) sniffContentType(p []byte) {
func (w *ResponseWriter) sniffContentType(p []byte) {
// If no content type, apply sniffing algorithm to body.
// We can't use `w.header.Get` here since if the Content-Type was set to nil, we shouldn't do sniffing.
_, haveType := w.header["Content-Type"]
@@ -136,7 +136,7 @@ func (w *responseWriter) sniffContentType(p []byte) {
}
}
func (w *responseWriter) Write(p []byte) (int, error) {
func (w *ResponseWriter) Write(p []byte) (int, error) {
bodyAllowed := bodyAllowedForStatus(w.status)
if !w.headerComplete {
w.sniffContentType(p)
@@ -167,7 +167,7 @@ func (w *responseWriter) Write(p []byte) (int, error) {
return w.doWrite(p)
}
func (w *responseWriter) doWrite(p []byte) (int, error) {
func (w *ResponseWriter) doWrite(p []byte) (int, error) {
if !w.headerWritten {
w.sniffContentType(w.smallResponseBuf)
if err := w.writeHeader(w.status); err != nil {
@@ -210,7 +210,7 @@ func (w *responseWriter) doWrite(p []byte) (int, error) {
return n, nil
}
func (w *responseWriter) writeHeader(status int) error {
func (w *ResponseWriter) writeHeader(status int) error {
var headerFields []qlog.HeaderField // only used for qlog
var headers bytes.Buffer
enc := qpack.NewEncoder(&headers)
@@ -265,7 +265,7 @@ func (w *responseWriter) writeHeader(status int) error {
return err
}
func (w *responseWriter) FlushError() error {
func (w *ResponseWriter) FlushError() error {
if !w.headerComplete {
w.WriteHeader(http.StatusOK)
}
@@ -273,7 +273,7 @@ func (w *responseWriter) FlushError() error {
return err
}
func (w *responseWriter) flushTrailers() {
func (w *ResponseWriter) flushTrailers() {
if w.trailerWritten {
return
}
@@ -282,7 +282,7 @@ func (w *responseWriter) flushTrailers() {
}
}
func (w *responseWriter) Flush() {
func (w *ResponseWriter) Flush() {
if err := w.FlushError(); err != nil {
if w.logger != nil {
w.logger.Debug("could not flush to stream", "error", err)
@@ -292,7 +292,7 @@ func (w *responseWriter) Flush() {
// declareTrailer adds a trailer to the trailer list, while also validating that the trailer has a
// valid name.
func (w *responseWriter) declareTrailer(k string) {
func (w *ResponseWriter) declareTrailer(k string) {
if !httpguts.ValidTrailerHeader(k) {
// Forbidden by RFC 9110, section 6.5.1.
w.logger.Debug("ignoring invalid trailer", slog.String("header", k))
@@ -308,7 +308,7 @@ func (w *responseWriter) declareTrailer(k string) {
// value set. This is possible by adding trailers to the "Trailers" header
// but never actually setting those names as trailers in the course of handling
// the request. In that case, this check may save us some allocations.
func (w *responseWriter) hasNonEmptyTrailers() bool {
func (w *ResponseWriter) hasNonEmptyTrailers() bool {
for trailer := range w.trailers {
if _, ok := w.header[trailer]; ok {
return true
@@ -318,7 +318,7 @@ func (w *responseWriter) hasNonEmptyTrailers() bool {
}
// writeTrailers will write trailers to the stream if there are any.
func (w *responseWriter) writeTrailers() error {
func (w *ResponseWriter) writeTrailers() error {
// promote headers added via "Trailer:" convention as trailers, these can be added after
// streaming the status/headers have been written.
for k := range w.header {
@@ -360,23 +360,23 @@ func (w *responseWriter) writeTrailers() error {
return err
}
func (w *responseWriter) HTTPStream() *Stream {
func (w *ResponseWriter) HTTPStream() *Stream {
w.hijacked = true
w.Flush()
return w.str
}
func (w *responseWriter) wasStreamHijacked() bool { return w.hijacked }
func (w *ResponseWriter) wasStreamHijacked() bool { return w.hijacked }
func (w *responseWriter) Connection() *Conn {
func (w *ResponseWriter) Connection() *Conn {
return w.conn
}
func (w *responseWriter) SetReadDeadline(deadline time.Time) error {
func (w *ResponseWriter) SetReadDeadline(deadline time.Time) error {
return w.str.SetReadDeadline(deadline)
}
func (w *responseWriter) SetWriteDeadline(deadline time.Time) error {
func (w *ResponseWriter) SetWriteDeadline(deadline time.Time) error {
return w.str.SetWriteDeadline(deadline)
}