From: Michal 'vorner' Vaner Date: Thu, 26 Jan 2012 15:35:23 +0000 (+0100) Subject: [1542] Convert the rcodes to exceptions X-Git-Tag: trac2351_base~273^2~11 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=28cd9c1145fd52f2729f1f9f4d28c263ca2cc0d4;p=thirdparty%2Fkea.git [1542] Convert the rcodes to exceptions So we can distinguish the errors. --- diff --git a/src/lib/server_common/socket_request.cc b/src/lib/server_common/socket_request.cc index 5b71ab2640..bc4b984ac0 100644 --- a/src/lib/server_common/socket_request.cc +++ b/src/lib/server_common/socket_request.cc @@ -133,6 +133,14 @@ readRequestSocketAnswer(isc::data::ConstElementPtr recv_msg, int rcode; isc::data::ConstElementPtr answer = isc::config::parseAnswer(rcode, recv_msg); + // Translate known rcodes to the corresponding exceptions + if (rcode == 2) { + isc_throw(SocketRequestor::SocketAllocateError, answer->str()); + } + if (rcode == 3) { + isc_throw(SocketRequestor::ShareError, answer->str()); + } + // The unknown exceptions if (rcode != 0) { isc_throw(isc::config::CCSessionError, "Error response when requesting socket: " << answer->str()); diff --git a/src/lib/server_common/socket_request.h b/src/lib/server_common/socket_request.h index 7398ee7d84..ea22fa6036 100644 --- a/src/lib/server_common/socket_request.h +++ b/src/lib/server_common/socket_request.h @@ -143,6 +143,7 @@ public: /// by a different application, the socket creator doesn't have enough /// privileges, or for some kind of similar reason. class SocketAllocateError : public NonFatalSocketError { + public: SocketAllocateError(const char* file, size_t line, const char* what) : NonFatalSocketError(file, line, what) { } diff --git a/src/lib/server_common/tests/socket_requestor_test.cc b/src/lib/server_common/tests/socket_requestor_test.cc index fc5b3038e5..e917e0cb4c 100644 --- a/src/lib/server_common/tests/socket_requestor_test.cc +++ b/src/lib/server_common/tests/socket_requestor_test.cc @@ -250,8 +250,14 @@ TEST_F(SocketRequestorTest, testBadRequestAnswers) { } // Send back an error response + // A generic one first session.getMessages()->add(createAnswer(1, "error")); ASSERT_THROW(doRequest(), CCSessionError); + // Now some with specific exceptions + session.getMessages()->add(createAnswer(2, "error")); + ASSERT_THROW(doRequest(), SocketRequestor::SocketAllocateError); + session.getMessages()->add(createAnswer(3, "error")); + ASSERT_THROW(doRequest(), SocketRequestor::ShareError); } // Helper function to create the release commands as we expect