#define KEYS_QUERY_REQUEST_SIZE 256\r
#define KEYS_QUERY_RESPONSE_SIZE 1024\r
\r
-#define UPLOAD_KEYS_REQUEST_SIZE 512\r
-#define UPLOAD_KEYS_REQUEST_SIGNED_SIZE 1024\r
+#define KEYS_UPLOAD_URL "/_matrix/client/v3/keys/upload"\r
+#define KEYS_UPLOAD_REQUEST_SIZE 1024\r
+#define KEYS_UPLOAD_REQUEST_SIGNED_SIZE 2048\r
+#define KEYS_UPLOAD_RESPONSE_SIZE 2048\r
\r
#define JSON_QUERY_SIZE 128\r
\r
return res != olm_error();\r
}\r
\r
+// https://spec.matrix.org/v1.7/client-server-api/#post_matrixclientv3keysupload\r
bool\r
MatrixClientUploadOnetimeKeys(\r
MatrixClient * client)\r
{\r
- static char requestBuffer[UPLOAD_KEYS_REQUEST_SIZE];\r
+ static char requestBuffer[KEYS_UPLOAD_REQUEST_SIZE];\r
\r
- mjson_snprintf(requestBuffer, UPLOAD_KEYS_REQUEST_SIZE,\r
+ mjson_snprintf(requestBuffer, KEYS_UPLOAD_REQUEST_SIZE,\r
"{\"one_time_keys\":{");\r
\r
static char onetimeKeysBuffer[1024];\r
keyJson, JSON_ONETIME_KEY_SIZE,\r
keyJsonSigned, JSON_ONETIME_KEY_SIGNED_SIZE);\r
\r
- mjson_snprintf(requestBuffer+strlen(requestBuffer), UPLOAD_KEYS_REQUEST_SIZE-strlen(requestBuffer),\r
+ mjson_snprintf(requestBuffer+strlen(requestBuffer), KEYS_UPLOAD_REQUEST_SIZE-strlen(requestBuffer),\r
"\"signed_curve25519:%.*s\":%s,",\r
klen-2, keys + koff+1,\r
keyJsonSigned);\r
}\r
\r
- mjson_snprintf(requestBuffer+strlen(requestBuffer), UPLOAD_KEYS_REQUEST_SIZE-strlen(requestBuffer),\r
+ mjson_snprintf(requestBuffer+strlen(requestBuffer)-1, KEYS_UPLOAD_REQUEST_SIZE-strlen(requestBuffer),\r
"}}");\r
\r
- printf("%s\n", requestBuffer);\r
+ static char responseBuffer[KEYS_UPLOAD_RESPONSE_SIZE];\r
+ MatrixHttpPost(client,\r
+ KEYS_UPLOAD_URL,\r
+ requestBuffer,\r
+ responseBuffer, KEYS_UPLOAD_RESPONSE_SIZE,\r
+ true);\r
\r
return true;\r
}\r
\r
+// https://spec.matrix.org/v1.7/client-server-api/#post_matrixclientv3keysupload\r
bool\r
MatrixClientUploadDeviceKeys(\r
MatrixClient * client)\r
{\r
- static char deviceKeysBuffer[UPLOAD_KEYS_REQUEST_SIZE];\r
+ static char deviceKeysBuffer[KEYS_UPLOAD_REQUEST_SIZE];\r
\r
- mjson_snprintf(deviceKeysBuffer, UPLOAD_KEYS_REQUEST_SIZE,\r
+ mjson_snprintf(deviceKeysBuffer, KEYS_UPLOAD_REQUEST_SIZE,\r
"{\"device_keys\":{"\r
"\"algorithms\":[\"m.olm.v1.curve25519-aes-sha2\",\"m.megolm.v1.aes-sha2\"],"\r
"\"device_id\":\"%s\","\r
client->deviceId, client->signingKey,\r
client->userId);\r
\r
- static char deviceKeysSignedBuffer[UPLOAD_KEYS_REQUEST_SIGNED_SIZE];\r
+ static char deviceKeysSignedBuffer[KEYS_UPLOAD_REQUEST_SIGNED_SIZE];\r
JsonSign(client,\r
- deviceKeysBuffer, UPLOAD_KEYS_REQUEST_SIZE,\r
- deviceKeysSignedBuffer, UPLOAD_KEYS_REQUEST_SIZE);\r
+ deviceKeysBuffer, KEYS_UPLOAD_REQUEST_SIZE,\r
+ deviceKeysSignedBuffer, KEYS_UPLOAD_REQUEST_SIZE);\r
\r
- printf("%s\n", deviceKeysSignedBuffer);\r
+\r
+ static char responseBuffer[KEYS_UPLOAD_RESPONSE_SIZE];\r
+ MatrixHttpPost(client,\r
+ KEYS_UPLOAD_URL,\r
+ deviceKeysSignedBuffer,\r
+ responseBuffer, KEYS_UPLOAD_RESPONSE_SIZE,\r
+ true);\r
\r
return true;\r
}\r
\r
printf("received[%d]:\n%.*s\n", conn->dataLen, conn->dataLen, conn->data);\r
}\r
+ if (ev == MG_EV_CLOSE)\r
+ {\r
+ conn->connection = NULL;\r
+ conn->connected = false;\r
+ }\r
}\r
\r
bool\r
\r
mg_mgr_init(&conn->mgr);\r
\r
+ return MatrixHttpConnect(client);\r
+}\r
+\r
+bool\r
+MatrixHttpConnect(\r
+ MatrixClient * client)\r
+{\r
+ MatrixHttpConnection * conn =\r
+ (MatrixHttpConnection *)client->httpUserData;\r
+ \r
struct mg_connection * c =\r
mg_http_connect(&conn->mgr, client->server, MatrixHttpCallback, client);\r
\r
bool authenticated)\r
{\r
MatrixHttpConnection * conn = (MatrixHttpConnection *)client->httpUserData;\r
+ if (! conn->connected)\r
+ MatrixHttpConnect(client);\r
\r
conn->dataReceived = false;\r
\r
bool authenticated)\r
{\r
MatrixHttpConnection * conn = (MatrixHttpConnection *)client->httpUserData;\r
+ if (! conn->connected)\r
+ MatrixHttpConnect(client);\r
\r
conn->dataReceived = false;\r
\r
bool authenticated)\r
{\r
MatrixHttpConnection * conn = (MatrixHttpConnection *)client->httpUserData;\r
+ if (! conn->connected)\r
+ MatrixHttpConnect(client);\r
\r
conn->dataReceived = false;\r
\r