aboutsummaryrefslogtreecommitdiff
path: root/server.go
diff options
context:
space:
mode:
authoradnano <[email protected]>2020-09-21 21:31:09 -0400
committeradnano <[email protected]>2020-09-21 21:31:09 -0400
commit01294f666143d81700812a76ea020ad7b6a37e25 (patch)
treefb9f16e33d0e8e1fae4e4109b8f111d47c77528a /server.go
parentProvide Handler with client remote address (diff)
downloadgo-gemini-01294f666143d81700812a76ea020ad7b6a37e25.tar.xz
go-gemini-01294f666143d81700812a76ea020ad7b6a37e25.zip
Refactor client requests and server responses
Diffstat (limited to 'server.go')
-rw-r--r--server.go39
1 files changed, 25 insertions, 14 deletions
diff --git a/server.go b/server.go
index 4cd7f1e..ad93738 100644
--- a/server.go
+++ b/server.go
@@ -92,22 +92,33 @@ func (s *Server) Serve(ln net.Listener) error {
return err
}
- req, err := readLine(rw)
- if err != nil {
- continue
- }
- url, err := url.Parse(req)
- if err != nil {
- continue
+ var resp *Response
+
+ if rawurl, err := readLine(rw); err != nil {
+ resp = &Response{
+ Status: StatusBadRequest,
+ Meta: "Bad request",
+ }
+ } else if len(rawurl) > 1024 {
+ resp = &Response{
+ Status: StatusBadRequest,
+ Meta: "URL exceeds 1024 bytes",
+ }
+ } else if url, err := url.Parse(rawurl); err != nil {
+ resp = &Response{
+ Status: StatusBadRequest,
+ Meta: "Invalid URL",
+ }
+ } else {
+ // Gather information about the request
+ reqInfo := &RequestInfo{
+ URL: url,
+ Certificates: rw.(*tls.Conn).ConnectionState().PeerCertificates,
+ RemoteAddr: rw.RemoteAddr(),
+ }
+ resp = s.Handler.Serve(reqInfo)
}
- // Gather information about the request
- reqInfo := &RequestInfo{
- URL: url,
- Certificates: rw.(*tls.Conn).ConnectionState().PeerCertificates,
- RemoteAddr: rw.RemoteAddr(),
- }
- resp := s.Handler.Serve(reqInfo)
resp.Write(rw)
rw.Close()
}