/* ********************************************************************************************** * File: maat_utils.h * Description: maat utils entry * Authors: Liu WenTan * Date: 2022-10-31 * Copyright: (c) Since 2022 Geedge Networks, Ltd. All rights reserved. *********************************************************************************************** */ #ifndef _MAAT_UTILS_H_ #define _MAAT_UTILS_H_ #ifdef __cplusplus extern "C" { #endif #include #include #include #define TRUE 1 #define FALSE 0 #ifndef MAX #define MAX(a, b) (((a) > (b)) ? (a) : (b)) #endif #ifndef MIN #define MIN(a, b) (((a) < (b)) ? (a) : (b)) #endif #define ALLOC(type, number) ((type *)calloc(sizeof(type), number)) #define FREE(ptr) \ { \ if (ptr) \ { \ free(ptr); \ ptr = NULL; \ } \ } #ifndef offsetof #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER) #endif #ifndef container_of #define container_of(ptr, type, member) ({ \ const typeof( ((type *)0)->member ) *__mptr = (ptr); \ (type *)( (char *)__mptr - offsetof(type,member) );}) #endif #define MAX_HIT_PATH_NUM 4096 #define MAX_SCANNER_HIT_COMPILE_NUM 4096 #define MAX_SCANNER_HIT_GROUP_NUM 4096 #define MAX_SCANNER_HIT_ITEM_NUM 4096 #define IPV4 4 #define IPV6 6 enum ip_format { IP_FORMAT_SINGLE = 1, IP_FORMAT_RANGE, IP_FORMAT_CIDR, IP_FORMAT_MASK, IP_FORMAT_UNKNOWN }; enum port_format { PORT_FORMAT_SINGLE = 1, PORT_FORMAT_RANGE, PORT_FORMAT_UNKNOWN }; enum ip_format ip_format_str2int(const char *format); int ip_format2range(int ip_type, enum ip_format format, const char *ip1, const char *ip2, uint32_t range_begin[], uint32_t range_end[]); enum port_format port_format_str2int(const char *format); #define UNUSED __attribute__((unused)) const char *module_name_str(const char *name); char *maat_strdup(const char *s); void ipv6_ntoh(unsigned int *v6_addr); int get_column_pos(const char *line, int column_seq, size_t *offset, size_t *len); /* the column value must be integer */ long long get_column_value(const char *line, int column_seq); int load_file_to_memory(const char *file_name, unsigned char **pp_out, size_t *out_sz); char *strtok_r_esc(char *s, const char delim, char **save_ptr); char *str_escape(char *dst, int size, const char *src); char *str_unescape(char *s); char *md5_file(const char *filename, char *md5string); int decrypt_open(const char* file_name, const char* key, const char* algorithm, unsigned char**pp_out, size_t *out_sz, char* err_str, size_t err_str_sz); int crypt_memory(const unsigned char *inbuf, size_t inlen, unsigned char **pp_out, size_t *out_sz, const char *key, const char *algorithm, int do_encrypt, char *err_str, size_t err_str_sz); int gzip_uncompress(const unsigned char *in_compressed_data, size_t in_compressed_sz, unsigned char **out_uncompressed_data, size_t *out_uncompressed_sz); size_t memcat(void **dest, size_t offset, size_t *n_dest, const void *src, size_t n_src); /* system cmd wrapper */ int system_cmd_mkdir(const char* path); int system_cmd_rmdir(const char *dir); int system_cmd_gzip(const char *src_file, const char *dst_file); int system_cmd_encrypt(const char *src_file, const char *dst_file, const char *password); #ifdef __cplusplus } #endif #endif