From 1991ce4817521b168a4485fab96b787dab16c591 Mon Sep 17 00:00:00 2001 From: Shane Bryldt Date: Fri, 6 Oct 2017 12:44:10 -0600 Subject: [PATCH] FS-10690: [libblade] [libks] Added json wrapper to string builder. Fixed an issue with the "Release" build for x64, currently only Debug x64 and Release x64 build correctly, more will be fixed with other project updates soon. --- libs/libblade/src/blade_restmgr.c | 4 ++-- libs/libblade/switchblade/switchblade.c | 14 ++++++++++-- libs/libblade/switchblade/switchblade.vcxproj | 3 ++- libs/libblade/test/testcli.vcxproj | 3 ++- libs/libblade/test/testcon.vcxproj | 3 ++- libs/libks/src/include/ks_sb.h | 1 + libs/libks/src/ks_sb.c | 22 +++++++++++++++++++ 7 files changed, 43 insertions(+), 7 deletions(-) diff --git a/libs/libblade/src/blade_restmgr.c b/libs/libblade/src/blade_restmgr.c index 9c241e3ef7..69d4551017 100644 --- a/libs/libblade/src/blade_restmgr.c +++ b/libs/libblade/src/blade_restmgr.c @@ -106,9 +106,9 @@ void blade_restmgr_handle_exit_context(const struct mg_context *ctx); static void blade_restmgr_cleanup(void *ptr, void *arg, ks_pool_cleanup_action_t action, ks_pool_cleanup_type_t type) { - blade_restmgr_t *brestmgr = (blade_restmgr_t *)ptr; + //blade_restmgr_t *brestmgr = (blade_restmgr_t *)ptr; - ks_assert(brestmgr); + //ks_assert(brestmgr); switch (action) { case KS_MPCL_ANNOUNCE: diff --git a/libs/libblade/switchblade/switchblade.c b/libs/libblade/switchblade/switchblade.c index e18dff0b80..5c4b89c70e 100644 --- a/libs/libblade/switchblade/switchblade.c +++ b/libs/libblade/switchblade/switchblade.c @@ -140,15 +140,23 @@ void command_quit(blade_handle_t *bh, char *args) int rest_service_test(blade_restmgr_t *brestmgr, struct mg_connection *conn, const char **captures) { const struct mg_request_info *info = NULL; + cJSON *json = NULL; + cJSON *json_captures = NULL; ks_sb_t *sb = NULL; + json = cJSON_CreateObject(); + ks_sb_create(&sb, NULL, 0); info = mg_get_request_info(conn); - ks_sb_printf(sb, "Method: %s\n", info->request_method); + cJSON_AddStringToObject(json, "method", info->request_method); - for (int i = 0; captures[i]; ++i) ks_sb_printf(sb, "Capture #%d: %s\n", i, captures[i]); + cJSON_AddItemToObject(json, "captures", (json_captures = cJSON_CreateArray())); + + for (int i = 0; captures[i]; ++i) cJSON_AddItemToArray(json_captures, cJSON_CreateString(captures[i])); + + ks_sb_json(sb, json); mg_printf(conn, "HTTP/1.1 200 OK\r\n" @@ -161,6 +169,8 @@ int rest_service_test(blade_restmgr_t *brestmgr, struct mg_connection *conn, con ks_sb_destroy(&sb); + cJSON_Delete(json); + return 200; } diff --git a/libs/libblade/switchblade/switchblade.vcxproj b/libs/libblade/switchblade/switchblade.vcxproj index de2fb48c5f..0eb09f50e8 100644 --- a/libs/libblade/switchblade/switchblade.vcxproj +++ b/libs/libblade/switchblade/switchblade.vcxproj @@ -182,7 +182,7 @@ MaxSpeed true true - _CRT_SECURE_NO_WARNINGS;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _CRT_SECURE_NO_WARNINGS;NDEBUG;_CONSOLE;KS_DECLARE_STATIC;%(PreprocessorDefinitions) true $(SolutionDir)..\win32\openssl\include;$(SolutionDir)..\win32\openssl\include_x64;../src/include;.;%(AdditionalIncludeDirectories) 4090 @@ -193,6 +193,7 @@ true true true + kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;rpcrt4.lib;winmm.lib;%(AdditionalDependencies) diff --git a/libs/libblade/test/testcli.vcxproj b/libs/libblade/test/testcli.vcxproj index 381d842a12..a0c687a67e 100644 --- a/libs/libblade/test/testcli.vcxproj +++ b/libs/libblade/test/testcli.vcxproj @@ -182,7 +182,7 @@ MaxSpeed true true - _CRT_SECURE_NO_WARNINGS;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _CRT_SECURE_NO_WARNINGS;NDEBUG;_CONSOLE;KS_DECLARE_STATIC;%(PreprocessorDefinitions) true $(SolutionDir)..\win32\openssl\include;$(SolutionDir)..\win32\openssl\include_x64;../src/include;.;%(AdditionalIncludeDirectories) 4090 @@ -193,6 +193,7 @@ true true true + kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;rpcrt4.lib;winmm.lib;%(AdditionalDependencies) diff --git a/libs/libblade/test/testcon.vcxproj b/libs/libblade/test/testcon.vcxproj index ffa9af660d..513324ec69 100644 --- a/libs/libblade/test/testcon.vcxproj +++ b/libs/libblade/test/testcon.vcxproj @@ -182,7 +182,7 @@ MaxSpeed true true - _CRT_SECURE_NO_WARNINGS;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _CRT_SECURE_NO_WARNINGS;NDEBUG;_CONSOLE;KS_DECLARE_STATIC;%(PreprocessorDefinitions) true $(SolutionDir)..\win32\openssl\include;$(SolutionDir)..\win32\openssl\include_x64;../src/include;.;%(AdditionalIncludeDirectories) 4090 @@ -193,6 +193,7 @@ true true true + kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;rpcrt4.lib;winmm.lib;%(AdditionalDependencies) diff --git a/libs/libks/src/include/ks_sb.h b/libs/libks/src/include/ks_sb.h index b9b5f1863f..e82da02ca0 100644 --- a/libs/libks/src/include/ks_sb.h +++ b/libs/libks/src/include/ks_sb.h @@ -48,6 +48,7 @@ KS_DECLARE(ks_status_t) ks_sb_accommodate(ks_sb_t *sb, ks_size_t len); KS_DECLARE(ks_status_t) ks_sb_append(ks_sb_t *sb, const char *str); KS_DECLARE(ks_status_t) ks_sb_append_ex(ks_sb_t *sb, const char *str, ks_size_t len); KS_DECLARE(ks_status_t) ks_sb_printf(ks_sb_t *sb, const char *fmt, ...); +KS_DECLARE(ks_status_t) ks_sb_json(ks_sb_t *sb, const cJSON *json); KS_END_EXTERN_C diff --git a/libs/libks/src/ks_sb.c b/libs/libks/src/ks_sb.c index acdbb594c0..19219b372d 100644 --- a/libs/libks/src/ks_sb.c +++ b/libs/libks/src/ks_sb.c @@ -191,6 +191,28 @@ done: return ret; } +KS_DECLARE(ks_status_t) ks_sb_json(ks_sb_t *sb, const cJSON *json) +{ + ks_status_t ret = KS_STATUS_SUCCESS; + char *str = NULL; + + ks_assert(sb); + ks_assert(json); + + str = cJSON_Print(json); + if (!str) { + ret = KS_STATUS_FAIL; + goto done; + } + + ks_sb_append(sb, str); + +done: + if (str) free(str); + + return ret; +} + /* For Emacs: * Local Variables: