X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=lib%2Fjsonrpc.c;h=bb4f6baf35449b1cf6606218b063704efb9d73f2;hb=6c4bf0b0070d474ac6cf97b3fda2e262cd060703;hp=f0ac27bc94045d4f04623587e764a50a7521b034;hpb=c9f3f37a9d3eeac3740122569ec96c3658b615df;p=openvswitch diff --git a/lib/jsonrpc.c b/lib/jsonrpc.c index f0ac27bc..bb4f6baf 100644 --- a/lib/jsonrpc.c +++ b/lib/jsonrpc.c @@ -23,6 +23,7 @@ #include "byteq.h" #include "dynamic-string.h" +#include "fatal-signal.h" #include "json.h" #include "list.h" #include "ofpbuf.h" @@ -56,6 +57,24 @@ static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(5, 5); static void jsonrpc_received(struct jsonrpc *); static void jsonrpc_cleanup(struct jsonrpc *); +/* This is just the same as stream_open() except that it uses the default + * JSONRPC ports if none is specified. */ +int +jsonrpc_stream_open(const char *name, struct stream **streamp) +{ + return stream_open_with_default_ports(name, JSONRPC_TCP_PORT, + JSONRPC_SSL_PORT, streamp); +} + +/* This is just the same as pstream_open() except that it uses the default + * JSONRPC ports if none is specified. */ +int +jsonrpc_pstream_open(const char *name, struct pstream **pstreamp) +{ + return pstream_open_with_default_ports(name, JSONRPC_TCP_PORT, + JSONRPC_SSL_PORT, pstreamp); +} + struct jsonrpc * jsonrpc_open(struct stream *stream) { @@ -248,6 +267,12 @@ jsonrpc_recv(struct jsonrpc *rpc, struct jsonrpc_msg **msgp) if (json_parser_is_done(rpc->parser)) { jsonrpc_received(rpc); if (rpc->status) { + const struct byteq *q = &rpc->input; + if (q->head <= BYTEQ_SIZE) { + stream_report_content(q->buffer, q->head, + STREAM_JSONRPC, + THIS_MODULE, rpc->name); + } return rpc->status; } } @@ -275,6 +300,8 @@ jsonrpc_send_block(struct jsonrpc *rpc, struct jsonrpc_msg *msg) { int error; + fatal_signal_run(); + error = jsonrpc_send(rpc, msg); if (error) { return error; @@ -296,6 +323,7 @@ jsonrpc_recv_block(struct jsonrpc *rpc, struct jsonrpc_msg **msgp) for (;;) { int error = jsonrpc_recv(rpc, msgp); if (error != EAGAIN) { + fatal_signal_run(); return error; } @@ -727,12 +755,12 @@ jsonrpc_session_connect(struct jsonrpc_session *s) jsonrpc_session_disconnect(s); if (!reconnect_is_passive(s->reconnect)) { - error = stream_open(name, &s->stream); + error = jsonrpc_stream_open(name, &s->stream); if (!error) { reconnect_connecting(s->reconnect, time_msec()); } } else { - error = s->pstream ? 0 : pstream_open(name, &s->pstream); + error = s->pstream ? 0 : jsonrpc_pstream_open(name, &s->pstream); if (!error) { reconnect_listening(s->reconnect, time_msec()); }