Erlang 21

asn1ct




erlang

asn1ct

मॉड्यूल

asn1ct

मॉड्यूल सारांश

ASN.1 संकलक और संकलन-समय समर्थन कार्य

विवरण

ASN.1 कंपाइलर ASN.1 मॉड्यूल को इनपुट के रूप में लेता है और एक संबंधित Erlang मॉड्यूल उत्पन्न करता है, जो निर्दिष्ट डेटा प्रकारों को एनकोड और डीकोड कर सकता है। वैकल्पिक रूप से, कंपाइलर सभी इनपुट मॉड्यूल को निर्दिष्ट करने वाला एक विनिर्देशन मॉड्यूल लेता है, और एनकोड / डीकोड फ़ंक्शन के साथ एक मॉड्यूल उत्पन्न करता है। इसके अलावा, कुछ सामान्य कार्यों का उपयोग अनुप्रयोगों के विकास के दौरान किया जा सकता है जो ASN.1 डेटा ( BER या PER रूप में एन्कोडेड) को संभालता है।

ध्यान दें

OTP 17 में डिफ़ॉल्ट रूप से, BIT STRING और OCTET STRING प्रकारों का प्रतिनिधित्व जैसे Erlang की शर्तों को बदल दिया गया था। BIT STRING मान अब Erlang बिट स्ट्रिंग्स हैं और OCTET STRING मान बायनेरी हैं। इसके अलावा, एक पूर्ववत खुला प्रकार अब asn1_OPENTYPE टपल में लिपटा हुआ है। विवरण के लिए, उपयोगकर्ता गाइड में BIT STRING , OCTET STRING और ASN.1 Information Objects

प्रकारों के पुराने प्रतिनिधित्व पर वापस लौटने के लिए, legacy_erlang_types विकल्प का उपयोग करें।

ध्यान दें

ओटीपी आर 16 में, विकल्प सरल किए गए थे। पीछे के छोर को विकल्प ber , per , या uper एक का उपयोग करके चुना जाता है। विकल्प optimize , nif और driver विकल्प अब आवश्यक नहीं हैं (और ASN.1 कंपाइलर एक चेतावनी उत्पन्न करता है यदि उनका उपयोग किया जाता है)। विकल्प ber_bin , per_bin और uper_bin विकल्प अभी भी काम करते हैं, लेकिन एक चेतावनी उत्पन्न करते हैं।

ओटीपी आर 16 में एक और बदलाव यह है कि उत्पन्न फ़ंक्शन encode/2 हमेशा एक बाइनरी देता है। आयोडीन वापस करने के लिए उपयोग किए गए BER बैक एंड के लिए फ़ंक्शन encode/2

निर्यात

संकलन (Asn1module) -> ठीक है | {त्रुटि, कारण}
संकलन (Asn1module, विकल्प) -> ठीक | {त्रुटि, कारण}

प्रकार

ASN.1 मॉड्यूल Asn1module और Asn1module.erl में परिभाषित प्रकारों के लिए एन्कोड और डीकोड फ़ंक्शन के साथ एक Erlang मॉड्यूल Asn1module.erl उत्पन्न करता है। मॉड्यूल में परिभाषित प्रत्येक ASN.1 मान के लिए, एक Erlang फ़ंक्शन जो Erlang प्रतिनिधित्व में मान लौटाता है, उत्पन्न होता है।

यदि Asn1module बिना विस्तार के एक फ़ाइल नाम है, तो पहले ".asn1" मान लिया जाता है, फिर ".asn" , और अंत में ".py" (पुराने ASN.1 कंपाइलर के साथ संगत होने के लिए)। Asn1module एक पूर्ण पथनाम (रिश्तेदार या निरपेक्ष) हो सकता है जिसमें फ़ाइल नाम के साथ (या बिना) एक्सटेंशन भी शामिल है।

यदि एन्कोड / डिकोड फ़ंक्शन के साथ एक एरलंग फ़ाइल में ASN.1 मॉड्यूल के सेट को संकलित करने की आवश्यकता है, तो कॉन्फ़िगरेशन फ़ाइल में सभी शामिल फ़ाइलों को सूचीबद्ध करना सुनिश्चित करें। इस कॉन्फ़िगरेशन फ़ाइल में डबल एक्सटेंशन ".set.asn" ( ".asn" वैकल्पिक रूप से ".asn1" या ".py" ) हो सकता है। उद्धरण चिह्नों ("") के भीतर इनपुट फ़ाइल नामों को सूचीबद्ध करें, फ़ाइल में प्रत्येक पंक्ति में एक। यदि इनपुट फाइल File1.asn , File2.asn , और File3.asn , तो कॉन्फ़िगरेशन फ़ाइल इस प्रकार File3.asn चाहिए:

File1.asn
File2.asn
File3.asn

