diff --git a/cmd/circologd/http.go b/cmd/circologd/http.go index 5275780..5832a11 100644 --- a/cmd/circologd/http.go +++ b/cmd/circologd/http.go @@ -1,7 +1,10 @@ package main import ( + "fmt" "net/http" + "os" + "strconv" "time" "git.lattuga.net/boyska/circolog" @@ -21,9 +24,45 @@ func getHTTPHandler(hub circolog.Hub) http.HandlerFunc { Nofollow: true} hub.Register <- client + err := r.ParseForm() + if err != nil { + fmt.Fprintln(os.Stderr, "error parsing http request", err) + } + // Looking for known parameter in the request + // TODO: write specialized function + var requestMessageLen int + if reqL, ok := r.Form["l"]; ok { + var err error + switch { + case len(reqL) == 1: + requestMessageLen, err = strconv.Atoi(reqL[0]) + if requestMessageLen <= 0 { + fmt.Fprintln(os.Stderr, "malformed request, l non positive:", requestMessageLen) + //requestMessageLen := 0 + } + if err != nil { + fmt.Fprintln(os.Stderr, "malformed request on parameter l:", err) + } + case len(reqL) > 1: + requestMessageLen, err = strconv.Atoi(reqL[len(reqL)-1]) + fmt.Fprintln(os.Stderr, "multiple values of l parameter, taking last:", + requestMessageLen) + if err != nil { + fmt.Fprintln(os.Stderr, "malformed request on parameter l:", err) + } + default: + fmt.Fprintln(os.Stderr, "empty parameter l in request") + } + } + + i := 1 for x := range client.Messages { w.Write([]byte(circolog.FormatSyslog(x))) w.Write([]byte("\n")) + if requestMessageLen != 0 && i >= requestMessageLen { + break + } + i++ } } }