windows-nt/Source/XPSP1/NT/multimedia/directx/dplay/dnet/protocol/dnpextern.h
2020-09-26 16:20:57 +08:00

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