diff options
Diffstat (limited to 'openvpn.c')
-rw-r--r-- | openvpn.c | 250 |
1 files changed, 0 insertions, 250 deletions
diff --git a/openvpn.c b/openvpn.c deleted file mode 100644 index 99b343b..0000000 --- a/openvpn.c +++ /dev/null @@ -1,250 +0,0 @@ -/* - * OpenVPN -- An application to securely tunnel IP networks - * over a single TCP/UDP port, with support for SSL/TLS-based - * session authentication and key exchange, - * packet encryption, packet authentication, and - * packet compression. - * - * Copyright (C) 2002-2010 OpenVPN Technologies, Inc. <sales@openvpn.net> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 - * as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program (see the file COPYING included with this - * distribution); if not, write to the Free Software Foundation, Inc., - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#include "syshead.h" - -#include "init.h" -#include "forward.h" -#include "multi.h" -#include "win32.h" - -#include "memdbg.h" - -#include "forward-inline.h" - -#define P2P_CHECK_SIG() EVENT_LOOP_CHECK_SIGNAL (c, process_signal_p2p, c); - -static bool -process_signal_p2p (struct context *c) -{ - remap_signal (c); - return process_signal (c); -} - -static void -tunnel_point_to_point (struct context *c) -{ - context_clear_2 (c); - - /* set point-to-point mode */ - c->mode = CM_P2P; - - /* initialize tunnel instance */ - init_instance_handle_signals (c, c->es, CC_HARD_USR1_TO_HUP); - if (IS_SIG (c)) - return; - - /* main event loop */ - while (true) - { - perf_push (PERF_EVENT_LOOP); - - /* process timers, TLS, etc. */ - pre_select (c); - P2P_CHECK_SIG(); - - /* set up and do the I/O wait */ - io_wait (c, p2p_iow_flags (c)); - P2P_CHECK_SIG(); - - /* timeout? */ - if (c->c2.event_set_status == ES_TIMEOUT) - { - perf_pop (); - continue; - } - - /* process the I/O which triggered select */ - process_io (c); - P2P_CHECK_SIG(); - - perf_pop (); - } - - uninit_management_callback (); - - /* tear down tunnel instance (unless --persist-tun) */ - close_instance (c); -} - -#undef PROCESS_SIGNAL_P2P - -int -main (int argc, char *argv[]) -{ - struct context c; - -#if PEDANTIC - fprintf (stderr, "Sorry, I was built with --enable-pedantic and I am incapable of doing any real work!\n"); - return 1; -#endif - - CLEAR (c); - - /* signify first time for components which can - only be initialized once per program instantiation. */ - c.first_time = true; - - /* initialize program-wide statics */ - if (init_static ()) - { - /* - * This loop is initially executed on startup and then - * once per SIGHUP. - */ - do - { - /* enter pre-initialization mode with regard to signal handling */ - pre_init_signal_catch (); - - /* zero context struct but leave first_time member alone */ - context_clear_all_except_first_time (&c); - - /* static signal info object */ - CLEAR (siginfo_static); - c.sig = &siginfo_static; - - /* initialize garbage collector scoped to context object */ - gc_init (&c.gc); - - /* initialize environmental variable store */ - c.es = env_set_create (NULL); -#ifdef WIN32 - env_set_add_win32 (c.es); -#endif - -#ifdef ENABLE_MANAGEMENT - /* initialize management subsystem */ - init_management (&c); -#endif - - /* initialize options to default state */ - init_options (&c.options, true); - - /* parse command line options, and read configuration file */ - parse_argv (&c.options, argc, argv, M_USAGE, OPT_P_DEFAULT, NULL, c.es); - -#ifdef ENABLE_PLUGIN - /* plugins may contribute options configuration */ - init_verb_mute (&c, IVM_LEVEL_1); - init_plugins (&c); - open_plugins (&c, true, OPENVPN_PLUGIN_INIT_PRE_CONFIG_PARSE); -#endif - - /* init verbosity and mute levels */ - init_verb_mute (&c, IVM_LEVEL_1); - - /* set dev options */ - init_options_dev (&c.options); - - /* openssl print info? */ - if (print_openssl_info (&c.options)) - break; - - /* --genkey mode? */ - if (do_genkey (&c.options)) - break; - - /* tun/tap persist command? */ - if (do_persist_tuntap (&c.options)) - break; - - /* sanity check on options */ - options_postprocess (&c.options); - - /* show all option settings */ - show_settings (&c.options); - - /* print version number */ - msg (M_INFO, "%s", title_string); - - /* misc stuff */ - pre_setup (&c.options); - - /* test crypto? */ - if (do_test_crypto (&c.options)) - break; - -#ifdef ENABLE_MANAGEMENT - /* open management subsystem */ - if (!open_management (&c)) - break; -#endif - - /* set certain options as environmental variables */ - setenv_settings (c.es, &c.options); - - /* finish context init */ - context_init_1 (&c); - - do - { - /* run tunnel depending on mode */ - switch (c.options.mode) - { - case MODE_POINT_TO_POINT: - tunnel_point_to_point (&c); - break; -#if P2MP_SERVER - case MODE_SERVER: - tunnel_server (&c); - break; -#endif - default: - ASSERT (0); - } - - /* indicates first iteration -- has program-wide scope */ - c.first_time = false; - - /* any signals received? */ - if (IS_SIG (&c)) - print_signal (c.sig, NULL, M_INFO); - - /* pass restart status to management subsystem */ - signal_restart_status (c.sig); - } - while (c.sig->signal_received == SIGUSR1); - - uninit_options (&c.options); - gc_reset (&c.gc); - } - while (c.sig->signal_received == SIGHUP); - } - - context_gc_free (&c); - - env_set_destroy (c.es); - -#ifdef ENABLE_MANAGEMENT - /* close management interface */ - close_management (); -#endif - - /* uninitialize program-wide statics */ - uninit_static (); - - openvpn_exit (OPENVPN_EXIT_STATUS_GOOD); /* exit point */ - return 0; /* NOTREACHED */ -} |