1 /***********************************************************************\
2 *                               rassapi.d                               *
3 *                                                                       *
4 *                       Windows API header module                       *
5 *                                                                       *
6 *                 Translated from MinGW Windows headers                 *
7 *                           by Stewart Gordon                           *
8 *                                                                       *
9 *                       Placed into public domain                       *
10 \***********************************************************************/
11 module win32.rassapi;
12 version(Windows):
13 
14 private import win32.lmcons, win32.windef;
15 
16 // FIXME: check types of constants
17 
18 const size_t
19 	RASSAPI_MAX_PHONENUMBER_SIZE = 128,
20 	RASSAPI_MAX_MEDIA_NAME	     =  16,
21 	RASSAPI_MAX_PORT_NAME	     =  16,
22 	RASSAPI_MAX_DEVICE_NAME      = 128,
23 	RASSAPI_MAX_DEVICETYPE_NAME  =  16,
24 	RASSAPI_MAX_PARAM_KEY_SIZE   =  32;
25 
26 const RASPRIV_NoCallback        = 0x01;
27 const RASPRIV_AdminSetCallback  = 0x02;
28 const RASPRIV_CallerSetCallback = 0x04;
29 const RASPRIV_DialinPrivilege   = 0x08;
30 const RASPRIV_CallbackType      = 0x07;
31 
32 enum {
33 	RAS_MODEM_OPERATIONAL = 1,
34 	RAS_MODEM_NOT_RESPONDING,
35 	RAS_MODEM_HARDWARE_FAILURE,
36 	RAS_MODEM_INCORRECT_RESPONSE,
37 	RAS_MODEM_UNKNOWN  // = 5
38 }
39 
40 enum {
41 	RAS_PORT_NON_OPERATIONAL = 1,
42 	RAS_PORT_DISCONNECTED,
43 	RAS_PORT_CALLING_BACK,
44 	RAS_PORT_LISTENING,
45 	RAS_PORT_AUTHENTICATING,
46 	RAS_PORT_AUTHENTICATED,
47 	RAS_PORT_INITIALIZING // = 7
48 }
49 
50 enum {
51 	MEDIA_UNKNOWN,
52 	MEDIA_SERIAL,
53 	MEDIA_RAS10_SERIAL,
54 	MEDIA_X25,
55 	MEDIA_ISDN
56 }
57 
58 const USER_AUTHENTICATED = 0x0001;
59 const MESSENGER_PRESENT  = 0x0002;
60 const PPP_CLIENT         = 0x0004;
61 const GATEWAY_ACTIVE     = 0x0008;
62 const REMOTE_LISTEN      = 0x0010;
63 const PORT_MULTILINKED   = 0x0020;
64 
65 const size_t
66 	RAS_IPADDRESSLEN  = 15,
67 	RAS_IPXADDRESSLEN = 22,
68 	RAS_ATADDRESSLEN  = 32;
69 
70 // FIXME: should these be grouped together?
71 enum {
72 	RASDOWNLEVEL     = 10,
73 	RASADMIN_35      = 35,
74 	RASADMIN_CURRENT = 40
75 }
76 
77 alias ULONG IPADDR;
78 
79 enum RAS_PARAMS_FORMAT {
80     ParamNumber = 0,
81     ParamString
82 }
83 
84 union RAS_PARAMS_VALUE {
85 	DWORD Number;
86 	struct _String {
87 		DWORD Length;
88 		PCHAR Data;
89 	}
90 	_String String;
91 }
92 
93 struct RAS_PARAMETERS {
94 	CHAR[RASSAPI_MAX_PARAM_KEY_SIZE] P_Key;
95 	RAS_PARAMS_FORMAT                P_Type;
96 	BYTE                             P_Attributes;
97 	RAS_PARAMS_VALUE                 P_Value;
98 }
99 
100 struct RAS_USER_0 {
101 	BYTE                                    bfPrivilege;
102 	WCHAR[RASSAPI_MAX_PHONENUMBER_SIZE + 1] szPhoneNumber;
103 }
104 alias RAS_USER_0* PRAS_USER_0;
105 
106 struct RAS_PORT_0 {
107 	WCHAR[RASSAPI_MAX_PORT_NAME]       wszPortName;
108 	WCHAR[RASSAPI_MAX_DEVICETYPE_NAME] wszDeviceType;
109 	WCHAR[RASSAPI_MAX_DEVICE_NAME]     wszDeviceName;
110 	WCHAR[RASSAPI_MAX_MEDIA_NAME]      wszMediaName;
111 	DWORD                              reserved;
112 	DWORD                              Flags;
113 	WCHAR[UNLEN + 1]                   wszUserName;
114 	WCHAR[NETBIOS_NAME_LEN]            wszComputer;
115 	DWORD                              dwStartSessionTime; // seconds from 1/1/1970
116 	WCHAR[DNLEN + 1]                   wszLogonDomain;
117 	BOOL                               fAdvancedServer;
118 }
119 alias RAS_PORT_0* PRAS_PORT_0;
120 
121 struct RAS_PPP_NBFCP_RESULT {
122 	DWORD dwError;
123 	DWORD dwNetBiosError;
124 	CHAR[NETBIOS_NAME_LEN + 1]  szName;
125 	WCHAR[NETBIOS_NAME_LEN + 1] wszWksta;
126 }
127 
128 struct RAS_PPP_IPCP_RESULT {
129 	DWORD dwError;
130 	WCHAR[RAS_IPADDRESSLEN + 1] wszAddress;
131 }
132 
133 struct RAS_PPP_IPXCP_RESULT {
134 	DWORD dwError;
135 	WCHAR[RAS_IPXADDRESSLEN + 1] wszAddress;
136 }
137 
138 struct RAS_PPP_ATCP_RESULT {
139 	DWORD dwError;
140 	WCHAR[RAS_ATADDRESSLEN + 1] wszAddress;
141 }
142 
143 struct RAS_PPP_PROJECTION_RESULT {
144 	RAS_PPP_NBFCP_RESULT nbf;
145 	RAS_PPP_IPCP_RESULT  ip;
146 	RAS_PPP_IPXCP_RESULT ipx;
147 	RAS_PPP_ATCP_RESULT  at;
148 }
149 
150 struct RAS_PORT_1 {
151 	RAS_PORT_0 rasport0;
152 	DWORD      LineCondition;
153 	DWORD      HardwareCondition;
154 	DWORD      LineSpeed;
155 	WORD       NumStatistics;
156 	WORD       NumMediaParms;
157 	DWORD      SizeMediaParms;
158 	RAS_PPP_PROJECTION_RESULT ProjResult;
159 }
160 alias RAS_PORT_1* PRAS_PORT_1;
161 
162 struct RAS_PORT_STATISTICS {
163 	DWORD dwBytesXmited;
164 	DWORD dwBytesRcved;
165 	DWORD dwFramesXmited;
166 	DWORD dwFramesRcved;
167 	DWORD dwCrcErr;
168 	DWORD dwTimeoutErr;
169 	DWORD dwAlignmentErr;
170 	DWORD dwHardwareOverrunErr;
171 	DWORD dwFramingErr;
172 	DWORD dwBufferOverrunErr;
173 	DWORD dwBytesXmitedUncompressed;
174 	DWORD dwBytesRcvedUncompressed;
175 	DWORD dwBytesXmitedCompressed;
176 	DWORD dwBytesRcvedCompressed;
177 	DWORD dwPortBytesXmited;
178 	DWORD dwPortBytesRcved;
179 	DWORD dwPortFramesXmited;
180 	DWORD dwPortFramesRcved;
181 	DWORD dwPortCrcErr;
182 	DWORD dwPortTimeoutErr;
183 	DWORD dwPortAlignmentErr;
184 	DWORD dwPortHardwareOverrunErr;
185 	DWORD dwPortFramingErr;
186 	DWORD dwPortBufferOverrunErr;
187 	DWORD dwPortBytesXmitedUncompressed;
188 	DWORD dwPortBytesRcvedUncompressed;
189 	DWORD dwPortBytesXmitedCompressed;
190 	DWORD dwPortBytesRcvedCompressed;
191 }
192 alias RAS_PORT_STATISTICS* PRAS_PORT_STATISTICS;
193 
194 struct RAS_SERVER_0 {
195 	WORD TotalPorts;
196 	WORD PortsInUse;
197 	DWORD RasVersion;
198 }
199 alias RAS_SERVER_0* PRAS_SERVER_0;
200 
201 extern (Windows) {
202 	DWORD RasAdminServerGetInfo(const(WCHAR)*, PRAS_SERVER_0);
203 	DWORD RasAdminGetUserAccountServer(const(WCHAR)*, const(WCHAR)*, LPWSTR);
204 	DWORD RasAdminUserGetInfo(const(WCHAR)*, const(WCHAR)*, PRAS_USER_0);
205 	DWORD RasAdminUserSetInfo(const(WCHAR)*, const(WCHAR)*, PRAS_USER_0);
206 	DWORD RasAdminPortEnum(WCHAR*, PRAS_PORT_0*, WORD*);
207 	DWORD RasAdminPortGetInfo(const(WCHAR)*, const(WCHAR)*, RAS_PORT_1*,
208 	 RAS_PORT_STATISTICS*, RAS_PARAMETERS**);
209 	DWORD RasAdminPortClearStatistics(const(WCHAR)*, const(WCHAR)*);
210 	DWORD RasAdminPortDisconnect(const(WCHAR)*, const(WCHAR)*);
211 	DWORD RasAdminFreeBuffer(PVOID);
212 	DWORD RasAdminGetErrorString(UINT, WCHAR*, DWORD);
213 	BOOL RasAdminAcceptNewConnection(RAS_PORT_1*, RAS_PORT_STATISTICS*,
214 	 RAS_PARAMETERS*);
215 	VOID RasAdminConnectionHangupNotification(RAS_PORT_1*,
216 	  RAS_PORT_STATISTICS*, RAS_PARAMETERS*);
217 	DWORD RasAdminGetIpAddressForUser (WCHAR*, WCHAR*, IPADDR*, BOOL*);
218 	VOID RasAdminReleaseIpAddress (WCHAR*, WCHAR*,IPADDR*);
219 	DWORD RasAdminGetUserParms(WCHAR*, PRAS_USER_0);
220 	DWORD RasAdminSetUserParms(WCHAR*, DWORD, PRAS_USER_0);
221 }