def __init__(self, request): self.finished = False request.notifyFinish().addCallbacks(self._responseSucceeded, self._responseFailed) jsondata = request.content.getvalue() try: data = jsonlib.loads(jsondata) except (jsonlib.DecodeError, ValueError): if not self.finished: request.setResponseCode(400, 'Could not decode JSON data') request.finish() return try: target_uri = data.get('target_uri', '') if not re.match('^(sip:|sips:)', target_uri): target_uri = 'sip:%s' % target_uri target_uri = SIPURI.parse(target_uri) except SIPCoreError: if not self.finished: request.setResponseCode(400, 'Supplied SIP URI is invalid') request.finish() return cache = DataCache() data = cache.get(str(target_uri)) if data is not None: if not self.finished: request.setHeader('Content-Type', 'application/json') request.write(jsonlib.dumps(data)) request.finish() return self._target_uri = target_uri self._request = request self._handler = SIPOptionsRequestHandler(target_uri) NotificationCenter().add_observer(self, sender=self._handler) self._handler.start()
def _send_response(self, notification_data): data = notification_data.__dict__.copy() timestamp = data.pop('timestamp') data['timestamp'] = str(timestamp) cache = DataCache() cache.put(str(self._target_uri), data) if not self.finished: self._request.setHeader('Content-Type', 'application/json') self._request.write(jsonlib.dumps(data)) self._request.finish()