Exemple #1
0
/*
* 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;
}
Exemple #2
0
/*
*   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;
}
Exemple #3
0
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;
}
Exemple #4
0
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");
}
Exemple #5
0
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);
}
Exemple #6
0
// 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);
}