#ifndef OMNI_COMMON_H #define OMNI_COMMON_H #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define OMNI_NODE_ROLE_PEER "peer" #define OMNI_NODE_ROLE_SERVER "server" #define OMNI_MAX_PEER_ID 64 #define OMNI_MAX_NODE_ROLE 16 #define OMNI_MAX_EVENT_NAME 64 #define OMNI_MAX_FILE_NAME 256 #define OMNI_MAX_ADDR_TEXT 128 #define OMNI_MAX_FRAME_SIZE (8U * 1024U * 1024U) #define OMNI_ARRAY_LEN(x) (sizeof(x) / sizeof((x)[0])) typedef struct omni_file_logger { FILE *file; pthread_mutex_t mutex; char path[PATH_MAX]; size_t current_bytes; size_t buffered_bytes; size_t flush_bytes; size_t max_bytes; int flush_interval_ms; int max_files; int immediate_flush; uint64_t last_flush_monotonic_ms; } omni_file_logger_t; int64_t omni_now_unix_nano(void); uint32_t omni_now_millis32(void); int omni_set_nonblocking(int fd, int enabled); int omni_parse_sockaddr(const char *raw, int passive, struct sockaddr_storage *addr, socklen_t *addr_len, int *family_out); int omni_clone_sockaddr(const struct sockaddr *src, socklen_t src_len, struct sockaddr_storage *dst, socklen_t *dst_len); const char *omni_sockaddr_to_string(const struct sockaddr *addr, socklen_t addr_len, char *buffer, size_t buffer_len); int omni_bind_device(int fd, const char *device); int omni_ensure_dir(const char *path); int omni_ensure_parent_dir(const char *path); int omni_read_file(const char *path, uint8_t **out, size_t *out_len); int omni_write_full_fd(int fd, const uint8_t *data, size_t len); int omni_append_file(const char *path, const uint8_t *data, size_t len); int omni_write_file(const char *path, const uint8_t *data, size_t len); int omni_random_u32(uint32_t *out); char *omni_strdup(const char *src); char *omni_strdup_printf(const char *fmt, ...); char *omni_json_escape(const char *src); char *omni_json_escape_bytes(const uint8_t *src, size_t len); int omni_utf8_valid(const uint8_t *data, size_t len); void omni_trim_newline(char *line); int omni_parse_duration_ms(const char *raw, int default_ms, int *out_ms); double omni_duration_ms_to_ns(double ms); const char *omni_path_base_name(const char *path); void omni_file_logger_init(omni_file_logger_t *logger, FILE *file); void omni_file_logger_init_path(omni_file_logger_t *logger, FILE *file, const char *path, int immediate_flush); void omni_file_logger_destroy(omni_file_logger_t *logger); int omni_file_logger_write_line(omni_file_logger_t *logger, const char *line); #endif