From 9e0340bc3ca2844fc1e021bfd8fc9fda8e178127 Mon Sep 17 00:00:00 2001 From: Rob Austein Date: Tue, 26 Jun 2007 00:45:53 +0000 Subject: Checkpoint svn path=/scripts/xml-parse-test.py; revision=685 --- scripts/xml-parse-test.py | 322 +++++++++++++++++++++++----------------------- 1 file changed, 160 insertions(+), 162 deletions(-) (limited to 'scripts') diff --git a/scripts/xml-parse-test.py b/scripts/xml-parse-test.py index 2c2a82b9..9db383e6 100755 --- a/scripts/xml-parse-test.py +++ b/scripts/xml-parse-test.py @@ -1,188 +1,186 @@ # $Id$ -import os +import base64 +import xml.sax +import glob -def run(func, arg, *cmd): - i, o = func(cmd) - i.write(arg) - i.close() - value = o.read() - o.close() - return value +class rpki_updown_msg(object): -def relaxng(xml, rng): - return run(os.popen4, xml, "xmllint", "--noout", "--relaxng", rng, "-") + def toXML(self): + return ('\ +\n\ +\n' \ + % (self.sender, self.recipient, self.msg_ref, self.type) + ) + self.innerToXML() + '\n' -class rpki_updown_msg(object): - def toXml(self): - return (''' - \n''' % (self.sender, self.recipient, self.msg_ref, self.type) - ) + self.innerToXml() + '\n' - -class rpki_updown_err(rpki_updown_msg): - def innerToXml(self): - return '%d\n' % self.status + def innerToXML(self): + return "" + +class rpki_updown_cert(object): + + def __init__(self): + self.req_resource_set_as = None + self.req_resource_set_ipv4 = None + self.req_resource_set_ipv6 = None + + def toXML(self): + xml = ('\ + \n' % self.status) + return xml + base64.b64encode(self.cert) + '\n' + +class rpki_updown_class(object): + + def __init__(self): + self.certs = [] + + def toXML(self): + xml = ('\ + \n' \ + % (self.class_name, self.cert_url, self.cert_ski, + self.resource_set_as, self.resource_set_ipv4, self.resource_set_ipv6, + self.suggested_sia_head)) + for cert in self.certs: + xml += cert.toXML() + return xml + '' + base64.b64encode(self.issuer) + '\n\n' class rpki_updown_list(rpki_updown_msg): - def innerToXml(self): - return "" + pass class rpki_updown_list_response(rpki_updown_msg): - def innerToXml(self): - pass + + def __init__(self): + self.resource_classes = [] + + def innerToXML(self): + for c in self.resource_classes: + xml += c.toXML() + return xml class rpki_updown_issue(rpki_updown_msg): + def __init__(self): self.req_as = None self_req_ipv4 = None self.req_ipv6 = None - def innerToXml(self): - xml = ' \n' + xml += ('\n req_resource_set_ipv6="%s"' % self.req_ipv6.toXML()) + return xml + self.pkcs10.toXML() + ' \n' -class rpki_issue_response(rpki_updown_msg): - pass +class rpki_updown_issue_response(rpki_updown_msg): + + def innerToXML(self): + self.resource_class.toXML() + +class rpki_updown_revoke(rpki_updown_msg): + + def innerToXML(self): + return (' \n' % (self.class_name, self.ski)) + +class rpki_updown_revoke_response(rpki_updown_revoke): pass + +class rpki_updown_error_response(rpki_updown_msg): + + def innerToXML(self): + return '%d\n' % self.status + def startElement(self, name, attrs): + print "startElement(" + name + ")" + def endElement(self, name, text): + print "endElement(" + name + ")" + if name == 'status': + self.status = text + elif name == 'last_message_processed': + self.last_message_processed = text + elif name == 'description': + self.description = text + +class rpki_updown_sax_handler(xml.sax.handler.ContentHandler): + + def __init__(self): + self.text = '' + self.obj = None + + def startElementNS(self, name, qname, attrs): + print "startElementNS()" + return self.startElement(name[1], attrs) + + def endElementNS(self, name, qname): + print "endElementNS()" + return self.endElement(name[1]) + + def startElement(self, name, attrs): + print "startElement(" + name + ")" + if name == 'message': + assert int(attrs.getValue('version')) == 1 + print self.obj + if self.obj == None: + assert name == 'message' + self.obj = { + 'list' : rpki_updown_list(), + 'list_response' : rpki_updown_list_response(), + 'issue' : rpki_updown_issue(), + 'issue_response' : rpki_updown_issue_response(), + 'revoke' : rpki_updown_revoke(), + 'revoke_response' : rpki_updown_revoke_response(), + 'error_response' : rpki_updown_error_response() + }[attrs.getValue('type')] + assert self.obj != None + self.obj.sender = attrs.getValue('sender') + self.obj.recipient = attrs.getValue('recipient') + self.obj.msg_ref = attrs.getValue('msg_ref') + else: + assert self.obj != None + self.obj.startElement(name, attrs) + + def characters(self, content): + self.text += content + + def endElement(self, name): + assert self.obj != None + if name != 'message': + self.obj.endElement(name, self.text) def main(): - for x in xml: - print x - print relaxng(x, "up-down-medium-schema.rng") + for f in glob.glob("up-down-protocol-samples/*.xml"): + parser = xml.sax.make_parser() + handler = rpki_updown_sax_handler() + parser.setContentHandler(handler) + parser.parse(f) + print handler.obj print "=====\n" -# Ugly inline stuff here for initial testing - -xml = [ -''' - - 2001 - 17 - [Readable text] - -''', -''' - - - deadbeef - - -''', -''' - - - - deadbeef - - deadbeef - - -''', -''' - -''', -''' - - - - deadbeef - - - deadbeef - - -''', -''' - - - -''', -''' - - - -''' -] - main() -- cgit v1.2.3