ub_val_t clubby_proto_create_frame_base(struct ub_ctx *ctx, const char *dst) { ub_val_t frame = ub_create_object(ctx); ub_add_prop(ctx, frame, "src", ub_create_string(ctx, get_cfg()->clubby.device_id)); ub_add_prop(ctx, frame, "key", ub_create_string(ctx, get_cfg()->clubby.device_psk)); ub_add_prop(ctx, frame, "dst", ub_create_string(ctx, dst)); return frame; }
ub_val_t clubby_proto_create_resp(struct ub_ctx *ctx, const char *device_id, const char *device_psk, const char *dst, int64_t id, ub_val_t result, ub_val_t error) { ub_val_t frame = clubby_proto_create_frame_base(ctx, CLUBBY_UNDEFINED, id, device_id, device_psk, dst); if (result.kind != UBJSON_TYPE_UNDEFINED) { ub_add_prop(ctx, frame, "result", result); } if (error.kind != UBJSON_TYPE_UNDEFINED) { ub_add_prop(ctx, frame, "error", error); } return frame; }
ub_val_t clubby_proto_create_frame(struct ub_ctx *ctx, const char *dst, ub_val_t cmds) { ub_val_t frame = clubby_proto_create_frame_base(ctx, dst); ub_add_prop(ctx, frame, "cmds", cmds); return frame; }
ub_val_t clubby_proto_create_resp(struct ub_ctx *ctx, const char *dst, int64_t id, int status, const char *status_msg) { ub_val_t frame = clubby_proto_create_frame_base(ctx, dst); ub_val_t resp = ub_create_array(ctx); ub_add_prop(ctx, frame, "resp", resp); ub_val_t respv = ub_create_object(ctx); ub_array_push(ctx, resp, respv); ub_add_prop(ctx, respv, "id", ub_create_number(id)); ub_add_prop(ctx, respv, "status", ub_create_number(status)); if (status_msg != 0) { ub_add_prop(ctx, respv, "status_msg", ub_create_string(ctx, status_msg)); } return frame; }
ub_val_t clubby_proto_create_frame_base(struct ub_ctx *ctx, ub_val_t frame_proto, int64_t id, const char *device_id, const char *device_psk, const char *dst) { ub_val_t ret; if (frame_proto.kind == UBJSON_TYPE_UNDEFINED) { ret = ub_create_object(ctx); } else { ret = frame_proto; } ub_add_prop(ctx, ret, "v", ub_create_number(2)); ub_add_prop(ctx, ret, "src", ub_create_string(ctx, device_id)); ub_add_prop(ctx, ret, "key", ub_create_string(ctx, device_psk)); if (dst != NULL) { ub_add_prop(ctx, ret, "dst", ub_create_string(ctx, dst)); } ub_add_prop(ctx, ret, "id", ub_create_number(id)); return ret; }
ub_val_t clubby_proto_create_frame(struct ub_ctx *ctx, int64_t id, const char *device_id, const char *device_psk, const char *dst, const char *method, ub_val_t args, uint32_t timeout, time_t deadline) { ub_val_t frame = clubby_proto_create_frame_base(ctx, CLUBBY_UNDEFINED, id, device_id, device_psk, dst); ub_add_prop(ctx, frame, "method", ub_create_string(ctx, method)); if (args.kind != UBJSON_TYPE_UNDEFINED) { ub_add_prop(ctx, frame, "args", args); } if (timeout != 0) { ub_add_prop(ctx, frame, "timeout", ub_create_number(timeout)); } if (deadline != 0) { ub_add_prop(ctx, frame, "deadline", ub_create_number(deadline)); } return frame; }
static void console_make_clubby_call(struct v7 *v7, char *logs) { clubby_handle_t clubby_h = console_get_current_clubby(v7); struct ub_ctx *ctx = ub_ctx_new(); ub_val_t log_cmd_args = ub_create_object(ctx); /* * TODO(alashkin): we need ub_create_string_n for non-zero terminated * strings */ ub_add_prop(ctx, log_cmd_args, "msg", ub_create_string(ctx, logs)); /* TODO(alashkin): set command timeout */ s_waiting_for_resp = 1; sj_clubby_call(clubby_h, NULL, "/v1/Log.Log", ctx, log_cmd_args, 0, clubby_cb, v7); }