diff -r a1e271de54c2 -r 6d615203d963 config.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/config.h Sun Jul 06 23:33:24 2008 +0300 @@ -0,0 +1,64 @@ +#ifndef CONFIG_H +#define CONFIG_H + +#include +#include + +#define ADDR_TEXT_LEN 128 +#define ADDR_TEXT_LEN_STR "128" +#define PORT_TEXT_LEN 32 +#define PORT_TEXT_LEN_STR "32" +#define PATH_TEXT_LEN 108 /* from sys/un.h */ +#define PATH_TEXT_LEN_STR "108" /* from sys/un.h */ + +struct config_endpoint { + // one of AF_LOCAL, AF_INET, AF_INET6 + int family; + + // buffers to store the extracted textual addres/port into + // these /should/ be long enough + union { + // PF_INET - may be a numeric IPv4 address, numeric IPv6 address, or hostname + struct { + const char *addr; + const char *port; + } inet; + + // PF_LOCAL + struct { + const char *path; + } local; + + } af; + + struct { + char addr[ADDR_TEXT_LEN]; + char port[PORT_TEXT_LEN]; + char default_port[PORT_TEXT_LEN]; + char path[PATH_TEXT_LEN]; + } _data; +}; + +void endpoint_init (struct config_endpoint *endpoint, unsigned short default_port); +int endpoint_parse (struct config_endpoint *endpoint, const char *addr_spec); + +/* + * Parse a host:port string. + * + * Valid formats: + * host + * host:port + * [host] + * [host]:port + * + * The contents of the given hostport string *will* be modified. + * + * The value of *port will be set to NULL if no port was given. + * + * Returns 0 and sets *host if succesfull, nonzero otherwise. + * + */ +int parse_hostport (char *hostport, char **host, char **port); + +#endif /* CONFIG_H */ +