#ifndef fooconfigparserhfoo #define fooconfigparserhfoo #include #include #include #include #include enum cfg_value_type { CFG_VAL_TYPE_INVALID, CFG_VAL_TYPE_STRING, CFG_VAL_TYPE_UINT16, CFG_VAL_TYPE_ADDRS, CFG_VAL_TYPE_ASYNC_ADDRS, CFG_VAL_TYPE_BOOL, }; struct dns_async; typedef void (dns_cb_t)(struct dns_async *); struct dns_async { char name[FQDN_STR_LEN + 1]; char port[PORT_STR_LEN + 1]; struct addrinfo req; struct gaicb gcb; struct sigevent sev; dns_cb_t *cb; void *priv; struct list_head list; }; struct cfg_key_value_map { const char *key_name; int key_value; enum cfg_value_type value_type; }; struct cfg_value { enum cfg_value_type type; union { const char *str; uint16_t uint16; struct list_head saddrs; struct dns_async *dns_async; bool boolean; }; }; bool strtosockaddrs(const char *str, struct cfg_value *rvalue, bool async); bool config_parse_line(const char *filename, char **buf, struct cfg_key_value_map *kvmap, int *rkey, const char **rkeyname, struct cfg_value *rvalue, bool async_dns); bool config_parse_header(const char *title, char **buf); bool is_valid_server_config_filename(struct dirent *dent, const char *filename); #endif