From: Petr Rockai Date: Mon, 27 Jun 2011 13:58:11 +0000 (+0000) Subject: Also parse the config_tree on the client end (daemon-client.c). X-Git-Tag: v2_02_91~809 X-Git-Url: https://sourceware.org/git/?a=commitdiff_plain;h=aaca7f111f4b9c773aa4340d4484e9f0d2c49cb9;p=lvm2.git Also parse the config_tree on the client end (daemon-client.c). --- diff --git a/daemons/common/daemon-client.c b/daemons/common/daemon-client.c index 50d22ae75..49d5eefd3 100644 --- a/daemons/common/daemon-client.c +++ b/daemons/common/daemon-client.c @@ -44,13 +44,18 @@ daemon_reply daemon_send(daemon_handle h, daemon_request rq) write_buffer(h.socket_fd, rq.buffer, strlen(rq.buffer)); if (read_buffer(h.socket_fd, &reply.buffer)) { - /* TODO: parse reply.buffer into reply.cft */ + reply.cft = create_config_tree_from_string(reply.buffer); } else reply.error = 1; return reply; } +void daemon_reply_destroy(daemon_reply r) { + if (r.cft) + destroy_config_tree(r.cft); +} + daemon_reply daemon_send_simple(daemon_handle h, char *id, ...) { va_list ap; diff --git a/daemons/common/daemon-client.h b/daemons/common/daemon-client.h index d266ba75d..61dca5b5d 100644 --- a/daemons/common/daemon-client.h +++ b/daemons/common/daemon-client.h @@ -41,13 +41,13 @@ typedef struct { * knobs = [ "twiddle", "tweak" ] * } */ - struct config_node *cft; + struct config_tree *cft; } daemon_request; typedef struct { int error; /* 0 for success */ char *buffer; /* textual reply */ - struct config_node *cft; /* parsed reply, if available */ + struct config_tree *cft; /* parsed reply, if available */ } daemon_reply; /* @@ -79,6 +79,8 @@ daemon_reply daemon_send(daemon_handle h, daemon_request r); */ daemon_reply daemon_send_simple(daemon_handle h, char *id, ...); +void daemon_reply_destroy(daemon_reply r); + /* Shut down the communication to the daemon. Compulsory. */ void daemon_close(daemon_handle h); diff --git a/daemons/common/daemon-server.c b/daemons/common/daemon-server.c index bdfe8735c..73a5c6780 100644 --- a/daemons/common/daemon-server.c +++ b/daemons/common/daemon-server.c @@ -25,6 +25,7 @@ #include #include "daemon-server.h" +#include "daemon-shared.h" #include "libdevmapper.h" #if 0 @@ -200,6 +201,18 @@ static void _daemonise(void) setsid(); } +response daemon_reply_simple(char *id, ...) +{ + va_list ap; + va_start(ap, id); + response res = { .buffer = format_buffer(id, ap), .cft = NULL }; + + if (!res.buffer) + res.error = ENOMEM; + + return res; +} + struct thread_baton { daemon_state s; client_handle client; diff --git a/daemons/common/daemon-server.h b/daemons/common/daemon-server.h index 2ac1554cb..93e1cc39d 100644 --- a/daemons/common/daemon-server.h +++ b/daemons/common/daemon-server.h @@ -38,6 +38,12 @@ typedef struct { struct daemon_state; +/* + * Craft a simple reply, without the need to construct a config_tree. See + * daemon_send_simple in daemon-client.h for the description of the parameters. + */ +response daemon_reply_simple(char *id, ...); + /* * The callback. Called once per request issued, in the respective client's * thread. It is presented by a parsed request (in the form of a config tree). diff --git a/daemons/lvmetad/lvmetad-core.c b/daemons/lvmetad/lvmetad-core.c index d3e17ede5..3e7bf8923 100644 --- a/daemons/lvmetad/lvmetad-core.c +++ b/daemons/lvmetad/lvmetad-core.c @@ -6,11 +6,9 @@ typedef struct { static response handler(daemon_state s, client_handle h, request r) { - response res; - fprintf(stderr, "[D] REQUEST: %s\n", find_config_str(r.cft->root, "request", "NONE")); - res.error = 1; - res.buffer = strdup("hey hey.\n\n"); - return res; + fprintf(stderr, "[D] REQUEST: %s, param = %d\n", find_config_str(r.cft->root, "request", "NONE"), + find_config_int(r.cft->root, "param", -1)); + return daemon_reply_simple("hey there", "param = %d", 42, NULL); } static int setup_post(daemon_state *s) diff --git a/daemons/lvmetad/testclient.c b/daemons/lvmetad/testclient.c index 6ff4ded18..6608d19e8 100644 --- a/daemons/lvmetad/testclient.c +++ b/daemons/lvmetad/testclient.c @@ -5,7 +5,9 @@ int main() { int i; for (i = 0; i < 5; ++i ) { daemon_reply reply = daemon_send_simple(h, "hello world", "param = %d", 3, NULL); - fprintf(stderr, "[C] obtained: %s\n", reply.buffer); + fprintf(stderr, "[C] REPLY: %s, param = %d\n", find_config_str(reply.cft->root, "request", "NONE"), + find_config_int(reply.cft->root, "param", -1)); + daemon_reply_destroy(reply); } daemon_close(h); return 0;