LCOV - code coverage report
Current view: top level - waltz/h2 - fd_h2_rbuf_ossl.h (source / functions) Hit Total Coverage
Test: cov.lcov Lines: 0 28 0.0 %
Date: 2025-07-01 05:00:49 Functions: 0 8 0.0 %

          Line data    Source code
       1             : #ifndef HEADER_fd_src_waltz_h2_fd_h2_rbuf_ossl_h
       2             : #define HEADER_fd_src_waltz_h2_fd_h2_rbuf_ossl_h
       3             : 
       4             : /* fd_h2_rbuf_ossl.h provides utils for I/O between rbuf and OpenSSL
       5             :    BIO. */
       6             : 
       7             : #include "fd_h2_rbuf.h"
       8             : 
       9             : #if FD_HAS_OPENSSL
      10             : 
      11             : #include <openssl/err.h>
      12             : #include <openssl/ssl.h>
      13             : 
      14             : /* fd_h2_rbuf_ssl_read reads bytes from a SSL and places them into rbuf. */
      15             : 
      16             : static inline ulong
      17             : fd_h2_rbuf_ssl_read( fd_h2_rbuf_t * rbuf_out,
      18             :                      SSL *          ssl,
      19           0 :                      int *          ssl_err ) {
      20           0 :   ulong sz0, sz1;
      21           0 :   uchar * rbuf_free = fd_h2_rbuf_peek_free( rbuf_out, &sz0, &sz1 );
      22           0 :   if( FD_UNLIKELY( !sz0 ) ) return 0UL;
      23             : 
      24           0 :   ERR_clear_error();
      25           0 :   ulong read_sz;
      26           0 :   if( FD_UNLIKELY( !SSL_read_ex( ssl, rbuf_free, sz0, &read_sz ) ) ) {
      27           0 :     *ssl_err = SSL_get_error( ssl, 0 );
      28           0 :     return 0UL;
      29           0 :   }
      30           0 :   fd_h2_rbuf_alloc( rbuf_out, read_sz );
      31           0 :   return read_sz;
      32           0 : }
      33             : 
      34             : /* fd_h2_rbuf_ssl_write writes bytes from an rbuf into a SSL.
      35             :    FIXME react to fatal errors here? */
      36             : 
      37             : static inline ulong
      38             : fd_h2_rbuf_ssl_write( fd_h2_rbuf_t * rbuf_in,
      39           0 :                       SSL *          ssl ) {
      40           0 :   ulong sz0, sz1;
      41           0 :   uchar * rbuf_used = fd_h2_rbuf_peek_used( rbuf_in, &sz0, &sz1 );
      42           0 :   if( FD_UNLIKELY( !sz0 ) ) return 0UL;
      43             : 
      44           0 :   ulong write_sz;
      45           0 :   if( FD_UNLIKELY( !SSL_write_ex( ssl, rbuf_used, sz0, &write_sz ) ) ) return 0UL;
      46           0 :   if( FD_UNLIKELY( sz1 && write_sz==sz0 ) ) {
      47           0 :     ulong write_sz1;
      48           0 :     if( SSL_write_ex( ssl, rbuf_in->buf0, sz1, &write_sz1 ) ) {
      49           0 :       write_sz += write_sz1;
      50           0 :     }
      51           0 :   }
      52           0 :   fd_h2_rbuf_skip( rbuf_in, write_sz );
      53           0 :   return write_sz;
      54           0 : }
      55             : 
      56             : #endif /* FD_HAS_OPENSSL */
      57             : 
      58             : #endif /* HEADER_fd_src_waltz_h2_fd_h2_rbuf_ossl_h */

Generated by: LCOV version 1.14