1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
|
/*
* 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) 2013-2018 Heiko Hund <heiko.hund@sophos.com>
*
* 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; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#ifndef _SERVICE_H
#define _SERVICE_H
#ifdef HAVE_CONFIG_H
#include "config.h"
#elif defined(_MSC_VER)
#include "config-msvc.h"
#endif
#include <winsock2.h>
#include <windows.h>
#include <stdlib.h>
#include <tchar.h>
#define APPNAME TEXT(PACKAGE "serv")
#define SERVICE_DEPENDENCIES TAP_WIN_COMPONENT_ID "\0Dhcp\0\0"
/*
* Message handling
*/
#define MSG_FLAGS_ERROR (1<<0)
#define MSG_FLAGS_SYS_CODE (1<<1)
#define M_INFO (0) /* informational */
#define M_SYSERR (MSG_FLAGS_ERROR|MSG_FLAGS_SYS_CODE) /* error + system code */
#define M_ERR (MSG_FLAGS_ERROR) /* error */
typedef enum {
automatic,
interactive,
_service_max
} openvpn_service_type;
typedef struct {
openvpn_service_type type;
TCHAR *name;
TCHAR *display_name;
TCHAR *dependencies;
DWORD start_type;
} openvpn_service_t;
#define MAX_NAME 256
typedef struct {
TCHAR exe_path[MAX_PATH];
TCHAR config_dir[MAX_PATH];
TCHAR ext_string[16];
TCHAR log_dir[MAX_PATH];
TCHAR ovpn_admin_group[MAX_NAME];
DWORD priority;
BOOL append;
} settings_t;
extern openvpn_service_t automatic_service;
extern openvpn_service_t interactive_service;
extern LPCTSTR service_instance;
VOID WINAPI ServiceStartAutomaticOwn(DWORD argc, LPTSTR *argv);
VOID WINAPI ServiceStartAutomatic(DWORD argc, LPTSTR *argv);
VOID WINAPI ServiceStartInteractiveOwn(DWORD argc, LPTSTR *argv);
VOID WINAPI ServiceStartInteractive(DWORD argc, LPTSTR *argv);
BOOL openvpn_vsntprintf(LPTSTR str, size_t size, LPCTSTR format, va_list arglist);
BOOL openvpn_sntprintf(LPTSTR str, size_t size, LPCTSTR format, ...);
BOOL openvpn_swprintf(wchar_t *const str, const size_t size, const wchar_t *const format, ...);
DWORD GetOpenvpnSettings(settings_t *s);
BOOL ReportStatusToSCMgr(SERVICE_STATUS_HANDLE service, SERVICE_STATUS *status);
LPCTSTR GetLastErrorText();
DWORD MsgToEventLog(DWORD flags, LPCTSTR lpszMsg, ...);
/* Convert a utf8 string to utf16. Caller should free the result */
wchar_t *utf8to16(const char *utf8);
/* return windows system directory as a pointer to a static string */
const wchar_t *get_win_sys_path(void);
#endif /* ifndef _SERVICE_H */
|