%% Generated by the Erlang ASN.1 BER compiler. Version: 5.1 %% Purpose: Encoding and decoding of the types in IPMSInformationObjects. -module('IPMSInformationObjects'). -compile(nowarn_unused_vars). -dialyzer(no_improper_lists). -dialyzer(no_match). -include("IPMSInformationObjects.hrl"). -asn1_info([{vsn,'5.1'}, {module,'IPMSInformationObjects'}, {options,[warnings,ber,errors, {cwd,"/Users/maxim/depot/synrc/mail/priv/mhs"}, {outdir,"/Users/maxim/depot/synrc/mail/priv/mhs"}, {i,"."}, {i,"/Users/maxim/depot/synrc/mail/priv/mhs"}]}]). -export([encoding_rule/0,maps/0,bit_string_format/0, legacy_erlang_types/0]). -export(['dialyzer-suppressions'/1]). -export([ enc_Time/2, enc_InformationObject/2, enc_IPM/2, enc_Heading/2, enc_IPMIdentifier/2, enc_LocalIPMIdentifier/2, enc_RecipientSpecifier/2, enc_ORDescriptor/2, enc_FreeFormName/2, enc_TelephoneNumber/2, enc_NotificationRequests/2, enc_RecipientExtensionsField/2, enc_ThisIPMField/2, enc_OriginatorField/2, enc_AuthorizingUsersField/2, enc_AuthorizingUsersSubfield/2, enc_PrimaryRecipientsField/2, enc_PrimaryRecipientsSubfield/2, enc_CopyRecipientsField/2, enc_CopyRecipientsSubfield/2, enc_BlindCopyRecipientsField/2, enc_BlindCopyRecipientsSubfield/2, enc_RepliedToIPMField/2, enc_ObsoletedIPMsField/2, enc_ObsoletedIPMsSubfield/2, enc_RelatedIPMsField/2, enc_RelatedIPMsSubfield/2, enc_SubjectField/2, enc_ExpiryTimeField/2, enc_ReplyTimeField/2, enc_ReplyRecipientsField/2, enc_ReplyRecipientsSubfield/2, enc_ImportanceField/2, enc_SensitivityField/2, enc_AutoForwardedField/2, enc_ExtensionsField/2, enc_Body/2, enc_BodyPart/2, enc_IA5TextBodyPart/2, enc_IA5TextParameters/2, enc_IA5TextData/2, enc_Repertoire/2, enc_G3FacsimileBodyPart/2, enc_G3FacsimileParameters/2, enc_G3FacsimileData/2, enc_G4Class1BodyPart/2, enc_MixedModeBodyPart/2, enc_TeletexBodyPart/2, enc_TeletexParameters/2, enc_TeletexData/2, enc_VideotexBodyPart/2, enc_VideotexParameters/2, enc_VideotexSyntax/2, enc_VideotexData/2, enc_EncryptedBodyPart/2, enc_EncryptedParameters/2, enc_EncryptedData/2, enc_MessageBodyPart/2, enc_MessageParameters/2, enc_MessageData/2, enc_BilaterallyDefinedBodyPart/2, enc_NationallyDefinedBodyPart/2, enc_IPN/2, enc_RN/2, enc_NRN/2, enc_ON/2, enc_CommonFields/2, enc_NonReceiptFields/2, enc_ReceiptFields/2, enc_SubjectIPMField/2, enc_IPNOriginatorField/2, enc_IPMIntendedRecipientField/2, enc_ConversionEITsField/2, enc_NotificationExtensionsField/2, enc_NonReceiptReasonField/2, enc_DiscardReasonField/2, enc_AutoForwardCommentField/2, enc_AutoForwardComment/2, enc_ReturnedIPMField/2, enc_NRNExtensionsField/2, enc_ReceiptTimeField/2, enc_AcknowledgmentModeField/2, enc_SupplReceiptInfoField/2, enc_RNExtensionsField/2, enc_OtherNotificationTypeFields/2, enc_AbsenceAdvice/2, enc_ChangeOfAddressAdvice/2, enc_IPMAssemblyInstructions/2, enc_BodyPartReferences/2, enc_BodyPartReference/2, enc_EXTERNAL/2, 'enc_INSTANCE OF'/2 ]). -export([ dec_Time/2, dec_InformationObject/2, dec_IPM/2, dec_Heading/2, dec_IPMIdentifier/2, dec_LocalIPMIdentifier/2, dec_RecipientSpecifier/2, dec_ORDescriptor/2, dec_FreeFormName/2, dec_TelephoneNumber/2, dec_NotificationRequests/2, dec_RecipientExtensionsField/2, dec_ThisIPMField/2, dec_OriginatorField/2, dec_AuthorizingUsersField/2, dec_AuthorizingUsersSubfield/2, dec_PrimaryRecipientsField/2, dec_PrimaryRecipientsSubfield/2, dec_CopyRecipientsField/2, dec_CopyRecipientsSubfield/2, dec_BlindCopyRecipientsField/2, dec_BlindCopyRecipientsSubfield/2, dec_RepliedToIPMField/2, dec_ObsoletedIPMsField/2, dec_ObsoletedIPMsSubfield/2, dec_RelatedIPMsField/2, dec_RelatedIPMsSubfield/2, dec_SubjectField/2, dec_ExpiryTimeField/2, dec_ReplyTimeField/2, dec_ReplyRecipientsField/2, dec_ReplyRecipientsSubfield/2, dec_ImportanceField/2, dec_SensitivityField/2, dec_AutoForwardedField/2, dec_ExtensionsField/2, dec_Body/2, dec_BodyPart/2, dec_IA5TextBodyPart/2, dec_IA5TextParameters/2, dec_IA5TextData/2, dec_Repertoire/2, dec_G3FacsimileBodyPart/2, dec_G3FacsimileParameters/2, dec_G3FacsimileData/2, dec_G4Class1BodyPart/2, dec_MixedModeBodyPart/2, dec_TeletexBodyPart/2, dec_TeletexParameters/2, dec_TeletexData/2, dec_VideotexBodyPart/2, dec_VideotexParameters/2, dec_VideotexSyntax/2, dec_VideotexData/2, dec_EncryptedBodyPart/2, dec_EncryptedParameters/2, dec_EncryptedData/2, dec_MessageBodyPart/2, dec_MessageParameters/2, dec_MessageData/2, dec_BilaterallyDefinedBodyPart/2, dec_NationallyDefinedBodyPart/2, dec_IPN/2, dec_RN/2, dec_NRN/2, dec_ON/2, dec_CommonFields/2, dec_NonReceiptFields/2, dec_ReceiptFields/2, dec_SubjectIPMField/2, dec_IPNOriginatorField/2, dec_IPMIntendedRecipientField/2, dec_ConversionEITsField/2, dec_NotificationExtensionsField/2, dec_NonReceiptReasonField/2, dec_DiscardReasonField/2, dec_AutoForwardCommentField/2, dec_AutoForwardComment/2, dec_ReturnedIPMField/2, dec_NRNExtensionsField/2, dec_ReceiptTimeField/2, dec_AcknowledgmentModeField/2, dec_SupplReceiptInfoField/2, dec_RNExtensionsField/2, dec_OtherNotificationTypeFields/2, dec_AbsenceAdvice/2, dec_ChangeOfAddressAdvice/2, dec_IPMAssemblyInstructions/2, dec_BodyPartReferences/2, dec_BodyPartReference/2, dec_EXTERNAL/2, 'dec_INSTANCE OF'/2 ]). -export([ 'enc_blind-copy-recipients'/3, 'enc_absence-advice'/3, 'enc_change-of-address-advice'/3, 'enc_prevent-nrn-generation'/3, 'enc_suspend-auto-acknowledgement'/3, 'enc_assembly-capability'/3, 'enc_ipm-assembly-instructions'/3, 'enc_originator-body-part-encryption-token'/3, 'enc_originator-forwarded-content-token'/3, 'enc_invalid-assembly-instructions'/3, 'enc_invalid-ipn'/3, enc_IPMBodyPartTable_parameters/3, enc_BodyPart_parameters/3, enc_StandardBodyParts_parameters/3, enc_IPMBodyPartTable_data/3, enc_BodyPart_data/3, enc_StandardBodyParts_data/3 ]). -export([ 'dec_blind-copy-recipients'/3, 'dec_absence-advice'/3, 'dec_change-of-address-advice'/3, 'dec_prevent-nrn-generation'/3, 'dec_suspend-auto-acknowledgement'/3, 'dec_assembly-capability'/3, 'dec_ipm-assembly-instructions'/3, 'dec_originator-body-part-encryption-token'/3, 'dec_originator-forwarded-content-token'/3, 'dec_invalid-assembly-instructions'/3, 'dec_invalid-ipn'/3, dec_IPMBodyPartTable_parameters/3, dec_BodyPart_parameters/3, dec_StandardBodyParts_parameters/3, dec_IPMBodyPartTable_data/3, dec_BodyPart_data/3, dec_StandardBodyParts_data/3 ]). -export([ getenc_IPMPerRecipientEnvelopeExtensions/1, getenc_PrivateIPMSExtensions/1, getenc_RecipientExtensions/1, getenc_HeadingExtensions/1, getenc_NotificationExtensions/1, getenc_NRNExtensions/1, getenc_RNExtensions/1, getenc_OtherNotifications/1, getenc_AdviceNotifications/1, getenc_IPMSubmissionOptions/1, getenc_IPMSubmissionErrors/1, getenc_internal_object_set_argument_8/1, getenc_internal_object_set_argument_7/1, getenc_internal_object_set_argument_6/1, getenc_internal_object_set_argument_5/1, getenc_internal_object_set_argument_2/1, getenc_internal_object_set_argument_1/1 ]). -export([ getdec_IPMPerRecipientEnvelopeExtensions/1, getdec_PrivateIPMSExtensions/1, getdec_RecipientExtensions/1, getdec_HeadingExtensions/1, getdec_NotificationExtensions/1, getdec_NRNExtensions/1, getdec_RNExtensions/1, getdec_OtherNotifications/1, getdec_AdviceNotifications/1, getdec_IPMSubmissionOptions/1, getdec_IPMSubmissionErrors/1, getdec_internal_object_set_argument_8/1, getdec_internal_object_set_argument_7/1, getdec_internal_object_set_argument_6/1, getdec_internal_object_set_argument_5/1, getdec_internal_object_set_argument_2/1, getdec_internal_object_set_argument_1/1 ]). -export([info/0]). -export([encode/2,decode/2]). encoding_rule() -> ber. maps() -> false. bit_string_format() -> bitstring. legacy_erlang_types() -> false. encode(Type, Data) -> try iolist_to_binary(element(1, encode_disp(Type, Data))) of Bytes -> {ok,Bytes} catch Class:Exception:Stk when Class =:= error; Class =:= exit -> case Exception of {error,{asn1,Reason}} -> {error,{asn1,{Reason,Stk}}}; Reason -> {error,{asn1,{Reason,Stk}}} end end. decode(Type, Data) -> try Result = decode_disp(Type, element(1, ber_decode_nif(Data))), {ok,Result} catch Class:Exception:Stk when Class =:= error; Class =:= exit -> case Exception of {error,{asn1,Reason}} -> {error,{asn1,{Reason,Stk}}}; Reason -> {error,{asn1,{Reason,Stk}}} end end. encode_disp('Time', Data) -> enc_Time(Data); encode_disp('InformationObject', Data) -> enc_InformationObject(Data); encode_disp('IPM', Data) -> enc_IPM(Data); encode_disp('Heading', Data) -> enc_Heading(Data); encode_disp('IPMIdentifier', Data) -> enc_IPMIdentifier(Data); encode_disp('LocalIPMIdentifier', Data) -> enc_LocalIPMIdentifier(Data); encode_disp('RecipientSpecifier', Data) -> enc_RecipientSpecifier(Data); encode_disp('ORDescriptor', Data) -> enc_ORDescriptor(Data); encode_disp('FreeFormName', Data) -> enc_FreeFormName(Data); encode_disp('TelephoneNumber', Data) -> enc_TelephoneNumber(Data); encode_disp('NotificationRequests', Data) -> enc_NotificationRequests(Data); encode_disp('RecipientExtensionsField', Data) -> enc_RecipientExtensionsField(Data); encode_disp('ThisIPMField', Data) -> enc_ThisIPMField(Data); encode_disp('OriginatorField', Data) -> enc_OriginatorField(Data); encode_disp('AuthorizingUsersField', Data) -> enc_AuthorizingUsersField(Data); encode_disp('AuthorizingUsersSubfield', Data) -> enc_AuthorizingUsersSubfield(Data); encode_disp('PrimaryRecipientsField', Data) -> enc_PrimaryRecipientsField(Data); encode_disp('PrimaryRecipientsSubfield', Data) -> enc_PrimaryRecipientsSubfield(Data); encode_disp('CopyRecipientsField', Data) -> enc_CopyRecipientsField(Data); encode_disp('CopyRecipientsSubfield', Data) -> enc_CopyRecipientsSubfield(Data); encode_disp('BlindCopyRecipientsField', Data) -> enc_BlindCopyRecipientsField(Data); encode_disp('BlindCopyRecipientsSubfield', Data) -> enc_BlindCopyRecipientsSubfield(Data); encode_disp('RepliedToIPMField', Data) -> enc_RepliedToIPMField(Data); encode_disp('ObsoletedIPMsField', Data) -> enc_ObsoletedIPMsField(Data); encode_disp('ObsoletedIPMsSubfield', Data) -> enc_ObsoletedIPMsSubfield(Data); encode_disp('RelatedIPMsField', Data) -> enc_RelatedIPMsField(Data); encode_disp('RelatedIPMsSubfield', Data) -> enc_RelatedIPMsSubfield(Data); encode_disp('SubjectField', Data) -> enc_SubjectField(Data); encode_disp('ExpiryTimeField', Data) -> enc_ExpiryTimeField(Data); encode_disp('ReplyTimeField', Data) -> enc_ReplyTimeField(Data); encode_disp('ReplyRecipientsField', Data) -> enc_ReplyRecipientsField(Data); encode_disp('ReplyRecipientsSubfield', Data) -> enc_ReplyRecipientsSubfield(Data); encode_disp('ImportanceField', Data) -> enc_ImportanceField(Data); encode_disp('SensitivityField', Data) -> enc_SensitivityField(Data); encode_disp('AutoForwardedField', Data) -> enc_AutoForwardedField(Data); encode_disp('ExtensionsField', Data) -> enc_ExtensionsField(Data); encode_disp('Body', Data) -> enc_Body(Data); encode_disp('BodyPart', Data) -> enc_BodyPart(Data); encode_disp('IA5TextBodyPart', Data) -> enc_IA5TextBodyPart(Data); encode_disp('IA5TextParameters', Data) -> enc_IA5TextParameters(Data); encode_disp('IA5TextData', Data) -> enc_IA5TextData(Data); encode_disp('Repertoire', Data) -> enc_Repertoire(Data); encode_disp('G3FacsimileBodyPart', Data) -> enc_G3FacsimileBodyPart(Data); encode_disp('G3FacsimileParameters', Data) -> enc_G3FacsimileParameters(Data); encode_disp('G3FacsimileData', Data) -> enc_G3FacsimileData(Data); encode_disp('G4Class1BodyPart', Data) -> enc_G4Class1BodyPart(Data); encode_disp('MixedModeBodyPart', Data) -> enc_MixedModeBodyPart(Data); encode_disp('TeletexBodyPart', Data) -> enc_TeletexBodyPart(Data); encode_disp('TeletexParameters', Data) -> enc_TeletexParameters(Data); encode_disp('TeletexData', Data) -> enc_TeletexData(Data); encode_disp('VideotexBodyPart', Data) -> enc_VideotexBodyPart(Data); encode_disp('VideotexParameters', Data) -> enc_VideotexParameters(Data); encode_disp('VideotexSyntax', Data) -> enc_VideotexSyntax(Data); encode_disp('VideotexData', Data) -> enc_VideotexData(Data); encode_disp('EncryptedBodyPart', Data) -> enc_EncryptedBodyPart(Data); encode_disp('EncryptedParameters', Data) -> enc_EncryptedParameters(Data); encode_disp('EncryptedData', Data) -> enc_EncryptedData(Data); encode_disp('MessageBodyPart', Data) -> enc_MessageBodyPart(Data); encode_disp('MessageParameters', Data) -> enc_MessageParameters(Data); encode_disp('MessageData', Data) -> enc_MessageData(Data); encode_disp('BilaterallyDefinedBodyPart', Data) -> enc_BilaterallyDefinedBodyPart(Data); encode_disp('NationallyDefinedBodyPart', Data) -> enc_NationallyDefinedBodyPart(Data); encode_disp('IPN', Data) -> enc_IPN(Data); encode_disp('RN', Data) -> enc_RN(Data); encode_disp('NRN', Data) -> enc_NRN(Data); encode_disp('ON', Data) -> enc_ON(Data); encode_disp('CommonFields', Data) -> enc_CommonFields(Data); encode_disp('NonReceiptFields', Data) -> enc_NonReceiptFields(Data); encode_disp('ReceiptFields', Data) -> enc_ReceiptFields(Data); encode_disp('SubjectIPMField', Data) -> enc_SubjectIPMField(Data); encode_disp('IPNOriginatorField', Data) -> enc_IPNOriginatorField(Data); encode_disp('IPMIntendedRecipientField', Data) -> enc_IPMIntendedRecipientField(Data); encode_disp('ConversionEITsField', Data) -> enc_ConversionEITsField(Data); encode_disp('NotificationExtensionsField', Data) -> enc_NotificationExtensionsField(Data); encode_disp('NonReceiptReasonField', Data) -> enc_NonReceiptReasonField(Data); encode_disp('DiscardReasonField', Data) -> enc_DiscardReasonField(Data); encode_disp('AutoForwardCommentField', Data) -> enc_AutoForwardCommentField(Data); encode_disp('AutoForwardComment', Data) -> enc_AutoForwardComment(Data); encode_disp('ReturnedIPMField', Data) -> enc_ReturnedIPMField(Data); encode_disp('NRNExtensionsField', Data) -> enc_NRNExtensionsField(Data); encode_disp('ReceiptTimeField', Data) -> enc_ReceiptTimeField(Data); encode_disp('AcknowledgmentModeField', Data) -> enc_AcknowledgmentModeField(Data); encode_disp('SupplReceiptInfoField', Data) -> enc_SupplReceiptInfoField(Data); encode_disp('RNExtensionsField', Data) -> enc_RNExtensionsField(Data); encode_disp('OtherNotificationTypeFields', Data) -> enc_OtherNotificationTypeFields(Data); encode_disp('AbsenceAdvice', Data) -> enc_AbsenceAdvice(Data); encode_disp('ChangeOfAddressAdvice', Data) -> enc_ChangeOfAddressAdvice(Data); encode_disp('IPMAssemblyInstructions', Data) -> enc_IPMAssemblyInstructions(Data); encode_disp('BodyPartReferences', Data) -> enc_BodyPartReferences(Data); encode_disp('BodyPartReference', Data) -> enc_BodyPartReference(Data); encode_disp('EXTERNAL', Data) -> enc_EXTERNAL(Data); encode_disp('INSTANCE OF', Data) -> 'enc_INSTANCE OF'(Data); encode_disp(Type, _Data) -> exit({error,{asn1,{undefined_type,Type}}}). decode_disp('Time', Data) -> dec_Time(Data); decode_disp('InformationObject', Data) -> dec_InformationObject(Data); decode_disp('IPM', Data) -> dec_IPM(Data); decode_disp('Heading', Data) -> dec_Heading(Data); decode_disp('IPMIdentifier', Data) -> dec_IPMIdentifier(Data); decode_disp('LocalIPMIdentifier', Data) -> dec_LocalIPMIdentifier(Data); decode_disp('RecipientSpecifier', Data) -> dec_RecipientSpecifier(Data); decode_disp('ORDescriptor', Data) -> dec_ORDescriptor(Data); decode_disp('FreeFormName', Data) -> dec_FreeFormName(Data); decode_disp('TelephoneNumber', Data) -> dec_TelephoneNumber(Data); decode_disp('NotificationRequests', Data) -> dec_NotificationRequests(Data); decode_disp('RecipientExtensionsField', Data) -> dec_RecipientExtensionsField(Data); decode_disp('ThisIPMField', Data) -> dec_ThisIPMField(Data); decode_disp('OriginatorField', Data) -> dec_OriginatorField(Data); decode_disp('AuthorizingUsersField', Data) -> dec_AuthorizingUsersField(Data); decode_disp('AuthorizingUsersSubfield', Data) -> dec_AuthorizingUsersSubfield(Data); decode_disp('PrimaryRecipientsField', Data) -> dec_PrimaryRecipientsField(Data); decode_disp('PrimaryRecipientsSubfield', Data) -> dec_PrimaryRecipientsSubfield(Data); decode_disp('CopyRecipientsField', Data) -> dec_CopyRecipientsField(Data); decode_disp('CopyRecipientsSubfield', Data) -> dec_CopyRecipientsSubfield(Data); decode_disp('BlindCopyRecipientsField', Data) -> dec_BlindCopyRecipientsField(Data); decode_disp('BlindCopyRecipientsSubfield', Data) -> dec_BlindCopyRecipientsSubfield(Data); decode_disp('RepliedToIPMField', Data) -> dec_RepliedToIPMField(Data); decode_disp('ObsoletedIPMsField', Data) -> dec_ObsoletedIPMsField(Data); decode_disp('ObsoletedIPMsSubfield', Data) -> dec_ObsoletedIPMsSubfield(Data); decode_disp('RelatedIPMsField', Data) -> dec_RelatedIPMsField(Data); decode_disp('RelatedIPMsSubfield', Data) -> dec_RelatedIPMsSubfield(Data); decode_disp('SubjectField', Data) -> dec_SubjectField(Data); decode_disp('ExpiryTimeField', Data) -> dec_ExpiryTimeField(Data); decode_disp('ReplyTimeField', Data) -> dec_ReplyTimeField(Data); decode_disp('ReplyRecipientsField', Data) -> dec_ReplyRecipientsField(Data); decode_disp('ReplyRecipientsSubfield', Data) -> dec_ReplyRecipientsSubfield(Data); decode_disp('ImportanceField', Data) -> dec_ImportanceField(Data); decode_disp('SensitivityField', Data) -> dec_SensitivityField(Data); decode_disp('AutoForwardedField', Data) -> dec_AutoForwardedField(Data); decode_disp('ExtensionsField', Data) -> dec_ExtensionsField(Data); decode_disp('Body', Data) -> dec_Body(Data); decode_disp('BodyPart', Data) -> dec_BodyPart(Data); decode_disp('IA5TextBodyPart', Data) -> dec_IA5TextBodyPart(Data); decode_disp('IA5TextParameters', Data) -> dec_IA5TextParameters(Data); decode_disp('IA5TextData', Data) -> dec_IA5TextData(Data); decode_disp('Repertoire', Data) -> dec_Repertoire(Data); decode_disp('G3FacsimileBodyPart', Data) -> dec_G3FacsimileBodyPart(Data); decode_disp('G3FacsimileParameters', Data) -> dec_G3FacsimileParameters(Data); decode_disp('G3FacsimileData', Data) -> dec_G3FacsimileData(Data); decode_disp('G4Class1BodyPart', Data) -> dec_G4Class1BodyPart(Data); decode_disp('MixedModeBodyPart', Data) -> dec_MixedModeBodyPart(Data); decode_disp('TeletexBodyPart', Data) -> dec_TeletexBodyPart(Data); decode_disp('TeletexParameters', Data) -> dec_TeletexParameters(Data); decode_disp('TeletexData', Data) -> dec_TeletexData(Data); decode_disp('VideotexBodyPart', Data) -> dec_VideotexBodyPart(Data); decode_disp('VideotexParameters', Data) -> dec_VideotexParameters(Data); decode_disp('VideotexSyntax', Data) -> dec_VideotexSyntax(Data); decode_disp('VideotexData', Data) -> dec_VideotexData(Data); decode_disp('EncryptedBodyPart', Data) -> dec_EncryptedBodyPart(Data); decode_disp('EncryptedParameters', Data) -> dec_EncryptedParameters(Data); decode_disp('EncryptedData', Data) -> dec_EncryptedData(Data); decode_disp('MessageBodyPart', Data) -> dec_MessageBodyPart(Data); decode_disp('MessageParameters', Data) -> dec_MessageParameters(Data); decode_disp('MessageData', Data) -> dec_MessageData(Data); decode_disp('BilaterallyDefinedBodyPart', Data) -> dec_BilaterallyDefinedBodyPart(Data); decode_disp('NationallyDefinedBodyPart', Data) -> dec_NationallyDefinedBodyPart(Data); decode_disp('IPN', Data) -> dec_IPN(Data); decode_disp('RN', Data) -> dec_RN(Data); decode_disp('NRN', Data) -> dec_NRN(Data); decode_disp('ON', Data) -> dec_ON(Data); decode_disp('CommonFields', Data) -> dec_CommonFields(Data); decode_disp('NonReceiptFields', Data) -> dec_NonReceiptFields(Data); decode_disp('ReceiptFields', Data) -> dec_ReceiptFields(Data); decode_disp('SubjectIPMField', Data) -> dec_SubjectIPMField(Data); decode_disp('IPNOriginatorField', Data) -> dec_IPNOriginatorField(Data); decode_disp('IPMIntendedRecipientField', Data) -> dec_IPMIntendedRecipientField(Data); decode_disp('ConversionEITsField', Data) -> dec_ConversionEITsField(Data); decode_disp('NotificationExtensionsField', Data) -> dec_NotificationExtensionsField(Data); decode_disp('NonReceiptReasonField', Data) -> dec_NonReceiptReasonField(Data); decode_disp('DiscardReasonField', Data) -> dec_DiscardReasonField(Data); decode_disp('AutoForwardCommentField', Data) -> dec_AutoForwardCommentField(Data); decode_disp('AutoForwardComment', Data) -> dec_AutoForwardComment(Data); decode_disp('ReturnedIPMField', Data) -> dec_ReturnedIPMField(Data); decode_disp('NRNExtensionsField', Data) -> dec_NRNExtensionsField(Data); decode_disp('ReceiptTimeField', Data) -> dec_ReceiptTimeField(Data); decode_disp('AcknowledgmentModeField', Data) -> dec_AcknowledgmentModeField(Data); decode_disp('SupplReceiptInfoField', Data) -> dec_SupplReceiptInfoField(Data); decode_disp('RNExtensionsField', Data) -> dec_RNExtensionsField(Data); decode_disp('OtherNotificationTypeFields', Data) -> dec_OtherNotificationTypeFields(Data); decode_disp('AbsenceAdvice', Data) -> dec_AbsenceAdvice(Data); decode_disp('ChangeOfAddressAdvice', Data) -> dec_ChangeOfAddressAdvice(Data); decode_disp('IPMAssemblyInstructions', Data) -> dec_IPMAssemblyInstructions(Data); decode_disp('BodyPartReferences', Data) -> dec_BodyPartReferences(Data); decode_disp('BodyPartReference', Data) -> dec_BodyPartReference(Data); decode_disp('EXTERNAL', Data) -> dec_EXTERNAL(Data); decode_disp('INSTANCE OF', Data) -> 'dec_INSTANCE OF'(Data); decode_disp(Type, _Data) -> exit({error,{asn1,{undefined_type,Type}}}). info() -> case ?MODULE:module_info(attributes) of Attributes when is_list(Attributes) -> case lists:keyfind(asn1_info, 1, Attributes) of {_,Info} when is_list(Info) -> Info; _ -> [] end; _ -> [] end. %%================================ %% Time %%================================ enc_Time(Val) -> enc_Time(Val, [<<23>>]). enc_Time(Val, TagIn) -> encode_restricted_string(Val, TagIn). dec_Time(Tlv) -> dec_Time(Tlv, [23]). dec_Time(Tlv, TagIn) -> begin binary_to_list(decode_restricted_string(Tlv, TagIn)) end . %%================================ %% InformationObject %%================================ enc_InformationObject(Val) -> enc_InformationObject(Val, []). enc_InformationObject(Val, TagIn) -> {EncBytes,EncLen} = case element(1,Val) of ipm -> 'enc_IPM'(element(2,Val), [<<160>>]); ipn -> 'enc_IPN'(element(2,Val), [<<161>>]); Else -> exit({error,{asn1,{invalid_choice_type,Else}}}) end, encode_tags(TagIn, EncBytes, EncLen). dec_InformationObject(Tlv) -> dec_InformationObject(Tlv, []). dec_InformationObject(Tlv, TagIn) -> Tlv1 = match_tags(Tlv, TagIn), case (case Tlv1 of [CtempTlv1] -> CtempTlv1; _ -> Tlv1 end) of %% 'ipm' {131072, V1} -> {ipm, 'dec_IPM'(V1, [])}; %% 'ipn' {131073, V1} -> {ipn, 'dec_IPN'(V1, [])}; Else -> exit({error,{asn1,{invalid_choice_tag,Else}}}) end . %%================================ %% IPM %%================================ enc_IPM(Val) -> enc_IPM(Val, [<<48>>]). enc_IPM(Val, TagIn) -> {_,Cindex1,Cindex2} = Val, %%------------------------------------------------- %% attribute heading(1) External IPMSInformationObjects:Heading %%------------------------------------------------- {EncBytes1,EncLen1} = 'enc_Heading'(Cindex1, [<<49>>]), %%------------------------------------------------- %% attribute body(2) External IPMSInformationObjects:Body %%------------------------------------------------- {EncBytes2,EncLen2} = 'enc_Body'(Cindex2, [<<48>>]), BytesSoFar = [EncBytes1, EncBytes2], LenSoFar = EncLen1 + EncLen2, encode_tags(TagIn, BytesSoFar, LenSoFar). dec_IPM(Tlv) -> dec_IPM(Tlv, [16]). dec_IPM(Tlv, TagIn) -> %%------------------------------------------------- %% decode tag and length %%------------------------------------------------- Tlv1 = match_tags(Tlv, TagIn), %%------------------------------------------------- %% attribute heading(1) External IPMSInformationObjects:Heading %%------------------------------------------------- [V1|Tlv2] = Tlv1, Term1 = 'dec_Heading'(V1, [17]), %%------------------------------------------------- %% attribute body(2) External IPMSInformationObjects:Body %%------------------------------------------------- [V2|Tlv3] = Tlv2, Term2 = 'dec_Body'(V2, [16]), case Tlv3 of [] -> true;_ -> exit({error,{asn1, {unexpected,Tlv3}}}) % extra fields not allowed end, Res1 = {'IPM',Term1,Term2}, Res1. %%================================ %% Heading %%================================ enc_Heading(Val) -> enc_Heading(Val, [<<49>>]). enc_Heading(Val, TagIn) -> {_,Cindex1,Cindex2,Cindex3,Cindex4,Cindex5,Cindex6,Cindex7,Cindex8,Cindex9,Cindex10,Cindex11,Cindex12,Cindex13,Cindex14,Cindex15,Cindex16,Cindex17} = Val, %%------------------------------------------------- %% attribute this-IPM(1) External IPMSInformationObjects:ThisIPMField %%------------------------------------------------- {EncBytes1,EncLen1} = 'enc_ThisIPMField'(Cindex1, [<<107>>]), %%------------------------------------------------- %% attribute originator(2) External IPMSInformationObjects:OriginatorField OPTIONAL %%------------------------------------------------- {EncBytes2,EncLen2} = case Cindex2 of asn1_NOVALUE -> {<<>>,0}; _ -> 'enc_OriginatorField'(Cindex2, [<<160>>]) end, %%------------------------------------------------- %% attribute authorizing-users(3) External IPMSInformationObjects:AuthorizingUsersField OPTIONAL %%------------------------------------------------- {EncBytes3,EncLen3} = case Cindex3 of asn1_NOVALUE -> {<<>>,0}; _ -> 'enc_AuthorizingUsersField'(Cindex3, [<<161>>]) end, %%------------------------------------------------- %% attribute primary-recipients(4) External IPMSInformationObjects:PrimaryRecipientsField DEFAULT = [] %%------------------------------------------------- {EncBytes4,EncLen4} = case Cindex4 of asn1_DEFAULT -> {<<>>,0}; _ when Cindex4 =:= [] -> {<<>>,0}; _ -> 'enc_PrimaryRecipientsField'(Cindex4, [<<162>>]) end, %%------------------------------------------------- %% attribute copy-recipients(5) External IPMSInformationObjects:CopyRecipientsField DEFAULT = [] %%------------------------------------------------- {EncBytes5,EncLen5} = case Cindex5 of asn1_DEFAULT -> {<<>>,0}; _ when Cindex5 =:= [] -> {<<>>,0}; _ -> 'enc_CopyRecipientsField'(Cindex5, [<<163>>]) end, %%------------------------------------------------- %% attribute blind-copy-recipients(6) External IPMSInformationObjects:BlindCopyRecipientsField OPTIONAL %%------------------------------------------------- {EncBytes6,EncLen6} = case Cindex6 of asn1_NOVALUE -> {<<>>,0}; _ -> 'enc_BlindCopyRecipientsField'(Cindex6, [<<164>>]) end, %%------------------------------------------------- %% attribute replied-to-IPM(7) External IPMSInformationObjects:RepliedToIPMField OPTIONAL %%------------------------------------------------- {EncBytes7,EncLen7} = case Cindex7 of asn1_NOVALUE -> {<<>>,0}; _ -> 'enc_RepliedToIPMField'(Cindex7, [<<165>>]) end, %%------------------------------------------------- %% attribute obsoleted-IPMs(8) External IPMSInformationObjects:ObsoletedIPMsField DEFAULT = [] %%------------------------------------------------- {EncBytes8,EncLen8} = case Cindex8 of asn1_DEFAULT -> {<<>>,0}; _ when Cindex8 =:= [] -> {<<>>,0}; _ -> 'enc_ObsoletedIPMsField'(Cindex8, [<<166>>]) end, %%------------------------------------------------- %% attribute related-IPMs(9) External IPMSInformationObjects:RelatedIPMsField DEFAULT = [] %%------------------------------------------------- {EncBytes9,EncLen9} = case Cindex9 of asn1_DEFAULT -> {<<>>,0}; _ when Cindex9 =:= [] -> {<<>>,0}; _ -> 'enc_RelatedIPMsField'(Cindex9, [<<167>>]) end, %%------------------------------------------------- %% attribute subject(10) with type TeletexString OPTIONAL %%------------------------------------------------- {EncBytes10,EncLen10} = case Cindex10 of asn1_NOVALUE -> {<<>>,0}; _ -> encode_restricted_string(Cindex10, [<<20>>,<<168>>]) end, %%------------------------------------------------- %% attribute expiry-time(11) with type UTCTime OPTIONAL %%------------------------------------------------- {EncBytes11,EncLen11} = case Cindex11 of asn1_NOVALUE -> {<<>>,0}; _ -> encode_restricted_string(Cindex11, [<<137>>]) end, %%------------------------------------------------- %% attribute reply-time(12) with type UTCTime OPTIONAL %%------------------------------------------------- {EncBytes12,EncLen12} = case Cindex12 of asn1_NOVALUE -> {<<>>,0}; _ -> encode_restricted_string(Cindex12, [<<138>>]) end, %%------------------------------------------------- %% attribute reply-recipients(13) External IPMSInformationObjects:ReplyRecipientsField OPTIONAL %%------------------------------------------------- {EncBytes13,EncLen13} = case Cindex13 of asn1_NOVALUE -> {<<>>,0}; _ -> 'enc_ReplyRecipientsField'(Cindex13, [<<171>>]) end, %%------------------------------------------------- %% attribute importance(14) with type ENUMERATED DEFAULT = normal %%------------------------------------------------- {EncBytes14,EncLen14} = case Cindex14 of asn1_DEFAULT -> {<<>>,0}; _ when Cindex14 =:= normal -> {<<>>,0}; _ -> case Cindex14 of low -> encode_tags([<<140>>], [0], 1); normal -> encode_tags([<<140>>], [1], 1); high -> encode_tags([<<140>>], [2], 1); Enumval4 -> exit({error,{asn1, {enumerated_not_in_range,Enumval4}}}) end end, %%------------------------------------------------- %% attribute sensitivity(15) with type ENUMERATED OPTIONAL %%------------------------------------------------- {EncBytes15,EncLen15} = case Cindex15 of asn1_NOVALUE -> {<<>>,0}; _ -> case Cindex15 of personal -> encode_tags([<<141>>], [1], 1); private -> encode_tags([<<141>>], [2], 1); 'company-confidential' -> encode_tags([<<141>>], [3], 1); Enumval5 -> exit({error,{asn1, {enumerated_not_in_range,Enumval5}}}) end end, %%------------------------------------------------- %% attribute auto-forwarded(16) with type BOOLEAN DEFAULT = false %%------------------------------------------------- {EncBytes16,EncLen16} = case Cindex16 of asn1_DEFAULT -> {<<>>,0}; _ when Cindex16 =:= false -> {<<>>,0}; _ -> encode_boolean(Cindex16, [<<142>>]) end, %%------------------------------------------------- %% attribute extensions(17) External IPMSInformationObjects:ExtensionsField DEFAULT = [] %%------------------------------------------------- {EncBytes17,EncLen17} = case Cindex17 of asn1_DEFAULT -> {<<>>,0}; _ when Cindex17 =:= [] -> {<<>>,0}; _ -> 'enc_ExtensionsField'(Cindex17, [<<175>>]) end, BytesSoFar = [EncBytes1, EncBytes2, EncBytes3, EncBytes4, EncBytes5, EncBytes6, EncBytes7, EncBytes8, EncBytes9, EncBytes10, EncBytes11, EncBytes12, EncBytes13, EncBytes14, EncBytes15, EncBytes16, EncBytes17], LenSoFar = EncLen1 + EncLen2 + EncLen3 + EncLen4 + EncLen5 + EncLen6 + EncLen7 + EncLen8 + EncLen9 + EncLen10 + EncLen11 + EncLen12 + EncLen13 + EncLen14 + EncLen15 + EncLen16 + EncLen17, encode_tags(TagIn, BytesSoFar, LenSoFar). dec_Heading(Tlv) -> dec_Heading(Tlv, [17]). dec_Heading(Tlv, TagIn) -> Tlv1 = match_tags(Tlv, TagIn), SetFun = fun(FunTlv) -> case FunTlv of %this-IPM TTlv = {65547,_} -> {1, TTlv}; %originator TTlv = {131072,_} -> {2, TTlv}; %authorizing-users TTlv = {131073,_} -> {3, TTlv}; %primary-recipients TTlv = {131074,_} -> {4, TTlv}; %copy-recipients TTlv = {131075,_} -> {5, TTlv}; %blind-copy-recipients TTlv = {131076,_} -> {6, TTlv}; %replied-to-IPM TTlv = {131077,_} -> {7, TTlv}; %obsoleted-IPMs TTlv = {131078,_} -> {8, TTlv}; %related-IPMs TTlv = {131079,_} -> {9, TTlv}; %subject TTlv = {131080,_} -> {10, TTlv}; %expiry-time TTlv = {131081,_} -> {11, TTlv}; %reply-time TTlv = {131082,_} -> {12, TTlv}; %reply-recipients TTlv = {131083,_} -> {13, TTlv}; %importance TTlv = {131084,_} -> {14, TTlv}; %sensitivity TTlv = {131085,_} -> {15, TTlv}; %auto-forwarded TTlv = {131086,_} -> {16, TTlv}; %extensions TTlv = {131087,_} -> {17, TTlv}; Else -> {18, Else} end end, PositionList = [SetFun(TempTlv)|| TempTlv <- Tlv1], Tlv2 = [Stlv || {_,Stlv} <- lists:sort(PositionList)], %%------------------------------------------------- %% attribute this-IPM(1) External IPMSInformationObjects:ThisIPMField %%------------------------------------------------- [V1|Tlv3] = Tlv2, Term1 = 'dec_ThisIPMField'(V1, [65547]), %%------------------------------------------------- %% attribute originator(2) External IPMSInformationObjects:OriginatorField OPTIONAL %%------------------------------------------------- {Term2,Tlv4} = case Tlv3 of [{131072,V2}|TempTlv4] -> {'dec_OriginatorField'(V2, []), TempTlv4}; _ -> { asn1_NOVALUE, Tlv3} end, %%------------------------------------------------- %% attribute authorizing-users(3) External IPMSInformationObjects:AuthorizingUsersField OPTIONAL %%------------------------------------------------- {Term3,Tlv5} = case Tlv4 of [{131073,V3}|TempTlv5] -> {'dec_AuthorizingUsersField'(V3, []), TempTlv5}; _ -> { asn1_NOVALUE, Tlv4} end, %%------------------------------------------------- %% attribute primary-recipients(4) External IPMSInformationObjects:PrimaryRecipientsField DEFAULT = [] %%------------------------------------------------- {Term4,Tlv6} = case Tlv5 of [{131074,V4}|TempTlv6] -> {'dec_PrimaryRecipientsField'(V4, []), TempTlv6}; _ -> {[],Tlv5} end, %%------------------------------------------------- %% attribute copy-recipients(5) External IPMSInformationObjects:CopyRecipientsField DEFAULT = [] %%------------------------------------------------- {Term5,Tlv7} = case Tlv6 of [{131075,V5}|TempTlv7] -> {'dec_CopyRecipientsField'(V5, []), TempTlv7}; _ -> {[],Tlv6} end, %%------------------------------------------------- %% attribute blind-copy-recipients(6) External IPMSInformationObjects:BlindCopyRecipientsField OPTIONAL %%------------------------------------------------- {Term6,Tlv8} = case Tlv7 of [{131076,V6}|TempTlv8] -> {'dec_BlindCopyRecipientsField'(V6, []), TempTlv8}; _ -> { asn1_NOVALUE, Tlv7} end, %%------------------------------------------------- %% attribute replied-to-IPM(7) External IPMSInformationObjects:RepliedToIPMField OPTIONAL %%------------------------------------------------- {Term7,Tlv9} = case Tlv8 of [{131077,V7}|TempTlv9] -> {'dec_RepliedToIPMField'(V7, []), TempTlv9}; _ -> { asn1_NOVALUE, Tlv8} end, %%------------------------------------------------- %% attribute obsoleted-IPMs(8) External IPMSInformationObjects:ObsoletedIPMsField DEFAULT = [] %%------------------------------------------------- {Term8,Tlv10} = case Tlv9 of [{131078,V8}|TempTlv10] -> {'dec_ObsoletedIPMsField'(V8, []), TempTlv10}; _ -> {[],Tlv9} end, %%------------------------------------------------- %% attribute related-IPMs(9) External IPMSInformationObjects:RelatedIPMsField DEFAULT = [] %%------------------------------------------------- {Term9,Tlv11} = case Tlv10 of [{131079,V9}|TempTlv11] -> {'dec_RelatedIPMsField'(V9, []), TempTlv11}; _ -> {[],Tlv10} end, %%------------------------------------------------- %% attribute subject(10) with type TeletexString OPTIONAL %%------------------------------------------------- {Term10,Tlv12} = case Tlv11 of [{131080,V10}|TempTlv12] -> {begin Val1 = decode_restricted_string(V10, [20]), C1 = byte_size(Val1), if 0 =< C1, C1 =< 128 -> binary_to_list(Val1); true -> exit({error,{asn1,bad_range}}) end end, TempTlv12}; _ -> { asn1_NOVALUE, Tlv11} end, %%------------------------------------------------- %% attribute expiry-time(11) with type UTCTime OPTIONAL %%------------------------------------------------- {Term11,Tlv13} = case Tlv12 of [{131081,V11}|TempTlv13] -> {begin binary_to_list(decode_restricted_string(V11, [])) end , TempTlv13}; _ -> { asn1_NOVALUE, Tlv12} end, %%------------------------------------------------- %% attribute reply-time(12) with type UTCTime OPTIONAL %%------------------------------------------------- {Term12,Tlv14} = case Tlv13 of [{131082,V12}|TempTlv14] -> {begin binary_to_list(decode_restricted_string(V12, [])) end , TempTlv14}; _ -> { asn1_NOVALUE, Tlv13} end, %%------------------------------------------------- %% attribute reply-recipients(13) External IPMSInformationObjects:ReplyRecipientsField OPTIONAL %%------------------------------------------------- {Term13,Tlv15} = case Tlv14 of [{131083,V13}|TempTlv15] -> {'dec_ReplyRecipientsField'(V13, []), TempTlv15}; _ -> { asn1_NOVALUE, Tlv14} end, %%------------------------------------------------- %% attribute importance(14) with type ENUMERATED DEFAULT = normal %%------------------------------------------------- {Term14,Tlv16} = case Tlv15 of [{131084,V14}|TempTlv16] -> {case decode_integer(V14, []) of 0 -> low; 1 -> normal; 2 -> high; Default1 -> exit({error,{asn1,{illegal_enumerated,Default1}}}) end, TempTlv16}; _ -> {normal,Tlv15} end, %%------------------------------------------------- %% attribute sensitivity(15) with type ENUMERATED OPTIONAL %%------------------------------------------------- {Term15,Tlv17} = case Tlv16 of [{131085,V15}|TempTlv17] -> {case decode_integer(V15, []) of 1 -> personal; 2 -> private; 3 -> 'company-confidential'; Default2 -> exit({error,{asn1,{illegal_enumerated,Default2}}}) end, TempTlv17}; _ -> { asn1_NOVALUE, Tlv16} end, %%------------------------------------------------- %% attribute auto-forwarded(16) with type BOOLEAN DEFAULT = false %%------------------------------------------------- {Term16,Tlv18} = case Tlv17 of [{131086,V16}|TempTlv18] -> {decode_boolean(V16, []), TempTlv18}; _ -> {false,Tlv17} end, %%------------------------------------------------- %% attribute extensions(17) External IPMSInformationObjects:ExtensionsField DEFAULT = [] %%------------------------------------------------- {Term17,Tlv19} = case Tlv18 of [{131087,V17}|TempTlv19] -> {'dec_ExtensionsField'(V17, []), TempTlv19}; _ -> {[],Tlv18} end, case Tlv19 of [] -> true;_ -> exit({error,{asn1, {unexpected,Tlv19}}}) % extra fields not allowed end, Res1 = {'Heading',Term1,Term2,Term3,Term4,Term5,Term6,Term7,Term8,Term9,Term10,Term11,Term12,Term13,Term14,Term15,Term16,Term17}, Res1. %%================================ %% IPMIdentifier %%================================ enc_IPMIdentifier(Val) -> enc_IPMIdentifier(Val, [<<107>>]). enc_IPMIdentifier(Val, TagIn) -> {_,Cindex1,Cindex2} = Val, %%------------------------------------------------- %% attribute user(1) External MTSAbstractService:ORName OPTIONAL %%------------------------------------------------- {EncBytes1,EncLen1} = case Cindex1 of asn1_NOVALUE -> {<<>>,0}; _ -> 'MTSAbstractService':'enc_ORName'(Cindex1, [<<96>>]) end, %%------------------------------------------------- %% attribute user-relative-identifier(2) with type PrintableString %%------------------------------------------------- {EncBytes2,EncLen2} = encode_restricted_string(Cindex2, [<<19>>]), BytesSoFar = [EncBytes1, EncBytes2], LenSoFar = EncLen1 + EncLen2, encode_tags(TagIn, BytesSoFar, LenSoFar). dec_IPMIdentifier(Tlv) -> dec_IPMIdentifier(Tlv, [65547]). dec_IPMIdentifier(Tlv, TagIn) -> Tlv1 = match_tags(Tlv, TagIn), SetFun = fun(FunTlv) -> case FunTlv of %user TTlv = {65536,_} -> {1, TTlv}; %user-relative-identifier TTlv = {19,_} -> {2, TTlv}; Else -> {3, Else} end end, PositionList = [SetFun(TempTlv)|| TempTlv <- Tlv1], Tlv2 = [Stlv || {_,Stlv} <- lists:sort(PositionList)], %%------------------------------------------------- %% attribute user(1) External MTSAbstractService:ORName OPTIONAL %%------------------------------------------------- {Term1,Tlv3} = case Tlv2 of [{65536,V1}|TempTlv3] -> {'MTSAbstractService':'dec_ORName'(V1, []), TempTlv3}; _ -> { asn1_NOVALUE, Tlv2} end, %%------------------------------------------------- %% attribute user-relative-identifier(2) with type PrintableString %%------------------------------------------------- [V2|Tlv4] = Tlv3, Term2 = begin Val1 = decode_restricted_string(V2, [19]), C1 = byte_size(Val1), if 0 =< C1, C1 =< 64 -> binary_to_list(Val1); true -> exit({error,{asn1,bad_range}}) end end, case Tlv4 of [] -> true;_ -> exit({error,{asn1, {unexpected,Tlv4}}}) % extra fields not allowed end, Res1 = {'IPMIdentifier',Term1,Term2}, Res1. %%================================ %% LocalIPMIdentifier %%================================ enc_LocalIPMIdentifier(Val) -> enc_LocalIPMIdentifier(Val, [<<19>>]). enc_LocalIPMIdentifier(Val, TagIn) -> encode_restricted_string(Val, TagIn). dec_LocalIPMIdentifier(Tlv) -> dec_LocalIPMIdentifier(Tlv, [19]). dec_LocalIPMIdentifier(Tlv, TagIn) -> begin Val1 = decode_restricted_string(Tlv, TagIn), C1 = byte_size(Val1), if 0 =< C1, C1 =< 64 -> binary_to_list(Val1); true -> exit({error,{asn1,bad_range}}) end end. %%================================ %% RecipientSpecifier %%================================ enc_RecipientSpecifier(Val) -> enc_RecipientSpecifier(Val, [<<49>>]). enc_RecipientSpecifier(Val, TagIn) -> {_,Cindex1,Cindex2,Cindex3,Cindex4} = Val, %%------------------------------------------------- %% attribute recipient(1) External IPMSInformationObjects:ORDescriptor %%------------------------------------------------- {EncBytes1,EncLen1} = 'enc_ORDescriptor'(Cindex1, [<<160>>]), %%------------------------------------------------- %% attribute notification-requests(2) with type BIT STRING DEFAULT = [] %%------------------------------------------------- {EncBytes2,EncLen2} = case Cindex2 of asn1_DEFAULT -> {<<>>,0}; _ when Cindex2 =:= [] -> {<<>>,0}; _ -> encode_named_bit_string(Cindex2, [{rn,0},{nrn,1},{'ipm-return',2},{'an-supported',3},{'suppress-an',4}], [<<129>>]) end, %%------------------------------------------------- %% attribute reply-requested(3) with type BOOLEAN DEFAULT = false %%------------------------------------------------- {EncBytes3,EncLen3} = case Cindex3 of asn1_DEFAULT -> {<<>>,0}; _ when Cindex3 =:= false -> {<<>>,0}; _ -> encode_boolean(Cindex3, [<<130>>]) end, %%------------------------------------------------- %% attribute recipient-extensions(4) External IPMSInformationObjects:RecipientExtensionsField OPTIONAL %%------------------------------------------------- {EncBytes4,EncLen4} = case Cindex4 of asn1_NOVALUE -> {<<>>,0}; _ -> 'enc_RecipientExtensionsField'(Cindex4, [<<163>>]) end, BytesSoFar = [EncBytes1, EncBytes2, EncBytes3, EncBytes4], LenSoFar = EncLen1 + EncLen2 + EncLen3 + EncLen4, encode_tags(TagIn, BytesSoFar, LenSoFar). dec_RecipientSpecifier(Tlv) -> dec_RecipientSpecifier(Tlv, [17]). dec_RecipientSpecifier(Tlv, TagIn) -> Tlv1 = match_tags(Tlv, TagIn), SetFun = fun(FunTlv) -> case FunTlv of %recipient TTlv = {131072,_} -> {1, TTlv}; %notification-requests TTlv = {131073,_} -> {2, TTlv}; %reply-requested TTlv = {131074,_} -> {3, TTlv}; %recipient-extensions TTlv = {131075,_} -> {4, TTlv}; Else -> {5, Else} end end, PositionList = [SetFun(TempTlv)|| TempTlv <- Tlv1], Tlv2 = [Stlv || {_,Stlv} <- lists:sort(PositionList)], %%------------------------------------------------- %% attribute recipient(1) External IPMSInformationObjects:ORDescriptor %%------------------------------------------------- [V1|Tlv3] = Tlv2, Term1 = 'dec_ORDescriptor'(V1, [131072]), %%------------------------------------------------- %% attribute notification-requests(2) with type BIT STRING DEFAULT = [] %%------------------------------------------------- {Term2,Tlv4} = case Tlv3 of [{131073,V2}|TempTlv4] -> {decode_named_bit_string(V2, [{rn,0},{nrn,1},{'ipm-return',2},{'an-supported',3},{'suppress-an',4}], []), TempTlv4}; _ -> {[],Tlv3} end, %%------------------------------------------------- %% attribute reply-requested(3) with type BOOLEAN DEFAULT = false %%------------------------------------------------- {Term3,Tlv5} = case Tlv4 of [{131074,V3}|TempTlv5] -> {decode_boolean(V3, []), TempTlv5}; _ -> {false,Tlv4} end, %%------------------------------------------------- %% attribute recipient-extensions(4) External IPMSInformationObjects:RecipientExtensionsField OPTIONAL %%------------------------------------------------- {Term4,Tlv6} = case Tlv5 of [{131075,V4}|TempTlv6] -> {'dec_RecipientExtensionsField'(V4, []), TempTlv6}; _ -> { asn1_NOVALUE, Tlv5} end, case Tlv6 of [] -> true;_ -> exit({error,{asn1, {unexpected,Tlv6}}}) % extra fields not allowed end, Res1 = {'RecipientSpecifier',Term1,Term2,Term3,Term4}, Res1. %%================================ %% ORDescriptor %%================================ enc_ORDescriptor(Val) -> enc_ORDescriptor(Val, [<<49>>]). enc_ORDescriptor(Val, TagIn) -> {_,Cindex1,Cindex2,Cindex3} = Val, %%------------------------------------------------- %% attribute formal-name(1) External MTSAbstractService:ORName OPTIONAL %%------------------------------------------------- {EncBytes1,EncLen1} = case Cindex1 of asn1_NOVALUE -> {<<>>,0}; _ -> 'MTSAbstractService':'enc_ORName'(Cindex1, [<<96>>]) end, %%------------------------------------------------- %% attribute free-form-name(2) with type TeletexString OPTIONAL %%------------------------------------------------- {EncBytes2,EncLen2} = case Cindex2 of asn1_NOVALUE -> {<<>>,0}; _ -> encode_restricted_string(Cindex2, [<<128>>]) end, %%------------------------------------------------- %% attribute telephone-number(3) with type PrintableString OPTIONAL %%------------------------------------------------- {EncBytes3,EncLen3} = case Cindex3 of asn1_NOVALUE -> {<<>>,0}; _ -> encode_restricted_string(Cindex3, [<<129>>]) end, BytesSoFar = [EncBytes1, EncBytes2, EncBytes3], LenSoFar = EncLen1 + EncLen2 + EncLen3, encode_tags(TagIn, BytesSoFar, LenSoFar). dec_ORDescriptor(Tlv) -> dec_ORDescriptor(Tlv, [17]). dec_ORDescriptor(Tlv, TagIn) -> Tlv1 = match_tags(Tlv, TagIn), SetFun = fun(FunTlv) -> case FunTlv of %formal-name TTlv = {65536,_} -> {1, TTlv}; %free-form-name TTlv = {131072,_} -> {2, TTlv}; %telephone-number TTlv = {131073,_} -> {3, TTlv}; Else -> {4, Else} end end, PositionList = [SetFun(TempTlv)|| TempTlv <- Tlv1], Tlv2 = [Stlv || {_,Stlv} <- lists:sort(PositionList)], %%------------------------------------------------- %% attribute formal-name(1) External MTSAbstractService:ORName OPTIONAL %%------------------------------------------------- {Term1,Tlv3} = case Tlv2 of [{65536,V1}|TempTlv3] -> {'MTSAbstractService':'dec_ORName'(V1, []), TempTlv3}; _ -> { asn1_NOVALUE, Tlv2} end, %%------------------------------------------------- %% attribute free-form-name(2) with type TeletexString OPTIONAL %%------------------------------------------------- {Term2,Tlv4} = case Tlv3 of [{131072,V2}|TempTlv4] -> {begin Val1 = decode_restricted_string(V2, []), C1 = byte_size(Val1), if 0 =< C1, C1 =< 64 -> binary_to_list(Val1); true -> exit({error,{asn1,bad_range}}) end end, TempTlv4}; _ -> { asn1_NOVALUE, Tlv3} end, %%------------------------------------------------- %% attribute telephone-number(3) with type PrintableString OPTIONAL %%------------------------------------------------- {Term3,Tlv5} = case Tlv4 of [{131073,V3}|TempTlv5] -> {begin Val2 = decode_restricted_string(V3, []), C2 = byte_size(Val2), if 0 =< C2, C2 =< 32 -> binary_to_list(Val2); true -> exit({error,{asn1,bad_range}}) end end, TempTlv5}; _ -> { asn1_NOVALUE, Tlv4} end, case Tlv5 of [] -> true;_ -> exit({error,{asn1, {unexpected,Tlv5}}}) % extra fields not allowed end, Res1 = {'ORDescriptor',Term1,Term2,Term3}, Res1. %%================================ %% FreeFormName %%================================ enc_FreeFormName(Val) -> enc_FreeFormName(Val, [<<20>>]). enc_FreeFormName(Val, TagIn) -> encode_restricted_string(Val, TagIn). dec_FreeFormName(Tlv) -> dec_FreeFormName(Tlv, [20]). dec_FreeFormName(Tlv, TagIn) -> begin Val1 = decode_restricted_string(Tlv, TagIn), C1 = byte_size(Val1), if 0 =< C1, C1 =< 64 -> binary_to_list(Val1); true -> exit({error,{asn1,bad_range}}) end end. %%================================ %% TelephoneNumber %%================================ enc_TelephoneNumber(Val) -> enc_TelephoneNumber(Val, [<<19>>]). enc_TelephoneNumber(Val, TagIn) -> encode_restricted_string(Val, TagIn). dec_TelephoneNumber(Tlv) -> dec_TelephoneNumber(Tlv, [19]). dec_TelephoneNumber(Tlv, TagIn) -> begin Val1 = decode_restricted_string(Tlv, TagIn), C1 = byte_size(Val1), if 0 =< C1, C1 =< 32 -> binary_to_list(Val1); true -> exit({error,{asn1,bad_range}}) end end. %%================================ %% NotificationRequests %%================================ enc_NotificationRequests(Val) -> enc_NotificationRequests(Val, [<<3>>]). enc_NotificationRequests(Val, TagIn) -> encode_named_bit_string(Val, [{rn,0},{nrn,1},{'ipm-return',2},{'an-supported',3},{'suppress-an',4}], TagIn). dec_NotificationRequests(Tlv) -> dec_NotificationRequests(Tlv, [3]). dec_NotificationRequests(Tlv, TagIn) -> decode_named_bit_string(Tlv, [{rn,0},{nrn,1},{'ipm-return',2},{'an-supported',3},{'suppress-an',4}], TagIn). %%================================ %% RecipientExtensionsField %%================================ enc_RecipientExtensionsField(Val) -> enc_RecipientExtensionsField(Val, [<<49>>]). enc_RecipientExtensionsField(Val, TagIn) -> {EncBytes,EncLen} = 'enc_RecipientExtensionsField_components'(Val,[],0), encode_tags(TagIn, EncBytes, EncLen). 'enc_RecipientExtensionsField_components'([], AccBytes, AccLen) -> {lists:reverse(AccBytes),AccLen}; 'enc_RecipientExtensionsField_components'([H|T],AccBytes, AccLen) -> {EncBytes,EncLen} = 'enc_RecipientExtensionsField_IPMSExtension'(H, [<<48>>]), 'enc_RecipientExtensionsField_components'(T,[EncBytes|AccBytes], AccLen + EncLen). %%================================ %% RecipientExtensionsField_IPMSExtension %%================================ enc_RecipientExtensionsField_IPMSExtension(Val, TagIn) -> {_,Cindex1,Cindex2} = Val, Objtype = 'IPMSInformationObjects':'getenc_internal_object_set_argument_1'( Cindex1), %%------------------------------------------------- %% attribute type(1) with type OBJECT IDENTIFIER %%------------------------------------------------- {EncBytes1,EncLen1} = encode_object_identifier(Cindex1, [<<6>>]), %%------------------------------------------------- %% attribute value(2) with type typefieldType DEFAULT = 'NULL' %%------------------------------------------------- {EncBytes2,EncLen2} = case Cindex2 of asn1_DEFAULT -> {<<>>,0}; _ when Cindex2 =:= 'NULL' -> {<<>>,0}; _ -> {TmpBytes2,_ } = Objtype('Type', Cindex2, []), encode_open_type(TmpBytes2, []) end, BytesSoFar = [EncBytes1, EncBytes2], LenSoFar = EncLen1 + EncLen2, encode_tags(TagIn, BytesSoFar, LenSoFar). dec_RecipientExtensionsField(Tlv) -> dec_RecipientExtensionsField(Tlv, [17]). dec_RecipientExtensionsField(Tlv, TagIn) -> %%------------------------------------------------- %% decode tag and length %%------------------------------------------------- Tlv1 = match_tags(Tlv, TagIn), ['dec_RecipientExtensionsField_IPMSExtension'(V1, [16]) || V1 <- Tlv1]. 'dec_RecipientExtensionsField_IPMSExtension'(Tlv, TagIn) -> %%------------------------------------------------- %% decode tag and length %%------------------------------------------------- Tlv1 = match_tags(Tlv, TagIn), %%------------------------------------------------- %% attribute type(1) with type OBJECT IDENTIFIER %%------------------------------------------------- [V1|Tlv2] = Tlv1, Term1 = decode_object_identifier(V1, [6]), %%------------------------------------------------- %% attribute value(2) with type typefieldType DEFAULT = 'NULL' %%------------------------------------------------- {Tmpterm1,Tlv3} = case Tlv2 of [V2|TempTlv3] -> {decode_open_type(V2, []), TempTlv3}; _ -> {'NULL',Tlv2} end, DecObjtypeTerm1 = 'IPMSInformationObjects':'getdec_internal_object_set_argument_1'(Term1), Term2 = case Tmpterm1 of 'NULL' ->'NULL'; _ -> case (catch DecObjtypeTerm1('Type', Tmpterm1, [])) of {'EXIT', Reason1} -> exit({'Type not compatible with table constraint',Reason1}); Tmpterm2 -> Tmpterm2 end end, case Tlv3 of [] -> true;_ -> exit({error,{asn1, {unexpected,Tlv3}}}) % extra fields not allowed end, Res1 = {'IPMSExtension',Term1,Term2}, Res1. %%================================ %% ThisIPMField %%================================ enc_ThisIPMField(Val) -> enc_ThisIPMField(Val, [<<107>>]). enc_ThisIPMField(Val, TagIn) -> enc_IPMIdentifier(Val, TagIn). dec_ThisIPMField(Tlv) -> dec_ThisIPMField(Tlv, [65547]). dec_ThisIPMField(Tlv, TagIn) -> 'dec_IPMIdentifier'(Tlv, TagIn). %%================================ %% OriginatorField %%================================ enc_OriginatorField(Val) -> enc_OriginatorField(Val, [<<49>>]). enc_OriginatorField(Val, TagIn) -> enc_ORDescriptor(Val, TagIn). dec_OriginatorField(Tlv) -> dec_OriginatorField(Tlv, [17]). dec_OriginatorField(Tlv, TagIn) -> 'dec_ORDescriptor'(Tlv, TagIn). %%================================ %% AuthorizingUsersField %%================================ enc_AuthorizingUsersField(Val) -> enc_AuthorizingUsersField(Val, [<<48>>]). enc_AuthorizingUsersField(Val, TagIn) -> {EncBytes,EncLen} = 'enc_AuthorizingUsersField_components'(Val,[],0), encode_tags(TagIn, EncBytes, EncLen). 'enc_AuthorizingUsersField_components'([], AccBytes, AccLen) -> {lists:reverse(AccBytes),AccLen}; 'enc_AuthorizingUsersField_components'([H|T],AccBytes, AccLen) -> {EncBytes,EncLen} = 'enc_AuthorizingUsersSubfield'(H, [<<49>>]), 'enc_AuthorizingUsersField_components'(T,[EncBytes|AccBytes], AccLen + EncLen). dec_AuthorizingUsersField(Tlv) -> dec_AuthorizingUsersField(Tlv, [16]). dec_AuthorizingUsersField(Tlv, TagIn) -> %%------------------------------------------------- %% decode tag and length %%------------------------------------------------- Tlv1 = match_tags(Tlv, TagIn), ['dec_AuthorizingUsersSubfield'(V1, [17]) || V1 <- Tlv1]. %%================================ %% AuthorizingUsersSubfield %%================================ enc_AuthorizingUsersSubfield(Val) -> enc_AuthorizingUsersSubfield(Val, [<<49>>]). enc_AuthorizingUsersSubfield(Val, TagIn) -> enc_ORDescriptor(Val, TagIn). dec_AuthorizingUsersSubfield(Tlv) -> dec_AuthorizingUsersSubfield(Tlv, [17]). dec_AuthorizingUsersSubfield(Tlv, TagIn) -> 'dec_ORDescriptor'(Tlv, TagIn). %%================================ %% PrimaryRecipientsField %%================================ enc_PrimaryRecipientsField(Val) -> enc_PrimaryRecipientsField(Val, [<<48>>]). enc_PrimaryRecipientsField(Val, TagIn) -> {EncBytes,EncLen} = 'enc_PrimaryRecipientsField_components'(Val,[],0), encode_tags(TagIn, EncBytes, EncLen). 'enc_PrimaryRecipientsField_components'([], AccBytes, AccLen) -> {lists:reverse(AccBytes),AccLen}; 'enc_PrimaryRecipientsField_components'([H|T],AccBytes, AccLen) -> {EncBytes,EncLen} = 'enc_PrimaryRecipientsSubfield'(H, [<<49>>]), 'enc_PrimaryRecipientsField_components'(T,[EncBytes|AccBytes], AccLen + EncLen). dec_PrimaryRecipientsField(Tlv) -> dec_PrimaryRecipientsField(Tlv, [16]). dec_PrimaryRecipientsField(Tlv, TagIn) -> %%------------------------------------------------- %% decode tag and length %%------------------------------------------------- Tlv1 = match_tags(Tlv, TagIn), ['dec_PrimaryRecipientsSubfield'(V1, [17]) || V1 <- Tlv1]. %%================================ %% PrimaryRecipientsSubfield %%================================ enc_PrimaryRecipientsSubfield(Val) -> enc_PrimaryRecipientsSubfield(Val, [<<49>>]). enc_PrimaryRecipientsSubfield(Val, TagIn) -> enc_RecipientSpecifier(Val, TagIn). dec_PrimaryRecipientsSubfield(Tlv) -> dec_PrimaryRecipientsSubfield(Tlv, [17]). dec_PrimaryRecipientsSubfield(Tlv, TagIn) -> 'dec_RecipientSpecifier'(Tlv, TagIn). %%================================ %% CopyRecipientsField %%================================ enc_CopyRecipientsField(Val) -> enc_CopyRecipientsField(Val, [<<48>>]). enc_CopyRecipientsField(Val, TagIn) -> {EncBytes,EncLen} = 'enc_CopyRecipientsField_components'(Val,[],0), encode_tags(TagIn, EncBytes, EncLen). 'enc_CopyRecipientsField_components'([], AccBytes, AccLen) -> {lists:reverse(AccBytes),AccLen}; 'enc_CopyRecipientsField_components'([H|T],AccBytes, AccLen) -> {EncBytes,EncLen} = 'enc_CopyRecipientsSubfield'(H, [<<49>>]), 'enc_CopyRecipientsField_components'(T,[EncBytes|AccBytes], AccLen + EncLen). dec_CopyRecipientsField(Tlv) -> dec_CopyRecipientsField(Tlv, [16]). dec_CopyRecipientsField(Tlv, TagIn) -> %%------------------------------------------------- %% decode tag and length %%------------------------------------------------- Tlv1 = match_tags(Tlv, TagIn), ['dec_CopyRecipientsSubfield'(V1, [17]) || V1 <- Tlv1]. %%================================ %% CopyRecipientsSubfield %%================================ enc_CopyRecipientsSubfield(Val) -> enc_CopyRecipientsSubfield(Val, [<<49>>]). enc_CopyRecipientsSubfield(Val, TagIn) -> enc_RecipientSpecifier(Val, TagIn). dec_CopyRecipientsSubfield(Tlv) -> dec_CopyRecipientsSubfield(Tlv, [17]). dec_CopyRecipientsSubfield(Tlv, TagIn) -> 'dec_RecipientSpecifier'(Tlv, TagIn). %%================================ %% BlindCopyRecipientsField %%================================ enc_BlindCopyRecipientsField(Val) -> enc_BlindCopyRecipientsField(Val, [<<48>>]). enc_BlindCopyRecipientsField(Val, TagIn) -> {EncBytes,EncLen} = 'enc_BlindCopyRecipientsField_components'(Val,[],0), encode_tags(TagIn, EncBytes, EncLen). 'enc_BlindCopyRecipientsField_components'([], AccBytes, AccLen) -> {lists:reverse(AccBytes),AccLen}; 'enc_BlindCopyRecipientsField_components'([H|T],AccBytes, AccLen) -> {EncBytes,EncLen} = 'enc_BlindCopyRecipientsSubfield'(H, [<<49>>]), 'enc_BlindCopyRecipientsField_components'(T,[EncBytes|AccBytes], AccLen + EncLen). dec_BlindCopyRecipientsField(Tlv) -> dec_BlindCopyRecipientsField(Tlv, [16]). dec_BlindCopyRecipientsField(Tlv, TagIn) -> %%------------------------------------------------- %% decode tag and length %%------------------------------------------------- Tlv1 = match_tags(Tlv, TagIn), ['dec_BlindCopyRecipientsSubfield'(V1, [17]) || V1 <- Tlv1]. %%================================ %% BlindCopyRecipientsSubfield %%================================ enc_BlindCopyRecipientsSubfield(Val) -> enc_BlindCopyRecipientsSubfield(Val, [<<49>>]). enc_BlindCopyRecipientsSubfield(Val, TagIn) -> enc_RecipientSpecifier(Val, TagIn). dec_BlindCopyRecipientsSubfield(Tlv) -> dec_BlindCopyRecipientsSubfield(Tlv, [17]). dec_BlindCopyRecipientsSubfield(Tlv, TagIn) -> 'dec_RecipientSpecifier'(Tlv, TagIn). %%================================ %% RepliedToIPMField %%================================ enc_RepliedToIPMField(Val) -> enc_RepliedToIPMField(Val, [<<107>>]). enc_RepliedToIPMField(Val, TagIn) -> enc_IPMIdentifier(Val, TagIn). dec_RepliedToIPMField(Tlv) -> dec_RepliedToIPMField(Tlv, [65547]). dec_RepliedToIPMField(Tlv, TagIn) -> 'dec_IPMIdentifier'(Tlv, TagIn). %%================================ %% ObsoletedIPMsField %%================================ enc_ObsoletedIPMsField(Val) -> enc_ObsoletedIPMsField(Val, [<<48>>]). enc_ObsoletedIPMsField(Val, TagIn) -> {EncBytes,EncLen} = 'enc_ObsoletedIPMsField_components'(Val,[],0), encode_tags(TagIn, EncBytes, EncLen). 'enc_ObsoletedIPMsField_components'([], AccBytes, AccLen) -> {lists:reverse(AccBytes),AccLen}; 'enc_ObsoletedIPMsField_components'([H|T],AccBytes, AccLen) -> {EncBytes,EncLen} = 'enc_ObsoletedIPMsSubfield'(H, [<<107>>]), 'enc_ObsoletedIPMsField_components'(T,[EncBytes|AccBytes], AccLen + EncLen). dec_ObsoletedIPMsField(Tlv) -> dec_ObsoletedIPMsField(Tlv, [16]). dec_ObsoletedIPMsField(Tlv, TagIn) -> %%------------------------------------------------- %% decode tag and length %%------------------------------------------------- Tlv1 = match_tags(Tlv, TagIn), ['dec_ObsoletedIPMsSubfield'(V1, [65547]) || V1 <- Tlv1]. %%================================ %% ObsoletedIPMsSubfield %%================================ enc_ObsoletedIPMsSubfield(Val) -> enc_ObsoletedIPMsSubfield(Val, [<<107>>]). enc_ObsoletedIPMsSubfield(Val, TagIn) -> enc_IPMIdentifier(Val, TagIn). dec_ObsoletedIPMsSubfield(Tlv) -> dec_ObsoletedIPMsSubfield(Tlv, [65547]). dec_ObsoletedIPMsSubfield(Tlv, TagIn) -> 'dec_IPMIdentifier'(Tlv, TagIn). %%================================ %% RelatedIPMsField %%================================ enc_RelatedIPMsField(Val) -> enc_RelatedIPMsField(Val, [<<48>>]). enc_RelatedIPMsField(Val, TagIn) -> {EncBytes,EncLen} = 'enc_RelatedIPMsField_components'(Val,[],0), encode_tags(TagIn, EncBytes, EncLen). 'enc_RelatedIPMsField_components'([], AccBytes, AccLen) -> {lists:reverse(AccBytes),AccLen}; 'enc_RelatedIPMsField_components'([H|T],AccBytes, AccLen) -> {EncBytes,EncLen} = 'enc_RelatedIPMsSubfield'(H, [<<107>>]), 'enc_RelatedIPMsField_components'(T,[EncBytes|AccBytes], AccLen + EncLen). dec_RelatedIPMsField(Tlv) -> dec_RelatedIPMsField(Tlv, [16]). dec_RelatedIPMsField(Tlv, TagIn) -> %%------------------------------------------------- %% decode tag and length %%------------------------------------------------- Tlv1 = match_tags(Tlv, TagIn), ['dec_RelatedIPMsSubfield'(V1, [65547]) || V1 <- Tlv1]. %%================================ %% RelatedIPMsSubfield %%================================ enc_RelatedIPMsSubfield(Val) -> enc_RelatedIPMsSubfield(Val, [<<107>>]). enc_RelatedIPMsSubfield(Val, TagIn) -> enc_IPMIdentifier(Val, TagIn). dec_RelatedIPMsSubfield(Tlv) -> dec_RelatedIPMsSubfield(Tlv, [65547]). dec_RelatedIPMsSubfield(Tlv, TagIn) -> 'dec_IPMIdentifier'(Tlv, TagIn). %%================================ %% SubjectField %%================================ enc_SubjectField(Val) -> enc_SubjectField(Val, [<<20>>]). enc_SubjectField(Val, TagIn) -> encode_restricted_string(Val, TagIn). dec_SubjectField(Tlv) -> dec_SubjectField(Tlv, [20]). dec_SubjectField(Tlv, TagIn) -> begin Val1 = decode_restricted_string(Tlv, TagIn), C1 = byte_size(Val1), if 0 =< C1, C1 =< 128 -> binary_to_list(Val1); true -> exit({error,{asn1,bad_range}}) end end. %%================================ %% ExpiryTimeField %%================================ enc_ExpiryTimeField(Val) -> enc_ExpiryTimeField(Val, [<<23>>]). enc_ExpiryTimeField(Val, TagIn) -> encode_restricted_string(Val, TagIn). dec_ExpiryTimeField(Tlv) -> dec_ExpiryTimeField(Tlv, [23]). dec_ExpiryTimeField(Tlv, TagIn) -> begin binary_to_list(decode_restricted_string(Tlv, TagIn)) end . %%================================ %% ReplyTimeField %%================================ enc_ReplyTimeField(Val) -> enc_ReplyTimeField(Val, [<<23>>]). enc_ReplyTimeField(Val, TagIn) -> encode_restricted_string(Val, TagIn). dec_ReplyTimeField(Tlv) -> dec_ReplyTimeField(Tlv, [23]). dec_ReplyTimeField(Tlv, TagIn) -> begin binary_to_list(decode_restricted_string(Tlv, TagIn)) end . %%================================ %% ReplyRecipientsField %%================================ enc_ReplyRecipientsField(Val) -> enc_ReplyRecipientsField(Val, [<<48>>]). enc_ReplyRecipientsField(Val, TagIn) -> {EncBytes,EncLen} = 'enc_ReplyRecipientsField_components'(Val,[],0), encode_tags(TagIn, EncBytes, EncLen). 'enc_ReplyRecipientsField_components'([], AccBytes, AccLen) -> {lists:reverse(AccBytes),AccLen}; 'enc_ReplyRecipientsField_components'([H|T],AccBytes, AccLen) -> {EncBytes,EncLen} = 'enc_ReplyRecipientsSubfield'(H, [<<49>>]), 'enc_ReplyRecipientsField_components'(T,[EncBytes|AccBytes], AccLen + EncLen). dec_ReplyRecipientsField(Tlv) -> dec_ReplyRecipientsField(Tlv, [16]). dec_ReplyRecipientsField(Tlv, TagIn) -> %%------------------------------------------------- %% decode tag and length %%------------------------------------------------- Tlv1 = match_tags(Tlv, TagIn), ['dec_ReplyRecipientsSubfield'(V1, [17]) || V1 <- Tlv1]. %%================================ %% ReplyRecipientsSubfield %%================================ enc_ReplyRecipientsSubfield(Val) -> enc_ReplyRecipientsSubfield(Val, [<<49>>]). enc_ReplyRecipientsSubfield(Val, TagIn) -> enc_ORDescriptor(Val, TagIn). dec_ReplyRecipientsSubfield(Tlv) -> dec_ReplyRecipientsSubfield(Tlv, [17]). dec_ReplyRecipientsSubfield(Tlv, TagIn) -> 'dec_ORDescriptor'(Tlv, TagIn). %%================================ %% ImportanceField %%================================ enc_ImportanceField(Val) -> enc_ImportanceField(Val, [<<10>>]). enc_ImportanceField(Val, TagIn) -> case Val of low -> encode_tags(TagIn, [0], 1); normal -> encode_tags(TagIn, [1], 1); high -> encode_tags(TagIn, [2], 1); Enumval1 -> exit({error,{asn1, {enumerated_not_in_range,Enumval1}}}) end. dec_ImportanceField(Tlv) -> dec_ImportanceField(Tlv, [10]). dec_ImportanceField(Tlv, TagIn) -> case decode_integer(Tlv, TagIn) of 0 -> low; 1 -> normal; 2 -> high; Default1 -> exit({error,{asn1,{illegal_enumerated,Default1}}}) end. %%================================ %% SensitivityField %%================================ enc_SensitivityField(Val) -> enc_SensitivityField(Val, [<<10>>]). enc_SensitivityField(Val, TagIn) -> case Val of personal -> encode_tags(TagIn, [1], 1); private -> encode_tags(TagIn, [2], 1); 'company-confidential' -> encode_tags(TagIn, [3], 1); Enumval1 -> exit({error,{asn1, {enumerated_not_in_range,Enumval1}}}) end. dec_SensitivityField(Tlv) -> dec_SensitivityField(Tlv, [10]). dec_SensitivityField(Tlv, TagIn) -> case decode_integer(Tlv, TagIn) of 1 -> personal; 2 -> private; 3 -> 'company-confidential'; Default1 -> exit({error,{asn1,{illegal_enumerated,Default1}}}) end. %%================================ %% AutoForwardedField %%================================ enc_AutoForwardedField(Val) -> enc_AutoForwardedField(Val, [<<1>>]). enc_AutoForwardedField(Val, TagIn) -> encode_boolean(Val, TagIn). dec_AutoForwardedField(Tlv) -> dec_AutoForwardedField(Tlv, [1]). dec_AutoForwardedField(Tlv, TagIn) -> decode_boolean(Tlv, TagIn). %%================================ %% ExtensionsField %%================================ enc_ExtensionsField(Val) -> enc_ExtensionsField(Val, [<<49>>]). enc_ExtensionsField(Val, TagIn) -> {EncBytes,EncLen} = 'enc_ExtensionsField_components'(Val,[],0), encode_tags(TagIn, EncBytes, EncLen). 'enc_ExtensionsField_components'([], AccBytes, AccLen) -> {lists:reverse(AccBytes),AccLen}; 'enc_ExtensionsField_components'([H|T],AccBytes, AccLen) -> {EncBytes,EncLen} = 'enc_ExtensionsField_IPMSExtension'(H, [<<48>>]), 'enc_ExtensionsField_components'(T,[EncBytes|AccBytes], AccLen + EncLen). %%================================ %% ExtensionsField_IPMSExtension %%================================ enc_ExtensionsField_IPMSExtension(Val, TagIn) -> {_,Cindex1,Cindex2} = Val, Objtype = 'IPMSInformationObjects':'getenc_internal_object_set_argument_2'( Cindex1), %%------------------------------------------------- %% attribute type(1) with type OBJECT IDENTIFIER %%------------------------------------------------- {EncBytes1,EncLen1} = encode_object_identifier(Cindex1, [<<6>>]), %%------------------------------------------------- %% attribute value(2) with type typefieldType DEFAULT = 'NULL' %%------------------------------------------------- {EncBytes2,EncLen2} = case Cindex2 of asn1_DEFAULT -> {<<>>,0}; _ when Cindex2 =:= 'NULL' -> {<<>>,0}; _ -> {TmpBytes2,_ } = Objtype('Type', Cindex2, []), encode_open_type(TmpBytes2, []) end, BytesSoFar = [EncBytes1, EncBytes2], LenSoFar = EncLen1 + EncLen2, encode_tags(TagIn, BytesSoFar, LenSoFar). dec_ExtensionsField(Tlv) -> dec_ExtensionsField(Tlv, [17]). dec_ExtensionsField(Tlv, TagIn) -> %%------------------------------------------------- %% decode tag and length %%------------------------------------------------- Tlv1 = match_tags(Tlv, TagIn), ['dec_ExtensionsField_IPMSExtension'(V1, [16]) || V1 <- Tlv1]. 'dec_ExtensionsField_IPMSExtension'(Tlv, TagIn) -> %%------------------------------------------------- %% decode tag and length %%------------------------------------------------- Tlv1 = match_tags(Tlv, TagIn), %%------------------------------------------------- %% attribute type(1) with type OBJECT IDENTIFIER %%------------------------------------------------- [V1|Tlv2] = Tlv1, Term1 = decode_object_identifier(V1, [6]), %%------------------------------------------------- %% attribute value(2) with type typefieldType DEFAULT = 'NULL' %%------------------------------------------------- {Tmpterm1,Tlv3} = case Tlv2 of [V2|TempTlv3] -> {decode_open_type(V2, []), TempTlv3}; _ -> {'NULL',Tlv2} end, DecObjtypeTerm1 = 'IPMSInformationObjects':'getdec_internal_object_set_argument_2'(Term1), Term2 = case Tmpterm1 of 'NULL' ->'NULL'; _ -> case (catch DecObjtypeTerm1('Type', Tmpterm1, [])) of {'EXIT', Reason1} -> exit({'Type not compatible with table constraint',Reason1}); Tmpterm2 -> Tmpterm2 end end, case Tlv3 of [] -> true;_ -> exit({error,{asn1, {unexpected,Tlv3}}}) % extra fields not allowed end, Res1 = {'IPMSExtension',Term1,Term2}, Res1. %%================================ %% Body %%================================ enc_Body(Val) -> enc_Body(Val, [<<48>>]). enc_Body(Val, TagIn) -> {EncBytes,EncLen} = 'enc_Body_components'(Val,[],0), encode_tags(TagIn, EncBytes, EncLen). 'enc_Body_components'([], AccBytes, AccLen) -> {lists:reverse(AccBytes),AccLen}; 'enc_Body_components'([H|T],AccBytes, AccLen) -> {EncBytes,EncLen} = 'enc_BodyPart'(H, []), 'enc_Body_components'(T,[EncBytes|AccBytes], AccLen + EncLen). dec_Body(Tlv) -> dec_Body(Tlv, [16]). dec_Body(Tlv, TagIn) -> %%------------------------------------------------- %% decode tag and length %%------------------------------------------------- Tlv1 = match_tags(Tlv, TagIn), ['dec_BodyPart'(V1, []) || V1 <- Tlv1]. %%================================ %% BodyPart %%================================ enc_BodyPart(Val) -> enc_BodyPart(Val, []). enc_BodyPart(Val, TagIn) -> {EncBytes,EncLen} = case element(1,Val) of basic -> 'enc_BodyPart_basic'(element(2,Val), []); extended -> 'enc_BodyPart_extended'(element(2,Val), [<<175>>]); Else -> exit({error,{asn1,{invalid_choice_type,Else}}}) end, encode_tags(TagIn, EncBytes, EncLen). %%================================ %% BodyPart_basic %%================================ enc_BodyPart_basic(Val, TagIn) -> {EncBytes,EncLen} = case element(1,Val) of 'ia5-text' -> 'enc_IA5TextBodyPart'(element(2,Val), [<<160>>]); 'g3-facsimile' -> 'enc_G3FacsimileBodyPart'(element(2,Val), [<<163>>]); 'g4-class1' -> 'enc_G4Class1BodyPart'(element(2,Val), [<<164>>]); teletex -> 'enc_TeletexBodyPart'(element(2,Val), [<<165>>]); videotex -> 'enc_VideotexBodyPart'(element(2,Val), [<<166>>]); encrypted -> 'enc_EncryptedBodyPart'(element(2,Val), [<<168>>]); message -> 'enc_MessageBodyPart'(element(2,Val), [<<169>>]); 'mixed-mode' -> 'enc_MixedModeBodyPart'(element(2,Val), [<<171>>]); 'bilaterally-defined' -> encode_restricted_string(element(2,Val), [<<142>>]); 'nationally-defined' -> 'enc_NationallyDefinedBodyPart'(element(2,Val), [<<167>>]); Else -> exit({error,{asn1,{invalid_choice_type,Else}}}) end, encode_tags(TagIn, EncBytes, EncLen). %%================================ %% BodyPart_extended %%================================ enc_BodyPart_extended(Val, TagIn) -> {_,Cindex1,Cindex2} = Val, %%------------------------------------------------- %% attribute parameters(1) External IPMSInformationObjects:INSTANCE OF OPTIONAL %%------------------------------------------------- {EncBytes1,EncLen1} = case Cindex1 of asn1_NOVALUE -> {<<>>,0}; _ -> 'enc_INSTANCE OF'(Cindex1, [<<160>>]) end, %%------------------------------------------------- %% attribute data(2) External IPMSInformationObjects:INSTANCE OF %%------------------------------------------------- {EncBytes2,EncLen2} = 'enc_INSTANCE OF'(Cindex2, [<<40>>]), BytesSoFar = [EncBytes1, EncBytes2], LenSoFar = EncLen1 + EncLen2, encode_tags(TagIn, BytesSoFar, LenSoFar). dec_BodyPart(Tlv) -> dec_BodyPart(Tlv, []). dec_BodyPart(Tlv, TagIn) -> Tlv1 = match_tags(Tlv, TagIn), case (case Tlv1 of [CtempTlv1] -> CtempTlv1; _ -> Tlv1 end) of %% 'basic' V1 = {131072,_} -> {basic, 'dec_BodyPart_basic'(V1, [])}; V1 = {131075,_} -> {basic, 'dec_BodyPart_basic'(V1, [])}; V1 = {131076,_} -> {basic, 'dec_BodyPart_basic'(V1, [])}; V1 = {131077,_} -> {basic, 'dec_BodyPart_basic'(V1, [])}; V1 = {131078,_} -> {basic, 'dec_BodyPart_basic'(V1, [])}; V1 = {131080,_} -> {basic, 'dec_BodyPart_basic'(V1, [])}; V1 = {131081,_} -> {basic, 'dec_BodyPart_basic'(V1, [])}; V1 = {131083,_} -> {basic, 'dec_BodyPart_basic'(V1, [])}; V1 = {131086,_} -> {basic, 'dec_BodyPart_basic'(V1, [])}; V1 = {131079,_} -> {basic, 'dec_BodyPart_basic'(V1, [])}; %% 'extended' {131087, V1} -> {extended, 'dec_BodyPart_extended'(V1, [])}; Else -> exit({error,{asn1,{invalid_choice_tag,Else}}}) end . 'dec_BodyPart_basic'(Tlv, TagIn) -> Tlv1 = match_tags(Tlv, TagIn), case (case Tlv1 of [CtempTlv1] -> CtempTlv1; _ -> Tlv1 end) of %% 'ia5-text' {131072, V1} -> {'ia5-text', 'dec_IA5TextBodyPart'(V1, [])}; %% 'g3-facsimile' {131075, V1} -> {'g3-facsimile', 'dec_G3FacsimileBodyPart'(V1, [])}; %% 'g4-class1' {131076, V1} -> {'g4-class1', 'dec_G4Class1BodyPart'(V1, [])}; %% 'teletex' {131077, V1} -> {teletex, 'dec_TeletexBodyPart'(V1, [])}; %% 'videotex' {131078, V1} -> {videotex, 'dec_VideotexBodyPart'(V1, [])}; %% 'encrypted' {131080, V1} -> {encrypted, 'dec_EncryptedBodyPart'(V1, [])}; %% 'message' {131081, V1} -> {message, 'dec_MessageBodyPart'(V1, [])}; %% 'mixed-mode' {131083, V1} -> {'mixed-mode', 'dec_MixedModeBodyPart'(V1, [])}; %% 'bilaterally-defined' {131086, V1} -> {'bilaterally-defined', decode_octet_string(V1, [])}; %% 'nationally-defined' {131079, V1} -> {'nationally-defined', 'dec_NationallyDefinedBodyPart'(V1, [])}; Else -> exit({error,{asn1,{invalid_choice_tag,Else}}}) end . 'dec_BodyPart_extended'(Tlv, TagIn) -> %%------------------------------------------------- %% decode tag and length %%------------------------------------------------- Tlv1 = match_tags(Tlv, TagIn), %%------------------------------------------------- %% attribute parameters(1) External IPMSInformationObjects:INSTANCE OF OPTIONAL %%------------------------------------------------- {Term1,Tlv2} = case Tlv1 of [{131072,V1}|TempTlv2] -> {'dec_INSTANCE OF'(V1, []), TempTlv2}; _ -> { asn1_NOVALUE, Tlv1} end, %%------------------------------------------------- %% attribute data(2) External IPMSInformationObjects:INSTANCE OF %%------------------------------------------------- [V2|Tlv3] = Tlv2, Term2 = 'dec_INSTANCE OF'(V2, [8]), case Tlv3 of [] -> true;_ -> exit({error,{asn1, {unexpected,Tlv3}}}) % extra fields not allowed end, Res1 = {'BodyPart_extended',Term1,Term2}, Res1. %%================================ %% IA5TextBodyPart %%================================ enc_IA5TextBodyPart(Val) -> enc_IA5TextBodyPart(Val, [<<48>>]). enc_IA5TextBodyPart(Val, TagIn) -> {_,Cindex1,Cindex2} = Val, %%------------------------------------------------- %% attribute parameters(1) External IPMSInformationObjects:IA5TextParameters %%------------------------------------------------- {EncBytes1,EncLen1} = 'enc_IA5TextParameters'(Cindex1, [<<49>>]), %%------------------------------------------------- %% attribute data(2) with type IA5String %%------------------------------------------------- {EncBytes2,EncLen2} = encode_restricted_string(Cindex2, [<<22>>]), BytesSoFar = [EncBytes1, EncBytes2], LenSoFar = EncLen1 + EncLen2, encode_tags(TagIn, BytesSoFar, LenSoFar). dec_IA5TextBodyPart(Tlv) -> dec_IA5TextBodyPart(Tlv, [16]). dec_IA5TextBodyPart(Tlv, TagIn) -> %%------------------------------------------------- %% decode tag and length %%------------------------------------------------- Tlv1 = match_tags(Tlv, TagIn), %%------------------------------------------------- %% attribute parameters(1) External IPMSInformationObjects:IA5TextParameters %%------------------------------------------------- [V1|Tlv2] = Tlv1, Term1 = 'dec_IA5TextParameters'(V1, [17]), %%------------------------------------------------- %% attribute data(2) with type IA5String %%------------------------------------------------- [V2|Tlv3] = Tlv2, Term2 = begin binary_to_list(decode_restricted_string(V2, [22])) end , case Tlv3 of [] -> true;_ -> exit({error,{asn1, {unexpected,Tlv3}}}) % extra fields not allowed end, Res1 = {'IA5TextBodyPart',Term1,Term2}, Res1. %%================================ %% IA5TextParameters %%================================ enc_IA5TextParameters(Val) -> enc_IA5TextParameters(Val, [<<49>>]). enc_IA5TextParameters(Val, TagIn) -> {_,Cindex1} = Val, %%------------------------------------------------- %% attribute repertoire(1) with type ENUMERATED DEFAULT = ia5 %%------------------------------------------------- {EncBytes1,EncLen1} = case Cindex1 of asn1_DEFAULT -> {<<>>,0}; _ when Cindex1 =:= ia5 -> {<<>>,0}; _ -> case Cindex1 of ita2 -> encode_tags([<<128>>], [2], 1); ia5 -> encode_tags([<<128>>], [5], 1); Enumval1 -> exit({error,{asn1, {enumerated_not_in_range,Enumval1}}}) end end, BytesSoFar = [EncBytes1], LenSoFar = EncLen1, encode_tags(TagIn, BytesSoFar, LenSoFar). dec_IA5TextParameters(Tlv) -> dec_IA5TextParameters(Tlv, [17]). dec_IA5TextParameters(Tlv, TagIn) -> Tlv1 = match_tags(Tlv, TagIn), SetFun = fun(FunTlv) -> case FunTlv of %repertoire TTlv = {131072,_} -> {1, TTlv}; Else -> {2, Else} end end, PositionList = [SetFun(TempTlv)|| TempTlv <- Tlv1], Tlv2 = [Stlv || {_,Stlv} <- lists:sort(PositionList)], %%------------------------------------------------- %% attribute repertoire(1) with type ENUMERATED DEFAULT = ia5 %%------------------------------------------------- {Term1,Tlv3} = case Tlv2 of [{131072,V1}|TempTlv3] -> {case decode_integer(V1, []) of 2 -> ita2; 5 -> ia5; Default1 -> exit({error,{asn1,{illegal_enumerated,Default1}}}) end, TempTlv3}; _ -> {ia5,Tlv2} end, case Tlv3 of [] -> true;_ -> exit({error,{asn1, {unexpected,Tlv3}}}) % extra fields not allowed end, Res1 = {'IA5TextParameters',Term1}, Res1. %%================================ %% IA5TextData %%================================ enc_IA5TextData(Val) -> enc_IA5TextData(Val, [<<22>>]). enc_IA5TextData(Val, TagIn) -> encode_restricted_string(Val, TagIn). dec_IA5TextData(Tlv) -> dec_IA5TextData(Tlv, [22]). dec_IA5TextData(Tlv, TagIn) -> begin binary_to_list(decode_restricted_string(Tlv, TagIn)) end . %%================================ %% Repertoire %%================================ enc_Repertoire(Val) -> enc_Repertoire(Val, [<<10>>]). enc_Repertoire(Val, TagIn) -> case Val of ita2 -> encode_tags(TagIn, [2], 1); ia5 -> encode_tags(TagIn, [5], 1); Enumval1 -> exit({error,{asn1, {enumerated_not_in_range,Enumval1}}}) end. dec_Repertoire(Tlv) -> dec_Repertoire(Tlv, [10]). dec_Repertoire(Tlv, TagIn) -> case decode_integer(Tlv, TagIn) of 2 -> ita2; 5 -> ia5; Default1 -> exit({error,{asn1,{illegal_enumerated,Default1}}}) end. %%================================ %% G3FacsimileBodyPart %%================================ enc_G3FacsimileBodyPart(Val) -> enc_G3FacsimileBodyPart(Val, [<<48>>]). enc_G3FacsimileBodyPart(Val, TagIn) -> {_,Cindex1,Cindex2} = Val, %%------------------------------------------------- %% attribute parameters(1) External IPMSInformationObjects:G3FacsimileParameters %%------------------------------------------------- {EncBytes1,EncLen1} = 'enc_G3FacsimileParameters'(Cindex1, [<<49>>]), %%------------------------------------------------- %% attribute data(2) External IPMSInformationObjects:G3FacsimileData %%------------------------------------------------- {EncBytes2,EncLen2} = 'enc_G3FacsimileData'(Cindex2, [<<48>>]), BytesSoFar = [EncBytes1, EncBytes2], LenSoFar = EncLen1 + EncLen2, encode_tags(TagIn, BytesSoFar, LenSoFar). dec_G3FacsimileBodyPart(Tlv) -> dec_G3FacsimileBodyPart(Tlv, [16]). dec_G3FacsimileBodyPart(Tlv, TagIn) -> %%------------------------------------------------- %% decode tag and length %%------------------------------------------------- Tlv1 = match_tags(Tlv, TagIn), %%------------------------------------------------- %% attribute parameters(1) External IPMSInformationObjects:G3FacsimileParameters %%------------------------------------------------- [V1|Tlv2] = Tlv1, Term1 = 'dec_G3FacsimileParameters'(V1, [17]), %%------------------------------------------------- %% attribute data(2) External IPMSInformationObjects:G3FacsimileData %%------------------------------------------------- [V2|Tlv3] = Tlv2, Term2 = 'dec_G3FacsimileData'(V2, [16]), case Tlv3 of [] -> true;_ -> exit({error,{asn1, {unexpected,Tlv3}}}) % extra fields not allowed end, Res1 = {'G3FacsimileBodyPart',Term1,Term2}, Res1. %%================================ %% G3FacsimileParameters %%================================ enc_G3FacsimileParameters(Val) -> enc_G3FacsimileParameters(Val, [<<49>>]). enc_G3FacsimileParameters(Val, TagIn) -> {_,Cindex1,Cindex2} = Val, %%------------------------------------------------- %% attribute number-of-pages(1) with type INTEGER OPTIONAL %%------------------------------------------------- {EncBytes1,EncLen1} = case Cindex1 of asn1_NOVALUE -> {<<>>,0}; _ -> encode_integer(Cindex1, [<<128>>]) end, %%------------------------------------------------- %% attribute non-basic-parameters(2) with type BIT STRING OPTIONAL %%------------------------------------------------- {EncBytes2,EncLen2} = case Cindex2 of asn1_NOVALUE -> {<<>>,0}; _ -> encode_named_bit_string(Cindex2, [{'two-dimensional',8},{'fine-resolution',9},{'unlimited-length',20},{'b4-length',21},{'a3-width',22},{'b4-width',23},{'t6-coding',25},{uncompressed,30},{'width-middle-864-of-1728',37},{'width-middle-1216-of-1728',38},{'resolution-type',44},{'resolution-400x400',45},{'resolution-300x300',46},{'resolution-8x15',47},{edi,49},{dtm,50},{bft,51},{'mixed-mode',58},{'character-mode',60},{'twelve-bits',65},{'preferred-huffmann',66},{'full-colour',67},{jpeg,68},{'processable-mode-26',71}], [<<129>>]) end, BytesSoFar = [EncBytes1, EncBytes2], LenSoFar = EncLen1 + EncLen2, encode_tags(TagIn, BytesSoFar, LenSoFar). dec_G3FacsimileParameters(Tlv) -> dec_G3FacsimileParameters(Tlv, [17]). dec_G3FacsimileParameters(Tlv, TagIn) -> Tlv1 = match_tags(Tlv, TagIn), SetFun = fun(FunTlv) -> case FunTlv of %number-of-pages TTlv = {131072,_} -> {1, TTlv}; %non-basic-parameters TTlv = {131073,_} -> {2, TTlv}; Else -> {3, Else} end end, PositionList = [SetFun(TempTlv)|| TempTlv <- Tlv1], Tlv2 = [Stlv || {_,Stlv} <- lists:sort(PositionList)], %%------------------------------------------------- %% attribute number-of-pages(1) with type INTEGER OPTIONAL %%------------------------------------------------- {Term1,Tlv3} = case Tlv2 of [{131072,V1}|TempTlv3] -> {decode_integer(V1, []), TempTlv3}; _ -> { asn1_NOVALUE, Tlv2} end, %%------------------------------------------------- %% attribute non-basic-parameters(2) with type BIT STRING OPTIONAL %%------------------------------------------------- {Term2,Tlv4} = case Tlv3 of [{131073,V2}|TempTlv4] -> {decode_named_bit_string(V2, [{'two-dimensional',8},{'fine-resolution',9},{'unlimited-length',20},{'b4-length',21},{'a3-width',22},{'b4-width',23},{'t6-coding',25},{uncompressed,30},{'width-middle-864-of-1728',37},{'width-middle-1216-of-1728',38},{'resolution-type',44},{'resolution-400x400',45},{'resolution-300x300',46},{'resolution-8x15',47},{edi,49},{dtm,50},{bft,51},{'mixed-mode',58},{'character-mode',60},{'twelve-bits',65},{'preferred-huffmann',66},{'full-colour',67},{jpeg,68},{'processable-mode-26',71}], []), TempTlv4}; _ -> { asn1_NOVALUE, Tlv3} end, case Tlv4 of [] -> true;_ -> exit({error,{asn1, {unexpected,Tlv4}}}) % extra fields not allowed end, Res1 = {'G3FacsimileParameters',Term1,Term2}, Res1. %%================================ %% G3FacsimileData %%================================ enc_G3FacsimileData(Val) -> enc_G3FacsimileData(Val, [<<48>>]). enc_G3FacsimileData(Val, TagIn) -> {EncBytes,EncLen} = 'enc_G3FacsimileData_components'(Val,[],0), encode_tags(TagIn, EncBytes, EncLen). 'enc_G3FacsimileData_components'([], AccBytes, AccLen) -> {lists:reverse(AccBytes),AccLen}; 'enc_G3FacsimileData_components'([H|T],AccBytes, AccLen) -> {EncBytes,EncLen} = encode_unnamed_bit_string(H, [<<3>>]), 'enc_G3FacsimileData_components'(T,[EncBytes|AccBytes], AccLen + EncLen). dec_G3FacsimileData(Tlv) -> dec_G3FacsimileData(Tlv, [16]). dec_G3FacsimileData(Tlv, TagIn) -> %%------------------------------------------------- %% decode tag and length %%------------------------------------------------- Tlv1 = match_tags(Tlv, TagIn), [decode_native_bit_string(V1, [3]) || V1 <- Tlv1]. %%================================ %% G4Class1BodyPart %%================================ enc_G4Class1BodyPart(Val) -> enc_G4Class1BodyPart(Val, [<<48>>]). enc_G4Class1BodyPart(Val, TagIn) -> {EncBytes,EncLen} = 'enc_G4Class1BodyPart_components'(Val,[],0), encode_tags(TagIn, EncBytes, EncLen). 'enc_G4Class1BodyPart_components'([], AccBytes, AccLen) -> {lists:reverse(AccBytes),AccLen}; 'enc_G4Class1BodyPart_components'([H|T],AccBytes, AccLen) -> {EncBytes,EncLen} = 'Interchange-Data-Elements':'enc_Interchange-Data-Element'(H, []), 'enc_G4Class1BodyPart_components'(T,[EncBytes|AccBytes], AccLen + EncLen). dec_G4Class1BodyPart(Tlv) -> dec_G4Class1BodyPart(Tlv, [16]). dec_G4Class1BodyPart(Tlv, TagIn) -> %%------------------------------------------------- %% decode tag and length %%------------------------------------------------- Tlv1 = match_tags(Tlv, TagIn), ['Interchange-Data-Elements':'dec_Interchange-Data-Element'(V1, []) || V1 <- Tlv1]. %%================================ %% MixedModeBodyPart %%================================ enc_MixedModeBodyPart(Val) -> enc_MixedModeBodyPart(Val, [<<48>>]). enc_MixedModeBodyPart(Val, TagIn) -> {EncBytes,EncLen} = 'enc_MixedModeBodyPart_components'(Val,[],0), encode_tags(TagIn, EncBytes, EncLen). 'enc_MixedModeBodyPart_components'([], AccBytes, AccLen) -> {lists:reverse(AccBytes),AccLen}; 'enc_MixedModeBodyPart_components'([H|T],AccBytes, AccLen) -> {EncBytes,EncLen} = 'Interchange-Data-Elements':'enc_Interchange-Data-Element'(H, []), 'enc_MixedModeBodyPart_components'(T,[EncBytes|AccBytes], AccLen + EncLen). dec_MixedModeBodyPart(Tlv) -> dec_MixedModeBodyPart(Tlv, [16]). dec_MixedModeBodyPart(Tlv, TagIn) -> %%------------------------------------------------- %% decode tag and length %%------------------------------------------------- Tlv1 = match_tags(Tlv, TagIn), ['Interchange-Data-Elements':'dec_Interchange-Data-Element'(V1, []) || V1 <- Tlv1]. %%================================ %% TeletexBodyPart %%================================ enc_TeletexBodyPart(Val) -> enc_TeletexBodyPart(Val, [<<48>>]). enc_TeletexBodyPart(Val, TagIn) -> {_,Cindex1,Cindex2} = Val, %%------------------------------------------------- %% attribute parameters(1) External IPMSInformationObjects:TeletexParameters %%------------------------------------------------- {EncBytes1,EncLen1} = 'enc_TeletexParameters'(Cindex1, [<<49>>]), %%------------------------------------------------- %% attribute data(2) External IPMSInformationObjects:TeletexData %%------------------------------------------------- {EncBytes2,EncLen2} = 'enc_TeletexData'(Cindex2, [<<48>>]), BytesSoFar = [EncBytes1, EncBytes2], LenSoFar = EncLen1 + EncLen2, encode_tags(TagIn, BytesSoFar, LenSoFar). dec_TeletexBodyPart(Tlv) -> dec_TeletexBodyPart(Tlv, [16]). dec_TeletexBodyPart(Tlv, TagIn) -> %%------------------------------------------------- %% decode tag and length %%------------------------------------------------- Tlv1 = match_tags(Tlv, TagIn), %%------------------------------------------------- %% attribute parameters(1) External IPMSInformationObjects:TeletexParameters %%------------------------------------------------- [V1|Tlv2] = Tlv1, Term1 = 'dec_TeletexParameters'(V1, [17]), %%------------------------------------------------- %% attribute data(2) External IPMSInformationObjects:TeletexData %%------------------------------------------------- [V2|Tlv3] = Tlv2, Term2 = 'dec_TeletexData'(V2, [16]), case Tlv3 of [] -> true;_ -> exit({error,{asn1, {unexpected,Tlv3}}}) % extra fields not allowed end, Res1 = {'TeletexBodyPart',Term1,Term2}, Res1. %%================================ %% TeletexParameters %%================================ enc_TeletexParameters(Val) -> enc_TeletexParameters(Val, [<<49>>]). enc_TeletexParameters(Val, TagIn) -> {_,Cindex1,Cindex2,Cindex3} = Val, %%------------------------------------------------- %% attribute number-of-pages(1) with type INTEGER OPTIONAL %%------------------------------------------------- {EncBytes1,EncLen1} = case Cindex1 of asn1_NOVALUE -> {<<>>,0}; _ -> encode_integer(Cindex1, [<<128>>]) end, %%------------------------------------------------- %% attribute telex-compatible(2) with type BOOLEAN DEFAULT = false %%------------------------------------------------- {EncBytes2,EncLen2} = case Cindex2 of asn1_DEFAULT -> {<<>>,0}; _ when Cindex2 =:= false -> {<<>>,0}; _ -> encode_boolean(Cindex2, [<<129>>]) end, %%------------------------------------------------- %% attribute non-basic-parameters(3) External MTSAbstractService:TeletexNonBasicParameters OPTIONAL %%------------------------------------------------- {EncBytes3,EncLen3} = case Cindex3 of asn1_NOVALUE -> {<<>>,0}; _ -> 'MTSAbstractService':'enc_TeletexNonBasicParameters'(Cindex3, [<<162>>]) end, BytesSoFar = [EncBytes1, EncBytes2, EncBytes3], LenSoFar = EncLen1 + EncLen2 + EncLen3, encode_tags(TagIn, BytesSoFar, LenSoFar). dec_TeletexParameters(Tlv) -> dec_TeletexParameters(Tlv, [17]). dec_TeletexParameters(Tlv, TagIn) -> Tlv1 = match_tags(Tlv, TagIn), SetFun = fun(FunTlv) -> case FunTlv of %number-of-pages TTlv = {131072,_} -> {1, TTlv}; %telex-compatible TTlv = {131073,_} -> {2, TTlv}; %non-basic-parameters TTlv = {131074,_} -> {3, TTlv}; Else -> {4, Else} end end, PositionList = [SetFun(TempTlv)|| TempTlv <- Tlv1], Tlv2 = [Stlv || {_,Stlv} <- lists:sort(PositionList)], %%------------------------------------------------- %% attribute number-of-pages(1) with type INTEGER OPTIONAL %%------------------------------------------------- {Term1,Tlv3} = case Tlv2 of [{131072,V1}|TempTlv3] -> {decode_integer(V1, []), TempTlv3}; _ -> { asn1_NOVALUE, Tlv2} end, %%------------------------------------------------- %% attribute telex-compatible(2) with type BOOLEAN DEFAULT = false %%------------------------------------------------- {Term2,Tlv4} = case Tlv3 of [{131073,V2}|TempTlv4] -> {decode_boolean(V2, []), TempTlv4}; _ -> {false,Tlv3} end, %%------------------------------------------------- %% attribute non-basic-parameters(3) External MTSAbstractService:TeletexNonBasicParameters OPTIONAL %%------------------------------------------------- {Term3,Tlv5} = case Tlv4 of [{131074,V3}|TempTlv5] -> {'MTSAbstractService':'dec_TeletexNonBasicParameters'(V3, []), TempTlv5}; _ -> { asn1_NOVALUE, Tlv4} end, case Tlv5 of [] -> true;_ -> exit({error,{asn1, {unexpected,Tlv5}}}) % extra fields not allowed end, Res1 = {'TeletexParameters',Term1,Term2,Term3}, Res1. %%================================ %% TeletexData %%================================ enc_TeletexData(Val) -> enc_TeletexData(Val, [<<48>>]). enc_TeletexData(Val, TagIn) -> {EncBytes,EncLen} = 'enc_TeletexData_components'(Val,[],0), encode_tags(TagIn, EncBytes, EncLen). 'enc_TeletexData_components'([], AccBytes, AccLen) -> {lists:reverse(AccBytes),AccLen}; 'enc_TeletexData_components'([H|T],AccBytes, AccLen) -> {EncBytes,EncLen} = encode_restricted_string(H, [<<20>>]), 'enc_TeletexData_components'(T,[EncBytes|AccBytes], AccLen + EncLen). dec_TeletexData(Tlv) -> dec_TeletexData(Tlv, [16]). dec_TeletexData(Tlv, TagIn) -> %%------------------------------------------------- %% decode tag and length %%------------------------------------------------- Tlv1 = match_tags(Tlv, TagIn), [begin binary_to_list(decode_restricted_string(V1, [20])) end || V1 <- Tlv1]. %%================================ %% VideotexBodyPart %%================================ enc_VideotexBodyPart(Val) -> enc_VideotexBodyPart(Val, [<<48>>]). enc_VideotexBodyPart(Val, TagIn) -> {_,Cindex1,Cindex2} = Val, %%------------------------------------------------- %% attribute parameters(1) External IPMSInformationObjects:VideotexParameters %%------------------------------------------------- {EncBytes1,EncLen1} = 'enc_VideotexParameters'(Cindex1, [<<49>>]), %%------------------------------------------------- %% attribute data(2) with type VideotexString %%------------------------------------------------- {EncBytes2,EncLen2} = encode_restricted_string(Cindex2, [<<21>>]), BytesSoFar = [EncBytes1, EncBytes2], LenSoFar = EncLen1 + EncLen2, encode_tags(TagIn, BytesSoFar, LenSoFar). dec_VideotexBodyPart(Tlv) -> dec_VideotexBodyPart(Tlv, [16]). dec_VideotexBodyPart(Tlv, TagIn) -> %%------------------------------------------------- %% decode tag and length %%------------------------------------------------- Tlv1 = match_tags(Tlv, TagIn), %%------------------------------------------------- %% attribute parameters(1) External IPMSInformationObjects:VideotexParameters %%------------------------------------------------- [V1|Tlv2] = Tlv1, Term1 = 'dec_VideotexParameters'(V1, [17]), %%------------------------------------------------- %% attribute data(2) with type VideotexString %%------------------------------------------------- [V2|Tlv3] = Tlv2, Term2 = begin binary_to_list(decode_restricted_string(V2, [21])) end , case Tlv3 of [] -> true;_ -> exit({error,{asn1, {unexpected,Tlv3}}}) % extra fields not allowed end, Res1 = {'VideotexBodyPart',Term1,Term2}, Res1. %%================================ %% VideotexParameters %%================================ enc_VideotexParameters(Val) -> enc_VideotexParameters(Val, [<<49>>]). enc_VideotexParameters(Val, TagIn) -> {_,Cindex1} = Val, %%------------------------------------------------- %% attribute syntax(1) with type INTEGER OPTIONAL %%------------------------------------------------- {EncBytes1,EncLen1} = case Cindex1 of asn1_NOVALUE -> {<<>>,0}; _ -> encode_integer(Cindex1, [{ids,0},{'data-syntax1',1},{'data-syntax2',2},{'data-syntax3',3}], [<<128>>]) end, BytesSoFar = [EncBytes1], LenSoFar = EncLen1, encode_tags(TagIn, BytesSoFar, LenSoFar). dec_VideotexParameters(Tlv) -> dec_VideotexParameters(Tlv, [17]). dec_VideotexParameters(Tlv, TagIn) -> Tlv1 = match_tags(Tlv, TagIn), SetFun = fun(FunTlv) -> case FunTlv of %syntax TTlv = {131072,_} -> {1, TTlv}; Else -> {2, Else} end end, PositionList = [SetFun(TempTlv)|| TempTlv <- Tlv1], Tlv2 = [Stlv || {_,Stlv} <- lists:sort(PositionList)], %%------------------------------------------------- %% attribute syntax(1) with type INTEGER OPTIONAL %%------------------------------------------------- {Term1,Tlv3} = case Tlv2 of [{131072,V1}|TempTlv3] -> {begin Val1 = decode_integer(V1, []), number2name(Val1, [{ids,0},{'data-syntax1',1},{'data-syntax2',2},{'data-syntax3',3}]) end , TempTlv3}; _ -> { asn1_NOVALUE, Tlv2} end, case Tlv3 of [] -> true;_ -> exit({error,{asn1, {unexpected,Tlv3}}}) % extra fields not allowed end, Res1 = {'VideotexParameters',Term1}, Res1. %%================================ %% VideotexSyntax %%================================ enc_VideotexSyntax(Val) -> enc_VideotexSyntax(Val, [<<2>>]). enc_VideotexSyntax(Val, TagIn) -> encode_integer(Val, [{ids,0},{'data-syntax1',1},{'data-syntax2',2},{'data-syntax3',3}], TagIn). dec_VideotexSyntax(Tlv) -> dec_VideotexSyntax(Tlv, [2]). dec_VideotexSyntax(Tlv, TagIn) -> begin Val1 = decode_integer(Tlv, TagIn), number2name(Val1, [{ids,0},{'data-syntax1',1},{'data-syntax2',2},{'data-syntax3',3}]) end . %%================================ %% VideotexData %%================================ enc_VideotexData(Val) -> enc_VideotexData(Val, [<<21>>]). enc_VideotexData(Val, TagIn) -> encode_restricted_string(Val, TagIn). dec_VideotexData(Tlv) -> dec_VideotexData(Tlv, [21]). dec_VideotexData(Tlv, TagIn) -> begin binary_to_list(decode_restricted_string(Tlv, TagIn)) end . %%================================ %% EncryptedBodyPart %%================================ enc_EncryptedBodyPart(Val) -> enc_EncryptedBodyPart(Val, [<<48>>]). enc_EncryptedBodyPart(Val, TagIn) -> {_,Cindex1,Cindex2} = Val, %%------------------------------------------------- %% attribute parameters(1) External IPMSInformationObjects:EncryptedParameters %%------------------------------------------------- {EncBytes1,EncLen1} = 'enc_EncryptedParameters'(Cindex1, [<<49>>]), %%------------------------------------------------- %% attribute data(2) with type BIT STRING %%------------------------------------------------- {EncBytes2,EncLen2} = encode_unnamed_bit_string(Cindex2, [<<3>>]), BytesSoFar = [EncBytes1, EncBytes2], LenSoFar = EncLen1 + EncLen2, encode_tags(TagIn, BytesSoFar, LenSoFar). dec_EncryptedBodyPart(Tlv) -> dec_EncryptedBodyPart(Tlv, [16]). dec_EncryptedBodyPart(Tlv, TagIn) -> %%------------------------------------------------- %% decode tag and length %%------------------------------------------------- Tlv1 = match_tags(Tlv, TagIn), %%------------------------------------------------- %% attribute parameters(1) External IPMSInformationObjects:EncryptedParameters %%------------------------------------------------- [V1|Tlv2] = Tlv1, Term1 = 'dec_EncryptedParameters'(V1, [17]), %%------------------------------------------------- %% attribute data(2) with type BIT STRING %%------------------------------------------------- [V2|Tlv3] = Tlv2, Term2 = decode_native_bit_string(V2, [3]), case Tlv3 of [] -> true;_ -> exit({error,{asn1, {unexpected,Tlv3}}}) % extra fields not allowed end, Res1 = {'EncryptedBodyPart',Term1,Term2}, Res1. %%================================ %% EncryptedParameters %%================================ enc_EncryptedParameters(Val) -> enc_EncryptedParameters(Val, [<<49>>]). enc_EncryptedParameters(Val, TagIn) -> {_,Cindex1,Cindex2} = Val, %%------------------------------------------------- %% attribute algorithm-identifier(1) External AuthenticationFramework:AlgorithmIdentifier %%------------------------------------------------- {EncBytes1,EncLen1} = 'AuthenticationFramework':'enc_AlgorithmIdentifier'(Cindex1, [<<48>>]), %%------------------------------------------------- %% attribute originator-certificates(2) External MTSAbstractService:ExtendedCertificates OPTIONAL %%------------------------------------------------- {EncBytes2,EncLen2} = case Cindex2 of asn1_NOVALUE -> {<<>>,0}; _ -> 'MTSAbstractService':'enc_ExtendedCertificates'(Cindex2, [<<49>>]) end, BytesSoFar = [EncBytes1, EncBytes2], LenSoFar = EncLen1 + EncLen2, encode_tags(TagIn, BytesSoFar, LenSoFar). dec_EncryptedParameters(Tlv) -> dec_EncryptedParameters(Tlv, [17]). dec_EncryptedParameters(Tlv, TagIn) -> Tlv1 = match_tags(Tlv, TagIn), SetFun = fun(FunTlv) -> case FunTlv of %algorithm-identifier TTlv = {16,_} -> {1, TTlv}; %originator-certificates TTlv = {17,_} -> {2, TTlv}; Else -> {3, Else} end end, PositionList = [SetFun(TempTlv)|| TempTlv <- Tlv1], Tlv2 = [Stlv || {_,Stlv} <- lists:sort(PositionList)], %%------------------------------------------------- %% attribute algorithm-identifier(1) External AuthenticationFramework:AlgorithmIdentifier %%------------------------------------------------- [V1|Tlv3] = Tlv2, Term1 = 'AuthenticationFramework':'dec_AlgorithmIdentifier'(V1, [16]), %%------------------------------------------------- %% attribute originator-certificates(2) External MTSAbstractService:ExtendedCertificates OPTIONAL %%------------------------------------------------- {Term2,Tlv4} = case Tlv3 of [{17,V2}|TempTlv4] -> {'MTSAbstractService':'dec_ExtendedCertificates'(V2, []), TempTlv4}; _ -> { asn1_NOVALUE, Tlv3} end, case Tlv4 of [] -> true; _ -> true end, % ... extra fields skipped Res1 = {'EncryptedParameters',Term1,Term2}, Res1. %%================================ %% EncryptedData %%================================ enc_EncryptedData(Val) -> enc_EncryptedData(Val, [<<3>>]). enc_EncryptedData(Val, TagIn) -> encode_unnamed_bit_string(Val, TagIn). dec_EncryptedData(Tlv) -> dec_EncryptedData(Tlv, [3]). dec_EncryptedData(Tlv, TagIn) -> decode_native_bit_string(Tlv, TagIn). %%================================ %% MessageBodyPart %%================================ enc_MessageBodyPart(Val) -> enc_MessageBodyPart(Val, [<<48>>]). enc_MessageBodyPart(Val, TagIn) -> {_,Cindex1,Cindex2} = Val, %%------------------------------------------------- %% attribute parameters(1) External IPMSInformationObjects:MessageParameters %%------------------------------------------------- {EncBytes1,EncLen1} = 'enc_MessageParameters'(Cindex1, [<<49>>]), %%------------------------------------------------- %% attribute data(2) External IPMSInformationObjects:MessageData %%------------------------------------------------- {EncBytes2,EncLen2} = 'enc_MessageData'(Cindex2, []), BytesSoFar = [EncBytes1, EncBytes2], LenSoFar = EncLen1 + EncLen2, encode_tags(TagIn, BytesSoFar, LenSoFar). dec_MessageBodyPart(Tlv) -> dec_MessageBodyPart(Tlv, [16]). dec_MessageBodyPart(Tlv, TagIn) -> %%------------------------------------------------- %% decode tag and length %%------------------------------------------------- Tlv1 = match_tags(Tlv, TagIn), %%------------------------------------------------- %% attribute parameters(1) External IPMSInformationObjects:MessageParameters %%------------------------------------------------- [V1|Tlv2] = Tlv1, Term1 = 'dec_MessageParameters'(V1, [17]), %%------------------------------------------------- %% attribute data(2) External IPMSInformationObjects:MessageData %%------------------------------------------------- [V2|Tlv3] = Tlv2, Term2 = 'dec_MessageData'(V2, []), case Tlv3 of [] -> true;_ -> exit({error,{asn1, {unexpected,Tlv3}}}) % extra fields not allowed end, Res1 = {'MessageBodyPart',Term1,Term2}, Res1. %%================================ %% MessageParameters %%================================ enc_MessageParameters(Val) -> enc_MessageParameters(Val, [<<49>>]). enc_MessageParameters(Val, TagIn) -> {_,Cindex1,Cindex2} = Val, %%------------------------------------------------- %% attribute delivery-time(1) with type UTCTime OPTIONAL %%------------------------------------------------- {EncBytes1,EncLen1} = case Cindex1 of asn1_NOVALUE -> {<<>>,0}; _ -> encode_restricted_string(Cindex1, [<<128>>]) end, %%------------------------------------------------- %% attribute delivery-envelope(2) External MTSAbstractService:OtherMessageDeliveryFields OPTIONAL %%------------------------------------------------- {EncBytes2,EncLen2} = case Cindex2 of asn1_NOVALUE -> {<<>>,0}; _ -> 'MTSAbstractService':'enc_OtherMessageDeliveryFields'(Cindex2, [<<161>>]) end, BytesSoFar = [EncBytes1, EncBytes2], LenSoFar = EncLen1 + EncLen2, encode_tags(TagIn, BytesSoFar, LenSoFar). dec_MessageParameters(Tlv) -> dec_MessageParameters(Tlv, [17]). dec_MessageParameters(Tlv, TagIn) -> Tlv1 = match_tags(Tlv, TagIn), SetFun = fun(FunTlv) -> case FunTlv of %delivery-time TTlv = {131072,_} -> {1, TTlv}; %delivery-envelope TTlv = {131073,_} -> {2, TTlv}; Else -> {3, Else} end end, PositionList = [SetFun(TempTlv)|| TempTlv <- Tlv1], Tlv2 = [Stlv || {_,Stlv} <- lists:sort(PositionList)], %%------------------------------------------------- %% attribute delivery-time(1) with type UTCTime OPTIONAL %%------------------------------------------------- {Term1,Tlv3} = case Tlv2 of [{131072,V1}|TempTlv3] -> {begin binary_to_list(decode_restricted_string(V1, [])) end , TempTlv3}; _ -> { asn1_NOVALUE, Tlv2} end, %%------------------------------------------------- %% attribute delivery-envelope(2) External MTSAbstractService:OtherMessageDeliveryFields OPTIONAL %%------------------------------------------------- {Term2,Tlv4} = case Tlv3 of [{131073,V2}|TempTlv4] -> {'MTSAbstractService':'dec_OtherMessageDeliveryFields'(V2, []), TempTlv4}; _ -> { asn1_NOVALUE, Tlv3} end, case Tlv4 of [] -> true;_ -> exit({error,{asn1, {unexpected,Tlv4}}}) % extra fields not allowed end, Res1 = {'MessageParameters',Term1,Term2}, Res1. %%================================ %% MessageData %%================================ enc_MessageData(Val) -> enc_MessageData(Val, []). enc_MessageData(Val, TagIn) -> enc_IPM(Val, TagIn). dec_MessageData(Tlv) -> dec_MessageData(Tlv, []). dec_MessageData(Tlv, TagIn) -> 'dec_IPM'(Tlv, TagIn). %%================================ %% BilaterallyDefinedBodyPart %%================================ enc_BilaterallyDefinedBodyPart(Val) -> enc_BilaterallyDefinedBodyPart(Val, [<<4>>]). enc_BilaterallyDefinedBodyPart(Val, TagIn) -> encode_restricted_string(Val, TagIn). dec_BilaterallyDefinedBodyPart(Tlv) -> dec_BilaterallyDefinedBodyPart(Tlv, [4]). dec_BilaterallyDefinedBodyPart(Tlv, TagIn) -> decode_octet_string(Tlv, TagIn). %%================================ %% NationallyDefinedBodyPart %%================================ enc_NationallyDefinedBodyPart(Val) -> enc_NationallyDefinedBodyPart(Val, []). enc_NationallyDefinedBodyPart(Val, TagIn) -> %% OPEN TYPE encode_open_type(Val, TagIn). dec_NationallyDefinedBodyPart(Tlv) -> dec_NationallyDefinedBodyPart(Tlv, []). dec_NationallyDefinedBodyPart(Tlv, TagIn) -> decode_open_type_as_binary(Tlv, TagIn). %%================================ %% IPN %%================================ enc_IPN(Val) -> enc_IPN(Val, [<<49>>]). enc_IPN(Val, TagIn) -> {_,Cindex1,Cindex2,Cindex3,Cindex4,Cindex5,Cindex6} = Val, %%------------------------------------------------- %% attribute subject-ipm(1) External IPMSInformationObjects:SubjectIPMField %%------------------------------------------------- {EncBytes1,EncLen1} = 'enc_SubjectIPMField'(Cindex1, [<<107>>]), %%------------------------------------------------- %% attribute ipn-originator(2) External IPMSInformationObjects:IPNOriginatorField OPTIONAL %%------------------------------------------------- {EncBytes2,EncLen2} = case Cindex2 of asn1_NOVALUE -> {<<>>,0}; _ -> 'enc_IPNOriginatorField'(Cindex2, [<<161>>]) end, %%------------------------------------------------- %% attribute ipm-intended-recipient(3) External IPMSInformationObjects:IPMIntendedRecipientField OPTIONAL %%------------------------------------------------- {EncBytes3,EncLen3} = case Cindex3 of asn1_NOVALUE -> {<<>>,0}; _ -> 'enc_IPMIntendedRecipientField'(Cindex3, [<<162>>]) end, %%------------------------------------------------- %% attribute conversion-eits(4) External IPMSInformationObjects:ConversionEITsField OPTIONAL %%------------------------------------------------- {EncBytes4,EncLen4} = case Cindex4 of asn1_NOVALUE -> {<<>>,0}; _ -> 'enc_ConversionEITsField'(Cindex4, [<<101>>]) end, %%------------------------------------------------- %% attribute notification-extensions(5) External IPMSInformationObjects:NotificationExtensionsField OPTIONAL %%------------------------------------------------- {EncBytes5,EncLen5} = case Cindex5 of asn1_NOVALUE -> {<<>>,0}; _ -> 'enc_NotificationExtensionsField'(Cindex5, [<<163>>]) end, %%------------------------------------------------- %% attribute choice(6) with type CHOICE %%------------------------------------------------- {EncBytes6,EncLen6} = 'enc_IPN_choice'(Cindex6, [<<160>>]), BytesSoFar = [EncBytes1, EncBytes2, EncBytes3, EncBytes4, EncBytes5, EncBytes6], LenSoFar = EncLen1 + EncLen2 + EncLen3 + EncLen4 + EncLen5 + EncLen6, encode_tags(TagIn, BytesSoFar, LenSoFar). %%================================ %% IPN_choice %%================================ enc_IPN_choice(Val, TagIn) -> {EncBytes,EncLen} = case element(1,Val) of 'non-receipt-fields' -> 'enc_NonReceiptFields'(element(2,Val), [<<160>>]); 'receipt-fields' -> 'enc_ReceiptFields'(element(2,Val), [<<161>>]); 'other-notification-type-fields' -> 'enc_OtherNotificationTypeFields'(element(2,Val), [<<162>>]); Else -> exit({error,{asn1,{invalid_choice_type,Else}}}) end, encode_tags(TagIn, EncBytes, EncLen). dec_IPN(Tlv) -> dec_IPN(Tlv, [17]). dec_IPN(Tlv, TagIn) -> Tlv1 = match_tags(Tlv, TagIn), SetFun = fun(FunTlv) -> case FunTlv of %subject-ipm TTlv = {65547,_} -> {1, TTlv}; %ipn-originator TTlv = {131073,_} -> {2, TTlv}; %ipm-intended-recipient TTlv = {131074,_} -> {3, TTlv}; %conversion-eits TTlv = {65541,_} -> {4, TTlv}; %notification-extensions TTlv = {131075,_} -> {5, TTlv}; %choice TTlv = {131072,_} -> {6, TTlv}; Else -> {7, Else} end end, PositionList = [SetFun(TempTlv)|| TempTlv <- Tlv1], Tlv2 = [Stlv || {_,Stlv} <- lists:sort(PositionList)], %%------------------------------------------------- %% attribute subject-ipm(1) External IPMSInformationObjects:SubjectIPMField %%------------------------------------------------- [V1|Tlv3] = Tlv2, Term1 = 'dec_SubjectIPMField'(V1, [65547]), %%------------------------------------------------- %% attribute ipn-originator(2) External IPMSInformationObjects:IPNOriginatorField OPTIONAL %%------------------------------------------------- {Term2,Tlv4} = case Tlv3 of [{131073,V2}|TempTlv4] -> {'dec_IPNOriginatorField'(V2, []), TempTlv4}; _ -> { asn1_NOVALUE, Tlv3} end, %%------------------------------------------------- %% attribute ipm-intended-recipient(3) External IPMSInformationObjects:IPMIntendedRecipientField OPTIONAL %%------------------------------------------------- {Term3,Tlv5} = case Tlv4 of [{131074,V3}|TempTlv5] -> {'dec_IPMIntendedRecipientField'(V3, []), TempTlv5}; _ -> { asn1_NOVALUE, Tlv4} end, %%------------------------------------------------- %% attribute conversion-eits(4) External IPMSInformationObjects:ConversionEITsField OPTIONAL %%------------------------------------------------- {Term4,Tlv6} = case Tlv5 of [{65541,V4}|TempTlv6] -> {'dec_ConversionEITsField'(V4, []), TempTlv6}; _ -> { asn1_NOVALUE, Tlv5} end, %%------------------------------------------------- %% attribute notification-extensions(5) External IPMSInformationObjects:NotificationExtensionsField OPTIONAL %%------------------------------------------------- {Term5,Tlv7} = case Tlv6 of [{131075,V5}|TempTlv7] -> {'dec_NotificationExtensionsField'(V5, []), TempTlv7}; _ -> { asn1_NOVALUE, Tlv6} end, %%------------------------------------------------- %% attribute choice(6) with type CHOICE %%------------------------------------------------- [V6|Tlv8] = Tlv7, Term6 = 'dec_IPN_choice'(V6, [131072]), case Tlv8 of [] -> true;_ -> exit({error,{asn1, {unexpected,Tlv8}}}) % extra fields not allowed end, Res1 = {'IPN',Term1,Term2,Term3,Term4,Term5,Term6}, Res1. 'dec_IPN_choice'(Tlv, TagIn) -> Tlv1 = match_tags(Tlv, TagIn), case (case Tlv1 of [CtempTlv1] -> CtempTlv1; _ -> Tlv1 end) of %% 'non-receipt-fields' {131072, V1} -> {'non-receipt-fields', 'dec_NonReceiptFields'(V1, [])}; %% 'receipt-fields' {131073, V1} -> {'receipt-fields', 'dec_ReceiptFields'(V1, [])}; %% 'other-notification-type-fields' {131074, V1} -> {'other-notification-type-fields', 'dec_OtherNotificationTypeFields'(V1, [])}; Else -> exit({error,{asn1,{invalid_choice_tag,Else}}}) end . %%================================ %% RN %%================================ enc_RN(Val) -> enc_RN(Val, [<<49>>]). enc_RN(Val, TagIn) -> enc_IPN(Val, TagIn). dec_RN(Tlv) -> dec_RN(Tlv, [17]). dec_RN(Tlv, TagIn) -> 'dec_IPN'(Tlv, TagIn). %%================================ %% NRN %%================================ enc_NRN(Val) -> enc_NRN(Val, [<<49>>]). enc_NRN(Val, TagIn) -> enc_IPN(Val, TagIn). dec_NRN(Tlv) -> dec_NRN(Tlv, [17]). dec_NRN(Tlv, TagIn) -> 'dec_IPN'(Tlv, TagIn). %%================================ %% ON %%================================ enc_ON(Val) -> enc_ON(Val, [<<49>>]). enc_ON(Val, TagIn) -> enc_IPN(Val, TagIn). dec_ON(Tlv) -> dec_ON(Tlv, [17]). dec_ON(Tlv, TagIn) -> 'dec_IPN'(Tlv, TagIn). %%================================ %% CommonFields %%================================ enc_CommonFields(Val) -> enc_CommonFields(Val, [<<49>>]). enc_CommonFields(Val, TagIn) -> {_,Cindex1,Cindex2,Cindex3,Cindex4,Cindex5} = Val, %%------------------------------------------------- %% attribute subject-ipm(1) External IPMSInformationObjects:SubjectIPMField %%------------------------------------------------- {EncBytes1,EncLen1} = 'enc_SubjectIPMField'(Cindex1, [<<107>>]), %%------------------------------------------------- %% attribute ipn-originator(2) External IPMSInformationObjects:IPNOriginatorField OPTIONAL %%------------------------------------------------- {EncBytes2,EncLen2} = case Cindex2 of asn1_NOVALUE -> {<<>>,0}; _ -> 'enc_IPNOriginatorField'(Cindex2, [<<161>>]) end, %%------------------------------------------------- %% attribute ipm-intended-recipient(3) External IPMSInformationObjects:IPMIntendedRecipientField OPTIONAL %%------------------------------------------------- {EncBytes3,EncLen3} = case Cindex3 of asn1_NOVALUE -> {<<>>,0}; _ -> 'enc_IPMIntendedRecipientField'(Cindex3, [<<162>>]) end, %%------------------------------------------------- %% attribute conversion-eits(4) External IPMSInformationObjects:ConversionEITsField OPTIONAL %%------------------------------------------------- {EncBytes4,EncLen4} = case Cindex4 of asn1_NOVALUE -> {<<>>,0}; _ -> 'enc_ConversionEITsField'(Cindex4, [<<101>>]) end, %%------------------------------------------------- %% attribute notification-extensions(5) External IPMSInformationObjects:NotificationExtensionsField OPTIONAL %%------------------------------------------------- {EncBytes5,EncLen5} = case Cindex5 of asn1_NOVALUE -> {<<>>,0}; _ -> 'enc_NotificationExtensionsField'(Cindex5, [<<163>>]) end, BytesSoFar = [EncBytes1, EncBytes2, EncBytes3, EncBytes4, EncBytes5], LenSoFar = EncLen1 + EncLen2 + EncLen3 + EncLen4 + EncLen5, encode_tags(TagIn, BytesSoFar, LenSoFar). dec_CommonFields(Tlv) -> dec_CommonFields(Tlv, [17]). dec_CommonFields(Tlv, TagIn) -> Tlv1 = match_tags(Tlv, TagIn), SetFun = fun(FunTlv) -> case FunTlv of %subject-ipm TTlv = {65547,_} -> {1, TTlv}; %ipn-originator TTlv = {131073,_} -> {2, TTlv}; %ipm-intended-recipient TTlv = {131074,_} -> {3, TTlv}; %conversion-eits TTlv = {65541,_} -> {4, TTlv}; %notification-extensions TTlv = {131075,_} -> {5, TTlv}; Else -> {6, Else} end end, PositionList = [SetFun(TempTlv)|| TempTlv <- Tlv1], Tlv2 = [Stlv || {_,Stlv} <- lists:sort(PositionList)], %%------------------------------------------------- %% attribute subject-ipm(1) External IPMSInformationObjects:SubjectIPMField %%------------------------------------------------- [V1|Tlv3] = Tlv2, Term1 = 'dec_SubjectIPMField'(V1, [65547]), %%------------------------------------------------- %% attribute ipn-originator(2) External IPMSInformationObjects:IPNOriginatorField OPTIONAL %%------------------------------------------------- {Term2,Tlv4} = case Tlv3 of [{131073,V2}|TempTlv4] -> {'dec_IPNOriginatorField'(V2, []), TempTlv4}; _ -> { asn1_NOVALUE, Tlv3} end, %%------------------------------------------------- %% attribute ipm-intended-recipient(3) External IPMSInformationObjects:IPMIntendedRecipientField OPTIONAL %%------------------------------------------------- {Term3,Tlv5} = case Tlv4 of [{131074,V3}|TempTlv5] -> {'dec_IPMIntendedRecipientField'(V3, []), TempTlv5}; _ -> { asn1_NOVALUE, Tlv4} end, %%------------------------------------------------- %% attribute conversion-eits(4) External IPMSInformationObjects:ConversionEITsField OPTIONAL %%------------------------------------------------- {Term4,Tlv6} = case Tlv5 of [{65541,V4}|TempTlv6] -> {'dec_ConversionEITsField'(V4, []), TempTlv6}; _ -> { asn1_NOVALUE, Tlv5} end, %%------------------------------------------------- %% attribute notification-extensions(5) External IPMSInformationObjects:NotificationExtensionsField OPTIONAL %%------------------------------------------------- {Term5,Tlv7} = case Tlv6 of [{131075,V5}|TempTlv7] -> {'dec_NotificationExtensionsField'(V5, []), TempTlv7}; _ -> { asn1_NOVALUE, Tlv6} end, case Tlv7 of [] -> true;_ -> exit({error,{asn1, {unexpected,Tlv7}}}) % extra fields not allowed end, Res1 = {'CommonFields',Term1,Term2,Term3,Term4,Term5}, Res1. %%================================ %% NonReceiptFields %%================================ enc_NonReceiptFields(Val) -> enc_NonReceiptFields(Val, [<<49>>]). enc_NonReceiptFields(Val, TagIn) -> {_,Cindex1,Cindex2,Cindex3,Cindex4,Cindex5} = Val, %%------------------------------------------------- %% attribute non-receipt-reason(1) with type ENUMERATED %%------------------------------------------------- {EncBytes1,EncLen1} = case Cindex1 of 'ipm-discarded' -> encode_tags([<<128>>], [0], 1); 'ipm-auto-forwarded' -> encode_tags([<<128>>], [1], 1); Enumval1 -> exit({error,{asn1, {enumerated_not_in_range,Enumval1}}}) end, %%------------------------------------------------- %% attribute discard-reason(2) with type ENUMERATED OPTIONAL %%------------------------------------------------- {EncBytes2,EncLen2} = case Cindex2 of asn1_NOVALUE -> {<<>>,0}; _ -> case Cindex2 of 'ipm-expired' -> encode_tags([<<129>>], [0], 1); 'ipm-obsoleted' -> encode_tags([<<129>>], [1], 1); 'user-subscription-terminated' -> encode_tags([<<129>>], [2], 1); 'not-used' -> encode_tags([<<129>>], [3], 1); Enumval2 -> exit({error,{asn1, {enumerated_not_in_range,Enumval2}}}) end end, %%------------------------------------------------- %% attribute auto-forward-comment(3) with type PrintableString OPTIONAL %%------------------------------------------------- {EncBytes3,EncLen3} = case Cindex3 of asn1_NOVALUE -> {<<>>,0}; _ -> encode_restricted_string(Cindex3, [<<130>>]) end, %%------------------------------------------------- %% attribute returned-ipm(4) External IPMSInformationObjects:ReturnedIPMField OPTIONAL %%------------------------------------------------- {EncBytes4,EncLen4} = case Cindex4 of asn1_NOVALUE -> {<<>>,0}; _ -> 'enc_ReturnedIPMField'(Cindex4, [<<163>>]) end, %%------------------------------------------------- %% attribute nrn-extensions(5) External IPMSInformationObjects:NRNExtensionsField OPTIONAL %%------------------------------------------------- {EncBytes5,EncLen5} = case Cindex5 of asn1_NOVALUE -> {<<>>,0}; _ -> 'enc_NRNExtensionsField'(Cindex5, [<<164>>]) end, BytesSoFar = [EncBytes1, EncBytes2, EncBytes3, EncBytes4, EncBytes5], LenSoFar = EncLen1 + EncLen2 + EncLen3 + EncLen4 + EncLen5, encode_tags(TagIn, BytesSoFar, LenSoFar). dec_NonReceiptFields(Tlv) -> dec_NonReceiptFields(Tlv, [17]). dec_NonReceiptFields(Tlv, TagIn) -> Tlv1 = match_tags(Tlv, TagIn), SetFun = fun(FunTlv) -> case FunTlv of %non-receipt-reason TTlv = {131072,_} -> {1, TTlv}; %discard-reason TTlv = {131073,_} -> {2, TTlv}; %auto-forward-comment TTlv = {131074,_} -> {3, TTlv}; %returned-ipm TTlv = {131075,_} -> {4, TTlv}; %nrn-extensions TTlv = {131076,_} -> {5, TTlv}; Else -> {6, Else} end end, PositionList = [SetFun(TempTlv)|| TempTlv <- Tlv1], Tlv2 = [Stlv || {_,Stlv} <- lists:sort(PositionList)], %%------------------------------------------------- %% attribute non-receipt-reason(1) with type ENUMERATED %%------------------------------------------------- [V1|Tlv3] = Tlv2, Term1 = case decode_integer(V1, [131072]) of 0 -> 'ipm-discarded'; 1 -> 'ipm-auto-forwarded'; Default1 -> {asn1_enum,Default1} end, %%------------------------------------------------- %% attribute discard-reason(2) with type ENUMERATED OPTIONAL %%------------------------------------------------- {Term2,Tlv4} = case Tlv3 of [{131073,V2}|TempTlv4] -> {case decode_integer(V2, []) of 0 -> 'ipm-expired'; 1 -> 'ipm-obsoleted'; 2 -> 'user-subscription-terminated'; 3 -> 'not-used'; Default2 -> exit({error,{asn1,{illegal_enumerated,Default2}}}) end, TempTlv4}; _ -> { asn1_NOVALUE, Tlv3} end, %%------------------------------------------------- %% attribute auto-forward-comment(3) with type PrintableString OPTIONAL %%------------------------------------------------- {Term3,Tlv5} = case Tlv4 of [{131074,V3}|TempTlv5] -> {begin Val1 = decode_restricted_string(V3, []), C1 = byte_size(Val1), if 0 =< C1, C1 =< 256 -> binary_to_list(Val1); true -> exit({error,{asn1,bad_range}}) end end, TempTlv5}; _ -> { asn1_NOVALUE, Tlv4} end, %%------------------------------------------------- %% attribute returned-ipm(4) External IPMSInformationObjects:ReturnedIPMField OPTIONAL %%------------------------------------------------- {Term4,Tlv6} = case Tlv5 of [{131075,V4}|TempTlv6] -> {'dec_ReturnedIPMField'(V4, []), TempTlv6}; _ -> { asn1_NOVALUE, Tlv5} end, %%------------------------------------------------- %% attribute nrn-extensions(5) External IPMSInformationObjects:NRNExtensionsField OPTIONAL %%------------------------------------------------- {Term5,Tlv7} = case Tlv6 of [{131076,V5}|TempTlv7] -> {'dec_NRNExtensionsField'(V5, []), TempTlv7}; _ -> { asn1_NOVALUE, Tlv6} end, case Tlv7 of [] -> true;_ -> exit({error,{asn1, {unexpected,Tlv7}}}) % extra fields not allowed end, Res1 = {'NonReceiptFields',Term1,Term2,Term3,Term4,Term5}, Res1. %%================================ %% ReceiptFields %%================================ enc_ReceiptFields(Val) -> enc_ReceiptFields(Val, [<<49>>]). enc_ReceiptFields(Val, TagIn) -> {_,Cindex1,Cindex2,Cindex3,Cindex4} = Val, %%------------------------------------------------- %% attribute receipt-time(1) with type UTCTime %%------------------------------------------------- {EncBytes1,EncLen1} = encode_restricted_string(Cindex1, [<<128>>]), %%------------------------------------------------- %% attribute acknowledgment-mode(2) with type ENUMERATED DEFAULT = manual %%------------------------------------------------- {EncBytes2,EncLen2} = case Cindex2 of asn1_DEFAULT -> {<<>>,0}; _ when Cindex2 =:= manual -> {<<>>,0}; _ -> case Cindex2 of manual -> encode_tags([<<129>>], [0], 1); automatic -> encode_tags([<<129>>], [1], 1); Enumval2 -> exit({error,{asn1, {enumerated_not_in_range,Enumval2}}}) end end, %%------------------------------------------------- %% attribute suppl-receipt-info(3) with type PrintableString OPTIONAL %%------------------------------------------------- {EncBytes3,EncLen3} = case Cindex3 of asn1_NOVALUE -> {<<>>,0}; _ -> encode_restricted_string(Cindex3, [<<130>>]) end, %%------------------------------------------------- %% attribute rn-extensions(4) External IPMSInformationObjects:RNExtensionsField OPTIONAL %%------------------------------------------------- {EncBytes4,EncLen4} = case Cindex4 of asn1_NOVALUE -> {<<>>,0}; _ -> 'enc_RNExtensionsField'(Cindex4, [<<163>>]) end, BytesSoFar = [EncBytes1, EncBytes2, EncBytes3, EncBytes4], LenSoFar = EncLen1 + EncLen2 + EncLen3 + EncLen4, encode_tags(TagIn, BytesSoFar, LenSoFar). dec_ReceiptFields(Tlv) -> dec_ReceiptFields(Tlv, [17]). dec_ReceiptFields(Tlv, TagIn) -> Tlv1 = match_tags(Tlv, TagIn), SetFun = fun(FunTlv) -> case FunTlv of %receipt-time TTlv = {131072,_} -> {1, TTlv}; %acknowledgment-mode TTlv = {131073,_} -> {2, TTlv}; %suppl-receipt-info TTlv = {131074,_} -> {3, TTlv}; %rn-extensions TTlv = {131075,_} -> {4, TTlv}; Else -> {5, Else} end end, PositionList = [SetFun(TempTlv)|| TempTlv <- Tlv1], Tlv2 = [Stlv || {_,Stlv} <- lists:sort(PositionList)], %%------------------------------------------------- %% attribute receipt-time(1) with type UTCTime %%------------------------------------------------- [V1|Tlv3] = Tlv2, Term1 = begin binary_to_list(decode_restricted_string(V1, [131072])) end , %%------------------------------------------------- %% attribute acknowledgment-mode(2) with type ENUMERATED DEFAULT = manual %%------------------------------------------------- {Term2,Tlv4} = case Tlv3 of [{131073,V2}|TempTlv4] -> {case decode_integer(V2, []) of 0 -> manual; 1 -> automatic; Default1 -> exit({error,{asn1,{illegal_enumerated,Default1}}}) end, TempTlv4}; _ -> {manual,Tlv3} end, %%------------------------------------------------- %% attribute suppl-receipt-info(3) with type PrintableString OPTIONAL %%------------------------------------------------- {Term3,Tlv5} = case Tlv4 of [{131074,V3}|TempTlv5] -> {begin Val1 = decode_restricted_string(V3, []), C1 = byte_size(Val1), if 1 =< C1, C1 =< 256 -> binary_to_list(Val1); true -> exit({error,{asn1,bad_range}}) end end, TempTlv5}; _ -> { asn1_NOVALUE, Tlv4} end, %%------------------------------------------------- %% attribute rn-extensions(4) External IPMSInformationObjects:RNExtensionsField OPTIONAL %%------------------------------------------------- {Term4,Tlv6} = case Tlv5 of [{131075,V4}|TempTlv6] -> {'dec_RNExtensionsField'(V4, []), TempTlv6}; _ -> { asn1_NOVALUE, Tlv5} end, case Tlv6 of [] -> true;_ -> exit({error,{asn1, {unexpected,Tlv6}}}) % extra fields not allowed end, Res1 = {'ReceiptFields',Term1,Term2,Term3,Term4}, Res1. %%================================ %% SubjectIPMField %%================================ enc_SubjectIPMField(Val) -> enc_SubjectIPMField(Val, [<<107>>]). enc_SubjectIPMField(Val, TagIn) -> enc_IPMIdentifier(Val, TagIn). dec_SubjectIPMField(Tlv) -> dec_SubjectIPMField(Tlv, [65547]). dec_SubjectIPMField(Tlv, TagIn) -> 'dec_IPMIdentifier'(Tlv, TagIn). %%================================ %% IPNOriginatorField %%================================ enc_IPNOriginatorField(Val) -> enc_IPNOriginatorField(Val, [<<49>>]). enc_IPNOriginatorField(Val, TagIn) -> enc_ORDescriptor(Val, TagIn). dec_IPNOriginatorField(Tlv) -> dec_IPNOriginatorField(Tlv, [17]). dec_IPNOriginatorField(Tlv, TagIn) -> 'dec_ORDescriptor'(Tlv, TagIn). %%================================ %% IPMIntendedRecipientField %%================================ enc_IPMIntendedRecipientField(Val) -> enc_IPMIntendedRecipientField(Val, [<<49>>]). enc_IPMIntendedRecipientField(Val, TagIn) -> enc_ORDescriptor(Val, TagIn). dec_IPMIntendedRecipientField(Tlv) -> dec_IPMIntendedRecipientField(Tlv, [17]). dec_IPMIntendedRecipientField(Tlv, TagIn) -> 'dec_ORDescriptor'(Tlv, TagIn). %%================================ %% ConversionEITsField %%================================ enc_ConversionEITsField(Val) -> enc_ConversionEITsField(Val, [<<101>>]). enc_ConversionEITsField(Val, TagIn) -> 'MTSAbstractService':enc_EncodedInformationTypes(Val, TagIn). dec_ConversionEITsField(Tlv) -> dec_ConversionEITsField(Tlv, [65541]). dec_ConversionEITsField(Tlv, TagIn) -> 'MTSAbstractService':'dec_EncodedInformationTypes'(Tlv, TagIn). %%================================ %% NotificationExtensionsField %%================================ enc_NotificationExtensionsField(Val) -> enc_NotificationExtensionsField(Val, [<<49>>]). enc_NotificationExtensionsField(Val, TagIn) -> {EncBytes,EncLen} = 'enc_NotificationExtensionsField_components'(Val,[],0), encode_tags(TagIn, EncBytes, EncLen). 'enc_NotificationExtensionsField_components'([], AccBytes, AccLen) -> {lists:reverse(AccBytes),AccLen}; 'enc_NotificationExtensionsField_components'([H|T],AccBytes, AccLen) -> {EncBytes,EncLen} = 'enc_NotificationExtensionsField_IPMSExtension'(H, [<<48>>]), 'enc_NotificationExtensionsField_components'(T,[EncBytes|AccBytes], AccLen + EncLen). %%================================ %% NotificationExtensionsField_IPMSExtension %%================================ enc_NotificationExtensionsField_IPMSExtension(Val, TagIn) -> {_,Cindex1,Cindex2} = Val, Objtype = 'IPMSInformationObjects':'getenc_internal_object_set_argument_5'( Cindex1), %%------------------------------------------------- %% attribute type(1) with type OBJECT IDENTIFIER %%------------------------------------------------- {EncBytes1,EncLen1} = encode_object_identifier(Cindex1, [<<6>>]), %%------------------------------------------------- %% attribute value(2) with type typefieldType DEFAULT = 'NULL' %%------------------------------------------------- {EncBytes2,EncLen2} = case Cindex2 of asn1_DEFAULT -> {<<>>,0}; _ when Cindex2 =:= 'NULL' -> {<<>>,0}; _ -> {TmpBytes2,_ } = Objtype('Type', Cindex2, []), encode_open_type(TmpBytes2, []) end, BytesSoFar = [EncBytes1, EncBytes2], LenSoFar = EncLen1 + EncLen2, encode_tags(TagIn, BytesSoFar, LenSoFar). dec_NotificationExtensionsField(Tlv) -> dec_NotificationExtensionsField(Tlv, [17]). dec_NotificationExtensionsField(Tlv, TagIn) -> %%------------------------------------------------- %% decode tag and length %%------------------------------------------------- Tlv1 = match_tags(Tlv, TagIn), ['dec_NotificationExtensionsField_IPMSExtension'(V1, [16]) || V1 <- Tlv1]. 'dec_NotificationExtensionsField_IPMSExtension'(Tlv, TagIn) -> %%------------------------------------------------- %% decode tag and length %%------------------------------------------------- Tlv1 = match_tags(Tlv, TagIn), %%------------------------------------------------- %% attribute type(1) with type OBJECT IDENTIFIER %%------------------------------------------------- [V1|Tlv2] = Tlv1, Term1 = decode_object_identifier(V1, [6]), %%------------------------------------------------- %% attribute value(2) with type typefieldType DEFAULT = 'NULL' %%------------------------------------------------- {Tmpterm1,Tlv3} = case Tlv2 of [V2|TempTlv3] -> {decode_open_type(V2, []), TempTlv3}; _ -> {'NULL',Tlv2} end, DecObjtypeTerm1 = 'IPMSInformationObjects':'getdec_internal_object_set_argument_5'(Term1), Term2 = case Tmpterm1 of 'NULL' ->'NULL'; _ -> case (catch DecObjtypeTerm1('Type', Tmpterm1, [])) of {'EXIT', Reason1} -> exit({'Type not compatible with table constraint',Reason1}); Tmpterm2 -> Tmpterm2 end end, case Tlv3 of [] -> true;_ -> exit({error,{asn1, {unexpected,Tlv3}}}) % extra fields not allowed end, Res1 = {'IPMSExtension',Term1,Term2}, Res1. %%================================ %% NonReceiptReasonField %%================================ enc_NonReceiptReasonField(Val) -> enc_NonReceiptReasonField(Val, [<<10>>]). enc_NonReceiptReasonField(Val, TagIn) -> case Val of 'ipm-discarded' -> encode_tags(TagIn, [0], 1); 'ipm-auto-forwarded' -> encode_tags(TagIn, [1], 1); Enumval1 -> exit({error,{asn1, {enumerated_not_in_range,Enumval1}}}) end. dec_NonReceiptReasonField(Tlv) -> dec_NonReceiptReasonField(Tlv, [10]). dec_NonReceiptReasonField(Tlv, TagIn) -> case decode_integer(Tlv, TagIn) of 0 -> 'ipm-discarded'; 1 -> 'ipm-auto-forwarded'; Default1 -> {asn1_enum,Default1} end. %%================================ %% DiscardReasonField %%================================ enc_DiscardReasonField(Val) -> enc_DiscardReasonField(Val, [<<10>>]). enc_DiscardReasonField(Val, TagIn) -> case Val of 'ipm-expired' -> encode_tags(TagIn, [0], 1); 'ipm-obsoleted' -> encode_tags(TagIn, [1], 1); 'user-subscription-terminated' -> encode_tags(TagIn, [2], 1); 'not-used' -> encode_tags(TagIn, [3], 1); Enumval1 -> exit({error,{asn1, {enumerated_not_in_range,Enumval1}}}) end. dec_DiscardReasonField(Tlv) -> dec_DiscardReasonField(Tlv, [10]). dec_DiscardReasonField(Tlv, TagIn) -> case decode_integer(Tlv, TagIn) of 0 -> 'ipm-expired'; 1 -> 'ipm-obsoleted'; 2 -> 'user-subscription-terminated'; 3 -> 'not-used'; Default1 -> exit({error,{asn1,{illegal_enumerated,Default1}}}) end. %%================================ %% AutoForwardCommentField %%================================ enc_AutoForwardCommentField(Val) -> enc_AutoForwardCommentField(Val, [<<19>>]). enc_AutoForwardCommentField(Val, TagIn) -> encode_restricted_string(Val, TagIn). dec_AutoForwardCommentField(Tlv) -> dec_AutoForwardCommentField(Tlv, [19]). dec_AutoForwardCommentField(Tlv, TagIn) -> begin Val1 = decode_restricted_string(Tlv, TagIn), C1 = byte_size(Val1), if 0 =< C1, C1 =< 256 -> binary_to_list(Val1); true -> exit({error,{asn1,bad_range}}) end end. %%================================ %% AutoForwardComment %%================================ enc_AutoForwardComment(Val) -> enc_AutoForwardComment(Val, [<<19>>]). enc_AutoForwardComment(Val, TagIn) -> encode_restricted_string(Val, TagIn). dec_AutoForwardComment(Tlv) -> dec_AutoForwardComment(Tlv, [19]). dec_AutoForwardComment(Tlv, TagIn) -> begin Val1 = decode_restricted_string(Tlv, TagIn), C1 = byte_size(Val1), if 0 =< C1, C1 =< 256 -> binary_to_list(Val1); true -> exit({error,{asn1,bad_range}}) end end. %%================================ %% ReturnedIPMField %%================================ enc_ReturnedIPMField(Val) -> enc_ReturnedIPMField(Val, [<<48>>]). enc_ReturnedIPMField(Val, TagIn) -> enc_IPM(Val, TagIn). dec_ReturnedIPMField(Tlv) -> dec_ReturnedIPMField(Tlv, [16]). dec_ReturnedIPMField(Tlv, TagIn) -> 'dec_IPM'(Tlv, TagIn). %%================================ %% NRNExtensionsField %%================================ enc_NRNExtensionsField(Val) -> enc_NRNExtensionsField(Val, [<<49>>]). enc_NRNExtensionsField(Val, TagIn) -> {EncBytes,EncLen} = 'enc_NRNExtensionsField_components'(Val,[],0), encode_tags(TagIn, EncBytes, EncLen). 'enc_NRNExtensionsField_components'([], AccBytes, AccLen) -> {lists:reverse(AccBytes),AccLen}; 'enc_NRNExtensionsField_components'([H|T],AccBytes, AccLen) -> {EncBytes,EncLen} = 'enc_NRNExtensionsField_IPMSExtension'(H, [<<48>>]), 'enc_NRNExtensionsField_components'(T,[EncBytes|AccBytes], AccLen + EncLen). %%================================ %% NRNExtensionsField_IPMSExtension %%================================ enc_NRNExtensionsField_IPMSExtension(Val, TagIn) -> {_,Cindex1,Cindex2} = Val, Objtype = 'IPMSInformationObjects':'getenc_internal_object_set_argument_6'( Cindex1), %%------------------------------------------------- %% attribute type(1) with type OBJECT IDENTIFIER %%------------------------------------------------- {EncBytes1,EncLen1} = encode_object_identifier(Cindex1, [<<6>>]), %%------------------------------------------------- %% attribute value(2) with type typefieldType DEFAULT = 'NULL' %%------------------------------------------------- {EncBytes2,EncLen2} = case Cindex2 of asn1_DEFAULT -> {<<>>,0}; _ when Cindex2 =:= 'NULL' -> {<<>>,0}; _ -> {TmpBytes2,_ } = Objtype('Type', Cindex2, []), encode_open_type(TmpBytes2, []) end, BytesSoFar = [EncBytes1, EncBytes2], LenSoFar = EncLen1 + EncLen2, encode_tags(TagIn, BytesSoFar, LenSoFar). dec_NRNExtensionsField(Tlv) -> dec_NRNExtensionsField(Tlv, [17]). dec_NRNExtensionsField(Tlv, TagIn) -> %%------------------------------------------------- %% decode tag and length %%------------------------------------------------- Tlv1 = match_tags(Tlv, TagIn), ['dec_NRNExtensionsField_IPMSExtension'(V1, [16]) || V1 <- Tlv1]. 'dec_NRNExtensionsField_IPMSExtension'(Tlv, TagIn) -> %%------------------------------------------------- %% decode tag and length %%------------------------------------------------- Tlv1 = match_tags(Tlv, TagIn), %%------------------------------------------------- %% attribute type(1) with type OBJECT IDENTIFIER %%------------------------------------------------- [V1|Tlv2] = Tlv1, Term1 = decode_object_identifier(V1, [6]), %%------------------------------------------------- %% attribute value(2) with type typefieldType DEFAULT = 'NULL' %%------------------------------------------------- {Tmpterm1,Tlv3} = case Tlv2 of [V2|TempTlv3] -> {decode_open_type(V2, []), TempTlv3}; _ -> {'NULL',Tlv2} end, DecObjtypeTerm1 = 'IPMSInformationObjects':'getdec_internal_object_set_argument_6'(Term1), Term2 = case Tmpterm1 of 'NULL' ->'NULL'; _ -> case (catch DecObjtypeTerm1('Type', Tmpterm1, [])) of {'EXIT', Reason1} -> exit({'Type not compatible with table constraint',Reason1}); Tmpterm2 -> Tmpterm2 end end, case Tlv3 of [] -> true;_ -> exit({error,{asn1, {unexpected,Tlv3}}}) % extra fields not allowed end, Res1 = {'IPMSExtension',Term1,Term2}, Res1. %%================================ %% ReceiptTimeField %%================================ enc_ReceiptTimeField(Val) -> enc_ReceiptTimeField(Val, [<<23>>]). enc_ReceiptTimeField(Val, TagIn) -> encode_restricted_string(Val, TagIn). dec_ReceiptTimeField(Tlv) -> dec_ReceiptTimeField(Tlv, [23]). dec_ReceiptTimeField(Tlv, TagIn) -> begin binary_to_list(decode_restricted_string(Tlv, TagIn)) end . %%================================ %% AcknowledgmentModeField %%================================ enc_AcknowledgmentModeField(Val) -> enc_AcknowledgmentModeField(Val, [<<10>>]). enc_AcknowledgmentModeField(Val, TagIn) -> case Val of manual -> encode_tags(TagIn, [0], 1); automatic -> encode_tags(TagIn, [1], 1); Enumval1 -> exit({error,{asn1, {enumerated_not_in_range,Enumval1}}}) end. dec_AcknowledgmentModeField(Tlv) -> dec_AcknowledgmentModeField(Tlv, [10]). dec_AcknowledgmentModeField(Tlv, TagIn) -> case decode_integer(Tlv, TagIn) of 0 -> manual; 1 -> automatic; Default1 -> exit({error,{asn1,{illegal_enumerated,Default1}}}) end. %%================================ %% SupplReceiptInfoField %%================================ enc_SupplReceiptInfoField(Val) -> enc_SupplReceiptInfoField(Val, [<<19>>]). enc_SupplReceiptInfoField(Val, TagIn) -> encode_restricted_string(Val, TagIn). dec_SupplReceiptInfoField(Tlv) -> dec_SupplReceiptInfoField(Tlv, [19]). dec_SupplReceiptInfoField(Tlv, TagIn) -> begin Val1 = decode_restricted_string(Tlv, TagIn), C1 = byte_size(Val1), if 1 =< C1, C1 =< 256 -> binary_to_list(Val1); true -> exit({error,{asn1,bad_range}}) end end. %%================================ %% RNExtensionsField %%================================ enc_RNExtensionsField(Val) -> enc_RNExtensionsField(Val, [<<49>>]). enc_RNExtensionsField(Val, TagIn) -> {EncBytes,EncLen} = 'enc_RNExtensionsField_components'(Val,[],0), encode_tags(TagIn, EncBytes, EncLen). 'enc_RNExtensionsField_components'([], AccBytes, AccLen) -> {lists:reverse(AccBytes),AccLen}; 'enc_RNExtensionsField_components'([H|T],AccBytes, AccLen) -> {EncBytes,EncLen} = 'enc_RNExtensionsField_IPMSExtension'(H, [<<48>>]), 'enc_RNExtensionsField_components'(T,[EncBytes|AccBytes], AccLen + EncLen). %%================================ %% RNExtensionsField_IPMSExtension %%================================ enc_RNExtensionsField_IPMSExtension(Val, TagIn) -> {_,Cindex1,Cindex2} = Val, Objtype = 'IPMSInformationObjects':'getenc_internal_object_set_argument_7'( Cindex1), %%------------------------------------------------- %% attribute type(1) with type OBJECT IDENTIFIER %%------------------------------------------------- {EncBytes1,EncLen1} = encode_object_identifier(Cindex1, [<<6>>]), %%------------------------------------------------- %% attribute value(2) with type typefieldType DEFAULT = 'NULL' %%------------------------------------------------- {EncBytes2,EncLen2} = case Cindex2 of asn1_DEFAULT -> {<<>>,0}; _ when Cindex2 =:= 'NULL' -> {<<>>,0}; _ -> {TmpBytes2,_ } = Objtype('Type', Cindex2, []), encode_open_type(TmpBytes2, []) end, BytesSoFar = [EncBytes1, EncBytes2], LenSoFar = EncLen1 + EncLen2, encode_tags(TagIn, BytesSoFar, LenSoFar). dec_RNExtensionsField(Tlv) -> dec_RNExtensionsField(Tlv, [17]). dec_RNExtensionsField(Tlv, TagIn) -> %%------------------------------------------------- %% decode tag and length %%------------------------------------------------- Tlv1 = match_tags(Tlv, TagIn), ['dec_RNExtensionsField_IPMSExtension'(V1, [16]) || V1 <- Tlv1]. 'dec_RNExtensionsField_IPMSExtension'(Tlv, TagIn) -> %%------------------------------------------------- %% decode tag and length %%------------------------------------------------- Tlv1 = match_tags(Tlv, TagIn), %%------------------------------------------------- %% attribute type(1) with type OBJECT IDENTIFIER %%------------------------------------------------- [V1|Tlv2] = Tlv1, Term1 = decode_object_identifier(V1, [6]), %%------------------------------------------------- %% attribute value(2) with type typefieldType DEFAULT = 'NULL' %%------------------------------------------------- {Tmpterm1,Tlv3} = case Tlv2 of [V2|TempTlv3] -> {decode_open_type(V2, []), TempTlv3}; _ -> {'NULL',Tlv2} end, DecObjtypeTerm1 = 'IPMSInformationObjects':'getdec_internal_object_set_argument_7'(Term1), Term2 = case Tmpterm1 of 'NULL' ->'NULL'; _ -> case (catch DecObjtypeTerm1('Type', Tmpterm1, [])) of {'EXIT', Reason1} -> exit({'Type not compatible with table constraint',Reason1}); Tmpterm2 -> Tmpterm2 end end, case Tlv3 of [] -> true;_ -> exit({error,{asn1, {unexpected,Tlv3}}}) % extra fields not allowed end, Res1 = {'IPMSExtension',Term1,Term2}, Res1. %%================================ %% OtherNotificationTypeFields %%================================ enc_OtherNotificationTypeFields(Val) -> enc_OtherNotificationTypeFields(Val, [<<49>>]). enc_OtherNotificationTypeFields(Val, TagIn) -> {EncBytes,EncLen} = 'enc_OtherNotificationTypeFields_components'(Val,[],0), encode_tags(TagIn, EncBytes, EncLen). 'enc_OtherNotificationTypeFields_components'([], AccBytes, AccLen) -> {lists:reverse(AccBytes),AccLen}; 'enc_OtherNotificationTypeFields_components'([H|T],AccBytes, AccLen) -> {EncBytes,EncLen} = 'enc_OtherNotificationTypeFields_IPMSExtension'(H, [<<48>>]), 'enc_OtherNotificationTypeFields_components'(T,[EncBytes|AccBytes], AccLen + EncLen). %%================================ %% OtherNotificationTypeFields_IPMSExtension %%================================ enc_OtherNotificationTypeFields_IPMSExtension(Val, TagIn) -> {_,Cindex1,Cindex2} = Val, Objtype = 'IPMSInformationObjects':'getenc_internal_object_set_argument_8'( Cindex1), %%------------------------------------------------- %% attribute type(1) with type OBJECT IDENTIFIER %%------------------------------------------------- {EncBytes1,EncLen1} = encode_object_identifier(Cindex1, [<<6>>]), %%------------------------------------------------- %% attribute value(2) with type typefieldType DEFAULT = 'NULL' %%------------------------------------------------- {EncBytes2,EncLen2} = case Cindex2 of asn1_DEFAULT -> {<<>>,0}; _ when Cindex2 =:= 'NULL' -> {<<>>,0}; _ -> {TmpBytes2,_ } = Objtype('Type', Cindex2, []), encode_open_type(TmpBytes2, []) end, BytesSoFar = [EncBytes1, EncBytes2], LenSoFar = EncLen1 + EncLen2, encode_tags(TagIn, BytesSoFar, LenSoFar). dec_OtherNotificationTypeFields(Tlv) -> dec_OtherNotificationTypeFields(Tlv, [17]). dec_OtherNotificationTypeFields(Tlv, TagIn) -> %%------------------------------------------------- %% decode tag and length %%------------------------------------------------- Tlv1 = match_tags(Tlv, TagIn), ['dec_OtherNotificationTypeFields_IPMSExtension'(V1, [16]) || V1 <- Tlv1]. 'dec_OtherNotificationTypeFields_IPMSExtension'(Tlv, TagIn) -> %%------------------------------------------------- %% decode tag and length %%------------------------------------------------- Tlv1 = match_tags(Tlv, TagIn), %%------------------------------------------------- %% attribute type(1) with type OBJECT IDENTIFIER %%------------------------------------------------- [V1|Tlv2] = Tlv1, Term1 = decode_object_identifier(V1, [6]), %%------------------------------------------------- %% attribute value(2) with type typefieldType DEFAULT = 'NULL' %%------------------------------------------------- {Tmpterm1,Tlv3} = case Tlv2 of [V2|TempTlv3] -> {decode_open_type(V2, []), TempTlv3}; _ -> {'NULL',Tlv2} end, DecObjtypeTerm1 = 'IPMSInformationObjects':'getdec_internal_object_set_argument_8'(Term1), Term2 = case Tmpterm1 of 'NULL' ->'NULL'; _ -> case (catch DecObjtypeTerm1('Type', Tmpterm1, [])) of {'EXIT', Reason1} -> exit({'Type not compatible with table constraint',Reason1}); Tmpterm2 -> Tmpterm2 end end, case Tlv3 of [] -> true;_ -> exit({error,{asn1, {unexpected,Tlv3}}}) % extra fields not allowed end, Res1 = {'IPMSExtension',Term1,Term2}, Res1. %%================================ %% AbsenceAdvice %%================================ enc_AbsenceAdvice(Val) -> enc_AbsenceAdvice(Val, [<<48>>]). enc_AbsenceAdvice(Val, TagIn) -> {_,Cindex1,Cindex2} = Val, %%------------------------------------------------- %% attribute advice(1) External IPMSInformationObjects:BodyPart OPTIONAL %%------------------------------------------------- {EncBytes1,EncLen1} = case Cindex1 of asn1_NOVALUE -> {<<>>,0}; _ -> 'enc_BodyPart'(Cindex1, []) end, %%------------------------------------------------- %% attribute next-available(2) with type UTCTime OPTIONAL %%------------------------------------------------- {EncBytes2,EncLen2} = case Cindex2 of asn1_NOVALUE -> {<<>>,0}; _ -> encode_restricted_string(Cindex2, [<<23>>]) end, BytesSoFar = [EncBytes1, EncBytes2], LenSoFar = EncLen1 + EncLen2, encode_tags(TagIn, BytesSoFar, LenSoFar). dec_AbsenceAdvice(Tlv) -> dec_AbsenceAdvice(Tlv, [16]). dec_AbsenceAdvice(Tlv, TagIn) -> %%------------------------------------------------- %% decode tag and length %%------------------------------------------------- Tlv1 = match_tags(Tlv, TagIn), %%------------------------------------------------- %% attribute advice(1) External IPMSInformationObjects:BodyPart OPTIONAL %%------------------------------------------------- {Term1,Tlv2} = case Tlv1 of [V1 = {131072,_}|TempTlv2] -> {'dec_BodyPart'(V1, []), TempTlv2}; [V1 = {131075,_}|TempTlv2] -> {'dec_BodyPart'(V1, []), TempTlv2}; [V1 = {131076,_}|TempTlv2] -> {'dec_BodyPart'(V1, []), TempTlv2}; [V1 = {131077,_}|TempTlv2] -> {'dec_BodyPart'(V1, []), TempTlv2}; [V1 = {131078,_}|TempTlv2] -> {'dec_BodyPart'(V1, []), TempTlv2}; [V1 = {131080,_}|TempTlv2] -> {'dec_BodyPart'(V1, []), TempTlv2}; [V1 = {131081,_}|TempTlv2] -> {'dec_BodyPart'(V1, []), TempTlv2}; [V1 = {131083,_}|TempTlv2] -> {'dec_BodyPart'(V1, []), TempTlv2}; [V1 = {131086,_}|TempTlv2] -> {'dec_BodyPart'(V1, []), TempTlv2}; [V1 = {131079,_}|TempTlv2] -> {'dec_BodyPart'(V1, []), TempTlv2}; [V1 = {131087,_}|TempTlv2] -> {'dec_BodyPart'(V1, []), TempTlv2}; _ -> { asn1_NOVALUE, Tlv1} end, %%------------------------------------------------- %% attribute next-available(2) with type UTCTime OPTIONAL %%------------------------------------------------- {Term2,Tlv3} = case Tlv2 of [{23,V2}|TempTlv3] -> {begin binary_to_list(decode_restricted_string(V2, [])) end , TempTlv3}; _ -> { asn1_NOVALUE, Tlv2} end, case Tlv3 of [] -> true;_ -> exit({error,{asn1, {unexpected,Tlv3}}}) % extra fields not allowed end, Res1 = {'AbsenceAdvice',Term1,Term2}, Res1. %%================================ %% ChangeOfAddressAdvice %%================================ enc_ChangeOfAddressAdvice(Val) -> enc_ChangeOfAddressAdvice(Val, [<<48>>]). enc_ChangeOfAddressAdvice(Val, TagIn) -> {_,Cindex1,Cindex2} = Val, %%------------------------------------------------- %% attribute new-address(1) External IPMSInformationObjects:ORDescriptor %%------------------------------------------------- {EncBytes1,EncLen1} = 'enc_ORDescriptor'(Cindex1, [<<160>>]), %%------------------------------------------------- %% attribute effective-from(2) with type UTCTime OPTIONAL %%------------------------------------------------- {EncBytes2,EncLen2} = case Cindex2 of asn1_NOVALUE -> {<<>>,0}; _ -> encode_restricted_string(Cindex2, [<<129>>]) end, BytesSoFar = [EncBytes1, EncBytes2], LenSoFar = EncLen1 + EncLen2, encode_tags(TagIn, BytesSoFar, LenSoFar). dec_ChangeOfAddressAdvice(Tlv) -> dec_ChangeOfAddressAdvice(Tlv, [16]). dec_ChangeOfAddressAdvice(Tlv, TagIn) -> %%------------------------------------------------- %% decode tag and length %%------------------------------------------------- Tlv1 = match_tags(Tlv, TagIn), %%------------------------------------------------- %% attribute new-address(1) External IPMSInformationObjects:ORDescriptor %%------------------------------------------------- [V1|Tlv2] = Tlv1, Term1 = 'dec_ORDescriptor'(V1, [131072]), %%------------------------------------------------- %% attribute effective-from(2) with type UTCTime OPTIONAL %%------------------------------------------------- {Term2,Tlv3} = case Tlv2 of [{131073,V2}|TempTlv3] -> {begin binary_to_list(decode_restricted_string(V2, [])) end , TempTlv3}; _ -> { asn1_NOVALUE, Tlv2} end, case Tlv3 of [] -> true;_ -> exit({error,{asn1, {unexpected,Tlv3}}}) % extra fields not allowed end, Res1 = {'ChangeOfAddressAdvice',Term1,Term2}, Res1. %%================================ %% IPMAssemblyInstructions %%================================ enc_IPMAssemblyInstructions(Val) -> enc_IPMAssemblyInstructions(Val, [<<49>>]). enc_IPMAssemblyInstructions(Val, TagIn) -> {_,Cindex1} = Val, %%------------------------------------------------- %% attribute assembly-instructions(1) External IPMSInformationObjects:BodyPartReferences %%------------------------------------------------- {EncBytes1,EncLen1} = 'enc_BodyPartReferences'(Cindex1, [<<160>>]), BytesSoFar = [EncBytes1], LenSoFar = EncLen1, encode_tags(TagIn, BytesSoFar, LenSoFar). dec_IPMAssemblyInstructions(Tlv) -> dec_IPMAssemblyInstructions(Tlv, [17]). dec_IPMAssemblyInstructions(Tlv, TagIn) -> Tlv1 = match_tags(Tlv, TagIn), SetFun = fun(FunTlv) -> case FunTlv of %assembly-instructions TTlv = {131072,_} -> {1, TTlv}; Else -> {2, Else} end end, PositionList = [SetFun(TempTlv)|| TempTlv <- Tlv1], Tlv2 = [Stlv || {_,Stlv} <- lists:sort(PositionList)], %%------------------------------------------------- %% attribute assembly-instructions(1) External IPMSInformationObjects:BodyPartReferences %%------------------------------------------------- [V1|Tlv3] = Tlv2, Term1 = 'dec_BodyPartReferences'(V1, [131072]), case Tlv3 of [] -> true;_ -> exit({error,{asn1, {unexpected,Tlv3}}}) % extra fields not allowed end, Res1 = {'IPMAssemblyInstructions',Term1}, Res1. %%================================ %% BodyPartReferences %%================================ enc_BodyPartReferences(Val) -> enc_BodyPartReferences(Val, [<<48>>]). enc_BodyPartReferences(Val, TagIn) -> {EncBytes,EncLen} = 'enc_BodyPartReferences_components'(Val,[],0), encode_tags(TagIn, EncBytes, EncLen). 'enc_BodyPartReferences_components'([], AccBytes, AccLen) -> {lists:reverse(AccBytes),AccLen}; 'enc_BodyPartReferences_components'([H|T],AccBytes, AccLen) -> {EncBytes,EncLen} = 'enc_BodyPartReference'(H, []), 'enc_BodyPartReferences_components'(T,[EncBytes|AccBytes], AccLen + EncLen). dec_BodyPartReferences(Tlv) -> dec_BodyPartReferences(Tlv, [16]). dec_BodyPartReferences(Tlv, TagIn) -> %%------------------------------------------------- %% decode tag and length %%------------------------------------------------- Tlv1 = match_tags(Tlv, TagIn), ['dec_BodyPartReference'(V1, []) || V1 <- Tlv1]. %%================================ %% BodyPartReference %%================================ enc_BodyPartReference(Val) -> enc_BodyPartReference(Val, []). enc_BodyPartReference(Val, TagIn) -> {EncBytes,EncLen} = case element(1,Val) of 'stored-entry' -> encode_integer(element(2,Val), [<<128>>]); 'stored-content' -> encode_integer(element(2,Val), [<<129>>]); 'submitted-body-part' -> encode_integer(element(2,Val), [<<130>>]); 'stored-body-part' -> 'enc_BodyPartReference_stored-body-part'(element(2,Val), [<<163>>]); Else -> exit({error,{asn1,{invalid_choice_type,Else}}}) end, encode_tags(TagIn, EncBytes, EncLen). %%================================ %% BodyPartReference_stored-body-part %%================================ 'enc_BodyPartReference_stored-body-part'(Val, TagIn) -> {_,Cindex1,Cindex2} = Val, %%------------------------------------------------- %% attribute message-entry(1) with type INTEGER %%------------------------------------------------- {EncBytes1,EncLen1} = encode_integer(Cindex1, [<<2>>]), %%------------------------------------------------- %% attribute body-part-number(2) with type INTEGER %%------------------------------------------------- {EncBytes2,EncLen2} = encode_integer(Cindex2, [<<2>>]), BytesSoFar = [EncBytes1, EncBytes2], LenSoFar = EncLen1 + EncLen2, encode_tags(TagIn, BytesSoFar, LenSoFar). dec_BodyPartReference(Tlv) -> dec_BodyPartReference(Tlv, []). dec_BodyPartReference(Tlv, TagIn) -> Tlv1 = match_tags(Tlv, TagIn), case (case Tlv1 of [CtempTlv1] -> CtempTlv1; _ -> Tlv1 end) of %% 'stored-entry' {131072, V1} -> {'stored-entry', begin Val1 = decode_integer(V1, []), if 0 =< Val1, Val1 =< 2147483647 -> Val1; true -> exit({error,{asn1,bad_range}}) end end}; %% 'stored-content' {131073, V1} -> {'stored-content', begin Val2 = decode_integer(V1, []), if 0 =< Val2, Val2 =< 2147483647 -> Val2; true -> exit({error,{asn1,bad_range}}) end end}; %% 'submitted-body-part' {131074, V1} -> {'submitted-body-part', begin Val3 = decode_integer(V1, []), if 1 =< Val3, Val3 =< 'MAX' -> Val3; true -> exit({error,{asn1,bad_range}}) end end}; %% 'stored-body-part' {131075, V1} -> {'stored-body-part', 'dec_BodyPartReference_stored-body-part'(V1, [])}; Else -> exit({error,{asn1,{invalid_choice_tag,Else}}}) end . 'dec_BodyPartReference_stored-body-part'(Tlv, TagIn) -> %%------------------------------------------------- %% decode tag and length %%------------------------------------------------- Tlv1 = match_tags(Tlv, TagIn), %%------------------------------------------------- %% attribute message-entry(1) with type INTEGER %%------------------------------------------------- [V1|Tlv2] = Tlv1, Term1 = begin Val1 = decode_integer(V1, [2]), if 0 =< Val1, Val1 =< 2147483647 -> Val1; true -> exit({error,{asn1,bad_range}}) end end, %%------------------------------------------------- %% attribute body-part-number(2) with type INTEGER %%------------------------------------------------- [V2|Tlv3] = Tlv2, Term2 = begin Val2 = decode_integer(V2, [2]), if 1 =< Val2, Val2 =< 'MAX' -> Val2; true -> exit({error,{asn1,bad_range}}) end end, case Tlv3 of [] -> true;_ -> exit({error,{asn1, {unexpected,Tlv3}}}) % extra fields not allowed end, Res1 = {'BodyPartReference_stored-body-part',Term1,Term2}, Res1. %%================================ %% EXTERNAL %%================================ enc_EXTERNAL(Val) -> enc_EXTERNAL(Val, [<<40>>]). enc_EXTERNAL(Val, TagIn) -> NewVal = transform_to_EXTERNAL1990(Val), {_,Cindex1,Cindex2,Cindex3,Cindex4} = NewVal, %%------------------------------------------------- %% attribute direct-reference(1) with type OBJECT IDENTIFIER OPTIONAL %%------------------------------------------------- {EncBytes1,EncLen1} = case Cindex1 of asn1_NOVALUE -> {<<>>,0}; _ -> encode_object_identifier(Cindex1, [<<6>>]) end, %%------------------------------------------------- %% attribute indirect-reference(2) with type INTEGER OPTIONAL %%------------------------------------------------- {EncBytes2,EncLen2} = case Cindex2 of asn1_NOVALUE -> {<<>>,0}; _ -> encode_integer(Cindex2, [<<2>>]) end, %%------------------------------------------------- %% attribute data-value-descriptor(3) with type ObjectDescriptor OPTIONAL %%------------------------------------------------- {EncBytes3,EncLen3} = case Cindex3 of asn1_NOVALUE -> {<<>>,0}; _ -> encode_restricted_string(Cindex3, [<<7>>]) end, %%------------------------------------------------- %% attribute encoding(4) with type CHOICE %%------------------------------------------------- {EncBytes4,EncLen4} = 'enc_EXTERNAL_encoding'(Cindex4, []), BytesSoFar = [EncBytes1, EncBytes2, EncBytes3, EncBytes4], LenSoFar = EncLen1 + EncLen2 + EncLen3 + EncLen4, encode_tags(TagIn, BytesSoFar, LenSoFar). %%================================ %% EXTERNAL_encoding %%================================ enc_EXTERNAL_encoding(Val, TagIn) -> {EncBytes,EncLen} = case element(1,Val) of 'single-ASN1-type' -> encode_open_type(element(2,Val), [<<160>>]); 'octet-aligned' -> encode_restricted_string(element(2,Val), [<<129>>]); arbitrary -> encode_unnamed_bit_string(element(2,Val), [<<130>>]); Else -> exit({error,{asn1,{invalid_choice_type,Else}}}) end, encode_tags(TagIn, EncBytes, EncLen). dec_EXTERNAL(Tlv) -> dec_EXTERNAL(Tlv, [8]). dec_EXTERNAL(Tlv, TagIn) -> %%------------------------------------------------- %% decode tag and length %%------------------------------------------------- Tlv1 = match_tags(Tlv, TagIn), %%------------------------------------------------- %% attribute direct-reference(1) with type OBJECT IDENTIFIER OPTIONAL %%------------------------------------------------- {Term1,Tlv2} = case Tlv1 of [{6,V1}|TempTlv2] -> {decode_object_identifier(V1, []), TempTlv2}; _ -> { asn1_NOVALUE, Tlv1} end, %%------------------------------------------------- %% attribute indirect-reference(2) with type INTEGER OPTIONAL %%------------------------------------------------- {Term2,Tlv3} = case Tlv2 of [{2,V2}|TempTlv3] -> {decode_integer(V2, []), TempTlv3}; _ -> { asn1_NOVALUE, Tlv2} end, %%------------------------------------------------- %% attribute data-value-descriptor(3) with type ObjectDescriptor OPTIONAL %%------------------------------------------------- {Term3,Tlv4} = case Tlv3 of [{7,V3}|TempTlv4] -> {begin binary_to_list(decode_restricted_string(V3, [])) end , TempTlv4}; _ -> { asn1_NOVALUE, Tlv3} end, %%------------------------------------------------- %% attribute encoding(4) with type CHOICE %%------------------------------------------------- [V4|Tlv5] = Tlv4, Term4 = 'dec_EXTERNAL_encoding'(V4, []), case Tlv5 of [] -> true;_ -> exit({error,{asn1, {unexpected,Tlv5}}}) % extra fields not allowed end, OldFormat={'EXTERNAL',Term1,Term2,Term3,Term4}, transform_to_EXTERNAL1994(OldFormat). 'dec_EXTERNAL_encoding'(Tlv, TagIn) -> Tlv1 = match_tags(Tlv, TagIn), case (case Tlv1 of [CtempTlv1] -> CtempTlv1; _ -> Tlv1 end) of %% 'single-ASN1-type' {131072, V1} -> {'single-ASN1-type', decode_open_type_as_binary(V1, [])}; %% 'octet-aligned' {131073, V1} -> {'octet-aligned', decode_octet_string(V1, [])}; %% 'arbitrary' {131074, V1} -> {arbitrary, decode_native_bit_string(V1, [])}; Else -> exit({error,{asn1,{invalid_choice_tag,Else}}}) end . %%================================ %% INSTANCE OF %%================================ 'enc_INSTANCE OF'(Val) -> 'enc_INSTANCE OF'(Val, [<<40>>]). 'enc_INSTANCE OF'(Val, TagIn) -> {_,Cindex1,Cindex2} = Val, %%------------------------------------------------- %% attribute type-id(1) with type OBJECT IDENTIFIER %%------------------------------------------------- {EncBytes1,EncLen1} = encode_object_identifier(Cindex1, [<<6>>]), %%------------------------------------------------- %% attribute value(2) with type ASN1_OPEN_TYPE %%------------------------------------------------- {EncBytes2,EncLen2} = encode_open_type(Cindex2, [<<160>>]), BytesSoFar = [EncBytes1, EncBytes2], LenSoFar = EncLen1 + EncLen2, encode_tags(TagIn, BytesSoFar, LenSoFar). 'dec_INSTANCE OF'(Tlv) -> 'dec_INSTANCE OF'(Tlv, [8]). 'dec_INSTANCE OF'(Tlv, TagIn) -> %%------------------------------------------------- %% decode tag and length %%------------------------------------------------- Tlv1 = match_tags(Tlv, TagIn), %%------------------------------------------------- %% attribute type-id(1) with type OBJECT IDENTIFIER %%------------------------------------------------- [V1|Tlv2] = Tlv1, Term1 = decode_object_identifier(V1, [6]), %%------------------------------------------------- %% attribute value(2) with type ASN1_OPEN_TYPE %%------------------------------------------------- [V2|Tlv3] = Tlv2, Term2 = decode_open_type_as_binary(V2, [131072]), case Tlv3 of [] -> true;_ -> exit({error,{asn1, {unexpected,Tlv3}}}) % extra fields not allowed end, Res1 = {'INSTANCE OF',Term1,Term2}, Res1. %%================================ %% blind-copy-recipients %%================================ 'enc_blind-copy-recipients'('Type', Val, _RestPrimFieldName) -> enc_BlindCopyRecipientsField(Val, [<<48>>]). 'dec_blind-copy-recipients'('Type', Bytes,_) -> Tlv = tlv_format(Bytes), dec_BlindCopyRecipientsField(Tlv, [16]). tlv_format(Bytes) when is_binary(Bytes) -> {Tlv,_} = ber_decode_nif(Bytes), Tlv; tlv_format(Bytes) -> Bytes. %%================================ %% absence-advice %%================================ 'enc_absence-advice'('Type', Val, _RestPrimFieldName) -> enc_AbsenceAdvice(Val, [<<48>>]). 'dec_absence-advice'('Type', Bytes,_) -> Tlv = tlv_format(Bytes), dec_AbsenceAdvice(Tlv, [16]). %%================================ %% change-of-address-advice %%================================ 'enc_change-of-address-advice'('Type', Val, _RestPrimFieldName) -> enc_ChangeOfAddressAdvice(Val, [<<48>>]). 'dec_change-of-address-advice'('Type', Bytes,_) -> Tlv = tlv_format(Bytes), dec_ChangeOfAddressAdvice(Tlv, [16]). %%================================ %% prevent-nrn-generation %%================================ 'enc_prevent-nrn-generation'('Type', Val, _RestPrimFieldName) -> encode_null(Val, [<<5>>]). 'dec_prevent-nrn-generation'('Type', Bytes,_) -> Tlv = tlv_format(Bytes), decode_null(Tlv, [5]). %%================================ %% suspend-auto-acknowledgement %%================================ 'enc_suspend-auto-acknowledgement'('Type', Val, _RestPrimFieldName) -> encode_null(Val, [<<5>>]). 'dec_suspend-auto-acknowledgement'('Type', Bytes,_) -> Tlv = tlv_format(Bytes), decode_null(Tlv, [5]). %%================================ %% assembly-capability %%================================ 'enc_assembly-capability'('Type', Val, _RestPrimFieldName) -> encode_null(Val, [<<5>>]). 'dec_assembly-capability'('Type', Bytes,_) -> Tlv = tlv_format(Bytes), decode_null(Tlv, [5]). %%================================ %% ipm-assembly-instructions %%================================ 'enc_ipm-assembly-instructions'('Type', Val, _RestPrimFieldName) -> enc_IPMAssemblyInstructions(Val, [<<49>>]). 'dec_ipm-assembly-instructions'('Type', Bytes,_) -> Tlv = tlv_format(Bytes), dec_IPMAssemblyInstructions(Tlv, [17]). %%================================ %% originator-body-part-encryption-token %%================================ 'enc_originator-body-part-encryption-token'('Type', Val, _RestPrimFieldName) -> 'IPMSSecurityExtensions':enc_BodyPartTokens(Val, [<<49>>]). 'dec_originator-body-part-encryption-token'('Type', Bytes,_) -> Tlv = tlv_format(Bytes), 'IPMSSecurityExtensions':dec_BodyPartTokens(Tlv, [17]). %%================================ %% originator-forwarded-content-token %%================================ 'enc_originator-forwarded-content-token'('Type', Val, _RestPrimFieldName) -> 'IPMSSecurityExtensions':enc_ForwardedContentToken(Val, [<<49>>]). 'dec_originator-forwarded-content-token'('Type', Bytes,_) -> Tlv = tlv_format(Bytes), 'IPMSSecurityExtensions':dec_ForwardedContentToken(Tlv, [17]). %%================================ %% invalid-assembly-instructions %%================================ 'enc_invalid-assembly-instructions'('Type', Val, _RestPrimFieldName) -> enc_BodyPartReferences(Val, [<<48>>]). 'dec_invalid-assembly-instructions'('Type', Bytes,_) -> Tlv = tlv_format(Bytes), dec_BodyPartReferences(Tlv, [16]). %%================================ %% invalid-ipn %%================================ 'enc_invalid-ipn'('Type', Val, _RestPrimFieldName) -> encode_null(Val, [<<5>>]). 'dec_invalid-ipn'('Type', Bytes,_) -> Tlv = tlv_format(Bytes), decode_null(Tlv, [5]). %%================================ %% IPMBodyPartTable_parameters %%================================ enc_IPMBodyPartTable_parameters('Type', Val, _RestPrimFieldName) -> 'IPMSForwardedContentBodyPartType':enc_ForwardedContentParameters(Val, [<<49>>]). dec_IPMBodyPartTable_parameters('Type', Bytes,_) -> Tlv = tlv_format(Bytes), 'IPMSForwardedContentBodyPartType':dec_ForwardedContentParameters(Tlv, [17]). %%================================ %% BodyPart_parameters %%================================ enc_BodyPart_parameters('Type', Val, _RestPrimFieldName) -> 'IPMSForwardedContentBodyPartType':enc_ForwardedContentParameters(Val, [<<49>>]). dec_BodyPart_parameters('Type', Bytes,_) -> Tlv = tlv_format(Bytes), 'IPMSForwardedContentBodyPartType':dec_ForwardedContentParameters(Tlv, [17]). %%================================ %% StandardBodyParts_parameters %%================================ enc_StandardBodyParts_parameters('Type', Val, _RestPrimFieldName) -> 'IPMSForwardedContentBodyPartType':enc_ForwardedContentParameters(Val, [<<49>>]). dec_StandardBodyParts_parameters('Type', Bytes,_) -> Tlv = tlv_format(Bytes), 'IPMSForwardedContentBodyPartType':dec_ForwardedContentParameters(Tlv, [17]). %%================================ %% IPMBodyPartTable_data %%================================ enc_IPMBodyPartTable_data('Type', Val, _RestPrimFieldName) -> 'PKCS-7':enc_ContentInfo(Val, [<<48>>]). dec_IPMBodyPartTable_data('Type', Bytes,_) -> Tlv = tlv_format(Bytes), 'PKCS-7':dec_ContentInfo(Tlv, [16]). %%================================ %% BodyPart_data %%================================ enc_BodyPart_data('Type', Val, _RestPrimFieldName) -> 'PKCS-7':enc_ContentInfo(Val, [<<48>>]). dec_BodyPart_data('Type', Bytes,_) -> Tlv = tlv_format(Bytes), 'PKCS-7':dec_ContentInfo(Tlv, [16]). %%================================ %% StandardBodyParts_data %%================================ enc_StandardBodyParts_data('Type', Val, _RestPrimFieldName) -> 'PKCS-7':enc_ContentInfo(Val, [<<48>>]). dec_StandardBodyParts_data('Type', Bytes,_) -> Tlv = tlv_format(Bytes), 'PKCS-7':dec_ContentInfo(Tlv, [16]). %%================================ %% IPMPerRecipientEnvelopeExtensions %%================================ getenc_IPMPerRecipientEnvelopeExtensions(Id) when Id =:= {'standard-extension',41} -> fun 'enc_blind-copy-recipients'/3; getenc_IPMPerRecipientEnvelopeExtensions(Id) when Id =:= {'standard-extension',43} -> fun(T,V,O) -> 'IPMSSecurityExtensions':'enc_body-part-encryption-token'(T,V,O) end; getenc_IPMPerRecipientEnvelopeExtensions(Id) when Id =:= {'standard-extension',44} -> fun(T,V,O) -> 'IPMSSecurityExtensions':'enc_forwarded-content-token'(T,V,O) end; getenc_IPMPerRecipientEnvelopeExtensions(_) -> fun(_, Val, _RestPrimFieldName) -> case Val of {asn1_OPENTYPE,Bin} when is_binary(Bin) -> {Bin,byte_size(Bin)} end end. getdec_IPMPerRecipientEnvelopeExtensions(Id) when Id =:= {'standard-extension',41} -> fun 'dec_blind-copy-recipients'/3; getdec_IPMPerRecipientEnvelopeExtensions(Id) when Id =:= {'standard-extension',43} -> fun(T,V,O) -> 'IPMSSecurityExtensions':'dec_body-part-encryption-token'(T,V,O) end; getdec_IPMPerRecipientEnvelopeExtensions(Id) when Id =:= {'standard-extension',44} -> fun(T,V,O) -> 'IPMSSecurityExtensions':'dec_forwarded-content-token'(T,V,O) end; getdec_IPMPerRecipientEnvelopeExtensions(_) -> fun(_,Bytes, _RestPrimFieldName) -> case Bytes of Bin when is_binary(Bin) -> {asn1_OPENTYPE,Bin}; _ -> {asn1_OPENTYPE,ber_encode(Bytes)} end end. %%================================ %% PrivateIPMSExtensions %%================================ getenc_PrivateIPMSExtensions(_) -> fun(_, Val, _RestPrimFieldName) -> case Val of {asn1_OPENTYPE,Bin} when is_binary(Bin) -> {Bin,byte_size(Bin)} end end. getdec_PrivateIPMSExtensions(_) -> fun(_,Bytes, _RestPrimFieldName) -> case Bytes of Bin when is_binary(Bin) -> {asn1_OPENTYPE,Bin}; _ -> {asn1_OPENTYPE,ber_encode(Bytes)} end end. %%================================ %% RecipientExtensions %%================================ getenc_RecipientExtensions(Id) when Id =:= {2,6,1,18,0} -> fun(T,V,O) -> 'IPMSSecurityExtensions':'enc_recipient-security-request'(T,V,O) end; getenc_RecipientExtensions(Id) when Id =:= {2,6,1,20,0} -> fun(T,V,O) -> 'IPMSHeadingExtensions':'enc_circulation-list-indicator'(T,V,O) end; getenc_RecipientExtensions(Id) when Id =:= {2,6,1,20,1} -> fun(T,V,O) -> 'IPMSHeadingExtensions':'enc_precedence'(T,V,O) end; getenc_RecipientExtensions(_) -> fun(_, Val, _RestPrimFieldName) -> case Val of {asn1_OPENTYPE,Bin} when is_binary(Bin) -> {Bin,byte_size(Bin)} end end. getdec_RecipientExtensions(Id) when Id =:= {2,6,1,18,0} -> fun(T,V,O) -> 'IPMSSecurityExtensions':'dec_recipient-security-request'(T,V,O) end; getdec_RecipientExtensions(Id) when Id =:= {2,6,1,20,0} -> fun(T,V,O) -> 'IPMSHeadingExtensions':'dec_circulation-list-indicator'(T,V,O) end; getdec_RecipientExtensions(Id) when Id =:= {2,6,1,20,1} -> fun(T,V,O) -> 'IPMSHeadingExtensions':'dec_precedence'(T,V,O) end; getdec_RecipientExtensions(_) -> fun(_,Bytes, _RestPrimFieldName) -> case Bytes of Bin when is_binary(Bin) -> {asn1_OPENTYPE,Bin}; _ -> {asn1_OPENTYPE,ber_encode(Bytes)} end end. %%================================ %% HeadingExtensions %%================================ getenc_HeadingExtensions(Id) when Id =:= {2,6,1,5,0} -> fun(T,V,O) -> 'IPMSHeadingExtensions':'enc_incomplete-copy'(T,V,O) end; getenc_HeadingExtensions(Id) when Id =:= {2,6,1,5,1} -> fun(T,V,O) -> 'IPMSHeadingExtensions':'enc_languages'(T,V,O) end; getenc_HeadingExtensions(Id) when Id =:= {2,6,1,5,2} -> fun(T,V,O) -> 'IPMSHeadingExtensions':'enc_auto-submitted'(T,V,O) end; getenc_HeadingExtensions(Id) when Id =:= {2,6,1,5,3} -> fun(T,V,O) -> 'IPMSHeadingExtensions':'enc_body-part-signatures'(T,V,O) end; getenc_HeadingExtensions(Id) when Id =:= {2,6,1,5,4} -> fun(T,V,O) -> 'IPMSHeadingExtensions':'enc_ipm-security-label'(T,V,O) end; getenc_HeadingExtensions(Id) when Id =:= {2,6,1,5,5} -> fun(T,V,O) -> 'IPMSHeadingExtensions':'enc_authorization-time'(T,V,O) end; getenc_HeadingExtensions(Id) when Id =:= {2,6,1,5,6} -> fun(T,V,O) -> 'IPMSHeadingExtensions':'enc_circulation-list-recipients'(T,V,O) end; getenc_HeadingExtensions(Id) when Id =:= {2,6,1,5,7} -> fun(T,V,O) -> 'IPMSHeadingExtensions':'enc_distribution-codes'(T,V,O) end; getenc_HeadingExtensions(Id) when Id =:= {2,6,1,5,8} -> fun(T,V,O) -> 'IPMSHeadingExtensions':'enc_extended-subject'(T,V,O) end; getenc_HeadingExtensions(Id) when Id =:= {2,6,1,5,9} -> fun(T,V,O) -> 'IPMSHeadingExtensions':'enc_information-category'(T,V,O) end; getenc_HeadingExtensions(Id) when Id =:= {2,6,1,5,10} -> fun(T,V,O) -> 'IPMSHeadingExtensions':'enc_manual-handling-instructions'(T,V,O) end; getenc_HeadingExtensions(Id) when Id =:= {2,6,1,5,11} -> fun(T,V,O) -> 'IPMSHeadingExtensions':'enc_originators-reference'(T,V,O) end; getenc_HeadingExtensions(Id) when Id =:= {2,6,1,5,12} -> fun(T,V,O) -> 'IPMSHeadingExtensions':'enc_precedence-policy-identifier'(T,V,O) end; getenc_HeadingExtensions(_) -> fun(_, Val, _RestPrimFieldName) -> case Val of {asn1_OPENTYPE,Bin} when is_binary(Bin) -> {Bin,byte_size(Bin)} end end. getdec_HeadingExtensions(Id) when Id =:= {2,6,1,5,0} -> fun(T,V,O) -> 'IPMSHeadingExtensions':'dec_incomplete-copy'(T,V,O) end; getdec_HeadingExtensions(Id) when Id =:= {2,6,1,5,1} -> fun(T,V,O) -> 'IPMSHeadingExtensions':'dec_languages'(T,V,O) end; getdec_HeadingExtensions(Id) when Id =:= {2,6,1,5,2} -> fun(T,V,O) -> 'IPMSHeadingExtensions':'dec_auto-submitted'(T,V,O) end; getdec_HeadingExtensions(Id) when Id =:= {2,6,1,5,3} -> fun(T,V,O) -> 'IPMSHeadingExtensions':'dec_body-part-signatures'(T,V,O) end; getdec_HeadingExtensions(Id) when Id =:= {2,6,1,5,4} -> fun(T,V,O) -> 'IPMSHeadingExtensions':'dec_ipm-security-label'(T,V,O) end; getdec_HeadingExtensions(Id) when Id =:= {2,6,1,5,5} -> fun(T,V,O) -> 'IPMSHeadingExtensions':'dec_authorization-time'(T,V,O) end; getdec_HeadingExtensions(Id) when Id =:= {2,6,1,5,6} -> fun(T,V,O) -> 'IPMSHeadingExtensions':'dec_circulation-list-recipients'(T,V,O) end; getdec_HeadingExtensions(Id) when Id =:= {2,6,1,5,7} -> fun(T,V,O) -> 'IPMSHeadingExtensions':'dec_distribution-codes'(T,V,O) end; getdec_HeadingExtensions(Id) when Id =:= {2,6,1,5,8} -> fun(T,V,O) -> 'IPMSHeadingExtensions':'dec_extended-subject'(T,V,O) end; getdec_HeadingExtensions(Id) when Id =:= {2,6,1,5,9} -> fun(T,V,O) -> 'IPMSHeadingExtensions':'dec_information-category'(T,V,O) end; getdec_HeadingExtensions(Id) when Id =:= {2,6,1,5,10} -> fun(T,V,O) -> 'IPMSHeadingExtensions':'dec_manual-handling-instructions'(T,V,O) end; getdec_HeadingExtensions(Id) when Id =:= {2,6,1,5,11} -> fun(T,V,O) -> 'IPMSHeadingExtensions':'dec_originators-reference'(T,V,O) end; getdec_HeadingExtensions(Id) when Id =:= {2,6,1,5,12} -> fun(T,V,O) -> 'IPMSHeadingExtensions':'dec_precedence-policy-identifier'(T,V,O) end; getdec_HeadingExtensions(_) -> fun(_,Bytes, _RestPrimFieldName) -> case Bytes of Bin when is_binary(Bin) -> {asn1_OPENTYPE,Bin}; _ -> {asn1_OPENTYPE,ber_encode(Bytes)} end end. %%================================ %% NotificationExtensions %%================================ getenc_NotificationExtensions(Id) when Id =:= {2,6,1,18,1} -> fun(T,V,O) -> 'IPMSSecurityExtensions':'enc_ipn-security-response'(T,V,O) end; getenc_NotificationExtensions(_) -> fun(_, Val, _RestPrimFieldName) -> case Val of {asn1_OPENTYPE,Bin} when is_binary(Bin) -> {Bin,byte_size(Bin)} end end. getdec_NotificationExtensions(Id) when Id =:= {2,6,1,18,1} -> fun(T,V,O) -> 'IPMSSecurityExtensions':'dec_ipn-security-response'(T,V,O) end; getdec_NotificationExtensions(_) -> fun(_,Bytes, _RestPrimFieldName) -> case Bytes of Bin when is_binary(Bin) -> {asn1_OPENTYPE,Bin}; _ -> {asn1_OPENTYPE,ber_encode(Bytes)} end end. %%================================ %% NRNExtensions %%================================ getenc_NRNExtensions(_) -> fun(_, Val, _RestPrimFieldName) -> case Val of {asn1_OPENTYPE,Bin} when is_binary(Bin) -> {Bin,byte_size(Bin)} end end. getdec_NRNExtensions(_) -> fun(_,Bytes, _RestPrimFieldName) -> case Bytes of Bin when is_binary(Bin) -> {asn1_OPENTYPE,Bin}; _ -> {asn1_OPENTYPE,ber_encode(Bytes)} end end. %%================================ %% RNExtensions %%================================ getenc_RNExtensions(_) -> fun(_, Val, _RestPrimFieldName) -> case Val of {asn1_OPENTYPE,Bin} when is_binary(Bin) -> {Bin,byte_size(Bin)} end end. getdec_RNExtensions(_) -> fun(_,Bytes, _RestPrimFieldName) -> case Bytes of Bin when is_binary(Bin) -> {asn1_OPENTYPE,Bin}; _ -> {asn1_OPENTYPE,ber_encode(Bytes)} end end. %%================================ %% OtherNotifications %%================================ getenc_OtherNotifications(Id) when Id =:= {2,6,1,19,0} -> fun 'enc_absence-advice'/3; getenc_OtherNotifications(Id) when Id =:= {2,6,1,19,1} -> fun 'enc_change-of-address-advice'/3; getenc_OtherNotifications(_) -> fun(_, Val, _RestPrimFieldName) -> case Val of {asn1_OPENTYPE,Bin} when is_binary(Bin) -> {Bin,byte_size(Bin)} end end. getdec_OtherNotifications(Id) when Id =:= {2,6,1,19,0} -> fun 'dec_absence-advice'/3; getdec_OtherNotifications(Id) when Id =:= {2,6,1,19,1} -> fun 'dec_change-of-address-advice'/3; getdec_OtherNotifications(_) -> fun(_,Bytes, _RestPrimFieldName) -> case Bytes of Bin when is_binary(Bin) -> {asn1_OPENTYPE,Bin}; _ -> {asn1_OPENTYPE,ber_encode(Bytes)} end end. %%================================ %% AdviceNotifications %%================================ getenc_AdviceNotifications(Id) when Id =:= {2,6,1,19,0} -> fun 'enc_absence-advice'/3; getenc_AdviceNotifications(Id) when Id =:= {2,6,1,19,1} -> fun 'enc_change-of-address-advice'/3; getenc_AdviceNotifications(_) -> fun(_, Val, _RestPrimFieldName) -> case Val of {asn1_OPENTYPE,Bin} when is_binary(Bin) -> {Bin,byte_size(Bin)} end end. getdec_AdviceNotifications(Id) when Id =:= {2,6,1,19,0} -> fun 'dec_absence-advice'/3; getdec_AdviceNotifications(Id) when Id =:= {2,6,1,19,1} -> fun 'dec_change-of-address-advice'/3; getdec_AdviceNotifications(_) -> fun(_,Bytes, _RestPrimFieldName) -> case Bytes of Bin when is_binary(Bin) -> {asn1_OPENTYPE,Bin}; _ -> {asn1_OPENTYPE,ber_encode(Bytes)} end end. %%================================ %% IPMSubmissionOptions %%================================ getenc_IPMSubmissionOptions(Id) when Id =:= {2,6,1,17,2} -> fun 'enc_ipm-assembly-instructions'/3; getenc_IPMSubmissionOptions(Id) when Id =:= {2,6,1,17,5} -> fun 'enc_originator-body-part-encryption-token'/3; getenc_IPMSubmissionOptions(Id) when Id =:= {2,6,1,17,6} -> fun 'enc_originator-forwarded-content-token'/3; getenc_IPMSubmissionOptions(_) -> fun(_, Val, _RestPrimFieldName) -> case Val of {asn1_OPENTYPE,Bin} when is_binary(Bin) -> {Bin,byte_size(Bin)} end end. getdec_IPMSubmissionOptions(Id) when Id =:= {2,6,1,17,2} -> fun 'dec_ipm-assembly-instructions'/3; getdec_IPMSubmissionOptions(Id) when Id =:= {2,6,1,17,5} -> fun 'dec_originator-body-part-encryption-token'/3; getdec_IPMSubmissionOptions(Id) when Id =:= {2,6,1,17,6} -> fun 'dec_originator-forwarded-content-token'/3; getdec_IPMSubmissionOptions(_) -> fun(_,Bytes, _RestPrimFieldName) -> case Bytes of Bin when is_binary(Bin) -> {asn1_OPENTYPE,Bin}; _ -> {asn1_OPENTYPE,ber_encode(Bytes)} end end. %%================================ %% IPMSubmissionErrors %%================================ getenc_IPMSubmissionErrors(Id) when Id =:= {2,6,1,17,0} -> fun 'enc_invalid-assembly-instructions'/3; getenc_IPMSubmissionErrors(Id) when Id =:= {2,6,1,17,1} -> fun 'enc_invalid-ipn'/3; getenc_IPMSubmissionErrors(_) -> fun(_, Val, _RestPrimFieldName) -> case Val of {asn1_OPENTYPE,Bin} when is_binary(Bin) -> {Bin,byte_size(Bin)} end end. getdec_IPMSubmissionErrors(Id) when Id =:= {2,6,1,17,0} -> fun 'dec_invalid-assembly-instructions'/3; getdec_IPMSubmissionErrors(Id) when Id =:= {2,6,1,17,1} -> fun 'dec_invalid-ipn'/3; getdec_IPMSubmissionErrors(_) -> fun(_,Bytes, _RestPrimFieldName) -> case Bytes of Bin when is_binary(Bin) -> {asn1_OPENTYPE,Bin}; _ -> {asn1_OPENTYPE,ber_encode(Bytes)} end end. %%================================ %% internal_object_set_argument_8 %%================================ getenc_internal_object_set_argument_8(Id) when Id =:= {2,6,1,19,0} -> fun 'enc_absence-advice'/3; getenc_internal_object_set_argument_8(Id) when Id =:= {2,6,1,19,1} -> fun 'enc_change-of-address-advice'/3; getenc_internal_object_set_argument_8(_) -> fun(_, Val, _RestPrimFieldName) -> case Val of {asn1_OPENTYPE,Bin} when is_binary(Bin) -> {Bin,byte_size(Bin)} end end. getdec_internal_object_set_argument_8(Id) when Id =:= {2,6,1,19,0} -> fun 'dec_absence-advice'/3; getdec_internal_object_set_argument_8(Id) when Id =:= {2,6,1,19,1} -> fun 'dec_change-of-address-advice'/3; getdec_internal_object_set_argument_8(_) -> fun(_,Bytes, _RestPrimFieldName) -> case Bytes of Bin when is_binary(Bin) -> {asn1_OPENTYPE,Bin}; _ -> {asn1_OPENTYPE,ber_encode(Bytes)} end end. %%================================ %% internal_object_set_argument_7 %%================================ getenc_internal_object_set_argument_7(_) -> fun(_, Val, _RestPrimFieldName) -> case Val of {asn1_OPENTYPE,Bin} when is_binary(Bin) -> {Bin,byte_size(Bin)} end end. getdec_internal_object_set_argument_7(_) -> fun(_,Bytes, _RestPrimFieldName) -> case Bytes of Bin when is_binary(Bin) -> {asn1_OPENTYPE,Bin}; _ -> {asn1_OPENTYPE,ber_encode(Bytes)} end end. %%================================ %% internal_object_set_argument_6 %%================================ getenc_internal_object_set_argument_6(_) -> fun(_, Val, _RestPrimFieldName) -> case Val of {asn1_OPENTYPE,Bin} when is_binary(Bin) -> {Bin,byte_size(Bin)} end end. getdec_internal_object_set_argument_6(_) -> fun(_,Bytes, _RestPrimFieldName) -> case Bytes of Bin when is_binary(Bin) -> {asn1_OPENTYPE,Bin}; _ -> {asn1_OPENTYPE,ber_encode(Bytes)} end end. %%================================ %% internal_object_set_argument_5 %%================================ getenc_internal_object_set_argument_5(Id) when Id =:= {2,6,1,18,1} -> fun(T,V,O) -> 'IPMSSecurityExtensions':'enc_ipn-security-response'(T,V,O) end; getenc_internal_object_set_argument_5(_) -> fun(_, Val, _RestPrimFieldName) -> case Val of {asn1_OPENTYPE,Bin} when is_binary(Bin) -> {Bin,byte_size(Bin)} end end. getdec_internal_object_set_argument_5(Id) when Id =:= {2,6,1,18,1} -> fun(T,V,O) -> 'IPMSSecurityExtensions':'dec_ipn-security-response'(T,V,O) end; getdec_internal_object_set_argument_5(_) -> fun(_,Bytes, _RestPrimFieldName) -> case Bytes of Bin when is_binary(Bin) -> {asn1_OPENTYPE,Bin}; _ -> {asn1_OPENTYPE,ber_encode(Bytes)} end end. %%================================ %% internal_object_set_argument_2 %%================================ getenc_internal_object_set_argument_2(Id) when Id =:= {2,6,1,5,0} -> fun(T,V,O) -> 'IPMSHeadingExtensions':'enc_incomplete-copy'(T,V,O) end; getenc_internal_object_set_argument_2(Id) when Id =:= {2,6,1,5,1} -> fun(T,V,O) -> 'IPMSHeadingExtensions':'enc_languages'(T,V,O) end; getenc_internal_object_set_argument_2(Id) when Id =:= {2,6,1,5,2} -> fun(T,V,O) -> 'IPMSHeadingExtensions':'enc_auto-submitted'(T,V,O) end; getenc_internal_object_set_argument_2(Id) when Id =:= {2,6,1,5,3} -> fun(T,V,O) -> 'IPMSHeadingExtensions':'enc_body-part-signatures'(T,V,O) end; getenc_internal_object_set_argument_2(Id) when Id =:= {2,6,1,5,4} -> fun(T,V,O) -> 'IPMSHeadingExtensions':'enc_ipm-security-label'(T,V,O) end; getenc_internal_object_set_argument_2(Id) when Id =:= {2,6,1,5,5} -> fun(T,V,O) -> 'IPMSHeadingExtensions':'enc_authorization-time'(T,V,O) end; getenc_internal_object_set_argument_2(Id) when Id =:= {2,6,1,5,6} -> fun(T,V,O) -> 'IPMSHeadingExtensions':'enc_circulation-list-recipients'(T,V,O) end; getenc_internal_object_set_argument_2(Id) when Id =:= {2,6,1,5,7} -> fun(T,V,O) -> 'IPMSHeadingExtensions':'enc_distribution-codes'(T,V,O) end; getenc_internal_object_set_argument_2(Id) when Id =:= {2,6,1,5,8} -> fun(T,V,O) -> 'IPMSHeadingExtensions':'enc_extended-subject'(T,V,O) end; getenc_internal_object_set_argument_2(Id) when Id =:= {2,6,1,5,9} -> fun(T,V,O) -> 'IPMSHeadingExtensions':'enc_information-category'(T,V,O) end; getenc_internal_object_set_argument_2(Id) when Id =:= {2,6,1,5,10} -> fun(T,V,O) -> 'IPMSHeadingExtensions':'enc_manual-handling-instructions'(T,V,O) end; getenc_internal_object_set_argument_2(Id) when Id =:= {2,6,1,5,11} -> fun(T,V,O) -> 'IPMSHeadingExtensions':'enc_originators-reference'(T,V,O) end; getenc_internal_object_set_argument_2(Id) when Id =:= {2,6,1,5,12} -> fun(T,V,O) -> 'IPMSHeadingExtensions':'enc_precedence-policy-identifier'(T,V,O) end; getenc_internal_object_set_argument_2(_) -> fun(_, Val, _RestPrimFieldName) -> case Val of {asn1_OPENTYPE,Bin} when is_binary(Bin) -> {Bin,byte_size(Bin)} end end. getdec_internal_object_set_argument_2(Id) when Id =:= {2,6,1,5,0} -> fun(T,V,O) -> 'IPMSHeadingExtensions':'dec_incomplete-copy'(T,V,O) end; getdec_internal_object_set_argument_2(Id) when Id =:= {2,6,1,5,1} -> fun(T,V,O) -> 'IPMSHeadingExtensions':'dec_languages'(T,V,O) end; getdec_internal_object_set_argument_2(Id) when Id =:= {2,6,1,5,2} -> fun(T,V,O) -> 'IPMSHeadingExtensions':'dec_auto-submitted'(T,V,O) end; getdec_internal_object_set_argument_2(Id) when Id =:= {2,6,1,5,3} -> fun(T,V,O) -> 'IPMSHeadingExtensions':'dec_body-part-signatures'(T,V,O) end; getdec_internal_object_set_argument_2(Id) when Id =:= {2,6,1,5,4} -> fun(T,V,O) -> 'IPMSHeadingExtensions':'dec_ipm-security-label'(T,V,O) end; getdec_internal_object_set_argument_2(Id) when Id =:= {2,6,1,5,5} -> fun(T,V,O) -> 'IPMSHeadingExtensions':'dec_authorization-time'(T,V,O) end; getdec_internal_object_set_argument_2(Id) when Id =:= {2,6,1,5,6} -> fun(T,V,O) -> 'IPMSHeadingExtensions':'dec_circulation-list-recipients'(T,V,O) end; getdec_internal_object_set_argument_2(Id) when Id =:= {2,6,1,5,7} -> fun(T,V,O) -> 'IPMSHeadingExtensions':'dec_distribution-codes'(T,V,O) end; getdec_internal_object_set_argument_2(Id) when Id =:= {2,6,1,5,8} -> fun(T,V,O) -> 'IPMSHeadingExtensions':'dec_extended-subject'(T,V,O) end; getdec_internal_object_set_argument_2(Id) when Id =:= {2,6,1,5,9} -> fun(T,V,O) -> 'IPMSHeadingExtensions':'dec_information-category'(T,V,O) end; getdec_internal_object_set_argument_2(Id) when Id =:= {2,6,1,5,10} -> fun(T,V,O) -> 'IPMSHeadingExtensions':'dec_manual-handling-instructions'(T,V,O) end; getdec_internal_object_set_argument_2(Id) when Id =:= {2,6,1,5,11} -> fun(T,V,O) -> 'IPMSHeadingExtensions':'dec_originators-reference'(T,V,O) end; getdec_internal_object_set_argument_2(Id) when Id =:= {2,6,1,5,12} -> fun(T,V,O) -> 'IPMSHeadingExtensions':'dec_precedence-policy-identifier'(T,V,O) end; getdec_internal_object_set_argument_2(_) -> fun(_,Bytes, _RestPrimFieldName) -> case Bytes of Bin when is_binary(Bin) -> {asn1_OPENTYPE,Bin}; _ -> {asn1_OPENTYPE,ber_encode(Bytes)} end end. %%================================ %% internal_object_set_argument_1 %%================================ getenc_internal_object_set_argument_1(Id) when Id =:= {2,6,1,18,0} -> fun(T,V,O) -> 'IPMSSecurityExtensions':'enc_recipient-security-request'(T,V,O) end; getenc_internal_object_set_argument_1(Id) when Id =:= {2,6,1,20,0} -> fun(T,V,O) -> 'IPMSHeadingExtensions':'enc_circulation-list-indicator'(T,V,O) end; getenc_internal_object_set_argument_1(Id) when Id =:= {2,6,1,20,1} -> fun(T,V,O) -> 'IPMSHeadingExtensions':'enc_precedence'(T,V,O) end; getenc_internal_object_set_argument_1(_) -> fun(_, Val, _RestPrimFieldName) -> case Val of {asn1_OPENTYPE,Bin} when is_binary(Bin) -> {Bin,byte_size(Bin)} end end. getdec_internal_object_set_argument_1(Id) when Id =:= {2,6,1,18,0} -> fun(T,V,O) -> 'IPMSSecurityExtensions':'dec_recipient-security-request'(T,V,O) end; getdec_internal_object_set_argument_1(Id) when Id =:= {2,6,1,20,0} -> fun(T,V,O) -> 'IPMSHeadingExtensions':'dec_circulation-list-indicator'(T,V,O) end; getdec_internal_object_set_argument_1(Id) when Id =:= {2,6,1,20,1} -> fun(T,V,O) -> 'IPMSHeadingExtensions':'dec_precedence'(T,V,O) end; getdec_internal_object_set_argument_1(_) -> fun(_,Bytes, _RestPrimFieldName) -> case Bytes of Bin when is_binary(Bin) -> {asn1_OPENTYPE,Bin}; _ -> {asn1_OPENTYPE,ber_encode(Bytes)} end end. %%% %%% Run-time functions. %%% 'dialyzer-suppressions'(Arg) -> ok. ber_decode_nif(B) -> asn1rt_nif:decode_ber_tlv(B). ber_encode([Tlv]) -> ber_encode(Tlv); ber_encode(Tlv) when is_binary(Tlv) -> Tlv; ber_encode(Tlv) -> asn1rt_nif:encode_ber_tlv(Tlv). collect_parts(TlvList) -> collect_parts(TlvList, []). collect_parts([{_, L} | Rest], Acc) when is_list(L) -> collect_parts(Rest, [collect_parts(L) | Acc]); collect_parts([{3, <>} | Rest], _Acc) -> collect_parts_bit(Rest, [Bits], Unused); collect_parts([{_T, V} | Rest], Acc) -> collect_parts(Rest, [V | Acc]); collect_parts([], Acc) -> list_to_binary(lists:reverse(Acc)). collect_parts_bit([{3, <>} | Rest], Acc, Uacc) -> collect_parts_bit(Rest, [Bits | Acc], Unused + Uacc); collect_parts_bit([], Acc, Uacc) -> list_to_binary([Uacc | lists:reverse(Acc)]). dec_subidentifiers(<<>>, _Av, Al) -> lists:reverse(Al); dec_subidentifiers(<<1:1,H:7,T/binary>>, Av, Al) -> dec_subidentifiers(T, Av bsl 7 + H, Al); dec_subidentifiers(<>, Av, Al) -> dec_subidentifiers(T, 0, [Av bsl 7 + H | Al]). decode_bitstring2(1, Unused, <>) -> lists:sublist([B7, B6, B5, B4, B3, B2, B1, B0], 8 - Unused); decode_bitstring2(Len, Unused, <>) -> [B7, B6, B5, B4, B3, B2, B1, B0 | decode_bitstring2(Len - 1, Unused, Buffer)]. decode_bitstring_NNL(BitList, NamedNumberList) -> decode_bitstring_NNL(BitList, NamedNumberList, 0, []). decode_bitstring_NNL([], _, _No, Result) -> lists:reverse(Result); decode_bitstring_NNL([B | BitList], [{Name, No} | NamedNumberList], No, Result) -> if B =:= 0 -> decode_bitstring_NNL(BitList, NamedNumberList, No + 1, Result); true -> decode_bitstring_NNL(BitList, NamedNumberList, No + 1, [Name | Result]) end; decode_bitstring_NNL([1 | BitList], NamedNumberList, No, Result) -> decode_bitstring_NNL(BitList, NamedNumberList, No + 1, [{bit, No} | Result]); decode_bitstring_NNL([0 | BitList], NamedNumberList, No, Result) -> decode_bitstring_NNL(BitList, NamedNumberList, No + 1, Result). decode_boolean(Tlv, TagIn) -> Val = match_tags(Tlv, TagIn), case Val of <<0:8>> -> false; <<_:8>> -> true; _ -> exit({error, {asn1, {decode_boolean, Val}}}) end. decode_integer(Tlv, TagIn) -> Bin = match_tags(Tlv, TagIn), Len = byte_size(Bin), <> = Bin, Int. decode_named_bit_string(Buffer, NamedNumberList, Tags) -> case match_and_collect(Buffer, Tags) of <<0>> -> []; <> -> BitString = decode_bitstring2(byte_size(Bits), Unused, Bits), decode_bitstring_NNL(BitString, NamedNumberList) end. decode_native_bit_string(Buffer, Tags) -> case match_and_collect(Buffer, Tags) of <<0>> -> <<>>; <> -> Size = bit_size(Bits) - Unused, <> = Bits, Val end. decode_null(Tlv, Tags) -> Val = match_tags(Tlv, Tags), case Val of <<>> -> 'NULL'; _ -> exit({error, {asn1, {decode_null, Val}}}) end. decode_object_identifier(Tlv, Tags) -> Val = match_tags(Tlv, Tags), [AddedObjVal | ObjVals] = dec_subidentifiers(Val, 0, []), {Val1, Val2} = if AddedObjVal < 40 -> {0, AddedObjVal}; AddedObjVal < 80 -> {1, AddedObjVal - 40}; true -> {2, AddedObjVal - 80} end, list_to_tuple([Val1, Val2 | ObjVals]). decode_octet_string(Tlv, TagsIn) -> Bin = match_and_collect(Tlv, TagsIn), binary:copy(Bin). decode_open_type(Tlv, TagIn) -> case match_tags(Tlv, TagIn) of Bin when is_binary(Bin) -> {InnerTlv, _} = ber_decode_nif(Bin), InnerTlv; TlvBytes -> TlvBytes end. decode_open_type_as_binary(Tlv, TagIn) -> ber_encode(match_tags(Tlv, TagIn)). decode_restricted_string(Tlv, TagsIn) -> match_and_collect(Tlv, TagsIn). do_encode_named_bit_string([FirstVal | RestVal], NamedBitList, TagIn) -> ToSetPos = get_all_bitposes([FirstVal | RestVal], NamedBitList, []), Size = lists:max(ToSetPos) + 1, BitList = make_and_set_list(Size, ToSetPos, 0), {Len, Unused, OctetList} = encode_bitstring(BitList), encode_tags(TagIn, [Unused | OctetList], Len + 1). e_object_identifier({'OBJECT IDENTIFIER', V}) -> e_object_identifier(V); e_object_identifier(V) when is_tuple(V) -> e_object_identifier(tuple_to_list(V)); e_object_identifier([E1, E2 | Tail]) -> Head = 40 * E1 + E2, {H, Lh} = mk_object_val(Head), {R, Lr} = lists:mapfoldl(fun enc_obj_id_tail/2, 0, Tail), {[H | R], Lh + Lr}. enc_obj_id_tail(H, Len) -> {B, L} = mk_object_val(H), {B, Len + L}. encode_bitstring([B8, B7, B6, B5, B4, B3, B2, B1 | Rest]) -> Val = B8 bsl 7 bor (B7 bsl 6) bor (B6 bsl 5) bor (B5 bsl 4) bor (B4 bsl 3) bor (B3 bsl 2) bor (B2 bsl 1) bor B1, encode_bitstring(Rest, [Val], 1); encode_bitstring(Val) -> {Unused, Octet} = unused_bitlist(Val, 7, 0), {1, Unused, [Octet]}. encode_bitstring([B8, B7, B6, B5, B4, B3, B2, B1 | Rest], Ack, Len) -> Val = B8 bsl 7 bor (B7 bsl 6) bor (B6 bsl 5) bor (B5 bsl 4) bor (B4 bsl 3) bor (B3 bsl 2) bor (B2 bsl 1) bor B1, encode_bitstring(Rest, [Ack, Val], Len + 1); encode_bitstring([], Ack, Len) -> {Len, 0, Ack}; encode_bitstring(Rest, Ack, Len) -> {Unused, Val} = unused_bitlist(Rest, 7, 0), {Len + 1, Unused, [Ack, Val]}. encode_boolean(true, TagIn) -> encode_tags(TagIn, [255], 1); encode_boolean(false, TagIn) -> encode_tags(TagIn, [0], 1); encode_boolean(X, _) -> exit({error, {asn1, {encode_boolean, X}}}). encode_integer(Val) -> Bytes = if Val >= 0 -> encode_integer_pos(Val, []); true -> encode_integer_neg(Val, []) end, {Bytes, length(Bytes)}. encode_integer(Val, NamedNumberList, Tag) when is_atom(Val) -> case lists:keyfind(Val, 1, NamedNumberList) of {_, NewVal} -> encode_tags(Tag, encode_integer(NewVal)); _ -> exit({error, {asn1, {encode_integer_namednumber, Val}}}) end; encode_integer(Val, _NamedNumberList, Tag) -> encode_tags(Tag, encode_integer(Val)). encode_integer(Val, Tag) when is_integer(Val) -> encode_tags(Tag, encode_integer(Val)); encode_integer(Val, _Tag) -> exit({error, {asn1, {encode_integer, Val}}}). encode_integer_neg(-1, [B1 | _T] = L) when B1 > 127 -> L; encode_integer_neg(N, Acc) -> encode_integer_neg(N bsr 8, [N band 255 | Acc]). encode_integer_pos(0, [B | _Acc] = L) when B < 128 -> L; encode_integer_pos(N, Acc) -> encode_integer_pos(N bsr 8, [N band 255 | Acc]). encode_length(L) when L =< 127 -> {[L], 1}; encode_length(L) -> Oct = minimum_octets(L), Len = length(Oct), if Len =< 126 -> {[128 bor Len | Oct], Len + 1}; true -> exit({error, {asn1, too_long_length_oct, Len}}) end. encode_named_bit_string([H | _] = Bits, NamedBitList, TagIn) when is_atom(H) -> do_encode_named_bit_string(Bits, NamedBitList, TagIn); encode_named_bit_string([{bit, _} | _] = Bits, NamedBitList, TagIn) -> do_encode_named_bit_string(Bits, NamedBitList, TagIn); encode_named_bit_string([], _NamedBitList, TagIn) -> encode_unnamed_bit_string(<<>>, TagIn); encode_named_bit_string(Bits, _NamedBitList, TagIn) when is_bitstring(Bits) -> encode_unnamed_bit_string(Bits, TagIn). encode_null(_Val, TagIn) -> encode_tags(TagIn, [], 0). encode_object_identifier(Val, TagIn) -> encode_tags(TagIn, e_object_identifier(Val)). encode_open_type(Val, T) when is_list(Val) -> encode_open_type(list_to_binary(Val), T); encode_open_type(Val, Tag) -> encode_tags(Tag, Val, byte_size(Val)). encode_restricted_string(OctetList, TagIn) when is_binary(OctetList) -> encode_tags(TagIn, OctetList, byte_size(OctetList)); encode_restricted_string(OctetList, TagIn) when is_list(OctetList) -> encode_tags(TagIn, OctetList, length(OctetList)). encode_tags(TagIn, {BytesSoFar, LenSoFar}) -> encode_tags(TagIn, BytesSoFar, LenSoFar). encode_tags([Tag | Trest], BytesSoFar, LenSoFar) -> {Bytes2, L2} = encode_length(LenSoFar), encode_tags(Trest, [Tag, Bytes2 | BytesSoFar], LenSoFar + byte_size(Tag) + L2); encode_tags([], BytesSoFar, LenSoFar) -> {BytesSoFar, LenSoFar}. encode_unnamed_bit_string(Bits, TagIn) -> Unused = (8 - bit_size(Bits) band 7) band 7, Bin = <>, encode_tags(TagIn, Bin, byte_size(Bin)). get_all_bitposes([{bit, ValPos} | Rest], NamedBitList, Ack) -> get_all_bitposes(Rest, NamedBitList, [ValPos | Ack]); get_all_bitposes([Val | Rest], NamedBitList, Ack) when is_atom(Val) -> case lists:keyfind(Val, 1, NamedBitList) of {_ValName, ValPos} -> get_all_bitposes(Rest, NamedBitList, [ValPos | Ack]); _ -> exit({error, {asn1, {bitstring_namedbit, Val}}}) end; get_all_bitposes([], _NamedBitList, Ack) -> lists:sort(Ack). make_and_set_list(0, [], _) -> []; make_and_set_list(0, _, _) -> exit({error, {asn1, bitstring_sizeconstraint}}); make_and_set_list(Len, [XPos | SetPos], XPos) -> [1 | make_and_set_list(Len - 1, SetPos, XPos + 1)]; make_and_set_list(Len, [Pos | SetPos], XPos) -> [0 | make_and_set_list(Len - 1, [Pos | SetPos], XPos + 1)]; make_and_set_list(Len, [], XPos) -> [0 | make_and_set_list(Len - 1, [], XPos + 1)]. match_and_collect(Tlv, TagsIn) -> Val = match_tags(Tlv, TagsIn), case Val of [_ | _] = PartList -> collect_parts(PartList); Bin when is_binary(Bin) -> Bin end. match_tags({T, V}, [T]) -> V; match_tags({T, V}, [T | Tt]) -> match_tags(V, Tt); match_tags([{T, V}], [T | Tt]) -> match_tags(V, Tt); match_tags([{T, _V} | _] = Vlist, [T]) -> Vlist; match_tags(Tlv, []) -> Tlv; match_tags({Tag, _V} = Tlv, [T | _Tt]) -> exit({error, {asn1, {wrong_tag, {{expected, T}, {got, Tag, Tlv}}}}}). minimum_octets(0, Acc) -> Acc; minimum_octets(Val, Acc) -> minimum_octets(Val bsr 8, [Val band 255 | Acc]). minimum_octets(Val) -> minimum_octets(Val, []). mk_object_val(0, Ack, Len) -> {Ack, Len}; mk_object_val(Val, Ack, Len) -> mk_object_val(Val bsr 7, [Val band 127 bor 128 | Ack], Len + 1). mk_object_val(Val) when Val =< 127 -> {[255 band Val], 1}; mk_object_val(Val) -> mk_object_val(Val bsr 7, [Val band 127], 1). number2name(Int, NamedNumberList) -> case lists:keyfind(Int, 2, NamedNumberList) of {NamedVal, _} -> NamedVal; _ -> Int end. transform_to_EXTERNAL1990(['EXTERNAL' | Rest], Acc) -> transform_to_EXTERNAL1990(Rest, ['EXTERNAL' | Acc]); transform_to_EXTERNAL1990([{syntax, Syntax} | Rest], Acc) -> transform_to_EXTERNAL1990(Rest, [asn1_NOVALUE, Syntax | Acc]); transform_to_EXTERNAL1990([{'presentation-context-id', PCid} | Rest], Acc) -> transform_to_EXTERNAL1990(Rest, [PCid, asn1_NOVALUE | Acc]); transform_to_EXTERNAL1990([{'context-negotiation', Context_negot} | Rest], Acc) -> {_, Presentation_Cid, Transfer_syntax} = Context_negot, transform_to_EXTERNAL1990(Rest, [Presentation_Cid, Transfer_syntax | Acc]); transform_to_EXTERNAL1990([asn1_NOVALUE | Rest], Acc) -> transform_to_EXTERNAL1990(Rest, [asn1_NOVALUE | Acc]); transform_to_EXTERNAL1990([Data_val_desc, Data_value], Acc) when is_list(Data_value); is_binary(Data_value) -> list_to_tuple(lists:reverse([{'octet-aligned', Data_value}, Data_val_desc | Acc])); transform_to_EXTERNAL1990([Data_val_desc, Data_value], Acc) when is_binary(Data_value) -> list_to_tuple(lists:reverse([{'single-ASN1-type', Data_value}, Data_val_desc | Acc])); transform_to_EXTERNAL1990([Data_value], Acc) when is_list(Data_value); is_binary(Data_value) -> list_to_tuple(lists:reverse([{'octet-aligned', Data_value} | Acc])). transform_to_EXTERNAL1990({_, _, _, _} = Val) -> transform_to_EXTERNAL1990(tuple_to_list(Val), []); transform_to_EXTERNAL1990(Val) when is_tuple(Val) -> Val. transform_to_EXTERNAL1994({'EXTERNAL', DRef, IndRef, Data_v_desc, Encoding} = V) -> Identification = case {DRef, IndRef} of {DRef, asn1_NOVALUE} -> {syntax, DRef}; {asn1_NOVALUE, IndRef} -> {'presentation-context-id', IndRef}; _ -> {'context-negotiation', {'EXTERNAL_identification_context-negotiation', IndRef, DRef}} end, case Encoding of {'octet-aligned', Val} when is_list(Val); is_binary(Val) -> {'EXTERNAL', Identification, Data_v_desc, Val}; _ -> V end. unused_bitlist([], Trail, Ack) -> {Trail + 1, Ack}; unused_bitlist([Bit | Rest], Trail, Ack) -> unused_bitlist(Rest, Trail - 1, Bit bsl Trail bor Ack).