14 #include <sys/types.h>
15 #include <sys/socket.h>
18 #include <libubox/blob.h>
19 #include <libubox/blobmsg.h>
45 struct list_head
list;
49 static int ubus_cmp_id(
const void *k1,
const void *k2,
void *ptr)
51 const uint32_t *id1 = k1, *id2 = k2;
72 sprintf(err,
"Unknown error: %d", error);
82 pending = calloc_a(
sizeof(*pending), &data, blob_raw_len(buf->
data));
86 memcpy(data, buf->
data, blob_raw_len(buf->
data));
130 list_del(&pending->
list);
145 struct blob_attr **attr;
166 blob_buf_init(&
b, 0);
181 struct blob_attr **attr;
182 uint32_t *
id = req->
priv;
196 blob_buf_init(&
b, 0);
211 const char *method,
struct blob_attr *msg)
216 ev->
cb(
ctx, ev, method, msg);
230 struct blob_buf b2 = {};
246 blob_buf_init(&b2, 0);
247 blobmsg_add_u32(&b2,
"object", obj->
id);
249 blobmsg_add_string(&b2,
"pattern", pattern);
259 struct blob_attr *data)
264 blob_buf_init(&
b, 0);
268 blobmsg_add_string(&
b,
"id",
id);
269 blobmsg_add_field(&
b, BLOBMSG_TYPE_TABLE,
"data", blob_data(data), blob_len(data));
270 blob_nest_end(&
b, s);
287 memset(
ctx, 0,
sizeof(*
ctx));
319 uloop_timeout_set(
timeout, 1000);
327 uloop_timeout_set(&conn->
timer, 1000);
335 uloop_timeout_set(
timeout, 1000);
336 fprintf(stderr,
"failed to connect to ubus\n");
341 conn->
cb(&conn->
ctx);
355 ctx = calloc(1,
sizeof(*
ctx));
int(* cb)(struct ubus_context *ctx, int argc, char **argv)
static struct ubus_context * ctx
void ubus_process_obj_msg(struct ubus_context *ctx, struct ubus_msghdr_buf *buf, int fd)
void ubus_handle_data(struct uloop_fd *u, unsigned int events)
int __hidden ubus_start_request(struct ubus_context *ctx, struct ubus_request *req, struct blob_attr *msg, int cmd, uint32_t peer)
void ubus_process_req_msg(struct ubus_context *ctx, struct ubus_msghdr_buf *buf, int fd)
struct blob_attr ** ubus_parse_msg(struct blob_attr *msg, size_t len)
int ubus_reconnect(struct ubus_context *ctx, const char *path)
int ubus_add_object(struct ubus_context *ctx, struct ubus_object *obj)
int ubus_complete_request(struct ubus_context *ctx, struct ubus_request *req, int req_timeout)
struct ubus_context * ubus_connect(const char *path)
static int ubus_cmp_id(const void *k1, const void *k2, void *ptr)
void ubus_auto_connect(struct ubus_auto_conn *conn)
int ubus_lookup(struct ubus_context *ctx, const char *path, ubus_lookup_handler_t cb, void *priv)
static void ubus_auto_reconnect_cb(struct uloop_timeout *timeout)
static const struct ubus_method event_method
static void ubus_auto_connect_cb(struct uloop_timeout *timeout)
struct blob_buf b __hidden
int ubus_send_event(struct ubus_context *ctx, const char *id, struct blob_attr *data)
static void ubus_lookup_cb(struct ubus_request *ureq, int type, struct blob_attr *msg)
void ubus_free(struct ubus_context *ctx)
static void ubus_queue_msg(struct ubus_context *ctx, struct ubus_msghdr_buf *buf)
void ubus_shutdown(struct ubus_context *ctx)
int ubus_connect_ctx(struct ubus_context *ctx, const char *path)
int ubus_lookup_id(struct ubus_context *ctx, const char *path, uint32_t *id)
const char * ubus_strerror(int error)
void __hidden ubus_process_msg(struct ubus_context *ctx, struct ubus_msghdr_buf *buf, int fd)
static void ubus_auto_disconnect_cb(struct ubus_context *ctx)
static void ubus_default_connection_lost(struct ubus_context *ctx)
static int ubus_event_cb(struct ubus_context *ctx, struct ubus_object *obj, struct ubus_request_data *req, const char *method, struct blob_attr *msg)
const char * __ubus_strerror[__UBUS_STATUS_LAST]
int ubus_register_event_handler(struct ubus_context *ctx, struct ubus_event_handler *ev, const char *pattern)
static void ubus_lookup_id_cb(struct ubus_request *req, int type, struct blob_attr *msg)
static void ubus_process_pending_msg(struct uloop_timeout *timeout)
static void ubus_add_uloop(struct ubus_context *ctx)
void(* ubus_lookup_handler_t)(struct ubus_context *ctx, struct ubus_object_data *obj, void *priv)
static int ubus_invoke(struct ubus_context *ctx, uint32_t obj, const char *method, struct blob_attr *msg, ubus_data_handler_t cb, void *priv, int timeout)
struct uloop_timeout timer
ubus_connect_handler_t cb
struct uloop_timeout pending_timer
struct list_head requests
struct ubus_msghdr_buf msgbuf
void(* connection_lost)(struct ubus_context *ctx)
void(* monitor_cb)(struct ubus_context *ctx, uint32_t seq, struct blob_attr *data)
struct list_head auto_subscribers
struct blob_attr * signature
struct ubus_object_type * type
const struct ubus_method * methods
struct ubus_msghdr_buf hdr
ubus_data_handler_t raw_data_cb
struct ubus_context * ctx
#define UBUS_MSG_CHUNK_SIZE
#define UBUS_SYSTEM_OBJECT_EVENT
@ UBUS_STATUS_INVALID_ARGUMENT
@ UBUS_STATUS_METHOD_NOT_FOUND
@ UBUS_STATUS_INVALID_COMMAND
@ UBUS_STATUS_CONNECTION_FAILED
@ UBUS_STATUS_PERMISSION_DENIED
@ UBUS_STATUS_UNKNOWN_ERROR
@ UBUS_STATUS_SYSTEM_ERROR
@ UBUS_STATUS_PARSE_ERROR
@ UBUS_STATUS_NOT_SUPPORTED