diff --git a/include/types/global.h b/include/types/global.h index 3da65f515..28632b722 100644 --- a/include/types/global.h +++ b/include/types/global.h @@ -131,7 +131,7 @@ extern int relative_pid; /* process id starting at 1 */ extern int actconn; /* # of active sessions */ extern int listeners; extern int jobs; /* # of active jobs */ -extern char *trash; +extern struct chunk trash; extern char *swap_buffer; extern int nb_oldpids; /* contains the number of old pids found */ extern const int zero; diff --git a/src/acl.c b/src/acl.c index 30a6d2d3d..adc89f3c6 100644 --- a/src/acl.c +++ b/src/acl.c @@ -1308,9 +1308,9 @@ static int acl_read_patterns_from_file( struct acl_keyword *aclkw, opaque = 0; pattern = NULL; args[1] = ""; - while (fgets(trash, global.tune.bufsize, file) != NULL) { + while (fgets(trash.str, trash.size, file) != NULL) { line++; - c = trash; + c = trash.str; /* ignore lines beginning with a dash */ if (*c == '#') diff --git a/src/appsession.c b/src/appsession.c index ec97336e3..a71f186c8 100644 --- a/src/appsession.c +++ b/src/appsession.c @@ -97,13 +97,9 @@ static struct task *appsession_refresh(struct task *t) if (tick_is_expired(element->expire, now_ms)) { if ((global.mode & MODE_DEBUG) && (!(global.mode & MODE_QUIET) || (global.mode & MODE_VERBOSE))) { - int len; - /* - on Linux NULL pointers are caught by sprintf, on solaris -> segfault - */ - len = sprintf(trash, "appsession_refresh: cleaning up expired Session '%s' on Server %s\n", - element->sessid, element->serverid?element->serverid:"(null)"); - if (write(1, trash, len) < 0) /* shut gcc warning */; + chunk_printf(&trash, "appsession_refresh: cleaning up expired Session '%s' on Server %s\n", + element->sessid, element->serverid?element->serverid:"(null)"); + if (write(1, trash.str, trash.len) < 0) /* shut gcc warning */; } /* delete the expired element from within the hash table */ LIST_DEL(&element->hash_list); diff --git a/src/cfgparse.c b/src/cfgparse.c index ef3be08fd..d1f18f7ab 100644 --- a/src/cfgparse.c +++ b/src/cfgparse.c @@ -582,7 +582,7 @@ int cfg_parse_global(const char *file, int linenum, char **args, int kwm) global.tune.bufsize = atol(args[1]); if (global.tune.maxrewrite >= global.tune.bufsize / 2) global.tune.maxrewrite = global.tune.bufsize / 2; - trash = realloc(trash, global.tune.bufsize); + chunk_init(&trash, realloc(trash.str, global.tune.bufsize), global.tune.bufsize); } else if (!strcmp(args[0], "tune.maxrewrite")) { if (*(args[1]) == 0) { @@ -1100,9 +1100,6 @@ int cfg_parse_global(const char *file, int linenum, char **args, int kwm) if (kwl->kw[index].section != CFG_GLOBAL) continue; if (strcmp(kwl->kw[index].kw, args[0]) == 0) { - /* prepare error message just in case */ - snprintf(trash, global.tune.bufsize, - "error near '%s' in '%s' section", args[0], "global"); rc = kwl->kw[index].parse(args, CFG_GLOBAL, NULL, NULL, file, linenum, &errmsg); if (rc < 0) { Alert("parsing [%s:%d] : %s\n", file, linenum, errmsg); @@ -2928,9 +2925,9 @@ int cfg_parse_listen(const char *file, int linenum, char **args, int kwm) goto out; } - expr = sample_parse_expr(args, &myidx, trash, global.tune.bufsize); + expr = sample_parse_expr(args, &myidx, trash.str, trash.size); if (!expr) { - Alert("parsing [%s:%d] : '%s': %s\n", file, linenum, args[0], trash); + Alert("parsing [%s:%d] : '%s': %s\n", file, linenum, args[0], trash.str); err_code |= ERR_ALERT | ERR_FATAL; goto out; } @@ -5308,8 +5305,6 @@ stats_error_parsing: continue; if (strcmp(kwl->kw[index].kw, args[0]) == 0) { /* prepare error message just in case */ - snprintf(trash, global.tune.bufsize, - "error near '%s' in %s section", args[0], cursection); rc = kwl->kw[index].parse(args, CFG_LISTEN, curproxy, &defproxy, file, linenum, &errmsg); if (rc < 0) { Alert("parsing [%s:%d] : %s\n", file, linenum, errmsg); @@ -6607,10 +6602,8 @@ out_uri_auth_compat: /* enable separate counters */ if (curproxy->options2 & PR_O2_SOCKSTAT) { listener->counters = (struct licounters *)calloc(1, sizeof(struct licounters)); - if (!listener->name) { - sprintf(trash, "sock-%d", listener->luid); - listener->name = strdup(trash); - } + if (!listener->name) + memprintf(&listener->name, "sock-%d", listener->luid); } if (curproxy->options & PR_O_TCP_NOLING) diff --git a/src/checks.c b/src/checks.c index 8e4954936..e3c8620c8 100644 --- a/src/checks.c +++ b/src/checks.c @@ -198,10 +198,8 @@ static void server_status_printf(struct chunk *msg, struct server *s, unsigned o * Show information in logs about failed health check if server is UP * or succeeded health checks if server is DOWN. */ -static void set_server_check_status(struct server *s, short status, char *desc) { - - struct chunk msg; - +static void set_server_check_status(struct server *s, short status, char *desc) +{ if (status == HCHK_STATUS_START) { s->result = SRV_CHK_UNKNOWN; /* no result yet */ s->check.desc[0] = '\0'; @@ -238,7 +236,7 @@ static void set_server_check_status(struct server *s, short status, char *desc) int health, rise, fall, state; - chunk_init(&msg, trash, global.tune.bufsize); + chunk_reset(&trash); /* FIXME begin: calculate local version of the health/rise/fall/state */ health = s->health; @@ -274,22 +272,22 @@ static void set_server_check_status(struct server *s, short status, char *desc) } /* FIXME end: calculate local version of the health/rise/fall/state */ - chunk_appendf(&msg, - "Health check for %sserver %s/%s %s%s", - s->state & SRV_BACKUP ? "backup " : "", - s->proxy->id, s->id, - (s->result & SRV_CHK_DISABLE)?"conditionally ":"", - (s->result & SRV_CHK_RUNNING)?"succeeded":"failed"); + chunk_appendf(&trash, + "Health check for %sserver %s/%s %s%s", + s->state & SRV_BACKUP ? "backup " : "", + s->proxy->id, s->id, + (s->result & SRV_CHK_DISABLE)?"conditionally ":"", + (s->result & SRV_CHK_RUNNING)?"succeeded":"failed"); - server_status_printf(&msg, s, SSP_O_HCHK, -1); + server_status_printf(&trash, s, SSP_O_HCHK, -1); - chunk_appendf(&msg, ", status: %d/%d %s", - (state & SRV_RUNNING) ? (health - rise + 1) : (health), - (state & SRV_RUNNING) ? (fall) : (rise), - (state & SRV_RUNNING)?"UP":"DOWN"); + chunk_appendf(&trash, ", status: %d/%d %s", + (state & SRV_RUNNING) ? (health - rise + 1) : (health), + (state & SRV_RUNNING) ? (fall) : (rise), + (state & SRV_RUNNING)?"UP":"DOWN"); - Warning("%s.\n", trash); - send_log(s->proxy, LOG_NOTICE, "%s.\n", trash); + Warning("%s.\n", trash.str); + send_log(s->proxy, LOG_NOTICE, "%s.\n", trash.str); } } @@ -393,7 +391,6 @@ static void shutdown_backup_sessions(struct proxy *px, int why) void set_server_down(struct server *s) { struct server *srv; - struct chunk msg; int xferred; if (s->state & SRV_MAINTAIN) { @@ -418,28 +415,28 @@ void set_server_down(struct server *s) */ xferred = redistribute_pending(s); - chunk_init(&msg, trash, global.tune.bufsize); + chunk_reset(&trash); if (s->state & SRV_MAINTAIN) { - chunk_appendf(&msg, - "%sServer %s/%s is DOWN for maintenance", s->state & SRV_BACKUP ? "Backup " : "", - s->proxy->id, s->id); + chunk_appendf(&trash, + "%sServer %s/%s is DOWN for maintenance", s->state & SRV_BACKUP ? "Backup " : "", + s->proxy->id, s->id); } else { - chunk_appendf(&msg, - "%sServer %s/%s is DOWN", s->state & SRV_BACKUP ? "Backup " : "", - s->proxy->id, s->id); + chunk_appendf(&trash, + "%sServer %s/%s is DOWN", s->state & SRV_BACKUP ? "Backup " : "", + s->proxy->id, s->id); - server_status_printf(&msg, s, - ((!s->track && !(s->proxy->options2 & PR_O2_LOGHCHKS))?SSP_O_HCHK:0), - xferred); + server_status_printf(&trash, s, + ((!s->track && !(s->proxy->options2 & PR_O2_LOGHCHKS)) ? SSP_O_HCHK : 0), + xferred); } - Warning("%s.\n", trash); + Warning("%s.\n", trash.str); /* we don't send an alert if the server was previously paused */ if (srv_was_paused) - send_log(s->proxy, LOG_NOTICE, "%s.\n", trash); + send_log(s->proxy, LOG_NOTICE, "%s.\n", trash.str); else - send_log(s->proxy, LOG_ALERT, "%s.\n", trash); + send_log(s->proxy, LOG_ALERT, "%s.\n", trash.str); if (prev_srv_count && s->proxy->srv_bck == 0 && s->proxy->srv_act == 0) set_backend_down(s->proxy); @@ -459,7 +456,6 @@ void set_server_down(struct server *s) void set_server_up(struct server *s) { struct server *srv; - struct chunk msg; int xferred; unsigned int old_state = s->state; @@ -510,24 +506,24 @@ void set_server_up(struct server *s) { */ xferred = check_for_pending(s); - chunk_init(&msg, trash, global.tune.bufsize); + chunk_reset(&trash); if (old_state & SRV_MAINTAIN) { - chunk_appendf(&msg, - "%sServer %s/%s is UP (leaving maintenance)", s->state & SRV_BACKUP ? "Backup " : "", - s->proxy->id, s->id); + chunk_appendf(&trash, + "%sServer %s/%s is UP (leaving maintenance)", s->state & SRV_BACKUP ? "Backup " : "", + s->proxy->id, s->id); } else { - chunk_appendf(&msg, - "%sServer %s/%s is UP", s->state & SRV_BACKUP ? "Backup " : "", - s->proxy->id, s->id); + chunk_appendf(&trash, + "%sServer %s/%s is UP", s->state & SRV_BACKUP ? "Backup " : "", + s->proxy->id, s->id); - server_status_printf(&msg, s, - ((!s->track && !(s->proxy->options2 & PR_O2_LOGHCHKS))?SSP_O_HCHK:0), - xferred); + server_status_printf(&trash, s, + ((!s->track && !(s->proxy->options2 & PR_O2_LOGHCHKS)) ? SSP_O_HCHK : 0), + xferred); } - Warning("%s.\n", trash); - send_log(s->proxy, LOG_NOTICE, "%s.\n", trash); + Warning("%s.\n", trash.str); + send_log(s->proxy, LOG_NOTICE, "%s.\n", trash.str); if (s->state & SRV_CHECKED) for(srv = s->tracknext; srv; srv = srv->tracknext) @@ -544,7 +540,6 @@ void set_server_up(struct server *s) { static void set_server_disabled(struct server *s) { struct server *srv; - struct chunk msg; int xferred; s->state |= SRV_GOINGDOWN; @@ -557,19 +552,19 @@ static void set_server_disabled(struct server *s) { */ xferred = redistribute_pending(s); - chunk_init(&msg, trash, global.tune.bufsize); + chunk_reset(&trash); - chunk_appendf(&msg, - "Load-balancing on %sServer %s/%s is disabled", - s->state & SRV_BACKUP ? "Backup " : "", - s->proxy->id, s->id); + chunk_appendf(&trash, + "Load-balancing on %sServer %s/%s is disabled", + s->state & SRV_BACKUP ? "Backup " : "", + s->proxy->id, s->id); - server_status_printf(&msg, s, - ((!s->track && !(s->proxy->options2 & PR_O2_LOGHCHKS))?SSP_O_HCHK:0), - xferred); + server_status_printf(&trash, s, + ((!s->track && !(s->proxy->options2 & PR_O2_LOGHCHKS)) ? SSP_O_HCHK : 0), + xferred); - Warning("%s.\n", trash); - send_log(s->proxy, LOG_NOTICE, "%s.\n", trash); + Warning("%s.\n", trash.str); + send_log(s->proxy, LOG_NOTICE, "%s.\n", trash.str); if (!s->proxy->srv_bck && !s->proxy->srv_act) set_backend_down(s->proxy); @@ -582,7 +577,6 @@ static void set_server_disabled(struct server *s) { static void set_server_enabled(struct server *s) { struct server *srv; - struct chunk msg; int xferred; s->state &= ~SRV_GOINGDOWN; @@ -594,27 +588,27 @@ static void set_server_enabled(struct server *s) { */ xferred = check_for_pending(s); - chunk_init(&msg, trash, global.tune.bufsize); + chunk_reset(&trash); - chunk_appendf(&msg, - "Load-balancing on %sServer %s/%s is enabled again", - s->state & SRV_BACKUP ? "Backup " : "", - s->proxy->id, s->id); + chunk_appendf(&trash, + "Load-balancing on %sServer %s/%s is enabled again", + s->state & SRV_BACKUP ? "Backup " : "", + s->proxy->id, s->id); - server_status_printf(&msg, s, - ((!s->track && !(s->proxy->options2 & PR_O2_LOGHCHKS))?SSP_O_HCHK:0), - xferred); + server_status_printf(&trash, s, + ((!s->track && !(s->proxy->options2 & PR_O2_LOGHCHKS)) ? SSP_O_HCHK : 0), + xferred); - Warning("%s.\n", trash); - send_log(s->proxy, LOG_NOTICE, "%s.\n", trash); + Warning("%s.\n", trash.str); + send_log(s->proxy, LOG_NOTICE, "%s.\n", trash.str); if (s->state & SRV_CHECKED) for(srv = s->tracknext; srv; srv = srv->tracknext) set_server_enabled(srv); } -void health_adjust(struct server *s, short status) { - +void health_adjust(struct server *s, short status) +{ int failed; int expire; @@ -652,8 +646,8 @@ void health_adjust(struct server *s, short status) { if (s->consecutive_errors < s->consecutive_errors_limit) return; - sprintf(trash, "Detected %d consecutive errors, last one was: %s", - s->consecutive_errors, get_analyze_status(status)); + chunk_printf(&trash, "Detected %d consecutive errors, last one was: %s", + s->consecutive_errors, get_analyze_status(status)); switch (s->onerror) { case HANA_ONERR_FASTINTER: @@ -669,7 +663,7 @@ void health_adjust(struct server *s, short status) { case HANA_ONERR_FAILCHK: /* simulate a failed health check */ - set_server_check_status(s, HCHK_STATUS_HANA, trash); + set_server_check_status(s, HCHK_STATUS_HANA, trash.str); if (s->health > s->rise) { s->health--; /* still good */ @@ -683,7 +677,7 @@ void health_adjust(struct server *s, short status) { case HANA_ONERR_MARKDWN: /* mark server down */ s->health = s->rise; - set_server_check_status(s, HCHK_STATUS_HANA, trash); + set_server_check_status(s, HCHK_STATUS_HANA, trash.str); set_server_down(s); break; @@ -1298,7 +1292,7 @@ static struct task *process_chk(struct task *t) } else if ((s->proxy->options2 & PR_O2_CHK_ANY) == PR_O2_HTTP_CHK) { if (s->proxy->options2 & PR_O2_CHK_SNDST) - bo_putblk(s->check.bo, trash, httpchk_build_status_header(s, trash)); + bo_putblk(s->check.bo, trash.str, httpchk_build_status_header(s, trash.str)); bo_putstr(s->check.bo, "\r\n"); *s->check.bo->p = '\0'; /* to make gdb output easier to read */ } diff --git a/src/connection.c b/src/connection.c index 9ccebbc9c..d698e69d5 100644 --- a/src/connection.c +++ b/src/connection.c @@ -282,15 +282,14 @@ void conn_update_sock_polling(struct connection *c) int conn_recv_proxy(struct connection *conn, int flag) { char *line, *end; - int len; /* we might have been called just after an asynchronous shutr */ if (conn->flags & CO_FL_SOCK_RD_SH) goto fail; do { - len = recv(conn->t.sock.fd, trash, global.tune.bufsize, MSG_PEEK); - if (len < 0) { + trash.len = recv(conn->t.sock.fd, trash.str, trash.size, MSG_PEEK); + if (trash.len < 0) { if (errno == EINTR) continue; if (errno == EAGAIN) { @@ -301,18 +300,18 @@ int conn_recv_proxy(struct connection *conn, int flag) } } while (0); - if (len < 6) + if (trash.len < 6) goto missing; - line = trash; - end = trash + len; + line = trash.str; + end = trash.str + trash.len; /* Decode a possible proxy request, fail early if it does not match */ if (strncmp(line, "PROXY ", 6) != 0) goto fail; line += 6; - if (len < 18) /* shortest possible line */ + if (trash.len < 18) /* shortest possible line */ goto missing; if (!memcmp(line, "TCP4 ", 5) != 0) { @@ -425,12 +424,12 @@ int conn_recv_proxy(struct connection *conn, int flag) * exact line at once. If we don't get the exact same result, we * fail. */ - len = line - trash; + trash.len = line - trash.str; do { - int len2 = recv(conn->t.sock.fd, trash, len, 0); + int len2 = recv(conn->t.sock.fd, trash.str, trash.len, 0); if (len2 < 0 && errno == EINTR) continue; - if (len2 != len) + if (len2 != trash.len) goto fail; } while (0); @@ -542,7 +541,7 @@ int make_proxy_line(char *buf, int buf_len, struct sockaddr_storage *src, struct */ int conn_local_send_proxy(struct connection *conn, unsigned int flag) { - int ret, len; + int ret; /* we might have been called just after an asynchronous shutw */ if (conn->flags & CO_FL_SOCK_WR_SH) @@ -557,14 +556,14 @@ int conn_local_send_proxy(struct connection *conn, unsigned int flag) if (!(conn->flags & CO_FL_ADDR_TO_SET)) goto out_error; - len = make_proxy_line(trash, global.tune.bufsize, &conn->addr.from, &conn->addr.to); - if (!len) + trash.len = make_proxy_line(trash.str, trash.size, &conn->addr.from, &conn->addr.to); + if (!trash.len) goto out_error; - /* we have to send trash from len bytes. If the data layer has a + /* we have to send the whole trash. If the data layer has a * pending write, we'll also set MSG_MORE. */ - ret = send(conn->t.sock.fd, trash, len, (conn->flags & CO_FL_DATA_WR_ENA) ? MSG_MORE : 0); + ret = send(conn->t.sock.fd, trash.str, trash.len, (conn->flags & CO_FL_DATA_WR_ENA) ? MSG_MORE : 0); if (ret == 0) goto out_wait; @@ -575,7 +574,7 @@ int conn_local_send_proxy(struct connection *conn, unsigned int flag) goto out_error; } - if (ret != len) + if (ret != trash.len) goto out_error; /* The connection is ready now, simply return and let the connection diff --git a/src/dumpstats.c b/src/dumpstats.c index cdf0bbb2e..eefce5812 100644 --- a/src/dumpstats.c +++ b/src/dumpstats.c @@ -525,7 +525,6 @@ static void stats_sock_table_key_request(struct stream_interface *si, char **arg struct stksess *ts; uint32_t uint32_key; unsigned char ip6_key[sizeof(struct in6_addr)]; - struct chunk msg; long long value; int data_type; void *ptr; @@ -599,10 +598,10 @@ static void stats_sock_table_key_request(struct stream_interface *si, char **arg case STAT_CLI_O_TAB: if (!ts) return; - chunk_init(&msg, trash, global.tune.bufsize); - if (!stats_dump_table_head_to_buffer(&msg, si, px, px)) + chunk_reset(&trash); + if (!stats_dump_table_head_to_buffer(&trash, si, px, px)) return; - stats_dump_table_entry_to_buffer(&msg, si, px, ts); + stats_dump_table_entry_to_buffer(&trash, si, px, ts); return; case STAT_CLI_O_CLR: @@ -1026,8 +1025,8 @@ static int stats_sock_parse_request(struct stream_interface *si, char *line) } /* return server's effective weight at the moment */ - snprintf(trash, global.tune.bufsize, "%d (initial %d)\n", sv->uweight, sv->iweight); - bi_putstr(si->ib, trash); + snprintf(trash.str, trash.size, "%d (initial %d)\n", sv->uweight, sv->iweight); + bi_putstr(si->ib, trash.str); return 1; } else { /* not "get weight" */ @@ -1495,7 +1494,7 @@ static void cli_io_handler(struct stream_interface *si) if (buffer_almost_full(si->ib->buf)) break; - reql = bo_getline(si->ob, trash, global.tune.bufsize); + reql = bo_getline(si->ob, trash.str, trash.size); if (reql <= 0) { /* closed or EOL not found */ if (reql == 0) break; @@ -1507,8 +1506,8 @@ static void cli_io_handler(struct stream_interface *si) * replace it with an LF and skip only this part. */ for (len = 0; len < reql; len++) - if (trash[len] == ';') { - trash[len] = '\n'; + if (trash.str[len] == ';') { + trash.str[len] = '\n'; reql = len + 1; break; } @@ -1518,26 +1517,26 @@ static void cli_io_handler(struct stream_interface *si) * line. */ len = reql - 1; - if (trash[len] != '\n') { + if (trash.str[len] != '\n') { si->applet.st0 = STAT_CLI_END; continue; } - if (len && trash[len-1] == '\r') + if (len && trash.str[len-1] == '\r') len--; - trash[len] = '\0'; + trash.str[len] = '\0'; si->applet.st0 = STAT_CLI_PROMPT; if (len) { - if (strcmp(trash, "quit") == 0) { + if (strcmp(trash.str, "quit") == 0) { si->applet.st0 = STAT_CLI_END; continue; } - else if (strcmp(trash, "prompt") == 0) + else if (strcmp(trash.str, "prompt") == 0) si->applet.st1 = !si->applet.st1; - else if (strcmp(trash, "help") == 0 || - !stats_sock_parse_request(si, trash)) { + else if (strcmp(trash.str, "help") == 0 || + !stats_sock_parse_request(si, trash.str)) { si->applet.ctx.cli.msg = stats_sock_usage_msg; si->applet.st0 = STAT_CLI_PRINT; } @@ -1665,10 +1664,9 @@ static void cli_io_handler(struct stream_interface *si) static int stats_dump_raw_to_buffer(struct stream_interface *si) { struct proxy *px; - struct chunk msg; unsigned int up; - chunk_init(&msg, trash, global.tune.bufsize); + chunk_reset(&trash); switch (si->conn->xprt_st) { case STAT_ST_INIT: @@ -1678,8 +1676,8 @@ static int stats_dump_raw_to_buffer(struct stream_interface *si) case STAT_ST_HEAD: if (si->applet.ctx.stats.flags & STAT_SHOW_STAT) { - print_csv_header(&msg); - if (bi_putchk(si->ib, &msg) == -1) + print_csv_header(&trash); + if (bi_putchk(si->ib, &trash) == -1) return 0; } @@ -1689,7 +1687,7 @@ static int stats_dump_raw_to_buffer(struct stream_interface *si) case STAT_ST_INFO: up = (now.tv_sec - start_date.tv_sec); if (si->applet.ctx.stats.flags & STAT_SHOW_INFO) { - chunk_appendf(&msg, + chunk_appendf(&trash, "Name: " PRODUCT_NAME "\n" "Version: " HAPROXY_VERSION "\n" "Release_date: " HAPROXY_DATE "\n" @@ -1729,7 +1727,7 @@ static int stats_dump_raw_to_buffer(struct stream_interface *si) nb_tasks_cur, run_queue_cur, idle_pct, global.node, global.desc?global.desc:"" ); - if (bi_putchk(si->ib, &msg) == -1) + if (bi_putchk(si->ib, &trash) == -1) return 0; } @@ -1782,13 +1780,12 @@ static int stats_dump_raw_to_buffer(struct stream_interface *si) static int stats_http_redir(struct stream_interface *si, struct uri_auth *uri) { struct session *s = si->conn->xprt_ctx; - struct chunk msg; - chunk_init(&msg, trash, global.tune.bufsize); + chunk_reset(&trash); switch (si->conn->xprt_st) { case STAT_ST_INIT: - chunk_appendf(&msg, + chunk_appendf(&trash, "HTTP/1.0 303 See Other\r\n" "Cache-Control: no-cache\r\n" "Content-Type: text/plain\r\n" @@ -1800,9 +1797,9 @@ static int stats_http_redir(struct stream_interface *si, struct uri_auth *uri) stat_status_codes[si->applet.ctx.stats.st_code]) ? stat_status_codes[si->applet.ctx.stats.st_code] : stat_status_codes[STAT_STATUS_UNKN]); - chunk_appendf(&msg, "\r\n\r\n"); + chunk_appendf(&trash, "\r\n\r\n"); - if (bi_putchk(si->ib, &msg) == -1) + if (bi_putchk(si->ib, &trash) == -1) return 0; s->txn.status = 303; @@ -1885,14 +1882,13 @@ static int stats_dump_http(struct stream_interface *si, struct uri_auth *uri) struct session *s = si->conn->xprt_ctx; struct channel *rep = si->ib; struct proxy *px; - struct chunk msg; unsigned int up; - chunk_init(&msg, trash, global.tune.bufsize); + chunk_reset(&trash); switch (si->conn->xprt_st) { case STAT_ST_INIT: - chunk_appendf(&msg, + chunk_appendf(&trash, "HTTP/1.0 200 OK\r\n" "Cache-Control: no-cache\r\n" "Connection: close\r\n" @@ -1900,13 +1896,13 @@ static int stats_dump_http(struct stream_interface *si, struct uri_auth *uri) (si->applet.ctx.stats.flags & STAT_FMT_CSV) ? "text/plain" : "text/html"); if (uri->refresh > 0 && !(si->applet.ctx.stats.flags & STAT_NO_REFRESH)) - chunk_appendf(&msg, "Refresh: %d\r\n", + chunk_appendf(&trash, "Refresh: %d\r\n", uri->refresh); - chunk_appendf(&msg, "\r\n"); + chunk_appendf(&trash, "\r\n"); s->txn.status = 200; - if (bi_putchk(rep, &msg) == -1) + if (bi_putchk(rep, &trash) == -1) return 0; if (!(s->flags & SN_ERR_MASK)) // this is not really an error but it is @@ -1926,7 +1922,7 @@ static int stats_dump_http(struct stream_interface *si, struct uri_auth *uri) case STAT_ST_HEAD: if (!(si->applet.ctx.stats.flags & STAT_FMT_CSV)) { /* WARNING! This must fit in the first buffer !!! */ - chunk_appendf(&msg, + chunk_appendf(&trash, "\n" "
\n"); + chunk_appendf(&trash,"
\n"); } - if (bi_putchk(rep, &msg) == -1) + if (bi_putchk(rep, &trash) == -1) return 0; } @@ -2226,8 +2222,8 @@ static int stats_dump_http(struct stream_interface *si, struct uri_auth *uri) case STAT_ST_END: if (!(si->applet.ctx.stats.flags & STAT_FMT_CSV)) { - chunk_appendf(&msg, "\n"); - if (bi_putchk(rep, &msg) == -1) + chunk_appendf(&trash, "