MINOR: http-htx: Store messages of an http-errors section in a http reply array
Error messages specified in an http-errors section is now also stored in an
array of http replies. So, for now, these messages are stored as a buffer and as
a http reply.
diff --git a/src/http_htx.c b/src/http_htx.c
index 4414ab3..7c90a96 100644
--- a/src/http_htx.c
+++ b/src/http_htx.c
@@ -1030,6 +1030,7 @@
struct http_errors *http_errs, *http_errsb;
struct ebpt_node *node, *next;
struct http_error_msg *http_errmsg;
+ int rc;
node = ebpt_first(&http_error_messages);
while (node) {
@@ -1045,6 +1046,8 @@
list_for_each_entry_safe(http_errs, http_errsb, &http_errors_list, list) {
free(http_errs->conf.file);
free(http_errs->id);
+ for (rc = 0; rc < HTTP_ERR_SIZE; rc++)
+ release_http_reply(http_errs->replies[rc]);
LIST_DEL(&http_errs->list);
free(http_errs);
}
@@ -1977,6 +1980,7 @@
curr_errs->conf.line = linenum;
}
else if (!strcmp(args[0], "errorfile")) { /* error message from a file */
+ struct http_reply *reply;
struct buffer *msg;
int status, rc;
@@ -1994,8 +1998,22 @@
err_code |= ERR_ALERT | ERR_FATAL;
goto out;
}
+
+ reply = calloc(1, sizeof(*reply));
+ if (!reply) {
+ ha_alert("parsing [%s:%d] : %s : out of memory.\n", file, linenum, args[0]);
+ err_code |= ERR_ALERT | ERR_FATAL;
+ goto out;
+ }
+ reply->type = HTTP_REPLY_ERRMSG;
+ reply->status = status;
+ reply->ctype = NULL;
+ LIST_INIT(&reply->hdrs);
+ reply->body.errmsg = msg;
+
rc = http_get_status_idx(status);
curr_errs->errmsg[rc] = msg;
+ curr_errs->replies[rc] = reply;
}
else if (*args[0] != 0) {
ha_alert("parsing [%s:%d] : unknown keyword '%s' in '%s' section\n", file, linenum, args[0], cursection);