/* * With timeout (millisec) */ unsigned int HTTP::getResponse(int sk,uint8_t rbuff[],int rbufflen,int timeout) { int len; char* line; int i; for(i=-1;i<timeout;i=i+10){line=readLine(sk);if(line!=NULL) break;delay(10);} if (line==NULL) return -1; if (memcmp(line,"HTTP/1.1",8)!=0) {strcpy(respmess,"ERR");cleanBuff(sk);return -2;} strncpy(respmess,(line+9),3); if (line==NULL) return -1; if (memcmp(line,"HTTP/1.1 200",12)!=0) {cleanBuff(sk);return -2;} while (line!=NULL) { line=readLine(sk); if (line!=NULL) { char *param=checkHeader(line,headerLen); if (param!=NULL) sscanf(param,"%i",&len); if (strlen(line)<2) {break;} } } resetBuff(); if (len==0) return 0; uint16_t nb=readData(sk,rbuff,rbufflen); return nb; }
/* * Receive response waiting timeout millisec */ char* HTTP::getResponse(int sk,int timeout) { int len; char* line; int i; for(i=-1;i<timeout;i=i+10){line=readLine(sk);if(line!=NULL) break;delay(10);} if (line==NULL) return NULL; if (memcmp(line,"HTTP/1.1",8)!=0) {strcpy(respmess,"ERR");cleanBuff(sk);return "Err!";} strncpy(respmess,(line+9),3); if (memcmp(line,"HTTP/1.1 200",12)!=0) {cleanBuff(sk);return NOPAGE;} while (line!=NULL) { line=readLine(sk); if (line!=NULL) { char *param=checkHeader(line,headerLen); if (param!=NULL) sscanf(param,"%i",&len); if (strlen(line)<2) {break;} } } readLine(sk); char* p=strchr(linebuff,'\0');*p='\n'; if (len>LINEBUFFLEN) len=LINEBUFFLEN; linebuff[len]='\0'; resetBuff(); uint8_t tmp[8];while (readData(sk,tmp,8)>0); return linebuff; }
char* HTTP::getRequest(int socket,int nres,WEBRES rs[],char *key) { char* line=readLine(socket); if (line==NULL) return NULL; #if HTTPDEBUG Serial.println(line); #endif if (memcmp(line,"GET",3)==0) {reqGET(socket,line,nres,rs,key);return Resource.name;} if (memcmp(line,"POST",4)==0) {reqPOST(socket,line,nres,rs,key);return Resource.name;} cleanBuff(socket); return NULL; }
main () { int i, elems = 0; // Quantidade de elementos que ele tem que digitar/percorrer. unsigned long vecLong[MAXELEMS]; // Vetor com o fatorial da parte inteira de cada elemento do vetor de double. double vecDouble[MAXELEMS]; // Vetor com os elementos digitados pelo usuário. do { printf("# Quantos números quer digitar? (1 a 60000)\n"); if (!scanf("%d", &elems)) { printf("# Você digitou LIXO\n\n"); } else if (elems < 1 || elems > MAXELEMS) { printf("# ERRO: %d é um valor inválido\n\n", elems); } cleanBuff(); } while(elems < 1 || elems > MAXELEMS); pushElems(vecDouble, elems); orderVector(vecDouble, elems); pushFactorial(vecDouble, vecLong, elems); printf("# Voce digitou os seguintes elementos:\n"); for (i = 0; i < elems; i ++) { printf("%.3lf\n", vecDouble[i]); } printf("\n\n"); for (i = 0; i < elems; i ++) { printf("Fatorial de %-2d = ", (int)(vecDouble[i] + 0.5)); if (vecLong[i] <= 0 || (int)(vecDouble[i] + 0.5) > 20) { printf("ERRO\n"); } else { printf("%lu\n", vecLong[i]); } } printf("\n# FIM\n"); }
void HTTP::reqGET(int socket,char *buff,int nres,WEBRES rs[],char *key) { char* query=NULL; char* endfield=strchr(&buff[4],'?'); {if (endfield!=NULL) query=endfield+1;} if (endfield==NULL) {endfield=strchr(&buff[4],' ');} if (endfield==NULL) {respNOK(socket);return;} *endfield='\0'; strlcpy(Resource.name,&buff[4],URILEN); int lquery=0; if (query!=NULL) {char* endq=strchr(query,' ');if (endq!=NULL) {*endq='\0';} else *query='\0';} if (query!=NULL) {strlcpy(Resource.query,query,QUERYLEN);} bool fauth=true; if (key!=NULL) { char *param; fauth=false; while (buff!=NULL) { buff=readLine(socket); #if HTTPDEBUG if (buff!=NULL) Serial.println(buff); #endif if (strlen(buff)==0) {query=++buff;buff=NULL;} if (buff!=NULL) {param=checkHeader(buff,headerAuth); if (param!=NULL) fauth=checkUserPsw(param,key);} } } cleanBuff(socket); #if HTTPDEBUG Serial.println(Resource.name); Serial.println(Resource.query); #endif if (fauth) activateRes(socket,nres,rs); else respNoAuth(socket); }
// Lê os números e faz as checagens necessárias. pushElems(double vec[MAXELEMS], int elems) { int count = 0; // Contador para saber quantos foram. double elem; // O elemento que foi lido do usuário. printf("\n# Digite %d numeros positivos que serao colocados no vetor:\n", elems); do { printf("# Digite vet[%d]\n", count); scanf("%lf", &elem); if (0) { printf("# Você digitou LIXO\n\n"); } else if (elem < 1 || elem > MAXNUM) { printf("# ERRO: %.6lf fora da faixa (1.000000 a 500000.000000)\n\n", elem); } else if (checkInputRepeated(elem, vec, count)) { printf("# ERRO: %.4lf já foi digitado\n\n", elem); } else { vec[count] = elem; count++; } cleanBuff(); printf("\n"); } while(count < elems); }