#ifndef UTILITIES_H #define UTILITIES_H #include <stdbool.h> #include <stdio.h> #ifdef __cplusplus #include "vmime/vmime.hpp" vmime::shared_ptr<vmime::security::cert::defaultCertificateVerifier> windows_root_certs_verifier(void); extern "C" { #endif enum bool_param { PARAM_NO, PARAM_YES, PARAM_NOT_GIVEN }; struct config { const char *host; const char *login; const char *password; const char *subject; const char *reply_to; const char *from; const char *dest_dir; const char **files; size_t nfiles; const char *msg_body; size_t msg_size; const char **to; size_t nto; int port_POP3; int port_SMTP; enum bool_param use_SSL; enum bool_param use_AUTH; int timeout; enum bool_param del_msgs; enum bool_param save_body; enum bool_param save_subj; }; void _finish(bool ok); #define PRINT_ERROR(message...) \ ((fprintf(stderr, message) && false) || fprintf(stderr, "\r\n")) #define FAIL(message...) _finish(PRINT_ERROR(message) && false) #define FAIL_NOMSG() _finish(false) #define SUCCEED() _finish(true) void *dirtyalloc(size_t size); void read_config(const char *filename, struct config *config); void get_config(int argc, const char **argv, struct config *config); int dummy_errback(const char *fmt, ...); int provisional_wide_char_fgetc(FILE *stream); bool is_valid_port_number(int port); void free_config(struct config *config); void validate_config(struct config *config); void perform_work(const struct config *config); inline static bool is_empty_string(const char *string) { return string == NULL || *string == '\0'; } #define MESSAGES_EXTERN #include "messages.c" #ifdef __cplusplus } #endif #endif /* UTILITIES_H */