examples: split client/server code
[project/ubus.git] / examples / client.c
diff --git a/examples/client.c b/examples/client.c
new file mode 100644 (file)
index 0000000..315a8e3
--- /dev/null
@@ -0,0 +1,79 @@
+/*
+ * Copyright (C) 2011 Felix Fietkau <nbd@openwrt.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 2.1
+ * as published by the Free Software Foundation
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
+
+#include <unistd.h>
+
+#include "libubus.h"
+
+static struct ubus_context *ctx;
+static struct blob_buf b;
+
+static struct ubus_object test_client_object = {};
+
+static void client_main(void)
+{
+       uint32_t id;
+       int ret;
+
+       ret = ubus_add_object(ctx, &test_client_object);
+       if (ret) {
+               fprintf(stderr, "Failed to add_object object: %s\n", ubus_strerror(ret));
+               return;
+       }
+
+       if (ubus_lookup_id(ctx, "test", &id)) {
+               fprintf(stderr, "Failed to look up test object\n");
+               return;
+       }
+
+       blob_buf_init(&b, 0);
+       blobmsg_add_u32(&b, "id", test_client_object.id);
+       ubus_invoke(ctx, id, "watch", b.head, NULL, 0, 3000);
+       uloop_run();
+}
+
+int main(int argc, char **argv)
+{
+       const char *ubus_socket = NULL;
+       int ch;
+
+       while ((ch = getopt(argc, argv, "cs:")) != -1) {
+               switch (ch) {
+               case 's':
+                       ubus_socket = optarg;
+                       break;
+               default:
+                       break;
+               }
+       }
+
+       argc -= optind;
+       argv += optind;
+
+       uloop_init();
+
+       ctx = ubus_connect(ubus_socket);
+       if (!ctx) {
+               fprintf(stderr, "Failed to connect to ubus\n");
+               return -1;
+       }
+
+       ubus_add_uloop(ctx);
+
+       client_main();
+
+       ubus_free(ctx);
+       uloop_done();
+
+       return 0;
+}