Lab_interaccio/2011/QAN_v2/httpRequest.ino

405 lines
12 KiB
Arduino
Raw Permalink Normal View History

2025-02-25 21:29:42 +01:00
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);
}