diff options
| author | Adnan Maolood <[email protected]> | 2021-02-14 15:50:41 -0500 |
|---|---|---|
| committer | Adnan Maolood <[email protected]> | 2021-02-14 15:50:41 -0500 |
| commit | 7c703e95de8b1d96c99dd4246f9946892dc4e832 (patch) | |
| tree | ceb64bd791f6622a076f88c6eb79a8a8765ceab5 /request.go | |
| parent | server: Populate Request.RemoteAddr field (diff) | |
| download | go-gemini-7c703e95de8b1d96c99dd4246f9946892dc4e832.tar.xz go-gemini-7c703e95de8b1d96c99dd4246f9946892dc4e832.zip | |
Update documentation
Diffstat (limited to 'request.go')
| -rw-r--r-- | request.go | 49 |
1 files changed, 33 insertions, 16 deletions
@@ -9,15 +9,20 @@ import ( "net/url" ) -// Request represents a Gemini request. +// A Request represents a Gemini request received by a server or to be sent +// by a client. +// +// The field semantics differ slightly between client and server usage. +// In addition to the notes on the fields below, see the documentation +// for Request.Write and TODO: RoundTripper. type Request struct { - // URL specifies the URL being requested. + // URL specifies the URL being requested (for server + // requests) or the URL to access (for client requests). URL *url.URL - // For client requests, Host specifies the host on which the URL is sought. + // For client requests, Host specifies the server to connect to. // Host must contain a port. - // - // This field is ignored by the server. + // This field is ignored by the Gemini server. Host string // Certificate specifies the TLS certificate to use for the request. @@ -26,20 +31,27 @@ type Request struct { // Certificate.Leaf is guaranteed to be non-nil. Certificate *tls.Certificate - // RemoteAddr allows servers and other software to record the network - // address that sent the request. - // - // This field is ignored by the client. + // RemoteAddr allows Gemini servers and other software to record + // the network address that sent the request, usually for + // logging. This field is not filled in by ReadRequest and + // has no defined format. The Gemini server in this package + // sets RemoteAddr to an "IP:port" address before invoking a + // handler. + // This field is ignored by the Gemini client. RemoteAddr net.Addr - // TLS allows servers and other software to record information about the TLS - // connection on which the request was received. - // - // This field is ignored by the client. + // TLS allows Gemini servers and other software to record + // information about the TLS connection on which the request + // was received. This field is not filled in by ReadRequest. + // The Gemini server in this package sets the field for + // TLS-enabled connections before invoking a handler; + // otherwise it leaves the field nil. + // This field is ignored by the Gemini client. TLS *tls.ConnectionState // Context specifies the context to use for client requests. // If Context is nil, the background context will be used. + // This field is ignored by the Gemini server. Context context.Context } @@ -68,10 +80,14 @@ func NewRequestFromURL(url *url.URL) *Request { } } -// ReadRequest reads a Gemini request from the provided io.Reader +// ReadRequest reads and parses an incoming request from r. +// +// ReadRequest is a low-level function and should only be used +// for specialized applications; most code should use the Server +// to read requests and handle them via the Handler interface. func ReadRequest(r io.Reader) (*Request, error) { // Read URL - br := bufio.NewReader(r) + br := bufio.NewReaderSize(r, 1026) rawurl, err := br.ReadString('\r') if err != nil { return nil, err @@ -99,7 +115,8 @@ func ReadRequest(r io.Reader) (*Request, error) { return &Request{URL: u}, nil } -// Write writes the Gemini request to the provided buffered writer. +// Write writes a Gemini request in wire format. +// This method consults the request URL only. func (r *Request) Write(w *bufio.Writer) error { url := r.URL.String() // User is invalid |