diff --git a/src/parser/main.go b/src/parser/main.go index 05b2f2e..0067404 100644 --- a/src/parser/main.go +++ b/src/parser/main.go @@ -6,9 +6,34 @@ import ( "strings" ) -func ReadRequest(reader *bufio.Reader) ([]string, string, error) { - var message []byte +type HTTPHeader struct { + Version string + Method string + Path string + Lines map[string] string +} +func ParseHeader(content string) (HTTPHeader, error) { + lines := strings.Split(content, "\r\n") + startingLine := strings.Split(lines[0], " ") + Header := HTTPHeader{ + Method: startingLine[0], + Path: startingLine[1], + Version: startingLine[2], + Lines: make(map[string]string), + } + for _, line := range lines[1:] { + if line == "" { + break + } + args := strings.Split(line, ": ") + Header.Lines[args[0]] = args[1] + } + return Header, nil +} + +func ReadRequest(reader *bufio.Reader) (HTTPHeader, string, error) { + var message []byte buffer := make([]byte, 8) for { @@ -27,19 +52,11 @@ func ReadRequest(reader *bufio.Reader) ([]string, string, error) { break } } - - parts := strings.Split(string(message), "\r\n\r\n") - - headerLines := strings.Split(parts[0], "\r\n") - body := parts[1] - - if len(parts) != 2 { - return nil, "", fmt.Errorf("Wrong") - } - - return headerLines, body, nil + + header, _ := ParseHeader(string(message)) + body := strings.Split(string(message), "\r\n\r\n")[1] + return header, body, nil } - func ParseURL(path string) (string, map[string]string, error) { //Décomposition du chemin et des paramètres url := strings.Split(path, "?") @@ -64,3 +81,12 @@ func ParseURL(path string) (string, map[string]string, error) { } return url[0], parameters, nil } + +func CheckRequestValidity(header HTTPHeader) bool { + + + + + + return true +} diff --git a/src/router/main.go b/src/router/main.go index 830660a..9cd3ae5 100644 --- a/src/router/main.go +++ b/src/router/main.go @@ -18,7 +18,7 @@ func (router *Router) HandleClient(conn net.Conn) error { return err } - response := buildResponse(router.Handle(strings.Split(requestHeader[0], " ")[0], strings.Split(requestHeader[0], " ")[1])) + response := buildResponse(router.Handle(requestHeader.Method, requestHeader.Path)) conn.Write([]byte(response))