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