diff options
author | Rob Austein <sra@hactrn.net> | 2007-10-23 07:20:27 +0000 |
---|---|---|
committer | Rob Austein <sra@hactrn.net> | 2007-10-23 07:20:27 +0000 |
commit | 66445ed4ac325b63a6f8b1138d02ffb4d6314b3b (patch) | |
tree | dc3692bb7782c9a47ccd743f4715bde8abfd818d /scripts/rpki | |
parent | 4eda44bbddd2bdf2963ed285746f9a197725f959 (diff) |
Insomnia
svn path=/scripts/Makefile; revision=1188
Diffstat (limited to 'scripts/rpki')
-rw-r--r-- | scripts/rpki/left_right.py | 11 | ||||
-rw-r--r-- | scripts/rpki/up_down.py | 21 |
2 files changed, 29 insertions, 3 deletions
diff --git a/scripts/rpki/left_right.py b/scripts/rpki/left_right.py index 820f506e..a282a7b8 100644 --- a/scripts/rpki/left_right.py +++ b/scripts/rpki/left_right.py @@ -474,7 +474,16 @@ class child_elt(data_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) + try: + r_msg = q_msg.serve_top_level(gctx, self) + except Exception, data: + traceback.print_exc() + r_msg = q_msg.serve_error(data) + # + # Exceptions from this point on are problematic, as we have no + # sane way of reporting errors in the error reporting mechanism. + # May require refactoring, ignore the issue for now. + # r_elt = r_msg.toXML() rpki.relaxng.up_down.assertValid(r_elt) return rpki.cms.xml_sign(r_elt, bsc.private_key_id, bsc.signing_cert) diff --git a/scripts/rpki/up_down.py b/scripts/rpki/up_down.py index 9eaddd20..268134ca 100644 --- a/scripts/rpki/up_down.py +++ b/scripts/rpki/up_down.py @@ -385,6 +385,17 @@ class error_response_pdu(base_elt): 1302 : "Revoke - no such key", 2001 : "Internal Server Error - Request not performed" } + exceptions = {} + + def __init__(self, exception = None): + """Initialize an error_response PDU from an exception object.""" + if exception is not None: + if exception in self.exceptions: + self.status = exceptions[exception] + else: + self.status = 2001 + self.description = str(exception) + def endElement(self, stack, name, text): """Handle "error_response" PDU.""" if name == "status": @@ -392,8 +403,6 @@ class error_response_pdu(base_elt): if code not in self.codes: raise rpki.exceptions.BadStatusCode, "%s is not a known status code" self.status = code - elif name == "last_message_processed": - self.last_message_processed = text elif name == "description": self.description = text else: @@ -457,6 +466,14 @@ class message_pdu(base_elt): self.payload.serve_pdu(gctx, self, r_msg, child) return r_msg + def serve_error(self, exception): + """Generate an error_response message PDU.""" + r_msg = message_pdu() + r_msg.sender = self.receiver + r_msg.receiver = self.sender + r_msg.payload = error_response_pdu(exception) + return r_msg + @classmethod def make_query(cls, payload, sender = "tweedledee", recipient = "tweedledum"): """Construct one message PDU.""" |