added UPnPError, uPnpService (TODO: consistent naming)