1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
/* implements 11.9 Device Management
GET /_matrix/client/r0/devices/{deviceId}
PUT /_matrix/client/r0/devices/{deviceId}
DELETE /_matrix/client/r0/devices/{deviceId}
*/
#include <stdio.h>
#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;
}
|