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