X-Git-Url: https://gitweb.ps.run/matrix_esp_thesis/blobdiff_plain/d43e8671acc5709c192e159e0d91626f0677cdf1..HEAD:/examples/Sync.c diff --git a/examples/Sync.c b/examples/Sync.c index 5043884..8306990 100644 --- a/examples/Sync.c +++ b/examples/Sync.c @@ -1,31 +1,94 @@ +#include #include +#include -#define SERVER "matrix.org" -#define ACCESS_TOKEN "abc" -#define ROOM_ID "!jhpZBTbckszblMYjMK:matrix.org" +#define SERVER "https://matrix.org" +#define USER_ID "@example:matrix.org" +#define ROOM_ID "!example:matrix.org" +#define USERNAME "" +#define PASSWORD "" +#define DEVICE_NAME "" + +// event id of an encrypted event +// devices can only be verified after they used e2ee in some way +// (at least in Element) +#define EVENT_ID "$example" int -main( - int argc, - char **argv) +main(void) { MatrixClient client; - MatrixClientCreate(&client, - SERVER); + MatrixClientInit(&client); + + MatrixHttpInit(&client.hc, SERVER); + + MatrixClientSetUserId(&client, USER_ID); + + MatrixClientLoginPassword(&client, + USERNAME, + PASSWORD, + DEVICE_NAME); + + MatrixClientGenerateOnetimeKeys(&client, 10); + MatrixClientUploadOnetimeKeys(&client); + MatrixClientUploadDeviceKeys(&client); + + + static char eventBuffer[1024]; + MatrixClientGetRoomEvent(&client, + ROOM_ID, + EVENT_ID, + eventBuffer, 1024); + + printf("event: %s\n", eventBuffer); + + + while (getchar() != 'q') { + static char nextBatch[1024]; - MatrixClientSetAccessToken(&client, - ACCESS_TOKEN); + static char syncBuffer[1024*50]; + MatrixClientSync(&client, syncBuffer, 1024*50, nextBatch); + + int res; - static char syncCharBuffer[1024]; - FixedBuffer syncBuffer = { syncCharBuffer, 1024, 0 }; - int syncN = 1; + const char * s = syncBuffer; + int slen = strlen(syncBuffer); + + { + int koff, klen, voff, vlen, vtype, off = 0; + for (off = 0; (off = mjson_next(s, slen, off, &koff, &klen, + &voff, &vlen, &vtype)) != 0; ) { + const char * key = s + koff; + const char * val = s + voff; - while (syncN > 0) - { - MatrixClientSyncN(&client, &syncBuffer, &syncN); - printf("%.*s", syncBuffer.len, (char *)syncBuffer.ptr); + printf("%.*s: %.100s\n", klen, key, val); + } + } + + mjson_get_string(s, slen, "$.next_batch", nextBatch, 1024); + + const char * events; + int eventsLen; + res = + mjson_find(s, slen, "$.to_device.events", &events, &eventsLen); + + if (res != MJSON_TOK_INVALID) { + { + int koff, klen, voff, vlen, vtype, off = 0; + for (off = 0; (off = mjson_next(events, eventsLen, off, &koff, &klen, + &voff, &vlen, &vtype)) != 0; ) { + const char * val = events + voff; + + printf("%.*s\n", vlen, val); + } + } + } } - printf("\n"); + + + MatrixClientDeleteDevice(&client); + + MatrixHttpDeinit(&client.hc); return 0; -} \ No newline at end of file +}