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; )
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 }