/* implements 11.9 Device Management GET /_matrix/client/r0/devices/{deviceId} PUT /_matrix/client/r0/devices/{deviceId} DELETE /_matrix/client/r0/devices/{deviceId} */ #include #include "session.h" #include "util.h" #include "curl_util.h" #include "device.h" matrix_device * get_devices(matrix_session *sess, int *n) { /* GET /_matrix/client/r0/devices */ const char *u[] = { sess->url, "/_matrix/client/r0/devices?access_token=", sess->token , NULL }; const char *requrl = alloc_build_string(u); json_object *resp; _curl_get(sess->curl, requrl, &resp); if (resp) { json_object *devarr; if (json_object_object_get_ex(resp, "devices", &devarr) && json_object_is_type(devarr, json_type_array)) { size_t ndev = json_object_array_length(devarr); matrix_device *devs = (matrix_device *)malloc(sizeof(matrix_device) * ndev); for (size_t i = 0; i < ndev; i++) { json_object *devi = json_object_array_get_idx(devarr, i); devs[i].device_id = json_gets_dup(devi, "device_id"); devs[i].display_name = json_gets_dup(devi, "display_name"); devs[i].last_seen_ip = json_gets_dup(devi, "last_seen_ip"); json_object *ts; if (json_object_object_get_ex(devi, "last_seen_ts", &ts)) { devs[i].last_seen_ts = json_object_get_int64(ts); } else { devs[i].last_seen_ts = 0; } } *n = ndev; return devs; } json_object_put(resp); } *n = 0; return NULL; }