इस मामले में आउटपुट फ़ाइलों को कॉन्फ़िगरेशन फ़ाइल से उनके नाम मिलते हैं। यदि कॉन्फ़िगरेशन फ़ाइल का नाम SetOfFiles.set.asn , तो आउटपुट फ़ाइलों के नाम SetOfFiles.hrl, SetOfFiles.erl, and SetOfFiles.asn1db

कभी-कभी ASN.1 मॉड्यूल की एक प्रणाली में, अलग-अलग डिफ़ॉल्ट टैग मोड, उदाहरण के लिए, AUTOMATIC IMPLICIT या IMPLICIT । बहु-फ़ाइल संकलन डिफ़ॉल्ट टैगिंग को हल करता है जैसे कि मॉड्यूल अलग से संकलित किए गए थे।

नाम टकराव एक और अवांछित प्रभाव है जो मल्टी फ़ाइल-संकलन में हो सकता है। संकलक इस समस्या को दो तरह से हल करता है:

  • यदि परिभाषाएं समान हैं, तो आउटपुट मॉड्यूल मूल नाम के साथ केवल एक परिभाषा रखता है।
  • यदि परिभाषाओं का एक ही नाम है और परिभाषा में भिन्न है, तो उनका नाम बदल दिया गया है। नए नाम परिभाषा नाम और मूल मॉड्यूल नाम संक्षिप्त हैं।

यदि कोई नाम टकराव होता है, तो संकलक एक "NOTICE: ..." संदेश की रिपोर्ट करता है जो बताता है कि क्या परिभाषा का नाम बदल दिया गया था, और नया नाम जिसे डेटा को एनकोड / डिकोड करने के लिए उपयोग किया जाना चाहिए।

Options ASN.1 संकलक के लिए विशिष्ट विकल्पों के साथ एक सूची है और विकल्प जो Erlang संकलक पर लागू होते हैं। बाद वाले को ASN.1 विशिष्ट के रूप में मान्यता प्राप्त नहीं है। उपलब्ध विकल्प निम्नानुसार हैं:

ber | per | uper

एन्कोडिंग नियम का उपयोग किया जाना है। समर्थित एन्कोडिंग नियम बेसिक एन्कोडिंग नियम (बीईआर), पैक्ड एनकोडिंग नियम (प्रति) संरेखित, और प्रति अलिखित हैं। यदि एन्कोडिंग नियम विकल्प छोड़ा गया है, तो ber डिफ़ॉल्ट है।

उत्पन्न Erlang मॉड्यूल को हमेशा ASN.1 मॉड्यूल के समान नाम मिलता है। इसलिए, ASN.1 मॉड्यूल के प्रति केवल एक एन्कोडिंग नियम का उपयोग रनटाइम पर किया जा सकता है।

der

इस विकल्प के साथ विशिष्ट एन्कोडिंग नियम (डीईआर) चुना जाता है। डीईआर को बीईआर एन्कोडिंग नियम का एक विशेष संस्करण माना जाता है। इसलिए, यह विकल्प केवल विकल्प ber साथ मिलकर समझ में आता है। यह विकल्प कभी-कभी एन्कोडिंग करते समय सॉर्टिंग और वैल्यू चेक जोड़ता है, जिसका अर्थ है कि धीमी एनकोडिंग। डिकोडिंग ber लिए समान हैं।

maps

यह विकल्प मैप्स (रिकॉर्ड्स के बजाय) का उपयोग करने के लिए SEQUENCE और SET के प्रकारों के प्रतिनिधित्व को बदलता है। यह विकल्प .hrl फाइलों की पीढ़ी को भी दबा .hrl है।

विवरण के लिए, उपयोगकर्ता के गाइड में अनुभाग Map representation for SEQUENCE and SET अनुभाग Map representation for SEQUENCE and SET देखें।

compact_bit_string

BIT STRING प्रकार को "कॉम्पैक्ट नोटेशन" के लिए डिकोड किया गया है। नए कोड के लिए यह विकल्प अनुशंसित नहीं है। इस विकल्प को विकल्प के maps के साथ नहीं जोड़ा जा सकता है।

विवरण के लिए, उपयोगकर्ता के गाइड में अनुभाग BIT STRING देखें।

इस विकल्प का तात्पर्य है विकल्प legacy_erlang_types

legacy_bit_string

BIT STRING प्रकार को लीगेसी प्रारूप में, यानी शून्य और लोगों की सूची को डिकोड किया जाता है। नए कोड के लिए यह विकल्प अनुशंसित नहीं है। इस विकल्प को विकल्प के maps के साथ नहीं जोड़ा जा सकता है।

विवरण के लिए, उपयोगकर्ता के गाइड में अनुभाग BIT STRING देखें

इस विकल्प का तात्पर्य है विकल्प legacy_erlang_types

