X-Git-Url: https://gitweb.ps.run/matrix_esp_thesis/blobdiff_plain/d43e8671acc5709c192e159e0d91626f0677cdf1..27a83e93114c31de4b7bd33320a85e5fad0196a3:/src/matrix.c diff --git a/src/matrix.c b/src/matrix.c index bc0f1ca..90132af 100644 --- a/src/matrix.c +++ b/src/matrix.c @@ -1,38 +1,81 @@ #include "matrix.h" -FixedBuffer -FixedBuf(const char * str) -{ - int len = strlen(str); - FixedBuffer result; - result.ptr = (char *)str; - result.size = len; - result.len = len; - return result; -} +#include + + +#define LOGIN_REQUEST_SIZE 1024 +#define LOGIN_RESPONSE_SIZE 1024 +#define LOGIN_URL "/_matrix/client/v3/login" bool MatrixClientInit( MatrixClient * client, - FixedBuffer server + char * server, int serverLen ) { + strcpy_s( + client->server, + SERVER_SIZE, + server + ); + client->serverLen = serverLen; + return true; } +// https://spec.matrix.org/v1.6/client-server-api/#post_matrixclientv3login bool MatrixClientLoginPassword( MatrixClient * client, - FixedBuffer username, - FixedBuffer password + char * username, int usernameLen, + char * password, int passwordLen, + char * displayName, int displayNameLen ) { + static char requestBuffer[LOGIN_REQUEST_SIZE]; -} + int requestLen = + mjson_snprintf(requestBuffer, LOGIN_REQUEST_SIZE, + "{" + "\"type\": \"m.login.password\"," + "\"identifier\": {" + "\"type\": \"m.id.user\"," + "\"user\": \"%.*s\"" + "}," + "\"password\": \"%.*s\"," + "\"initial_device_display_name\": \"%.*s\"" + "}", + usernameLen, username, + passwordLen, password, + displayNameLen, displayName); + + static char responseBuffer[LOGIN_RESPONSE_SIZE]; + int responseLen; + bool result = + MatrixHttpPost(client, + LOGIN_URL, + requestBuffer, requestLen, + responseBuffer, LOGIN_RESPONSE_SIZE, &responseLen); + + if (!result) + return false; -bool -MatrixClientGetAccessToken( - MatrixClient * client, - FixedBuffer * outBuffer -) { + client->accessTokenLen = + mjson_get_string(responseBuffer, responseLen, + "$.access_token", + client->accessTokenBuffer, ACCESS_TOKEN_SIZE); + client->deviceIdLen = + mjson_get_string(responseBuffer, responseLen, + "$.device_id", + client->deviceIdBuffer, DEVICE_ID_SIZE); + client->expireMsLen = + mjson_get_string(responseBuffer, responseLen, + "$.expires_in_ms", + client->expireMsBuffer, EXPIRE_MS_SIZE); + client->refreshTokenLen = + mjson_get_string(responseBuffer, responseLen, + "$.refresh_token", + client->refreshTokenBuffer, REFRESH_TOKEN_SIZE); + return true; } +