mirror of
git://sourceware.org/git/lvm2.git
synced 2025-01-24 06:04:19 +03:00
Also parse the config_tree on the client end (daemon-client.c).
This commit is contained in:
parent
a084548cce
commit
e828044efd
@ -44,13 +44,18 @@ daemon_reply daemon_send(daemon_handle h, daemon_request rq)
|
|||||||
write_buffer(h.socket_fd, rq.buffer, strlen(rq.buffer));
|
write_buffer(h.socket_fd, rq.buffer, strlen(rq.buffer));
|
||||||
|
|
||||||
if (read_buffer(h.socket_fd, &reply.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
|
} else
|
||||||
reply.error = 1;
|
reply.error = 1;
|
||||||
|
|
||||||
return reply;
|
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, ...)
|
daemon_reply daemon_send_simple(daemon_handle h, char *id, ...)
|
||||||
{
|
{
|
||||||
va_list ap;
|
va_list ap;
|
||||||
|
@ -41,13 +41,13 @@ typedef struct {
|
|||||||
* knobs = [ "twiddle", "tweak" ]
|
* knobs = [ "twiddle", "tweak" ]
|
||||||
* }
|
* }
|
||||||
*/
|
*/
|
||||||
struct config_node *cft;
|
struct config_tree *cft;
|
||||||
} daemon_request;
|
} daemon_request;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
int error; /* 0 for success */
|
int error; /* 0 for success */
|
||||||
char *buffer; /* textual reply */
|
char *buffer; /* textual reply */
|
||||||
struct config_node *cft; /* parsed reply, if available */
|
struct config_tree *cft; /* parsed reply, if available */
|
||||||
} daemon_reply;
|
} 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, ...);
|
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. */
|
/* Shut down the communication to the daemon. Compulsory. */
|
||||||
void daemon_close(daemon_handle h);
|
void daemon_close(daemon_handle h);
|
||||||
|
|
||||||
|
@ -25,6 +25,7 @@
|
|||||||
|
|
||||||
#include <syslog.h>
|
#include <syslog.h>
|
||||||
#include "daemon-server.h"
|
#include "daemon-server.h"
|
||||||
|
#include "daemon-shared.h"
|
||||||
#include "libdevmapper.h"
|
#include "libdevmapper.h"
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
@ -200,6 +201,18 @@ static void _daemonise(void)
|
|||||||
setsid();
|
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 {
|
struct thread_baton {
|
||||||
daemon_state s;
|
daemon_state s;
|
||||||
client_handle client;
|
client_handle client;
|
||||||
|
@ -38,6 +38,12 @@ typedef struct {
|
|||||||
|
|
||||||
struct daemon_state;
|
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
|
* 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).
|
* thread. It is presented by a parsed request (in the form of a config tree).
|
||||||
|
@ -6,11 +6,9 @@ typedef struct {
|
|||||||
|
|
||||||
static response handler(daemon_state s, client_handle h, request r)
|
static response handler(daemon_state s, client_handle h, request r)
|
||||||
{
|
{
|
||||||
response res;
|
fprintf(stderr, "[D] REQUEST: %s, param = %d\n", find_config_str(r.cft->root, "request", "NONE"),
|
||||||
fprintf(stderr, "[D] REQUEST: %s\n", find_config_str(r.cft->root, "request", "NONE"));
|
find_config_int(r.cft->root, "param", -1));
|
||||||
res.error = 1;
|
return daemon_reply_simple("hey there", "param = %d", 42, NULL);
|
||||||
res.buffer = strdup("hey hey.\n\n");
|
|
||||||
return res;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int setup_post(daemon_state *s)
|
static int setup_post(daemon_state *s)
|
||||||
|
@ -5,7 +5,9 @@ int main() {
|
|||||||
int i;
|
int i;
|
||||||
for (i = 0; i < 5; ++i ) {
|
for (i = 0; i < 5; ++i ) {
|
||||||
daemon_reply reply = daemon_send_simple(h, "hello world", "param = %d", 3, NULL);
|
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);
|
daemon_close(h);
|
||||||
return 0;
|
return 0;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user