示例#1
0
static bool
_platform_info_reply_cb(struct sol_coap_server *server,
    struct sol_coap_packet *req, const struct sol_network_link_addr *addr,
    void *data)
{
    struct server_info_ctx *ctx = data;
    uint8_t *payload;
    uint16_t payload_len;
    struct sol_oic_platform_information info = { 0 };

    if (!req || !addr) {
        ctx->cb(ctx->client, NULL, (char *)ctx->data);
        goto free_ctx;
    }

    if (!ctx->cb) {
        SOL_WRN("No user callback provided");
        goto free_ctx;
    }

    if (!_pkt_has_same_token(req, ctx->token)) {
        goto free_ctx;
    }

    if (!sol_oic_pkt_has_cbor_content(req)) {
        goto free_ctx;
    }

    if (sol_coap_packet_get_payload(req, &payload, &payload_len) < 0) {
        SOL_WRN("Could not get pkt payload");
        goto free_ctx;
    }

    if (_parse_platform_info_payload(&info, payload, payload_len)) {
        SOL_SET_API_VERSION(info.api_version = SOL_OIC_PLATFORM_INFORMATION_API_VERSION; )
示例#2
0
SOL_API void
sol_oic_payload_debug(struct sol_coap_packet *pkt)
{
    SOL_NULL_CHECK(pkt);

#ifdef HAVE_STDOUT
    struct sol_buffer *buf;
    CborParser parser;
    CborValue root;
    CborError err;
    size_t offset;

    if (!sol_oic_pkt_has_cbor_content(pkt) ||
        !sol_coap_packet_has_payload(pkt)) {
        return;
    }
    if (sol_coap_packet_get_payload(pkt, &buf, &offset) < 0) {
        SOL_DBG("Failed to get packet payload");
        return;
    }

    err = cbor_parser_init(sol_buffer_at(buf, offset),
        buf->used - offset, 0, &parser, &root);
    if (err != CborNoError) {
        SOL_DBG("Failed to get cbor payload");
        return;
    }

    cbor_value_to_pretty(stdout, &root);
    fprintf(stdout, "\n");
#else
    SOL_DBG("Failed to log oic payload: stdout not available");
#endif
}