diff options
author | Rob Austein <sra@hactrn.net> | 2007-07-18 19:59:00 +0000 |
---|---|---|
committer | Rob Austein <sra@hactrn.net> | 2007-07-18 19:59:00 +0000 |
commit | f4e28413a66516035c49bca0f475028540b60126 (patch) | |
tree | 93c478c62d81a199dcdfeaa906fac233e2e09c0b /scripts | |
parent | 145b5c73d7d9e8238d076f14e28f51e0fc2f1a84 (diff) |
Simplify XML
svn path=/docs/left-right-xml; revision=774
Diffstat (limited to 'scripts')
19 files changed, 128 insertions, 237 deletions
diff --git a/scripts/left-right-protocol-samples/pdu.003.xml b/scripts/left-right-protocol-samples/pdu.003.xml index ab6f2020..927f6636 100644 --- a/scripts/left-right-protocol-samples/pdu.003.xml +++ b/scripts/left-right-protocol-samples/pdu.003.xml @@ -1,12 +1,7 @@ <?xml version="1.0" encoding="US-ASCII"?> <!--Automatically generated, do not edit.--> <msg xmlns="http://www.hactrn.net/uris/rpki/left-right-spec/" version="1" type="control_request"> - <self action="set" self_id="42"> + <self action="set" self_id="42" rekey="yes" reissue="yes" revoke="yes" run_now="yes" publish_world_now="yes"> <extension_preference name="color">Blue</extension_preference> - <rekey/> - <reissue/> - <revoke/> - <run_now/> - <publish_world_now/> </self> </msg> diff --git a/scripts/left-right-protocol-samples/pdu.011.xml b/scripts/left-right-protocol-samples/pdu.011.xml index d7483ac3..46b6a952 100644 --- a/scripts/left-right-protocol-samples/pdu.011.xml +++ b/scripts/left-right-protocol-samples/pdu.011.xml @@ -1,8 +1,7 @@ <?xml version="1.0" encoding="US-ASCII"?> <!--Automatically generated, do not edit.--> <msg xmlns="http://www.hactrn.net/uris/rpki/left-right-spec/" version="1" type="control_request"> - <bsc action="create" self_id="42"> + <bsc action="create" self_id="42" generate_keypair="yes" key_type="rsa" hash_alg="sha1" key_length="2048"> <signing_cert>Y2VydDEK</signing_cert> - <generate_keypair key_type="rsa" hash_alg="sha1" key_length="2048"/> </bsc> </msg> diff --git a/scripts/left-right-protocol-samples/pdu.021.xml b/scripts/left-right-protocol-samples/pdu.021.xml index e2f7a702..b267db4e 100644 --- a/scripts/left-right-protocol-samples/pdu.021.xml +++ b/scripts/left-right-protocol-samples/pdu.021.xml @@ -1,11 +1,7 @@ <?xml version="1.0" encoding="US-ASCII"?> <!--Automatically generated, do not edit.--> <msg xmlns="http://www.hactrn.net/uris/rpki/left-right-spec/" version="1" type="control_request"> - <parent action="create" self_id="42"> + <parent action="create" self_id="42" peer_contact="https://re.bar.example/bandicoot/" sia_base="rsync://repo.foo.example/wombat/" bsc_link="17" repository_link="120"> <peer_ta>cGVlcl90YQo=</peer_ta> - <peer_contact uri="https://re.bar.example/bandicoot/"/> - <sia_base uri="rsync://repo.foo.example/wombat/"/> - <bsc_link id="17"/> - <repository_link id="120"/> </parent> </msg> diff --git a/scripts/left-right-protocol-samples/pdu.023.xml b/scripts/left-right-protocol-samples/pdu.023.xml index a49be475..d6db2e95 100644 --- a/scripts/left-right-protocol-samples/pdu.023.xml +++ b/scripts/left-right-protocol-samples/pdu.023.xml @@ -1,14 +1,7 @@ <?xml version="1.0" encoding="US-ASCII"?> <!--Automatically generated, do not edit.--> <msg xmlns="http://www.hactrn.net/uris/rpki/left-right-spec/" version="1" type="control_request"> - <parent action="set" self_id="42" parent_id="666"> + <parent action="set" self_id="42" parent_id="666" peer_contact="https://re.bar.example/bandicoot/" sia_base="rsync://repo.foo.example/wombat/" bsc_link="17" repository_link="120" rekey="yes" reissue="yes" revoke="yes"> <peer_ta>cGVlcl90YQo=</peer_ta> - <peer_contact uri="https://re.bar.example/bandicoot/"/> - <sia_base uri="rsync://repo.foo.example/wombat/"/> - <bsc_link id="17"/> - <repository_link id="120"/> - <rekey/> - <reissue/> - <revoke/> </parent> </msg> diff --git a/scripts/left-right-protocol-samples/pdu.026.xml b/scripts/left-right-protocol-samples/pdu.026.xml index 4cc1d527..589cbc63 100644 --- a/scripts/left-right-protocol-samples/pdu.026.xml +++ b/scripts/left-right-protocol-samples/pdu.026.xml @@ -1,11 +1,7 @@ <?xml version="1.0" encoding="US-ASCII"?> <!--Automatically generated, do not edit.--> <msg xmlns="http://www.hactrn.net/uris/rpki/left-right-spec/" version="1" type="control_response"> - <parent action="get" self_id="42" parent_id="666"> + <parent action="get" self_id="42" parent_id="666" peer_contact="https://re.bar.example/bandicoot/" sia_base="rsync://repo.foo.example/wombat/" bsc_link="17" repository_link="120"> <peer_ta>cGVlcl90YQo=</peer_ta> - <peer_contact uri="https://re.bar.example/bandicoot/"/> - <sia_base uri="rsync://repo.foo.example/wombat/"/> - <bsc_link id="17"/> - <repository_link id="120"/> </parent> </msg> diff --git a/scripts/left-right-protocol-samples/pdu.028.xml b/scripts/left-right-protocol-samples/pdu.028.xml index 639fac9b..2430e1fb 100644 --- a/scripts/left-right-protocol-samples/pdu.028.xml +++ b/scripts/left-right-protocol-samples/pdu.028.xml @@ -1,11 +1,7 @@ <?xml version="1.0" encoding="US-ASCII"?> <!--Automatically generated, do not edit.--> <msg xmlns="http://www.hactrn.net/uris/rpki/left-right-spec/" version="1" type="control_response"> - <parent action="list" self_id="42" parent_id="666"> + <parent action="list" self_id="42" parent_id="666" peer_contact="https://re.bar.example/bandicoot/" sia_base="rsync://repo.foo.example/wombat/" bsc_link="17" repository_link="120"> <peer_ta>cGVlcl90YQo=</peer_ta> - <peer_contact uri="https://re.bar.example/bandicoot/"/> - <sia_base uri="rsync://repo.foo.example/wombat/"/> - <bsc_link id="17"/> - <repository_link id="120"/> </parent> </msg> diff --git a/scripts/left-right-protocol-samples/pdu.031.xml b/scripts/left-right-protocol-samples/pdu.031.xml index d103a5d5..547eb8ca 100644 --- a/scripts/left-right-protocol-samples/pdu.031.xml +++ b/scripts/left-right-protocol-samples/pdu.031.xml @@ -1,9 +1,7 @@ <?xml version="1.0" encoding="US-ASCII"?> <!--Automatically generated, do not edit.--> <msg xmlns="http://www.hactrn.net/uris/rpki/left-right-spec/" version="1" type="control_request"> - <child action="create" self_id="42"> + <child action="create" self_id="42" bsc_link="17" child_db_id="child_db_id"> <peer_ta>cGVlcl90YQo=</peer_ta> - <bsc_link id="17"/> - <child_db_id id="child_db_id"/> </child> </msg> diff --git a/scripts/left-right-protocol-samples/pdu.033.xml b/scripts/left-right-protocol-samples/pdu.033.xml index ef2da60d..3894ee54 100644 --- a/scripts/left-right-protocol-samples/pdu.033.xml +++ b/scripts/left-right-protocol-samples/pdu.033.xml @@ -1,10 +1,7 @@ <?xml version="1.0" encoding="US-ASCII"?> <!--Automatically generated, do not edit.--> <msg xmlns="http://www.hactrn.net/uris/rpki/left-right-spec/" version="1" type="control_request"> - <child action="set" self_id="42" child_id="3"> + <child action="set" self_id="42" child_id="3" bsc_link="17" child_db_id="child_db_id" reissue="yes"> <peer_ta>cGVlcl90YQo=</peer_ta> - <bsc_link id="17"/> - <child_db_id id="child_db_id"/> - <reissue/> </child> </msg> diff --git a/scripts/left-right-protocol-samples/pdu.036.xml b/scripts/left-right-protocol-samples/pdu.036.xml index d2729feb..4603c071 100644 --- a/scripts/left-right-protocol-samples/pdu.036.xml +++ b/scripts/left-right-protocol-samples/pdu.036.xml @@ -1,9 +1,7 @@ <?xml version="1.0" encoding="US-ASCII"?> <!--Automatically generated, do not edit.--> <msg xmlns="http://www.hactrn.net/uris/rpki/left-right-spec/" version="1" type="control_response"> - <child action="get" self_id="42" child_id="3"> + <child action="get" self_id="42" child_id="3" bsc_link="17" child_db_id="child_db_id"> <peer_ta>cGVlcl90YQo=</peer_ta> - <bsc_link id="17"/> - <child_db_id id="child_db_id"/> </child> </msg> diff --git a/scripts/left-right-protocol-samples/pdu.038.xml b/scripts/left-right-protocol-samples/pdu.038.xml index 4426db32..3c5c0f42 100644 --- a/scripts/left-right-protocol-samples/pdu.038.xml +++ b/scripts/left-right-protocol-samples/pdu.038.xml @@ -2,8 +2,7 @@ <!--Automatically generated, do not edit.--> <msg xmlns="http://www.hactrn.net/uris/rpki/left-right-spec/" version="1" type="control_response"> <child action="list" self_id="42" child_id="3"> - <peer_ta>cGVlcl90YQo=</peer_ta> - <bsc_link id="17"/> - <child_db_id id="child_db_id"/> - </child> + bsc_link="17" + child_db_id="child_db_id"> + <peer_ta>cGVlcl90YQo=</peer_ta></child> </msg> diff --git a/scripts/left-right-protocol-samples/pdu.041.xml b/scripts/left-right-protocol-samples/pdu.041.xml index d2146d79..ed9d1656 100644 --- a/scripts/left-right-protocol-samples/pdu.041.xml +++ b/scripts/left-right-protocol-samples/pdu.041.xml @@ -1,9 +1,7 @@ <?xml version="1.0" encoding="US-ASCII"?> <!--Automatically generated, do not edit.--> <msg xmlns="http://www.hactrn.net/uris/rpki/left-right-spec/" version="1" type="control_request"> - <repository action="create" self_id="42"> - <peer_contact uri="https://re.bar.example/bandicoot/"/> + <repository action="create" self_id="42" peer_contact="https://re.bar.example/bandicoot/" bsc_link="17"> <peer_ta>cGVlcl90YQo=</peer_ta> - <bsc_link id="17"/> </repository> </msg> diff --git a/scripts/left-right-protocol-samples/pdu.043.xml b/scripts/left-right-protocol-samples/pdu.043.xml index 89295e3c..2475b409 100644 --- a/scripts/left-right-protocol-samples/pdu.043.xml +++ b/scripts/left-right-protocol-samples/pdu.043.xml @@ -1,9 +1,7 @@ <?xml version="1.0" encoding="US-ASCII"?> <!--Automatically generated, do not edit.--> <msg xmlns="http://www.hactrn.net/uris/rpki/left-right-spec/" version="1" type="control_request"> - <repository action="set" self_id="42" repository_id="120"> - <peer_contact uri="https://re.bar.example/bandicoot/"/> + <repository action="set" self_id="42" repository_id="120" peer_contact="https://re.bar.example/bandicoot/" bsc_link="17"> <peer_ta>cGVlcl90YQo=</peer_ta> - <bsc_link id="17"/> </repository> </msg> diff --git a/scripts/left-right-protocol-samples/pdu.046.xml b/scripts/left-right-protocol-samples/pdu.046.xml index 5647370d..85b45d3c 100644 --- a/scripts/left-right-protocol-samples/pdu.046.xml +++ b/scripts/left-right-protocol-samples/pdu.046.xml @@ -1,9 +1,7 @@ <?xml version="1.0" encoding="US-ASCII"?> <!--Automatically generated, do not edit.--> <msg xmlns="http://www.hactrn.net/uris/rpki/left-right-spec/" version="1" type="control_response"> - <repository action="get" self_id="42" repository_id="120"> - <peer_contact uri="https://re.bar.example/bandicoot/"/> + <repository action="get" self_id="42" repository_id="120" peer_contact="https://re.bar.example/bandicoot/" bsc_link="17"> <peer_ta>cGVlcl90YQo=</peer_ta> - <bsc_link id="17"/> </repository> </msg> diff --git a/scripts/left-right-protocol-samples/pdu.048.xml b/scripts/left-right-protocol-samples/pdu.048.xml index 93e02635..bf9aad50 100644 --- a/scripts/left-right-protocol-samples/pdu.048.xml +++ b/scripts/left-right-protocol-samples/pdu.048.xml @@ -1,9 +1,7 @@ <?xml version="1.0" encoding="US-ASCII"?> <!--Automatically generated, do not edit.--> <msg xmlns="http://www.hactrn.net/uris/rpki/left-right-spec/" version="1" type="control_response"> - <repository action="list" self_id="42" repository_id="120"> - <peer_contact uri="https://re.bar.example/bandicoot/"/> + <repository action="list" self_id="42" repository_id="120" peer_contact="https://re.bar.example/bandicoot/" bsc_link="17"> <peer_ta>cGVlcl90YQo=</peer_ta> - <bsc_link id="17"/> </repository> </msg> diff --git a/scripts/left-right-protocol-samples/pdu.053.xml b/scripts/left-right-protocol-samples/pdu.053.xml index 5f18578b..17cfa222 100644 --- a/scripts/left-right-protocol-samples/pdu.053.xml +++ b/scripts/left-right-protocol-samples/pdu.053.xml @@ -1,8 +1,5 @@ <?xml version="1.0" encoding="US-ASCII"?> <!--Automatically generated, do not edit.--> <msg xmlns="http://www.hactrn.net/uris/rpki/left-right-spec/" version="1" type="control_request"> - <route_origin action="set" self_id="42" route_origin_id="88"> - <suppress_publication/> - <resources asn="12345" ipv4="10.0.0.44/32,10.2.0.6-10.2.0.77" ipv6="2002:a00::/48,2002:a02:6::-2002:a02:4d::"/> - </route_origin> + <route_origin action="set" self_id="42" route_origin_id="88" suppress_publication="yes" asn="12345" ipv4="10.0.0.44/32,10.2.0.6-10.2.0.77" ipv6="2002:a00::/48,2002:a02:6::-2002:a02:4d::"/> </msg> diff --git a/scripts/left-right-protocol-samples/pdu.056.xml b/scripts/left-right-protocol-samples/pdu.056.xml index 2fa85016..27f15914 100644 --- a/scripts/left-right-protocol-samples/pdu.056.xml +++ b/scripts/left-right-protocol-samples/pdu.056.xml @@ -1,7 +1,5 @@ <?xml version="1.0" encoding="US-ASCII"?> <!--Automatically generated, do not edit.--> <msg xmlns="http://www.hactrn.net/uris/rpki/left-right-spec/" version="1" type="control_response"> - <route_origin action="get" self_id="42" route_origin_id="88"> - <resources asn="12345" ipv4="10.0.0.44/32,10.2.0.6-10.2.0.77" ipv6="2002:a00::/48,2002:a02:6::-2002:a02:4d::"/> - </route_origin> + <route_origin action="get" self_id="42" route_origin_id="88" asn="12345" ipv4="10.0.0.44/32,10.2.0.6-10.2.0.77" ipv6="2002:a00::/48,2002:a02:6::-2002:a02:4d::"/> </msg> diff --git a/scripts/left-right-protocol-samples/pdu.058.xml b/scripts/left-right-protocol-samples/pdu.058.xml index 7f07fa77..43382d69 100644 --- a/scripts/left-right-protocol-samples/pdu.058.xml +++ b/scripts/left-right-protocol-samples/pdu.058.xml @@ -1,7 +1,5 @@ <?xml version="1.0" encoding="US-ASCII"?> <!--Automatically generated, do not edit.--> <msg xmlns="http://www.hactrn.net/uris/rpki/left-right-spec/" version="1" type="control_response"> - <route_origin action="list" self_id="42" route_origin_id="88"> - <resources asn="12345" ipv4="10.0.0.44/32,10.2.0.6-10.2.0.77" ipv6="2002:a00::/48,2002:a02:6::-2002:a02:4d::"/> - </route_origin> + <route_origin action="list" self_id="42" route_origin_id="88" asn="12345" ipv4="10.0.0.44/32,10.2.0.6-10.2.0.77" ipv6="2002:a00::/48,2002:a02:6::-2002:a02:4d::"/> </msg> diff --git a/scripts/rpki/left_right.py b/scripts/rpki/left_right.py index 5e183a6e..b0130927 100644 --- a/scripts/rpki/left_right.py +++ b/scripts/rpki/left_right.py @@ -10,18 +10,31 @@ class base_elt(object): Base type for left-right message elements. """ + attributes = () + booleans = () + def startElement(self, stack, name, attrs): - pass + self.read_attrs(attrs) def endElement(self, stack, name, text): stack.pop() - def attr_maybe(self, key): - val = getattr(self, key, None) - if val is None: - return '' - else: - return ' %s="%s"' % (key, val) + def read_attrs(self, attrs): + for key in self.attributes: + setattr(self, key, attrs.get(key, None)) + for key in self.booleans: + setattr(self, key, attrs.get(key, False)) + + def print_attrs(self): + xml ="" + for key in self.attributes: + val = getattr(self, key, None) + if val is not None: + xml += ' %s="%s"' % (key, val) + for key in self.booleans: + if getattr(self, key, False): + xml += ' %s="yes"' % key + return xml class extension_preference_elt(base_elt): """ @@ -42,6 +55,7 @@ class extension_preference_elt(base_elt): class self_elt(base_elt): + attributes = ("action", "self_id") booleans = ("rekey", "reissue", "revoke", "run_now", "publish_world_now") rekey = False @@ -59,45 +73,36 @@ class self_elt(base_elt): self.prefs.append(pref) stack.append(pref) pref.startElement(stack, name, attrs) - elif name in self.booleans: - setattr(self, name, True) else: assert name == "self", "Unexpected name %s, stack %s" % (name, stack) - self.action = attrs["action"] - self.self_id = attrs.get("self_id") + self.read_attrs(attrs) def endElement(self, stack, name, text): - if name not in self.booleans: - assert name == "self", "Unexpected name %s, stack %s" % (name, stack) - stack.pop() + assert name == "self", "Unexpected name %s, stack %s" % (name, stack) + stack.pop() def __str__(self): - xml = ' <self action="%s"%s>\n' % (self.action, self.attr_maybe("self_id")) + xml = ' <self%s>\n' % self.print_attrs() for i in self.prefs: xml += str(i) - for i in self.booleans: - if getattr(self, i): - xml += ' <%s/>\n' % i return xml + ' </self>\n' class bsc_elt(base_elt): + attributes = ("action", "self_id", "bsc_id", "key_type", "hash_alg", "key_length") + booleans = ("generate_keypair",) + generate_keypair = False + pkcs10_cert_request = None + public_key = None def __init__(self): self.signing_cert = [] def startElement(self, stack, name, attrs): - if name == "generate_keypair": - self.generate_keypair = True - self.key_type = attrs["key_type"] - self.hash_alg = attrs["hash_alg"] - self.key_length = attrs["key_length"] - elif not name in ("signing_cert", "public_key", "pkcs10_cert_request"): + if not name in ("signing_cert", "public_key", "pkcs10_cert_request"): assert name == "bsc", "Unexpected name %s, stack %s" % (name, stack) - self.action = attrs["action"] - self.self_id = attrs["self_id"] - self.bsc_id = attrs.get("bsc_id") + self.read_attrs(attrs) def endElement(self, stack, name, text): if name == "signing_cert": @@ -106,219 +111,157 @@ class bsc_elt(base_elt): self.public_key = base64.b64decode(text) elif name == "pkcs10_cert_request": self.pkcs10_cert_request = base64.b64decode(text) - elif name != "generate_keypair": + else: assert name == "bsc", "Unexpected name %s, stack %s" % (name, stack) stack.pop() def __str__(self): - xml = (' <bsc action="%s" self_id="%s"%s>\n' - % (self.action, self.self_id, self.attr_maybe("bsc_id"))) + xml = ' <bsc%s>\n' % self.print_attrs() for i in self.signing_cert: xml += ' <signing_cert>' + base64.b64encode(i) + '</signing_cert>\n' - i = getattr(self, "pkcs10_cert_request", None) - if i is not None: - xml += ' <pkcs10_cert_request>' + base64.b64encode(i) + '</pkcs10_cert_request>\n' - i = getattr(self, "public_key", None) - if i is not None: - xml += ' <public_key>' + base64.b64encode(i) + '</public_key>\n' + if self.pkcs10_cert_request: + xml += ' <pkcs10_cert_request>' + base64.b64encode(self.pkcs10_cert_request) + '</pkcs10_cert_request>\n' + if self.public_key: + xml += ' <public_key>' + base64.b64encode(self.public_key) + '</public_key>\n' return xml + ' </bsc>\n' class parent_elt(base_elt): - ids = ("bsc_link", "repository_link") - uris = ("peer_contact", "sia_base") + attributes = ("self_id", "parent_id", "bsc_link", "repository_link", "peer_contact", "sia_base") booleans = ("rekey", "reissue", "revoke") rekey = False reissue = False revoke = False + peer_ta = None def startElement(self, stack, name, attrs): - if name in self.uris: - setattr(self, name, attrs["uri"]) - elif name in self.ids: - setattr(self, name, attrs["id"]) - elif name in self.booleans: - setattr(self, name, True) - elif name != "peer_ta": + if name != "peer_ta": assert name == "parent", "Unexpected name %s, stack %s" % (name, stack) - self.action = attrs["action"] - self.self_id = attrs["self_id"] - self.parent_id = attrs.get("parent_id") + self.read_attrs(attrs) def endElement(self, stack, name, text): if name == "peer_ta": self.peer_ta = base64.b64decode(text) - elif name not in self.booleans + self.ids + self.uris: + else: assert name == "parent", "Unexpected name %s, stack %s" % (name, stack) stack.pop() def __str__(self): - xml = (' <parent action="%s" self_id="%s"%s>\n' - % (self.action, self.self_id, self.attr_maybe("parent_id"))) - i = getattr(self, "peer_ta", None) - if i is not None: - xml += ' <peer_ta>' + base64.b64encode(i) + '</peer_ta>\n' - i = getattr(self, "peer_contact", None) - if i is not None: - xml += ' <peer_contact uri="%s"/>\n' % i - i = getattr(self, "sia_base", None) - if i is not None: - xml += ' <sia_base uri="%s"/>\n' % i - i = getattr(self, "bsc_link", None) - if i is not None: - xml += ' <bsc_link id="%s"/>\n' % i - i = getattr(self, "repository_link", None) - if i is not None: - xml += ' <repository_link id="%s"/>\n' % i - for i in self.booleans: - if getattr(self, i): - xml += ' <%s/>\n' % i + xml = ' <parent%s>\n' % self.print_attrs() + if self.peer_ta: + xml += ' <peer_ta>' + base64.b64encode(self.peer_ta) + '</peer_ta>\n' return xml + ' </parent>\n' class child_elt(base_elt): - ids = ("bsc_link", "child_db_id") + attributes = ("action", "self_id", "child_id", "bsc_link", "child_db_id") booleans = ("reissue", ) reissue = False + peer_ta = None def startElement(self, stack, name, attrs): - if name in self.ids: - setattr(self, name, attrs["id"]) - elif name in self.booleans: - setattr(self, name, True) - elif name != "peer_ta": + if name != "peer_ta": assert name == "child", "Unexpected name %s, stack %s" % (name, stack) - self.action = attrs["action"] - self.self_id = attrs["self_id"] - self.child_id = attrs.get("child_id") + self.read_attrs(attrs) def endElement(self, stack, name, text): if name == "peer_ta": self.peer_ta = base64.b64decode(text) - elif name not in self.booleans + self.ids: + else: assert name == "child", "Unexpected name %s, stack %s" % (name, stack) stack.pop() def __str__(self): - xml = (' <child action="%s" self_id="%s"%s>\n' - % (self.action, self.self_id, self.attr_maybe("child_id"))) + xml = ' <child%s>\n' % self.print_attrs() i = getattr(self, "peer_ta", None) - if i is not None: - xml += ' <peer_ta>' + base64.b64encode(i) + '</peer_ta>\n' - i = getattr(self, "bsc_link", None) - if i is not None: - xml += ' <bsc_link id="%s"/>\n' % i - i = getattr(self, "child_db_id", None) - if i is not None: - xml += ' <child_db_id id="%s"/>\n' % i - for i in self.booleans: - if getattr(self, i): - xml += ' <%s/>\n' % i + if self.peer_ta: + xml += ' <peer_ta>' + base64.b64encode(self.peer_ta) + '</peer_ta>\n' return xml + ' </child>\n' class repository_elt(base_elt): + attributes = ("action", "self_id", "repository_id", "bsc_link", "peer_contact") + + peer_ta = None + def startElement(self, stack, name, attrs): - if name == "bsc_link": - self.bsc_link = attrs["id"] - elif name == "peer_contact": - self.peer_contact = attrs["uri"] - elif name != "peer_ta": + if name != "peer_ta": assert name == "repository", "Unexpected name %s, stack %s" % (name, stack) - self.action = attrs["action"] - self.self_id = attrs["self_id"] - self.repository_id = attrs.get("repository_id") + self.read_attrs(attrs) def endElement(self, stack, name, text): if name == "peer_ta": self.peer_ta = base64.b64decode(text) - elif name not in ("bsc_link", "peer_contact"): + else: assert name == "repository", "Unexpected name %s, stack %s" % (name, stack) stack.pop() def __str__(self): - xml = (' <repository action="%s" self_id="%s"%s>\n' - % (self.action, self.self_id, self.attr_maybe("repository_id"))) - i = getattr(self, "peer_ta", None) - if i is not None: - xml += ' <peer_ta>' + base64.b64encode(i) + '</peer_ta>\n' - i = getattr(self, "peer_contact", None) - if i is not None: - xml += ' <peer_contact uri="%s"/>\n' % i - i = getattr(self, "bsc_link", None) - if i is not None: - xml += ' <bsc_link id="%s"/>\n' % i + xml = ' <repository%s>\n' % self.print_attrs() + if self.peer_ta: + xml += ' <peer_ta>' + base64.b64encode(self.peer_ta) + '</peer_ta>\n' return xml + ' </repository>\n' class route_origin_elt(base_elt): + attributes = ("action", "self_id", "route_origin_id", "asn", "ipv4", "ipv6") + booleans = ("suppress_publication",) + suppress_publication = False ipv4 = None ipv6 = None def startElement(self, stack, name, attrs): - if name == "suppress_publication": - self.suppress_publication = True - elif name == "resources": - self.asn = long(attrs["asn"]) - if "ipv4" in attrs: - self.ipv4 = resource_set.resource_set_ipv4(attrs["ipv4"]) - if "ipv6" in attrs: - self.ipv6 = resource_set.resource_set_ipv6(attrs["ipv6"]) - else: - assert name == "route_origin", "Unexpected name %s, stack %s" % (name, stack) - self.action = attrs["action"] - self.self_id = attrs["self_id"] - self.route_origin_id = attrs.get("route_origin_id") + assert name == "route_origin", "Unexpected name %s, stack %s" % (name, stack) + self.read_attrs(attrs) + if self.asn is not None: + self.asn = long(self.asn) + if self.ipv4 is not None: + self.ipv4 = resource_set.resource_set_ipv4(self.ipv4) + if self.ipv6 is not None: + self.ipv6 = resource_set.resource_set_ipv6(self.ipv4) def endElement(self, stack, name, text): - if name not in ("suppress_publication", "resources"): - assert name == "route_origin", "Unexpected name %s, stack %s" % (name, stack) - stack.pop() + assert name == "route_origin", "Unexpected name %s, stack %s" % (name, stack) + stack.pop() def __str__(self): - xml = (' <route_origin action="%s" self_id="%s"%s>\n' - % (self.action, self.self_id, self.attr_maybe("route_origin_id"))) - asn = getattr(self, "asn", None) - if asn is not None: - xml += ' <resources asn="%d"' % asn - if self.ipv4 is not None: - xml += ' ipv4="%s"' % str(self.ipv4) - if self.ipv6 is not None: - xml += ' ipv6="%s"' % str(self.ipv6) - xml += '/>\n' - return xml + ' </route_origin>\n' + return ' <route_origin%s/>\n' % self.print_attrs() class resource_class_elt(base_elt): + attributes = ("as", "req_as", "ipv4", "req_ipv4", "ipv6", "req_ipv6") + def startElement(self, stack, name, attrs): assert name == "resource_class", "Unexpected name %s, stack %s" % (name, stack) - if "as" in attrs: - self.as = resource_set.resource_set_as(attrs["as"]) - if "req_as" in attrs: - self.req_as = resource_set.resource_set_as(attrs["req_as"]) - if "ipv4" in attrs: - self.ipv4 = resource_set.resource_set_ipv4(attrs["ipv4"]) - if "req_ipv4" in attrs: - self.req_ipv4 = resource_set.resource_set_ipv4(attrs["req_ipv4"]) - if "ipv6" in attrs: - self.ipv6 = resource_set.resource_set_ipv6(attrs["ipv6"]) - if "req_ipv6" in attrs: - self.req_ipv6 = resource_set.resource_set_ipv6(attrs["req_ipv6"]) - + self.read_attrs(attrs) + if self.as is not None: + self.as = resource_set.resource_set_as(self.as) + if self.req_as is not None: + self.req_as = resource_set.resource_set_as(self.req_as) + if self.ipv4 is not None: + self.ipv4 = resource_set.resource_set_ipv4(self.ipv4) + if self.req_ipv4 is not None: + self.req_ipv4 = resource_set.resource_set_ipv4(self.req_ipv4) + if self.ipv6 is not None: + self.ipv6 = resource_set.resource_set_ipv6(self.ipv6) + if self.req_ipv6 is not None: + self.req_ipv6 = resource_set.resource_set_ipv6(self.req_ipv6) + + def endElement(self, stack, name, text): + assert name == "resource_class", "Unexpected name %s, stack %s" % (name, stack) + stack.pop() + def __str__(self): - xml = ' <resource_class' - for k in ("as", "req_as", "ipv4", "req_ipv4", "ipv6", "req_ipv6"): - v = getattr(self, k, None) - if v is not None: - xml += ' %s="%s"' % (k, v) - return xml + '/>\n' + return ' <resource_class%s/>\n' % self.print_attrs() class list_resources_elt(base_elt): + attributes = ("self_id", "child_id", "valid_until") + def __init__(self): self.resources = [] @@ -330,26 +273,24 @@ class list_resources_elt(base_elt): rc.startElement(stack, name, attrs) else: assert name == "list_resources", "Unexpected name %s, stack %s" % (name, stack) - self.self_id = attrs["self_id"] - self.child_id = attrs.get("child_id") - self.valid_until = attrs.get("valid_until") + self.read_attrs(attrs) def __str__(self): - xml = (' <list_resources self_id="%s"%s%s>\n' - % (self.self_id, self.attr_maybe("child_id"), self.attr_maybe("valid_until"))) + xml = ' <list_resources%s>\n' % self.print_attrs() for i in self.resources: xml += str(i) return xml + ' </list_resources>\n' class report_error_elt(base_elt): + attributes = ("self_id", "error_code") + def startElement(self, stack, name, attrs): assert name == "report_error", "Unexpected name %s, stack %s" % (name, stack) - self.self_id = attrs["self_id"] - self.error_code = attrs["error_code"] + self.read_attrs(attrs) def __str__(self): - return ' <report_error self_id="%s" error_code="%s"/>\n' % (self.self_id, self.error_code) + return ' <report_error%s/>\n' % self.print_attrs() class msg(list): """ @@ -386,9 +327,7 @@ class msg(list): def __str__(self): return ('<?xml version="1.0" encoding="US-ASCII" ?>\n' - '<msg xmlns="%s"\n' - ' version="%d"\n' - ' type="%s">\n' + '<msg xmlns="%s" version="%d" type="%s">\n' '%s</msg>\n' % (self.spec_uri, self.version, self.type, "".join(map(str, self)))) diff --git a/scripts/xml-parse-test.py b/scripts/xml-parse-test.py index 1f7954c3..96ac55ff 100755 --- a/scripts/xml-parse-test.py +++ b/scripts/xml-parse-test.py @@ -2,7 +2,7 @@ import glob, rpki.up_down, rpki.left_right, rpki.relaxng, xml.sax -if False: +if True: files = glob.glob("up-down-protocol-samples/*.xml") files.sort() for f in files: |