#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 { UINT_PTR 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_ */