Make all of result as optional when returned error 56/71856/4
authorKyungwook Tak <k.tak@samsung.com>
Fri, 27 May 2016 10:32:49 +0000 (19:32 +0900)
committerKyungwook Tak <k.tak@samsung.com>
Mon, 30 May 2016 02:26:04 +0000 (11:26 +0900)
Handle optional return values needed for server to catch thrown
exceptions in service level because all commands should be treated
generically.

Change-Id: Ieef072a382fcd0add195fa6747c31473901337e2
Signed-off-by: Kyungwook Tak <k.tak@samsung.com>
src/framework/client/engine-manager.cpp
src/framework/client/web-protection.cpp
src/framework/common/serialization.h
src/framework/service/cs-logic.cpp
src/framework/service/em-logic.cpp
src/framework/service/server-service.cpp
src/framework/service/wp-logic.cpp

index 5e1e945..51df74f 100644 (file)
@@ -39,21 +39,19 @@ using namespace Csr;
        else if (poutput == nullptr)                   \
                return CSR_ERROR_INVALID_PARAMETER
 
-#define STRING_GETTER(engine, cid, poutput)                                \
-       do {                                                                   \
-               GETTER_PARAM_CHECK(engine, poutput);                               \
-               auto h = reinterpret_cast<Csr::Client::Handle *>(engine);          \
-               auto ret = h->dispatch<std::pair<int, std::string>>(               \
-                               Csr::CommandId::cid, h->getContext());                     \
-               if (ret.first != CSR_ERROR_NONE) {                                 \
-                       ERROR("Error to get string about engine. ret: " << ret.first); \
-                       return ret.first;                                              \
-               }                                                                  \
-               auto output = strdup(ret.second.c_str());                          \
-               if (output == nullptr)                                             \
-                       return CSR_ERROR_OUT_OF_MEMORY;                                \
-               *poutput = output;                                                 \
-               return CSR_ERROR_NONE;                                             \
+#define STRING_GETTER(engine, cid, poutput)                                   \
+       do {                                                                      \
+               GETTER_PARAM_CHECK(engine, poutput);                                  \
+               auto h = reinterpret_cast<Csr::Client::Handle *>(engine);             \
+               auto ret = h->dispatch<std::pair<int, std::shared_ptr<std::string>>>( \
+                               Csr::CommandId::cid, h->getContext());                        \
+               if (ret.first == CSR_ERROR_NONE && ret.second) {                      \
+                       auto output = strdup(ret.second->c_str());                        \
+                       if (output == nullptr)                                            \
+                               return CSR_ERROR_OUT_OF_MEMORY;                               \
+                       *poutput = output;                                                \
+               }                                                                     \
+               return ret.first;                                                     \
        } while (false)
 
 namespace {
@@ -152,16 +150,13 @@ int csr_engine_get_latest_update_time(csr_engine_h engine, time_t *ptime)
        GETTER_PARAM_CHECK(engine, ptime);
 
        auto h = reinterpret_cast<Csr::Client::Handle *>(engine);
-       auto ret = h->dispatch<std::pair<int, int64_t>>(
+       auto ret = h->dispatch<std::pair<int, std::shared_ptr<int64_t>>>(
                        Csr::CommandId::EM_GET_UPDATED_TIME, h->getContext());
 
-       if (ret.first != CSR_ERROR_NONE) {
-               ERROR("Error to get updated time. ret: " << ret.first);
-               return ret.first;
-       }
+       if (ret.first == CSR_ERROR_NONE && ret.second)
+               *ptime = static_cast<time_t>(*ret.second);
 
-       *ptime = static_cast<time_t>(ret.second);
-       return CSR_ERROR_NONE;
+       return ret.first;
 
        EXCEPTION_SAFE_END
 }
@@ -174,16 +169,13 @@ int csr_engine_get_activated(csr_engine_h engine, csr_activated_e *pactivated)
        GETTER_PARAM_CHECK(engine, pactivated);
 
        auto h = reinterpret_cast<Csr::Client::Handle *>(engine);
-       auto ret = h->dispatch<std::pair<int, int>>(
+       auto ret = h->dispatch<std::pair<int, std::shared_ptr<int>>>(
                        Csr::CommandId::EM_GET_ACTIVATED, h->getContext());
 
-       if (ret.first != CSR_ERROR_NONE) {
-               ERROR("Error to get activated. ret: " << ret.first);
-               return ret.first;
-       }
+       if (ret.first == CSR_ERROR_NONE && ret.second)
+               *pactivated = static_cast<csr_activated_e>(*ret.second);
 
-       *pactivated = static_cast<csr_activated_e>(ret.second);
-       return CSR_ERROR_NONE;
+       return ret.first;
 
        EXCEPTION_SAFE_END
 }
@@ -196,16 +188,13 @@ int csr_engine_get_state(csr_engine_h engine, csr_state_e *pstate)
        GETTER_PARAM_CHECK(engine, pstate);
 
        auto h = reinterpret_cast<Csr::Client::Handle *>(engine);
-       auto ret = h->dispatch<std::pair<int, int>>(
+       auto ret = h->dispatch<std::pair<int, std::shared_ptr<int>>>(
                        Csr::CommandId::EM_GET_STATE, h->getContext());
 
-       if (ret.first != CSR_ERROR_NONE) {
-               ERROR("Error to get state. ret: " << ret.first);
-               return ret.first;
-       }
+       if (ret.first == CSR_ERROR_NONE && ret.second)
+               *pstate = static_cast<csr_state_e>(*ret.second);
 
-       *pstate = static_cast<csr_state_e>(ret.second);
-       return CSR_ERROR_NONE;
+       return ret.first;
 
        EXCEPTION_SAFE_END
 }
index 36ba467..8080d2c 100644 (file)
@@ -117,15 +117,12 @@ int csr_wp_check_url(csr_wp_context_h handle, const char *url,
                                   h->getContext(),
                                   std::string(url));
 
-       if (ret.first != CSR_ERROR_NONE) {
-               ERROR("Error! ret: " << ret.first);
-               return ret.first;
-       }
+       if (ret.second)
+               h->add(ResultPtr(ret.second));
 
-       h->add(ResultPtr(ret.second));
        *presult = reinterpret_cast<csr_wp_check_result_h>(ret.second);
 
-       return CSR_ERROR_NONE;
+       return ret.first;
 
        EXCEPTION_SAFE_END
 }
index 358e885..aa7605f 100644 (file)
@@ -367,6 +367,15 @@ struct Deserialization {
                        stream.read(sizeof(*value), value);
                }
        }
