aboutsummaryrefslogtreecommitdiff
path: root/options.h
diff options
context:
space:
mode:
Diffstat (limited to 'options.h')
-rw-r--r--options.h123
1 files changed, 90 insertions, 33 deletions
diff --git a/options.h b/options.h
index 39f2ac6..2bd7f26 100644
--- a/options.h
+++ b/options.h
@@ -82,10 +82,65 @@ struct options_pre_pull
#endif
+struct connection_entry
+{
+ int proto;
+ int local_port;
+ bool local_port_defined;
+ int remote_port;
+ bool port_option_used;
+ const char *local;
+ const char *remote;
+ bool remote_float;
+ bool bind_defined;
+ bool bind_local;
+ int connect_retry_seconds;
+ bool connect_retry_defined;
+ int connect_retry_max;
+ int connect_timeout;
+ bool connect_timeout_defined;
+#ifdef ENABLE_HTTP_PROXY
+ struct http_proxy_options *http_proxy_options;
+#endif
+#ifdef ENABLE_SOCKS
+ const char *socks_proxy_server;
+ int socks_proxy_port;
+ bool socks_proxy_retry;
+#endif
+};
+
+struct remote_entry
+{
+ const char *remote;
+ int remote_port;
+ int proto;
+};
+
+#ifdef ENABLE_CONNECTION
+
+#define CONNECTION_LIST_SIZE 64
+
+struct connection_list
+{
+ int len;
+ int current;
+ bool no_advance;
+ struct connection_entry *array[CONNECTION_LIST_SIZE];
+};
+
+struct remote_list
+{
+ int len;
+ struct remote_entry *array[CONNECTION_LIST_SIZE];
+};
+
+#endif
+
/* Command line options */
struct options
{
struct gc_arena gc;
+ bool gc_owned;
/* first config file */
const char *config;
@@ -111,17 +166,19 @@ struct options
#endif
/* Networking parms */
- const char *local;
- int local_port;
- bool local_port_defined;
- int remote_port;
- bool port_option_used;
- bool remote_float;
+ struct connection_entry ce;
+
+#ifdef ENABLE_CONNECTION
+ struct connection_list *connection_list;
struct remote_list *remote_list;
+#endif
+
+#ifdef GENERAL_PROXY_SUPPORT
+ struct auto_proxy_info *auto_proxy_info;
+#endif
+
bool remote_random;
const char *ipchange;
- bool bind_defined;
- bool bind_local;
const char *dev;
const char *dev_type;
const char *dev_node;
@@ -141,14 +198,6 @@ struct options
bool tun_mtu_defined; /* true if user overriding parm with command line option */
bool link_mtu_defined; /* true if user overriding parm with command line option */
- /* Protocol type (PROTO_UDP or PROTO_TCP) */
- int proto;
- int connect_retry_seconds;
- int connect_retry_max;
- bool connect_retry_defined;
- int connect_timeout;
- bool connect_timeout_defined;
-
/* Advanced MTU negotiation and datagram fragmentation options */
int mtu_discover_type; /* used if OS supports setting Path MTU discovery options on socket */
@@ -254,21 +303,6 @@ struct options
struct route_option_list *routes;
bool route_nopull;
-#ifdef GENERAL_PROXY_SUPPORT
- struct auto_proxy_info *auto_proxy_info;
-#endif
-
-#ifdef ENABLE_HTTP_PROXY
- struct http_proxy_options *http_proxy_options;
-#endif
-
-#ifdef ENABLE_SOCKS
- /* socks proxy */
- const char *socks_proxy_server;
- int socks_proxy_port;
- bool socks_proxy_retry;
-#endif
-
#ifdef ENABLE_OCC
/* Enable options consistency check between peers */
bool occ;
@@ -499,6 +533,7 @@ struct options
#define OPT_P_PLUGIN (1<<24)
#define OPT_P_SOCKBUF (1<<25)
#define OPT_P_SOCKFLAGS (1<<26)
+#define OPT_P_CONNECTION (1<<27)
#define OPT_P_DEFAULT (~(OPT_P_INSTANCE|OPT_P_PULL_MODE))
@@ -553,7 +588,7 @@ void notnull (const char *arg, const char *description);
void usage_small (void);
-void init_options (struct options *o);
+void init_options (struct options *o, const bool init_gc);
void uninit_options (struct options *o);
void setenv_settings (struct env_set *es, const struct options *o);
@@ -578,7 +613,7 @@ void options_warning (char *actual, const char *expected);
#endif
-void options_postprocess (struct options *options, bool first_time);
+void options_postprocess (struct options *options);
void pre_pull_save (struct options *o);
void pre_pull_restore (struct options *o);
@@ -643,4 +678,26 @@ void options_string_import (struct options *options,
unsigned int *option_types_found,
struct env_set *es);
+/*
+ * inline functions
+ */
+static inline bool
+connection_list_defined (const struct options *o)
+{
+#ifdef ENABLE_CONNECTION
+ return o->connection_list != NULL;
+#else
+ return false;
+#endif
+}
+
+static inline void
+connection_list_set_no_advance (struct options *o)
+{
+#ifdef ENABLE_CONNECTION
+ if (o->connection_list)
+ o->connection_list->no_advance = true;
+#endif
+}
+
#endif