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 "../../../flamenco/fd_flamenco_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 7680 : #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 : uchar hash[ FD_HASH_FOOTPRINT ]; /* hash of the snapshot */ 18 : }; 19 : 20 : typedef struct fd_ssresolve_result fd_ssresolve_result_t; 21 : 22 : /* fd_ssresolve is responsible for resolving snapshots from a given 23 : peer by sending http requests and parsing http redirect responses. 24 : 25 : It is used by fd_http_resolver_t to resolve snapshots slots for each 26 : peer. */ 27 : struct fd_ssresolve_private; 28 : typedef struct fd_ssresolve_private fd_ssresolve_t; 29 : 30 : FD_PROTOTYPES_BEGIN 31 : 32 : FD_FN_CONST ulong 33 : fd_ssresolve_align( void ); 34 : 35 : FD_FN_CONST ulong 36 : fd_ssresolve_footprint( void ); 37 : 38 : void * 39 : fd_ssresolve_new( void * shmem ); 40 : 41 : fd_ssresolve_t * 42 : fd_ssresolve_join( void * ssresolve ); 43 : 44 : void 45 : fd_ssresolve_init( fd_ssresolve_t * ssresolve, 46 : fd_ip4_port_t addr, 47 : int sockfd, 48 : int full, 49 : char const * hostname ); 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 */