5 #define SERVER "https://matrix.org"
\r
6 #define USER_ID "@example:matrix.org"
\r
7 #define ROOM_ID "!example:matrix.org"
\r
10 #define DEVICE_NAME ""
\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
20 MatrixClient client;
\r
21 MatrixClientInit(&client);
\r
23 MatrixHttpInit(&client.hc, SERVER);
\r
25 MatrixClientSetUserId(&client, USER_ID);
\r
27 MatrixClientLoginPassword(&client,
\r
32 MatrixClientGenerateOnetimeKeys(&client, 10);
\r
33 MatrixClientUploadOnetimeKeys(&client);
\r
34 MatrixClientUploadDeviceKeys(&client);
\r
37 static char eventBuffer[1024];
\r
38 MatrixClientGetRoomEvent(&client,
\r
43 printf("event: %s\n", eventBuffer);
\r
46 while (getchar() != 'q') {
\r
47 static char nextBatch[1024];
\r
49 static char syncBuffer[1024*50];
\r
50 MatrixClientSync(&client, syncBuffer, 1024*50, nextBatch);
\r
54 const char * s = syncBuffer;
\r
55 int slen = strlen(syncBuffer);
\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
64 printf("%.*s: %.100s\n", klen, key, val);
\r
68 mjson_get_string(s, slen, "$.next_batch", nextBatch, 1024);
\r
70 const char * events;
\r
73 mjson_find(s, slen, "$.to_device.events", &events, &eventsLen);
\r
75 if (res != MJSON_TOK_INVALID) {
\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
82 printf("%.*s\n", vlen, val);
\r
89 MatrixClientDeleteDevice(&client);
\r
91 MatrixHttpDeinit(&client.hc);
\r