Added DECL_GLOBAL_CONSTRUCTOR macro.
[wine.git] / misc / network.c
blob18f115079dc519c4bc962bc2ded82929fe3c6ca0
1 /*
2 * USER Windows Network functions
3 */
5 #include <ctype.h>
6 #include <string.h>
7 #include <sys/types.h>
8 #include <pwd.h>
9 #include <unistd.h>
11 #include "winbase.h"
12 #include "wine/winnet16.h"
13 #include "winnetwk.h"
14 #include "drive.h"
15 #include "debugtools.h"
16 #include "heap.h"
18 DEFAULT_DEBUG_CHANNEL(wnet)
21 * Remote printing
24 /**************************************************************************
25 * WNetOpenJob16 [USER.501]
27 WORD WINAPI WNetOpenJob16( LPSTR szQueue, LPSTR szJobTitle, WORD nCopies, LPINT16 pfh )
29 FIXME( "(%s, %s, %d, %p): stub\n",
30 debugstr_a(szQueue), debugstr_a(szJobTitle), nCopies, pfh );
31 return WN16_NET_ERROR;
34 /**************************************************************************
35 * WNetCloseJob16 [USER.502]
37 WORD WINAPI WNetCloseJob16( WORD fh, LPINT16 pidJob, LPSTR szQueue )
39 FIXME( "(%d, %p, %s): stub\n", fh, pidJob, debugstr_a(szQueue) );
40 return WN16_NET_ERROR;
43 /**************************************************************************
44 * WNetWriteJob16 [USER.524]
46 WORD WINAPI WNetWriteJob16( HANDLE16 hJob, LPSTR lpData, LPINT16 lpcbData )
48 FIXME( "(%04x, %p, %p): stub\n", hJob, lpData, lpcbData );
49 return WN16_NET_ERROR;
52 /**************************************************************************
53 * WNetAbortJob16 [USER.503]
55 WORD WINAPI WNetAbortJob16( LPSTR szQueue, WORD wJobId )
57 FIXME( "(%s, %d): stub\n", debugstr_a(szQueue), wJobId );
58 return WN16_NET_ERROR;
61 /**************************************************************************
62 * WNetHoldJob16 [USER.504]
64 WORD WINAPI WNetHoldJob16( LPSTR szQueue, WORD wJobId )
66 FIXME( "(%s, %d): stub\n", debugstr_a(szQueue), wJobId );
67 return WN16_NET_ERROR;
70 /**************************************************************************
71 * WNetReleaseJob16 [USER.505]
73 WORD WINAPI WNetReleaseJob16( LPSTR szQueue, WORD wJobId )
75 FIXME( "(%s, %d): stub\n", debugstr_a(szQueue), wJobId );
76 return WN16_NET_ERROR;
79 /**************************************************************************
80 * WNetCancelJob16 [USER.506]
82 WORD WINAPI WNetCancelJob16( LPSTR szQueue, WORD wJobId )
84 FIXME( "(%s, %d): stub\n", debugstr_a(szQueue), wJobId );
85 return WN16_NET_ERROR;
88 /**************************************************************************
89 * WNetSetJobCopies16 [USER.507]
91 WORD WINAPI WNetSetJobCopies16( LPSTR szQueue, WORD wJobId, WORD nCopies )
93 FIXME( "(%s, %d, %d): stub\n", debugstr_a(szQueue), wJobId, nCopies );
94 return WN16_NET_ERROR;
97 /**************************************************************************
98 * WNetWatchQueue16 [USER.508]
100 WORD WINAPI WNetWatchQueue16( HWND16 hWnd, LPSTR szLocal, LPSTR szUser, WORD nQueue )
102 FIXME( "(%04x, %s, %s, %d): stub\n",
103 hWnd, debugstr_a(szLocal), debugstr_a(szUser), nQueue );
104 return WN16_NET_ERROR;
107 /**************************************************************************
108 * WNetUnwatchQueue16 [USER.509]
110 WORD WINAPI WNetUnwatchQueue16( LPSTR szQueue )
112 FIXME( "(%s): stub\n", debugstr_a(szQueue) );
113 return WN16_NET_ERROR;
116 /**************************************************************************
117 * WNetLockQueueData16 [USER.510]
119 WORD WINAPI WNetLockQueueData16( LPSTR szQueue, LPSTR szUser,
120 LPQUEUESTRUCT16 *lplpQueueStruct )
122 FIXME( "(%s, %s, %p): stub\n",
123 debugstr_a(szQueue), debugstr_a(szUser), lplpQueueStruct );
124 return WN16_NET_ERROR;
127 /**************************************************************************
128 * WNetUnlockQueueData16 [USER.511]
130 WORD WINAPI WNetUnlockQueueData16( LPSTR szQueue )
132 FIXME( "(%s): stub\n", debugstr_a(szQueue) );
133 return WN16_NET_ERROR;
138 * Connections
141 /********************************************************************
142 * WNetAddConnection16 [USER.517] Directs a local device to net
144 * Redirects a local device (either a disk drive or printer port)
145 * to a shared device on a remote server.
147 WORD WINAPI WNetAddConnection16( LPSTR lpNetPath, LPSTR lpPassWord,
148 LPSTR lpLocalName )
150 FIXME( "(%s, %p, %s): stub\n",
151 debugstr_a(lpNetPath), lpPassWord, debugstr_a(lpLocalName) );
152 return WN16_NET_ERROR;
155 /********************************************************************
156 * WNetCancelConnection16 [USER.518] undirects a local device
158 WORD WINAPI WNetCancelConnection16( LPSTR lpName, BOOL16 bForce )
160 FIXME( "(%s, %04X): stub\n", debugstr_a(lpName), bForce);
161 return WN16_NOT_SUPPORTED;
164 /********************************************************************
165 * WNetGetConnection16 [USER.512] reverse-resolves a local device
167 WORD WINAPI WNetGetConnection16( LPSTR lpLocalName,
168 LPSTR lpRemoteName, UINT16 *cbRemoteName )
170 const char *path;
172 TRACE( "local %s\n", lpLocalName );
173 if (lpLocalName[1] == ':')
175 int drive = toupper(lpLocalName[0]) - 'A';
176 switch(DRIVE_GetType(drive))
178 case TYPE_INVALID:
179 return WN16_BAD_LOCALNAME;
180 case TYPE_NETWORK:
181 path = DRIVE_GetLabel(drive);
182 if (strlen(path) + 1 > *cbRemoteName)
184 *cbRemoteName = strlen(path) + 1;
185 return WN16_MORE_DATA;
187 strcpy( lpRemoteName, path );
188 *cbRemoteName = strlen(lpRemoteName) + 1;
189 return WN16_SUCCESS;
190 case TYPE_FLOPPY:
191 case TYPE_HD:
192 case TYPE_CDROM:
193 TRACE("file is local\n");
194 return WN16_NOT_CONNECTED;
195 default:
196 return WN16_BAD_LOCALNAME;
199 return WN16_BAD_LOCALNAME;
202 /**************************************************************************
203 * WNetRestoreConnection16 [USER.523]
205 WORD WINAPI WNetRestoreConnection16( HWND16 hwndOwner, LPSTR lpszDevice )
207 FIXME( "(%04x, %s): stub\n", hwndOwner, debugstr_a(lpszDevice) );
208 return WN16_NOT_SUPPORTED;
213 * Capabilities
216 /**************************************************************************
217 * WNetGetCaps16 [USER.513]
219 WORD WINAPI WNetGetCaps16( WORD capability )
221 switch (capability)
223 case WNNC16_SPEC_VERSION:
224 return 0x30a; /* WfW 3.11 (and apparently other 3.1x) */
226 case WNNC16_NET_TYPE:
227 /* hi byte = network type,
228 lo byte = network vendor (Netware = 0x03) [15 types] */
229 return WNNC16_NET_MultiNet | WNNC16_SUBNET_WinWorkgroups;
231 case WNNC16_DRIVER_VERSION:
232 /* driver version of vendor */
233 return 0x100; /* WfW 3.11 */
235 case WNNC16_USER:
236 /* 1 = WNetGetUser is supported */
237 return 1;
239 case WNNC16_CONNECTION:
240 /* returns mask of the supported connection functions */
241 return WNNC16_CON_AddConnection | WNNC16_CON_CancelConnection
242 | WNNC16_CON_GetConnections /* | WNNC16_CON_AutoConnect */
243 | WNNC16_CON_BrowseDialog | WNNC16_CON_RestoreConnection;
245 case WNNC16_PRINTING:
246 /* returns mask of the supported printing functions */
247 return WNNC16_PRT_OpenJob | WNNC16_PRT_CloseJob | WNNC16_PRT_HoldJob
248 | WNNC16_PRT_ReleaseJob | WNNC16_PRT_CancelJob
249 | WNNC16_PRT_SetJobCopies | WNNC16_PRT_WatchQueue
250 | WNNC16_PRT_UnwatchQueue | WNNC16_PRT_LockQueueData
251 | WNNC16_PRT_UnlockQueueData | WNNC16_PRT_AbortJob
252 | WNNC16_PRT_WriteJob;
254 case WNNC16_DIALOG:
255 /* returns mask of the supported dialog functions */
256 return WNNC16_DLG_DeviceMode | WNNC16_DLG_BrowseDialog
257 | WNNC16_DLG_ConnectDialog | WNNC16_DLG_DisconnectDialog
258 | WNNC16_DLG_ViewQueueDialog | WNNC16_DLG_PropertyDialog
259 | WNNC16_DLG_ConnectionDialog
260 /* | WNNC16_DLG_PrinterConnectDialog
261 | WNNC16_DLG_SharesDialog | WNNC16_DLG_ShareAsDialog */;
263 case WNNC16_ADMIN:
264 /* returns mask of the supported administration functions */
265 /* not sure if long file names is a good idea */
266 return WNNC16_ADM_GetDirectoryType
267 /* | WNNC16_ADM_DirectoryNotify */ /*not yet supported*/
268 | WNNC16_ADM_LongNames /* | WNNC16_ADM_SetDefaultDrive */;
270 case WNNC16_ERROR:
271 /* returns mask of the supported error functions */
272 return WNNC16_ERR_GetError | WNNC16_ERR_GetErrorText;
274 case WNNC16_PRINTMGREXT:
275 /* returns the Print Manager version in major and
276 minor format if Print Manager functions are available */
277 return 0x30e; /* printman version of WfW 3.11 */
279 case 0xffff:
280 /* Win 3.11 returns HMODULE of network driver here
281 FIXME: what should we return ?
282 logonoff.exe needs it, msmail crashes with wrong value */
283 return 0;
285 default:
286 return 0;
292 * Get User
295 /**************************************************************************
296 * WNetGetUser16 [USER.516]
298 WORD WINAPI WNetGetUser16( LPCSTR lpName, LPSTR szUser, LPINT16 nBufferSize )
300 FIXME( "(%p, %p, %p): stub\n", lpName, szUser, nBufferSize );
301 return WN16_NOT_SUPPORTED;
306 * Browsing
309 /**************************************************************************
310 * WNetDeviceMode16 [USER.514]
312 WORD WINAPI WNetDeviceMode16( HWND16 hWndOwner )
314 FIXME( "(%04x): stub\n", hWndOwner );
315 return WN16_NOT_SUPPORTED;
318 /**************************************************************************
319 * WNetBrowseDialog16 [USER.515]
321 WORD WINAPI WNetBrowseDialog16( HWND16 hParent, WORD nType, LPSTR szPath )
323 FIXME( "(%04x, %x, %s): stub\n", hParent, nType, szPath );
324 return WN16_NOT_SUPPORTED;
327 /********************************************************************
328 * WNetConnectDialog [USER.525]
330 WORD WINAPI WNetConnectDialog( HWND16 hWndParent, WORD iType )
332 FIXME( "(%04x, %x): stub\n", hWndParent, iType );
333 return WN16_SUCCESS;
336 /**************************************************************************
337 * WNetDisconnectDialog16 [USER.526]
339 WORD WINAPI WNetDisconnectDialog16( HWND16 hwndOwner, WORD iType )
341 FIXME( "(%04x, %x): stub\n", hwndOwner, iType );
342 return WN16_NOT_SUPPORTED;
345 /**************************************************************************
346 * WNetConnectionDialog16 [USER.527]
348 WORD WINAPI WNetConnectionDialog16( HWND16 hWndParent, WORD iType )
350 FIXME( "(%04x, %x): stub\n", hWndParent, iType );
351 return WN16_SUCCESS;
354 /**************************************************************************
355 * WNetViewQueueDialog16 [USER.528]
357 WORD WINAPI WNetViewQueueDialog16( HWND16 hwndOwner, LPSTR lpszQueue )
359 FIXME(" (%04x, %s): stub\n", hwndOwner, debugstr_a(lpszQueue) );
360 return WN16_NOT_SUPPORTED;
363 /**************************************************************************
364 * WNetPropertyDialog16 [USER.529]
366 WORD WINAPI WNetPropertyDialog16( HWND16 hwndParent, WORD iButton,
367 WORD nPropSel, LPSTR lpszName, WORD nType )
369 FIXME( "(%04x, %x, %x, %s, %x ): stub\n",
370 hwndParent, iButton, nPropSel, debugstr_a(lpszName), nType );
371 return WN16_NOT_SUPPORTED;
374 /**************************************************************************
375 * WNetGetPropertyText16 [USER.532]
377 WORD WINAPI WNetGetPropertyText16( WORD iButton, WORD nPropSel, LPSTR lpszName,
378 LPSTR lpszButtonName, WORD cbButtonName, WORD nType )
380 FIXME( "(%04x, %04x, %s, %s, %04x): stub\n",
381 iButton, nPropSel, debugstr_a(lpszName), debugstr_a(lpszButtonName), nType);
382 return WN16_NOT_SUPPORTED;
387 * Admin
390 /*********************************************************************
391 * WNetGetDirectoryType16 [USER.530] Decides whether resource is local
393 * RETURNS
394 * on success, puts one of the following in *lpType:
395 * - WNDT_NETWORK on a network
396 * - WNDT_LOCAL local
398 WORD WINAPI WNetGetDirectoryType16( LPSTR lpName, LPINT16 lpType )
400 UINT type = GetDriveTypeA(lpName);
401 if ( type == DRIVE_DOESNOTEXIST )
402 type = GetDriveTypeA(NULL);
404 *lpType = (type == DRIVE_REMOTE)? WNDT_NETWORK : WNDT_NORMAL;
406 TRACE( "%s is %s\n", debugstr_a(lpName),
407 (*lpType == WNDT_NETWORK)? "WNDT_NETWORK" : "WNDT_NORMAL" );
408 return WN16_SUCCESS;
411 /**************************************************************************
412 * WNetDirectoryNotify16 [USER.531]
414 WORD WINAPI WNetDirectoryNotify16( HWND16 hwndOwner, LPSTR lpDir, WORD wOper )
416 FIXME( "(%04x, %s, %s): stub\n", hwndOwner, debugstr_a(lpDir),
417 (wOper == WNDN_MKDIR)? "WNDN_MKDIR" :
418 (wOper == WNDN_MVDIR)? "WNDN_MVDIR" :
419 (wOper == WNDN_RMDIR)? "WNDN_RMDIR" : "unknown" );
420 return WN16_NOT_SUPPORTED;
425 * Error handling
428 /**************************************************************************
429 * WNetGetError16 [USER.519]
431 WORD WINAPI WNetGetError16( LPINT16 nError )
433 FIXME( "(%p): stub\n", nError );
434 return WN16_NOT_SUPPORTED;
437 /**************************************************************************
438 * WNetGetErrorText16 [USER.520]
440 WORD WINAPI WNetGetErrorText16( WORD nError, LPSTR lpBuffer, LPINT16 nBufferSize )
442 FIXME( "(%x, %p, %p): stub\n", nError, lpBuffer, nBufferSize );
443 return WN16_NET_ERROR;
446 /**************************************************************************
447 * WNetErrorText16 [USER.499]
449 WORD WINAPI WNetErrorText16( WORD nError, LPSTR lpszText, WORD cbText )
451 FIXME("(%x, %p, %x): stub\n", nError, lpszText, cbText );
452 return FALSE;