From b179e592e9bb5e77ded808373dafa1c279c29bf1 Mon Sep 17 00:00:00 2001 From: Adam Dickmeiss Date: Tue, 9 Jul 2013 15:03:19 +0200 Subject: [PATCH] New utility z_get_HTTP_Response_details --- include/yaz/zgdu.h | 2 ++ src/http.c | 23 ++++++++++++++++++----- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/include/yaz/zgdu.h b/include/yaz/zgdu.h index 38f4df3..0a626ea 100644 --- a/include/yaz/zgdu.h +++ b/include/yaz/zgdu.h @@ -92,6 +92,8 @@ YAZ_EXPORT const char *z_HTTP_header_remove(Z_HTTP_Header **hp, YAZ_EXPORT const char *z_HTTP_errmsg(int code); YAZ_EXPORT Z_GDU *z_get_HTTP_Response(ODR o, int code); +YAZ_EXPORT Z_GDU *z_get_HTTP_Response_details(ODR o, int code, + const char *details); YAZ_EXPORT Z_GDU *z_get_HTTP_Request(ODR o); YAZ_EXPORT Z_GDU *z_get_HTTP_Request_host_path(ODR odr, const char *host, diff --git a/src/http.c b/src/http.c index 6819e5f..746f3e1 100644 --- a/src/http.c +++ b/src/http.c @@ -338,7 +338,7 @@ Z_GDU *z_get_HTTP_Request_uri(ODR odr, const char *uri, const char *args, return p; } -Z_GDU *z_get_HTTP_Response(ODR o, int code) +Z_GDU *z_get_HTTP_Response_details(ODR o, int code, const char *details) { Z_GDU *p = (Z_GDU *) odr_malloc(o, sizeof(*p)); Z_HTTP_Response *hres; @@ -355,7 +355,10 @@ Z_GDU *z_get_HTTP_Response(ODR o, int code) "YAZ/" YAZ_VERSION); if (code != 200) { - hres->content_buf = (char*) odr_malloc(o, 400); + const char *http_err = z_HTTP_errmsg(code); + size_t sz = 400 + strlen(http_err) + (details ? + strlen(details) : 0); + hres->content_buf = (char*) odr_malloc(o, sz); sprintf(hres->content_buf, "\n" @@ -367,16 +370,26 @@ Z_GDU *z_get_HTTP_Response(ODR o, int code) "

YAZ " YAZ_VERSION "

\n" "

Error: %d

\n" - "

Description: %.50s

\n" + "

Description: %s

\n", code, http_err); + if (details) + { + sprintf(hres->content_buf + strlen(hres->content_buf), + "

Details: %s

\n", details); + } + sprintf(hres->content_buf + strlen(hres->content_buf), " \n" - "\n", - code, z_HTTP_errmsg(code)); + "\n"); hres->content_len = strlen(hres->content_buf); z_HTTP_header_add(o, &hres->headers, "Content-Type", "text/html"); } return p; } +Z_GDU *z_get_HTTP_Response(ODR o, int code) +{ + return z_get_HTTP_Response_details(o, code, 0); +} + const char *z_HTTP_errmsg(int code) { switch (code) -- 1.7.10.4