|
|
/*++
Copyright (C) Microsoft Corporation, 1996 - 1999
Module Name:
dgtrans.hxx
Abstract:
Common definitions shared between modules supporting protocols based on datagram winsock.
Author:
Mario Goertzel [MarioGo]
Revision History:
MarioGo 04/10/1996 Bits 'n pieces
EdwardR 08/08/1997 Additions for MSMQ (Falcon).
--*/
#ifndef __DGTRANS_HXX
#define __DGTRANS_HXX
typedef RPC_STATUS (*ENDPOINT_TO_SOCKADDR)(char *, WS_SOCKADDR *, DG_TRANSPORT_ENDPOINT);
struct DG_PDU_SIZES { // Note: PDU sizes MUST be zero mod eight.
UINT BaselinePdu; // Minimum size that must always work.
UINT PreferredPdu; // Good starting size, >= BaselinePdu
UINT MaxPdu; // Maximum possible PDU size
UINT MaxPacket; // Transport (ethernet, tokenring) packet size
UINT ReceiveBuffer; // transport buffer length (winsock usually 8k)
};
struct DG_TRANS_INFO { INT AddressFamily; INT SocketType; INT Protocol; DWORD ServerBufferSize; DWORD WorkstationBufferSize; ENDPOINT_TO_SOCKADDR EndpointToAddr; };
typedef WS_DATAGRAM_ENDPOINT *PWS_DATAGRAM_ENDPOINT;
#ifdef NCADG_MQ_ON
typedef MQ_DATAGRAM_ENDPOINT *PMQ_DATAGRAM_ENDPOINT;
extern void MQ_SubmitReceives(BASE_ADDRESS *ThisEndpoint); #endif
extern void DG_SubmitReceives(BASE_ADDRESS *ThisEndpoint);
//-------------------------------------------------------------------
// Datagram Transport Interface Functions for MSMQ
//-------------------------------------------------------------------
#ifdef DBG
// #define MAJOR_DBG
#endif
#ifdef NCADG_MQ_ON
extern BOOL MQ_Initialize();
extern RPC_STATUS MQ_MapStatusCode( IN HRESULT hr, IN RPC_STATUS defaultStatus );
extern RPC_STATUS MQ_InitOptions( IN void PAPI *pvTransportOptions );
extern RPC_STATUS MQ_SetOption( IN void PAPI *pvTransportOptions, IN unsigned long option, IN ULONG_PTR optionValue );
extern RPC_STATUS MQ_InqOption( IN void PAPI *pvTransportOptions, IN unsigned long option, OUT ULONG_PTR * pOptionValue );
extern RPC_STATUS MQ_ImplementOptions( IN DG_TRANSPORT_ENDPOINT pEndpoint, IN void *pvTransportOptions );
extern RPC_STATUS MQ_BuildAddressVector( OUT NETWORK_ADDRESS_VECTOR **ppVector );
extern BOOL MQ_AllowReceives( IN DG_TRANSPORT_ENDPOINT pEndpoint, IN BOOL fAllowReceives, IN BOOL fCancelPending );
extern RPC_STATUS MQ_RegisterQueueToDelete( IN RPC_CHAR *pwsQFormat, IN RPC_CHAR *pwsMachine );
extern RPC_STATUS MQ_FillInAddress( IN MQ_ADDRESS *pAddress, IN MQPROPVARIANT *pMsgPropVar );
extern BOOL ConstructQueuePathName( IN RPC_CHAR *pwsMachine, IN RPC_CHAR *pwsQName, OUT RPC_CHAR *pwsPathName, IN OUT DWORD *pdwSize );
extern BOOL ConstructPrivateQueuePathName( IN RPC_CHAR *pwsMachine, IN RPC_CHAR *pwsQName, OUT RPC_CHAR *pwsPathName, IN OUT DWORD *pdwSize );
extern BOOL ConstructDirectFormat( IN RPC_CHAR *pwsMachine, IN RPC_CHAR *pwsQName, OUT RPC_CHAR *pwsPathName, IN OUT DWORD *pdwSize );
extern BOOL ConstructPrivateDirectFormat( IN RPC_CHAR *pwsMachine, IN RPC_CHAR *pwsQName, OUT RPC_CHAR *pwsPathName, IN OUT DWORD *pdwSize );
extern BOOL ParseQueuePathName( IN RPC_CHAR *pwsPathName, OUT RPC_CHAR wsMachineName[MAX_COMPUTERNAME_LEN], OUT RPC_CHAR wsQueueName[MQ_MAX_Q_NAME_LEN] );
extern HRESULT LocateQueueViaQName( IN OUT MQ_ADDRESS *pAddress );
extern HRESULT CreateQueue( IN SECURITY_DESCRIPTOR *pSecurityDescriptor, IN UUID *pQueueUuid, IN RPC_CHAR *pwsPathName, IN RPC_CHAR *pwsQueueLabel, IN ULONG ulQueueFlags, OUT RPC_CHAR *pwsFormat, IN OUT DWORD *pdwFormatSize );
extern HRESULT SetQueueProperties( IN RPC_CHAR *pwsQFormat, IN ULONG ulQueueFlags );
extern HRESULT ClearQueue( IN QUEUEHANDLE hQueue );
extern HRESULT ClientSetupQueue( IN OUT MQ_DATAGRAM_ENDPOINT *pEndpoint, IN RPC_CHAR *pwsMachine, IN RPC_CHAR *pwsEndpoint );
extern HRESULT ServerSetupQueue( IN OUT MQ_DATAGRAM_ENDPOINT *pEndpoint, IN RPC_CHAR *pwsMachine, IN RPC_CHAR *pwsEndpoint, IN void *pSecurityDescriptor, IN DWORD ulEndpointFlags );
extern HRESULT ClientCloseQueue( IN MQ_DATAGRAM_ENDPOINT *pEndpoint );
extern HRESULT ServerCloseQueue( IN MQ_DATAGRAM_ENDPOINT *pEndpoint );
extern RPC_STATUS ConnectToServerQueue( IN OUT MQ_ADDRESS *pAddress, IN RPC_CHAR *pNetworkAddress, IN RPC_CHAR *pEndpoint );
extern RPC_STATUS DisconnectFromServer( IN OUT MQ_ADDRESS *pAddress );
extern HRESULT QueryQM( IN RPC_CHAR *pwsMachine, IN OUT DWORD *pdwSize );
extern HRESULT EvaluateAckMessage( IN USHORT msgClass );
extern HRESULT WaitForAck( IN MQ_DATAGRAM_ENDPOINT *pEndpoint );
extern HRESULT SetupAdminQueue( IN MQ_DATAGRAM_ENDPOINT *pEndpoint );
extern HRESULT ReadQueue( IN MQ_DATAGRAM_ENDPOINT *pEndpoint, IN DWORD timeoutMsec, OUT MQ_ADDRESS *pAddress, OUT UCHAR *pBuffer, IN OUT DWORD *pdwBufferSize );
extern HRESULT AsyncReadQueue( IN MQ_DATAGRAM_ENDPOINT *pEndpoint, IN MQ_OVERLAPPED *pOl, OUT MQ_ADDRESS *pAddress, OUT UCHAR *pBuffer, IN DWORD dwBufferSize );
extern HRESULT AsyncPeekQueue( IN MQ_DATAGRAM_ENDPOINT *pEndpoint, IN MQ_OVERLAPPED *pOl );
extern HRESULT PeekQueue( IN MQ_DATAGRAM_ENDPOINT *pEndpoint, IN DWORD dwTimeoutMsec, OUT DWORD *pdwrSize );
extern HRESULT MQ_SendToQueue( IN MQ_DATAGRAM_ENDPOINT *pEndpoint, IN MQ_ADDRESS *pAddress, IN UCHAR *pBuffer, IN DWORD dwBufferSize );
extern RPC_STATUS MQ_SubmitReceive( IN PMQ_DATAGRAM_ENDPOINT pEndpoint, IN PMQ_DATAGRAM pDatagram);
extern RPC_STATUS RPC_ENTRY MQ_SendPacket( IN DG_TRANSPORT_ENDPOINT ThisEndpoint, IN DG_TRANSPORT_ADDRESS pAddress, IN BUFFER pHeader, IN unsigned cHeader, IN BUFFER pBody, IN unsigned cBody, IN BUFFER pTrailer, IN unsigned cTrailer );
extern RPC_STATUS RPC_ENTRY MQ_ClientOpenEndpoint( OUT DG_TRANSPORT_ENDPOINT ThisEndpoint, IN BOOL fAsync, IN DWORD Flags );
extern RPC_STATUS RPC_ENTRY MQ_ClientInitializeAddress( OUT DG_TRANSPORT_ADDRESS Address, IN RPC_CHAR *NetworkAddress, IN RPC_CHAR *pPort, IN BOOL fUseCache, IN BOOL fBroadcast );
extern RPC_STATUS RPC_ENTRY MQ_ClientCloseEndpoint( IN DG_TRANSPORT_ENDPOINT ThisEndpoint );
extern RPC_STATUS RPC_ENTRY MQ_ReceivePacket( IN DG_TRANSPORT_ENDPOINT ThisEndpoint, OUT DG_TRANSPORT_ADDRESS *pReplyAddress, OUT PUINT pBufferLength, OUT BUFFER *pBuffer, IN LONG Timeout );
extern RPC_STATUS RPC_ENTRY MQ_ResizePacket( IN DG_TRANSPORT_ENDPOINT ThisEndpoint, OUT DG_TRANSPORT_ADDRESS *pReplyAddress, OUT PUINT pBufferLength, OUT BUFFER *pBuffer );
extern RPC_STATUS RPC_ENTRY MQ_ReReceivePacket( IN DG_TRANSPORT_ENDPOINT ThisEndpoint, OUT DG_TRANSPORT_ADDRESS *pReplyAddress, OUT PUINT pBufferLength, OUT BUFFER *pBuffer );
extern RPC_STATUS RPC_ENTRY MQ_ForwardPacket( IN DG_TRANSPORT_ENDPOINT ThisEndpoint, IN BUFFER pHeader, IN unsigned cHeader, IN BUFFER pBody, IN unsigned cBody, IN BUFFER pTrailer, IN unsigned cTrailer, IN CHAR * pszPort );
extern RPC_STATUS RPC_ENTRY MQ_ServerListen( IN OUT DG_TRANSPORT_ENDPOINT ThisEndpoint, IN RPC_CHAR *NetworkAddress, IN OUT RPC_CHAR **pPort, IN void *pSecurityDescriptor, IN ULONG EndpointFlags, IN ULONG NICFlags, OUT NETWORK_ADDRESS_VECTOR **ppNetworkAddressVector );
extern void RPC_ENTRY MQ_ServerAbortListen( IN DG_TRANSPORT_ENDPOINT ThisEndpoint );
extern RPC_STATUS MQ_QueryAddress( IN void * pOriginalEndpoint, OUT RPC_CHAR * pClientAddress );
extern RPC_STATUS MQ_QueryEndpoint( IN void * pOriginalEndpoint, OUT RPC_CHAR * pClientEndpoint );
extern RPC_STATUS RPC_ENTRY MQ_GetEndpointStats( IN DG_TRANSPORT_ENDPOINT ThisEndpoint, OUT DG_ENDPOINT_STATS * pStats );
extern RPC_STATUS RPC_ENTRY MQ_InquireAuthClient( IN void *pClientEndpoint, OUT RPC_CHAR **ppPrincipal, OUT SID **ppSid, OUT ULONG *pulAuthenLevel, OUT ULONG *pulAuthnService, OUT ULONG *pulAuthzService ); #endif
#ifdef MAJOR_DBG
extern void DG_DbgPrintPacket( unsigned char *pPacket ); #endif
#endif // __DGTRANS_HXX
|