wine/misc/network.c
2000-04-06 20:21:16 +00:00

454 lines
14 KiB
C

/*
* USER Windows Network functions
*/
#include <ctype.h>
#include <string.h>
#include <sys/types.h>
#include <pwd.h>
#include <unistd.h>
#include "winbase.h"
#include "wine/winnet16.h"
#include "winnetwk.h"
#include "drive.h"
#include "debugtools.h"
#include "heap.h"
DEFAULT_DEBUG_CHANNEL(wnet)
/*
* Remote printing
*/
/**************************************************************************
* WNetOpenJob16 [USER.501]
*/
WORD WINAPI WNetOpenJob16( LPSTR szQueue, LPSTR szJobTitle, WORD nCopies, LPINT16 pfh )
{
FIXME( "(%s, %s, %d, %p): stub\n",
debugstr_a(szQueue), debugstr_a(szJobTitle), nCopies, pfh );
return WN16_NET_ERROR;
}
/**************************************************************************
* WNetCloseJob16 [USER.502]
*/
WORD WINAPI WNetCloseJob16( WORD fh, LPINT16 pidJob, LPSTR szQueue )
{
FIXME( "(%d, %p, %s): stub\n", fh, pidJob, debugstr_a(szQueue) );
return WN16_NET_ERROR;
}
/**************************************************************************
* WNetWriteJob16 [USER.524]
*/
WORD WINAPI WNetWriteJob16( HANDLE16 hJob, LPSTR lpData, LPINT16 lpcbData )
{
FIXME( "(%04x, %p, %p): stub\n", hJob, lpData, lpcbData );
return WN16_NET_ERROR;
}
/**************************************************************************
* WNetAbortJob16 [USER.503]
*/
WORD WINAPI WNetAbortJob16( LPSTR szQueue, WORD wJobId )
{
FIXME( "(%s, %d): stub\n", debugstr_a(szQueue), wJobId );
return WN16_NET_ERROR;
}
/**************************************************************************
* WNetHoldJob16 [USER.504]
*/
WORD WINAPI WNetHoldJob16( LPSTR szQueue, WORD wJobId )
{
FIXME( "(%s, %d): stub\n", debugstr_a(szQueue), wJobId );
return WN16_NET_ERROR;
}
/**************************************************************************
* WNetReleaseJob16 [USER.505]
*/
WORD WINAPI WNetReleaseJob16( LPSTR szQueue, WORD wJobId )
{
FIXME( "(%s, %d): stub\n", debugstr_a(szQueue), wJobId );
return WN16_NET_ERROR;
}
/**************************************************************************
* WNetCancelJob16 [USER.506]
*/
WORD WINAPI WNetCancelJob16( LPSTR szQueue, WORD wJobId )
{
FIXME( "(%s, %d): stub\n", debugstr_a(szQueue), wJobId );
return WN16_NET_ERROR;
}
/**************************************************************************
* WNetSetJobCopies16 [USER.507]
*/
WORD WINAPI WNetSetJobCopies16( LPSTR szQueue, WORD wJobId, WORD nCopies )
{
FIXME( "(%s, %d, %d): stub\n", debugstr_a(szQueue), wJobId, nCopies );
return WN16_NET_ERROR;
}
/**************************************************************************
* WNetWatchQueue16 [USER.508]
*/
WORD WINAPI WNetWatchQueue16( HWND16 hWnd, LPSTR szLocal, LPSTR szUser, WORD nQueue )
{
FIXME( "(%04x, %s, %s, %d): stub\n",
hWnd, debugstr_a(szLocal), debugstr_a(szUser), nQueue );
return WN16_NET_ERROR;
}
/**************************************************************************
* WNetUnwatchQueue16 [USER.509]
*/
WORD WINAPI WNetUnwatchQueue16( LPSTR szQueue )
{
FIXME( "(%s): stub\n", debugstr_a(szQueue) );
return WN16_NET_ERROR;
}
/**************************************************************************
* WNetLockQueueData16 [USER.510]
*/
WORD WINAPI WNetLockQueueData16( LPSTR szQueue, LPSTR szUser,
LPQUEUESTRUCT16 *lplpQueueStruct )
{
FIXME( "(%s, %s, %p): stub\n",
debugstr_a(szQueue), debugstr_a(szUser), lplpQueueStruct );
return WN16_NET_ERROR;
}
/**************************************************************************
* WNetUnlockQueueData16 [USER.511]
*/
WORD WINAPI WNetUnlockQueueData16( LPSTR szQueue )
{
FIXME( "(%s): stub\n", debugstr_a(szQueue) );
return WN16_NET_ERROR;
}
/*
* Connections
*/
/********************************************************************
* WNetAddConnection16 [USER.517] Directs a local device to net
*
* Redirects a local device (either a disk drive or printer port)
* to a shared device on a remote server.
*/
WORD WINAPI WNetAddConnection16( LPSTR lpNetPath, LPSTR lpPassWord,
LPSTR lpLocalName )
{
FIXME( "(%s, %p, %s): stub\n",
debugstr_a(lpNetPath), lpPassWord, debugstr_a(lpLocalName) );
return WN16_NET_ERROR;
}
/********************************************************************
* WNetCancelConnection16 [USER.518] undirects a local device
*/
WORD WINAPI WNetCancelConnection16( LPSTR lpName, BOOL16 bForce )
{
FIXME( "(%s, %04X): stub\n", debugstr_a(lpName), bForce);
return WN16_NOT_SUPPORTED;
}
/********************************************************************
* WNetGetConnection16 [USER.512] reverse-resolves a local device
*/
WORD WINAPI WNetGetConnection16( LPSTR lpLocalName,
LPSTR lpRemoteName, UINT16 *cbRemoteName )
{
const char *path;
TRACE( "local %s\n", lpLocalName );
if (lpLocalName[1] == ':')
{
int drive = toupper(lpLocalName[0]) - 'A';
switch(DRIVE_GetType(drive))
{
case TYPE_INVALID:
return WN16_BAD_LOCALNAME;
case TYPE_NETWORK:
path = DRIVE_GetLabel(drive);
if (strlen(path) + 1 > *cbRemoteName)
{
*cbRemoteName = strlen(path) + 1;
return WN16_MORE_DATA;
}
strcpy( lpRemoteName, path );
*cbRemoteName = strlen(lpRemoteName) + 1;
return WN16_SUCCESS;
case TYPE_FLOPPY:
case TYPE_HD:
case TYPE_CDROM:
TRACE("file is local\n");
return WN16_NOT_CONNECTED;
default:
return WN16_BAD_LOCALNAME;
}
}
return WN16_BAD_LOCALNAME;
}
/**************************************************************************
* WNetRestoreConnection16 [USER.523]
*/
WORD WINAPI WNetRestoreConnection16( HWND16 hwndOwner, LPSTR lpszDevice )
{
FIXME( "(%04x, %s): stub\n", hwndOwner, debugstr_a(lpszDevice) );
return WN16_NOT_SUPPORTED;
}
/*
* Capabilities
*/
/**************************************************************************
* WNetGetCaps16 [USER.513]
*/
WORD WINAPI WNetGetCaps16( WORD capability )
{
switch (capability)
{
case WNNC16_SPEC_VERSION:
return 0x30a; /* WfW 3.11 (and apparently other 3.1x) */
case WNNC16_NET_TYPE:
/* hi byte = network type,
lo byte = network vendor (Netware = 0x03) [15 types] */
return WNNC16_NET_MultiNet | WNNC16_SUBNET_WinWorkgroups;
case WNNC16_DRIVER_VERSION:
/* driver version of vendor */
return 0x100; /* WfW 3.11 */
case WNNC16_USER:
/* 1 = WNetGetUser is supported */
return 1;
case WNNC16_CONNECTION:
/* returns mask of the supported connection functions */
return WNNC16_CON_AddConnection | WNNC16_CON_CancelConnection
| WNNC16_CON_GetConnections /* | WNNC16_CON_AutoConnect */
| WNNC16_CON_BrowseDialog | WNNC16_CON_RestoreConnection;
case WNNC16_PRINTING:
/* returns mask of the supported printing functions */
return WNNC16_PRT_OpenJob | WNNC16_PRT_CloseJob | WNNC16_PRT_HoldJob
| WNNC16_PRT_ReleaseJob | WNNC16_PRT_CancelJob
| WNNC16_PRT_SetJobCopies | WNNC16_PRT_WatchQueue
| WNNC16_PRT_UnwatchQueue | WNNC16_PRT_LockQueueData
| WNNC16_PRT_UnlockQueueData | WNNC16_PRT_AbortJob
| WNNC16_PRT_WriteJob;
case WNNC16_DIALOG:
/* returns mask of the supported dialog functions */
return WNNC16_DLG_DeviceMode | WNNC16_DLG_BrowseDialog
| WNNC16_DLG_ConnectDialog | WNNC16_DLG_DisconnectDialog
| WNNC16_DLG_ViewQueueDialog | WNNC16_DLG_PropertyDialog
| WNNC16_DLG_ConnectionDialog
/* | WNNC16_DLG_PrinterConnectDialog
| WNNC16_DLG_SharesDialog | WNNC16_DLG_ShareAsDialog */;
case WNNC16_ADMIN:
/* returns mask of the supported administration functions */
/* not sure if long file names is a good idea */
return WNNC16_ADM_GetDirectoryType
/* | WNNC16_ADM_DirectoryNotify */ /*not yet supported*/
| WNNC16_ADM_LongNames /* | WNNC16_ADM_SetDefaultDrive */;
case WNNC16_ERROR:
/* returns mask of the supported error functions */
return WNNC16_ERR_GetError | WNNC16_ERR_GetErrorText;
case WNNC16_PRINTMGREXT:
/* returns the Print Manager version in major and
minor format if Print Manager functions are available */
return 0x30e; /* printman version of WfW 3.11 */
case 0xffff:
/* Win 3.11 returns HMODULE of network driver here
FIXME: what should we return ?
logonoff.exe needs it, msmail crashes with wrong value */
return 0;
default:
return 0;
}
}
/*
* Get User
*/
/**************************************************************************
* WNetGetUser16 [USER.516]
*/
WORD WINAPI WNetGetUser16( LPCSTR lpName, LPSTR szUser, LPINT16 nBufferSize )
{
FIXME( "(%p, %p, %p): stub\n", lpName, szUser, nBufferSize );
return WN16_NOT_SUPPORTED;
}
/*
* Browsing
*/
/**************************************************************************
* WNetDeviceMode16 [USER.514]
*/
WORD WINAPI WNetDeviceMode16( HWND16 hWndOwner )
{
FIXME( "(%04x): stub\n", hWndOwner );
return WN16_NOT_SUPPORTED;
}
/**************************************************************************
* WNetBrowseDialog16 [USER.515]
*/
WORD WINAPI WNetBrowseDialog16( HWND16 hParent, WORD nType, LPSTR szPath )
{
FIXME( "(%04x, %x, %s): stub\n", hParent, nType, szPath );
return WN16_NOT_SUPPORTED;
}
/********************************************************************
* WNetConnectDialog [USER.525]
*/
WORD WINAPI WNetConnectDialog( HWND16 hWndParent, WORD iType )
{
FIXME( "(%04x, %x): stub\n", hWndParent, iType );
return WN16_SUCCESS;
}
/**************************************************************************
* WNetDisconnectDialog16 [USER.526]
*/
WORD WINAPI WNetDisconnectDialog16( HWND16 hwndOwner, WORD iType )
{
FIXME( "(%04x, %x): stub\n", hwndOwner, iType );
return WN16_NOT_SUPPORTED;
}
/**************************************************************************
* WNetConnectionDialog16 [USER.527]
*/
WORD WINAPI WNetConnectionDialog16( HWND16 hWndParent, WORD iType )
{
FIXME( "(%04x, %x): stub\n", hWndParent, iType );
return WN16_SUCCESS;
}
/**************************************************************************
* WNetViewQueueDialog16 [USER.528]
*/
WORD WINAPI WNetViewQueueDialog16( HWND16 hwndOwner, LPSTR lpszQueue )
{
FIXME(" (%04x, %s): stub\n", hwndOwner, debugstr_a(lpszQueue) );
return WN16_NOT_SUPPORTED;
}
/**************************************************************************
* WNetPropertyDialog16 [USER.529]
*/
WORD WINAPI WNetPropertyDialog16( HWND16 hwndParent, WORD iButton,
WORD nPropSel, LPSTR lpszName, WORD nType )
{
FIXME( "(%04x, %x, %x, %s, %x ): stub\n",
hwndParent, iButton, nPropSel, debugstr_a(lpszName), nType );
return WN16_NOT_SUPPORTED;
}
/**************************************************************************
* WNetGetPropertyText16 [USER.532]
*/
WORD WINAPI WNetGetPropertyText16( WORD iButton, WORD nPropSel, LPSTR lpszName,
LPSTR lpszButtonName, WORD cbButtonName, WORD nType )
{
FIXME( "(%04x, %04x, %s, %s, %04x): stub\n",
iButton, nPropSel, debugstr_a(lpszName), debugstr_a(lpszButtonName), nType);
return WN16_NOT_SUPPORTED;
}
/*
* Admin
*/
/*********************************************************************
* WNetGetDirectoryType16 [USER.530] Decides whether resource is local
*
* RETURNS
* on success, puts one of the following in *lpType:
* - WNDT_NETWORK on a network
* - WNDT_LOCAL local
*/
WORD WINAPI WNetGetDirectoryType16( LPSTR lpName, LPINT16 lpType )
{
UINT type = GetDriveTypeA(lpName);
if ( type == DRIVE_DOESNOTEXIST )
type = GetDriveTypeA(NULL);
*lpType = (type == DRIVE_REMOTE)? WNDT_NETWORK : WNDT_NORMAL;
TRACE( "%s is %s\n", debugstr_a(lpName),
(*lpType == WNDT_NETWORK)? "WNDT_NETWORK" : "WNDT_NORMAL" );
return WN16_SUCCESS;
}
/**************************************************************************
* WNetDirectoryNotify16 [USER.531]
*/
WORD WINAPI WNetDirectoryNotify16( HWND16 hwndOwner, LPSTR lpDir, WORD wOper )
{
FIXME( "(%04x, %s, %s): stub\n", hwndOwner, debugstr_a(lpDir),
(wOper == WNDN_MKDIR)? "WNDN_MKDIR" :
(wOper == WNDN_MVDIR)? "WNDN_MVDIR" :
(wOper == WNDN_RMDIR)? "WNDN_RMDIR" : "unknown" );
return WN16_NOT_SUPPORTED;
}
/*
* Error handling
*/
/**************************************************************************
* WNetGetError16 [USER.519]
*/
WORD WINAPI WNetGetError16( LPINT16 nError )
{
FIXME( "(%p): stub\n", nError );
return WN16_NOT_SUPPORTED;
}
/**************************************************************************
* WNetGetErrorText16 [USER.520]
*/
WORD WINAPI WNetGetErrorText16( WORD nError, LPSTR lpBuffer, LPINT16 nBufferSize )
{
FIXME( "(%x, %p, %p): stub\n", nError, lpBuffer, nBufferSize );
return WN16_NET_ERROR;
}
/**************************************************************************
* WNetErrorText16 [USER.499]
*/
WORD WINAPI WNetErrorText16( WORD nError, LPSTR lpszText, WORD cbText )
{
FIXME("(%x, %p, %x): stub\n", nError, lpszText, cbText );
return FALSE;
}