/*++

Copyright (c) 1994  Microsoft Corporation

Module Name:

    inetp.h

Abstract:

    Contains the Internet Gateway Service private functions proto type
    definitions.

Author:

    Madan Appiah  (madana)  11-Nov-1994

Environment:

    User Mode - Win32 - MIDL

Revision History:

--*/

#ifndef _INETP_
#define _INETP_

#if defined(__cplusplus)
extern "C" {
#endif

//
// manifests
//

//
// flags for close functions
//

#define CF_EXPEDITED_CLOSE  0x00000001

//
// define used to expire entries
//

#define ONE_HOUR_DELTA  (60 * 60 * (LONGLONG)10000000)

//
// define signature for LockRequestInfo structure
//
#define LOCK_REQUEST_SIGNATURE  0xAA55AA55

//
// types
//

typedef enum {
    TypeGenericHandle = 'HneG',
    TypeInternetHandle = 'tenI',
    TypeFtpConnectHandle = 'noCF',
    TypeFtpFindHandle = 'dnFF',
    TypeFtpFindHandleHtml = 'HnFF',
    TypeFtpFileHandle = 'liFF',
    TypeFtpFileHandleHtml = 'HlFF',
    TypeGopherConnectHandle = 'noCG',
    TypeGopherFindHandle = 'dnFG',
    TypeGopherFindHandleHtml = 'HnFG',
    TypeGopherFileHandle = 'liFG',
    TypeGopherFileHandleHtml = 'HlFG',
    TypeHttpConnectHandle = 'noCH',
    TypeHttpRequestHandle = 'qeRH',
    TypeFileRequestHandle = 'flRH',
    TypeWildHandle = 'dliW'
} HINTERNET_HANDLE_TYPE, *LPHINTERNET_HANDLE_TYPE;

typedef enum {
    HTML_STATE_INVALID,
    HTML_STATE_START,
    HTML_STATE_HEADER,
    HTML_STATE_WELCOME,
    HTML_STATE_DIR_HEADER,
    HTML_STATE_BODY,
    HTML_STATE_DIR_FOOTER,
    HTML_STATE_FOOTER,
#ifdef EXTENDED_ERROR_HTML
    HTML_STATE_END,
    HTML_STATE_ERROR_BODY
#else
    HTML_STATE_END
#endif
} HTML_STATE, *LPHTML_STATE;

typedef enum {
    READ_BUFFER_SIZE_INDEX,
    WRITE_BUFFER_SIZE_INDEX
} BUFFER_SIZE_INDEX;

typedef struct {

    DWORD   dwSignature;
    DWORD   dwSize;
    DWORD   dwCount;
    BOOL    fNoCacheLookup;
    BOOL    fNoDelete;
    HANDLE  hFile;
    LPSTR   UrlName;
    LPSTR   FileName;
    char    rgBuff[1];
}
LOCK_REQUEST_INFO, *LPLOCK_REQUEST_INFO;

//
// typedef virtual close function.
//

typedef BOOL ( *CLOSE_HANDLE_FUNC ) ( HINTERNET );
typedef BOOL ( *CONNECT_CLOSE_HANDLE_FUNC ) ( HINTERNET, DWORD );

//
// prototypes
//

BOOL
_InternetCloseHandle(
    IN HINTERNET hInternet
    );

DWORD
_InternetCloseHandleNoContext(
    IN HINTERNET hInternet
    );

//
// remote/RPC/object functions
//

DWORD
RIsHandleLocal(
    HINTERNET Handle,
    BOOL * IsLocalHandle,
    BOOL * IsAsyncHandle,
    HINTERNET_HANDLE_TYPE ExpectedHandleType
    );

DWORD
RGetHandleType(
    HINTERNET Handle,
    LPHINTERNET_HANDLE_TYPE HandleType
    );

DWORD
RSetHtmlHandleType(
    HINTERNET Handle
    );

DWORD
RSetHtmlState(
    HINTERNET Handle,
    HTML_STATE State
    );

DWORD
RGetHtmlState(
    HINTERNET Handle,
    LPHTML_STATE lpState
    );

DWORD
RSetUrl(
    HINTERNET Handle,
    LPSTR lpszUrl
    );

DWORD
RGetUrl(
    HINTERNET Handle,
    LPSTR* lpszUrl
    );

DWORD
RSetDirEntry(
    HINTERNET Handle,
    LPSTR lpszDirEntry
    );

DWORD
RGetDirEntry(
    HINTERNET Handle,
    LPSTR* lpszDirEntry
    );

DWORD
RSetParentHandle(
    HINTERNET hChild,
    HINTERNET hParent,
    BOOL DeleteWithChild
    );

DWORD
RGetParentHandle(
    HINTERNET hChild,
    LPHINTERNET lphParent
    );

DWORD
RGetContext(
    HINTERNET hInternet,
    DWORD_PTR *lpdwContext
    );

DWORD
RSetContext(
    HINTERNET hInternet,
    DWORD_PTR dwContext
    );

DWORD
RGetTimeout(
    HINTERNET hInternet,
    DWORD dwTimeoutOption,
    LPDWORD lpdwTimeoutValue
    );

DWORD
RSetTimeout(
    HINTERNET hInternet,
    DWORD dwTimeoutOption,
    DWORD dwTimeoutValue
    );

DWORD
RGetBufferSize(
    HINTERNET hInternet,
    DWORD dwBufferSizeOption,
    LPDWORD lpdwBufferSize
    );

DWORD
RSetBufferSize(
    HINTERNET hInternet,
    DWORD dwBufferSizeOption,
    DWORD dwBufferSize
    );

DWORD
RGetStatusCallback(
    IN HINTERNET Handle,
    OUT LPINTERNET_STATUS_CALLBACK lpStatusCallback
    );

DWORD
RExchangeStatusCallback(
    IN HINTERNET Handle,
    IN OUT LPINTERNET_STATUS_CALLBACK lpStatusCallback,
    IN BOOL fType
    );

DWORD
RAddAsyncRequest(
    IN HINTERNET Handle,
    BOOL fNoCallbackOK
    );

DWORD
RRemoveAsyncRequest(
    IN HINTERNET Handle
    );

DWORD
RMakeInternetConnectObjectHandle(
    HINTERNET ParentHandle,
    HINTERNET *ChildHandle,
    CONNECT_CLOSE_HANDLE_FUNC wCloseFunc,
    LPSTR lpszServerName,
    INTERNET_PORT nServerPort,
    LPSTR lpszUserName,
    LPSTR lpszPassword,
    DWORD ServiceType,
    DWORD dwFlags,
    DWORD_PTR dwContext
    );

HINTERNET
FindExistingConnectObject(
    IN HINTERNET hInternet,
    IN LPSTR lpHostName,
    IN INTERNET_PORT nPort,
    IN LPSTR lpszUserName,
    IN LPSTR lpszPassword,
    IN DWORD dwServiceType,
    IN DWORD dwFlags,
    IN DWORD_PTR dwContext
    );

INT
FlushExistingConnectObjects(
    IN HINTERNET hInternet
    );

DWORD
RMakeGfrFindObjectHandle(
    HINTERNET ParentHandle,
    HINTERNET *ChildHandle,
    CLOSE_HANDLE_FUNC wCloseFunc,
    DWORD_PTR dwContext
    );

DWORD
RMakeGfrFixedObjectHandle(
    HINTERNET ParentHandle,
    HINTERNET *ChildHandle,
    DWORD dwFixedType
    );

DWORD
RMakeGfrFileObjectHandle(
    HINTERNET ParentHandle,
    HINTERNET *ChildHandle,
    CLOSE_HANDLE_FUNC wCloseFunc,
    DWORD_PTR dwContext
    );

DWORD
RGetLocalHandle(
    HINTERNET Handle,
    HINTERNET *LocalHandle
    );

DWORD
RMakeHttpReqObjectHandle(
    HINTERNET ParentHandle,
    HINTERNET *ChildHandle,
    CLOSE_HANDLE_FUNC wCloseFunc,
    DWORD dwFlags,
    DWORD_PTR dwContext
    );

//
// FTP remote functions
//

DWORD
RMakeFtpFindObjectHandle(
    HINTERNET ParentHandle,
    HINTERNET *ChildHandle,
    CLOSE_HANDLE_FUNC wCloseFunc,
    DWORD_PTR dwContext
    );

DWORD
RMakeFtpFileObjectHandle(
    HINTERNET ParentHandle,
    HINTERNET *ChildHandle,
    CLOSE_HANDLE_FUNC wCloseFunc,
    DWORD_PTR dwContext
    );

//
// non-exported Internet subordinate functions
//

BOOL
FtpFindNextFileA(
    IN HINTERNET hFtpSession,
    OUT LPWIN32_FIND_DATA lpFindFileData
    );

BOOL
FtpReadFile(
    IN HINTERNET hFtpSession,
    IN LPVOID lpBuffer,
    IN DWORD dwNumberOfBytesToRead,
    OUT LPDWORD lpdwNumberOfBytesRead
    );

BOOL
FtpWriteFile(
    IN HINTERNET hFtpSession,
    IN LPVOID lpBuffer,
    IN DWORD dwNumberOfBytesToWrite,
    OUT LPDWORD lpdwNumberOfBytesWritten
    );

BOOL
FtpCloseFile(
    IN HINTERNET hFtpSession
    );

BOOL
GopherFindNextA(
    IN HINTERNET hGopherFind,
    OUT LPGOPHER_FIND_DATA lpFindFileData
    );

BOOL
GopherReadFile(
    IN HINTERNET hGopherFile,
    IN LPVOID lpBuffer,
    IN DWORD dwNumberOfBytesToRead,
    OUT LPDWORD lpdwNumberOfBytesRead
    );

DWORD
HttpWriteData(
    IN HINTERNET hRequest,
    OUT LPVOID lpBuffer,
    IN DWORD dwNumberOfBytesToWrite,
    OUT LPDWORD lpdwNumberOfBytesWritten,
    IN DWORD dwSocketFlags
    );

DWORD
HttpReadData(
    IN HINTERNET hHttpRequest,
    OUT LPVOID lpBuffer,
    IN DWORD dwNumberOfBytesToRead,
    OUT LPDWORD lpdwNumberOfBytesRead,
    IN DWORD dwSocketFlags
    );

PUBLIC
DWORD
wHttpAddRequestHeaders(
    IN HINTERNET hRequest,
    IN LPCSTR lpszHeaders,
    IN DWORD dwHeadersLength,
    IN DWORD dwModifiers
    );

DWORD
wFtpConnect(
    IN LPCSTR pszFtpSite,
    IN INTERNET_PORT nServerPort,
    IN LPCSTR pszUsername,
    IN LPCSTR pszPassword,
    IN DWORD dwService,
    IN DWORD dwFlags,
    OUT LPHINTERNET lphInternet
    );

DWORD
wFtpMakeConnection(
    IN HINTERNET hFtpSession,
    IN LPCSTR pszUsername,
    IN LPCSTR pszPassword
    );

DWORD
wFtpDisconnect(
    IN HINTERNET hFtpSession,
    IN DWORD dwFlags
    );

DWORD
wFtpQueryDataAvailable(
    IN HINTERNET hFtpSession,
    OUT LPDWORD lpdwNumberOfBytesAvailable
    );

DWORD
wGopherQueryDataAvailable(
    IN HINTERNET hFile,
    OUT LPDWORD lpdwNumberOfBytesAvailable
    );

DWORD
pHttpGetUrlInfo(
    IN HANDLE RequestHandle,
    IN LPBYTE Headers,
    IN DWORD HeadersLength,
    IN LPBYTE UrlBuf,
    IN OUT DWORD *UrlBufLen,
    IN BOOL ReloadFlagCheck
    );

DWORD
pFtpGetUrlString(
    IN LPSTR    lpszTargetName,
    IN LPSTR    lpszCWD,
    IN LPSTR    lpszObjectName,
    IN LPSTR    lpszExtension,
    IN DWORD    dwPort,
    OUT LPSTR   *lplpUrlName,
    OUT LPDWORD lpdwUrlLen
    );

DWORD
pFtpGetUrlInfo(
    IN HANDLE InternetConnectHandle,
    OUT LPSTR Url
    );

DWORD
pGopherGetUrlString(
    IN LPSTR   lpszTargetName,
    IN LPSTR   lpszCWD,
    IN LPSTR   lpszObjectName,
    IN LPSTR    lpszExtension,
    IN DWORD   dwPort,
    OUT LPSTR   *lplpUrlName,
    OUT LPDWORD lpdwUrlLen
    );

DWORD
pGfrGetUrlInfo(
    IN HANDLE InternetConnectHandle,
    OUT LPSTR Url
    );


DWORD
InbLocalEndCacheWrite(
    IN HINTERNET hFtpFile,
    IN LPSTR    lpszFileExtension,
    IN BOOL fNormal
    );

DWORD
InbGopherLocalEndCacheWrite(
    IN HINTERNET hGopherFile,
    IN LPSTR     lpszFileExtension,
    IN BOOL fNormal
    );

BOOL
GetCurrentSettingsVersion(
    LPDWORD lpdwVer
    );

BOOL
IncrementCurrentSettingsVersion(
    LPDWORD lpdwVer
    );


extern DWORD  GlobalSettingsVersion;
extern BOOL   GlobalSettingsLoaded;
extern const char   vszSyncMode[];
extern const char   vszInvalidFilenameChars[];


#if defined(__cplusplus)
}
#endif

#endif // _INETP_