static ub_val_t obj_to_ubj(struct v7 *v7, struct ub_ctx *ctx, v7_val_t obj) { LOG(LL_VERBOSE_DEBUG, ("enter")); if (v7_is_number(obj)) { double n = v7_get_double(v7, obj); LOG(LL_VERBOSE_DEBUG, ("type=number val=%d", (int) n)) return ub_create_number(n); } else if (v7_is_string(obj)) {
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; }