MEDIUM: http: improve error capture reports

A number of important information were missing from the error captures, so
let's improve them. Now we also log source port, session flags, transaction
flags, message flags, pending output bytes, expected buffer wrapping position,
total bytes transferred, message chunk length, and message body length.

As such, the output format has slightly evolved and the source address moved
to the third line :

[08/May/2012:11:14:36.341] frontend echo (#1): invalid request
  backend echo (#1), server <NONE> (#-1), event #1
  src 127.0.0.1:40616, session #4, session flags 0x00000000
  HTTP msg state 26, msg flags 0x00000000, tx flags 0x00000000
  HTTP chunk len 0 bytes, HTTP body len 0 bytes
  buffer flags 0x00909002, out 0 bytes, total 28 bytes
  pending 28 bytes, wrapping at 8030, error at position 7:

  00000  GET / /?t=20000 HTTP/1.1\r\n
  00026  \r\n

[08/May/2012:11:13:13.426] backend echo (#1) : invalid response
  frontend echo (#1), server local (#1), event #0
  src 127.0.0.1:40615, session #1, session flags 0x0000044e
  HTTP msg state 32, msg flags 0x0000000e, tx flags 0x08200000
  HTTP chunk len 0 bytes, HTTP body len 20 bytes
  buffer flags 0x00008002, out 81 bytes, total 92 bytes
  pending 11 bytes, wrapping at 7949, error at position 9:

  00000  Foo: bar\r\r\n
diff --git a/src/dumpstats.c b/src/dumpstats.c
index 465844f..ae19db7 100644
--- a/src/dumpstats.c
+++ b/src/dumpstats.c
@@ -3925,43 +3925,55 @@
 
 			char pn[INET6_ADDRSTRLEN];
 			struct tm tm;
+			int port;
 
 			get_localtime(es->when.tv_sec, &tm);
 			chunk_printf(&msg, " \n[%02d/%s/%04d:%02d:%02d:%02d.%03d]",
 				     tm.tm_mday, monthname[tm.tm_mon], tm.tm_year+1900,
 				     tm.tm_hour, tm.tm_min, tm.tm_sec, (int)(es->when.tv_usec/1000));
 
-			addr_to_str(&es->src, pn, sizeof(pn));
+			switch (addr_to_str(&es->src, pn, sizeof(pn))) {
+			case AF_INET:
+			case AF_INET6:
+				port = get_host_port(&es->src);
+				break;
+			default:
+				port = 0;
+			}
+
 			switch (si->applet.ctx.errors.buf) {
 			case 0:
 				chunk_printf(&msg,
 					     " frontend %s (#%d): invalid request\n"
-					     "  src %s, session #%d, backend %s (#%d), server %s (#%d)\n"
-					     "  HTTP internal state %d, buffer flags 0x%08x, event #%u\n"
-					     "  request length %d bytes, error at position %d:\n \n",
+					     "  backend %s (#%d)",
 					     si->applet.ctx.errors.px->id, si->applet.ctx.errors.px->uuid,
-					     pn, es->sid, (es->oe->cap & PR_CAP_BE) ? es->oe->id : "<NONE>",
-					     (es->oe->cap & PR_CAP_BE) ? es->oe->uuid : -1,
-					     es->srv ? es->srv->id : "<NONE>",
-					     es->srv ? es->srv->puid : -1,
-					     es->state, es->flags, es->ev_id,
-					     es->len, es->pos);
+					     (es->oe->cap & PR_CAP_BE) ? es->oe->id : "<NONE>",
+					     (es->oe->cap & PR_CAP_BE) ? es->oe->uuid : -1);
 				break;
 			case 1:
 				chunk_printf(&msg,
 					     " backend %s (#%d) : invalid response\n"
-					     "  src %s, session #%d, frontend %s (#%d), server %s (#%d)\n"
-					     "  HTTP internal state %d, buffer flags 0x%08x, event #%u\n"
-					     "  response length %d bytes, error at position %d:\n \n",
+					     "  frontend %s (#%d)",
 					     si->applet.ctx.errors.px->id, si->applet.ctx.errors.px->uuid,
-					     pn, es->sid, es->oe->id, es->oe->uuid,
-					     es->srv ? es->srv->id : "<NONE>",
-					     es->srv ? es->srv->puid : -1,
-					     es->state, es->flags, es->ev_id,
-					     es->len, es->pos);
+					     es->oe->id, es->oe->uuid);
 				break;
 			}
 
+			chunk_printf(&msg,
+				     ", server %s (#%d), event #%u\n"
+				     "  src %s:%d, session #%d, session flags 0x%08x\n"
+				     "  HTTP msg state %d, msg flags 0x%08x, tx flags 0x%08x\n"
+				     "  HTTP chunk len %lld bytes, HTTP body len %lld bytes\n"
+				     "  buffer flags 0x%08x, out %d bytes, total %lld bytes\n"
+				     "  pending %d bytes, wrapping at %d, error at position %d:\n \n",
+				     es->srv ? es->srv->id : "<NONE>", es->srv ? es->srv->puid : -1,
+				     es->ev_id,
+				     pn, port, es->sid, es->s_flags,
+				     es->state, es->m_flags, es->t_flags,
+				     es->m_clen, es->m_blen,
+				     es->b_flags, es->b_out, es->b_tot,
+				     es->len, es->b_wrap, es->pos);
+
 			if (bi_putchk(si->ib, &msg) == -1) {
 				/* Socket buffer full. Let's try again later from the same point */
 				return 0;