--- /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 <sys/socket.h>
+#include <sys/un.h>
+
+#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 */
+