plugins: http_static. Migrate to use api string type. 98/19698/8
authorPaul Vinciguerra <pvinci@vinciconsulting.com>
Sun, 19 May 2019 02:09:28 +0000 (22:09 -0400)
committerOle Trøan <otroan@employees.org>
Wed, 29 May 2019 07:40:56 +0000 (07:40 +0000)
This is not my core competency.
Reviews/feedback/suggestions welcomed. ;)

Tested with:
  rv = self.vapi.http_static_enable(
             fifo_size = 1,
             cache_size_limit = 1000000,
             prealloc_fifos = 0,
             private_segment_size = 0,
             uri="tcp://0.0.0.0/80",
             www_root = "/var/tmp/run/vpp/html"
             )

  DBGvpp# show http static server
  www_root /var/tmp/run/vpp/html, cache size 0 bytes, limit 1000000 bytes, evictions 0

Change-Id: I0f660753317ceedab89da1b65701a24d6f7145de
Signed-off-by: Paul Vinciguerra <pvinci@vinciconsulting.com>
src/plugins/http_static/http_static.api
src/plugins/http_static/http_static.c
src/plugins/http_static/http_static_test.c

index 1866e38..dc3dcac 100644 (file)
@@ -1,8 +1,8 @@
 
 /** \file
-    This file defines static http servercontrol-plane API messages
+    This file defines static http server control-plane API messages
 */
-option version = "1.0.0";
+option version = "2.0.0";
 
 /** \brief Configure and enable the static http server
     @param client_index - opaque cookie to identify the sender
@@ -29,7 +29,7 @@ autoreply define http_static_enable {
     u32 private_segment_size;
 
     /* Root of the html path */
-    u8 www_root[256];
+    string www_root[limit=256];
     /* The bind URI */
-    u8 uri[256];
+    string uri[limit=256];
 };
index d4ec298..41601f9 100644 (file)
@@ -26,6 +26,8 @@
 /* define message IDs */
 #include <http_static/http_static_msg_enum.h>
 
+#include <vpp/api/types.h>
+
 /* define message structures */
 #define vl_typedefs
 #include <http_static/http_static_all_api_h.h>
@@ -64,14 +66,22 @@ static void vl_api_http_static_enable_t_handler
   vl_api_http_static_enable_reply_t *rmp;
   http_static_main_t *hmp = &http_static_main;
   int rv;
+  u8 *www_root;
+  u8 *uri;
+
+  char *p = (char *) &mp->www_root;
+  www_root =
+    format (0, "%s%c", vl_api_from_api_string_c ((vl_api_string_t *) p), 0),
+    p += vl_api_string_len ((vl_api_string_t *) p) + sizeof (vl_api_string_t);
+  uri =
+    format (0, "%s%c", vl_api_from_api_string_c ((vl_api_string_t *) p), 0);
 
-  mp->uri[ARRAY_LEN (mp->uri) - 1] = 0;
-  mp->www_root[ARRAY_LEN (mp->www_root) - 1] = 0;
 
   rv = http_static_server_enable_api
-    (ntohl (mp->fifo_size), ntohl (mp->cache_size_limit),
+    (ntohl (mp->fifo_size),
+     ntohl (mp->cache_size_limit),
      ntohl (mp->prealloc_fifos),
-     ntohl (mp->private_segment_size), mp->www_root, mp->uri);
+     ntohl (mp->private_segment_size), www_root, uri);
 
   REPLY_MACRO (VL_API_HTTP_STATIC_ENABLE_REPLY);
 }
index 59cc5f1..0720463 100644 (file)
@@ -155,9 +155,11 @@ api_http_static_enable (vat_main_t * vam)
 
   /* Construct the API message */
   M (HTTP_STATIC_ENABLE, mp);
-  clib_strncpy ((char *) mp->www_root, (char *) www_root,
-               ARRAY_LEN (mp->www_root) - 1);
-  clib_strncpy ((char *) mp->uri, (char *) uri, ARRAY_LEN (mp->uri) - 1);
+  vl_api_to_api_string (strnlen ((const char *) www_root, 256),
+                       (const char *) www_root,
+                       (vl_api_string_t *) & mp->www_root);
+  vl_api_to_api_string (strnlen ((const char *) uri, 256), (const char *) uri,
+                       (vl_api_string_t *) & mp->uri);
   mp->fifo_size = ntohl (fifo_size);
   mp->cache_size_limit = ntohl (cache_size_limit);
   mp->prealloc_fifos = ntohl (prealloc_fifos);