| 75 | } |
| 76 | |
| 77 | func (m *Meta) WriteTo(w io.Writer) (nr int64, err error) { |
| 78 | if m.req != nil { |
| 79 | fprintf(&nr, &err, w, "Type: request\r\n") |
| 80 | } else if m.resp != nil { |
| 81 | fprintf(&nr, &err, w, "Type: response\r\n") |
| 82 | } |
| 83 | fprintf(&nr, &err, w, "ReceivedAt: %v\r\n", m.t) |
| 84 | fprintf(&nr, &err, w, "Session: %d\r\n", m.sess) |
| 85 | fprintf(&nr, &err, w, "From: %v\r\n", m.from) |
| 86 | if m.err != nil { |
| 87 | // note the empty response |
| 88 | fprintf(&nr, &err, w, "Error: %v\r\n\r\n\r\n\r\n", m.err) |
| 89 | } else if m.req != nil { |
| 90 | fprintf(&nr, &err, w, "\r\n") |
| 91 | buf, err2 := httputil.DumpRequest(m.req, false) |
| 92 | if err2 != nil { |
| 93 | return nr, err2 |
| 94 | } |
| 95 | write(&nr, &err, w, buf) |
| 96 | } else if m.resp != nil { |
| 97 | fprintf(&nr, &err, w, "\r\n") |
| 98 | buf, err2 := httputil.DumpResponse(m.resp, false) |
| 99 | if err2 != nil { |
| 100 | return nr, err2 |
| 101 | } |
| 102 | write(&nr, &err, w, buf) |
| 103 | } |
| 104 | return |
| 105 | } |
| 106 | |
| 107 | // HttpLogger is an asynchronous HTTP request/response logger. It traces |
| 108 | // requests and responses headers in a "log" file in logger directory and dumps |