From 51d4a29b008f77bd8c86168b29d599af73486bc4 Mon Sep 17 00:00:00 2001 From: zhangmeng <775834166@qq.com> Date: 星期三, 28 十二月 2022 11:51:14 +0800 Subject: [PATCH] restruct api --- message.cpp | 41 ++++++++++++++++++++++++++++++----------- 1 files changed, 30 insertions(+), 11 deletions(-) diff --git a/message.cpp b/message.cpp index f7f42f3..b37d0ae 100644 --- a/message.cpp +++ b/message.cpp @@ -493,6 +493,19 @@ const auto& pbstr = msgRT.SerializeAsString(); tie(msg->msg, msg->msgl) = copymemory(pbstr); + auto doc = yyjson_read(msg->msg, msg->msgl, 0); + yyjson_val* root = yyjson_doc_get_root(doc); + + auto obj = [](yyjson_val* v, const char* name){return yyjson_obj_get(v, name);}; + + auto jp = obj(root, "path"); + auto jb = obj(root, "body"); + if (jp && jb){ + tie(msg->path, msg->pathl) = copymemory(yyjson_get_str(jp), yyjson_get_len(jp)); + tie(msg->body, msg->bodyl) = copymemory(yyjson_get_str(jb), yyjson_get_len(jb)); + } + + yyjson_doc_free(doc); return msg; } @@ -501,11 +514,15 @@ if (msg){ free(msg->procid); free(msg->msg); + free(msg->path); + free(msg->body); free(msg); } } static tuple<const char*, size_t> json2body(yyjson_doc* doc){ + ignoreT(json2body); + yyjson_val* root = yyjson_doc_get_root(doc); auto obj = [](yyjson_val* v, const char* name){return yyjson_obj_get(v, name);}; @@ -514,15 +531,16 @@ if (!jp) return make_tuple((const char*)NULL, 0); auto jb = obj(root, "body"); if (!jb) return make_tuple((const char*)NULL, 0); - return make_tuple(yyjson_get_str(jb), yyjson_get_len(jp)); + return make_tuple(yyjson_get_str(jb), yyjson_get_len(jb)); } struct cstackmsgerr* get_reqmsg_stackerr(struct creqmsg* msg){ - auto doc0 = yyjson_read(msg->msg, msg->msgl, 0); - auto tpbody = json2body(doc0); - if (!get<0>(tpbody)) return NULL; + // auto doc0 = yyjson_read(msg->msg, msg->msgl, 0); + // auto tpbody = json2body(doc0); + // if (!get<0>(tpbody)) return NULL; + // auto doc = yyjson_read(get<0>(tpbody), get<1>(tpbody), 0); - auto doc = yyjson_read(get<0>(tpbody), get<1>(tpbody), 0); + auto doc = yyjson_read(msg->body, msg->bodyl, 0); auto root = yyjson_doc_get_root(doc); auto obj = [](yyjson_val* v, const char* name){return yyjson_obj_get(v, name);}; @@ -534,7 +552,7 @@ tie(smsg->fileid, smsg->fileidl) = copymemory(yyjson_get_str(jfid), yyjson_get_len(jfid)); yyjson_doc_free(doc); - yyjson_doc_free(doc0); + // yyjson_doc_free(doc0); return smsg; } @@ -547,11 +565,12 @@ } // decode success msg struct cstackmsg* get_reqmsg_stack(struct creqmsg* msg){ - auto doc0 = yyjson_read(msg->msg, msg->msgl, 0); - auto tpbody = json2body(doc0); - if (!get<0>(tpbody)) return NULL; + // auto doc0 = yyjson_read(msg->msg, msg->msgl, 0); + // auto tpbody = json2body(doc0); + // if (!get<0>(tpbody)) return NULL; + // auto doc = yyjson_read(get<0>(tpbody), get<1>(tpbody), 0); - auto doc = yyjson_read(get<0>(tpbody), get<1>(tpbody), 0); + auto doc = yyjson_read(msg->body, msg->bodyl, 0); auto root = yyjson_doc_get_root(doc); auto obj = [](yyjson_val* v, const char* name){return yyjson_obj_get(v, name);}; @@ -583,7 +602,7 @@ smsg->files[i] = file; } yyjson_doc_free(doc); - yyjson_doc_free(doc0); + // yyjson_doc_free(doc0); return smsg; } -- Gitblit v1.8.0