legacy_erlang_types

OTP R16 की तरह BIT STRING और OCTET STRING का प्रतिनिधित्व करने के लिए समान Erlang प्रकार का उपयोग करें।

विवरण के लिए, उपयोगकर्ता गाइड में अनुभाग BIT STRING और अनुभाग OCTET STRING

नए कोड के लिए यह विकल्प अनुशंसित नहीं है। इस विकल्प को विकल्प के maps के साथ नहीं जोड़ा जा सकता है।

{n2n, EnumTypeName}

संकलक को नाम (परमाणुओं के रूप में) और संख्याओं के बीच रूपांतरण और निर्दिष्ट EnumTypeName लिए फ़ंक्शन उत्पन्न करने के लिए कहता है। कई प्रकार के नामों को निर्दिष्ट करने के लिए इस विकल्प की कई घटनाएं हो सकती हैं। ASN.1 विनिर्देश में प्रकार नाम ENUMERATIONS रूप में घोषित किए जाने चाहिए।

यदि EnumTypeName ASN.1 विनिर्देश में मौजूद नहीं है, तो संकलन त्रुटि कोड के साथ बंद हो जाता है।

जनरेट किए गए रूपांतरण फ़ंक्शंस का नाम नाम name2num_EnumTypeName/1 और num2name_EnumTypeName/1

noobj

उत्पन्न .erl फ़ाइल को संकलित न करें (अर्थात, ऑब्जेक्ट कोड का उत्पादन न करें)। यदि यह विकल्प छोड़ दिया जाता है, तो उत्पन्न Erlang मॉड्यूल संकलित किया जाता है।

{i, IncludeDir}

.asn1db और ASN.1 स्रोत फ़ाइलों के लिए खोज-पथ में शामिल करें। कंपाइलर एक .asn1db फ़ाइल को खोलने का प्रयास करता है जब एक मॉड्यूल दूसरे ASN.1 मॉड्यूल से परिभाषाएँ आयात करता है। यदि कोई .asn1db फ़ाइल नहीं मिली है, तो ASN.1 स्रोत फ़ाइल पार्स हो जाती है। कई {i, IncludeDir} दिए जा सकते हैं।

{outdir, Dir}

निर्देशिका Dir निर्दिष्ट करता है जहां सभी उत्पन्न फाइलें रखी जानी हैं। यदि यह विकल्प छोड़ा जाता है, तो फ़ाइलों को वर्तमान निर्देशिका में रखा जाता है।

asn1config

किसी विशेष डिकोड, अनन्य या चयनात्मक डिकोड में से किसी एक का उपयोग करते समय, निर्देश एक विन्यास फाइल में दिया जाना चाहिए। विकल्प asn1config विशेष डिकोड को सक्षम करता है और चिंता में कॉन्फ़िगरेशन फ़ाइल लेता है। कॉन्फ़िगरेशन फ़ाइल का ASN.1 विनिर्देशन के समान नाम है, लेकिन एक्सटेंशन .asn1config साथ।

अनन्य डिकोड के निर्देशों के लिए, उपयोगकर्ता के गाइड में अनुभाग Exclusive Decode देखें।

चयनात्मक डिकोड के निर्देशों के लिए, उपयोगकर्ता के गाइड में अनुभाग Selective Decode देखें।

undec_rest

एक बफ़र जो एक संदेश रखता है, उसे डिकोड किया जा रहा है, इसके कुछ निम्नलिखित बाइट्स भी हो सकते हैं। निम्नलिखित बाइट्स अब डीकोड किए गए मान के साथ वापस आ सकते हैं। यदि कोई ASN.1 विनिर्देश इस विकल्प के साथ संकलित किया जाता है, तो एक tuple {ok, Value, Rest} वापस आ जाता है। Rest एक सूची या एक द्विआधारी हो सकता है। संकलक के पहले संस्करणों ने निम्नलिखित बाइट्स को अनदेखा किया।

no_ok_wrapper

इस विकल्प के साथ, जेनरेट किया गया encode/2 और decode/2 फ़ंक्शन एक {ok,...} यूपल में एक सफल रिटर्न वैल्यू को लपेटता नहीं है। यदि कोई त्रुटि होती है, तो एक अपवाद उठाया जाएगा।

{macro_name_prefix, Prefix}

संकलक द्वारा उत्पन्न सभी मैक्रो नाम उपसर्ग के साथ Prefix । यह उपयोगी है जब कई प्रोटोकॉल जिसमें समान नाम वाले मैक्रोज़ होते हैं, उन्हें एकल मॉड्यूल में शामिल किया जाता है।

{record_name_prefix, Prefix}

