271 lines
8.6 KiB
C
271 lines
8.6 KiB
C
|
|
||
|
//----------------------------------------------------------------
|
||
|
//
|
||
|
// Copyright (C) Microsoft Corporation, 1996 - 1999
|
||
|
//
|
||
|
// Module Name: mqcommon.h
|
||
|
//
|
||
|
//
|
||
|
// Abstract:
|
||
|
//
|
||
|
// This is the Message Queue (Falcon) datagram client dll.
|
||
|
//
|
||
|
// Author:
|
||
|
//
|
||
|
// Edward Reus (edwardr) 17-Jun-1996
|
||
|
//
|
||
|
// Revision History:
|
||
|
//
|
||
|
//----------------------------------------------------------------
|
||
|
|
||
|
|
||
|
#ifndef MQCOMMON_H
|
||
|
#define MQCOMMON_H
|
||
|
|
||
|
#define UNICODE // Use unicode API
|
||
|
|
||
|
// Use the following define to turn on verbose debug messages:
|
||
|
// #define MAJOR_DEBUG
|
||
|
|
||
|
|
||
|
//----------------------------------------------------------------
|
||
|
// Constants:
|
||
|
//----------------------------------------------------------------
|
||
|
|
||
|
#define DG_MQ_TRANSPORT_VERSION 1 // Not used.
|
||
|
#define MAX_PATHNAME_LEN 256
|
||
|
#define MAX_FORMAT_LEN 128
|
||
|
#define MAX_COMPUTERNAME_LEN 32
|
||
|
#define MAX_VAR 20
|
||
|
#define MAX_SEND_VAR 20
|
||
|
#define MAX_RECV_VAR 20
|
||
|
#define MAX_SID_SIZE 256 // A typical SID is 20-30 bytes...
|
||
|
#define MAX_USERNAME_SIZE 256
|
||
|
#define MAX_DOMAIN_SIZE 256
|
||
|
#define UUID_LEN 40
|
||
|
|
||
|
#define TRANSPORTID 0x1D // Not official yet...
|
||
|
#define TRANSPORTHOSTID 0x1E
|
||
|
#define PROTSEQ "ncadg_mq"
|
||
|
#define ENDPOINT_MAPPER_EP "EpMapper"
|
||
|
|
||
|
#define WS_SEPARATOR TEXT("\\")
|
||
|
#define WS_PRIVATE_DOLLAR TEXT("\\PRIVATE$\\")
|
||
|
|
||
|
// These constants are use for temporary queue management:
|
||
|
#define Q_SVC_PROTSEQ TEXT("ncalrpc")
|
||
|
#define Q_SVC_ENDPOINT TEXT("epmapper")
|
||
|
|
||
|
// These are the MQ Queue Type UUIDs for RPC:
|
||
|
#define SVR_QTYPE_UUID_STR TEXT("bbd97de0-cb4f-11cf-8e62-00aa006b4f2f")
|
||
|
#define CLNT_QTYPE_UUID_STR TEXT("8e482920-cead-11cf-8e68-00aa006b4f2f")
|
||
|
#define CLNT_ADMIN_QTYPE_UUID_STR TEXT("c87ca5c0-ff67-11cf-8ebd-00aa006b4f2f")
|
||
|
|
||
|
// Packet sizes:
|
||
|
#define BASELINE_PDU_SIZE 65535
|
||
|
#define PREFERRED_PDU_SIZE 65535
|
||
|
#define MAX_PDU_SIZE 65535
|
||
|
#define MAX_PACKET_SIZE 65535
|
||
|
// was: 0x7fffffff
|
||
|
#define DEFAULT_BUFFER_SIZE 0
|
||
|
|
||
|
#define DEFAULT_PRIORITY 3
|
||
|
|
||
|
|
||
|
//----------------------------------------------------------------
|
||
|
// Types:
|
||
|
//----------------------------------------------------------------
|
||
|
|
||
|
typedef struct _MQ_INFO
|
||
|
{
|
||
|
WCHAR wsMachine[MAX_COMPUTERNAME_LEN];
|
||
|
WCHAR wsQName[MQ_MAX_Q_NAME_LEN];
|
||
|
WCHAR wsQPathName[MAX_PATHNAME_LEN];
|
||
|
WCHAR wsQFormat[MAX_FORMAT_LEN];
|
||
|
WCHAR wsAdminQFormat[MAX_FORMAT_LEN];
|
||
|
UUID uuidQType;
|
||
|
QUEUEHANDLE hQueue;
|
||
|
QUEUEHANDLE hAdminQueue; // Sometimes used by the client.
|
||
|
DWORD dwBufferSize;
|
||
|
DWORD cThreads; // Used by server.
|
||
|
BOOL fInitialized;
|
||
|
// How to send this call message:
|
||
|
BOOL fAck;
|
||
|
ULONG ulDelivery;
|
||
|
ULONG ulPriority;
|
||
|
ULONG ulJournaling;
|
||
|
ULONG ulTimeToReachQueue; // Seconds.
|
||
|
ULONG ulTimeToReceive; // Seconds.
|
||
|
BOOL fAuthenticate;
|
||
|
BOOL fEncrypt;
|
||
|
} MQ_INFO;
|
||
|
|
||
|
|
||
|
typedef struct _MQ_ADDRESS
|
||
|
{
|
||
|
WCHAR wsMachine[MAX_COMPUTERNAME_LEN];
|
||
|
WCHAR wsQName[MQ_MAX_Q_NAME_LEN];
|
||
|
WCHAR wsQFormat[MAX_FORMAT_LEN];
|
||
|
QUEUEHANDLE hQueue;
|
||
|
BOOL fConnectionFailed;
|
||
|
BOOL fAuthenticated; // Server security tracking.
|
||
|
ULONG ulPrivacyLevel; // Server security tracking.
|
||
|
ULONG ulAuthenticationLevel; // Server security tracking.
|
||
|
UCHAR aSidBuffer[MAX_SID_SIZE]; // Server security tracking.
|
||
|
} MQ_ADDRESS;
|
||
|
|
||
|
typedef struct _MQ_OPTIONS
|
||
|
{
|
||
|
BOOL fAck;
|
||
|
ULONG ulDelivery;
|
||
|
ULONG ulPriority;
|
||
|
ULONG ulJournaling;
|
||
|
ULONG ulTimeToReachQueue;
|
||
|
ULONG ulTimeToReceive;
|
||
|
BOOL fAuthenticate;
|
||
|
BOOL fEncrypt;
|
||
|
} MQ_OPTIONS;
|
||
|
|
||
|
//----------------------------------------------------------------
|
||
|
// Prototypes:
|
||
|
//----------------------------------------------------------------
|
||
|
|
||
|
extern HRESULT CreateQueue( IN UUID *pQueueUuid,
|
||
|
IN WCHAR *pwsPathName,
|
||
|
IN WCHAR *pwsQueueLabel,
|
||
|
IN ULONG ulQueueFlags,
|
||
|
OUT WCHAR *pwsFormat,
|
||
|
IN OUT DWORD *pdwFormatSize );
|
||
|
|
||
|
|
||
|
extern BOOL ConstructQueuePathName( IN WCHAR *pwsMachineName,
|
||
|
IN WCHAR *pwsQueueName,
|
||
|
OUT WCHAR *pwsPathName,
|
||
|
IN OUT DWORD *pdwSize );
|
||
|
|
||
|
|
||
|
extern BOOL ConstructPrivateQueuePathName( IN WCHAR *pwsMachineName,
|
||
|
IN WCHAR *pwsQueueName,
|
||
|
OUT WCHAR *pwsPathName,
|
||
|
IN OUT DWORD *pdwSize );
|
||
|
|
||
|
|
||
|
extern HRESULT ClearQueue( QUEUEHANDLE hQueue );
|
||
|
|
||
|
|
||
|
extern BOOL ParseQueuePathName(
|
||
|
IN WCHAR *pwsPathName,
|
||
|
OUT WCHAR wsMachineName[MAX_COMPUTERNAME_LEN],
|
||
|
OUT WCHAR wsQueueName[MQ_MAX_Q_NAME_LEN] );
|
||
|
|
||
|
#ifdef MAJOR_DEBUG
|
||
|
|
||
|
extern void DbgPrintPacket( unsigned char *pPacket );
|
||
|
|
||
|
#endif
|
||
|
|
||
|
//
|
||
|
// The Svr... functions are defined in ..\falcons\mqsvr.c
|
||
|
|
||
|
extern HRESULT SvrSetupQueue( IN MQ_INFO *pEP,
|
||
|
IN WCHAR *pwsSvrMachine,
|
||
|
IN WCHAR *pwsEndpoint,
|
||
|
IN unsigned long ulEndpointFlags );
|
||
|
|
||
|
|
||
|
extern HRESULT SvrPeekQueue( IN MQ_INFO *pInfo,
|
||
|
IN DWORD timeoutMsec,
|
||
|
OUT ULONG *pdwBufferSize );
|
||
|
|
||
|
extern HRESULT SvrReceiveFromQueue( IN MQ_INFO *pInfo,
|
||
|
IN DWORD timeoutMsec,
|
||
|
OUT MQ_ADDRESS *pAddress,
|
||
|
OUT UCHAR *pBuffer,
|
||
|
IN OUT DWORD *pdwBufferSize );
|
||
|
|
||
|
|
||
|
|
||
|
extern HRESULT SvrSendToQueue( IN MQ_INFO *pInfo,
|
||
|
IN MQ_ADDRESS *pAddress,
|
||
|
IN UCHAR *pBuffer,
|
||
|
IN DWORD dwBufferSize );
|
||
|
|
||
|
|
||
|
extern HRESULT SvrShutdownQueue( IN MQ_INFO *pInfo );
|
||
|
|
||
|
|
||
|
extern HRESULT SvrInitializeHandleMap();
|
||
|
|
||
|
|
||
|
extern HRESULT SvrCloseAllHandles();
|
||
|
|
||
|
//
|
||
|
// The Clnt... functions are defined in mqclnt.c
|
||
|
|
||
|
extern HRESULT ClntSetupQueue( MQ_INFO *pEP,
|
||
|
WCHAR *pwsSvrMachine,
|
||
|
WCHAR *pwsEndpoint );
|
||
|
|
||
|
|
||
|
extern HRESULT ClntSetupAdminQueue( MQ_INFO *pEP );
|
||
|
|
||
|
|
||
|
extern HRESULT ClntReceiveFromQueue( IN MQ_INFO *pInfo,
|
||
|
IN DWORD timeoutMsec,
|
||
|
OUT MQ_ADDRESS *pAddress,
|
||
|
OUT UCHAR *pBuffer,
|
||
|
IN OUT DWORD *pdwBufferSize );
|
||
|
|
||
|
|
||
|
extern HRESULT ClntPeekQueue( IN MQ_INFO *pInfo,
|
||
|
IN DWORD timeoutMsec,
|
||
|
OUT DWORD *pdwBufferSize );
|
||
|
|
||
|
|
||
|
extern HRESULT ClntSendToQueue( IN MQ_INFO *pInfo,
|
||
|
IN MQ_ADDRESS *pAddress,
|
||
|
IN UCHAR *pBuffer,
|
||
|
IN DWORD dwBufferSize );
|
||
|
|
||
|
|
||
|
extern HRESULT ClntShutdownQueue( IN MQ_INFO *pInfo );
|
||
|
|
||
|
|
||
|
extern RPC_STATUS MQ_MapStatusCode( IN HRESULT hr,
|
||
|
IN RPC_STATUS defStatus );
|
||
|
|
||
|
|
||
|
#if FALSE
|
||
|
NOTE: These functions are not currently being used...
|
||
|
|
||
|
extern HRESULT LocateQueueViaQType( IN UUID *pQueueUuid,
|
||
|
OUT WCHAR *pwsFormat,
|
||
|
IN OUT DWORD *pdwFormatSize );
|
||
|
|
||
|
|
||
|
extern HRESULT LocateQueueViaQTypeAndMachine( IN UUID *pQueueUuid,
|
||
|
IN WCHAR *pwsMachine,
|
||
|
OUT WCHAR *pwsFormat,
|
||
|
IN OUT DWORD *pdwFormatSize );
|
||
|
|
||
|
|
||
|
extern HRESULT LocateQueueViaQName( IN WCHAR *pwsQueueName,
|
||
|
OUT WCHAR *pwsFormat,
|
||
|
IN OUT DWORD *pdwFormatSize );
|
||
|
|
||
|
|
||
|
extern HRESULT LocateQueueViaQNameAndMachine( IN WCHAR *pwsQName,
|
||
|
IN WCHAR *pwsMachine,
|
||
|
OUT WCHAR *pwsFormat,
|
||
|
IN OUT DWORD *pdwFormatSize );
|
||
|
|
||
|
|
||
|
extern BOOL FormatNameDirect( IN WCHAR *pwsMachineName,
|
||
|
IN WCHAR *pwsQueueName,
|
||
|
OUT WCHAR *pwsFormatName,
|
||
|
IN OUT DWORD *pdwSize );
|
||
|
#endif
|
||
|
|
||
|
|
||
|
#endif
|