Skip to content

Commit 640988a

Browse files
committed
Debugging messages controlled by JRPC_DEBUG env var
1 parent bb89196 commit 640988a

File tree

2 files changed

+24
-9
lines changed

2 files changed

+24
-9
lines changed

include/jsonrpc-c.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ struct jrpc_connection {
6060
int pos;
6161
unsigned int buffer_size;
6262
char * buffer;
63+
int debug_level;
6364
};
6465

6566
int jrpc_server_init(struct jrpc_server *server, struct ev_loop *loop,

src/jsonrpc-c.c

Lines changed: 23 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ static void *get_in_addr(struct sockaddr *sa) {
2828

2929
static int send_response(struct jrpc_connection * conn, char *response) {
3030
int fd = conn->fd;
31+
if (conn->debug_level > 1)
32+
printf("JSON Response:\n%s\n", response);
3133
write(fd, response, strlen(response));
3234
write(fd, "\n", 1);
3335
return 0;
@@ -110,7 +112,7 @@ static int eval_request(struct jrpc_server *server,
110112
(id->type == cJSON_String) ? cJSON_CreateString(
111113
id->valuestring) :
112114
cJSON_CreateNumber(id->valueint);
113-
if (!server->debug_level)
115+
if (server->debug_level)
114116
printf("Method Invoked: %s\n", method->valuestring);
115117
return invoke_procedure(server, conn, method->valuestring,
116118
params, id_copy);
@@ -154,7 +156,8 @@ static void connection_cb(struct ev_loop *loop, ev_io *w, int revents) {
154156
}
155157
if (!bytes_read) {
156158
// client closed the sending half of the connection
157-
printf("Client closed connection?\n");
159+
if (server->debug_level)
160+
printf("Client closed connection.\n");
158161
return close_connection(loop, w);
159162
} else {
160163
cJSON *root;
@@ -183,7 +186,7 @@ static void connection_cb(struct ev_loop *loop, ev_io *w, int revents) {
183186
// did we parse the all buffer? If so, just wait for more.
184187
// else there was an error before the buffer's end
185188
if (cJSON_GetErrorPtr() != (conn->buffer + conn->pos)) {
186-
if (server->debug_level > 1) {
189+
if (server->debug_level) {
187190
printf("INVALID JSON Received:\n---\n%s\n---\n",
188191
conn->buffer);
189192
}
@@ -211,9 +214,11 @@ static void accept_cb(struct ev_loop *loop, ev_io *w, int revents) {
211214
perror("accept");
212215
free(connection_watcher);
213216
} else {
214-
inet_ntop(their_addr.ss_family,
215-
get_in_addr((struct sockaddr *) &their_addr), s, sizeof s);
216-
printf("server: got connection from %s\n", s);
217+
if (((struct jrpc_server *) w->data)->debug_level) {
218+
inet_ntop(their_addr.ss_family,
219+
get_in_addr((struct sockaddr *) &their_addr), s, sizeof s);
220+
printf("server: got connection from %s\n", s);
221+
}
217222
ev_io_init(&connection_watcher->io, connection_cb,
218223
connection_watcher->fd, EV_READ);
219224
//copy pointer to struct jrpc_server
@@ -222,6 +227,9 @@ static void accept_cb(struct ev_loop *loop, ev_io *w, int revents) {
222227
connection_watcher->buffer = malloc(1500);
223228
memset(connection_watcher->buffer, 0, 1500);
224229
connection_watcher->pos = 0;
230+
//copy debug_level, struct jrpc_connection has no pointer to struct jrpc_server
231+
connection_watcher->debug_level =
232+
((struct jrpc_server *) w->data)->debug_level;
225233
ev_io_start(loop, &connection_watcher->io);
226234
}
227235
}
@@ -231,7 +239,13 @@ int jrpc_server_init(struct jrpc_server *server, struct ev_loop *loop,
231239
memset(server, 0, sizeof(struct jrpc_server));
232240
server->loop = loop;
233241
server->port_number = port_number;
234-
server->debug_level = 2;
242+
char * debug_level_env = getenv("JRPC_DEBUG");
243+
if (debug_level_env == NULL)
244+
server->debug_level = 0;
245+
else {
246+
server->debug_level = strtol(debug_level_env, NULL, 10);
247+
printf("JSONRPC-C Debug level %d\n", server->debug_level);
248+
}
235249
return 0;
236250
}
237251

@@ -286,8 +300,8 @@ int jrpc_server_start(struct jrpc_server *server) {
286300
perror("listen");
287301
exit(1);
288302
}
289-
290-
printf("server: waiting for connections...\n");
303+
if (server->debug_level)
304+
printf("server: waiting for connections...\n");
291305

292306
ev_io_init(&server->listen_watcher, accept_cb, sockfd, EV_READ);
293307
server->listen_watcher.data = server;

0 commit comments

Comments
 (0)