304 lines
8.1 KiB
C
304 lines
8.1 KiB
C
/* (C) 1997 Microsoft Corp.
|
|
*
|
|
* file : MCSIOCTL.h
|
|
* author : Erik Mavrinac
|
|
*
|
|
* description: Definitions for the interface between MCSMUX and PDMCS.
|
|
*/
|
|
|
|
#ifndef __MCSIOCTL_H
|
|
#define __MCSIOCTL_H
|
|
|
|
|
|
/*
|
|
* Defines
|
|
*/
|
|
|
|
// From uportmsg.h in NetMeeting project (defined there as
|
|
// MAXIMUM_DOMAIN_SELECTOR).
|
|
#define MaxDomainSelectorLength 32
|
|
|
|
// Max allowable GCC data for connect-initial and connect-response PDUs.
|
|
// Used to reduce memory allocations for handling these PDUs -- if too large
|
|
// we will send a bad response PDU and/or disconnect.
|
|
#define MaxGCCConnectDataLength 1024
|
|
|
|
|
|
|
|
/*
|
|
* T.120 IOCTLs.
|
|
*/
|
|
|
|
#define IOCTL_T120_BASE (0x500)
|
|
|
|
// Used by MCSMUX to signal on a stack IOCTL that the included data is an MCS
|
|
// request/response. An MCSXxxYyyIoctl struct is expected as the
|
|
// pSdIoctl->InputBuffer; the Header.Type value in the struct will be used
|
|
// to determine the type of the request.
|
|
#define IOCTL_T120_REQUEST _ICA_CTL_CODE (IOCTL_T120_BASE, METHOD_NEITHER)
|
|
|
|
|
|
|
|
/*
|
|
* Used as the header of all data passed via IOCTL_T120_REQUEST or channel
|
|
* input.
|
|
*/
|
|
|
|
typedef struct {
|
|
UserHandle hUser; // PDMCS-supplied handle (NULL for node controller).
|
|
int Type; // MCS request/indication type.
|
|
} IoctlHeader;
|
|
|
|
|
|
|
|
/*
|
|
* Connect provider (node controller only). These are special in that they
|
|
* only come from user mode and so the assoicated user data (if any)
|
|
* will always be packed at the end of the struct by MCSMUX.
|
|
*/
|
|
|
|
// Passed in by node controller. Confirm is defined next.
|
|
typedef struct
|
|
{
|
|
IoctlHeader Header; // Contains MCS_CONNECT_PROVIDER_REQUEST.
|
|
unsigned char CallingDomain[MaxDomainSelectorLength];
|
|
unsigned CallingDomainLength;
|
|
unsigned char CalledDomain[MaxDomainSelectorLength];
|
|
unsigned CalledDomainLength;
|
|
BOOLEAN bUpwardConnection;
|
|
DomainParameters DomainParams;
|
|
unsigned UserDataLength;
|
|
BYTE UserData[MaxGCCConnectDataLength];
|
|
|
|
} ConnectProviderRequestIoctl;
|
|
|
|
typedef struct
|
|
{
|
|
IoctlHeader Header; // Contains MCS_CONNECT_PROVIDER_CONFIRM.
|
|
ConnectionHandle hConn;
|
|
DomainParameters DomainParams;
|
|
MCSResult Result;
|
|
} ConnectProviderConfirmIoctl;
|
|
|
|
// Asynchronous indication triggered when another node connects.
|
|
typedef struct
|
|
{
|
|
IoctlHeader Header; // Contains MCS_CONNECT_PROVIDER_INDICATION.
|
|
ConnectionHandle hConn;
|
|
BOOLEAN bUpwardConnection;
|
|
DomainParameters DomainParams;
|
|
unsigned UserDataLength;
|
|
BYTE UserData[MaxGCCConnectDataLength];
|
|
} ConnectProviderIndicationIoctl;
|
|
|
|
// Reply to connect-provider indication.
|
|
typedef struct
|
|
{
|
|
IoctlHeader Header; // Contains MCS_CONNECT_PROVIDER_RESPONSE.
|
|
ConnectionHandle hConn;
|
|
MCSResult Result;
|
|
unsigned UserDataLength;
|
|
BYTE * pUserData;
|
|
} ConnectProviderResponseIoctl;
|
|
|
|
|
|
|
|
/*
|
|
* Disconnect provider (node controller only).
|
|
*/
|
|
|
|
// Passed in by node controller. There is no confirm.
|
|
typedef struct
|
|
{
|
|
IoctlHeader Header; // Contains MCS_DISCONNECT_PROVIDER_REQUEST/INDICATION.
|
|
ConnectionHandle hConn;
|
|
MCSReason Reason;
|
|
} DisconnectProviderRequestIoctl;
|
|
|
|
// Asynchronous indication.
|
|
typedef struct
|
|
{
|
|
IoctlHeader Header; // Contains MCS_DISCONNECT_PROVIDER_REQUEST/INDICATION.
|
|
ConnectionHandle hConn;
|
|
MCSReason Reason;
|
|
} DisconnectProviderIndicationIoctl;
|
|
|
|
|
|
/*
|
|
* Attach user
|
|
*/
|
|
|
|
// Chosen domain is implicit since each PDMCS instance is a domain.
|
|
// Header.hUser is filled in during call to contain the user handle.
|
|
typedef struct
|
|
{
|
|
IoctlHeader Header; // Contains MCS_ATTACH_USER_REQUEST.
|
|
void *UserDefined;
|
|
} AttachUserRequestIoctl;
|
|
|
|
typedef struct {
|
|
UserHandle hUser;
|
|
UserID UserID; // Valid only if bCompleted is TRUE.
|
|
unsigned MaxSendSize;
|
|
MCSError MCSErr;
|
|
BOOLEAN bCompleted;
|
|
} AttachUserReturnIoctl;
|
|
|
|
// Used only in the case where an attach-user request was sent across the net
|
|
// to the top provider. Hydra 4.0 is always top provider so this is not used.
|
|
typedef struct
|
|
{
|
|
IoctlHeader Header; // Contains MCS_ATTACH_USER_CONFIRM.
|
|
UserHandle hUser;
|
|
void *UserDefined; // As passed into attach-user request.
|
|
MCSResult Result;
|
|
} AttachUserConfirmIoctl;
|
|
|
|
|
|
|
|
/*
|
|
* Detach user
|
|
*/
|
|
|
|
// Passed in by application. This is synchronous -- no confirm is issued.
|
|
typedef struct
|
|
{
|
|
IoctlHeader Header; // Contains MCS_DETACH_USER_REQUEST and the hUser.
|
|
} DetachUserRequestIoctl;
|
|
|
|
// Asynchronous indication triggered when another user detaches.
|
|
typedef struct
|
|
{
|
|
IoctlHeader Header; // Contains MCS_DETACH_USER_INDICATION.
|
|
void *UserDefined; // As passed into attach-user request.
|
|
DetachUserIndication DUin;
|
|
} DetachUserIndicationIoctl;
|
|
|
|
|
|
|
|
/*
|
|
* Channel join
|
|
*/
|
|
|
|
// Passed in by application. Confirm is defined next.
|
|
typedef struct
|
|
{
|
|
IoctlHeader Header; // Contains MCS_CHANNEL_JOIN_REQUEST.
|
|
ChannelID ChannelID;
|
|
} ChannelJoinRequestIoctl;
|
|
|
|
typedef struct
|
|
{
|
|
ChannelHandle hChannel;
|
|
ChannelID ChannelID; // Valid only if bCompleted is TRUE.
|
|
MCSError MCSErr;
|
|
BOOLEAN bCompleted;
|
|
} ChannelJoinReturnIoctl;
|
|
|
|
// Used in the case where a channel-join request is sent across the net to
|
|
// the top provider. Should not be used in Hydra 4.0 -- we are always TP.
|
|
typedef struct
|
|
{
|
|
IoctlHeader Header; // Contains MCS_CHANNEL_JOIN_CONFIRM.
|
|
void *UserDefined; // As passed into attach-user request.
|
|
MCSResult Result;
|
|
ChannelID ChannelID;
|
|
} ChannelJoinConfirmIoctl;
|
|
|
|
|
|
|
|
/*
|
|
* Channel leave
|
|
*/
|
|
|
|
// Passed in by application. This is synchronous -- no confirm is issued.
|
|
typedef struct
|
|
{
|
|
IoctlHeader Header; // Contains MCS_CHANNEL_LEAVE_REQUEST.
|
|
ChannelHandle hChannel;
|
|
} ChannelLeaveRequestIoctl;
|
|
|
|
|
|
|
|
/*
|
|
* (Uniform) send data
|
|
*/
|
|
|
|
// Asynchronous indication triggered when data arrives. Used by both
|
|
// send-data and uniform-send-data indications.
|
|
// Data is packed right after this struct.
|
|
|
|
typedef struct
|
|
{
|
|
IoctlHeader Header; // Contains (UNIFORM)SEND_DATA_INDICATION.
|
|
void *UserDefined; // As passed into attach-user request.
|
|
ChannelHandle hChannel;
|
|
UserID SenderID;
|
|
MCSPriority Priority;
|
|
Segmentation Segmentation;
|
|
unsigned DataLength;
|
|
} SendDataIndicationIoctl;
|
|
|
|
// Passed in by application. This is synchronous -- no confirm is issued.
|
|
// This struct is used both for send-data and uniform-send-data requests.
|
|
typedef struct
|
|
{
|
|
IoctlHeader Header; // Contains (UNIFORM_)MCS_SEND_DATA_REQUEST.
|
|
DataRequestType RequestType; // Redundant but useful info.
|
|
ChannelHandle hChannel; // Kernel-mode hChannel.
|
|
ChannelID ChannelID; // If hChn==NULL, unjoined chn to send to.
|
|
MCSPriority Priority;
|
|
Segmentation Segmentation;
|
|
unsigned DataLength;
|
|
} SendDataRequestIoctl;
|
|
|
|
|
|
|
|
/*
|
|
* Request and response types for use in differentiating requests.
|
|
*/
|
|
|
|
// User attachment requests.
|
|
// These values must be contiguously numbered, since a dispatch table is used
|
|
// to quickly call handler functions.
|
|
#define MCS_ATTACH_USER_REQUEST 0
|
|
#define MCS_DETACH_USER_REQUEST 1
|
|
#define MCS_CHANNEL_JOIN_REQUEST 2
|
|
#define MCS_CHANNEL_LEAVE_REQUEST 3
|
|
#define MCS_SEND_DATA_REQUEST 4
|
|
#define MCS_UNIFORM_SEND_DATA_REQUEST 5
|
|
#define MCS_CHANNEL_CONVENE_REQUEST 6
|
|
#define MCS_CHANNEL_DISBAND_REQUEST 7
|
|
#define MCS_CHANNEL_ADMIT_REQUEST 8
|
|
#define MCS_CHANNEL_EXPEL_REQUEST 9
|
|
#define MCS_TOKEN_GRAB_REQUEST 10
|
|
#define MCS_TOKEN_INHIBIT_REQUEST 11
|
|
#define MCS_TOKEN_GIVE_REQUEST 12
|
|
#define MCS_TOKEN_GIVE_RESPONSE 13
|
|
#define MCS_TOKEN_PLEASE_REQUEST 14
|
|
#define MCS_TOKEN_RELEASE_REQUEST 15
|
|
#define MCS_TOKEN_TEST_REQUEST 16
|
|
|
|
// NC-only requests.
|
|
#define MCS_CONNECT_PROVIDER_REQUEST 17
|
|
#define MCS_CONNECT_PROVIDER_RESPONSE 18
|
|
#define MCS_DISCONNECT_PROVIDER_REQUEST 19
|
|
|
|
// Startup synchonization trigger. This message is sent when the rest of the
|
|
// system is ready for MCS to start processing inputs.
|
|
#define MCS_T120_START 20
|
|
|
|
|
|
|
|
/*
|
|
* ICA virtual channel definitions for the T.120 input channel.
|
|
*/
|
|
|
|
#define Virtual_T120 "MS_T120"
|
|
#define Virtual_T120ChannelNum 31
|
|
|
|
|
|
|
|
#endif // !defined(__MCSIOCTL_H)
|
|
|