]> gitweb.ps.run Git - matrix_esp_thesis/blobdiff - src/matrix_http_mongoose.c
work on SendEncrypted
[matrix_esp_thesis] / src / matrix_http_mongoose.c
index 8d575e5213bf37407c5590a85c03ce72123e74be..17edbc8cdcfabe7b53e453a05b057ae71520429f 100644 (file)
@@ -1,4 +1,5 @@
 #include "matrix.h"\r
+\r
 #include <stdio.h>\r
 #include <stdlib.h>\r
 #include <string.h>\r
@@ -35,7 +36,8 @@ MatrixHttpCallback(
         // If s_url is https://, tell client connection to use TLS\r
         if (mg_url_is_ssl(client->server))\r
         {\r
-            struct mg_tls_opts opts = {.srvname = host};\r
+            static struct mg_tls_opts opts;\r
+            opts.srvname = host;\r
             mg_tls_init(c, &opts);\r
         }\r
 \r
@@ -48,10 +50,18 @@ MatrixHttpCallback(
         struct mg_http_message *hm = (struct mg_http_message *)ev_data;\r
         // memcpy_s(client->data, 1024, hm->message.ptr, hm->message.len);\r
         // client->dataLen = hm->message.len;\r
-        memcpy_s(conn->data, conn->dataCap, hm->body.ptr, hm->body.len);\r
+        memcpy(conn->data, hm->body.ptr, hm->body.len);\r
+        // memcpy_s(conn->data, conn->dataCap, hm->body.ptr, hm->body.len);\r
         conn->data[hm->body.len] = '\0';\r
         conn->dataLen = hm->body.len;\r
         conn->dataReceived = true;\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
@@ -66,7 +76,18 @@ MatrixHttpInit(
     \r
     mg_mgr_init(&conn->mgr);\r
 \r
-    mg_http_connect(&conn->mgr, client->server, MatrixHttpCallback, client);\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
     while (! conn->connected)\r
         mg_mgr_poll(&conn->mgr, 1000);\r
@@ -95,15 +116,21 @@ MatrixHttpGet(
     bool authenticated)\r
 {\r
     MatrixHttpConnection * conn = (MatrixHttpConnection *)client->httpUserData;\r
+    if (! conn->connected)\r
+        MatrixHttpConnect(client);\r
 \r
     conn->dataReceived = false;\r
 \r
     struct mg_str host = mg_url_host(client->server);\r
 \r
-    static char authorizationHeader[AUTHORIZATION_HEADER_LEN] = "\0";\r
+    static char authorizationHeader[AUTHORIZATION_HEADER_LEN];\r
     if (authenticated)\r
-        sprintf_s(authorizationHeader, AUTHORIZATION_HEADER_LEN,\r
-            "Authorization: Bearer %s\r\n", client->accessTokenBuffer);\r
+        sprintf(authorizationHeader,\r
+            "Authorization: Bearer %s\r\n", client->accessToken);\r
+        // sprintf_s(authorizationHeader, AUTHORIZATION_HEADER_LEN,\r
+        //     "Authorization: Bearer %s\r\n", client->accessToken);\r
+    else\r
+        authorizationHeader[0] = '\0';\r
 \r
     mg_printf(conn->connection,\r
         "GET %s HTTP/1.1\r\n"\r
@@ -132,15 +159,19 @@ MatrixHttpPost(
     bool authenticated)\r
 {\r
     MatrixHttpConnection * conn = (MatrixHttpConnection *)client->httpUserData;\r
+    if (! conn->connected)\r
+        MatrixHttpConnect(client);\r
 \r
     conn->dataReceived = false;\r
 \r
     struct mg_str host = mg_url_host(client->server);\r
 \r
-    static char authorizationHeader[AUTHORIZATION_HEADER_LEN] = "\0";\r
+    static char authorizationHeader[AUTHORIZATION_HEADER_LEN];\r
     if (authenticated)\r
-        sprintf_s(authorizationHeader, AUTHORIZATION_HEADER_LEN,\r
-            "Authorization: Bearer %s\r\n", client->accessTokenBuffer);\r
+        sprintf(authorizationHeader,\r
+            "Authorization: Bearer %s\r\n", client->accessToken);\r
+    else\r
+        authorizationHeader[0] = '\0';\r
 \r
     mg_printf(conn->connection,\r
             "POST %s HTTP/1.0\r\n"\r
@@ -175,6 +206,8 @@ MatrixHttpPut(
     bool authenticated)\r
 {\r
     MatrixHttpConnection * conn = (MatrixHttpConnection *)client->httpUserData;\r
+    if (! conn->connected)\r
+        MatrixHttpConnect(client);\r
 \r
     conn->dataReceived = false;\r
 \r
@@ -182,11 +215,25 @@ MatrixHttpPut(
 \r
     static char authorizationHeader[AUTHORIZATION_HEADER_LEN];\r
     if (authenticated)\r
-        sprintf_s(authorizationHeader, AUTHORIZATION_HEADER_LEN,\r
-            "Authorization: Bearer %s\r\n", client->accessTokenBuffer);\r
+        sprintf(authorizationHeader,\r
+            "Authorization: Bearer %s\r\n", client->accessToken);\r
     else\r
         authorizationHeader[0] = '\0';\r
 \r
+    printf("PUT %s HTTP/1.0\r\n"\r
+            "Host: %.*s\r\n"\r
+            "%s"\r
+            "Content-Type: application/json\r\n"\r
+            "Content-Length: %d\r\n"\r
+            "\r\n"\r
+            "%s"\r
+            "\r\n",\r
+            url,\r
+            host.len, host.ptr,\r
+            authorizationHeader,\r
+            strlen(requestBuffer),\r
+            requestBuffer);\r
+\r
     mg_printf(conn->connection,\r
             "PUT %s HTTP/1.0\r\n"\r
             "Host: %.*s\r\n"\r