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
|
||||
*.so
|
||||
*.dylib
|
||||
ubus-example
|
||||
examples/server
|
||||
examples/client
|
||||
ubusd
|
||||
ubus
|
||||
install_manifest.txt
|
||||
|
|
|
@ -1,6 +1,10 @@
|
|||
cmake_minimum_required(VERSION 2.6)
|
||||
|
||||
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),
|
||||
};
|
||||
|
||||
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)
|
||||
{
|
||||
int ret;
|
||||
|
@ -138,32 +132,9 @@ static void server_main(void)
|
|||
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)
|
||||
{
|
||||
const char *ubus_socket = NULL;
|
||||
bool client = false;
|
||||
int ch;
|
||||
|
||||
while ((ch = getopt(argc, argv, "cs:")) != -1) {
|
||||
|
@ -171,9 +142,6 @@ int main(int argc, char **argv)
|
|||
case 's':
|
||||
ubus_socket = optarg;
|
||||
break;
|
||||
case 'c':
|
||||
client = true;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
@ -192,10 +160,7 @@ int main(int argc, char **argv)
|
|||
|
||||
ubus_add_uloop(ctx);
|
||||
|
||||
if (client)
|
||||
client_main();
|
||||
else
|
||||
server_main();
|
||||
server_main();
|
||||
|
||||
ubus_free(ctx);
|
||||
uloop_done();
|
Loading…
Add table
Reference in a new issue