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 0 : #define FD_SSRESOLVE_MAGIC (0xF17EDA2CE55E510) /* FIREDANCER HTTP RESOLVE V0 */ 8 0 : #define FD_SSRESOLVE_ALIGN (8UL) 9 : 10 : struct fd_ssresolve_result { 11 : ulong slot; /* slot of the snapshot */ 12 : ulong base_slot; /* base slot of incremental snapshot or ULONG_MAX */ 13 : }; 14 : 15 : typedef struct fd_ssresolve_result fd_ssresolve_result_t; 16 : 17 : /* fd_ssresolve is responsible for resolving snapshots from a given 18 : peer by sending http requests and parsing http redirect responses. 19 : 20 : It is used by fd_http_resolver_t to resolve snapshots slots for each 21 : peer. */ 22 : struct fd_ssresolve_private; 23 : typedef struct fd_ssresolve_private fd_ssresolve_t; 24 : 25 : FD_PROTOTYPES_BEGIN 26 : 27 : FD_FN_CONST ulong 28 : fd_ssresolve_align( void ); 29 : 30 : FD_FN_CONST ulong 31 : fd_ssresolve_footprint( void ); 32 : 33 : void * 34 : fd_ssresolve_new( void * shmem ); 35 : 36 : fd_ssresolve_t * 37 : fd_ssresolve_join( void * ssresolve ); 38 : 39 : void 40 : fd_ssresolve_init( fd_ssresolve_t * ssresolve, 41 : fd_ip4_port_t addr, 42 : int sockfd, 43 : int full ); 44 : 45 0 : #define FD_SSRESOLVE_ADVANCE_ERROR (-1) /* fatal error */ 46 0 : #define FD_SSRESOLVE_ADVANCE_AGAIN ( 0) /* try again */ 47 0 : #define FD_SSRESOLVE_ADVANCE_SUCCESS ( 1) /* success */ 48 : 49 : /* fd_ssresolve_advance_poll_out advances the ssresolve state machine 50 : when its socket file descriptor is ready for sending data. */ 51 : int 52 : fd_ssresolve_advance_poll_out( fd_ssresolve_t * ssresolve ); 53 : 54 : /* fd_ssresolve_advance_poll_in advances the ssresolve state machine 55 : when its socket file descriptor is ready for receiving data. */ 56 : int 57 : fd_ssresolve_advance_poll_in( fd_ssresolve_t * ssresolve, 58 : fd_ssresolve_result_t * result ); 59 : 60 : /* fd_ssresolve_is_done returns whether the ssresolve state machine 61 : is completed. Once the state machine is completed, it must be 62 : reinitialized by fd_ssresolve_init. */ 63 : int 64 : fd_ssresolve_is_done( fd_ssresolve_t * ssresolve ); 65 : 66 : FD_PROTOTYPES_END 67 : 68 : #endif /* HEADER_fd_src_discof_restore_utils_fd_ssresolve_h */