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 __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()
class OptionsResourceHandler(object): implements(IObserver) 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 _responseSucceeded(self, data): self.finished = True def _responseFailed(self, failure): # We must not call response.finish() if it has failed self.finished = True 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() def handle_notification(self, notification): handler = getattr(self, '_NH_%s' % notification.name, Null) handler(notification) def _NH_SIPOptionsRequestDidSucceed(self, notification): NotificationCenter().remove_observer(self, sender=notification.sender) self._send_response(notification.data) def _NH_SIPOptionsRequestDidFail(self, notification): NotificationCenter().remove_observer(self, sender=notification.sender) self._send_response(notification.data)
class OptionsResourceHandler(object): implements(IObserver) 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 _responseSucceeded(self, data): self.finished = True def _responseFailed(self, failure): # We must not call response.finish() if it has failed self.finished = True 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() def handle_notification(self, notification): handler = getattr(self, '_NH_%s' % notification.name, Null) handler(notification) def _NH_SIPOptionsRequestDidSucceed(self, notification): NotificationCenter().remove_observer(self, sender=notification.sender) self._send_response(notification.data) def _NH_SIPOptionsRequestDidFail(self, notification): NotificationCenter().remove_observer(self, sender=notification.sender) self._send_response(notification.data)