'Process one line from a DNS master file.'

def _rr_line(self):

    if (self.current_origin is None):
        raise UnknownOrigin
    token = self.tok.get(want_leading=True)
    if (not token.is_whitespace()):
        self.last_name = dns.name.from_text(token.value, self.current_origin)
    else:
        token = self.tok.get()
        if token.is_eol_or_eof():
            return
        self.tok.unget(token)
    name = self.last_name
    if (not name.is_subdomain(self.zone.origin)):
        self._eat_line()
        return
    if self.relativize:
        name = name.relativize(self.zone.origin)
    token = self.tok.get()
    if (not token.is_identifier()):
        raise dns.exception.SyntaxError
    try:
        ttl = dns.ttl.from_text(token.value)
        token = self.tok.get()
        if (not token.is_identifier()):
            raise dns.exception.SyntaxError
    except dns.ttl.BadTTL:
        ttl = self.ttl
    try:
        rdclass = dns.rdataclass.from_text(token.value)
        token = self.tok.get()
        if (not token.is_identifier()):
            raise dns.exception.SyntaxError
    except dns.exception.SyntaxError:
        raise dns.exception.SyntaxError
    except:
        rdclass = self.zone.rdclass
    if (rdclass != self.zone.rdclass):
        raise dns.exception.SyntaxError("RR    class    is    not    zone's    class")
    try:
        rdtype = dns.rdatatype.from_text(token.value)
    except:
        raise dns.exception.SyntaxError(("unknown    rdatatype    '%s'" % token.value))
    n = self.zone.nodes.get(name)
    if (n is None):
        n = self.zone.node_factory()
        self.zone.nodes[name] = n
    try:
        rd = dns.rdata.from_text(rdclass, rdtype, self.tok, self.current_origin, False)
    except dns.exception.SyntaxError:
        (ty, va) = sys.exc_info()[:2]
        raise va
    except:
        (ty, va) = sys.exc_info()[:2]
        raise dns.exception.SyntaxError(('caught    exception    %s:    %s' % (str(ty), str(va))))
    rd.choose_relativity(self.zone.origin, self.relativize)
    covers = rd.covers()
    rds = n.find_rdataset(rdclass, rdtype, covers, True)
    rds.add(rd, ttl)
