X-Git-Url: https://gitweb.ps.run/matrix_esp_thesis/blobdiff_plain/d382d193cb2d550cc769afa76e55823865a39023..6646bd126f9faf1e687b203512d29da243acaa90:/src/matrix_http_mongoose.c diff --git a/src/matrix_http_mongoose.c b/src/matrix_http_mongoose.c index 8d575e5..0b6c267 100644 --- a/src/matrix_http_mongoose.c +++ b/src/matrix_http_mongoose.c @@ -1,4 +1,5 @@ #include "matrix.h" + #include #include #include @@ -35,7 +36,8 @@ MatrixHttpCallback( // If s_url is https://, tell client connection to use TLS if (mg_url_is_ssl(client->server)) { - struct mg_tls_opts opts = {.srvname = host}; + static struct mg_tls_opts opts; + opts.srvname = host; mg_tls_init(c, &opts); } @@ -48,10 +50,18 @@ MatrixHttpCallback( struct mg_http_message *hm = (struct mg_http_message *)ev_data; // memcpy_s(client->data, 1024, hm->message.ptr, hm->message.len); // client->dataLen = hm->message.len; - memcpy_s(conn->data, conn->dataCap, hm->body.ptr, hm->body.len); + memcpy(conn->data, hm->body.ptr, hm->body.len); + // memcpy_s(conn->data, conn->dataCap, hm->body.ptr, hm->body.len); conn->data[hm->body.len] = '\0'; conn->dataLen = hm->body.len; conn->dataReceived = true; + + printf("received[%d]:\n%.*s\n", conn->dataLen, conn->dataLen, conn->data); + } + if (ev == MG_EV_CLOSE) + { + conn->connection = NULL; + conn->connected = false; } } @@ -66,7 +76,18 @@ MatrixHttpInit( mg_mgr_init(&conn->mgr); - mg_http_connect(&conn->mgr, client->server, MatrixHttpCallback, client); + return MatrixHttpConnect(client); +} + +bool +MatrixHttpConnect( + MatrixClient * client) +{ + MatrixHttpConnection * conn = + (MatrixHttpConnection *)client->httpUserData; + + struct mg_connection * c = + mg_http_connect(&conn->mgr, client->server, MatrixHttpCallback, client); while (! conn->connected) mg_mgr_poll(&conn->mgr, 1000); @@ -95,15 +116,21 @@ MatrixHttpGet( bool authenticated) { MatrixHttpConnection * conn = (MatrixHttpConnection *)client->httpUserData; + if (! conn->connected) + MatrixHttpConnect(client); conn->dataReceived = false; struct mg_str host = mg_url_host(client->server); - static char authorizationHeader[AUTHORIZATION_HEADER_LEN] = "\0"; + static char authorizationHeader[AUTHORIZATION_HEADER_LEN]; if (authenticated) - sprintf_s(authorizationHeader, AUTHORIZATION_HEADER_LEN, - "Authorization: Bearer %s\r\n", client->accessTokenBuffer); + sprintf(authorizationHeader, + "Authorization: Bearer %s\r\n", client->accessToken); + // sprintf_s(authorizationHeader, AUTHORIZATION_HEADER_LEN, + // "Authorization: Bearer %s\r\n", client->accessToken); + else + authorizationHeader[0] = '\0'; mg_printf(conn->connection, "GET %s HTTP/1.1\r\n" @@ -132,15 +159,19 @@ MatrixHttpPost( bool authenticated) { MatrixHttpConnection * conn = (MatrixHttpConnection *)client->httpUserData; + if (! conn->connected) + MatrixHttpConnect(client); conn->dataReceived = false; struct mg_str host = mg_url_host(client->server); - static char authorizationHeader[AUTHORIZATION_HEADER_LEN] = "\0"; + static char authorizationHeader[AUTHORIZATION_HEADER_LEN]; if (authenticated) - sprintf_s(authorizationHeader, AUTHORIZATION_HEADER_LEN, - "Authorization: Bearer %s\r\n", client->accessTokenBuffer); + sprintf(authorizationHeader, + "Authorization: Bearer %s\r\n", client->accessToken); + else + authorizationHeader[0] = '\0'; mg_printf(conn->connection, "POST %s HTTP/1.0\r\n" @@ -175,6 +206,8 @@ MatrixHttpPut( bool authenticated) { MatrixHttpConnection * conn = (MatrixHttpConnection *)client->httpUserData; + if (! conn->connected) + MatrixHttpConnect(client); conn->dataReceived = false; @@ -182,8 +215,8 @@ MatrixHttpPut( static char authorizationHeader[AUTHORIZATION_HEADER_LEN]; if (authenticated) - sprintf_s(authorizationHeader, AUTHORIZATION_HEADER_LEN, - "Authorization: Bearer %s\r\n", client->accessTokenBuffer); + sprintf(authorizationHeader, + "Authorization: Bearer %s\r\n", client->accessToken); else authorizationHeader[0] = '\0';