1 /**
2  * @file rassapi.h
3  * Copyright 2012, 2013 MinGW.org project
4  *
5  * Permission is hereby granted, free of charge, to any person obtaining a
6  * copy of this software and associated documentation files (the "Software"),
7  * to deal in the Software without restriction, including without limitation
8  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
9  * and/or sell copies of the Software, and to permit persons to whom the
10  * Software is furnished to do so, subject to the following conditions:
11  *
12  * The above copyright notice and this permission notice (including the next
13  * paragraph) shall be included in all copies or substantial portions of the
14  * Software.
15  *
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
22  * DEALINGS IN THE SOFTWARE.
23  */
24 #ifndef _RASSAPI_H
25 #define _RASSAPI_H
26 #pragma GCC system_header
27 #include <_mingw.h>
28 
29 #ifdef __cplusplus
30 extern "C" {
31 #endif
32 
33 #ifndef UNLEN
34 #include <lmcons.h>
35 #endif
36 
37 #define RASSAPI_MAX_PHONENUMBER_SIZE    128
38 #define RASSAPI_MAX_MEDIA_NAME	        16
39 #define RASSAPI_MAX_PORT_NAME	        16
40 #define RASSAPI_MAX_DEVICE_NAME         128
41 #define RASSAPI_MAX_DEVICETYPE_NAME     16
42 #define RASSAPI_MAX_PARAM_KEY_SIZE      32
43 #define RASPRIV_NoCallback              0x01
44 #define RASPRIV_AdminSetCallback        0x02
45 #define RASPRIV_CallerSetCallback       0x04
46 #define RASPRIV_DialinPrivilege         0x08
47 #define RASPRIV_CallbackType (RASPRIV_AdminSetCallback \
48                              | RASPRIV_CallerSetCallback \
49                              | RASPRIV_NoCallback)
50 #define	RAS_MODEM_OPERATIONAL	        1
51 #define	RAS_MODEM_NOT_RESPONDING        2
52 #define	RAS_MODEM_HARDWARE_FAILURE      3
53 #define	RAS_MODEM_INCORRECT_RESPONSE    4
54 #define	RAS_MODEM_UNKNOWN		5
55 #define	RAS_PORT_NON_OPERATIONAL        1
56 #define	RAS_PORT_DISCONNECTED         	2
57 #define	RAS_PORT_CALLING_BACK         	3
58 #define	RAS_PORT_LISTENING            	4
59 #define	RAS_PORT_AUTHENTICATING         5
60 #define	RAS_PORT_AUTHENTICATED	        6
61 #define	RAS_PORT_INITIALIZING	        7
62 #define MEDIA_UNKNOWN                   0
63 #define MEDIA_SERIAL                    1
64 #define MEDIA_RAS10_SERIAL              2
65 #define MEDIA_X25                       3
66 #define MEDIA_ISDN                      4
67 #define USER_AUTHENTICATED              0x0001
68 #define MESSENGER_PRESENT               0x0002
69 #define PPP_CLIENT                      0x0004
70 #define GATEWAY_ACTIVE                  0x0008
71 #define REMOTE_LISTEN                   0x0010
72 #define PORT_MULTILINKED                0x0020
73 #define RAS_IPADDRESSLEN                15
74 #define RAS_IPXADDRESSLEN               22
75 #define RAS_ATADDRESSLEN                32
76 #define RASDOWNLEVEL                    10
77 #define RASADMIN_35                     35
78 #define RASADMIN_CURRENT                40
79 
80 typedef ULONG IPADDR;
81 typedef enum _RAS_PARAMS_FORMAT {
82     ParamNumber = 0,
83     ParamString = 1
84 } RAS_PARAMS_FORMAT;
85 typedef union RAS_PARAMS_VALUE {
86 	DWORD	Number;
87 	struct	{
88 	    DWORD	Length;
89 		PCHAR	Data;
90 		} String;
91 } RAS_PARAMS_VALUE;
92 typedef struct RAS_PARAMETERS {
93     CHAR	            P_Key [RASSAPI_MAX_PARAM_KEY_SIZE];
94     RAS_PARAMS_FORMAT	P_Type;
95     BYTE	            P_Attributes;
96     RAS_PARAMS_VALUE	P_Value;
97 } RAS_PARAMETERS;
98 typedef struct _RAS_USER_0 {
99     BYTE    bfPrivilege;
100     WCHAR   szPhoneNumber[RASSAPI_MAX_PHONENUMBER_SIZE + 1];
101 } RAS_USER_0, *PRAS_USER_0;
102 typedef struct _RAS_PORT_0 {
103     WCHAR wszPortName[RASSAPI_MAX_PORT_NAME];
104     WCHAR wszDeviceType[RASSAPI_MAX_DEVICETYPE_NAME];
105     WCHAR wszDeviceName[RASSAPI_MAX_DEVICE_NAME];
106     WCHAR wszMediaName[RASSAPI_MAX_MEDIA_NAME];
107     DWORD reserved;
108     DWORD Flags;
109     WCHAR wszUserName[UNLEN + 1];
110     WCHAR wszComputer[NETBIOS_NAME_LEN];
111     DWORD dwStartSessionTime;          /* seconds from 1/1/1970 */
112     WCHAR wszLogonDomain[DNLEN + 1];
113     BOOL fAdvancedServer;
114 } RAS_PORT_0, *PRAS_PORT_0;
115 typedef struct _RAS_PPP_NBFCP_RESULT {
116     DWORD dwError;
117     DWORD dwNetBiosError;
118     CHAR  szName[ NETBIOS_NAME_LEN + 1 ];
119     WCHAR wszWksta[ NETBIOS_NAME_LEN + 1 ];
120 } RAS_PPP_NBFCP_RESULT;
121 typedef struct _RAS_PPP_IPCP_RESULT{
122     DWORD dwError;
123     WCHAR wszAddress[ RAS_IPADDRESSLEN + 1 ];
124 } RAS_PPP_IPCP_RESULT;
125 typedef struct _RAS_PPP_IPXCP_RESULT {
126     DWORD dwError;
127     WCHAR wszAddress[ RAS_IPXADDRESSLEN + 1 ];
128 } RAS_PPP_IPXCP_RESULT;
129 typedef struct _RAS_PPP_ATCP_RESULT {
130     DWORD dwError;
131     WCHAR wszAddress[ RAS_ATADDRESSLEN + 1 ];
132 } RAS_PPP_ATCP_RESULT;
133 typedef struct _RAS_PPP_PROJECTION_RESULT {
134     RAS_PPP_NBFCP_RESULT nbf;
135     RAS_PPP_IPCP_RESULT  ip;
136     RAS_PPP_IPXCP_RESULT ipx;
137     RAS_PPP_ATCP_RESULT  at;
138 } RAS_PPP_PROJECTION_RESULT;
139 typedef struct _RAS_PORT_1{
140     RAS_PORT_0  rasport0;
141     DWORD       LineCondition;
142     DWORD       HardwareCondition;
143     DWORD       LineSpeed;
144     WORD        NumStatistics;
145     WORD        NumMediaParms;
146     DWORD       SizeMediaParms;
147     RAS_PPP_PROJECTION_RESULT  ProjResult;
148 } RAS_PORT_1, *PRAS_PORT_1;
149 typedef struct _RAS_PORT_STATISTICS {
150     DWORD   dwBytesXmited;
151     DWORD   dwBytesRcved;
152     DWORD   dwFramesXmited;
153     DWORD   dwFramesRcved;
154     DWORD   dwCrcErr;
155     DWORD   dwTimeoutErr;
156     DWORD   dwAlignmentErr;
157     DWORD   dwHardwareOverrunErr;
158     DWORD   dwFramingErr;
159     DWORD   dwBufferOverrunErr;
160     DWORD   dwBytesXmitedUncompressed;
161     DWORD   dwBytesRcvedUncompressed;
162     DWORD   dwBytesXmitedCompressed;
163     DWORD   dwBytesRcvedCompressed;
164     DWORD   dwPortBytesXmited;
165     DWORD   dwPortBytesRcved;
166     DWORD   dwPortFramesXmited;
167     DWORD   dwPortFramesRcved;
168     DWORD   dwPortCrcErr;
169     DWORD   dwPortTimeoutErr;
170     DWORD   dwPortAlignmentErr;
171     DWORD   dwPortHardwareOverrunErr;
172     DWORD   dwPortFramingErr;
173     DWORD   dwPortBufferOverrunErr;
174     DWORD   dwPortBytesXmitedUncompressed;
175     DWORD   dwPortBytesRcvedUncompressed;
176     DWORD   dwPortBytesXmitedCompressed;
177     DWORD   dwPortBytesRcvedCompressed;
178 } RAS_PORT_STATISTICS, *PRAS_PORT_STATISTICS;
179 typedef struct _RAS_SERVER_0 {
180     WORD TotalPorts;
181     WORD PortsInUse;
182     DWORD RasVersion;
183 } RAS_SERVER_0, *PRAS_SERVER_0;
184 
185 DWORD APIENTRY RasAdminServerGetInfo( const WCHAR*,  PRAS_SERVER_0 );
186 DWORD APIENTRY RasAdminGetUserAccountServer( const WCHAR*, const WCHAR*, LPWSTR );
187 DWORD APIENTRY RasAdminUserGetInfo( const WCHAR*, const WCHAR*, PRAS_USER_0 );
188 DWORD APIENTRY RasAdminUserSetInfo( const WCHAR*, const WCHAR*, const PRAS_USER_0 );
189 DWORD APIENTRY RasAdminPortEnum( const WCHAR*, PRAS_PORT_0*, WORD*);
190 DWORD APIENTRY RasAdminPortGetInfo( const WCHAR*, const WCHAR*, RAS_PORT_1*, RAS_PORT_STATISTICS*,  RAS_PARAMETERS** );
191 DWORD APIENTRY RasAdminPortClearStatistics( const WCHAR*, const WCHAR* );
192 DWORD APIENTRY RasAdminPortDisconnect( const WCHAR*, const WCHAR* );
193 DWORD APIENTRY RasAdminFreeBuffer(PVOID);
194 DWORD APIENTRY RasAdminGetErrorString( UINT,  WCHAR*,  DWORD );
195 BOOL APIENTRY RasAdminAcceptNewConnection( RAS_PORT_1*, RAS_PORT_STATISTICS*, RAS_PARAMETERS* );
196 VOID APIENTRY RasAdminConnectionHangupNotification ( RAS_PORT_1*, RAS_PORT_STATISTICS*, RAS_PARAMETERS* );
197 DWORD APIENTRY RasAdminGetIpAddressForUser ( WCHAR*, WCHAR*, IPADDR*, BOOL*);
198 VOID APIENTRY RasAdminReleaseIpAddress ( WCHAR*, WCHAR*,IPADDR*	);
199 DWORD APIENTRY RasAdminGetUserParms( WCHAR*, PRAS_USER_0 );
200 DWORD APIENTRY RasAdminSetUserParms( WCHAR*, DWORD, PRAS_USER_0 );
201 
202 #ifdef __cplusplus
203 }
204 #endif
205 
206 #endif /* _RASSAPI_H */
207