aboutsummaryrefslogtreecommitdiff
path: root/scripts/rpki/left_right.py
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/rpki/left_right.py')
-rw-r--r--scripts/rpki/left_right.py17
1 files changed, 16 insertions, 1 deletions
diff --git a/scripts/rpki/left_right.py b/scripts/rpki/left_right.py
index 5611eaac..35d8fd65 100644
--- a/scripts/rpki/left_right.py
+++ b/scripts/rpki/left_right.py
@@ -3,7 +3,7 @@
"""RPKI "left-right" protocol."""
import base64, lxml.etree, time
-import rpki.sax_utils, rpki.resource_set, rpki.x509, rpki.sql, rpki.exceptions, rpki.pkcs10, rpki.https
+import rpki.sax_utils, rpki.resource_set, rpki.x509, rpki.sql, rpki.exceptions, rpki.pkcs10, rpki.https, rpki.up_down, rpki.relaxng
xmlns = "http://www.hactrn.net/uris/rpki/left-right-spec/"
@@ -372,6 +372,21 @@ class child_elt(data_elt):
self.make_b64elt(elt, "peer_ta", self.peer_ta.get_DER())
return elt
+ def serve_up_down(self, gctx, query):
+ """Outer layer of server handling for one up-down PDU from this child."""
+ bsc = bsc_elt.sql_fetch(gctx.db, gctx.cur, self.bsc_id)
+ if bsc is None:
+ raise rpki.exceptions.NotFound, "Could not find BSC %s" % self.bsc_id
+ q_elt = rpki.cms.xml_decode(query, self.peer_ta)
+ rpki.relaxng.up_down.assertValid(q_elt)
+ q_msg = rpki.up_down.sax_handler.saxify(q_elt)
+ if q_msg.sender != str(self.child_id):
+ raise rpki.exceptions.NotFound, "Unexpected XML sender %s" % q_msg.sender
+ r_msg = q_msg.serve_top_level(gctx, self)
+ r_elt = r_msg.toXML()
+ rpki.relaxng.up_down.assertValid(r_elt)
+ return rpki.cms.xml_encode(r_elt, bsc.private_key_id, bsc.signing_cert)
+
class repository_elt(data_elt):
"""<repository/> element."""