Line data Source code
1 : #ifndef HEADER_fd_src_discof_restore_utils_fd_ssresolve_h 2 : #define HEADER_fd_src_discof_restore_utils_fd_ssresolve_h 3 : 4 : #include "../../../util/fd_util_base.h" 5 : #include "../../../util/net/fd_net_headers.h" 6 : 7 : #if FD_HAS_OPENSSL 8 : #include <openssl/ssl.h> 9 : #endif 10 : 11 0 : #define FD_SSRESOLVE_MAGIC (0xF17EDA2CE55E510) /* FIREDANCER HTTP RESOLVE V0 */ 12 0 : #define FD_SSRESOLVE_ALIGN (8UL) 13 : 14 : struct fd_ssresolve_result { 15 : ulong slot; /* slot of the snapshot */ 16 : ulong base_slot; /* base slot of incremental snapshot or ULONG_MAX */ 17 : }; 18 : 19 : typedef struct fd_ssresolve_result fd_ssresolve_result_t; 20 : 21 : /* fd_ssresolve is responsible for resolving snapshots from a given 22 : peer by sending http requests and parsing http redirect responses. 23 : 24 : It is used by fd_http_resolver_t to resolve snapshots slots for each 25 : peer. */ 26 : struct fd_ssresolve_private; 27 : typedef struct fd_ssresolve_private fd_ssresolve_t; 28 : 29 : FD_PROTOTYPES_BEGIN 30 : 31 : FD_FN_CONST ulong 32 : fd_ssresolve_align( void ); 33 : 34 : FD_FN_CONST ulong 35 : fd_ssresolve_footprint( void ); 36 : 37 : void * 38 : fd_ssresolve_new( void * shmem ); 39 : 40 : fd_ssresolve_t * 41 : fd_ssresolve_join( void * ssresolve ); 42 : 43 : void 44 : fd_ssresolve_init( fd_ssresolve_t * ssresolve, 45 : fd_ip4_port_t addr, 46 : int sockfd, 47 : int full ); 48 : 49 : #if FD_HAS_OPENSSL 50 : void 51 : fd_ssresolve_init_https( fd_ssresolve_t * ssresolve, 52 : fd_ip4_port_t addr, 53 : int sockfd, 54 : int full, 55 : char const * hostname, 56 : SSL_CTX * ssl_ctx ); 57 : #endif 58 : 59 0 : #define FD_SSRESOLVE_ADVANCE_ERROR (-1) /* fatal error */ 60 0 : #define FD_SSRESOLVE_ADVANCE_AGAIN ( 0) /* try again */ 61 0 : #define FD_SSRESOLVE_ADVANCE_SUCCESS ( 1) /* successful advance */ 62 0 : #define FD_SSRESOLVE_ADVANCE_RESULT ( 2) /* successful advance with valid resolve result */ 63 : 64 : /* fd_ssresolve_advance_poll_out advances the ssresolve state machine 65 : when its socket file descriptor is ready for sending data. */ 66 : int 67 : fd_ssresolve_advance_poll_out( fd_ssresolve_t * ssresolve ); 68 : 69 : /* fd_ssresolve_advance_poll_in advances the ssresolve state machine 70 : when its socket file descriptor is ready for receiving data. */ 71 : int 72 : fd_ssresolve_advance_poll_in( fd_ssresolve_t * ssresolve, 73 : fd_ssresolve_result_t * result ); 74 : 75 : /* fd_ssresolve_is_done returns whether the ssresolve state machine 76 : is completed. Once the state machine is completed, it must be 77 : reinitialized by fd_ssresolve_init. */ 78 : int 79 : fd_ssresolve_is_done( fd_ssresolve_t * ssresolve ); 80 : 81 : void 82 : fd_ssresolve_cancel( fd_ssresolve_t * ssresolve ); 83 : 84 : FD_PROTOTYPES_END 85 : 86 : #endif /* HEADER_fd_src_discof_restore_utils_fd_ssresolve_h */