this is using the mbed os version 5-13-1
Diff: source/WiFiManager.cpp
- Branch:
- PassingRegression
- Revision:
- 127:a21788227ca6
- Parent:
- 126:9bc33f8b57d5
- Child:
- 128:3a641aaad2d9
--- a/source/WiFiManager.cpp Sun Jul 07 20:36:41 2019 +0000
+++ b/source/WiFiManager.cpp Mon Jul 15 21:37:22 2019 +0000
@@ -51,8 +51,8 @@
//_event_queue.call_every(10000, this, &WiFiManager::callWifiWatchDog);
//keep_alive_id = _event_queue.call_every(CLOUD_KEEP_ALIVE_INTERVAL, this, &WiFiManager::callInternetKeepAlive);
keep_alive_id = 0;
+ https_request_succeeded = false;
//watchDogTick.attach(callback(this, &WiFiManager::callWifiWatchDogIsr), 10.0); // call flip function every 10 seconds
-
}
WiFiManager::~WiFiManager()
@@ -61,6 +61,8 @@
wifiWatchdogTimer.stop();
socket->close();
delete socket;
+ free(aws_id_token);
+ free(aws_refresh_token);
}
//#define DISABLE_WATCHDOG
@@ -118,6 +120,7 @@
// Send data
nsapi_size_or_error_t error;
//serr = socket->send("GET /nudgebox/v1 HTTP/1.0\r\nHost: https://dev2.dnanudge.io\r\n\r\n", 18);
+ dbg_printf(LOG, "\n[WIFI MAN] KEEP ALIVE SERVER REQUEST\r\n");
error = socket->send(HELLO_MSG, sizeof(HELLO_MSG));
if(error < 0)
@@ -133,7 +136,7 @@
// Receive data
char buf[500];
error = socket->recv(buf, 500);
- if(error >= 0)
+ if(error >= 0 && strstr(buf, "HTTP/1.1 200")!= NULL) // received HTTP 200 OK status
{
dbg_printf(LOG, "\n[WIFI MAN] KEEP ALIVE SERVER RESPONSE: \r\n %s\r\n", buf);
queueATresponse(AT_SOCKET_KEEP_ALIVE_OK);
@@ -146,6 +149,70 @@
}
}
+void WiFiManager::CreateTokenHttpsRequest(char * httpsReq)
+{
+
+ sprintf(httpsReq, "%s\r\n\r\n{\r\n\"AuthParameters\" : {\r\n"
+ "\"USERNAME\" : \"%s\",\r\n\"PASSWORD\" : \"%s\"\r\n},\r\n"
+ "\"AuthFlow\" : \"%s\",\r\n"
+ "\"ClientId\" : \"%s\"\r\n}", TOKEN_REQ_HDR, UserName, Password, AuthFlow, ClientId);
+ dbg_printf(LOG, "\n[WIFI MAN] Cloud Access Token REQUEST:\r\n%s\r\n", httpsReq);
+}
+
+void WiFiManager::GetCloudAccessToken()
+{
+ // Send data
+ nsapi_size_or_error_t error;
+ dbg_printf(LOG, "\n[WIFI MAN] Get Cloud Access Token REQUEST\r\n");
+ char *httpsReq = new char[500];
+ httpsReq[0] = NULL;
+ CreateTokenHttpsRequest(httpsReq);
+ if(strlen(httpsReq) == 0)
+ {
+ queueATresponse(AT_SOCKET_KEEP_ALIVE_FAILED);
+ return;
+ }
+ error = socket->send(httpsReq, strlen(httpsReq)+1);
+
+ if(error < 0)
+ {
+ queueATresponse(AT_SOCKET_KEEP_ALIVE_FAILED);
+ return;
+ }
+
+ // Receive data
+ // reserve large buffer from heap to hold response
+ char *respBuf = new char[TOKEN_RESPONSE_SIZE];
+ error = socket->recv(respBuf, TOKEN_RESPONSE_SIZE);
+ if(error >= 0 && strstr(respBuf, "HTTP/1.1 200")!= NULL) // received HTTP 200 OK status
+ {
+ dbg_printf(LOG, "\n[WIFI MAN] ACCESS TOKEN RESPONSE: \r\n %s\r\n", respBuf);
+ // reserve memomry on the heap for tokens
+ aws_id_token = new char[ID_TOKEN_SIZE];
+ aws_refresh_token = new char[REFRESH_TOKEN_SIZE];
+ // extract ID TOKEN
+ char *sp1 = strstr(respBuf,ID_TOKEN_STR_START);
+ char *sp2 = strstr(respBuf,ACCESS_TOKEN_STR_END);
+ int tokenLen = sp2-sp1;
+ strncpy(aws_id_token, sp1, tokenLen);
+ dbg_printf(LOG, "\n[WIFI MAN] IdToken: \r\n %s\r\n", aws_id_token);
+ // extract Refresh TOKEN
+ sp1 = strstr(respBuf,REFRESH_TOKEN_STR_START);
+ sp2 = strstr(respBuf,ACCESS_TOKEN_STR_END);
+ tokenLen = sp2-sp1;
+ strncpy(aws_refresh_token, sp1, tokenLen);
+ dbg_printf(LOG, "\n[WIFI MAN] RefreshToken: \r\n %s\r\n", aws_refresh_token);
+ queueATresponse(AT_SOCKET_KEEP_ALIVE_OK);
+ https_connection_active = true;
+ }
+ else
+ {
+ queueATresponse(AT_SOCKET_KEEP_ALIVE_FAILED);
+ https_connection_active = false;
+ }
+ delete respBuf;
+}
+
void WiFiManager::sendThreadATresponseString(const char * buf, at_cmd_resp_t at_cmd)
{
@@ -446,6 +513,11 @@
}
sendATresponseString(AT_COMMAND_FAILED);
}
+ if(https_request_succeeded == false)
+ {
+ https_request_succeeded = result;
+ }
+
dbg_printf(LOG, "after call to send http request \n");
print_memory_info();
wifiCmd = WIFI_CMD_NONE;