+       static void Deserialize(IStream &stream, std::shared_ptr<uint32_t> &value)
+       {
+               if (stream.empty()) {
+                       value.reset();
+               } else {
+                       value.reset(new uint32_t);
+                       stream.read(sizeof(*value), value.get());
+               }
+       }
 
        // int32
        static void Deserialize(IStream &stream, int32_t &value)
@@ -382,6 +391,15 @@ struct Deserialization {
                        stream.read(sizeof(*value), value);
                }
        }
+       static void Deserialize(IStream &stream, std::shared_ptr<int32_t> &value)
+       {
+               if (stream.empty()) {
+                       value.reset();
+               } else {
+                       value.reset(new int32_t);
+                       stream.read(sizeof(*value), value.get());
+               }
+       }
 
        // unsigned int64
        static void Deserialize(IStream &stream, uint64_t &value)
@@ -397,6 +415,15 @@ struct Deserialization {
                        stream.read(sizeof(*value), value);
                }
        }
+       static void Deserialize(IStream &stream, std::shared_ptr<uint64_t> &value)
+       {
+               if (stream.empty()) {
+                       value.reset();
+               } else {
+                       value.reset(new uint64_t);
+                       stream.read(sizeof(*value), value.get());
+               }
+       }
 
        // int64
        static void Deserialize(IStream &stream, int64_t &value)
