static void found_resource(struct sol_oic_client *cli, struct sol_oic_resource *res, void *data) { const char *query = NULL; struct sol_str_slice *slice; uint16_t idx; char addr[SOL_INET_ADDR_STRLEN]; if (!sol_network_addr_to_str(&res->addr, addr, sizeof(addr))) { SOL_WRN("Could not convert network address to string"); return; } printf("Found resource: coap://%s%.*s <observable: %s>\n", addr, (int)res->href.len, res->href.data, res->observable ? "yes" : "no"); printf("Resource types:\n"); SOL_VECTOR_FOREACH_IDX (&res->types, slice, idx) printf("\t\t%.*s\n", (int)slice->len, slice->data); printf("Resource interfaces:\n"); SOL_VECTOR_FOREACH_IDX (&res->interfaces, slice, idx) printf("\t\t%.*s\n", (int)slice->len, slice->data); printf("Issuing GET %.*s on resource...\n", (int)res->href.len, res->href.data); sol_oic_client_resource_request(cli, res, SOL_COAP_METHOD_GET, NULL, 0, got_get_response, data); printf("\n"); }
static void got_get_response(struct sol_oic_client *cli, const struct sol_network_link_addr *cliaddr, const struct sol_str_slice *href, const struct sol_str_slice *payload, void *data) { char addr[SOL_INET_ADDR_STRLEN]; if (!sol_network_addr_to_str(cliaddr, addr, sizeof(addr))) { SOL_WRN("Could not convert network address to string"); return; } printf("Received payload for GET from %s (%.*s): %.*s\n", addr, (int)href->len, href->data, (int)payload->len, payload->data); }
static void got_get_response(struct sol_oic_client *cli, const struct sol_network_link_addr *cliaddr, const struct sol_str_slice *href, const struct sol_vector *repr, void *data) { struct sol_oic_repr_field *field; char addr[SOL_INET_ADDR_STRLEN]; uint16_t idx; if (!sol_network_addr_to_str(cliaddr, addr, sizeof(addr))) { SOL_WRN("Could not convert network address to string"); return; } printf("Dumping payload received from addr %s {\n", addr); SOL_VECTOR_FOREACH_IDX (repr, field, idx) { printf("\tkey: '%s', value: ", field->key); switch (field->type) { case SOL_OIC_REPR_TYPE_UINT: printf("uint(%" PRIu64 ")\n", field->v_uint); break; case SOL_OIC_REPR_TYPE_INT: printf("int(%" PRIi64 ")\n", field->v_int); break; case SOL_OIC_REPR_TYPE_SIMPLE: printf("simple(%d)\n", field->v_simple); break; case SOL_OIC_REPR_TYPE_TEXT_STRING: printf("str(%.*s)\n", (int)field->v_slice.len, field->v_slice.data); break; case SOL_OIC_REPR_TYPE_BYTE_STRING: printf("bytestr() [not dumping]\n"); break; case SOL_OIC_REPR_TYPE_HALF_FLOAT: printf("hfloat(%p)\n", field->v_voidptr); break; case SOL_OIC_REPR_TYPE_FLOAT: printf("float(%f)\n", field->v_float); break; case SOL_OIC_REPR_TYPE_DOUBLE: printf("float(%g)\n", field->v_double); break; case SOL_OIC_REPR_TYPE_BOOLEAN: printf("boolean(%s)\n", field->v_boolean ? "true" : "false"); break; default: printf("unknown(%d)\n", field->type); } }