Exemplo n.º 1
0
int check_client_header(FILE *file) {
  char buffer[1024];
  http_request request;

  fgets_or_exit(buffer, 1024, file);

  if (parse_http_request(buffer, &request) == 1) {
    char *url = rewrite_url(request.url);
    if (request.method != HTTP_GET) {
      skip_headers(file);
      send_response(file, 400, "Bad request", "Bad request\r\n");
      free(url);
      return 400;
    } else if (strcmp(url, "/")) {
      skip_headers(file);
      send_response(file, 404, "Not Found", "Not Found\r\n");
      free(url);
      return 404;
    } else {
      skip_headers(file);
      free(url);
      return 200;
    }
  } else {
    skip_headers(file);
    send_response(file, 400, "Bad Request", "Bad request\r\n");
    return 400;
  }
}
Exemplo n.º 2
0
static void
next_fragment(struct dpipe *source, struct FeederState *state)
{
    char filename[PATH_MAX];
    if (state->file) {
	fclose(state->file);

	if (destructive && state->destructive) {
	    sprintf(filename, "%s/%u", state->directory, state->sequence);
	    unlink(filename);
	}
    }
    
    sprintf(filename, "%s/%u", state->directory, ++state->sequence);
  
    if (state->file = state->sequence == 1 ? efopen(filename, "r", WHERE(next_fragment)) : fopen(filename, "r"))
	if (state->sequence > 1) skip_headers(state->file);
}
Exemplo n.º 3
0
void fgets_or_exit(char * buf , int size , FILE * stream ){
//VARIABLE 
	/*char* e400="HTTP/1.1 400 Bad Request\r\nConnection: close\r\nContent-Length: 17\r\n\r\n400 Bad request\r\n";
	char* w200="HTTP/1.1 200 OK\r\nConnection: close\r\nContent-Length: 17\r\n\r\nSalut poto ! :)\r\n";
	char* e404="HTTP/1.1 404 Not Found\r\nConnection: close\r\nContent-Length: 15\r\n\r\n404 Not Found\r\n";*/
	http_request request;
	fgets(buf, size,stream);

	char * request_line = malloc(size);
	strcpy(request_line, buf);
	skip_headers (stream , size);
	int bad_request = parse_http_request(request_line,&request);

	if ( bad_request )
		send_response ( stream , 400 , "Bad Request" , "Bad request\r\n" );
	else if (request.method == HTTP_UNSUPPORTED )
		send_response ( stream , 405 , "Method Not Allowed" , "Method Not Allowed\r\n" );
	else if (strcmp(request.url , "/" ) == 0)
		send_response ( stream , 200 , "OK" , "Salut poto ! :)\r\n" );
	else
		send_response ( stream , 404 , "Not Found" , "Not Found\r\n" );
}
Exemplo n.º 4
0
int main(void){
  int socket_client, socket_serveur = creer_serveur(8080);
  initialiser_signaux();
  while(1){
    socket_client = accept(socket_serveur, NULL, NULL);
    FILE *server = fdopen(socket_client, "w+");
    if(server == NULL){
      perror("fdopen");
      return EXIT_FAILURE;
    }
    if(fork()==0){
      if(socket_client == -1){
        perror("socket client");
        exit(EXIT_FAILURE);
      }
      sleep(1);
      FILE *client = fdopen(socket_client,"w+");
      
      char buffer[BUFFER_SIZE];
      char *buf;
      while(1){
        memset(buffer, '\0', BUFFER_SIZE);
        int parse_status, done=0, line_header=0;
        http_request request;

       // int request_value;        
        skip_headers(client);
        while((buf=fgets(buffer, BUFFER_SIZE, server))!=NULL){
          printf("%s", buffer);
          line_header++;
          if(line_header == 1) parse_status = parse(buffer, &request);
          if(strcmp(buffer, "\r\n") == 0) done = 1;
          if(parse_status == 0 && done == 1){
            send_response(server, 400, "Bad Request", "Bad Request\r\n");
          } else if(done == 1){
            if(request.method == HTTP_GET){
              if(strcmp(request.url, "/") == 0){
               send_response(server, 200, "OK", mess);
              } else {
                send_response(server, 404, "Not Found", "Not Found\r\n");
              } 
            } else {
              send_response(server, 400, "Bad Request", "Bad Request\r\n");
            }
            done = 0; line_header = 0; parse_status = 0;
          }
        }

       /* if (request_value){
          send_response ( client, 400, "Bad Request", "Bad request \r\n " );
        }else if ( request.method == HTTP_UNSUPPORTED ){
        send_response ( client, 405, "Method Not Allowed", " Method Not Allowed\r\n " );
        }else if ( strcmp ( request.url, "/" ) == 0){
          send_response ( client, 200, "OK", mess );
        }else
          send_response ( client, 404, " Not Found ",  "Not Found \r\n " );
       */
      exit(EXIT_SUCCESS);
      }
    } else {
      close(socket_client);
    }
  }
  //close(socket_client); //deja fermée
  close(socket_serveur);
  return EXIT_SUCCESS;
}
Exemplo n.º 5
0
int main(){
	int taille=0;
	int socket_client, pid, erreur = 0;
	
	char str[1024];
	http_request req;
	FILE *f = NULL;
	const char *message_bienvenue = "Bonjour, c'est un grand honneur de vous avoir sur notre serveur. Bienvenue à bord !\n";
	int socket_serveur = creer_serveur(8080);
	message_bienvenue +=0;
	taille+=0;
	
	initialiser_signaux();
	while((socket_client = accept(socket_serveur , NULL , NULL)) != -1){
		
		if((pid = fork()) == -1){
			perror("Erreur fork");
		/* traitement d’erreur */
		}
		if(pid == 0){
			sleep(1);
			f = fdopen(socket_client, "w+");
			/* if(write(socket_client, message_bienvenue, strlen(message_bienvenue)) == -1){
				perror("Erreur write bienvenu");
				traitement d’erreur 
			}*/
			fgets_or_exit(str, sizeof(str), f);
			skip_headers(f);
			erreur=parse_http_request(str,&req);
				
				//erreur = 1;
				/*strcpy(s, str);
				char* token = strtok(s, " ");
				while (token) {
					tokenCounter++;
					if(tokenCounter == 1 && !strcmp(token,"GET") == 0){
						erreur = 0;
					}
					if(tokenCounter ==2 && !strcmp(token, "/") ==0){
						erreur=0;
					}
					if(tokenCounter == 3 && (strncmp(token, "HTTP/1.1",8) != 0 && strncmp(token, "HTTP/1.0",8) !=0)){
						
						erreur = 0;
					}
					if(tokenCounter >=4){
						printf("%s\n", token);
					}			
					token = strtok(NULL, " ");

				}*/
			if(erreur == 404){
				send_response(f,404,"Page not found","Page not found\r\n");
			}else if(erreur == 400){
				send_response(f,400,"Bad Request","Bad Request\r\n");
			}else{
				fprintf(f, "HTTP/1.1 200 OK\r\nContent-Length: %d\r\n\r\n%s\r\n", (int)strlen(message_bienvenue)+2, message_bienvenue);
			}

			fflush(f);
			fclose(f);
			
			
			/*while((taille = read(socket_client, buffer, 256)) != 0){
				if(write(socket_client, buffer, taille)== -1){
					perror("Erreur write retour de message");
				}
			}*/
			exit(EXIT_SUCCESS);
		}else{
			close(socket_client);
		}

	}
	return 1;
}
Exemplo n.º 6
0
int init_socket_tcp(int port){
  //IpV4 - TCP Socket
  int server_socket = socket(AF_INET, SOCK_STREAM, 0);
  int server_init_state = -1;
  if (server_socket == (-1)){
    //Error while creating tcp socket
    perror("init_socket_tcp");
    //Cancelling next operations
    return server_socket;
  }
  //Binding socket
  if ((server_init_state = bind_socket_tcp(server_socket, port)) == -1)
    //Cancelling next operations
    return server_init_state;
  //Listening
  if ((server_init_state = listen_socket_tcp(server_socket)) == -1)
    //Cancelling next operations
    return server_init_state;
  //LOG
  struct tm * timeinfo;
  timeinfo = time_get_time();
  printf("[%d:%d:%d] Server started on port %d\n", timeinfo->tm_hour, timeinfo->tm_min, timeinfo->tm_sec, port);
  //Accepting connections (Server loop process)
  if (!fork()){
    //Init signals
    init_signals();
    //Clients accept() loop
    while(1){
      //Client information
      struct sockaddr_in client_addr;
      //Accepting client
      int client_socket = accept_socket_tcp(server_socket, &client_addr);
      if (client_socket != (-1)){
	//LOG
	_client_idata client_information;
	  get_client_information(&client_addr, &client_information);
	printf("Request from [%s:%d] !\n", client_information.client_ip, client_information.client_port);
	//New instance for client 
	if(!fork()){
	  //Client pipe
	  FILE * clnt_sd = fdopen(client_socket, "w+");
	  //Receive buffer
	  char rcv_buff[SERVER_RECEIVE_BUFFER_SIZE];
	  //HTTP header 
	  http_request http_req;
	  //Header check vars
	  int  header_valid = 0, url_valid = 0;
	  //Reading client request
	  fgets_or_exit(rcv_buff, sizeof(rcv_buff), clnt_sd);
	  //Parsing http
	  header_valid = parse_http_request(rcv_buff, &http_req);
	  //Checking header
	  header_valid = (((http_req.method == HTTP_GET) && (http_req.major_version == 1) && ((http_req.minor_version == 1) || (http_req.minor_version = 0))) ? 1 : 0);
	  //Valid URL
	  url_valid = ((strcmp(http_req.url,"/") == 0) ? 1 : 0); 
	  //Skipping headers
	  skip_headers(clnt_sd);
	  //Header validation
	  if (http_req.method == HTTP_UNSUPPORTED)
	    //Method not supported
	    send_response (clnt_sd, 405, "Method Not Allowed", "Method Not Allowed\r\n");
	  else if ((header_valid == 1) && (url_valid == 1))
	    //Welcome message
	    send_response(clnt_sd, 200 , "OK" , SERVER_WELCOME_MSG );
	  else if ((header_valid == 1) && (url_valid == 0))
	    //404
	    send_response(clnt_sd, 404,"Not Found", "Not Found\r\n");
	  else
	    //Bad request
	    send_response(clnt_sd, 400, "Bad Request" , "Bad request\r\n");
	    
	  //Disconnected
	  fclose(clnt_sd);
	  //Client child-process ending
	  exit(0);
	}
	//Closing client socket
	close(client_socket);
      }
    }
  }
  //Success
  return server_socket;
}