@@ -412,6 +439,15 @@ struct Deserialization {
                        stream.read(sizeof(*value), value);
                }
        }
+       static void Deserialize(IStream &stream, std::shared_ptr<int64_t> &value)
+       {
+               if (stream.empty()) {
+                       value.reset();
+               } else {
+                       value.reset(new int64_t);
+                       stream.read(sizeof(*value), value.get());
+               }
+       }
 
        // bool
        static void Deserialize(IStream &stream, bool &value)
@@ -442,6 +478,7 @@ struct Deserialization {
                value = static_cast<csr_error_e>(val);
        }
 
+       // std::string
        template <typename T, typename R, typename A>
        static void Deserialize(IStream &stream, std::basic_string<T, R, A> &str)
        {
@@ -466,6 +503,20 @@ struct Deserialization {
                }
        }
 
+       template <typename T, typename R, typename A>
+       static void Deserialize(IStream &stream, std::shared_ptr<std::basic_string<T, R, A>> &str)
+       {
+               if (stream.empty()) {
+                       str.reset();
+               } else {
+                       int length;
+                       stream.read(sizeof(length), &length);
+                       std::vector<T> buf(length);
+                       stream.read(length * sizeof(T), buf.data());
+                       str.reset(new std::basic_string<T, R, A>(buf.data(), buf.data() + length));
+               }
+       }
+
        // STL templates
 
        // std::list
index b6be0dd..5f3d089 100644 (file)
@@ -578,7 +578,7 @@ RawBuffer CsLogic::getIgnored(const std::string &filepath)
 
        EXCEPTION_GUARD_CLOSER(ret)
 
-       return BinaryQueue::Serialize(ret, CsDetected()).pop();
+       return BinaryQueue::Serialize(ret).pop();
 
        EXCEPTION_GUARD_END
 }
index 6fbf6b1..5e7b4b2 100644 (file)
@@ -91,7 +91,7 @@ RawBuffer EmLogic::getEngineName(const EmContext &context)
 
        EXCEPTION_GUARD_CLOSER(ret)
 
-       return BinaryQueue::Serialize(ret, std::string()).pop();
+       return BinaryQueue::Serialize(ret).pop();
 
        EXCEPTION_GUARD_END
 }
@@ -123,7 +123,7 @@ RawBuffer EmLogic::getEngineVendor(const EmContext &context)
 
        EXCEPTION_GUARD_CLOSER(ret)
 
-       return BinaryQueue::Serialize(ret, std::string()).pop();
+       return BinaryQueue::Serialize(ret).pop();
 
        EXCEPTION_GUARD_END
 }
@@ -155,7 +155,7 @@ RawBuffer EmLogic::getEngineVersion(const EmContext &context)
 
        EXCEPTION_GUARD_CLOSER(ret)
 
-       return BinaryQueue::Serialize(ret, std::string()).pop();
+       return BinaryQueue::Serialize(ret).pop();
 
        EXCEPTION_GUARD_END
 }
@@ -187,7 +187,7 @@ RawBuffer EmLogic::getEngineDataVersion(const EmContext &context)
 
        EXCEPTION_GUARD_CLOSER(ret)
 
-       return BinaryQueue::Serialize(ret, std::string()).pop();
+       return BinaryQueue::Serialize(ret).pop();
 
        EXCEPTION_GUARD_END
 }
