From 32a410bdd6e593bfe6c0d13583f911fca7df876d Mon Sep 17 00:00:00 2001 From: Philipp Schafft Date: Sat, 9 Jun 2018 09:22:25 +0000 Subject: [PATCH] Feature: Allow xslt_transform() to send non-200 status --- src/admin.c | 2 +- src/stats.c | 2 +- src/xslt.c | 8 ++++---- src/xslt.h | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/admin.c b/src/admin.c index 73a3b951..6382ee3d 100644 --- a/src/admin.c +++ b/src/admin.c @@ -463,7 +463,7 @@ void admin_send_response(xmlDocPtr doc, config_release_config(); ICECAST_LOG_DEBUG("Sending XSLT (%s)", fullpath_xslt_template); - xslt_transform(doc, fullpath_xslt_template, client); + xslt_transform(doc, fullpath_xslt_template, client, 200); free(fullpath_xslt_template); } } diff --git a/src/stats.c b/src/stats.c index 5cfc578c..07cf534c 100644 --- a/src/stats.c +++ b/src/stats.c @@ -1024,7 +1024,7 @@ void stats_transform_xslt(client_t *client, const char *uri) doc = stats_get_xml(0, mount, client->mode); - xslt_transform(doc, xslpath, client); + xslt_transform(doc, xslpath, client, 200); xmlFreeDoc(doc); free(xslpath); diff --git a/src/xslt.c b/src/xslt.c index 8dd35969..12de9376 100644 --- a/src/xslt.c +++ b/src/xslt.c @@ -285,7 +285,7 @@ static xmlDocPtr custom_loader(const xmlChar *URI, return ret; } -void xslt_transform(xmlDocPtr doc, const char *xslfilename, client_t *client) +void xslt_transform(xmlDocPtr doc, const char *xslfilename, client_t *client, int status) { xmlDocPtr res; xsltStylesheetPtr cur; @@ -346,7 +346,7 @@ void xslt_transform(xmlDocPtr doc, const char *xslfilename, client_t *client) if (string == NULL) string = xmlCharStrdup (""); - ret = util_http_build_header(refbuf->data, full_len, 0, 0, 200, NULL, mediatype, charset, NULL, NULL, client); + ret = util_http_build_header(refbuf->data, full_len, 0, 0, status, NULL, mediatype, charset, NULL, NULL, client); if (ret == -1) { ICECAST_LOG_ERROR("Dropping client as we can not build response headers."); client_send_error_by_id(client, ICECAST_ERROR_GEN_HEADER_GEN_FAILED); @@ -359,7 +359,7 @@ void xslt_transform(xmlDocPtr doc, const char *xslfilename, client_t *client) ICECAST_LOG_DEBUG("Client buffer reallocation succeeded."); refbuf->data = new_data; refbuf->len = full_len; - ret = util_http_build_header(refbuf->data, full_len, 0, 0, 200, NULL, mediatype, charset, NULL, NULL, client); + ret = util_http_build_header(refbuf->data, full_len, 0, 0, status, NULL, mediatype, charset, NULL, NULL, client); if (ret == -1) { ICECAST_LOG_ERROR("Dropping client as we can not build response headers."); client_send_error_by_id(client, ICECAST_ERROR_GEN_HEADER_GEN_FAILED); @@ -375,7 +375,7 @@ void xslt_transform(xmlDocPtr doc, const char *xslfilename, client_t *client) if (!failed) { snprintf(refbuf->data + ret, full_len - ret, "Content-Length: %d\r\n\r\n%s", len, string); - client->respcode = 200; + client->respcode = status; client_set_queue (client, NULL); client->refbuf = refbuf; refbuf->len = strlen (refbuf->data); diff --git a/src/xslt.h b/src/xslt.h index 97e771bd..feb4c2fa 100644 --- a/src/xslt.h +++ b/src/xslt.h @@ -16,7 +16,7 @@ #include "icecasttypes.h" -void xslt_transform(xmlDocPtr doc, const char *xslfilename, client_t *client); +void xslt_transform(xmlDocPtr doc, const char *xslfilename, client_t *client, int status); void xslt_initialize(void); void xslt_shutdown(void);