diff options
Diffstat (limited to 'rpkid/rpki/https.py')
-rw-r--r-- | rpkid/rpki/https.py | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/rpkid/rpki/https.py b/rpkid/rpki/https.py index 26b1cd87..d9bf4488 100644 --- a/rpkid/rpki/https.py +++ b/rpkid/rpki/https.py @@ -776,3 +776,46 @@ def build_https_ta_cache(certs): """ return set(certs) + +class caller(object): + """ + Handle client-side mechanics for protocols based on HTTPS, CMS, and + rpki.xml_utils. Calling sequence is intended to nest within + rpki.async.sync_wrapper. + """ + + debug = False + + def __init__(self, proto, client_key, client_cert, server_ta, server_cert, url, debug = None): + self.proto = proto + self.client_key = client_key + self.client_cert = client_cert + self.server_ta = server_ta + self.server_cert = server_cert + self.url = url + if debug is not None: + self.debug = debug + + def __call__(self, cb, eb, *pdus): + + def done(cms): + msg, xml = self.proto.cms_msg.unwrap(cms, (self.server_ta, self.server_cert), pretty_print = True) + if self.debug: + print "<!-- Reply -->" + print xml + cb(msg) + + msg = self.proto.msg.query(*pdus) + cms, xml = self.proto.cms_msg.wrap(msg, self.client_key, self.client_cert, pretty_print = True) + if self.debug: + print "<!-- Query -->" + print xml + + client( + client_key = self.client_key, + client_cert = self.client_cert, + server_ta = self.server_ta, + url = self.url, + msg = cms, + callback = done, + errback = eb) |