aboutsummaryrefslogtreecommitdiff
path: root/scripts/rpki/up_down.py
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/rpki/up_down.py')
-rw-r--r--scripts/rpki/up_down.py65
1 files changed, 38 insertions, 27 deletions
diff --git a/scripts/rpki/up_down.py b/scripts/rpki/up_down.py
index 1ace8c30..f9901e38 100644
--- a/scripts/rpki/up_down.py
+++ b/scripts/rpki/up_down.py
@@ -13,17 +13,23 @@ class generic_pdu(object):
def endElement(self, stack, name, text):
stack.pop()
-class cert_elt(object):
+class certificate_elt(generic_pdu):
"""
Up-Down protocol representation of an issued certificate.
"""
- def __init__(self, attrs):
+ def startElement(self, stack, name, attrs):
+ assert name == "certificate", "Unexpected name %s, stack %s" % (name, stack)
self.cert_url = attrs["cert_url"]
self.req_resource_set_as = resource_set.resource_set_as(attrs["req_resource_set_as"])
self.req_resource_set_ipv4 = resource_set.resource_set_ipv4(attrs["req_resource_set_ipv4"])
self.req_resource_set_ipv6 = resource_set.resource_set_ipv6(attrs["req_resource_set_ipv6"])
+ def endElement(self, stack, name, text):
+ assert name == "certificate"
+ self.cert = base64.b64decode(text)
+ stack.pop()
+
def __str__(self):
xml = (' <certificate cert_url="%s"' % (self.cert_url))
if self.req_resource_set_as:
@@ -35,20 +41,36 @@ class cert_elt(object):
xml += ">" + base64.b64encode(self.cert) + "</certificate>\n"
return xml
-class class_elt(object):
+class class_elt(generic_pdu):
"""
Up-Down protocol representation of a resource class.
"""
- def __init__(self, attrs):
- self.class_name = attrs["class_name"]
- self.cert_url = attrs["cert_url"]
- self.suggested_sia_head = attrs.get("suggested_sia_head")
- self.resource_set_as = resource_set.resource_set_as(attrs["resource_set_as"])
- self.resource_set_ipv4 = resource_set.resource_set_ipv4(attrs["resource_set_ipv4"])
- self.resource_set_ipv6 = resource_set.resource_set_ipv6(attrs["resource_set_ipv6"])
+ def __init__(self):
self.certs = []
+ def startElement(self, stack, name, attrs):
+ if name == "certificate":
+ cert = certificate_elt()
+ self.certs.append(cert)
+ stack.append(cert)
+ cert.startElement(stack, name, attrs)
+ elif name != "issuer":
+ assert name == "class", "Unexpected name %s, stack %s" % (name, stack)
+ self.class_name = attrs["class_name"]
+ self.cert_url = attrs["cert_url"]
+ self.suggested_sia_head = attrs.get("suggested_sia_head")
+ self.resource_set_as = resource_set.resource_set_as(attrs["resource_set_as"])
+ self.resource_set_ipv4 = resource_set.resource_set_ipv4(attrs["resource_set_ipv4"])
+ self.resource_set_ipv6 = resource_set.resource_set_ipv6(attrs["resource_set_ipv6"])
+
+ def endElement(self, stack, name, text):
+ if name == "issuer":
+ self.issuer = base64.b64decode(text)
+ else:
+ assert name == "class", "Unexpected name %s, stack %s" % (name, stack)
+ stack.pop()
+
def __str__(self):
xml = ('\
<class class_name="%s"\n\
@@ -83,23 +105,12 @@ class list_response_pdu(generic_pdu):
self.classes = []
def startElement(self, stack, name, attrs):
- if name == "class":
- self.classes.append(class_elt(attrs))
- elif name == "certificate":
- self.classes[-1].certs.append(cert_elt(attrs))
- elif name != "issuer":
- assert name == "list_response", "Unexpected name %s, stack %s" % (name, stack)
-
- def endElement(self, stack, name, text):
- if name == "certificate":
- self.classes[-1].certs[-1].cert = base64.b64decode(text)
- elif name == "issuer":
- self.classes[-1].issuer = base64.b64decode(text)
- elif name != "class":
- assert name == "message", "Unexpected name %s, stack %s" % (name, stack)
- stack.pop()
- stack[-1].endElement(stack, name, text)
-
+ assert name == "class", "Unexpected name %s, stack %s" % (name, stack)
+ klass = class_elt()
+ self.classes.append(klass)
+ stack.append(klass)
+ klass.startElement(stack, name, attrs)
+
def __str__(self):
return "".join(map(str, self.classes))