संकलक द्वारा उत्पन्न सभी रिकॉर्ड नाम उपसर्ग के साथ Prefix । यह उपयोगी होता है जब समान प्रोटोकॉल वाले कई प्रोटोकॉल एकल मॉड्यूल में शामिल होते हैं।

verbose

संकलक से अधिक क्रियात्मक जानकारी का वर्णन करता है कि यह क्या कर रहा है।

warnings_as_errors

चेतावनियों को त्रुटियों के रूप में माना जाता है।

किसी भी अधिक विकल्प को लागू किया जाता है जो उत्पन्न होने पर अंतिम चरण में पारित हो जाता है।

संकलक निम्नलिखित फाइलें उत्पन्न करता है:

  • Asn1module.hrl (यदि कोई SET या SEQUENCE परिभाषित किया गया है)
  • Asn1module.erl - एन्कोड, डीकोड और मूल्य कार्यों के साथ Asn1module.erl मॉड्यूल
  • Asn1module.asn1db - कंपाइलर द्वारा उपयोग किए जाने वाले मध्यवर्ती प्रारूप जब मॉड्यूल एक-दूसरे से परिभाषाएँ IMPORT करते हैं।
मान (मॉड्यूल, प्रकार) -> {ठीक है, मान} | {त्रुटि, कारण}

प्रकार

एक Erlang शब्द लौटाता है जो ASN.1 प्रकार के Type मान के एक मान्य Erlang प्रतिनिधित्व का एक उदाहरण है। मान एक यादृच्छिक मूल्य है और इस फ़ंक्शन के बाद की कॉलें विभिन्न प्रकारों के लिए विभिन्न मान लौटाएंगी।

ध्यान दें

वर्तमान में, value फ़ंक्शन की कई सीमाएँ हैं। मूलतः, यह ज्यादातर ASN.1 के लिए 1997 के मानक के आधार पर पुराने विनिर्देशों के लिए काम करेगा, लेकिन अधिकांश आधुनिक-शैली के अनुप्रयोगों के लिए नहीं। एक और सीमा यह है कि value फ़ंक्शन काम नहीं कर सकता है यदि विकल्प जो कोड पीढ़ियों की रणनीतियों को बदलते हैं जैसे कि विकल्प record_name_prefix और record_name_prefix का उपयोग किया गया है।

परीक्षण (मॉड्यूल) -> ठीक है | {त्रुटि, कारण}
परीक्षण (मॉड्यूल, प्रकार | विकल्प) -> ठीक | {त्रुटि, कारण}
परीक्षण (मॉड्यूल, प्रकार, मूल्य | विकल्प) -> ठीक | {त्रुटि, कारण}

प्रकार

Module में एनकोड और प्रकार के डिकोड का परीक्षण करता है। इस फ़ंक्शन द्वारा उत्पन्न कार्यों को कहा जाता है। यह फ़ंक्शन परीक्षण के दौरान उपयोगी है ताकि यह सुनिश्चित किया जा सके कि उत्पन्न एन्कोड और डीकोड फ़ंक्शन के साथ-साथ सामान्य रनटाइम समर्थन कार्य भी अपेक्षित हो।

ध्यान दें

वर्तमान में, test कार्यों की कई सीमाएँ हैं। मूलतः, वे ज्यादातर ASN.1 के लिए 1997 के मानक के आधार पर पुराने विनिर्देशों के लिए काम करेंगे, लेकिन अधिकांश आधुनिक शैली के अनुप्रयोगों के लिए नहीं। एक अन्य सीमा यह है कि test कार्य तब काम नहीं कर सकते हैं जब विकल्प जो कोड पीढ़ियों की रणनीतियों को बदलते हैं जैसे कि विकल्प record_name_prefix और record_name_prefix का उपयोग किया गया है।

  • Module में सभी प्रकारों पर test/1 पुनरावृत्तियों।

  • test/2 परीक्षण प्रकार एक यादृच्छिक मूल्य के साथ Type करें।

  • test/3 परीक्षण प्रकार Value साथ Type करें।

योजनाबद्ध रूप से, मॉड्यूल में प्रत्येक प्रकार के लिए निम्न होता है:

{ok, Value} = asn1ct:value(Module, Type),
{ok, Bytes} = Module:encode(Type, Value),
{ok, Value} = Module:decode(Type, Bytes).

test फ़ंक्शन सभी शामिल मॉड्यूल के लिए *.asn1db फ़ाइलों का उपयोग करते हैं। यदि वे वर्तमान कार्यशील निर्देशिका की तुलना में किसी भिन्न निर्देशिका में स्थित हैं, तो पथ जोड़ने के विकल्प का उपयोग करें। यह केवल तब आवश्यक है जब स्वचालित रूप से मान उत्पन्न कर रहा हो। Value का उपयोग करने वाले स्थिर मूल्यों के लिए कोई विकल्प की आवश्यकता नहीं है।