diff --git a/httpRequest.dump.go b/httpRequest.dump.go new file mode 100644 index 0000000..07ac38e --- /dev/null +++ b/httpRequest.dump.go @@ -0,0 +1,83 @@ +package httppb + +import ( + "fmt" +) + +func (pb *HttpRequest) DumpRemoteAddr() string { + return pb.RemoteAddr +} + +func (pb *HttpRequest) DumpUserAgent() string { + var all string + for param, values := range pb.Query { + for _, value := range values { + all += fmt.Sprint(" Query:", param, value) + } + } + // hostname := r.URL.Query().Get("hostname") + return pb.GetUserAgent() + all +} + +// todo: convert this code +func (pb *HttpRequest) DumpClient() { + /* + var host, url, proto, addr, agent string + + host = r.Host + url = r.URL.String() + proto = r.Proto + addr = r.RemoteAddr + agent = r.UserAgent() + + log.Warn(host, proto, addr, url, agent) + + fmt.Fprintln(accessf, time.Now(), host, proto, addr, url, agent) + // return + + fmt.Fprintln(clientf) + fmt.Fprintln(clientf, time.Now()) + // Basic request information + fmt.Fprintln(clientf, "Method:", r.Method) + fmt.Fprintln(clientf, "URL:", r.URL) + fmt.Fprintln(clientf, "Protocol:", r.Proto) + fmt.Fprintln(clientf, "Host:", r.Host) + fmt.Fprintln(clientf, "Remote Address:", r.RemoteAddr) + + // Headers + fmt.Fprintln(clientf, "Headers:") + for name, values := range r.Header { + for _, value := range values { + fmt.Fprintln(clientf, "Headers:", name, value) + } + } + + // Query parameters + fmt.Fprintln(clientf, "Query Parameters:") + for param, values := range r.URL.Query() { + for _, value := range values { + fmt.Fprintln(clientf, "Query:", param, value) + } + } + + // User-Agent + fmt.Fprintln(clientf, "User-Agent:", r.UserAgent()) + + // Content Length + fmt.Fprintln(clientf, "Content Length:", r.ContentLength) + + // Cookies + fmt.Fprintln(clientf, "Cookies:") + for _, cookie := range r.Cookies() { + fmt.Fprintln(clientf, cookie.Name, cookie.Value) + } + + // Request Body (if applicable) + if r.Body != nil { + body, err := ioutil.ReadAll(r.Body) + if err == nil { + fmt.Fprintln(clientf, "Body:", string(body)) + } + } + */ +} diff --git a/httpRequest.proto b/httpRequest.proto index f165c9b..82c04a0 100644 --- a/httpRequest.proto +++ b/httpRequest.proto @@ -25,6 +25,9 @@ message HttpRequest { // HttpRequest repre bytes serverData = 13; // the server response int64 serverDataLen = 14; // len(data) repeated string logs = 15; // use this to store whatever you want while the whole POST happens + string userAgent = 16; // client user-agent + map query = 17; // r.URL.Query() + string remoteAddr = 18; // r.RemoteAddr } message HttpRequests { // `autogenpb:marshal` `autogenpb:mutex` diff --git a/reqToPB.go b/reqToPB.go index 019ad77..3d34caa 100644 --- a/reqToPB.go +++ b/reqToPB.go @@ -53,6 +53,13 @@ func ReqToPB(r *http.Request) (*HttpRequest, error) { } } + query := make(map[string]string) + for param, values := range r.URL.Query() { + if len(values) > 0 { + query[param] = strings.Join(values, "\n") + } + } + msg, err := ioutil.ReadAll(r.Body) // Read the body as []byte r.Body.Close() // log.Info("TRYING TO MARSHAL bytes:", len(msg), err) @@ -67,6 +74,9 @@ func ReqToPB(r *http.Request) (*HttpRequest, error) { ClientData: msg, ClientDataLen: int64(len(msg)), Hostname: r.Header.Get("hostname"), + UserAgent: r.UserAgent(), + Query: query, + RemoteAddr: r.RemoteAddr, } pb.Route = cleanURL(r.URL.Path)