diff --git a/upnp.py b/upnp.py index 33fd01c..473fa06 100644 --- a/upnp.py +++ b/upnp.py @@ -7,6 +7,10 @@ from twisted.web import soap import SOAPpy +class errorCode(Exception): + def __init__(self, status): + self.status = status + class UPnPPublisher(soap.SOAPPublisher): """UPnP requires OUT parameters to be returned in a slightly different way than the SOAPPublisher class does.""" @@ -14,3 +18,15 @@ class UPnPPublisher(soap.SOAPPublisher): def _gotResult(self, result, request, methodName): response = SOAPpy.buildSOAP(kw=result, encoding=self.encoding) self._sendResponse(request, response) + + def _gotError(self, failure, request, methodName): + e = failure.value + status = 500 + if isinstance(e, SOAPpy.faultType): + fault = e + else: + if isinstance(e, errorCode): + status = e.status + fault = SOAPpy.faultType("%s:Server" % SOAPpy.NS.ENV_T, "Method %s failed." % methodName) + response = SOAPpy.buildSOAP(fault, encoding=self.encoding) + self._sendResponse(request, response, status=status)