예제 #1
0
int httpd_recv(int fd, void *buf, size_t n, int flags)
{
#ifdef CONFIG_ENABLE_HTTPS
	if (httpd_is_https_active())
		return tls_recv(httpd_tls_handle, buf, n);
	else
#endif /* ENABLE_HTTPS */
		return recv(fd, buf, n, flags);
}
예제 #2
0
파일: ji.c 프로젝트: placek/ji
static int
io_recv(int bytes, char *buf, int *remain, void *user)
{
  int n;
  *remain = 0;
  n = (in_tls)
      ? tls_recv(bytes, buf, remain, &tls) : tcp_recv(bytes, buf, user);
  if (n > 0)
    log_printf(10, "\n<- %c[%d] '%.*s'\n\n", (in_tls) ? '&' : ' ', n, n, buf);
  return n;
}
예제 #3
0
/**
 * Receive all data available on a connection and dump it to stdout
 */
void display_result( int connection, TLSParameters *tls_context )
{
  int received = 0;
  static char recv_buf[ BUFFER_SIZE + 1 ];

  while ( ( received = tls_recv( connection, recv_buf, 
            BUFFER_SIZE, 0, tls_context ) ) >= 0 )
  {
    recv_buf[ received ] = '\0';
    printf( "%s", recv_buf );
  }
  printf( "\n" );
}
IoT_Error_t iot_tls_read(Network *pNetwork, unsigned char *pMsg, size_t len,
			 Timer *timer, size_t *read_len)
{
	int val = -1;
	int recv_len = 0;
	fd_set fds;
	int time_left, error_flag = false, complete_flag = false;

	FD_ZERO(&fds);
	FD_SET(pNetwork->my_socket, &fds);
	setsockopt(pNetwork->my_socket, SOL_SOCKET, SO_RCVTIMEO,
		   (void *)&pNetwork->tlsConnectParams.timeout_ms,
		   sizeof(pNetwork->tlsConnectParams.timeout_ms));

	do {
		if (tls_handle) {
			val = tls_recv(tls_handle, pMsg + recv_len,
				       len - recv_len);
		}
		if (val >= 0) {
			recv_len += val;
		} else {
			error_flag = true;
		}

		if (recv_len >= len) {
			complete_flag = true;
		}
		time_left = left_ms(timer);
	} while (!error_flag && !complete_flag && time_left > 0);

	*read_len = recv_len;
	if (0 == *read_len && error_flag) {
		return NETWORK_SSL_NOTHING_TO_READ;
	} else if (has_timer_expired(timer) && !complete_flag) {
		return NETWORK_SSL_READ_TIMEOUT_ERROR;
	}

	return AWS_SUCCESS;
}