2009-11-16 16 views
6

मैं मूल बोनजोर/जेरोकॉन्फ़ लाइब्रेरी का निर्माण कर रहा हूं और अन्य मशीनों को प्रसारित करने के लिए DNS क्वेरी रिकॉर्ड बनाने की आवश्यकता है। मैंने एरलांग स्रोत कोड के माध्यम से देखने की कोशिश की है, लेकिन जैसा कि मैं एरलांग के लिए अपेक्षाकृत नया हूं, यह सभी inet_XXX.erl और .hrl फ़ाइलों के आंतों के नीचे घने हो जाता है। मेरे पास एक श्रोता है जो DNS रिकॉर्ड पेलोड प्राप्त करने और पार्स करने के लिए काम करता है, मैं सिर्फ यह नहीं समझ सकता कि क्वेरी रिकॉर्ड कैसे बनाएं। मुझे वास्तव में जानने की ज़रूरत है कि मुझे inet_dns में प्रवेश करने की आवश्यकता है: एक बाइनरी प्राप्त करने के लिए एन्कोड() मैं भेज सकता हूं। मैं जो करने की कोशिश कर रहा हूं, यहां है।मैं एर्लांग में एक DNS क्वेरी रिकॉर्ड कैसे बना सकता हूं?

{ok,P} = inet_dns:encode(#dns_query{domain="_daap._tcp.local",type=ptr,class=in}) 

यहाँ त्रुटि मैं

10> test:send(). 
** exception error: {badrecord,dns_rec} 
    in function inet_dns:encode/1 
    in call from test:send/0 
11> 

उत्तर

4

मैंने अंततः इसे समझ लिया।

send(Domain) -> 
    {ok,S} = gen_udp:open(5555,[{reuseaddr,true}, {ip,{224,0,0,251}}, {multicast_ttl,4}, {multicast_loop,false}, {broadcast,true}, binary]), 
    P = #dns_rec{header=#dns_header{},qdlist=[#dns_query{domain=Domain,type=ptr,class=in}]}, 
    gen_udp:send(S,{224,0,0,251},5353,inet_dns:encode(P)), 
    gen_udp:close(S). 
1

तथ्य inet_dns मॉड्यूल तुम बहुत अपने कोड से इसे प्रयोग से सावधान करना चाहिए के लिए कोई प्रलेखन है कि वहाँ हो रही है। मुझे उम्मीद है कि आप पूरी तरह से जानते हैं कि अगर वे (ओटीपी टीम) मॉड्यूल को लागू और उपयोग करने के तरीके को बदलने की तरह महसूस करते हैं तो आपके प्रोजेक्ट पर कोई विचार नहीं किया जाएगा।

कार्यान्वयन विचारों के लिए कोड पढ़ें, या बस Erlang सा DNS प्रोटोकॉल पर RFC के आधार पर सिंटैक्स का उपयोग DNS प्रोटोकॉल संदेश बनाने के लिए नीचे लाने के लिए। एक डीएनएस पैकेज बनाना इसे पार्स करने से कहीं अधिक आसान है (मैं खुद को उस सड़क से नीचे चला गया हूं, और पैकेट आकार को कम करने के लिए "चालाक चाल" शायद ही इसके लायक लगता है)।

+2

आपको इसे 20+ साल पहले संदर्भित करना चाहिए जहां बिट्स आज की तुलना में अधिक महंगे थे। – jldupont