X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=lib%2Fjsonrpc.c;h=09c3d45dbeff5f81cfb0ff949c392357274aaaef;hb=1fd13cde12973420d573af8d161c612a9203b1cd;hp=d298f0d5957a1385af00edc160ce1bcf2279ea00;hpb=aa78de9dcb0cdd34cc57358fe236c563006eeb74;p=openvswitch diff --git a/lib/jsonrpc.c b/lib/jsonrpc.c index d298f0d5..09c3d45d 100644 --- a/lib/jsonrpc.c +++ b/lib/jsonrpc.c @@ -21,6 +21,7 @@ #include #include "byteq.h" +#include "dynamic-string.h" #include "json.h" #include "list.h" #include "ofpbuf.h" @@ -133,6 +134,37 @@ jsonrpc_get_name(const struct jsonrpc *rpc) return rpc->name; } +static void +jsonrpc_log_msg(const struct jsonrpc *rpc, const char *title, + const struct jsonrpc_msg *msg) +{ + if (VLOG_IS_DBG_ENABLED()) { + struct ds s = DS_EMPTY_INITIALIZER; + if (msg->method) { + ds_put_format(&s, ", method=\"%s\"", msg->method); + } + if (msg->params) { + ds_put_cstr(&s, ", params="); + ds_put_and_free_cstr(&s, json_to_string(msg->params, 0)); + } + if (msg->result) { + ds_put_cstr(&s, ", result="); + ds_put_and_free_cstr(&s, json_to_string(msg->result, 0)); + } + if (msg->error) { + ds_put_cstr(&s, ", error="); + ds_put_and_free_cstr(&s, json_to_string(msg->error, 0)); + } + if (msg->id) { + ds_put_cstr(&s, ", id="); + ds_put_and_free_cstr(&s, json_to_string(msg->id, 0)); + } + VLOG_DBG("%s: %s %s%s", rpc->name, title, + jsonrpc_msg_type_to_string(msg->type), ds_cstr(&s)); + ds_destroy(&s); + } +} + int jsonrpc_send(struct jsonrpc *rpc, struct jsonrpc_msg *msg) { @@ -146,6 +178,8 @@ jsonrpc_send(struct jsonrpc *rpc, struct jsonrpc_msg *msg) return rpc->status; } + jsonrpc_log_msg(rpc, "send", msg); + json = jsonrpc_msg_to_json(msg); s = json_to_string(json, 0); length = strlen(s); @@ -313,6 +347,7 @@ jsonrpc_received(struct jsonrpc *rpc) return; } + jsonrpc_log_msg(rpc, "received", msg); rpc->received = msg; }