244 lines
8.3 KiB
C
244 lines
8.3 KiB
C
|
/*==========================================================================
|
||
|
*
|
||
|
* Copyright (C) 1995 Microsoft Corporation. All Rights Reserved.
|
||
|
*
|
||
|
* File: dnpextern.h
|
||
|
* Content: This header exposes protocol entry points to the rest of Direct Network
|
||
|
*
|
||
|
* History:
|
||
|
* Date By Reason
|
||
|
* ==== == ======
|
||
|
* 11/06/98 ejs Created
|
||
|
* 07/01/2000 masonb Assumed Ownership
|
||
|
*
|
||
|
***************************************************************************/
|
||
|
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
extern "C"
|
||
|
{
|
||
|
#endif // __cplusplus
|
||
|
|
||
|
// FOLLOWING FLAGS GO INTO PUBLIC HEADER FILE
|
||
|
|
||
|
#define DN_CONNECTFLAGS_OKTOQUERYFORADDRESSING 0x00000001
|
||
|
#define DN_CONNECTFLAGS_ADDITIONALMULTIPLEXADAPTERS 0x00000002 // there will be more adapters for this connect operation
|
||
|
|
||
|
#define DN_LISTENFLAGS_OKTOQUERYFORADDRESSING 0x00000001
|
||
|
|
||
|
#define DN_ENUMQUERYFLAGS_OKTOQUERYFORADDRESSING 0x00000001
|
||
|
#define DN_ENUMQUERYFLAGS_NOBROADCASTFALLBACK 0x00000002
|
||
|
#define DN_ENUMQUERYFLAGS_ADDITIONALMULTIPLEXADAPTERS 0x00000004 // there will be more adapters for this enum operation
|
||
|
|
||
|
|
||
|
|
||
|
#define DN_SENDFLAGS_RELIABLE 0x00000001 // Deliver Reliably
|
||
|
#define DN_SENDFLAGS_NON_SEQUENTIAL 0x00000002 // Deliver Upon Arrival
|
||
|
#define DN_SENDFLAGS_HIGH_PRIORITY 0x00000004
|
||
|
#define DN_SENDFLAGS_LOW_PRIORITY 0x00000008
|
||
|
#define DN_SENDFLAGS_SET_USER_FLAG 0x00000040 // Protocol will deliver these two...
|
||
|
#define DN_SENDFLAGS_SET_USER_FLAG_TWO 0x00000080 // ...flags to receiver
|
||
|
|
||
|
// END OF PUBLIC FLAGS
|
||
|
|
||
|
typedef struct _DN_PROTOCOL_INTERFACE_VTBL DN_PROTOCOL_INTERFACE_VTBL, *PDN_PROTOCOL_INTERFACE_VTBL;
|
||
|
|
||
|
//
|
||
|
// structure used to pass enum data from the protocol to DPlay
|
||
|
//
|
||
|
typedef struct _PROTOCOL_ENUM_DATA
|
||
|
{
|
||
|
IDirectPlay8Address *pSenderAddress; //
|
||
|
IDirectPlay8Address *pDeviceAddress; //
|
||
|
BUFFERDESC ReceivedData; //
|
||
|
HANDLE hEnumQuery; // handle of this query, returned in enum response
|
||
|
|
||
|
} PROTOCOL_ENUM_DATA;
|
||
|
|
||
|
|
||
|
typedef struct _PROTOCOL_ENUM_RESPONSE_DATA
|
||
|
{
|
||
|
IDirectPlay8Address *pSenderAddress;
|
||
|
IDirectPlay8Address *pDeviceAddress;
|
||
|
BUFFERDESC ReceivedData;
|
||
|
DWORD dwRoundTripTime;
|
||
|
|
||
|
} PROTOCOL_ENUM_RESPONSE_DATA;
|
||
|
|
||
|
// Protocol data
|
||
|
typedef struct protocoldata ProtocolData, *PProtocolData;
|
||
|
// Protocol endpoint descriptor
|
||
|
typedef struct endpointdesc EPD, *PEPD;
|
||
|
|
||
|
// Service Provider interface
|
||
|
typedef struct IDP8ServiceProvider IDP8ServiceProvider;
|
||
|
// Service Provider info data strucure
|
||
|
typedef struct _SPGETADDRESSINFODATA SPGETADDRESSINFODATA, *PSPGETADDRESSINFODATA;
|
||
|
// Service Provider event type
|
||
|
typedef enum _SP_EVENT_TYPE SP_EVENT_TYPE;
|
||
|
|
||
|
// Init/Term calls
|
||
|
|
||
|
extern BOOL DNPPoolsInit();
|
||
|
extern void DNPPoolsDeinit();
|
||
|
|
||
|
extern HRESULT DNPProtocolInitialize(PVOID, PProtocolData, PDN_PROTOCOL_INTERFACE_VTBL);
|
||
|
extern HRESULT DNPAddServiceProvider(PProtocolData, IDP8ServiceProvider*, HANDLE *);
|
||
|
extern HRESULT DNPRemoveServiceProvider(PProtocolData, HANDLE);
|
||
|
extern HRESULT DNPProtocolShutdown(PProtocolData);
|
||
|
|
||
|
// Data Transfer
|
||
|
|
||
|
extern HRESULT DNPConnect(PProtocolData, IDirectPlay8Address *const, IDirectPlay8Address *const, const HANDLE, const ULONG, PVOID, PHANDLE);
|
||
|
extern HRESULT DNPListen(PProtocolData, IDirectPlay8Address *const, const HANDLE, ULONG, PVOID, PHANDLE);
|
||
|
extern HRESULT DNPSendData(PProtocolData, HANDLE, UINT, PBUFFERDESC, UINT, ULONG, PVOID, PHANDLE);
|
||
|
extern HRESULT DNPDisconnectEndPoint(PProtocolData, HANDLE, PVOID, PHANDLE);
|
||
|
|
||
|
// Misc Commands
|
||
|
|
||
|
extern HRESULT DNPCrackEndPointDescriptor(HANDLE, PSPGETADDRESSINFODATA);
|
||
|
extern HRESULT DNPCancelCommand(PProtocolData, HANDLE);
|
||
|
|
||
|
extern HRESULT DNPEnumQuery( PProtocolData pPData,
|
||
|
IDirectPlay8Address *const pHostAddress,
|
||
|
IDirectPlay8Address *const pDeviceAddress,
|
||
|
const HANDLE,
|
||
|
BUFFERDESC *const pBuffers,
|
||
|
const DWORD dwBufferCount,
|
||
|
const DWORD dwRetryCount,
|
||
|
const DWORD dwRetryInterval,
|
||
|
const DWORD dwTimeout,
|
||
|
const DWORD dwFlags,
|
||
|
void *const pUserContext,
|
||
|
HANDLE *const pCommandHandle );
|
||
|
|
||
|
extern HRESULT DNPEnumRespond( PProtocolData pPData,
|
||
|
const HANDLE hSPHandle,
|
||
|
const HANDLE hQueryHandle, // handle of enum query being responded to
|
||
|
BUFFERDESC *const pResponseBuffers,
|
||
|
const DWORD dwResponseBufferCount,
|
||
|
const DWORD dwFlags,
|
||
|
void *const pUserContext,
|
||
|
HANDLE *const pCommandHandle );
|
||
|
|
||
|
extern HRESULT DNPReleaseReceiveBuffer(HANDLE);
|
||
|
|
||
|
extern HRESULT DNPGetListenAddressInfo(HANDLE hCommand, PSPGETADDRESSINFODATA pSPData);
|
||
|
extern HRESULT DNPGetEPCaps(HANDLE, PDPN_CONNECTION_INFO);
|
||
|
extern HRESULT DNPSetProtocolCaps(PProtocolData pPData, const DPN_CAPS * const pData);
|
||
|
extern HRESULT DNPGetProtocolCaps(PProtocolData pPData, PDPN_CAPS pData);
|
||
|
|
||
|
extern HRESULT WINAPI DNP_Debug(ProtocolData *, UINT OpCode, HANDLE EndPoint, PVOID Data);
|
||
|
|
||
|
// Lower Edge Entries
|
||
|
|
||
|
extern HRESULT WINAPI DNSP_IndicateEvent(IDP8SPCallback *, SP_EVENT_TYPE, PVOID);
|
||
|
extern HRESULT WINAPI DNSP_CommandComplete(IDP8SPCallback *, HANDLE, HRESULT, PVOID);
|
||
|
|
||
|
// V-TABLE FOR CALLS INTO CORE LAYER
|
||
|
|
||
|
typedef HRESULT (*PFN_PINT_INDICATE_ENUM_QUERY)
|
||
|
(void *const pvUserContext,
|
||
|
void *const pvEndPtContext,
|
||
|
const HANDLE hCommand,
|
||
|
void *const pvEnumQueryData,
|
||
|
const DWORD dwEnumQueryDataSize);
|
||
|
typedef HRESULT (*PFN_PINT_INDICATE_ENUM_RESPONSE)
|
||
|
(void *const pvUserContext,
|
||
|
const HANDLE hCommand,
|
||
|
void *const pvCommandContext,
|
||
|
void *const pvEnumResponseData,
|
||
|
const DWORD dwEnumResponseDataSize);
|
||
|
typedef HRESULT (*PFN_PINT_INDICATE_CONNECT)
|
||
|
(void *const pvUserContext,
|
||
|
void *const pvListenContext,
|
||
|
const HANDLE hEndPt,
|
||
|
void **const ppvEndPtContext);
|
||
|
typedef HRESULT (*PFN_PINT_INDICATE_DISCONNECT)
|
||
|
(void *const pvUserContext,
|
||
|
void *const pvEndPtContext);
|
||
|
typedef HRESULT (*PFN_PINT_INDICATE_CONNECTION_TERMINATED)
|
||
|
(void *const pvUserContext,
|
||
|
void *const pvEndPtContext,
|
||
|
const HRESULT hr);
|
||
|
typedef HRESULT (*PFN_PINT_INDICATE_RECEIVE)
|
||
|
(void *const pvUserContext,
|
||
|
void *const pvEndPtContext,
|
||
|
void *const pvData,
|
||
|
const DWORD dwDataSize,
|
||
|
const HANDLE hBuffer,
|
||
|
const DWORD dwFlags);
|
||
|
typedef HRESULT (*PFN_PINT_COMPLETE_LISTEN)
|
||
|
(void *const pvUserContext,
|
||
|
void **const ppvCommandContext,
|
||
|
const HRESULT hr,
|
||
|
const HANDLE hEndPt);
|
||
|
typedef HRESULT (*PFN_PINT_COMPLETE_LISTEN_TERMINATE)
|
||
|
(void *const pvUserContext,
|
||
|
void *const pvCommandContext,
|
||
|
const HRESULT hr);
|
||
|
typedef HRESULT (*PFN_PINT_COMPLETE_ENUM_QUERY)
|
||
|
(void *const pvUserContext,
|
||
|
void *const pvCommandContext,
|
||
|
const HRESULT hr);
|
||
|
typedef HRESULT (*PFN_PINT_COMPLETE_ENUM_RESPONSE)
|
||
|
(void *const pvUserContext,
|
||
|
void *const pvCommandContext,
|
||
|
const HRESULT hr);
|
||
|
typedef HRESULT (*PFN_PINT_COMPLETE_CONNECT)
|
||
|
(void *const pvUserContext,
|
||
|
void *const pvCommandContext,
|
||
|
const HRESULT hr,
|
||
|
const HANDLE hEndPt,
|
||
|
void **const ppvEndPtContext);
|
||
|
typedef HRESULT (*PFN_PINT_COMPLETE_DISCONNECT)
|
||
|
(void *const pvUserContext,
|
||
|
void *const pvCommandContext,
|
||
|
const HRESULT hr);
|
||
|
typedef HRESULT (*PFN_PINT_COMPLETE_SEND)
|
||
|
(void *const pvUserContext,
|
||
|
void *const pvCommandContext,
|
||
|
const HRESULT hr);
|
||
|
typedef HRESULT (*PFN_PINT_ADDRESS_INFO_CONNECT)
|
||
|
(void *const pvUserContext,
|
||
|
void *const pvCommandContext,
|
||
|
const HRESULT hr,
|
||
|
IDirectPlay8Address *const pHostAddress,
|
||
|
IDirectPlay8Address *const pDeviceAddress );
|
||
|
typedef HRESULT (*PFN_PINT_ADDRESS_INFO_ENUM)
|
||
|
(void *const pvUserContext,
|
||
|
void *const pvCommandContext,
|
||
|
const HRESULT hr,
|
||
|
IDirectPlay8Address *const pHostAddress,
|
||
|
IDirectPlay8Address *const pDeviceAddress );
|
||
|
typedef HRESULT (*PFN_PINT_ADDRESS_INFO_LISTEN)
|
||
|
(void *const pvUserContext,
|
||
|
void *const pvCommandContext,
|
||
|
const HRESULT hr,
|
||
|
IDirectPlay8Address *const pDeviceAddress );
|
||
|
|
||
|
struct _DN_PROTOCOL_INTERFACE_VTBL
|
||
|
{
|
||
|
PFN_PINT_INDICATE_ENUM_QUERY IndicateEnumQuery;
|
||
|
PFN_PINT_INDICATE_ENUM_RESPONSE IndicateEnumResponse;
|
||
|
PFN_PINT_INDICATE_CONNECT IndicateConnect;
|
||
|
PFN_PINT_INDICATE_DISCONNECT IndicateDisconnect;
|
||
|
PFN_PINT_INDICATE_CONNECTION_TERMINATED IndicateConnectionTerminated;
|
||
|
PFN_PINT_INDICATE_RECEIVE IndicateReceive;
|
||
|
PFN_PINT_COMPLETE_LISTEN CompleteListen;
|
||
|
PFN_PINT_COMPLETE_LISTEN_TERMINATE CompleteListenTerminate;
|
||
|
PFN_PINT_COMPLETE_ENUM_QUERY CompleteEnumQuery;
|
||
|
PFN_PINT_COMPLETE_ENUM_RESPONSE CompleteEnumResponse;
|
||
|
PFN_PINT_COMPLETE_CONNECT CompleteConnect;
|
||
|
PFN_PINT_COMPLETE_DISCONNECT CompleteDisconnect;
|
||
|
PFN_PINT_COMPLETE_SEND CompleteSend;
|
||
|
PFN_PINT_ADDRESS_INFO_CONNECT AddressInfoConnect;
|
||
|
PFN_PINT_ADDRESS_INFO_ENUM AddressInfoEnum;
|
||
|
PFN_PINT_ADDRESS_INFO_LISTEN AddressInfoListen;
|
||
|
};
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
}
|
||
|
#endif // __cplusplus
|
||
|
|