]> sourceware.org Git - lvm2.git/commitdiff
Implement daemon_send_simple and use it in the testclient.
authorPetr Rockai <prockai@redhat.com>
Mon, 27 Jun 2011 13:15:49 +0000 (13:15 +0000)
committerPetr Rockai <prockai@redhat.com>
Mon, 27 Jun 2011 13:15:49 +0000 (13:15 +0000)
daemons/common/daemon-shared.c
daemons/common/daemon-shared.h
daemons/lvmetad/lvmetad-core.c
daemons/lvmetad/testclient.c

index 831eb4d5c583cf5e3e0c852a92afda844b6d3963..92e388d13bc3921ef24fed469d19672961bcf1a0 100644 (file)
@@ -2,12 +2,15 @@
 #include <stdio.h>
 #include <malloc.h>
 #include <string.h>
+#include "daemon-shared.h"
 
 /*
  * Read a single message from a (socket) filedescriptor. Messages are delimited
  * by blank lines. This call will block until all of a message is received. The
  * memory will be allocated from heap. Upon error, all memory is freed and the
  * buffer pointer is set to NULL.
+ *
+ * See also write_buffer about blocking (read_buffer has identical behaviour).
  */
 int read_buffer(int fd, char **buffer) {
        int bytes = 0;
@@ -66,3 +69,43 @@ int write_buffer(int fd, char *buffer, int length) {
        }
        return 0;
 }
+
+char *format_buffer(char *id, va_list ap)
+{
+       char *buffer, *old;
+       char *next;
+       char *format;
+
+       dm_asprintf(&buffer, "request = \"%s\"\n", id);
+       if (!buffer) goto fail;
+
+       while (next = va_arg(ap, char *)) {
+               old = buffer;
+               if (strstr(next, "%d") || strstr(next, "%s")) {
+                       dm_asprintf(&format, "%%s%s\n", next);
+                       if (!format) goto fail;
+
+                       if (strstr(format, "%d"))
+                               dm_asprintf(&buffer, format, buffer, va_arg(ap, int));
+                       else
+                               dm_asprintf(&buffer, format, buffer, va_arg(ap, char *));
+
+                       dm_free(format);
+                       dm_free(old);
+                       if (!buffer) goto fail;
+               } else {
+                       dm_asprintf(&buffer, "%s%s", buffer, next);
+                       dm_free(old);
+                       if (!buffer) goto fail;
+               }
+       }
+
+       old = buffer;
+       dm_asprintf(&buffer, "%s\n", buffer);
+       dm_free(old);
+
+       return buffer;
+fail:
+       dm_free(buffer);
+       return NULL;
+}
index ae7843f3da3b2673373cd1e0f042a1b5d21e5438..8d69ccd5537f55bfc37cd09659b96f277653532f 100644 (file)
@@ -1,2 +1,6 @@
+#include <stdarg.h>
+#include <libdevmapper.h>
+
 int read_buffer(int fd, char **buffer);
 int write_buffer(int fd, char *buffer, int length);
+char *format_buffer(char *id, va_list ap);
index 9f5deb0faacd4a7effe916122e978e06c95a2474..0235014472bd034591d35f1ed422951faa5e18f2 100644 (file)
@@ -7,7 +7,7 @@ typedef struct {
 static response handler(daemon_state s, client_handle h, request r)
 {
        response res;
-       fprintf(stderr, "handling client request: %s\n", r.buffer);
+       fprintf(stderr, "---- server obtained:\n%s\n----------------------\n", r.buffer);
        res.error = 1;
        res.buffer = strdup("hey hey.\n\n");
        return res;
index bcd285d97c48610224a53ebd35083d9a15000ba6..211ad2f4c62c09d6ece03715b2e34141734ba19c 100644 (file)
@@ -2,10 +2,9 @@
 
 int main() {
        daemon_handle h = lvmetad_open();
-       daemon_request rq = { .buffer= "hello worldn\n" };
        int i;
        for (i = 0; i < 5; ++i ) {
-               daemon_reply reply = daemon_send(h, rq);
+               daemon_reply reply = daemon_send_simple(h, "hello world", "param = %d", 3, NULL);
                fprintf(stderr, "daemon says: %s\n", reply.buffer);
        }
        daemon_close(h);
This page took 0.040464 seconds and 5 git commands to generate.