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 : 51 : #if FD_HAS_OPENSSL 52 : void 53 : fd_ssresolve_init_https( fd_ssresolve_t * ssresolve, 54 : fd_ip4_port_t addr, 55 : int sockfd, 56 : int full, 57 : char const * hostname, 58 : SSL_CTX * ssl_ctx ); 59 : #endif 60 : 61 0 : #define FD_SSRESOLVE_ADVANCE_ERROR (-1) /* fatal error */ 62 0 : #define FD_SSRESOLVE_ADVANCE_AGAIN ( 0) /* try again */ 63 0 : #define FD_SSRESOLVE_ADVANCE_SUCCESS ( 1) /* successful advance */ 64 0 : #define FD_SSRESOLVE_ADVANCE_RESULT ( 2) /* successful advance with valid resolve result */ 65 : 66 : /* fd_ssresolve_advance_poll_out advances the ssresolve state machine 67 : when its socket file descriptor is ready for sending data. */ 68 : int 69 : fd_ssresolve_advance_poll_out( fd_ssresolve_t * ssresolve ); 70 : 71 : /* fd_ssresolve_advance_poll_in advances the ssresolve state machine 72 : when its socket file descriptor is ready for receiving data. */ 73 : int 74 : fd_ssresolve_advance_poll_in( fd_ssresolve_t * ssresolve, 75 : fd_ssresolve_result_t * result ); 76 : 77 : /* fd_ssresolve_is_done returns whether the ssresolve state machine 78 : is completed. Once the state machine is completed, it must be 79 : reinitialized by fd_ssresolve_init. */ 80 : int 81 : fd_ssresolve_is_done( fd_ssresolve_t * ssresolve ); 82 : 83 : void 84 : fd_ssresolve_cancel( fd_ssresolve_t * ssresolve ); 85 : 86 : FD_PROTOTYPES_END 87 : 88 : #endif /* HEADER_fd_src_discof_restore_utils_fd_ssresolve_h */