Erlang 21

diameter_codec




erlang

diameter_codec

मॉड्यूल

diameter_codec

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

डायमीटर संदेशों के डिकोड और एनकोड।

विवरण

आने वाले व्यास संदेश द्विआधारी () से diameter_app(3) कॉलबैक में संचारित होने से पहले डिकोड किए जाते हैं। इसी तरह, आउटगोइंग diameter_transport(3) संदेशों को ट्रांसमिशन के लिए उपयुक्त diameter_transport(3) मॉड्यूल से पारित होने से पहले बाइनरी () में एन्कोड किया गया है। यहां प्रलेखित फ़ंक्शन डिफ़ॉल्ट एनकोड / डिकोड को लागू करते हैं।

चेतावनी

व्यास उपयोगकर्ता को diameter:call/4 का उपयोग करके संदेश भेजने और प्राप्त करने के लिए यहां स्पष्ट रूप से कॉल करने की आवश्यकता नहीं है diameter:call/4 diameter_app(3) में प्रलेखित कॉलबैक इंटरफ़ेस और कॉलबैक इंटरफ़ेस diameter_app(3) : व्यास स्वयं व्यास / डिकोड को प्रदान करता है, जो व्यास को दिए गए कॉन्फ़िगरेशन के परिणामस्वरूप diameter:start_service/2 , और परिणाम विन्यास पर निर्भर करते हुए, यहां प्रलेखित कार्यों द्वारा लौटे लोगों से भिन्न हो सकते हैं।

नीचे header() और packet() रिकॉर्ड व्यास में परिभाषित किए गए हैं। इसे निम्नानुसार शामिल किया जा सकता है।

-include_lib("diameter/include/diameter.hrl").

एप्लिकेशन-विशिष्ट रिकॉर्ड्स को डिक्लाइन फ़ाइल संकलन से उत्पन्न hrl फाइलों में परिभाषित किया गया है।

जानकारी का प्रकार

uint8() = 0..255
uint24() = 0..16777215
uint32() = 0..4294967295

व्यास और एवीपी हेडर में 8-बिट, 24-बिट और 32-बिट पूर्णांक।

avp() = #diameter_avp{}

