WebDAV error codes: map to SyncMLStatus
This patch enhances error handling so that a more specific TransportStatusException with the right SyncMLStatus inside is thrown. This is necessary to report back authentication errors.
This commit is contained in:
parent
8de6b8b3dc
commit
b16b37c395
|
@ -256,11 +256,22 @@ int Session::propIterator(void *userdata,
|
|||
|
||||
void Session::check(int error)
|
||||
{
|
||||
if (error) {
|
||||
switch (error) {
|
||||
case NE_AUTH:
|
||||
SE_THROW_EXCEPTION_STATUS(TransportStatusException,
|
||||
StringPrintf("Neon error code %d: %s",
|
||||
error,
|
||||
ne_get_error(m_session)),
|
||||
STATUS_UNAUTHORIZED);
|
||||
break;
|
||||
case NE_OK:
|
||||
break;
|
||||
default:
|
||||
SE_THROW_EXCEPTION(TransportException,
|
||||
StringPrintf("Neon error code %d: %s",
|
||||
error,
|
||||
ne_get_error(m_session)));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -426,7 +437,9 @@ void Request::check(int error)
|
|||
{
|
||||
m_session.check(error);
|
||||
if (getStatus()->klass != 2) {
|
||||
SE_THROW(std::string("bad status: ") + Status2String(getStatus()));
|
||||
SE_THROW_EXCEPTION_STATUS(TransportStatusException,
|
||||
std::string("bad status: ") + Status2String(getStatus()),
|
||||
SyncMLStatus(getStatus()->code));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -10,6 +10,8 @@
|
|||
#include <boost/algorithm/string/replace.hpp>
|
||||
#include <boost/algorithm/string/predicate.hpp>
|
||||
|
||||
#include <syncevo/TransportAgent.h>
|
||||
|
||||
SE_BEGIN_CXX
|
||||
|
||||
/**
|
||||
|
@ -25,14 +27,16 @@ public:
|
|||
|
||||
virtual std::string getURL()
|
||||
{
|
||||
std::string url;
|
||||
if (m_context) {
|
||||
vector<string> urls = m_context->getSyncURL();
|
||||
return urls.empty() ?
|
||||
"" :
|
||||
urls.front();
|
||||
} else {
|
||||
return "";
|
||||
if (!urls.empty()) {
|
||||
url = urls.front();
|
||||
std::string username = m_context->getUsername();
|
||||
boost::replace_all(url, "%u", username);
|
||||
}
|
||||
}
|
||||
return url;
|
||||
}
|
||||
|
||||
virtual bool verifySSLHost()
|
||||
|
@ -286,8 +290,10 @@ TrackingSyncSource::InsertItemResult WebDAVSource::insertItem(const string &uid,
|
|||
// created
|
||||
break;
|
||||
default:
|
||||
SE_THROW(std::string("unexpected status for insert: ") +
|
||||
Neon::Status2String(req.getStatus()));
|
||||
SE_THROW_EXCEPTION_STATUS(TransportStatusException,
|
||||
std::string("unexpected status for insert: ") +
|
||||
Neon::Status2String(req.getStatus()),
|
||||
SyncMLStatus(req.getStatus()->code));
|
||||
break;
|
||||
}
|
||||
rev = getETag(req);
|
||||
|
@ -331,8 +337,10 @@ TrackingSyncSource::InsertItemResult WebDAVSource::insertItem(const string &uid,
|
|||
SE_THROW("unexpected creation instead of update");
|
||||
break;
|
||||
default:
|
||||
SE_THROW(std::string("unexpected status for update: ") +
|
||||
Neon::Status2String(req.getStatus()));
|
||||
SE_THROW_EXCEPTION_STATUS(TransportStatusException,
|
||||
std::string("unexpected status for update: ") +
|
||||
Neon::Status2String(req.getStatus()),
|
||||
SyncMLStatus(req.getStatus()->code));
|
||||
break;
|
||||
}
|
||||
rev = getETag(req);
|
||||
|
@ -401,8 +409,10 @@ void WebDAVSource::removeItem(const string &uid)
|
|||
// the expected outcome
|
||||
break;
|
||||
default:
|
||||
SE_THROW(std::string("unexpected status for removal: ") +
|
||||
Neon::Status2String(req.getStatus()));
|
||||
SE_THROW_EXCEPTION_STATUS(TransportStatusException,
|
||||
std::string("unexpected status for removal: ") +
|
||||
Neon::Status2String(req.getStatus()),
|
||||
SyncMLStatus(req.getStatus()->code));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue