forked from community/product-iots
parent
3ceed63107
commit
92358c4135
@ -0,0 +1,100 @@
|
|||||||
|
uint8_t buffer[BUFFER_SIZE+1];
|
||||||
|
int bufindex = 0;
|
||||||
|
char action[MAX_ACTION+1];
|
||||||
|
char path[MAX_PATH+1];
|
||||||
|
|
||||||
|
boolean listen() {
|
||||||
|
// Try to get a client which is connected.
|
||||||
|
Adafruit_CC3000_ClientRef client = httpServer.available();
|
||||||
|
if (client) {
|
||||||
|
//Serial.println(F("Client connected."));
|
||||||
|
// Process this request until it completes or times out.
|
||||||
|
// Note that this is explicitly limited to handling one request at a time!
|
||||||
|
|
||||||
|
// Clear the incoming data buffer and point to the beginning of it.
|
||||||
|
bufindex = 0;
|
||||||
|
memset(&buffer, 0, sizeof(buffer));
|
||||||
|
|
||||||
|
// Clear action and path strings.
|
||||||
|
memset(&action, 0, sizeof(action));
|
||||||
|
memset(&path, 0, sizeof(path));
|
||||||
|
|
||||||
|
// Set a timeout for reading all the incoming data.
|
||||||
|
unsigned long endtime = millis() + TIMEOUT_MS;
|
||||||
|
|
||||||
|
// Read all the incoming data until it can be parsed or the timeout expires.
|
||||||
|
bool parsed = false;
|
||||||
|
while (!parsed && (millis() < endtime) && (bufindex < BUFFER_SIZE)) {
|
||||||
|
if (client.available()) {
|
||||||
|
buffer[bufindex++] = client.read();
|
||||||
|
}
|
||||||
|
parsed = parseRequest(buffer, bufindex, action, path);
|
||||||
|
}
|
||||||
|
|
||||||
|
wdt_reset();
|
||||||
|
|
||||||
|
if (parsed) {
|
||||||
|
if (strcmp(action, "GET") == 0) {
|
||||||
|
responseMsg = path;
|
||||||
|
|
||||||
|
if(DEBUG) {
|
||||||
|
Serial.println(responseMsg);
|
||||||
|
}
|
||||||
|
|
||||||
|
int index = responseMsg.lastIndexOf("/");
|
||||||
|
int newLine = responseMsg.indexOf("/");
|
||||||
|
subStrn = responseMsg.substring(index + 1);
|
||||||
|
responseMsg = responseMsg.substring(newLine + 1, index);
|
||||||
|
|
||||||
|
if(DEBUG) {
|
||||||
|
Serial.print(responseMsg);
|
||||||
|
Serial.print(" - ");
|
||||||
|
Serial.println(subStrn);
|
||||||
|
Serial.println("-------------------------------");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (responseMsg == "TEMP") {
|
||||||
|
int temperature = (uint8_t)getTemperature();
|
||||||
|
|
||||||
|
client.fastrprintln(F("HTTP/1.1 200 OK"));
|
||||||
|
client.fastrprintln(F("Connection: close"));
|
||||||
|
client.fastrprintln(F(""));
|
||||||
|
client.fastrprint(String(temperature).c_str());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
delay(100);
|
||||||
|
|
||||||
|
// Close the connection when done.
|
||||||
|
Serial.println(F("Client disconnected"));
|
||||||
|
client.close();
|
||||||
|
wdt_reset();
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool parseRequest(uint8_t* buf, int bufSize, char* action, char* path) {
|
||||||
|
// Check if the request ends with \r\n to signal end of first line.
|
||||||
|
if (bufSize < 2)
|
||||||
|
return false;
|
||||||
|
if (buf[bufSize-2] == '\r' && buf[bufSize-1] == '\n') {
|
||||||
|
parseFirstLine((char*)buf, action, path);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Parse the action and path from the first line of an HTTP request.
|
||||||
|
void parseFirstLine(char* line, char* action, char* path) {
|
||||||
|
// Parse first word up to whitespace as action.
|
||||||
|
char* lineaction = strtok(line, " ");
|
||||||
|
if (lineaction != NULL)
|
||||||
|
strncpy(action, lineaction, MAX_ACTION);
|
||||||
|
// Parse second word up to whitespace as path.
|
||||||
|
char* linepath = strtok(NULL, " ");
|
||||||
|
if (linepath != NULL)
|
||||||
|
strncpy(path, linepath, MAX_PATH);
|
||||||
|
}
|
Loading…
Reference in new issue