static void create_vlan_callback(struct ubus_request *req, int type, struct blob_attr *msg) { char *str = NULL; struct Rmsg; struct blob_attr *tb[__FRAMEWORK_MAX]; struct json_object *new_obj; blobmsg_parse(framework_result_policy, ARRAY_SIZE(framework_result_policy), tb, blob_data(msg), blob_len(msg)); Rmsg.msg = blobmsg_get_string(tb[FRAMEWORK_RESULT_MSG]); Rmsg.resCode = (int)blobmsg_get_u16(tb[FRAMEWORK_RESULT_CODE]); new_obj = json_tokener_parse(Rmsg.msg); if(Rmsg.resCode == LR_ERR_NONE){ /* success add new vlan entry */ if(new_obj){ struct json_object *o = json_object_object_get(new_obj,"vlanID"); u16 vid = json_object_get_int(o); new_vlan_software(vid); json_object_put(o); json_object_put(new_obj); Rmsg.msg = ""; } } if((asyncResult == NULL) || (asyncResult->result_data_cb == NULL)){ str = blobmsg_format_json(msg, true); printf("%s\n",str); free(str); }else{ asyncResult->result_data_cb(&Rmsg); } }
static void receive_event(struct ubus_context *ctx, struct ubus_event_handler *ev, const char *type, struct blob_attr *msg) { char *str; str = blobmsg_format_json(msg, true); printf("{ \"%s\": %s }\n", type, str); free(str); }
int trafficd_router2cli_msg_handle(const char *type, struct blob_attr *msg) { char *str; str = blobmsg_format_json(msg, true); D(BUS, "{ \"%s\": %s }\n", type, str); free(str); /* subsys=xxx md5=xxx url=xxx version=xxx */ return 0; }
static void receive_event(struct ubus_context *ctx, struct ubus_event_handler *ev, const char *type, struct blob_attr *msg) { char *str; str = blobmsg_format_json(msg, true); //printf("{ \"%s\": %s }\n\n", type, str); pid_t pid = fork(); if (pid == 0) { execl("/usr/bin/lua", "lua", "/usr/bin/ubus-linknx.lua", type, str, NULL); } free(str); }
static void swVlan_result_data(struct ubus_request *req, int type, struct blob_attr *msg) { char *str = NULL; struct Rmsg; struct blob_attr *tb[__FRAMEWORK_MAX]; //pthread_mutex_lock(&gClient->client_cb_mutex); blobmsg_parse(framework_result_policy, ARRAY_SIZE(framework_result_policy), tb, blob_data(msg), blob_len(msg)); Rmsg.msg = blobmsg_get_string(tb[FRAMEWORK_RESULT_MSG]); Rmsg.resCode = blobmsg_get_u16(tb[FRAMEWORK_RESULT_CODE]); if((asyncResult == NULL) || (asyncResult->result_data_cb == NULL)){ str = blobmsg_format_json(msg, true); printf("%s\n",str); free(str); }else{ asyncResult->result_data_cb(&Rmsg); } //pthread_mutex_unlock(&gClient->client_cb_mutex); return; }
static bool rpc_plugin_lookup_plugin(struct ubus_context *ctx, struct ubus_object *obj, char *strptr) { struct rpc_plugin_lookup_context c = { .id = obj->id, .name = strptr }; if (ubus_lookup(ctx, NULL, rpc_plugin_lookup_plugin_cb, &c)) return false; return c.found; } struct call_context { char path[PATH_MAX]; const char *argv[4]; char *method; char *input; json_tokener *tok; json_object *obj; bool input_done; bool output_done; }; static int rpc_plugin_call_stdin_cb(struct ustream *s, void *priv) { struct call_context *c = priv; if (!c->input_done) { ustream_write(s, c->input, strlen(c->input), false); c->input_done = true; } return 0; } static int rpc_plugin_call_stdout_cb(struct blob_buf *blob, char *buf, int len, void *priv) { struct call_context *c = priv; if (!c->output_done) { c->obj = json_tokener_parse_ex(c->tok, buf, len); if (json_tokener_get_error(c->tok) != json_tokener_continue) c->output_done = true; } return len; } static int rpc_plugin_call_stderr_cb(struct blob_buf *blob, char *buf, int len, void *priv) { return len; } static int rpc_plugin_call_finish_cb(struct blob_buf *blob, int stat, void *priv) { struct call_context *c = priv; int rv = UBUS_STATUS_INVALID_ARGUMENT; if (json_tokener_get_error(c->tok) == json_tokener_success) { if (c->obj) { if (json_object_get_type(c->obj) == json_type_object && blobmsg_add_object(blob, c->obj)) rv = UBUS_STATUS_OK; json_object_put(c->obj); } else { rv = UBUS_STATUS_NO_DATA; } } json_tokener_free(c->tok); free(c->input); free(c->method); return rv; } static int rpc_plugin_call(struct ubus_context *ctx, struct ubus_object *obj, struct ubus_request_data *req, const char *method, struct blob_attr *msg) { int rv = UBUS_STATUS_UNKNOWN_ERROR; struct call_context *c; char *plugin; c = calloc(1, sizeof(*c)); if (!c) goto fail; c->method = strdup(method); c->input = blobmsg_format_json(msg, true); c->tok = json_tokener_new(); if (!c->method || !c->input || !c->tok) goto fail; plugin = c->path + sprintf(c->path, "%s/", RPC_PLUGIN_DIRECTORY); if (!rpc_plugin_lookup_plugin(ctx, obj, plugin)) { rv = UBUS_STATUS_NOT_FOUND; goto fail; } c->argv[0] = c->path; c->argv[1] = "call"; c->argv[2] = c->method; return rpc_exec(c->argv, rpc_plugin_call_stdin_cb, rpc_plugin_call_stdout_cb, rpc_plugin_call_stderr_cb, rpc_plugin_call_finish_cb, c, ctx, req); fail: if (c) { if (c->method) free(c->method); if (c->input) free(c->input); if (c->tok) json_tokener_free(c->tok); free(c); } return rv; }
static int log_notify(struct blob_attr *msg) { struct blob_attr *tb[__LOG_MAX]; struct stat s; char buf[512]; uint32_t p; char *str; time_t t; char *c, *m; int ret = 0; if (sender.fd < 0) return 0; blobmsg_parse(log_policy, ARRAY_SIZE(log_policy), tb, blob_data(msg), blob_len(msg)); if (!tb[LOG_ID] || !tb[LOG_PRIO] || !tb[LOG_SOURCE] || !tb[LOG_TIME] || !tb[LOG_MSG]) return 1; if ((log_type == LOG_FILE) && log_size && (!stat(log_file, &s)) && (s.st_size > log_size)) { char *old = malloc(strlen(log_file) + 5); close(sender.fd); if (old) { sprintf(old, "%s.old", log_file); rename(log_file, old); free(old); } sender.fd = open(log_file, O_CREAT | O_WRONLY | O_APPEND, 0600); if (sender.fd < 0) { fprintf(stderr, "failed to open %s: %s\n", log_file, strerror(errno)); exit(-1); } } m = blobmsg_get_string(tb[LOG_MSG]); t = blobmsg_get_u64(tb[LOG_TIME]) / 1000; c = ctime(&t); p = blobmsg_get_u32(tb[LOG_PRIO]); c[strlen(c) - 1] = '\0'; str = blobmsg_format_json(msg, true); if (log_type == LOG_NET) { int err; snprintf(buf, sizeof(buf), "<%u>", p); strncat(buf, c + 4, 16); if (hostname) { strncat(buf, hostname, sizeof(buf) - strlen(buf) - 1); strncat(buf, " ", sizeof(buf) - strlen(buf) - 1); } if (log_prefix) { strncat(buf, log_prefix, sizeof(buf) - strlen(buf) - 1); strncat(buf, ": ", sizeof(buf) - strlen(buf) - 1); } if (blobmsg_get_u32(tb[LOG_SOURCE]) == SOURCE_KLOG) strncat(buf, "kernel: ", sizeof(buf) - strlen(buf) - 1); strncat(buf, m, sizeof(buf) - strlen(buf) - 1); if (log_udp) err = write(sender.fd, buf, strlen(buf)); else { size_t buflen = strlen(buf); if (!log_trailer_null) buf[buflen] = '\n'; err = send(sender.fd, buf, buflen + 1, 0); } if (err < 0) { syslog(LOG_INFO, "failed to send log data to %s:%s via %s\n", log_ip, log_port, (log_udp) ? ("udp") : ("tcp")); uloop_fd_delete(&sender); close(sender.fd); sender.fd = -1; uloop_timeout_set(&retry, 1000); } } else { snprintf(buf, sizeof(buf), "%s %s.%s%s %s\n", c, getcodetext(LOG_FAC(p) << 3, facilitynames), getcodetext(LOG_PRI(p), prioritynames), (blobmsg_get_u32(tb[LOG_SOURCE])) ? ("") : (" kernel:"), m); ret = write(sender.fd, buf, strlen(buf)); } free(str); if (log_type == LOG_FILE) fsync(sender.fd); return ret; }