#ifndef CONFIG_H #define CONFIG_H #include "array_list.h" #include #include #include typedef enum { TRANSPORT_TCP, TRANSPORT_SSH } TransportType; /* Receiver-side staging state for --delay-updates. Forward-declared here so Config can carry it; the concrete type lives in delay_updates.h. */ typedef struct DelayUpdatesContext DelayUpdatesContext; typedef struct Config { char* version; char* send_directory; char* receive_root_directory; bool save_to_disk; bool use_multithreading; bool use_chunk_serialization; bool use_compression; bool use_sendfile; bool use_metadata; bool use_executability; bool metadata_explicitly_disabled; bool show_progress; bool dry_run; bool remove_source_files; bool use_delete; int compression_level; int compression_threads; unsigned long long chunk_size; int ssh_port; TransportType transport; char* ssh_destination; char* fastsync_server_path; char** exclude_patterns; int exclude_count; char** include_patterns; int include_count; unsigned long long max_size; unsigned long long min_size; unsigned long long max_alloc; bool use_incremental; bool ignore_times; bool size_only; bool use_delta; bool whole_file; int modify_window; uint32_t delta_block_size; unsigned long long delta_max_file_size; bool use_tls; char* server_host; int server_port; char* tls_cert; char* tls_key; char* tls_ca; int timeout; int contimeout; bool quiet; bool backup; char* backup_dir; bool stats; int max_depth; FILE* log_file; int queue_size; bool follow_symlinks; bool partial; // Issue #120: Symlink handling bool copy_links; bool safe_links; bool copy_unsafe_links; // Issue #121: Extended metadata preservation bool preserve_hard_links; bool preserve_acls; bool preserve_xattrs; bool preserve_devices; bool preserve_sparse; // Issue #122: Output/logging options bool itemize_changes; char* out_format; char* log_file_format; int info_level; int debug_level; bool list_only; bool human_readable; bool eight_bit_output; // Issue #127: Transfer modes bool existing; bool ignore_existing; bool update; bool inplace; bool delay_updates; bool use_fsync; bool append; bool append_verify; // Issue #128: Extended delete options bool delete_excluded; bool delete_after; int max_delete; // Issue #129: Advanced file selection. These fields are CLIENT-ONLY: they are // never serialized to the wire (the receiver must not learn them). ArrayList* filters; /* --filter=RULE rule strings, in order */ char* files_from; /* --files-from path (may be NULL) */ void* files_from_set; /* parsed FileListSet* allow-set, or NULL */ bool from0; /* -0/--from0: NUL-delimited *-from files */ bool cvs_exclude; /* -C/--cvs-exclude: standard CVS ignore set */ bool per_dir_filter; /* -F: apply per-directory .rsync-filter files */ bool prune_empty_dirs; bool one_file_system; /* -x/--one-file-system: do not cross filesystem boundaries */ bool relative; // Issue #130: Remote shell/connection options char* rsh_command; char* rsync_path; bool old_args; char* temp_dir; char* compare_dest; char* copy_dest; char* link_dest; // PR #174: Partial transfer resumption char* partial_dir; // PR #178: Backup versioning char* suffix; // PR #179: Delete policies bool delete_before; // PR #181: IPv6 and bind address char* address; char* bind_address; bool ipv6; bool ipv4; // PR #182: Daemon/server mode bool daemon; char* daemon_config; bool server_mode; // PR #183: Checksum comparison bool checksum; // PR #184: Compression algorithm negotiation char* compress_choice; char* chmod_spec; char** skip_compress_suffixes; int skip_compress_count; bool skip_compress_set; // Receiver-side runtime staging registry for --delay-updates. Never sent // over the wire and never set on the sender side. DelayUpdatesContext* delay_context; } Config; #define PROTOCOL_VERSION "2.6.0" #define DEFAULT_CHUNK_SIZE (10 * 1024 * 1024) Config* config_create(void); void config_delete(Config* config); bool config_send(int file_descriptor, const Config* config); Config* config_receive(int file_descriptor); bool config_is_remote_dest(const char* s); void config_parse_ssh_dest(Config* config); #endif