@@ -28,6 +28,8 @@ static void *get_in_addr(struct sockaddr *sa) {
28
28
29
29
static int send_response (struct jrpc_connection * conn , char * response ) {
30
30
int fd = conn -> fd ;
31
+ if (conn -> debug_level > 1 )
32
+ printf ("JSON Response:\n%s\n" , response );
31
33
write (fd , response , strlen (response ));
32
34
write (fd , "\n" , 1 );
33
35
return 0 ;
@@ -110,7 +112,7 @@ static int eval_request(struct jrpc_server *server,
110
112
(id -> type == cJSON_String ) ? cJSON_CreateString (
111
113
id -> valuestring ) :
112
114
cJSON_CreateNumber (id -> valueint );
113
- if (! server -> debug_level )
115
+ if (server -> debug_level )
114
116
printf ("Method Invoked: %s\n" , method -> valuestring );
115
117
return invoke_procedure (server , conn , method -> valuestring ,
116
118
params , id_copy );
@@ -154,7 +156,8 @@ static void connection_cb(struct ev_loop *loop, ev_io *w, int revents) {
154
156
}
155
157
if (!bytes_read ) {
156
158
// 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" );
158
161
return close_connection (loop , w );
159
162
} else {
160
163
cJSON * root ;
@@ -183,7 +186,7 @@ static void connection_cb(struct ev_loop *loop, ev_io *w, int revents) {
183
186
// did we parse the all buffer? If so, just wait for more.
184
187
// else there was an error before the buffer's end
185
188
if (cJSON_GetErrorPtr () != (conn -> buffer + conn -> pos )) {
186
- if (server -> debug_level > 1 ) {
189
+ if (server -> debug_level ) {
187
190
printf ("INVALID JSON Received:\n---\n%s\n---\n" ,
188
191
conn -> buffer );
189
192
}
@@ -211,9 +214,11 @@ static void accept_cb(struct ev_loop *loop, ev_io *w, int revents) {
211
214
perror ("accept" );
212
215
free (connection_watcher );
213
216
} 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
+ }
217
222
ev_io_init (& connection_watcher -> io , connection_cb ,
218
223
connection_watcher -> fd , EV_READ );
219
224
//copy pointer to struct jrpc_server
@@ -222,6 +227,9 @@ static void accept_cb(struct ev_loop *loop, ev_io *w, int revents) {
222
227
connection_watcher -> buffer = malloc (1500 );
223
228
memset (connection_watcher -> buffer , 0 , 1500 );
224
229
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 ;
225
233
ev_io_start (loop , & connection_watcher -> io );
226
234
}
227
235
}
@@ -231,7 +239,13 @@ int jrpc_server_init(struct jrpc_server *server, struct ev_loop *loop,
231
239
memset (server , 0 , sizeof (struct jrpc_server ));
232
240
server -> loop = loop ;
233
241
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
+ }
235
249
return 0 ;
236
250
}
237
251
@@ -286,8 +300,8 @@ int jrpc_server_start(struct jrpc_server *server) {
286
300
perror ("listen" );
287
301
exit (1 );
288
302
}
289
-
290
- printf ("server: waiting for connections...\n" );
303
+ if ( server -> debug_level )
304
+ printf ("server: waiting for connections...\n" );
291
305
292
306
ev_io_init (& server -> listen_watcher , accept_cb , sockfd , EV_READ );
293
307
server -> listen_watcher .data = server ;
0 commit comments