/** * @brief Sends a HTTP response */ void Comm::sendResponseCode( byte response_code ) { printP(msg_protocol_name); Serial.print(" "); printP(msg_table[response_code]); Serial.println(); Serial.println(); }
/* Sends a default error response for a failed request. */ void Response::fail() { P(failMsg1) = "HTTP/1.0 400 Bad Request" CRLF; P(failMsg2) = "Content-Type: text/html" CRLF CRLF SERVER_FAIL_MESSAGE; printP(failMsg1); m_printHeaders(); printP(failMsg2); }
uint8_t BayGPRSInterface::connect(void){ if(_tx_error_count>20) softSwitch(); uint8_t count=0; uint8_t res; if(res=init()) return res+1; setup_start: printlnP("AT+CIFSR"); if(wait_for("ERROR",2000)){ //has IP printP("AT+CIPSTART=\"TCP\",\""); print(_server); printP("\","); println(_port); if(wait_for("CONNECT",10000)) return 1; printlnP("AT+CIPSEND?"); if(! wait_forPGM(PSTR(": "),200,4,_base64buffer)){ _base64buffer[4]=0; _mtu=atoi(_base64buffer); _mtu-=(BayTCP_BUFFER+17); } else _mtu=500; printlnP("AT+CIPSEND"); if(wait_for("> ",10000)) return 1; return 0; } count++; if(count>100) return 1; printlnP("AT+CIPMUX=0"); //if(wait_forOK(400)) goto setup_start; printlnP("AT+CIPCLOSE"); wait_forOK(200); printlnP("AT+CIPSHUT"); wait_forOK(200); printP("AT+CSTT=\""); print(_apn); printP("\",\""); print(_prov_user); printP("\",\""); print(_prov_pw); printlnP("\""); if(wait_forOK(400)) goto setup_start; printlnP("AT+CIICR"); if(wait_forOK(10000)) goto setup_start; goto setup_start; }
/* Sends a default error response for a unauthorized request. */ void Response::unauthorized() { P(failMsg1) = "HTTP/1.0 401 Unauthorized" CRLF "Content-Type: text/html" CRLF; P(failMsg2) = CRLF SERVER_AUTH_MESSAGE; printP(failMsg1); m_printHeaders(); printP(failMsg2); }
/* Sends a default error response for a unauthorized request. */ void Response::forbidden() { P(failMsg1) = "HTTP/1.0 403 Forbidden" CRLF "Content-Type: text/html" CRLF; P(failMsg2) = CRLF SERVER_FORBIDDEN_MESSAGE; printP(failMsg1); m_printHeaders(); printP(failMsg2); }
/* Sends a default error response for request targeted to an nonexistent resource. */ void Response::notFound() { P(failMsg1) = "HTTP/1.0 404 Not Found" CRLF "Content-Type: text/html" CRLF; P(failMsg2) = CRLF SERVER_NOT_FOUND_MESSAGE; printP(failMsg1); m_printHeaders(); printP(failMsg2); }
/* Sends a default default error response for a failed request handling. */ void Response::serverError() { P(failMsg1) = "HTTP/1.0 500 Internal Server Error" CRLF "Content-Type: text/html" CRLF; P(failMsg2) = CRLF SERVER_SERVER_ERROR_MESSAGE; printP(failMsg1); m_printHeaders(); printP(failMsg2); }
uint8_t BayGPRSInterface::begin(long baud,uint8_t unlock_only){ _baud=baud; i_begin(_baud); skipChars(); printP("AT"); //Will autoconfigure BAUD-Rate - Auto BAUD-Rate did not work with Sleep-Mode! delay(100); println(); printP("AT+IPR="); println(_baud); wait_forOK(200); return init(unlock_only); }
void WebServer::httpNotAllowed() { P(failMsg) = "HTTP/1.0 405 Method not allowed" CRLF WEBDUINO_SERVER_HEADER "Content-Type: text/html"; printP (failMsg); printCRLF(); print("Allow: GET"); printCRLF(); printP (failMsg); }
/* Sends default status and headers indicating a successful request without any response body. */ void Response::noContent() { P(noContentMsg) = "HTTP/1.0 204 No Content" CRLF; printP(noContentMsg); m_printHeaders(); m_printCRLF(); }
void postMessage(const byte deviceIdx) { if (DEBUG_MEMORY) printMem("Post "); if (client_send.connect(vlosite, 80)) { if (DEBUG_WEB) dbg.println("NewC"); int len = 0; printP(COMMAND_IO_SEND, TXTPOST); len = printResponse(COMMAND_IO_SEND, deviceIdx, true); client_send.println(len); if (DEBUG_WEB) dbg.println(len); client_send.println(); if (DEBUG_WEB) dbg.println(); printResponse(COMMAND_IO_SEND, deviceIdx, false); client_send.println(); delay (3); while (client_send.available()) { char c = client_send.read(); if (DEBUG_WEB) dbg.print(c); } } else { if (DEBUG_WEB) dbg.println("Fail"); showStatus(NET_ERROR, 0); Reset_AVR(); } delay(1); if (DEBUG_WEB) dbg.println("Disc"); client_send.stop(); }
void WebServer::outputCheckboxOrRadio(const char *element, const char *name, const char *val, const char *label, bool selected) { P(cbPart1a) = "<label><input type='"; P(cbPart1b) = "' name='"; P(cbPart2) = "' value='"; P(cbPart3) = "' "; P(cbChecked) = "checked "; P(cbPart4) = "/> "; P(cbPart5) = "</label>"; printP(cbPart1a); print(element); printP(cbPart1b); print(name); printP(cbPart2); print(val); printP(cbPart3); if (selected) printP(cbChecked); printP(cbPart4); print(label); printP(cbPart5); }
void WebServer::httpNoContent() { P(noContentMsg) = "HTTP/1.0 204 NO CONTENT" CRLF WEBDUINO_SERVER_HEADER CRLF CRLF; printP(noContentMsg); }
void WebServer::noRobots(ConnectionType type) { httpSuccess("text/plain"); if (type != HEAD) { P(allowNoneMsg) = "User-agent: *" CRLF "Disallow: /" CRLF; printP(allowNoneMsg); } }
void WebServer::httpServerError() { P(failMsg) = "HTTP/1.0 500 Internal Server Error" CRLF WEBDUINO_SERVER_HEADER "Content-Type: text/html" CRLF CRLF WEBDUINO_SERVER_ERROR_MESSAGE; printP (failMsg); }
void WebServer::httpFail() { P(failMsg) = "HTTP/1.0 400 Bad Request" CRLF WEBDUINO_SERVER_HEADER "Content-Type: text/html" CRLF CRLF WEBDUINO_FAIL_MESSAGE; printP (failMsg); }
/* Sends redirection response. */ void Response::seeOther(const char *otherURL) { P(seeOtherMsg) = "HTTP/1.0 303 See Other" CRLF "Location: "; printP (seeOtherMsg); print(otherURL); m_printHeaders(); m_printCRLF(); }
void WebServer::httpSeeOther(const char *otherURL) { P(seeOtherMsg) = "HTTP/1.0 303 See Other" CRLF WEBDUINO_SERVER_HEADER "Location: "; printP (seeOtherMsg); print(otherURL); printCRLF(); printCRLF(); }
main() { int n; printf("Enter N:\n\n"); scanf("%d",&n); printP(n); }
uint8_t BayGPRSInterface::changeIPR(long baud) { _baud = baud; long t_baud[] = { baud, 9600, 38400, 57600 }; for (uint8_t i = 0; i < 4; i++) { i_begin(t_baud[i]); skipChars(); printP("AT"); //Will autoconfigure BAUD-Rate - Auto BAUD-Rate did not work with Sleep-Mode! delay(100); println(); printP("AT+IPR="); println(_baud); if (!wait_forOK(200)) { i_end(); i_begin(_baud); return 0; } i_end(); } return 1; }
uint8_t BayGPRSInterface::setClock(const char* time){ init(); printP("AT+CCLK=\""); print(time); printlnP("\""); // SerialprintP("setting Clock to:"); // Serial.print(time); // if(wait_forOK(1000)) SerialprintlnP("failed"); // else SerialprintlnP("ok"); // return 1; return wait_forOK(1000); }
/* Sends default status and headers indicating a creation of an resource. */ void Response::created(const char *contentType) { P(successMsg1) = "HTTP/1.0 201 Created" CRLF "Access-Control-Allow-Origin: *" CRLF "Content-Type: "; printP (successMsg1); print(contentType); m_printCRLF(); m_printHeaders(); m_printCRLF(); }
uint8_t BayGPRSInterface::sendSMS(const String &phone, const String &sms){ init(); printlnP("AT+CMGF=1");//humanreadable SMS if(wait_forOK(2000)) return 2; printP("AT+CMGS=\"");//Target phone number print(phone); printlnP("\""); if(wait_for("> ",2000)) return 2; print(sms); write(0x1a); if(wait_for("+CMGS: ",2000)) return 2; return 0; }
void WebServer::httpUnauthorized() { P(failMsg) = "HTTP/1.0 401 Authorization Required" CRLF WEBDUINO_SERVER_HEADER "Content-Type: text/html" CRLF "WWW-Authenticate: Basic realm=\"" WEBDUINO_AUTH_REALM "\"" CRLF CRLF WEBDUINO_AUTH_MESSAGE; printP (failMsg); }
void WebServer::httpCreated(const char *contentType, const char *extraHeaders) { P(successMsg1) = "HTTP/1.0 201 CREATED" CRLF WEBDUINO_SERVER_HEADER "Access-Control-Allow-Origin: *" CRLF "Content-Type: "; printP (successMsg1); print(contentType); printCRLF(); if (extraHeaders) print(extraHeaders); printCRLF(); }
unsigned char EthernetSup::available() { unsigned char ret = 0; // listen for incoming clients EthernetClient client = server.available(); if (client) { boolean currentLineIsBlank = true; boolean isReferer = false; while (client.connected()) { if (client.available()) { char c = client.read(); if (!isReferer) { findButtonId(client, c); findDimmerValue(client, c); isReferer = checkReferer(client, c); } if (c == '\n' && currentLineIsBlank) { // send a standard http response header printP(client, http200); printP(client, contenttype); printP(client, connkeep); printP(client, doctype); // Verificando o tipo de botao if (buttonIdx != -1) { if (buttonType[buttonIdx] == ONOFF_BUTTON) { buttonState[buttonIdx] = (buttonState[buttonIdx] ? 0 : 1); } else if (buttonType[buttonIdx] == DIMMER_BUTTON) { if (dimmerDirection[buttonIdx] == 1) { if (dimmerValue[buttonIdx] + dimmerStep[buttonIdx] < 255) dimmerValue[buttonIdx] += dimmerStep[buttonIdx]; else dimmerValue[buttonIdx] = 255; } else if (dimmerDirection[buttonIdx] == 2) { if (dimmerValue[buttonIdx] - dimmerStep[buttonIdx] > 0) dimmerValue[buttonIdx] -= dimmerStep[buttonIdx]; else dimmerValue[buttonIdx] = 0; } } } printP(client, head_ini); printP(client, stylesheet); printP(client, head_fim); printP(client, div_ini); for (int i = 0; i < MAX_BUTTONS; i++) { if (buttonType[i] != -1) { if (buttonType[i] == DIMMER_BUTTON) { printP(client, dimmer_ini1); client.print(buttonText[i]); // converting to percent int val1 = map(dimmerValue[i], 0, 255, 0, 100); client.print(val1, DEC); client.print("%"); printP(client, dimmer_ini2); // link do dimmer UP printP(client, btnid); client.print(buttonId[i], DEC); printP(client, dimmerdown); printP(client, dimmer_mid11); printP(client, colorgreen); printP(client, dimmer_mid12); printP(client, dimmer_space); printP(client, dimmer_space); client.print("-"); printP(client, dimmer_space); printP(client, dimmer_space); printP(client, dimmer_mid2); // link do dimmer DOWN printP(client, btnid); client.print(buttonId[i], DEC); printP(client, dimmerup); printP(client, dimmer_mid21); printP(client, colorgreen); printP(client, dimmer_mid22); printP(client, dimmer_space); printP(client, dimmer_space); client.print("+"); printP(client, dimmer_space); printP(client, dimmer_space); printP(client, dimmer_fim); } else { printP(client, button_ini); // link do botao printP(client, btnid); client.print(buttonId[i], DEC); printP(client, button_mid1); // cor do botao if (buttonState[i] == 1) { printP(client, colorred); } else { printP(client, colorblue); } printP(client, button_mid2); // texto do botao client.print(buttonText[i]); printP(client, button_fim); } } } printP(client, div_fim); ret = 1; break; } } } // give the web browser time to receive the data delay(1); // close the connection: client.stop(); } return ret; }
uint8_t BayGPRSInterface::init(uint8_t unlock_only){ uint8_t count=0; init_start: uint8_t i=0; printP("AT"); //Wake up delay(200); println(); wait_forOK(1000); printlnP("AT"); //Check communication if(! wait_forOK(200)){ //communication ok! printlnP("ATE0"); //Command echo off wait_forOK(500); printlnP("AT+CSCLK=2"); //Auto-Sleepmode wait_forOK(500); //Check PIN printlnP("AT+CPIN?"); while(wait_forPGM(PSTR("+CPIN: "),5000,7,_base64buffer)){ printlnP("AT"); wait_forOK(200); printlnP("AT+CFUN=0"); //Disable wait_forOK(10000); printlnP("AT+CFUN=1"); //delay(2000); //Enable wait_forOK(10000); printlnP("AT"); wait_forOK(200); printlnP("AT+CPIN?"); i++; if(i>2) return 6; } if(_base64buffer[5]=='U') return 3; //SIM PUK if(_base64buffer[5]=='I'){ //SIM PIN printlnP("AT"); wait_forOK(200); printP("AT+CPIN=\""); print(_pin); println("\""); if(wait_forOK(30000)) { return 2; //Wrong PIN } wait_for("SMS Ready",(unlock_only?5000:60000)); } //Return here - Moden will try to connect and attach in the background! if(unlock_only) return 0; // Waiting for Modem to Connect for(i=0;i<127;i++){ if(isRegistered()) break; delay(500); } if(i==127) return 4; for(i=0;i<127;i++){ if(isAttached()) break; delay(500); } if(i==127) return 5; return 0; } softReset(); softSwitch(); i_begin(_baud); skipChars(); printP("AT"); //Will autoconfigure BAUD-Rate - Auto BAUD-Rate did not work with Sleep-Mode! delay(100); println(); printP("AT+IPR="); println(_baud); wait_forOK(200); count++; if(count>1) return 1; goto init_start; }
int printResponse(const byte clientsel, const byte deviceIdx, const bool getLen = false) { int len = 0; len += printP(clientsel, TXTSBRACKETOPEN, getLen); // DeviceID len += printP(clientsel, TXTQUOTE, getLen); len += printP(clientsel, TXTDEVICEID, getLen); printP(clientsel, TXTQUOTE, getLen); len += printP(clientsel, TXTCOLON, getLen); len += printP(clientsel, TXTQUOTE, getLen); len += printV(clientsel, mdevices[deviceIdx].getDeviceID(), getLen); len += printP(clientsel, TXTQUOTE, getLen); // CommandID len += printP(clientsel, TXTCOMMA, getLen); len += printP(clientsel, TXTQUOTE, getLen); len += printP(clientsel, TXTCOMMAND , getLen); len += printP(clientsel, TXTQUOTE, getLen); len += printP(clientsel, TXTCOLON, getLen); len += printP(clientsel, TXTQUOTE, getLen); len += printVstr(clientsel, mdevices[deviceIdx].getCommand(), getLen); len += printP(clientsel, TXTQUOTE, getLen); // Status len += printP(clientsel, TXTCOMMA, getLen); len += printP(clientsel, TXTQUOTE, getLen); len += printP(clientsel, TXTSTATUS , getLen); len += printP(clientsel, TXTQUOTE, getLen); len += printP(clientsel, TXTCOLON, getLen); len += printP(clientsel, TXTQUOTE, getLen); len += printVstr(clientsel, mdevices[deviceIdx].getStatus(), getLen); len += printP(clientsel, TXTQUOTE, getLen); // Value if (mdevices[deviceIdx].commandValue != 0) { len += printP(clientsel, TXTCOMMA, getLen); len += printP(clientsel, TXTQUOTE, getLen); len += printP(clientsel, TXTVALUE , getLen); len += printP(clientsel, TXTQUOTE, getLen); len += printP(clientsel, TXTCOLON, getLen); len += printP(clientsel, TXTQUOTE, getLen); len += printVstr(clientsel, mdevices[deviceIdx].getValue(), getLen); len += printP(clientsel, TXTQUOTE, getLen); } // InOut len += printP(clientsel, TXTCOMMA, getLen); len += printP(clientsel, TXTQUOTE, getLen); len += printP(clientsel, TXTINOUT , getLen); len += printP(clientsel, TXTQUOTE, getLen); len += printP(clientsel, TXTCOLON, getLen); len += printP(clientsel, TXTQUOTE, getLen); len += printVstr(clientsel, "1", getLen); len += printP(clientsel, TXTQUOTE, getLen); // ExtData if (printVstr(clientsel, mdevices[deviceIdx].getExtData(), true) > 0) { len += printP(clientsel, TXTCOMMA, getLen); len += printP(clientsel, TXTQUOTE, getLen); len += printP(clientsel, TXTEXTDATA , getLen); len += printP(clientsel, TXTQUOTE, getLen); len += printP(clientsel, TXTCOLON, getLen); len += printVstr(clientsel, mdevices[deviceIdx].getExtData(), getLen); } len += printP(clientsel, TXTSBRACKETCLOSE, getLen); if (DEBUG_WEB) dbg.println(); return len+1; // WHYYYYYYYYYYYY was not needed before refactor on 1/13/2015 }
void printPage(const byte clientsel, const byte deviceIdx) { // Index printP(clientsel, TXTIND); printP(clientsel, TXTCOLON); printV(clientsel, deviceIdx); printP(clientsel, ANBSP); // DeviceID printP(clientsel, TXTDEVICEID); printP(clientsel, TXTCOLON); printV(clientsel, mdevices[deviceIdx].getDeviceID()); // Type printP(clientsel, ANBSP); if (mdevices[deviceIdx].getType() != 0) { printP(clientsel, TXTTYPE); printP(clientsel, TXTCOLON); printV(clientsel, mdevices[deviceIdx].getType()); printP(clientsel, AOPEN); printP(clientsel, BR); printP(clientsel, SLASH); printP(clientsel, ACLOSE); } // CommandID printP(clientsel, TXTCOMMAND ); printP(clientsel, TXTCOLON); printVstr(clientsel, mdevices[deviceIdx].getCommand()); // Status printP(clientsel, ANBSP); printP(clientsel, TXTSTATUS ); printP(clientsel, TXTCOLON); printVstr(clientsel, mdevices[deviceIdx].getStatus()); // Value if (mdevices[deviceIdx].commandValue != 0) { printP(clientsel, ANBSP); printP(clientsel, TXTVALUE ); printP(clientsel, TXTCOLON); printVstr(clientsel, mdevices[deviceIdx].getValue()); } // ExtData if (printVstr(clientsel, mdevices[deviceIdx].getExtData(), true) > 0) { printP(clientsel, AOPEN); printP(clientsel, BR); printP(clientsel, SLASH); printP(clientsel, ACLOSE); printP(clientsel, TXTEXTDATA ); printP(clientsel, TXTCOLON); printVstr(clientsel, mdevices[deviceIdx].getExtData()); } printP(clientsel, AOPEN); printP(clientsel, BR); printP(clientsel, SLASH); printP(clientsel, ACLOSE); if (EEPROMReadInt(PARAMS(deviceIdx, 1)) != FFFF) { // Parameter 1 printP(clientsel, TXTPAR1); printP(clientsel, TXTCOLON); printV(clientsel, EEPROMReadInt(PARAMS(deviceIdx, 1))); printP(clientsel, AOPEN); printP(clientsel, BR); printP(clientsel, SLASH); printP(clientsel, ACLOSE); } if (EEPROMReadInt(PARAMS(deviceIdx, 2)) != FFFF) { // Parameter 2 printP(clientsel, TXTPAR2); printP(clientsel, TXTCOLON); printV(clientsel, EEPROMReadInt(PARAMS(deviceIdx, 2))); printP(clientsel, AOPEN); printP(clientsel, BR); printP(clientsel, SLASH); printP(clientsel, ACLOSE); } if (EEPROMReadInt(PARAMS(deviceIdx, 3)) != FFFF) { // Parameter 3 printP(clientsel, TXTPAR3); printP(clientsel, TXTCOLON); printV(clientsel, EEPROMReadInt(PARAMS(deviceIdx, 3))); printP(clientsel, AOPEN); printP(clientsel, BR); printP(clientsel, SLASH); printP(clientsel, ACLOSE); } if (EEPROMReadInt(PARAMS(deviceIdx, 4)) != FFFF) { // Parameter 3 printP(clientsel, TXTPAR4); printP(clientsel, TXTCOLON); printV(clientsel, EEPROMReadInt(PARAMS(deviceIdx, 4))); printP(clientsel, AOPEN); printP(clientsel, BR); printP(clientsel, SLASH); printP(clientsel, ACLOSE); } if (EEPROMReadInt(PARAMS(deviceIdx, 5)) != FFFF) { // Parameter 5 printP(clientsel, TXTPAR5); printP(clientsel, TXTCOLON); printV(clientsel, EEPROMReadInt(PARAMS(deviceIdx, 5))); printP(clientsel, AOPEN); printP(clientsel, BR); printP(clientsel, SLASH); printP(clientsel, ACLOSE); } // In deviceIdx if (mdevices[deviceIdx].getInput() != 0) { printP(clientsel, TXTDEVIND); printP(clientsel, TXTCOLON); printV(clientsel, mdevices[deviceIdx].getInput()); printP(clientsel, AOPEN); printP(clientsel, BR); printP(clientsel, SLASH); printP(clientsel, ACLOSE); } // Pin if (mdevices[deviceIdx].getPin() != 0) { printP(clientsel, TXTPIN); printP(clientsel, TXTCOLON); printV(clientsel, mdevices[deviceIdx].getPin()); printP(clientsel, AOPEN); printP(clientsel, BR); printP(clientsel, SLASH); printP(clientsel, ACLOSE); } if (DEBUG_WEB) dbg.println(); return; }
void updateWeb(){ //if (DEBUG_MEMORY) printMem(" Web 1 "); client_recv = server.available(); byte cptr; const char *slash = "/"; const char *space = " "; if (client_recv) { while (client_recv.connected()) { if (client_recv.available()) { char c = client_recv.read(); //read char by char HTTP request if (cptr < MAX_STRING_LEN-1) { temp[cptr++] = c; } else { cptr = 0; } temp[cptr] = '\0'; //if HTTP request has ended if (c == '\n') { if (DEBUG_WEB) dbg.println(temp); //print to serial monitor for debuging if (strstr(temp,"GET / ")) { // Root requested, then give page, else try to parse post parameters if (DEBUG_MEMORY) printMem("WebG "); printP(COMMAND_IO_RECV, HEADER_OK); client_recv.println(); printP(COMMAND_IO_RECV, HEADERPG2); printP(COMMAND_IO_RECV, HEADERPG3); for (byte deviceIdx = 0 ; deviceIdx < DEVICE_COUNT ; deviceIdx++ ) { mdevices[deviceIdx].readInput(); printP(COMMAND_IO_RECV, AOPEN); printP(COMMAND_IO_RECV, H3); // <H3> printP(COMMAND_IO_RECV, ACLOSE); switch (deviceIdx) { case 0: printP(COMMAND_IO_RECV, DEV_0); break; case 1: printP(COMMAND_IO_RECV, DEV_1); break; case 2: printP(COMMAND_IO_RECV, DEV_2); break; case 3: printP(COMMAND_IO_RECV, DEV_3); break; case 4: printP(COMMAND_IO_RECV, DEV_4); break; case 5: printP(COMMAND_IO_RECV, DEV_5); break; case 6: printP(COMMAND_IO_RECV, DEV_6); break; case 7: printP(COMMAND_IO_RECV, DEV_7); break; case 8: printP(COMMAND_IO_RECV, DEV_8); break; case 9: printP(COMMAND_IO_RECV, DEV_9); break; } printP(COMMAND_IO_RECV, AOPEN); printP(COMMAND_IO_RECV, SLASH); printP(COMMAND_IO_RECV, H3); // </H3> printP(COMMAND_IO_RECV, ACLOSE); printP(COMMAND_IO_RECV, AOPEN); printP(COMMAND_IO_RECV, SPAN); // <SPAN> printP(COMMAND_IO_RECV, ACLOSE); printPage(COMMAND_IO_RECV, deviceIdx); printP(COMMAND_IO_RECV, AOPEN); printP(COMMAND_IO_RECV, BR); printP(COMMAND_IO_RECV, SLASH); printP(COMMAND_IO_RECV, ACLOSE); printP(COMMAND_IO_RECV, AOPEN); printP(COMMAND_IO_RECV, SLASH); printP(COMMAND_IO_RECV, SPAN); // </SPAN> printP(COMMAND_IO_RECV, ACLOSE); } printP(COMMAND_IO_RECV, HEADERPGEND); } else { // parse // parse url POST /d/203/c/23/v/12 HTTP/1.1 if (DEBUG_MEMORY) printMem("WebP "); int deviceID = 0; int commandID = 0; int commandValue = 0; //temp = strtok(temp, " "); // POST /d/203/c/23/v/12 HTTP/1.1 char * token = strtok(temp, space); // POST /d/203/c/23/v/12 HTTP/1.1 byte deviceIdx = ERROR; byte result = ERROR; if (strcmp(token,"POST") == 0) { token = strtok(NULL, space); // Second part token = strtok(token, slash); // d token = strtok(NULL, slash); // deviceID deviceID = atoi(token); token = strtok(NULL, slash); // c token = strtok(NULL, slash); // commandID commandID = atoi(token); token = strtok(NULL, slash); // v if (token != NULL) { token = strtok(NULL, slash); // value ? commandValue = atoi(token); } deviceIdx = findDeviceIndex(deviceID); if (DEBUG_WEB) dbg.print("Idx "); if (DEBUG_WEB) dbg.println(deviceIdx); if (deviceIdx != ERROR) { result = deviceCommandHandler(deviceIdx, commandID, false, commandValue); } // return error? } if ( deviceIdx == ERROR || result == ERROR) { printP(COMMAND_IO_RECV, HEADER_ERR); client_recv.println(); printP(COMMAND_IO_RECV, HEADER_ERR_MESS); } else { printP(COMMAND_IO_RECV, HEADER_OK); client_recv.println(); if ( result == HNDLR_WRITE_RESULT) printResponse(COMMAND_IO_RECV, deviceIdx, false); } } delay(1); //stopping client client_recv.stop(); //clearing string for next read cptr = 0; temp[cptr] = '\0'; } } } } }