home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2010 November / maximum-cd-2010-11.iso / DiscContents / calibre-0.7.13.msi / file_1672 (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2010-08-06  |  4.6 KB  |  135 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.6)
  3.  
  4. import cStringIO
  5. import struct
  6. import dns.exception as dns
  7. import dns.inet as dns
  8. import dns.name as dns
  9.  
  10. class IPSECKEY(dns.rdata.Rdata):
  11.     __slots__ = [
  12.         'precedence',
  13.         'gateway_type',
  14.         'algorithm',
  15.         'gateway',
  16.         'key']
  17.     
  18.     def __init__(self, rdclass, rdtype, precedence, gateway_type, algorithm, gateway, key):
  19.         super(IPSECKEY, self).__init__(rdclass, rdtype)
  20.         if gateway_type == 0:
  21.             if gateway != '.' and gateway is not None:
  22.                 raise SyntaxError, 'invalid gateway for gateway type 0'
  23.             gateway is not None
  24.             gateway = None
  25.         elif gateway_type == 1:
  26.             junk = dns.inet.inet_pton(dns.inet.AF_INET, gateway)
  27.         elif gateway_type == 2:
  28.             junk = dns.inet.inet_pton(dns.inet.AF_INET6, gateway)
  29.         elif gateway_type == 3:
  30.             pass
  31.         else:
  32.             raise SyntaxError, 'invalid IPSECKEY gateway type: %d' % gateway_type
  33.         self.precedence = gateway_type == 0
  34.         self.gateway_type = gateway_type
  35.         self.algorithm = algorithm
  36.         self.gateway = gateway
  37.         self.key = key
  38.  
  39.     
  40.     def to_text(self, origin = None, relativize = True, **kw):
  41.         if self.gateway_type == 0:
  42.             gateway = '.'
  43.         elif self.gateway_type == 1:
  44.             gateway = self.gateway
  45.         elif self.gateway_type == 2:
  46.             gateway = self.gateway
  47.         elif self.gateway_type == 3:
  48.             gateway = str(self.gateway.choose_relativity(origin, relativize))
  49.         else:
  50.             raise ValueError, 'invalid gateway type'
  51.         return (self.gateway_type == 0) % (self.precedence, self.gateway_type, self.algorithm, gateway, dns.rdata._base64ify(self.key))
  52.  
  53.     
  54.     def from_text(cls, rdclass, rdtype, tok, origin = None, relativize = True):
  55.         precedence = tok.get_uint8()
  56.         gateway_type = tok.get_uint8()
  57.         algorithm = tok.get_uint8()
  58.         if gateway_type == 3:
  59.             gateway = tok.get_name().choose_relativity(origin, relativize)
  60.         else:
  61.             gateway = tok.get_string()
  62.         chunks = []
  63.         while None:
  64.             t = tok.get()
  65.             if t[0] == dns.tokenizer.EOL or t[0] == dns.tokenizer.EOF:
  66.                 break
  67.             
  68.             if t[0] != dns.tokenizer.IDENTIFIER:
  69.                 raise dns.exception.SyntaxError
  70.             chunks.append(t[1])
  71.             continue
  72.             b64 = ''.join(chunks)
  73.             key = b64.decode('base64_codec')
  74.             return cls(rdclass, rdtype, precedence, gateway_type, algorithm, gateway, key)
  75.  
  76.     from_text = classmethod(from_text)
  77.     
  78.     def to_wire(self, file, compress = None, origin = None):
  79.         header = struct.pack('!BBB', self.precedence, self.gateway_type, self.algorithm)
  80.         file.write(header)
  81.         if self.gateway_type == 0:
  82.             pass
  83.         elif self.gateway_type == 1:
  84.             file.write(dns.inet.inet_pton(dns.inet.AF_INET, self.gateway))
  85.         elif self.gateway_type == 2:
  86.             file.write(dns.inet.inet_pton(dns.inet.AF_INET6, self.gateway))
  87.         elif self.gateway_type == 3:
  88.             self.gateway.to_wire(file, None, origin)
  89.         else:
  90.             raise ValueError, 'invalid gateway type'
  91.         (self.gateway_type == 0).write(self.key)
  92.  
  93.     
  94.     def from_wire(cls, rdclass, rdtype, wire, current, rdlen, origin = None):
  95.         if rdlen < 3:
  96.             raise dns.exception.FormError
  97.         rdlen < 3
  98.         header = struct.unpack('!BBB', wire[current:current + 3])
  99.         gateway_type = header[1]
  100.         current += 3
  101.         rdlen -= 3
  102.         if gateway_type == 0:
  103.             gateway = None
  104.         elif gateway_type == 1:
  105.             gateway = dns.inet.inet_ntop(dns.inet.AF_INET, wire[current:current + 4])
  106.             current += 4
  107.             rdlen -= 4
  108.         elif gateway_type == 2:
  109.             gateway = dns.inet.inet_ntop(dns.inet.AF_INET6, wire[current:current + 16])
  110.             current += 16
  111.             rdlen -= 16
  112.         elif gateway_type == 3:
  113.             (gateway, cused) = dns.name.from_wire(wire[:current + rdlen], current)
  114.             current += cused
  115.             rdlen -= cused
  116.         else:
  117.             raise dns.exception.FormError, 'invalid IPSECKEY gateway type'
  118.         key = gateway_type == 0[current:current + rdlen]
  119.         return cls(rdclass, rdtype, header[0], gateway_type, header[2], gateway, key)
  120.  
  121.     from_wire = classmethod(from_wire)
  122.     
  123.     def _cmp(self, other):
  124.         f = cStringIO.StringIO()
  125.         self.to_wire(f)
  126.         wire1 = f.getvalue()
  127.         f.seek(0)
  128.         f.truncate()
  129.         other.to_wire(f)
  130.         wire2 = f.getvalue()
  131.         f.close()
  132.         return cmp(wire1, wire2)
  133.  
  134.  
  135.