| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 
 |  
 while(1){
      memset(buf,'\0',sizeof(buf));
      memset(sbuf,'\0',sizeof(sbuf));
      /* ask the user to write an HTTP request */
      FD_ZERO(&writefds);
      FD_SET(fileno(stdout),&writefds);
      nb_bytes_written = write(fileno(stdout),"Enter an HTTP request:\n",strlen("Enter an HTTP request:\n"));
      if(nb_bytes_written <= 0){
	BIO_printf(bio_err,"error in the request writing %d\n",SSL_get_error(ssl,nb_bytes_written));
	goto end;
      }
 
      /* read the request on stdin */
      FD_SET(fileno(stdin),&readfds);
      nb_bytes_read = read(fileno(stdin),buf,sizeof(buf));
      if(nb_bytes_read <= 0){
	BIO_printf(bio_err,"error in the request reading %d\n",SSL_get_error(ssl,nb_bytes_read));
	goto end;
      }
 
      /* send the client request to the server */
      FD_ZERO(&writefds);
      FD_SET(SSL_get_fd(ssl),&writefds);
      c_request_len = SSL_write(ssl,buf,nb_bytes_read);
      if (c_request_len <= 0){
	BIO_printf(bio_err,"error in SSL_write %d\n",SSL_get_error(ssl,c_request_len));
	goto end;
      }
 
      while(1){
	/* read the server response (block of 4096) */
	FD_ZERO(&readfds);
	FD_SET(SSL_get_fd(ssl),&readfds);
	s_response_len = SSL_read(ssl,sbuf,4096);
	if (s_response_len < 0){
	  BIO_printf(bio_err,"error in SSL_read %d\n",SSL_get_error(ssl,s_response_len));
	  goto end;
	}
	if(s_response_len == 0)
	  break;
 
	/* display the server response on stdout */
	FD_ZERO(&writefds);
	FD_SET(SSL_get_fd(ssl),&writefds);
	nb_bytes_written = write(fileno(stdout),sbuf,s_response_len);
	if(nb_bytes_written <= 0){
	  BIO_printf(bio_err,"error in the response writing %d\n",SSL_get_error(ssl,nb_bytes_written));
	  goto end;
	}
      }
    } | 
Partager