windows-nt/Source/XPSP1/NT/inetsrv/iis/svcs/ftp/server51/proc.hxx
2020-09-26 16:20:57 +08:00

370 lines
5.2 KiB
C++

/**********************************************************************/
/** Microsoft Windows NT **/
/** Copyright(c) Microsoft Corp., 1993 **/
/**********************************************************************/
/*
proc.hxx
This file contains the global procedure definitions for the
FTPD Service.
FILE HISTORY:
KeithMo 07-Mar-1993 Created.
MuraliK April-1995 Modified/deleted functions for New FTP service
*/
#ifndef _PROC_HXX_
#define _PROC_HXX_
//
// Global variable initialization & termination function.
//
APIERR
InitializeGlobals(
VOID
);
VOID
TerminateGlobals(
VOID
);
VOID
ClearStatistics(
VOID
);
#define LockGlobals() EnterCriticalSection( &g_GlobalLock );
#define UnlockGlobals() LeaveCriticalSection( &g_GlobalLock );
//
// Socket utilities.
//
APIERR
InitializeSockets(
VOID
);
VOID
TerminateSockets(
VOID
);
SOCKERR
CreateDataSocket(
SOCKET * psock,
ULONG addrLocal,
PORT portLocal,
ULONG addrRemote,
PORT portRemote
);
SOCKERR
CreateFtpdSocket(
SOCKET * psock,
ULONG addrLocal,
PORT portLocal,
FTP_SERVER_INSTANCE *pInstance
);
SOCKERR
CloseSocket(
SOCKET sock
);
SOCKERR
ResetSocket(
SOCKET sock
);
SOCKERR
AcceptSocket(
SOCKET sockListen,
SOCKET * psockNew,
LPSOCKADDR_IN paddr,
BOOL fEnforceTimeout,
FTP_SERVER_INSTANCE *pInstance
);
DWORD
ClientThread(
LPVOID Param
);
SOCKERR
SockSend(
LPUSER_DATA pUserData,
SOCKET sock,
LPVOID pBuffer,
DWORD cbBuffer
);
SOCKERR
SockRecv(
LPUSER_DATA pUserData,
SOCKET sock,
LPVOID pBuffer,
DWORD cbBuffer,
LPDWORD pbReceived
);
SOCKERR
__cdecl
SockPrintf2(
LPUSER_DATA pUserData,
SOCKET sock,
LPCSTR pszFormat,
...
);
SOCKERR
__cdecl
ReplyToUser(
IN LPUSER_DATA pUserData,
IN UINT ReplyCode,
IN LPCSTR pszFormat,
...
);
SOCKERR
__cdecl
SockReplyFirst2(
LPUSER_DATA pUserData,
SOCKET sock,
UINT ReplyCode,
LPCSTR pszFormat,
...
);
//
// User database functions.
//
VOID
UserDereference(
LPUSER_DATA pUserData
);
BOOL
DisconnectUser(
DWORD UserId,
FTP_SERVER_INSTANCE *pInstance
);
VOID
DisconnectUsersWithNoAccess(
VOID
);
BOOL
EnumerateUsers(
PCHAR pBuffer,
PDWORD pcbBuffer,
PDWORD nRead,
FTP_SERVER_INSTANCE *pInstance
);
//
// IPC functions.
//
APIERR
InitializeIPC(
VOID
);
VOID
TerminateIPC(
VOID
);
//
// Service control functions.
//
VOID
ServiceEntry(
DWORD cArgs,
LPWSTR pArgs[]
);
//
// Virtual file i/o functions.
//
APIERR
VirtualCreateFile(
LPUSER_DATA pUserData,
LPHANDLE phFile,
LPSTR pszFile,
BOOL fAppend
);
APIERR
VirtualCreateUniqueFile(
LPUSER_DATA pUserData,
LPHANDLE phFile,
LPSTR pszTmpFile
);
FILE *
Virtual_fopen(
LPUSER_DATA pUserData,
LPSTR pszFile,
LPSTR pszMode
);
APIERR
VirtualDeleteFile(
LPUSER_DATA pUserData,
LPSTR pszFile
);
APIERR
VirtualRenameFile(
LPUSER_DATA pUserData,
LPSTR pszExisting,
LPSTR pszNew
);
APIERR
VirtualChDir(
LPUSER_DATA pUserData,
LPSTR pszDir
);
APIERR
VirtualRmDir(
LPUSER_DATA pUserData,
LPSTR pszDir
);
APIERR
VirtualMkDir(
LPUSER_DATA pUserData,
LPSTR pszDir
);
//
// Command parser functions.
//
VOID
ParseCommand(
LPUSER_DATA pUserData,
LPSTR pszCommandText
);
//
// General utility functions.
//
LPSTR
TransferType(
XFER_TYPE type
);
LPSTR
TransferMode(
XFER_MODE mode
);
LPSTR
DisplayBool(
BOOL fFlag
);
BOOL
IsDecimalNumber(
LPSTR psz
);
LPSTR
AllocErrorText(
APIERR err
);
VOID
FreeErrorText(
LPSTR pszText
);
DWORD
OpenPathForAccess(
LPHANDLE phFile,
LPSTR pszPath,
ULONG DesiredAccess,
ULONG ShareAccess,
HANDLE hImpersonation
);
LPSTR
FlipSlashes(
LPSTR pszPath
);
PSTR
P_strncpy(
PSTR dst,
PCSTR src,
DWORD cnt);
//
// LS simulator functions.
//
APIERR
SimulateLs(
IN LPUSER_DATA pUserData,
IN LPSTR pszArg,
IN BOOL fUseDataSocket, // TRUE ==>DataSocket, FALSE==>ControlSocket
IN BOOL fDefaultLong = FALSE // TRUE ==> generate long listing
);
APIERR
SpecialLs(
IN LPUSER_DATA pUserData,
IN LPSTR pszSearchPath,
IN BOOL fUseDataSocket // TRUE ==>DataSocket, FALSE==>ControlSocket
);
//
// Some handy macros.
//
#define IS_PATH_SEP(x) (((x) == '\\') || ((x) == '/'))
VOID
VirtualpSanitizePath(
CHAR * pszPath
);
DWORD
FtpFormatResponseMessage( IN UINT uiReplyCode,
IN LPCTSTR pszReplyMsg,
OUT LPTSTR pszReplyBuffer,
IN DWORD cchReplyBuffer);
#endif // _PROC_HXX_