X-Git-Url: http://git.openwrt.org/?a=blobdiff_plain;ds=sidebyside;f=ubusd.h;h=5031ed455dd0c97dc948b92c4c238f7d2aa233ce;hb=HEAD;hp=867cde9a384bacacec2a39ec366ca8abbd670aba;hpb=c413be9b376c685e4a5b04b1d0d9d716dfbeb460;p=project%2Fubus.git diff --git a/ubusd.h b/ubusd.h index 867cde9..f43b936 100644 --- a/ubusd.h +++ b/ubusd.h @@ -23,8 +23,8 @@ #include "ubusmsg.h" #include "ubusd_acl.h" -#define UBUSD_CLIENT_BACKLOG 32 #define UBUS_OBJ_HASH_BITS 4 +#define UBUS_CLIENT_MAX_TXQ_LEN UBUS_MAX_MSGLEN extern struct blob_buf b; @@ -36,6 +36,17 @@ struct ubus_msg_buf { int len; }; +struct ubus_msg_buf_list { + struct list_head list; + struct ubus_msg_buf *msg; +}; + +struct ubus_client_cmd { + struct list_head list; + struct ubus_msg_buf *msg; + struct ubus_object *obj; +}; + struct ubus_client { struct ubus_id id; struct uloop_fd sock; @@ -48,8 +59,10 @@ struct ubus_client { struct list_head objects; - struct ubus_msg_buf *tx_queue[UBUSD_CLIENT_BACKLOG]; - unsigned int txq_cur, txq_tail, txq_ofs; + struct list_head cmd_queue; + struct list_head tx_queue; + unsigned int txq_ofs; + unsigned int txq_len; struct ubus_msg_buf *pending_msg; struct ubus_msg_buf *retmsg; @@ -72,13 +85,15 @@ struct ubus_msg_buf *ubus_msg_new(void *data, int len, bool shared); void ubus_msg_send(struct ubus_client *cl, struct ubus_msg_buf *ub); ssize_t ubus_msg_writev(int fd, struct ubus_msg_buf *ub, size_t offset); void ubus_msg_free(struct ubus_msg_buf *ub); -struct blob_attr **ubus_parse_msg(struct blob_attr *msg); +void ubus_msg_list_free(struct ubus_msg_buf_list *ubl); +struct blob_attr **ubus_parse_msg(struct blob_attr *msg, size_t len); struct ubus_client *ubusd_proto_new_client(int fd, uloop_fd_handler cb); void ubusd_proto_receive_message(struct ubus_client *cl, struct ubus_msg_buf *ub); void ubusd_proto_free_client(struct ubus_client *cl); void ubus_proto_send_msg_from_blob(struct ubus_client *cl, struct ubus_msg_buf *ub, uint8_t type); +int ubusd_cmd_lookup(struct ubus_client *cl, struct ubus_client_cmd *cmd); typedef struct ubus_msg_buf *(*event_fill_cb)(void *priv, const char *id); void ubusd_event_init(void);