diff options
Diffstat (limited to 'win32.h')
-rw-r--r-- | win32.h | 277 |
1 files changed, 0 insertions, 277 deletions
diff --git a/win32.h b/win32.h deleted file mode 100644 index b6a162e..0000000 --- a/win32.h +++ /dev/null @@ -1,277 +0,0 @@ -/* - * OpenVPN -- An application to securely tunnel IP networks - * over a single 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 - */ - -#ifdef WIN32 -#ifndef OPENVPN_WIN32_H -#define OPENVPN_WIN32_H - -#include "mtu.h" - -/* location of executables */ -#define SYS_PATH_ENV_VAR_NAME "SystemRoot" /* environmental variable name that normally contains the system path */ -#define DEFAULT_WIN_SYS_PATH "C:\\WINDOWS" /* --win-sys default value */ -#define NETSH_PATH_SUFFIX "\\system32\\netsh.exe" -#define WIN_ROUTE_PATH_SUFFIX "\\system32\\route.exe" -#define WIN_IPCONFIG_PATH_SUFFIX "\\system32\\ipconfig.exe" -#define WIN_NET_PATH_SUFFIX "\\system32\\net.exe" - -/* - * Win32-specific OpenVPN code, targetted at the mingw - * development environment. - */ - -void init_win32 (void); -void uninit_win32 (void); - -void set_pause_exit_win32 (void); - -/* - * Use keyboard input or events - * to simulate incoming signals - */ - -#define SIGUSR1 1 -#define SIGUSR2 2 -#define SIGHUP 3 -#define SIGTERM 4 -#define SIGINT 5 - -struct security_attributes -{ - SECURITY_ATTRIBUTES sa; - SECURITY_DESCRIPTOR sd; -}; - -#define HANDLE_DEFINED(h) ((h) != NULL && (h) != INVALID_HANDLE_VALUE) - -/* - * Save old window title. - */ -struct window_title -{ - bool saved; - char old_window_title [256]; -}; - -struct rw_handle { - HANDLE read; - HANDLE write; -}; - -/* - * Event-based notification of incoming TCP connections - */ - -#define NE32_PERSIST_EVENT (1<<0) -#define NE32_WRITE_EVENT (1<<1) - -static inline bool -defined_net_event_win32 (const struct rw_handle *event) -{ - return event->read != NULL; -} - -void init_net_event_win32 (struct rw_handle *event, long network_events, socket_descriptor_t sd, unsigned int flags); -long reset_net_event_win32 (struct rw_handle *event, socket_descriptor_t sd); -void close_net_event_win32 (struct rw_handle *event, socket_descriptor_t sd, unsigned int flags); - -/* - * A stateful variant of the net_event_win32 functions above - */ - -struct net_event_win32 -{ - struct rw_handle handle; - socket_descriptor_t sd; - long event_mask; -}; - -void net_event_win32_init (struct net_event_win32 *ne); -void net_event_win32_start (struct net_event_win32 *ne, long network_events, socket_descriptor_t sd); -void net_event_win32_reset (struct net_event_win32 *ne); -void net_event_win32_reset_write (struct net_event_win32 *ne); -void net_event_win32_stop (struct net_event_win32 *ne); -void net_event_win32_close (struct net_event_win32 *ne); - -static inline bool -net_event_win32_defined (const struct net_event_win32 *ne) -{ - return defined_net_event_win32 (&ne->handle); -} - -static inline struct rw_handle * -net_event_win32_get_event (struct net_event_win32 *ne) -{ - return &ne->handle; -} - -static inline long -net_event_win32_get_event_mask (const struct net_event_win32 *ne) -{ - return ne->event_mask; -} - -static inline void -net_event_win32_clear_selected_events (struct net_event_win32 *ne, long selected_events) -{ - ne->event_mask &= ~selected_events; -} - -/* - * Signal handling - */ -struct win32_signal { -# define WSO_MODE_UNDEF 0 -# define WSO_MODE_SERVICE 1 -# define WSO_MODE_CONSOLE 2 - int mode; - struct rw_handle in; - DWORD console_mode_save; - bool console_mode_save_defined; -}; - -extern struct win32_signal win32_signal; /* static/global */ -extern struct window_title window_title; /* static/global */ - -void win32_signal_clear (struct win32_signal *ws); - -/* win32_signal_open startup type */ -#define WSO_NOFORCE 0 -#define WSO_FORCE_SERVICE 1 -#define WSO_FORCE_CONSOLE 2 - -void win32_signal_open (struct win32_signal *ws, - int force, /* set to WSO force parm */ - const char *exit_event_name, - bool exit_event_initial_state); - -void win32_signal_close (struct win32_signal *ws); - -int win32_signal_get (struct win32_signal *ws); - -void win32_pause (struct win32_signal *ws); - -/* - * Set the text on the window title bar - */ - -void window_title_clear (struct window_title *wt); -void window_title_save (struct window_title *wt); -void window_title_restore (const struct window_title *wt); -void window_title_generate (const char *title); - -/* - * We try to do all Win32 I/O using overlapped - * (i.e. asynchronous) I/O for a performance win. - */ -struct overlapped_io { -# define IOSTATE_INITIAL 0 -# define IOSTATE_QUEUED 1 /* overlapped I/O has been queued */ -# define IOSTATE_IMMEDIATE_RETURN 2 /* I/O function returned immediately without queueing */ - int iostate; - OVERLAPPED overlapped; - DWORD size; - DWORD flags; - int status; - bool addr_defined; - struct sockaddr_in addr; - int addrlen; - struct buffer buf_init; - struct buffer buf; -}; - -void overlapped_io_init (struct overlapped_io *o, - const struct frame *frame, - BOOL event_state, - bool tuntap_buffer); - -void overlapped_io_close (struct overlapped_io *o); - -static inline bool -overlapped_io_active (struct overlapped_io *o) -{ - return o->iostate == IOSTATE_QUEUED || o->iostate == IOSTATE_IMMEDIATE_RETURN; -} - -char *overlapped_io_state_ascii (const struct overlapped_io *o); - -/* - * Use to control access to resources that only one - * OpenVPN process on a given machine can access at - * a given time. - */ - -struct semaphore -{ - const char *name; - bool locked; - HANDLE hand; -}; - -void semaphore_clear (struct semaphore *s); -void semaphore_open (struct semaphore *s, const char *name); -bool semaphore_lock (struct semaphore *s, int timeout_milliseconds); -void semaphore_release (struct semaphore *s); -void semaphore_close (struct semaphore *s); - -/* - * Special global semaphore used to protect network - * shell commands from simultaneous instantiation. - * - * It seems you can't run more than one instance - * of netsh on the same machine at the same time. - */ - -extern struct semaphore netcmd_semaphore; -void netcmd_semaphore_init (void); -void netcmd_semaphore_close (void); -void netcmd_semaphore_lock (void); -void netcmd_semaphore_release (void); - -bool get_console_input_win32 (const char *prompt, const bool echo, char *input, const int capacity); -char *getpass (const char *prompt); - -/* Set Win32 security attributes structure to allow all access */ -bool init_security_attributes_allow_all (struct security_attributes *obj); - -/* return true if filename is safe to be used on Windows */ -bool win_safe_filename (const char *fn); - -/* add constant environmental variables needed by Windows */ -struct env_set; -void env_set_add_win32 (struct env_set *es); - -/* get and set the current windows system path */ -void set_win_sys_path (const char *newpath, struct env_set *es); -void set_win_sys_path_via_env (struct env_set *es); -char *get_win_sys_path (void); - -/* call self in a subprocess */ -void fork_to_self (const char *cmdline); - -/* Find temporary directory */ -const char *win_get_tempdir(); - -#endif -#endif |