windows-nt/Source/XPSP1/NT/termsrv/remdsk/rds/h/mcspdu.h
2020-09-26 16:20:57 +08:00

613 lines
17 KiB
C

#ifndef _MCSPDU_Module_H_
#define _MCSPDU_Module_H_
#include "msper.h"
#ifdef __cplusplus
extern "C" {
#endif
typedef struct SetOfUserIDs * PSetOfUserIDs;
typedef struct SetOfPDUChannelAttributes * PSetOfPDUChannelAttributes;
typedef struct SetOfChannelIDs * PSetOfChannelIDs;
typedef struct SetOfPDUTokenAttributes * PSetOfPDUTokenAttributes;
typedef struct SetOfTokenIDs * PSetOfTokenIDs;
typedef ASN1uint16_t ChannelID;
typedef ChannelID StaticChannelID;
typedef ChannelID DynamicChannelID;
typedef DynamicChannelID UserID;
typedef DynamicChannelID PrivateChannelID;
typedef DynamicChannelID AssignedChannelID;
typedef ASN1uint16_t TokenID;
typedef enum PDUTokenStatus {
not_in_use = 0,
self_grabbed = 1,
other_grabbed = 2,
self_inhibited = 3,
other_inhibited = 4,
self_recipient = 5,
self_giving = 6,
other_giving = 7,
} PDUTokenStatus;
typedef enum PDUPriority {
TOP_PRIORITY = 0,
HIGH_PRIORITY = 1,
MEDIUM_PRIORITY = 2,
LOW_PRIORITY = 3,
} PDUPriority;
typedef ASN1uint8_t PDUSegmentation;
// #define begin 0x80
// #define end 0x40
typedef enum PDUReason {
rn_domain_disconnected = 0,
rn_provider_initiated = 1,
rn_token_purged = 2,
rn_user_requested = 3,
rn_channel_purged = 4,
} PDUReason;
typedef enum PDUResult {
rt_successful = 0,
rt_domain_merging = 1,
rt_domain_not_hierarchical = 2,
rt_no_such_channel = 3,
rt_no_such_domain = 4,
rt_no_such_user = 5,
rt_not_admitted = 6,
rt_other_user_id = 7,
rt_parameters_unacceptable = 8,
rt_token_not_available = 9,
rt_token_not_possessed = 10,
rt_too_many_channels = 11,
rt_too_many_tokens = 12,
rt_too_many_users = 13,
rt_unspecified_failure = 14,
rt_user_rejected = 15,
} PDUResult;
typedef enum Diagnostic {
dc_inconsistent_merge = 0,
dc_forbidden_pdu_downward = 1,
dc_forbidden_pdu_upward = 2,
dc_invalid_ber_encoding = 3,
dc_invalid_per_encoding = 4,
dc_misrouted_user = 5,
dc_unrequested_confirm = 6,
dc_wrong_transport_priority = 7,
dc_channel_id_conflict = 8,
dc_token_id_conflict = 9,
dc_not_user_id_channel = 10,
dc_too_many_channels = 11,
dc_too_many_tokens = 12,
dc_too_many_users = 13,
} Diagnostic;
typedef struct Given {
TokenID token_id;
UserID recipient;
} Given;
typedef struct Ungivable {
TokenID token_id;
UserID grabber;
} Ungivable;
typedef struct Giving {
TokenID token_id;
UserID grabber;
UserID recipient;
} Giving;
typedef struct Inhibited {
TokenID token_id;
PSetOfUserIDs inhibitors;
} Inhibited;
typedef struct Grabbed {
TokenID token_id;
UserID grabber;
} Grabbed;
typedef struct ChannelAttributesAssigned {
AssignedChannelID channel_id;
} ChannelAttributesAssigned;
typedef struct ChannelAttributesPrivate {
ASN1bool_t joined;
PrivateChannelID channel_id;
UserID manager;
PSetOfUserIDs admitted;
} ChannelAttributesPrivate;
typedef struct ChannelAttributesUserID {
ASN1bool_t joined;
UserID user_id;
} ChannelAttributesUserID;
typedef struct ChannelAttributesStatic {
StaticChannelID channel_id;
} ChannelAttributesStatic;
typedef struct PDUDomainParameters {
ASN1uint32_t max_channel_ids;
ASN1uint32_t max_user_ids;
ASN1uint32_t max_token_ids;
ASN1uint32_t number_priorities;
ASN1uint32_t min_throughput;
ASN1uint32_t max_height;
ASN1uint32_t max_mcspdu_size;
ASN1uint32_t protocol_version;
} PDUDomainParameters;
typedef struct ConnectInitialPDU {
ASN1octetstring_t calling_domain_selector;
ASN1octetstring_t called_domain_selector;
ASN1bool_t upward_flag;
PDUDomainParameters target_parameters;
PDUDomainParameters minimum_parameters;
PDUDomainParameters maximum_parameters;
ASN1octetstring_t user_data;
} ConnectInitialPDU;
typedef struct ConnectResponsePDU {
PDUResult result;
ASN1uint32_t called_connect_id;
PDUDomainParameters domain_parameters;
ASN1octetstring_t user_data;
} ConnectResponsePDU;
typedef struct ConnectAdditionalPDU {
ASN1uint32_t called_connect_id;
PDUPriority data_priority;
} ConnectAdditionalPDU;
typedef struct ConnectResultPDU {
PDUResult result;
} ConnectResultPDU;
typedef struct PlumbDomainIndicationPDU {
ASN1uint32_t height_limit;
} PlumbDomainIndicationPDU;
typedef struct ErectDomainRequestPDU {
ASN1uint32_t sub_height;
ASN1uint32_t sub_interval;
} ErectDomainRequestPDU;
typedef struct PDUChannelAttributes {
ASN1choice_t choice;
union {
# define channel_attributes_static_chosen 1
ChannelAttributesStatic channel_attributes_static;
# define channel_attributes_user_id_chosen 2
ChannelAttributesUserID channel_attributes_user_id;
# define channel_attributes_private_chosen 3
ChannelAttributesPrivate channel_attributes_private;
# define channel_attributes_assigned_chosen 4
ChannelAttributesAssigned channel_attributes_assigned;
} u;
} PDUChannelAttributes;
typedef struct MergeChannelsPDU {
PSetOfPDUChannelAttributes merge_channels;
PSetOfChannelIDs purge_channel_ids;
} MergeChannelsPDU;
typedef MergeChannelsPDU MergeChannelsRequestPDU;
typedef MergeChannelsPDU MergeChannelsConfirmPDU;
typedef struct PurgeChannelIndicationPDU {
PSetOfUserIDs detach_user_ids;
PSetOfChannelIDs purge_channel_ids;
} PurgeChannelIndicationPDU;
typedef struct PDUTokenAttributes {
ASN1choice_t choice;
union {
# define grabbed_chosen 1
Grabbed grabbed;
# define inhibited_chosen 2
Inhibited inhibited;
# define giving_chosen 3
Giving giving;
# define ungivable_chosen 4
Ungivable ungivable;
# define given_chosen 5
Given given;
} u;
} PDUTokenAttributes;
typedef struct SetOfUserIDs {
PSetOfUserIDs next;
UserID value;
} SetOfUserIDs_Element;
typedef struct SetOfPDUChannelAttributes {
PSetOfPDUChannelAttributes next;
PDUChannelAttributes value;
} SetOfPDUChannelAttributes_Element;
typedef struct SetOfChannelIDs {
PSetOfChannelIDs next;
ChannelID value;
} SetOfChannelIDs_Element;
typedef struct SetOfPDUTokenAttributes {
PSetOfPDUTokenAttributes next;
PDUTokenAttributes value;
} SetOfPDUTokenAttributes_Element;
typedef struct SetOfTokenIDs {
PSetOfTokenIDs next;
TokenID value;
} SetOfTokenIDs_Element;
typedef struct MergeTokensPDU {
PSetOfPDUTokenAttributes merge_tokens;
PSetOfTokenIDs purge_token_ids;
} MergeTokensPDU;
typedef MergeTokensPDU MergeTokensRequestPDU;
typedef MergeTokensPDU MergeTokensConfirmPDU;
typedef struct PurgeTokenIndicationPDU {
PSetOfTokenIDs purge_token_ids;
} PurgeTokenIndicationPDU;
typedef struct DisconnectProviderUltimatumPDU {
PDUReason reason;
} DisconnectProviderUltimatumPDU;
typedef struct RejectUltimatumPDU {
Diagnostic diagnostic;
ASN1octetstring_t initial_octets;
} RejectUltimatumPDU;
typedef struct AttachUserRequestPDU {
char placeholder;
} AttachUserRequestPDU;
typedef struct AttachUserConfirmPDU {
union {
ASN1uint16_t bit_mask;
ASN1octet_t o[1];
};
PDUResult result;
# define initiator_present 0x80
UserID initiator;
} AttachUserConfirmPDU;
typedef struct DetachUserRequestPDU {
PDUReason reason;
PSetOfUserIDs user_ids;
} DetachUserPDU;
typedef DetachUserPDU DetachUserRequestPDU;
typedef DetachUserPDU DetachUserIndicationPDU;
typedef struct ChannelJoinRequestPDU {
UserID initiator;
ChannelID channel_id;
} ChannelJoinRequestPDU;
typedef struct ChannelJoinConfirmPDU {
union {
ASN1uint16_t bit_mask;
ASN1octet_t o[1];
};
PDUResult result;
UserID initiator;
ChannelID requested;
# define join_channel_id_present 0x80
ChannelID join_channel_id;
} ChannelJoinConfirmPDU;
typedef struct ChannelLeaveRequestPDU {
PSetOfChannelIDs channel_ids;
} ChannelLeaveRequestPDU;
typedef struct ChannelConveneRequestPDU {
UserID initiator;
} ChannelConveneRequestPDU;
typedef struct ChannelConveneConfirmPDU {
union {
ASN1uint16_t bit_mask;
ASN1octet_t o[1];
};
PDUResult result;
UserID initiator;
# define convene_channel_id_present 0x80
PrivateChannelID convene_channel_id;
} ChannelConveneConfirmPDU;
typedef struct ChannelDisbandRequestPDU {
UserID initiator;
PrivateChannelID channel_id;
} ChannelDisbandRequestPDU;
typedef struct ChannelDisbandIndicationPDU {
PrivateChannelID channel_id;
} ChannelDisbandIndicationPDU;
typedef struct ChannelAdmitRequestPDU {
UserID initiator;
PrivateChannelID channel_id;
PSetOfUserIDs user_ids;
} ChannelAdmitExpelPDU;
typedef ChannelAdmitExpelPDU ChannelAdmitRequestPDU;
typedef ChannelAdmitExpelPDU ChannelAdmitIndicationPDU;
typedef ChannelAdmitExpelPDU ChannelExpelRequestPDU;
typedef struct ChannelExpelIndicationPDU {
PrivateChannelID channel_id;
PSetOfUserIDs user_ids;
} ChannelExpelIndicationPDU;
typedef struct SendDataRequestPDU {
UserID initiator;
ChannelID channel_id;
PDUPriority data_priority;
PDUSegmentation segmentation;
ASN1octetstring_t user_data;
} SendDataRequestPDU;
typedef struct SendDataIndicationPDU {
UserID initiator;
ChannelID channel_id;
PDUPriority data_priority;
PDUSegmentation segmentation;
ASN1octetstring_t user_data;
} SendDataIndicationPDU;
typedef struct UniformSendDataRequestPDU {
UserID initiator;
ChannelID channel_id;
PDUPriority data_priority;
PDUSegmentation segmentation;
ASN1octetstring_t user_data;
} UniformSendDataRequestPDU;
typedef struct UniformSendDataIndicationPDU {
UserID initiator;
ChannelID channel_id;
PDUPriority data_priority;
PDUSegmentation segmentation;
ASN1octetstring_t user_data;
} UniformSendDataIndicationPDU;
typedef struct TokenGrabRequestPDU {
UserID initiator;
TokenID token_id;
} TokenGrabRequestPDU;
typedef struct TokenGrabConfirmPDU {
PDUResult result;
UserID initiator;
TokenID token_id;
PDUTokenStatus token_status;
} TokenGrabConfirmPDU;
typedef struct TokenInhibitRequestPDU {
UserID initiator;
TokenID token_id;
} TokenInhibitRequestPDU;
typedef struct TokenInhibitConfirmPDU {
PDUResult result;
UserID initiator;
TokenID token_id;
PDUTokenStatus token_status;
} TokenInhibitConfirmPDU;
typedef struct TokenGiveRequestPDU {
UserID initiator;
TokenID token_id;
UserID recipient;
} TokenGiveRequestPDU;
typedef struct TokenGiveIndicationPDU {
UserID initiator;
TokenID token_id;
UserID recipient;
} TokenGiveIndicationPDU;
typedef struct TokenGiveResponsePDU {
PDUResult result;
UserID recipient;
TokenID token_id;
} TokenGiveResponsePDU;
typedef struct TokenGiveConfirmPDU {
PDUResult result;
UserID initiator;
TokenID token_id;
PDUTokenStatus token_status;
} TokenGiveConfirmPDU;
typedef struct TokenPleaseRequestPDU {
UserID initiator;
TokenID token_id;
} TokenPleaseRequestPDU;
typedef struct TokenPleaseIndicationPDU {
UserID initiator;
TokenID token_id;
} TokenPleaseIndicationPDU;
typedef struct TokenReleaseRequestPDU {
UserID initiator;
TokenID token_id;
} TokenReleaseRequestPDU;
typedef struct TokenReleaseConfirmPDU {
PDUResult result;
UserID initiator;
TokenID token_id;
PDUTokenStatus token_status;
} TokenReleaseConfirmPDU;
typedef struct TokenTestRequestPDU {
UserID initiator;
TokenID token_id;
} TokenTestRequestPDU;
typedef struct TokenTestConfirmPDU {
UserID initiator;
TokenID token_id;
PDUTokenStatus token_status;
} TokenTestConfirmPDU;
typedef struct ConnectMCSPDU {
ASN1choice_t choice;
union {
# define connect_initial_chosen 1
ConnectInitialPDU connect_initial;
# define connect_response_chosen 2
ConnectResponsePDU connect_response;
# define connect_additional_chosen 3
ConnectAdditionalPDU connect_additional;
# define connect_result_chosen 4
ConnectResultPDU connect_result;
} u;
} ConnectMCSPDU;
#define ConnectMCSPDU_PDU 0
#define SIZE_MCSPDU_Module_PDU_0 sizeof(ConnectMCSPDU)
typedef struct DomainMCSPDU {
ASN1choice_t choice;
union {
# define plumb_domain_indication_chosen 1
PlumbDomainIndicationPDU plumb_domain_indication;
# define erect_domain_request_chosen 2
ErectDomainRequestPDU erect_domain_request;
# define merge_channels_request_chosen 3
MergeChannelsRequestPDU merge_channels_request;
# define merge_channels_confirm_chosen 4
MergeChannelsConfirmPDU merge_channels_confirm;
# define purge_channel_indication_chosen 5
PurgeChannelIndicationPDU purge_channel_indication;
# define merge_tokens_request_chosen 6
MergeTokensRequestPDU merge_tokens_request;
# define merge_tokens_confirm_chosen 7
MergeTokensConfirmPDU merge_tokens_confirm;
# define purge_token_indication_chosen 8
PurgeTokenIndicationPDU purge_token_indication;
# define disconnect_provider_ultimatum_chosen 9
DisconnectProviderUltimatumPDU disconnect_provider_ultimatum;
# define reject_user_ultimatum_chosen 10
RejectUltimatumPDU reject_user_ultimatum;
# define attach_user_request_chosen 11
AttachUserRequestPDU attach_user_request;
# define attach_user_confirm_chosen 12
AttachUserConfirmPDU attach_user_confirm;
# define detach_user_request_chosen 13
DetachUserRequestPDU detach_user_request;
# define detach_user_indication_chosen 14
DetachUserIndicationPDU detach_user_indication;
# define channel_join_request_chosen 15
ChannelJoinRequestPDU channel_join_request;
# define channel_join_confirm_chosen 16
ChannelJoinConfirmPDU channel_join_confirm;
# define channel_leave_request_chosen 17
ChannelLeaveRequestPDU channel_leave_request;
# define channel_convene_request_chosen 18
ChannelConveneRequestPDU channel_convene_request;
# define channel_convene_confirm_chosen 19
ChannelConveneConfirmPDU channel_convene_confirm;
# define channel_disband_request_chosen 20
ChannelDisbandRequestPDU channel_disband_request;
# define channel_disband_indication_chosen 21
ChannelDisbandIndicationPDU channel_disband_indication;
# define channel_admit_request_chosen 22
ChannelAdmitRequestPDU channel_admit_request;
# define channel_admit_indication_chosen 23
ChannelAdmitIndicationPDU channel_admit_indication;
# define channel_expel_request_chosen 24
ChannelExpelRequestPDU channel_expel_request;
# define channel_expel_indication_chosen 25
ChannelExpelIndicationPDU channel_expel_indication;
# define send_data_request_chosen 26
SendDataRequestPDU send_data_request;
# define send_data_indication_chosen 27
SendDataIndicationPDU send_data_indication;
# define uniform_send_data_request_chosen 28
UniformSendDataRequestPDU uniform_send_data_request;
# define uniform_send_data_indication_chosen 29
UniformSendDataIndicationPDU uniform_send_data_indication;
# define token_grab_request_chosen 30
TokenGrabRequestPDU token_grab_request;
# define token_grab_confirm_chosen 31
TokenGrabConfirmPDU token_grab_confirm;
# define token_inhibit_request_chosen 32
TokenInhibitRequestPDU token_inhibit_request;
# define token_inhibit_confirm_chosen 33
TokenInhibitConfirmPDU token_inhibit_confirm;
# define token_give_request_chosen 34
TokenGiveRequestPDU token_give_request;
# define token_give_indication_chosen 35
TokenGiveIndicationPDU token_give_indication;
# define token_give_response_chosen 36
TokenGiveResponsePDU token_give_response;
# define token_give_confirm_chosen 37
TokenGiveConfirmPDU token_give_confirm;
# define token_please_request_chosen 38
TokenPleaseRequestPDU token_please_request;
# define token_please_indication_chosen 39
TokenPleaseIndicationPDU token_please_indication;
# define token_release_request_chosen 40
TokenReleaseRequestPDU token_release_request;
# define token_release_confirm_chosen 41
TokenReleaseConfirmPDU token_release_confirm;
# define token_test_request_chosen 42
TokenTestRequestPDU token_test_request;
# define token_test_confirm_chosen 43
TokenTestConfirmPDU token_test_confirm;
} u;
} DomainMCSPDU;
#define DomainMCSPDU_PDU 1
#define SIZE_MCSPDU_Module_PDU_1 sizeof(DomainMCSPDU)
extern ASN1module_t MCSPDU_Module;
extern void ASN1CALL MCSPDU_Module_Startup(void);
extern void ASN1CALL MCSPDU_Module_Cleanup(void);
/* Prototypes of element functions for SEQUENCE OF and SET OF constructs */
extern int ASN1CALL ASN1Enc_SetOfUserIDs_ElmFn(ASN1encoding_t enc, PSetOfUserIDs val);
extern int ASN1CALL ASN1Dec_SetOfUserIDs_ElmFn(ASN1decoding_t dec, PSetOfUserIDs val);
extern void ASN1CALL ASN1Free_SetOfUserIDs_ElmFn(PSetOfUserIDs val);
extern int ASN1CALL ASN1Enc_SetOfPDUChannelAttributes_ElmFn(ASN1encoding_t enc, PSetOfPDUChannelAttributes val);
extern int ASN1CALL ASN1Dec_SetOfPDUChannelAttributes_ElmFn(ASN1decoding_t dec, PSetOfPDUChannelAttributes val);
extern void ASN1CALL ASN1Free_SetOfPDUChannelAttributes_ElmFn(PSetOfPDUChannelAttributes val);
extern int ASN1CALL ASN1Enc_SetOfChannelIDs_ElmFn(ASN1encoding_t enc, PSetOfChannelIDs val);
extern int ASN1CALL ASN1Dec_SetOfChannelIDs_ElmFn(ASN1decoding_t dec, PSetOfChannelIDs val);
extern void ASN1CALL ASN1Free_SetOfChannelIDs_ElmFn(PSetOfChannelIDs val);
extern int ASN1CALL ASN1Enc_SetOfPDUTokenAttributes_ElmFn(ASN1encoding_t enc, PSetOfPDUTokenAttributes val);
extern int ASN1CALL ASN1Dec_SetOfPDUTokenAttributes_ElmFn(ASN1decoding_t dec, PSetOfPDUTokenAttributes val);
extern void ASN1CALL ASN1Free_SetOfPDUTokenAttributes_ElmFn(PSetOfPDUTokenAttributes val);
extern int ASN1CALL ASN1Enc_SetOfTokenIDs_ElmFn(ASN1encoding_t enc, PSetOfTokenIDs val);
extern int ASN1CALL ASN1Dec_SetOfTokenIDs_ElmFn(ASN1decoding_t dec, PSetOfTokenIDs val);
extern void ASN1CALL ASN1Free_SetOfTokenIDs_ElmFn(PSetOfTokenIDs val);
#ifdef __cplusplus
} /* extern "C" */
#endif
#endif /* _MCSPDU_Module_H_ */