]> gitweb.ps.run Git - matrix_esp_thesis/blob - examples/Sync.c
update code block to include 'c' specifier
[matrix_esp_thesis] / examples / Sync.c
1 #include <mjson.h>\r
2 #include <matrix.h>\r
3 #include <stdio.h>\r
4 \r
5 #define SERVER        "https://matrix.org"\r
6 #define USER_ID       "@example:matrix.org"\r
7 #define ROOM_ID       "!example:matrix.org"\r
8 #define USERNAME      ""\r
9 #define PASSWORD      ""\r
10 #define DEVICE_NAME   ""\r
11 \r
12 // event id of an encrypted event\r
13 // devices can only be verified after they used e2ee in some way\r
14 // (at least in Element)\r
15 #define EVENT_ID     "$example"\r
16 \r
17 int\r
18 main(void)\r
19 {\r
20     MatrixClient client;\r
21     MatrixClientInit(&client);\r
22     \r
23     MatrixHttpInit(&client.hc, SERVER);\r
24 \r
25     MatrixClientSetUserId(&client, USER_ID);\r
26 \r
27     MatrixClientLoginPassword(&client,\r
28         USERNAME,\r
29         PASSWORD,\r
30         DEVICE_NAME);\r
31     \r
32     MatrixClientGenerateOnetimeKeys(&client, 10);\r
33     MatrixClientUploadOnetimeKeys(&client);\r
34     MatrixClientUploadDeviceKeys(&client);\r
35     \r
36 \r
37     static char eventBuffer[1024];\r
38     MatrixClientGetRoomEvent(&client,\r
39         ROOM_ID,\r
40         EVENT_ID,\r
41         eventBuffer, 1024);\r
42     \r
43     printf("event: %s\n", eventBuffer);\r
44 \r
45 \r
46     while (getchar() != 'q') {\r
47         static char nextBatch[1024];\r
48 \r
49         static char syncBuffer[1024*50];\r
50         MatrixClientSync(&client, syncBuffer, 1024*50, nextBatch);\r
51         \r
52         int res;\r
53 \r
54         const char * s = syncBuffer;\r
55         int slen = strlen(syncBuffer);\r
56         \r
57         {\r
58         int koff, klen, voff, vlen, vtype, off = 0;\r
59         for (off = 0; (off = mjson_next(s, slen, off, &koff, &klen,\r
60                                         &voff, &vlen, &vtype)) != 0; ) {\r
61             const char * key = s + koff;\r
62             const char * val = s + voff;\r
63 \r
64             printf("%.*s: %.100s\n", klen, key, val);\r
65         }\r
66         }\r
67 \r
68         mjson_get_string(s, slen, "$.next_batch", nextBatch, 1024);\r
69 \r
70         const char * events;\r
71         int eventsLen;\r
72         res =\r
73             mjson_find(s, slen, "$.to_device.events", &events, &eventsLen);\r
74         \r
75         if (res != MJSON_TOK_INVALID) {\r
76             {\r
77             int koff, klen, voff, vlen, vtype, off = 0;\r
78             for (off = 0; (off = mjson_next(events, eventsLen, off, &koff, &klen,\r
79                                             &voff, &vlen, &vtype)) != 0; ) {\r
80                 const char * val = events + voff;\r
81 \r
82                 printf("%.*s\n", vlen, val);\r
83             }\r
84             }\r
85         }\r
86     }\r
87 \r
88 \r
89     MatrixClientDeleteDevice(&client);\r
90         \r
91     MatrixHttpDeinit(&client.hc);\r
92 \r
93     return 0;\r
94 }\r