405 lines
12 KiB
C++
405 lines
12 KiB
C++
|
|
|
|
boolean httpRequest(byte peticion, char* valor)
|
|
{
|
|
|
|
boolean ping = 0;
|
|
boolean errorFeed = 0;
|
|
char newKey;
|
|
|
|
// RESETEAMOS VARIABLES
|
|
|
|
errHttp[9] = 0;
|
|
errHttp[10] = 0;
|
|
errHttp[11] = 0;
|
|
msjHttp[0] = 0;
|
|
msjHttp[1] = 0;
|
|
|
|
char ssl_client[40]=""; //50
|
|
char urlenc_client[40]="";
|
|
char peticio[100]=""; // 150
|
|
//char msjHttpError[100]="";
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////
|
|
// PETICION GET AL SERVIDOR
|
|
///////////////////////////////////////////////////////////////////////////
|
|
|
|
Serial.println();
|
|
Serial.println("********** CONECTANDO ***************");
|
|
lcd.clear();
|
|
lcd.print("connecting ");
|
|
|
|
if ( cliente_lector.connect(serverHostname, 80) ) {
|
|
Serial.println();
|
|
Serial.println("REQUEST: connected");
|
|
|
|
SSL(peticions[0], keySslClient, ssl_client); // PING
|
|
urlencode(urlenc_client, ssl_client);
|
|
strcat(peticio, "GET /");
|
|
strcat(peticio, urlenc_client);
|
|
strcat(peticio, "/");
|
|
|
|
strcpy(ssl_client, "");
|
|
strcpy(urlenc_client, "");
|
|
|
|
SSL(codigo_lector, keySslClient, ssl_client);
|
|
urlencode(urlenc_client, ssl_client);
|
|
strcat(peticio, urlenc_client);
|
|
|
|
strcat(peticio, "/ HTTP/1.1");
|
|
|
|
cliente_lector.println(peticio);
|
|
cliente_lector.print("Host: ");
|
|
cliente_lector.println(serverHostname);
|
|
cliente_lector.println();
|
|
|
|
Serial.println(peticio);
|
|
|
|
///////////////////////////////////////////////////////////////////////////
|
|
// ESPERA A UNA RESPUESTA DEL SERVIDOR
|
|
///////////////////////////////////////////////////////////////////////////
|
|
|
|
httpListen(keySslServer, 8);
|
|
|
|
///////////////////////////////////////////////////////////////////////////
|
|
// ANALISIS DE MENSAJE RECIBIDO Y PETICION SIGUIENTE YA CODIFICADA
|
|
///////////////////////////////////////////////////////////////////////////
|
|
|
|
if( (errHttp[9] == '2') && (errHttp[10] == '0') && (errHttp[11] == '0') )// Deteccion del codigo 200
|
|
{
|
|
int i = 0;
|
|
Serial.print("REQUEST: msj received: ");
|
|
Serial.println(msjHttp);
|
|
//lcd.clear();
|
|
//lcd.print("msj received: ");
|
|
//lcd.setCursor(0,1);
|
|
//lcd.print(msjHttp);
|
|
lcd.clear();
|
|
lcd.print("connected");
|
|
|
|
if( (msjHttp[0] == 'O') && (msjHttp[1] == 'K') )
|
|
{
|
|
Serial.println("REQUEST: OK detected");
|
|
// SLL!! newKey = msjHttp[3];
|
|
newKey = keySslClient;
|
|
Serial.print("REQUEST: New Key: ");
|
|
Serial.println(newKey, DEC);
|
|
Serial.println("********");
|
|
Serial.println(peticions[peticion]);
|
|
Serial.println("********");
|
|
//lcd.setCursor(10,1);
|
|
//lcd.print(peticions[peticion]);
|
|
//lcd.clear();
|
|
//lcd.print("connected!");
|
|
|
|
ping = 1;
|
|
// Enviar peticion con uno de los cuatro codigos
|
|
|
|
strcpy(ssl_client, "");
|
|
strcpy(urlenc_client, "");
|
|
strcpy(peticio, "");
|
|
|
|
switch (peticion) {
|
|
case 1:
|
|
// /init/codigo_lector/rfid/PIN/
|
|
SSL(peticions[peticion], newKey, ssl_client);
|
|
urlencode(urlenc_client, ssl_client);
|
|
strcat(peticio, "GET /");
|
|
strcat(peticio, urlenc_client);
|
|
strcat(peticio, "/");
|
|
|
|
strcpy(ssl_client, "");
|
|
strcpy(urlenc_client, "");
|
|
|
|
SSL(codigo_lector, newKey, ssl_client);
|
|
urlencode(urlenc_client, ssl_client);
|
|
strcat(peticio, urlenc_client);
|
|
strcat(peticio, "/");
|
|
|
|
strcpy(ssl_client, "");
|
|
strcpy(urlenc_client, "");
|
|
|
|
SSL(rfid, newKey, ssl_client);
|
|
urlencode(urlenc_client, ssl_client);
|
|
strcat(peticio, urlenc_client);
|
|
////////////////////////////////////////
|
|
strcat(peticio, "/");
|
|
|
|
strcpy(ssl_client, "");
|
|
strcpy(urlenc_client, "");
|
|
|
|
SSL(PIN, newKey, ssl_client);
|
|
urlencode(urlenc_client, ssl_client);
|
|
strcat(peticio, urlenc_client);
|
|
|
|
strcat(peticio, "/ HTTP/1.1");
|
|
|
|
break;
|
|
case 2:
|
|
// /baja/codigo_lector/rfid/PIN/
|
|
SSL(peticions[peticion], newKey, ssl_client);
|
|
urlencode(urlenc_client, ssl_client);
|
|
strcat(peticio, "GET /");
|
|
strcat(peticio, urlenc_client);
|
|
strcat(peticio, "/");
|
|
|
|
strcpy(ssl_client, "");
|
|
strcpy(urlenc_client, "");
|
|
|
|
SSL(codigo_lector, newKey, ssl_client);
|
|
urlencode(urlenc_client, ssl_client);
|
|
strcat(peticio, urlenc_client);
|
|
strcat(peticio, "/");
|
|
|
|
strcpy(ssl_client, "");
|
|
strcpy(urlenc_client, "");
|
|
|
|
SSL(rfid, newKey, ssl_client);
|
|
urlencode(urlenc_client, ssl_client);
|
|
strcat(peticio, urlenc_client);
|
|
////////////////////////////////////////
|
|
strcat(peticio, "/");
|
|
|
|
strcpy(ssl_client, "");
|
|
strcpy(urlenc_client, "");
|
|
|
|
SSL(PIN, newKey, ssl_client);
|
|
urlencode(urlenc_client, ssl_client);
|
|
strcat(peticio, urlenc_client);
|
|
|
|
strcat(peticio, "/ HTTP/1.1");
|
|
break;
|
|
case 3:
|
|
// /oper/codigo_lector/rfid/descuento/PIN/ : per a sumar al saldo al server
|
|
SSL(peticions[peticion], newKey, ssl_client);
|
|
urlencode(urlenc_client, ssl_client);
|
|
strcat(peticio, "GET /");
|
|
strcat(peticio, urlenc_client);
|
|
strcat(peticio, "/");
|
|
|
|
strcpy(ssl_client, "");
|
|
strcpy(urlenc_client, "");
|
|
|
|
SSL(codigo_lector, newKey, ssl_client);
|
|
urlencode(urlenc_client, ssl_client);
|
|
strcat(peticio, urlenc_client);
|
|
strcat(peticio, "/");
|
|
|
|
strcpy(ssl_client, "");
|
|
strcpy(urlenc_client, "");
|
|
|
|
SSL(rfid, newKey, ssl_client);
|
|
urlencode(urlenc_client, ssl_client);
|
|
strcat(peticio, urlenc_client);
|
|
strcat(peticio, "/");
|
|
|
|
strcpy(ssl_client, "");
|
|
strcpy(urlenc_client, "");
|
|
|
|
SSL(valor, newKey, ssl_client);
|
|
urlencode(urlenc_client, ssl_client);
|
|
strcat(peticio, urlenc_client);
|
|
///////////////////////////////////////////
|
|
strcat(peticio, "/");
|
|
|
|
strcpy(ssl_client, "");
|
|
strcpy(urlenc_client, "");
|
|
|
|
SSL(PIN, newKey, ssl_client);
|
|
urlencode(urlenc_client, ssl_client);
|
|
strcat(peticio, urlenc_client);
|
|
|
|
strcat(peticio, "/ HTTP/1.1");
|
|
break;
|
|
case 4:
|
|
// /cobro/codigo_lector/rfid/canjeo/PIN/ : per a restar al saldo al server
|
|
SSL(peticions[peticion], newKey, ssl_client);
|
|
urlencode(urlenc_client, ssl_client);
|
|
strcat(peticio, "GET /");
|
|
strcat(peticio, urlenc_client);
|
|
strcat(peticio, "/");
|
|
|
|
strcpy(ssl_client, "");
|
|
strcpy(urlenc_client, "");
|
|
|
|
SSL(codigo_lector, newKey, ssl_client);
|
|
urlencode(urlenc_client, ssl_client);
|
|
strcat(peticio, urlenc_client);
|
|
strcat(peticio, "/");
|
|
|
|
strcpy(ssl_client, "");
|
|
strcpy(urlenc_client, "");
|
|
|
|
SSL(rfid, newKey, ssl_client);
|
|
urlencode(urlenc_client, ssl_client);
|
|
strcat(peticio, urlenc_client);
|
|
strcat(peticio, "/");
|
|
|
|
strcpy(ssl_client, "");
|
|
strcpy(urlenc_client, "");
|
|
|
|
SSL(valor, newKey, ssl_client);
|
|
urlencode(urlenc_client, ssl_client);
|
|
strcat(peticio, urlenc_client);
|
|
//////////////////////////////////////////
|
|
strcat(peticio, "/");
|
|
|
|
strcpy(ssl_client, "");
|
|
strcpy(urlenc_client, "");
|
|
|
|
SSL(PIN, newKey, ssl_client);
|
|
urlencode(urlenc_client, ssl_client);
|
|
strcat(peticio, urlenc_client);
|
|
|
|
strcat(peticio, "/ HTTP/1.1");
|
|
break;
|
|
case 5: // apretando la 'A' durante dos segundos
|
|
// /saldo/codigo_lector/rfid/PIN
|
|
SSL(peticions[peticion], newKey, ssl_client);
|
|
urlencode(urlenc_client, ssl_client);
|
|
strcat(peticio, "GET /");
|
|
strcat(peticio, urlenc_client);
|
|
strcat(peticio, "/");
|
|
|
|
strcpy(ssl_client, "");
|
|
strcpy(urlenc_client, "");
|
|
|
|
SSL(codigo_lector, newKey, ssl_client);
|
|
urlencode(urlenc_client, ssl_client);
|
|
strcat(peticio, urlenc_client);
|
|
strcat(peticio, "/");
|
|
|
|
strcpy(ssl_client, "");
|
|
strcpy(urlenc_client, "");
|
|
|
|
SSL(rfid, newKey, ssl_client);
|
|
urlencode(urlenc_client, ssl_client);
|
|
strcat(peticio, urlenc_client);
|
|
////////////////////////////////////////
|
|
strcat(peticio, "/");
|
|
|
|
strcpy(ssl_client, "");
|
|
strcpy(urlenc_client, "");
|
|
|
|
SSL(PIN, newKey, ssl_client);
|
|
urlencode(urlenc_client, ssl_client);
|
|
strcat(peticio, urlenc_client);
|
|
|
|
strcat(peticio, "/ HTTP/1.1");
|
|
break;
|
|
|
|
}
|
|
|
|
cliente_lector.println(peticio);
|
|
cliente_lector.print("Host: ");
|
|
cliente_lector.println(serverHostname);
|
|
cliente_lector.println();
|
|
|
|
Serial.println(peticio);
|
|
|
|
}
|
|
else if( (msjHttp[0] == 'K') && (msjHttp[1] == 'O') )
|
|
{
|
|
Serial.println("REQUEST: KO detected");
|
|
ping = 0;
|
|
lcd.clear();
|
|
lcd.print("message");
|
|
lcd.setCursor(0,1);
|
|
lcd.print("not valid");
|
|
}
|
|
else
|
|
{
|
|
Serial.println("REQUEST: msj not valid");
|
|
ping = 0;
|
|
lcd.clear();
|
|
lcd.print("message");
|
|
lcd.setCursor(0,1);
|
|
lcd.print("not valid");
|
|
}
|
|
}
|
|
else
|
|
{
|
|
Serial.println("REQUEST: Server not respond");
|
|
Serial.println(errHttp);
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////////
|
|
// ESPERA A UNA RESPUESTA DEL SERVIDOR Y ACTUALIZACION DEL LCD
|
|
//////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
if(ping) // Si la primera peticion se ha hecho correctamente enviamos el nuevo dato
|
|
{
|
|
|
|
// SLL!! httpListen((byte)newKey, 8);
|
|
httpListen(keySslServer, 8); // es 8 o 9 dependiendo de si esta la linea set-cookie que envia el server
|
|
|
|
if( (errHttp[9] == '2') && (errHttp[10] == '0') && (errHttp[11] == '0') )// Deteccion del codigo 200
|
|
{
|
|
Serial.print("2- REQUEST: msj received with key ");
|
|
Serial.println(newKey, DEC);
|
|
Serial.print(" is ");
|
|
Serial.println(msjHttp);
|
|
lcd.clear();
|
|
lcd.print("Server msj: ");
|
|
lcd.setCursor(0,1);
|
|
lcd.print(msjHttp);
|
|
|
|
if( (msjHttp[0] == 'O') && (msjHttp[1] == 'K') )
|
|
{
|
|
Serial.println("2- REQUEST: OK detected");
|
|
errorFeed = 1;
|
|
}
|
|
else
|
|
{
|
|
if( (msjHttp[0] == 'K') && (msjHttp[1] == 'O') )
|
|
{
|
|
Serial.println("2- REQUEST: KO detected");
|
|
errorFeed = 1;
|
|
}
|
|
else
|
|
{
|
|
Serial.println("2- REQUEST: msj not valid");
|
|
}
|
|
|
|
}
|
|
}
|
|
else {
|
|
Serial.println("REQUEST: Server not respond");
|
|
//lcd.clear();
|
|
//lcd.print("server");
|
|
//lcd.setCursor(0,1);
|
|
//lcd.print("not respond");
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
// kf you didn't get a connection to the server:
|
|
Serial.println("REQUEST: connection failed");
|
|
lcd.clear();
|
|
lcd.print("connection");
|
|
lcd.setCursor(0,1);
|
|
lcd.print("failed");
|
|
|
|
}
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////
|
|
// CIERRE DE LA CONEXION
|
|
///////////////////////////////////////////////////////////////////////////
|
|
|
|
cliente_lector.stop();
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////
|
|
// RETORNO DE LOS MENSAJES DE ERROR
|
|
///////////////////////////////////////////////////////////////////////////
|
|
|
|
return(errorFeed);
|
|
|
|
}
|
|
|
|
|