From 13fadf2b5bd86f530deb14925e8ef279897f9d05 Mon Sep 17 00:00:00 2001 From: Philipp Schafft Date: Sun, 6 Mar 2022 17:34:34 +0000 Subject: [PATCH] Update: Split client_get_reportxml() report generation into client_get_empty_reportxml(), and client_add_empty_incident() --- src/client.c | 53 +++++++++++++++++++++++++++++++--------------------- src/client.h | 2 ++ 2 files changed, 34 insertions(+), 21 deletions(-) diff --git a/src/client.c b/src/client.c index 89c71f0b..f9eead46 100644 --- a/src/client.c +++ b/src/client.c @@ -794,34 +794,45 @@ reportxml_t *client_get_reportxml(const char *state_definition, const char *stat } if (!report) { - reportxml_node_t *rootnode, *incidentnode, *statenode; - - report = refobject_new(reportxml_t); - rootnode = reportxml_get_root_node(report); - incidentnode = reportxml_node_new(REPORTXML_NODE_TYPE_INCIDENT, NULL, NULL, NULL); - statenode = reportxml_node_new(REPORTXML_NODE_TYPE_STATE, NULL, state_definition, state_akindof); - - if (state_text) { - reportxml_node_t *textnode; - - textnode = reportxml_node_new(REPORTXML_NODE_TYPE_TEXT, NULL, NULL, NULL); - reportxml_node_set_content(textnode, state_text); - reportxml_node_add_child(statenode, textnode); - refobject_unref(textnode); - } - - reportxml_node_add_child(incidentnode, statenode); - reportxml_node_add_child(rootnode, incidentnode); - refobject_unref(statenode); - refobject_unref(incidentnode); - refobject_unref(rootnode); + report = client_get_empty_reportxml(); + refobject_unref(client_add_empty_incident(report, state_definition, state_akindof, state_text)); } + return report; +} + +reportxml_t *client_get_empty_reportxml(void) +{ + reportxml_t *report = refobject_new(reportxml_t); + client_get_reportxml__add_basic_stats(report); return report; } +reportxml_node_t *client_add_empty_incident(reportxml_t *report, const char *state_definition, const char *state_akindof, const char *state_text) +{ + reportxml_node_t *rootnode = reportxml_get_root_node(report); + reportxml_node_t *incidentnode = reportxml_node_new(REPORTXML_NODE_TYPE_INCIDENT, NULL, NULL, NULL); + reportxml_node_t *statenode = reportxml_node_new(REPORTXML_NODE_TYPE_STATE, NULL, state_definition, state_akindof);; + + if (state_text) { + reportxml_node_t *textnode; + + textnode = reportxml_node_new(REPORTXML_NODE_TYPE_TEXT, NULL, NULL, NULL); + reportxml_node_set_content(textnode, state_text); + reportxml_node_add_child(statenode, textnode); + refobject_unref(textnode); + } + + reportxml_node_add_child(incidentnode, statenode); + reportxml_node_add_child(rootnode, incidentnode); + refobject_unref(statenode); + refobject_unref(rootnode); + + return incidentnode; +} + admin_format_t client_get_admin_format_by_content_negotiation(client_t *client) { const char *pref; diff --git a/src/client.h b/src/client.h index 26049f0b..bd99d4a1 100644 --- a/src/client.h +++ b/src/client.h @@ -165,6 +165,8 @@ void client_send_redirect(client_t *client, const char *uuid, int status, const void client_send_reportxml(client_t *client, reportxml_t *report, document_domain_t domain, const char *xsl, admin_format_t admin_format_hint, int status, const char *location); void client_send_buffer(client_t *client, int status, const char *mediatype, const char *charset, const char *buffer, ssize_t len, const char *extra_headers); reportxml_t *client_get_reportxml(const char *state_definition, const char *state_akindof, const char *state_text); +reportxml_t *client_get_empty_reportxml(void); +reportxml_node_t *client_add_empty_incident(reportxml_t *report, const char *state_definition, const char *state_akindof, const char *state_text); admin_format_t client_get_admin_format_by_content_negotiation(client_t *client); int client_send_bytes (client_t *client, const void *buf, unsigned len); int client_read_bytes (client_t *client, void *buf, unsigned len);