# HG changeset patch # User Olaf Wintermann # Date 1762968435 -3600 # Node ID aae6e06d70b82fbf9c4e1a7a2b35aa95710dae30 # Parent 1e1da9adc53286a6fdf8609d38626ddda51981ae add protocol_status_message_s function diff -r 1e1da9adc532 -r aae6e06d70b8 .hgignore --- a/.hgignore Wed Nov 12 18:18:05 2025 +0100 +++ b/.hgignore Wed Nov 12 18:27:15 2025 +0100 @@ -10,3 +10,4 @@ ^nbproject/.*$ # Default ignored files .idea/workspace.xml +gmon.out diff -r 1e1da9adc532 -r aae6e06d70b8 src/server/daemon/protocol.c --- a/src/server/daemon/protocol.c Wed Nov 12 18:18:05 2025 +0100 +++ b/src/server/daemon/protocol.c Wed Nov 12 18:27:15 2025 +0100 @@ -55,175 +55,179 @@ pblock_kpinsert(pb_key_status, pp, rq->srvhdrs); } +NSAPI_PUBLIC const char * protocol_status_message(int code) { + cxstring s = protocol_status_message_s(code); + return s.ptr; +} + /* - * http_status_message from Open Webserver (frame/http.cpp) - * TODO: replace, use cxmutstr + * based on http_status_message from Open Webserver (frame/http.cpp) */ -NSAPI_PUBLIC const char * protocol_status_message (int code) +cxstring protocol_status_message_s(int code) { WS_ASSERT(code > 0); - const char *r; + cxstring r; switch (code) { case PROTOCOL_CONTINUE : // 100 - r = "Continue"; + r = CX_STR("Continue"); break; case PROTOCOL_SWITCHING: //101 - r = "Switching Protocols"; + r = CX_STR("Switching Protocols"); break; case PROTOCOL_OK: // 200 - r = "OK"; + r = CX_STR("OK"); break; case PROTOCOL_CREATED: // 201 - r = "Created"; + r = CX_STR("Created"); break; case PROTOCOL_ACCEPTED: // 202 - r = "Accepted"; + r = CX_STR("Accepted"); break; case PROTOCOL_NONAUTHORITATIVE: // 203 - r = "Non-Authoritative Information"; + r = CX_STR("Non-Authoritative Information"); break; case PROTOCOL_NO_CONTENT: //204 /* There is another define to PROTOCOL_NO_RESPONSE for 204 in nsapi.h The spec maps this to No Content. Hence cahnging this to No Content */ - r = "No Content"; + r = CX_STR("No Content"); break; case PROTOCOL_RESET_CONTENT: // 205 - r = "Reset Content"; + r = CX_STR("Reset Content"); break; case PROTOCOL_PARTIAL_CONTENT: // 206 - r = "Partial Content"; + r = CX_STR("Partial Content"); break; case PROTOCOL_MULTI_STATUS: // 207 - r = "Multi Status"; + r = CX_STR("Multi Status"); break; case PROTOCOL_MULTIPLE_CHOICES: // 300 - r = "Multiple Choices"; + r = CX_STR("Multiple Choices"); break; case PROTOCOL_MOVED_PERMANENTLY: // 301 - r = "Moved Permanently"; + r = CX_STR("Moved Permanently"); break; case PROTOCOL_REDIRECT: // 302 - r = "Moved Temporarily"; /* The spec actually says "Found" */ + r = CX_STR("Moved Temporarily"); /* The spec actually says "Found" */ break; case PROTOCOL_SEE_OTHER: // 303 - r = "See Other"; + r = CX_STR("See Other"); break; case PROTOCOL_NOT_MODIFIED: // 304 - r = "Use local copy"; /* The spec actually says "Not Modified" */ + r = CX_STR("Use local copy"); /* The spec actually says "Not Modified" */ break; case PROTOCOL_USE_PROXY: // 305 - r = "Use Proxy"; + r = CX_STR("Use Proxy"); break; case PROTOCOL_TEMPORARY_REDIRECT: // 307 - r = "Temporary Redirect"; + r = CX_STR("Temporary Redirect"); break; case PROTOCOL_BAD_REQUEST: // 400 - r = "Bad request"; + r = CX_STR("Bad request"); break; case PROTOCOL_UNAUTHORIZED: // 401 - r = "Unauthorized"; + r = CX_STR("Unauthorized"); break; case PROTOCOL_PAYMENT_REQUIRED: // 402 - r = "Payment Required"; + r = CX_STR("Payment Required"); break; case PROTOCOL_FORBIDDEN: // 403 - r = "Forbidden"; + r = CX_STR("Forbidden"); break; case PROTOCOL_NOT_FOUND: // 404 - r = "Not found"; + r = CX_STR("Not found"); break; case PROTOCOL_METHOD_NOT_ALLOWED: // 405 /* HTTP/1.1 */ - r = "Method Not Allowed"; + r = CX_STR("Method Not Allowed"); break; case PROTOCOL_NOT_ACCEPTABLE: // 406 /* HTTP/1.1 */ - r = "Not Acceptable"; + r = CX_STR("Not Acceptable"); break; case PROTOCOL_PROXY_UNAUTHORIZED: // 407 - r = "Proxy Authentication Required"; + r = CX_STR("Proxy Authentication Required"); break; case PROTOCOL_REQUEST_TIMEOUT: // 408 /* HTTP/1.1 */ - r = "Request Timeout"; + r = CX_STR("Request Timeout"); break; case PROTOCOL_CONFLICT: // 409 - r = "Conflict"; /* HTTP/1.1 */ + r = CX_STR("Conflict"); /* HTTP/1.1 */ break; case PROTOCOL_GONE: // 410 - r = "Gone"; /* HTTP/1.1 */ + r = CX_STR("Gone"); /* HTTP/1.1 */ break; case PROTOCOL_LENGTH_REQUIRED: // 411 /* HTTP/1.1 */ - r = "Length Required"; + r = CX_STR("Length Required"); break; case PROTOCOL_PRECONDITION_FAIL: // 412 /* HTTP/1.1 */ - r = "Precondition Failed"; + r = CX_STR("Precondition Failed"); break; case PROTOCOL_ENTITY_TOO_LARGE: // 413 /* HTTP/1.1 */ - r = "Request Entity Too Large"; + r = CX_STR("Request Entity Too Large"); break; case PROTOCOL_URI_TOO_LARGE: // 414 /* HTTP/1.1 */ - r = "Request-URI Too Large"; + r = CX_STR("Request-URI Too Large"); break; case PROTOCOL_UNSUPPORTED_MEDIA_TYPE: // 415 - r = "Unsupported Media Type"; + r = CX_STR("Unsupported Media Type"); break; case PROTOCOL_REQUESTED_RANGE_NOT_SATISFIABLE: // 416 - r = "Requested range not satisfiable"; + r = CX_STR("Requested range not satisfiable"); break; case PROTOCOL_EXPECTATION_FAILED: // 417 - r = "Expectation Failed"; + r = CX_STR("Expectation Failed"); break; case PROTOCOL_LOCKED: // 423 - r = "Locked"; + r = CX_STR("Locked"); break; case PROTOCOL_FAILED_DEPENDENCY: // 424 - r = "Failed Dependency"; + r = CX_STR("Failed Dependency"); break; case PROTOCOL_SERVER_ERROR: // 500 - r = "Server Error"; /* The spec actually says "Internal Server Error" */ + r = CX_STR("Server Error"); /* The spec actually says "Internal Server Error" */ break; case PROTOCOL_NOT_IMPLEMENTED: // 501 - r = "Not Implemented"; + r = CX_STR("Not Implemented"); break; case PROTOCOL_BAD_GATEWAY: // 502 - r = "Bad Gateway"; + r = CX_STR("Bad Gateway"); break; case PROTOCOL_SERVICE_UNAVAILABLE: // 503 - r = "Service Unavailable"; + r = CX_STR("Service Unavailable"); break; case PROTOCOL_GATEWAY_TIMEOUT: // 504 /* HTTP/1.1 */ - r = "Gateway Timeout"; + r = CX_STR("Gateway Timeout"); break; case PROTOCOL_VERSION_NOT_SUPPORTED: // 505 /* HTTP/1.1 */ - r = "HTTP Version Not Supported"; + r = CX_STR("HTTP Version Not Supported"); break; case PROTOCOL_INSUFFICIENT_STORAGE: // 507 - r = "Insufficient Storage"; + r = CX_STR("Insufficient Storage"); break; default: switch (code / 100) { case 1: - r = "Information"; + r = CX_STR("Information"); break; case 2: - r = "Success"; + r = CX_STR("Success"); break; case 3: - r = "Redirect"; + r = CX_STR("Redirect"); break; case 4: - r = "Client error"; + r = CX_STR("Client error"); break; case 5: - r = "Server error"; + r = CX_STR("Server error"); break; default: - r = "Unknown reason"; + r = CX_STR("Unknown reason"); break; } break; diff -r 1e1da9adc532 -r aae6e06d70b8 src/server/daemon/protocol.h --- a/src/server/daemon/protocol.h Wed Nov 12 18:18:05 2025 +0100 +++ b/src/server/daemon/protocol.h Wed Nov 12 18:27:15 2025 +0100 @@ -41,6 +41,7 @@ void protocol_status(Session *sn, Request *rq, int n, const char *m); const char* protocol_status_message(int code); +cxstring protocol_status_message_s(int code); void add_http_status_line(CxBuffer *out, pool_handle_t *pool, Request *rq); void add_http_response_header(CxBuffer *out, Request *rq); diff -r 1e1da9adc532 -r aae6e06d70b8 src/server/webdav/multistatus.c --- a/src/server/webdav/multistatus.c Wed Nov 12 18:18:05 2025 +0100 +++ b/src/server/webdav/multistatus.c Wed Nov 12 18:27:15 2025 +0100 @@ -276,12 +276,8 @@ } writer_put_lit(out, "HTTP/1.1 "); writer_put(out, statuscode, sclen); - const char *status_msg = protocol_status_message(status); - if(status_msg) { - writer_put(out, status_msg, strlen(status_msg)); - } else { - writer_put_lit(out, "Server Error"); - } + cxstring status_msg = protocol_status_message_s(status); + writer_put(out, status_msg.ptr, status_msg.length); } static int send_response_tag(Multistatus *ms, MSResponse *rp, Writer *out) {