index 70c1bdc..8fc6b69 100644 (file)
@@ -108,7 +108,7 @@ RawBuffer ServerService::processCs(const ConnShPtr &conn, RawBuffer &data)
        switch (cid) {
        case CommandId::SCAN_DATA: {
                if (!hasPermission(conn))
-                       return BinaryQueue::Serialize(CSR_ERROR_PERMISSION_DENIED, CsDetected()).pop();
+                       return BinaryQueue::Serialize(CSR_ERROR_PERMISSION_DENIED).pop();
 
                CsContextShPtr cptr;
                RawBuffer data;
@@ -119,7 +119,7 @@ RawBuffer ServerService::processCs(const ConnShPtr &conn, RawBuffer &data)
 
        case CommandId::SCAN_FILE: {
                if (!hasPermission(conn))
-                       return BinaryQueue::Serialize(CSR_ERROR_PERMISSION_DENIED, CsDetected()).pop();
+                       return BinaryQueue::Serialize(CSR_ERROR_PERMISSION_DENIED).pop();
 
                CsContextShPtr cptr;
                std::string filepath;
@@ -130,7 +130,7 @@ RawBuffer ServerService::processCs(const ConnShPtr &conn, RawBuffer &data)
 
        case CommandId::GET_SCANNABLE_FILES: {
                if (!hasPermission(conn))
-                       return BinaryQueue::Serialize(CSR_ERROR_PERMISSION_DENIED, StrSet()).pop();
+                       return BinaryQueue::Serialize(CSR_ERROR_PERMISSION_DENIED).pop();
 
                std::string dir;
                q.Deserialize(dir);
@@ -160,7 +160,7 @@ RawBuffer ServerService::processCs(const ConnShPtr &conn, RawBuffer &data)
 
        case CommandId::GET_DETECTED: {
                if (!hasPermission(conn))
-                       return BinaryQueue::Serialize(CSR_ERROR_PERMISSION_DENIED, CsDetected()).pop();
+                       return BinaryQueue::Serialize(CSR_ERROR_PERMISSION_DENIED).pop();
 
                std::string filepath;
                q.Deserialize(filepath);
@@ -170,7 +170,7 @@ RawBuffer ServerService::processCs(const ConnShPtr &conn, RawBuffer &data)
 
        case CommandId::GET_DETECTED_LIST: {
                if (!hasPermission(conn))
-                       return BinaryQueue::Serialize(CSR_ERROR_PERMISSION_DENIED, std::vector<CsDetected>()).pop();
+                       return BinaryQueue::Serialize(CSR_ERROR_PERMISSION_DENIED).pop();
 
                StrSet dirSet;
                q.Deserialize(dirSet);
@@ -180,7 +180,7 @@ RawBuffer ServerService::processCs(const ConnShPtr &conn, RawBuffer &data)
 
        case CommandId::GET_IGNORED: {
                if (!hasPermission(conn))
-                       return BinaryQueue::Serialize(CSR_ERROR_PERMISSION_DENIED, CsDetected()).pop();
+                       return BinaryQueue::Serialize(CSR_ERROR_PERMISSION_DENIED).pop();
 
                std::string filepath;
                q.Deserialize(filepath);
@@ -190,7 +190,7 @@ RawBuffer ServerService::processCs(const ConnShPtr &conn, RawBuffer &data)
 
        case CommandId::GET_IGNORED_LIST: {
                if (!hasPermission(conn))
-                       return BinaryQueue::Serialize(CSR_ERROR_PERMISSION_DENIED, std::vector<CsDetected>()).pop();
+                       return BinaryQueue::Serialize(CSR_ERROR_PERMISSION_DENIED).pop();
 
                StrSet dirSet;
                q.Deserialize(dirSet);
@@ -206,7 +206,7 @@ RawBuffer ServerService::processCs(const ConnShPtr &conn, RawBuffer &data)
 RawBuffer ServerService::processWp(const ConnShPtr &conn, RawBuffer &data)
 {
        if (!hasPermission(conn))
-               return BinaryQueue::Serialize(CSR_ERROR_PERMISSION_DENIED, WpResult()).pop();
+               return BinaryQueue::Serialize(CSR_ERROR_PERMISSION_DENIED).pop();
 
        BinaryQueue q;
        q.push(data);
@@ -243,7 +243,7 @@ RawBuffer ServerService::processAdmin(const ConnShPtr &conn, RawBuffer &data)
        switch (cid) {
        case CommandId::EM_GET_NAME: {
                if (!hasPerm)
-                       return BinaryQueue::Serialize(CSR_ERROR_PERMISSION_DENIED, std::string()).pop();
+                       return BinaryQueue::Serialize(CSR_ERROR_PERMISSION_DENIED).pop();
 
                EmContextShPtr cptr;
                q.Deserialize(cptr);
@@ -253,7 +253,7 @@ RawBuffer ServerService::processAdmin(const ConnShPtr &conn, RawBuffer &data)
 
        case CommandId::EM_GET_VENDOR: {
                if (!hasPerm)
-                       return BinaryQueue::Serialize(CSR_ERROR_PERMISSION_DENIED, std::string()).pop();
+                       return BinaryQueue::Serialize(CSR_ERROR_PERMISSION_DENIED).pop();
 
                EmContextShPtr cptr;
                q.Deserialize(cptr);
@@ -263,7 +263,7 @@ RawBuffer ServerService::processAdmin(const ConnShPtr &conn, RawBuffer &data)
 
        case CommandId::EM_GET_VERSION: {
                if (!hasPerm)
-                       return BinaryQueue::Serialize(CSR_ERROR_PERMISSION_DENIED, std::string()).pop();
+                       return BinaryQueue::Serialize(CSR_ERROR_PERMISSION_DENIED).pop();
 
                EmContextShPtr cptr;
                q.Deserialize(cptr);
@@ -273,7 +273,7 @@ RawBuffer ServerService::processAdmin(const ConnShPtr &conn, RawBuffer &data)
 
        case CommandId::EM_GET_DATA_VERSION: {
                if (!hasPerm)
-                       return BinaryQueue::Serialize(CSR_ERROR_PERMISSION_DENIED, std::string()).pop();
+                       return BinaryQueue::Serialize(CSR_ERROR_PERMISSION_DENIED).pop();
 
                EmContextShPtr cptr;
                q.Deserialize(cptr);
@@ -283,7 +283,7 @@ RawBuffer ServerService::processAdmin(const ConnShPtr &conn, RawBuffer &data)
 
        case CommandId::EM_GET_UPDATED_TIME: {
                if (!hasPerm)
-                       return BinaryQueue::Serialize(CSR_ERROR_PERMISSION_DENIED, -1).pop();
+                       return BinaryQueue::Serialize(CSR_ERROR_PERMISSION_DENIED).pop();
 
                EmContextShPtr cptr;
                q.Deserialize(cptr);
@@ -293,7 +293,7 @@ RawBuffer ServerService::processAdmin(const ConnShPtr &conn, RawBuffer &data)
 
        case CommandId::EM_GET_ACTIVATED: {
                if (!hasPerm)
-                       return BinaryQueue::Serialize(CSR_ERROR_PERMISSION_DENIED, -1).pop();
+                       return BinaryQueue::Serialize(CSR_ERROR_PERMISSION_DENIED).pop();
 
                EmContextShPtr cptr;
                q.Deserialize(cptr);
@@ -303,7 +303,7 @@ RawBuffer ServerService::processAdmin(const ConnShPtr &conn, RawBuffer &data)
 
        case CommandId::EM_GET_STATE: {
                if (!hasPerm)
-                       return BinaryQueue::Serialize(CSR_ERROR_PERMISSION_DENIED, -1).pop();
+                       return BinaryQueue::Serialize(CSR_ERROR_PERMISSION_DENIED).pop();
 
                EmContextShPtr cptr;
                q.Deserialize(cptr);
index 449033e..b4b78d7 100644 (file)
@@ -82,7 +82,7 @@ RawBuffer WpLogic::checkUrl(const WpContext &context, const std::string &url)
 
        EXCEPTION_GUARD_CLOSER(ret)
 
-       return BinaryQueue::Serialize(ret, WpResult()).pop();
+       return BinaryQueue::Serialize(ret).pop();
 
        EXCEPTION_GUARD_END
 }