#include <stdio.h>
#include <arpa/inet.h>
#define DEVICE_ID_LEN (16)
#define streq(a, b) (strcmp((a), (b)) == 0)
#define POST_REQUEST_POWER (13)
#define PUT_REQUEST_POWER (7)
};
};
static void
{
static const char digits[] = "0123456789abcdef";
uint16_t idx;
unsigned int digit = device_id_encoded[idx];
device_id[idx * 2] = digits[(digit >> 4) & 0x0f];
device_id[idx * 2 + 1] = digits[digit & 0x0f];
}
}
static bool
{
uint16_t idx;
static bool resource_found = false;
if (!res) {
if (!resource_found) {
printf("No resource found\n");
} else
return false;
}
printf("Invalid device id\n");
return false;
}
printf("Could not convert network address to string\n");
return false;
}
resource_found = true;
printf("Flags:\n");
printf(
" - observable: %s\n", res->
observable ?
"yes" :
"no");
printf(
" - secure: %s\n", res->
secure ?
"yes" :
"no");
printf("Resource types:\n");
printf("Resource interfaces:\n");
printf("\n");
return true;
}
static void
{
if (state &&
streq(field.key,
"state") &&
*state = field.v_boolean;
continue;
}
if (power &&
streq(field.key,
"power")) {
*power = field.v_uint;
*power = field.v_int;
*power = field.v_simple;
continue;
}
}
}
static void
{
else {
printf("DELETE request failed\n");
}
}
static void
{
bool state = false;
int32_t power = -1;
if (!cliaddr || !map_reader ||
printf("Invalid GET response after a PUT\n");
}
printf("PUT request successful\n");
} else {
printf("PUT request failed\n");
}
}
static void
{
int32_t power = -1;
if (!cliaddr || !map_reader ||
printf("Invalid GET response after a PUT\n");
}
printf("POST request successful\n");
} else {
printf("POST request failed\n");
}
}
static int
{
}
static bool
{
switch (test_number) {
}
return false;
}
static void
{
static uint8_t notify_count = 0;
if (!cliaddr) {
printf("Timeout reached\n");
return;
}
printf("Could not convert network address to string\n");
return;
}
printf("Invalid response\n");
return;
}
if (notify_count++ >= 5)
}
static void
{
const char *p, *end;
return;
for (p = bytes.
data; p < end; p++) {
if (isprint(*p))
else
}
}
static void
{
if (!cliaddr) {
printf("Timeout reached\n");
return;
}
printf("Could not convert network address to string\n");
return;
}
printf("Invalid response\n");
return;
}
NULL);
return;
}
if (map_reader) {
switch (field.type) {
printf("\tkey: '%s', value: uint(%" PRIu64 ")\n", field.key,
field.v_uint);
break;
printf("\tkey: '%s', value: int(%" PRIi64 ")\n", field.key,
field.v_int);
break;
printf("\tkey: '%s', value: simple(%d)\n", field.key,
field.v_simple);
break;
printf("\tkey: '%s', value: str(%.*s)\n", field.key,
(int)field.v_slice.len, field.v_slice.data);
break;
printf("\tkey: '%s', value: bytestr{%.*s}\n", field.key,
break;
printf("\tkey: '%s', value: hfloat(%p)\n", field.key,
field.v_voidptr);
break;
printf("\tkey: '%s', value: float(%f)\n", field.key,
field.v_float);
break;
printf("\tkey: '%s', value: float(%g)\n", field.key,
field.v_double);
break;
printf("\tkey: '%s', value: boolean(%s)\n", field.key,
field.v_boolean ? "true" : "false");
break;
printf("\tkey: '%s', value: unsupported cbor code(%" PRIi64 ")\n",
field.key, field.v_int);
break;
default:
printf("\tkey: '%s', value: unknown(%d)\n", field.key, field.type);
}
}
printf("}\n\n");
}
if (!request)
goto error;
if (!request)
goto error;
} else if (map_reader)
else {
error:
printf("Invalid response: empty payload.\n");
}
}
static void
{
if (info == NULL) {
printf("No device found.\n");
return;
}
printf("Found Device:\n");
printf(" - Data model version: %.*s\n",
}
static void
{
if (info == NULL) {
printf("No platform found.\n");
return;
}
printf("Found Platform:\n");
printf(" - Manufacturer name: %.*s\n",
printf(" - Manufacturer URL: %.*s\n",
printf(" - Manufacturer date: %.*s\n",
printf(" - Plafform version: %.*s\n",
printf(" - Hardware version: %.*s\n",
printf(" - Firmware version: %.*s\n",
}
static int
{
int r;
}
static bool
{
bool non_confirmable = false, observe = false;
const char *method_str = "GET";
if (!res)
return false;
return false;
return false;
}
non_confirmable = true;
break;
method_str = "PUT";
non_confirmable = true;
break;
method_str = "POST";
non_confirmable = true;
break;
method_str = "DELETE";
non_confirmable = true;
break;
method_str = "OBSERVE";
non_confirmable = true;
observe = true;
break;
non_confirmable = true;
method_str = "invalid GET";
break;
break;
method_str = "POST";
break;
method_str = "DELETE";
break;
method_str = "OBSERVE";
observe = true;
break;
default:
printf("Invalid test\n");
goto error;
}
printf("Issuing %sconfirmable %s on resource %.*s\n",
non_confirmable ? "non-" : "", method_str,
if (observe) {
if (non_confirmable)
data, true);
else
data, true);
} else {
if (non_confirmable) {
} else {
}
if (fill_repr_map)
}
*path_ptr = path;
return false;
error:
return false;
}
static void
{
printf("iotivity-test-client uses same test numbers used in occlient "
"sample from iotivity.\n");
printf("Usage : iotivity-test-client <1..20>\n");
printf("1 : Just discover resources.\n");
printf("2 : Non-confirmable GET Request\n");
printf("3 : Unsupported\n");
printf("4 : Non-confirmable PUT Requests\n");
printf("5 : Non-confirmable POST Requests\n");
printf("6 : Non-confirmable DELETE Requests\n");
printf("7 : Non-confirmable OBSERVE Requests\n");
printf("8 : Non-confirmable GET Request for an unavailable resource\n");
printf("9 : Confirmable GET Request\n");
printf("10 : Confirmable POST Request\n");
printf("11 : Confirmable DELETE Requests\n");
printf("12 : Confirmable OBSERVE Requests\n");
printf("13 : Unsupported\n");
printf("14 : Unsupported\n");
printf("15 : Unsupported\n");
printf("16 : Unsupported\n");
printf("17 : Unsupported\n");
printf("18 : Unsupported\n");
printf("19 : Discover Platforms\n");
printf("20 : Discover Devices\n");
}
int
main(
int argc,
char *argv[])
{
int ret;
const char *resource_type = NULL;
const char *interface_type = NULL;
if (argc < 2) {
return -1;
}
return 1;
}
if (argc >= 3 && argv[2][0])
resource_type = argv[2];
if (argc >= 4 && argv[3][0])
interface_type = argv[3];
printf("could not convert multicast ip address to sockaddr_in\n");
return 1;
}
break;
break;
default:
printf("Unsupported test.\n");
return 0;
}
else
interface_type, found_resource_cb, &ctx);
return ret;
}