examples: split client/server code
This commit is contained in:
parent
57d1599c1a
commit
fc913a077d
4 changed files with 88 additions and 39 deletions
3
.gitignore
vendored
3
.gitignore
vendored
|
@ -5,7 +5,8 @@ CMakeFiles
|
||||||
*.a
|
*.a
|
||||||
*.so
|
*.so
|
||||||
*.dylib
|
*.dylib
|
||||||
ubus-example
|
examples/server
|
||||||
|
examples/client
|
||||||
ubusd
|
ubusd
|
||||||
ubus
|
ubus
|
||||||
install_manifest.txt
|
install_manifest.txt
|
||||||
|
|
|
@ -1,6 +1,10 @@
|
||||||
cmake_minimum_required(VERSION 2.6)
|
cmake_minimum_required(VERSION 2.6)
|
||||||
|
|
||||||
ADD_DEFINITIONS(-I..)
|
ADD_DEFINITIONS(-I..)
|
||||||
ADD_EXECUTABLE(ubus-example ubus-example.c)
|
|
||||||
TARGET_LINK_LIBRARIES(ubus-example ubus ubox)
|
ADD_EXECUTABLE(server server.c)
|
||||||
|
TARGET_LINK_LIBRARIES(server ubus ubox)
|
||||||
|
|
||||||
|
ADD_EXECUTABLE(client client.c)
|
||||||
|
TARGET_LINK_LIBRARIES(client ubus ubox)
|
||||||
|
|
||||||
|
|
79
examples/client.c
Normal file
79
examples/client.c
Normal file
|
@ -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;
|
||||||
|
}
|
|
@ -117,12 +117,6 @@ static struct ubus_object test_object = {
|
||||||
.n_methods = ARRAY_SIZE(test_methods),
|
.n_methods = ARRAY_SIZE(test_methods),
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct ubus_object test_client_object = {
|
|
||||||
.type = &test_object_type,
|
|
||||||
.methods = test_methods,
|
|
||||||
.n_methods = ARRAY_SIZE(test_methods),
|
|
||||||
};
|
|
||||||
|
|
||||||
static void server_main(void)
|
static void server_main(void)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
@ -138,32 +132,9 @@ static void server_main(void)
|
||||||
uloop_run();
|
uloop_run();
|
||||||
}
|
}
|
||||||
|
|
||||||
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_object.name, &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)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
const char *ubus_socket = NULL;
|
const char *ubus_socket = NULL;
|
||||||
bool client = false;
|
|
||||||
int ch;
|
int ch;
|
||||||
|
|
||||||
while ((ch = getopt(argc, argv, "cs:")) != -1) {
|
while ((ch = getopt(argc, argv, "cs:")) != -1) {
|
||||||
|
@ -171,9 +142,6 @@ int main(int argc, char **argv)
|
||||||
case 's':
|
case 's':
|
||||||
ubus_socket = optarg;
|
ubus_socket = optarg;
|
||||||
break;
|
break;
|
||||||
case 'c':
|
|
||||||
client = true;
|
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -192,10 +160,7 @@ int main(int argc, char **argv)
|
||||||
|
|
||||||
ubus_add_uloop(ctx);
|
ubus_add_uloop(ctx);
|
||||||
|
|
||||||
if (client)
|
server_main();
|
||||||
client_main();
|
|
||||||
else
|
|
||||||
server_main();
|
|
||||||
|
|
||||||
ubus_free(ctx);
|
ubus_free(ctx);
|
||||||
uloop_done();
|
uloop_done();
|
Loading…
Add table
Reference in a new issue