add protocol_status_message_s function

Wed, 12 Nov 2025 18:27:15 +0100

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Wed, 12 Nov 2025 18:27:15 +0100
changeset 630
aae6e06d70b8
parent 629
1e1da9adc532
child 631
867b1026b0de

add protocol_status_message_s function

.hgignore file | annotate | diff | comparison | revisions
src/server/daemon/protocol.c file | annotate | diff | comparison | revisions
src/server/daemon/protocol.h file | annotate | diff | comparison | revisions
src/server/webdav/multistatus.c file | annotate | diff | comparison | revisions
--- 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
--- 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;
--- 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);
--- 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) {

mercurial