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.
This commit is contained in:
Christopher Faulet 2020-05-14 10:03:55 +02:00
parent 1b13ecaca2
commit de30bb7245
2 changed files with 19 additions and 0 deletions

View File

@ -85,6 +85,7 @@ struct http_errors {
} conf; /* config information */
struct buffer *errmsg[HTTP_ERR_SIZE]; /* customized error messages for known errors */
struct http_reply *replies[HTTP_ERR_SIZE]; /* HTTP replies for known errors */
struct list list; /* http-errors list */
};

View File

@ -1030,6 +1030,7 @@ static void http_htx_deinit(void)
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 @@ static void http_htx_deinit(void)
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 @@ static int cfg_parse_http_errors(const char *file, int linenum, char **args, int
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 @@ static int cfg_parse_http_errors(const char *file, int linenum, char **args, int
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);