57 lines
926 B
Go
57 lines
926 B
Go
|
package request
|
||
|
|
||
|
import (
|
||
|
"git.xdrm.io/gws/internal/http/reader"
|
||
|
"fmt"
|
||
|
"io"
|
||
|
)
|
||
|
|
||
|
// Parse parses a byte array build a request object
|
||
|
func Parse(r io.Reader) (request *T, err error) {
|
||
|
|
||
|
/* (1) Get chunk reader */
|
||
|
cr, err := reader.NewReader(r)
|
||
|
if err != nil {
|
||
|
return nil, fmt.Errorf("Error while creating chunk reader: %s", err)
|
||
|
}
|
||
|
|
||
|
/* (2) Init request */
|
||
|
req := new(T)
|
||
|
|
||
|
/* (3) Parse header line by line */
|
||
|
for {
|
||
|
|
||
|
line, err := cr.Read()
|
||
|
if err == io.EOF {
|
||
|
fmt.Printf("END OF READING\n");
|
||
|
break
|
||
|
}
|
||
|
|
||
|
if err != nil {
|
||
|
return nil, fmt.Errorf("Cannot read from reader: %s", err)
|
||
|
}
|
||
|
|
||
|
req.parseHeader(line)
|
||
|
|
||
|
if req.Err != nil {
|
||
|
return nil, fmt.Errorf("Parsing error: %s\n", req.Err);
|
||
|
}
|
||
|
|
||
|
// fmt.Printf("Read line: %s\n", line)
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
/* (2) GET {uri} HTTP/{version}
|
||
|
---------------------------------------------------------*/
|
||
|
/* (1) Break apart */
|
||
|
|
||
|
|
||
|
|
||
|
/* (1) Check method */
|
||
|
return nil, nil
|
||
|
|
||
|
}
|