aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/os/msgpack_rpc.c
diff options
context:
space:
mode:
authorThiago de Arruda <tpadilha84@gmail.com>2014-05-26 14:10:38 -0300
committerThiago de Arruda <tpadilha84@gmail.com>2014-05-26 14:10:38 -0300
commit7df7d6bb5baff62942af94f41de142159657569e (patch)
tree76a99c2b9214e33fb7eac1c30f7ae0f586f818a6 /src/nvim/os/msgpack_rpc.c
parentfc7bc0412ee111cdea61c89f3ec2461601013fa2 (diff)
parentcbf9564ee01535e3a2168219ef8f84f857519da3 (diff)
downloadrneovim-7df7d6bb5baff62942af94f41de142159657569e.tar.gz
rneovim-7df7d6bb5baff62942af94f41de142159657569e.tar.bz2
rneovim-7df7d6bb5baff62942af94f41de142159657569e.zip
Merge branch 'api-events'
Diffstat (limited to 'src/nvim/os/msgpack_rpc.c')
-rw-r--r--src/nvim/os/msgpack_rpc.c33
1 files changed, 29 insertions, 4 deletions
diff --git a/src/nvim/os/msgpack_rpc.c b/src/nvim/os/msgpack_rpc.c
index d7ffa6f559..423c5d584d 100644
--- a/src/nvim/os/msgpack_rpc.c
+++ b/src/nvim/os/msgpack_rpc.c
@@ -1,3 +1,6 @@
+#include <stdint.h>
+#include <stdbool.h>
+
#include <msgpack.h>
#include "nvim/os/msgpack_rpc.h"
@@ -52,7 +55,7 @@
free(value.items); \
}
-void msgpack_rpc_call(msgpack_object *req, msgpack_packer *res)
+void msgpack_rpc_call(uint64_t id, msgpack_object *req, msgpack_packer *res)
{
// The initial response structure is the same no matter what happens,
// we set it up here
@@ -107,7 +110,16 @@ void msgpack_rpc_call(msgpack_object *req, msgpack_packer *res)
}
// dispatch the message
- msgpack_rpc_dispatch(req, res);
+ msgpack_rpc_dispatch(id, req, res);
+}
+
+void msgpack_rpc_notification(String type, Object data, msgpack_packer *pac)
+{
+ msgpack_pack_array(pac, 3);
+ msgpack_pack_int(pac, 2);
+ msgpack_pack_raw(pac, type.size);
+ msgpack_pack_raw_body(pac, type.data, type.size);
+ msgpack_rpc_from_object(data, pac);
}
void msgpack_rpc_error(char *msg, msgpack_packer *res)
@@ -147,9 +159,13 @@ bool msgpack_rpc_to_float(msgpack_object *obj, Float *arg)
bool msgpack_rpc_to_string(msgpack_object *obj, String *arg)
{
- arg->data = (char *)obj->via.raw.ptr;
+ if (obj->type != MSGPACK_OBJECT_RAW) {
+ return false;
+ }
+
+ arg->data = xmemdup(obj->via.raw.ptr, obj->via.raw.size);
arg->size = obj->via.raw.size;
- return obj->type == MSGPACK_OBJECT_RAW;
+ return true;
}
bool msgpack_rpc_to_object(msgpack_object *obj, Object *arg)
@@ -328,6 +344,15 @@ void msgpack_rpc_from_dictionary(Dictionary result, msgpack_packer *res)
}
}
+void msgpack_rpc_free_string(String value)
+{
+ if (!value.data) {
+ return;
+ }
+
+ free(value.data);
+}
+
void msgpack_rpc_free_object(Object value)
{
switch (value.type) {