एक एवीपी के आवेदन-तटस्थ प्रतिनिधित्व। मुख्य रूप से रिले अनुप्रयोगों द्वारा उपयोग के लिए अभिप्रेत है जो मनमाने व्यास अनुप्रयोगों को संभालने की आवश्यकता है। एक विशिष्ट डायमीटर एप्लिकेशन को लागू करने वाली सेवा (जिसके लिए यह एक शब्दकोश को कॉन्फ़िगर करता है message() इसके बजाय टाइप message() मूल्यों में हेरफेर कर सकता है।

फ़ील्ड्स के निम्न प्रकार हैं।

code = uint32()
is_mandatory = boolean()
need_encryption = boolean()
vendor_id = uint32() | undefined

AVP कोड में मान, क्रमशः AVP कोड, M ध्वज, P ध्वज और विक्रेता-ID के अनुरूप होता है। undefined अलावा एक वेंडर-आईडी एक सेट वी ध्वज का अर्थ है।

data = iolist()

डेटा AVP के बाइट्स।

name = atom()

AVP का नाम प्रश्न में डिक्शनरी फ़ाइल में परिभाषित किया गया है, या यदि एवीपी प्रश्न में डिक्शनरी फ़ाइल से अनजान है तो undefined है।

value = term()

एक AVP का डिकोड किया गया मान। यदि डेटा बाइट्स डीकोड नहीं किया जा सकता है, तो एवीडी को undefined किया जाएगा, एवीपी अज्ञात है, या यदि decode format none । डीकोड किए गए मान का प्रकार व्यास_डक्ट diameter_dict(4) में दस्तावेज़ के रूप में है।

type = atom()

एवीपी के प्रकार के रूप में प्रश्न में शब्दकोश फ़ाइल में निर्दिष्ट (या यह एक विरासत)। संभव प्रकार undefined और व्यास प्रकार हैं: OctetString , Integer32 OctetString , Integer32 OctetString , Integer32 OctetString , Integer32 OctetString , Integer32 OctetString , Integer32 , Integer64 , Address , Time , UTF8String , UTF8String , UTF8String , QoSFilterRule और QoSFilterRule

dictionary() = module()

diameterc(1) या diameter_make:codec/2 द्वारा उत्पन्न उत्पन्न शब्दकोश मॉड्यूल का नाम diameter_make:codec/2 । शब्दकोश मॉड्यूल द्वारा प्रदान किया गया इंटरफ़ेस एक कार्यान्वयन विवरण है जो बदल सकता है।

header() = #diameter_header{}

व्यास शीर्ष लेख का रिकॉर्ड प्रतिनिधित्व। एक packet() में मान packet() decode/2 द्वारा लौटाया जाता है जो आने वाले संदेश से निकाला जाता है। एक packet() में सेट मान packet() encode/2 लिए पारित एन्कोडेड बाइनरी () में संरक्षित हैं, length के अपवाद के साथ, cmd_code और application_id , जो सभी dictionary() द्वारा प्रश्न में निर्धारित किए गए हैं।

ध्यान दें

हेडर फ़ील्ड को आउटगोइंग संदेशों में स्पष्ट रूप से सेट करना आवश्यक नहीं है क्योंकि व्यास स्वयं उचित मान सेट करेगा। अनुचित मान सेट करना परीक्षण उद्देश्यों के लिए उपयोगी हो सकता है।

फ़ील्ड्स के निम्न प्रकार हैं।

version = uint8()
length = uint24()
cmd_code = uint24()
application_id = uint32()
hop_by_hop_id = uint32()
end_to_end_id = uint32()

संस्करण, संदेश लंबाई, कमांड-कोड, एप्लिकेशन-आईडी, हॉप-बाय-हॉप आइडेंटिफ़ायर और डायमीटर हेडर के एंड-टू-एंड आइडेंटिफ़ायर फ़ील्ड के मान।

is_request = boolean()
is_proxiable = boolean()
is_error = boolean()
is_retransmitted = boolean()

व्यास शीर्ष के आर (समान), पी (रोक्सेबल), ई (रेयर) और टी (संभावित रूप से फिर से प्रेषित संदेश) झंडे के अनुरूप मूल्य।

message() = record() | maybe_improper_list()

व्यास के रूप में व्यास संदेश का प्रतिनिधित्व diameter:call/4 या एक handle_request/3 कॉलबैक से लौटा। रिकॉर्ड प्रतिनिधित्व diameter_dict(4) रूप में उल्लिखित है: एक संदेश जो डिक्शनरी फ़ाइल में परिभाषित किया गया है, प्रत्येक घटक AVP के लिए एक फ़ील्ड के साथ रिकॉर्ड के रूप में एन्कोड किया गया है। समान रूप से, एक संदेश को एक सूची के रूप में भी एन्कोड किया जा सकता है जिसका सिर परमाणु-मूल्यवान संदेश नाम है (जैसा कि प्रासंगिक शब्दकोश फ़ाइल में निर्दिष्ट है) और जिसकी पूंछ या तो एवीपी नाम / मूल्यों के जोड़े की सूची है या एवीपी पर अंकित मूल्यों के साथ एक नक्शा है। नाम। डिकोड पर प्रारूप diameter:service_opt() द्वारा निर्धारित किया जाता diameter:service_opt() decode_format । किसी भी प्रारूप को एन्कोड किया जाता है।

एक अन्य सूची-मूल्यवान प्रतिनिधित्व एक संदेश को एक सूची के रूप में निर्दिष्ट करने की अनुमति देता है जिसका सिर एक header() और जिसकी पूंछ एक avp() सूची है। इस प्रतिनिधित्व का उपयोग व्यास द्वारा ही किया जाता है, जब अनुरोधों को किसी handle_request/3 कॉलबैक के रिटर्न वैल्यू द्वारा निर्देशित किया जाता है। यह अन्य दो से भिन्न है कि यह उन संदेशों के चेक को दरकिनार कर देता है जो प्रश्न में शब्दकोश में उनकी परिभाषा से सहमत नहीं हैं: संदेश बिल्कुल निर्दिष्ट के रूप में भेजे जाते हैं।

packet() = #diameter_packet{}

इनकमिंग और आउटगोइंग डायमीटर संदेशों के लिए एक कंटेनर। फ़ील्ड्स के निम्न प्रकार हैं।

header = header() | undefined

संदेश का व्यास शीर्षक। एक गैर-रिले एप्लिकेशन में एक आउटगोइंग संदेश के लिए undefined (और आमतौर पर होना चाहिए), जिस स्थिति में व्यास उचित मान प्रदान करता है।

avps = [ avp() ] | undefined

संदेश के ए.वी.पी. यदि msg फ़ील्ड undefined अलावा किसी अन्य मान पर सेट है, तो एक आउटगोइंग संदेश के लिए अनदेखा।

msg = message() | undefined

इनकमिंग / आउटगोइंग मैसेज। इनकमिंग मैसेज के लिए, कॉन्फ़िगर किए गए decode format अनुरूप एक शब्द अगर संदेश को किसी गैर-रिले एप्लिकेशन में अनडिपेंडेड किया जा सकता है, तो undefined अन्यथा। एक आउटगोइंग संदेश के लिए, [ header() | avp() ] [ header() | avp() ] सूची header को सेट करने के लिए बराबर है और संबंधित मानों के लिए avps फ़ील्ड्स।

चेतावनी

msg फ़ील्ड में कोई मान डीकोड त्रुटियों का अभाव नहीं है। errors क्षेत्र की भी जांच की जानी चाहिए।

bin = binary()

सांकेतिक शब्दों में बदलना से पहले संदेश या सांकेतिक शब्दों में बदलना या बाहर जाने वाले संदेश।

errors = [5000..5999 | {5000..5999, avp()}]

त्रुटियों को एक आने वाले संदेश के डिकोड पर पता चला, जैसा कि एक संबंधित 5xxx श्रृंखला परिणाम-संहिता (स्थायी विफलताओं) द्वारा पहचाना गया था। एक आने वाले अनुरोध के लिए, इन का उपयोग एक उचित उत्तर तैयार करने के लिए किया जाना चाहिए जैसा कि handle_request/3 diameter_app(3) में handle_request/3 कॉलबैक के लिए प्रलेखित है। आने वाले उत्तर के लिए, diameter:application_opt() answer_errors व्यवहार को निर्धारित करता है।

transport_data = term()

diameter_transport(3) में केवल अर्थ प्रक्रिया का एक मनमाना शब्द, जैसा कि diameter_transport(3) में प्रलेखित है।

निर्यात

डिकोड (मॉड, बिन) -> Pkt

प्रकार

डायमीटर संदेश को डिकोड करें।

सांकेतिक शब्दों में बदलना (मॉड, Msg) -> Pkt

प्रकार

डायमीटर संदेश को एनकोड करें।

यह भी देखें

diameterc(1) , diameter_app(3) , diameter_dict(4) , diameter_make(3)