AlkantarClanX12
Current Path : /lib64/python2.7/site-packages/dns/ |
Current File : //lib64/python2.7/site-packages/dns/renderer.pyc |
� w�Qc @ s� d Z d d l Z d d l Z d d l Z d d l Z d d l Z d d l Z d Z d Z d Z d Z d e f d � � YZ d S( s* Help for building DNS wire format messagesi����Ni i i i t Rendererc B s� e Z d Z d d d d d � Z d � Z d � Z e j j d � Z d � Z d � Z d d � Z e j j d � Z d � Z d � Z RS( st Helper class for building DNS wire-format messages. Most applications can use the higher-level L{dns.message.Message} class and its to_wire() method to generate wire-format messages. This class is for those applications which need finer control over the generation of messages. Typical use:: r = dns.renderer.Renderer(id=1, flags=0x80, max_size=512) r.add_question(qname, qtype, qclass) r.add_rrset(dns.renderer.ANSWER, rrset_1) r.add_rrset(dns.renderer.ANSWER, rrset_2) r.add_rrset(dns.renderer.AUTHORITY, ns_rrset) r.add_edns(0, 0, 4096) r.add_rrset(dns.renderer.ADDTIONAL, ad_rrset_1) r.add_rrset(dns.renderer.ADDTIONAL, ad_rrset_2) r.write_header() r.add_tsig(keyname, secret, 300, 1, 0, '', request_mac) wire = r.get_wire() @ivar output: where rendering is written @type output: cStringIO.StringIO object @ivar id: the message id @type id: int @ivar flags: the message flags @type flags: int @ivar max_size: the maximum size of the message @type max_size: int @ivar origin: the origin to use when rendering relative names @type origin: dns.name.Name object @ivar compress: the compression table @type compress: dict @ivar section: the section currently being rendered @type section: int (dns.renderer.QUESTION, dns.renderer.ANSWER, dns.renderer.AUTHORITY, or dns.renderer.ADDITIONAL) @ivar counts: list of the number of RRs in each section @type counts: int list of length 4 @ivar mac: the MAC of the rendered message (if TSIG was used) @type mac: string i i�� c C s� t j � | _ | d k r3 t j d d � | _ n | | _ | | _ | | _ | | _ i | _ t | _ d d d d g | _ | j j d � d | _ d S( s� Initialize a new renderer. @param id: the message id @type id: int @param flags: the DNS message flags @type flags: int @param max_size: the maximum message size; the default is 65535. If rendering results in a message greater than I{max_size}, then L{dns.exception.TooBig} will be raised. @type max_size: int @param origin: the origin to use when rendering relative names @type origin: dns.name.Namem or None. i i�� s i t Ns ( t cStringIOt StringIOt outputt Nonet randomt randintt idt flagst max_sizet origint compresst QUESTIONt sectiont countst writet mac( t selfR R R R ( ( s2 /usr/lib64/python2.7/site-packages/dns/renderer.pyt __init__J s c C s~ | j j | � | j j � g } x9 | j j � D]( \ } } | | k r3 | j | � q3 q3 Wx | D] } | j | =qf Wd S( s� Truncate the output buffer at offset I{where}, and remove any compression table entries that pointed beyond the truncation point. @param where: the offset @type where: int N( R t seekt truncateR t iteritemst append( R t wheret keys_to_deletet kt v( ( s2 /usr/lib64/python2.7/site-packages/dns/renderer.pyt _rollbackg s c C s= | j | k r9 | j | k r- t j j � n | | _ n d S( sZ Set the renderer's current section. Sections must be rendered order: QUESTION, ANSWER, AUTHORITY, ADDITIONAL. Sections may be empty. @param section: the section @type section: int @raises dns.exception.FormError: an attempt was made to set a section value less than the current section. N( R t dnst exceptiont FormError( R R ( ( s2 /usr/lib64/python2.7/site-packages/dns/renderer.pyt _set_sectiony s c C s� | j t � | j j � } | j | j | j | j � | j j t j d | | � � | j j � } | | j k r� | j | � t j j � n | j t c d 7<d S( s Add a question to the message. @param qname: the question name @type qname: dns.name.Name @param rdtype: the question rdata type @type rdtype: int @param rdclass: the question rdata class @type rdclass: int s !HHi N( R R R t tellt to_wireR R R t structt packR R R R t TooBigR ( R t qnamet rdtypet rdclasst beforet after( ( s2 /usr/lib64/python2.7/site-packages/dns/renderer.pyt add_question� s c K s� | j | � | j j � } | j | j | j | j | � } | j j � } | | j k rw | j | � t j j � n | j | c | 7<d S( s Add the rrset to the specified section. Any keyword arguments are passed on to the rdataset's to_wire() routine. @param section: the section @type section: int @param rrset: the rrset @type rrset: dns.rrset.RRset object N( R R R! R"