From b74875f7a9ff7637aa1663cd79610bb4667f403f Mon Sep 17 00:00:00 2001 From: "kibak.yoon" Date: Sun, 21 May 2017 16:06:23 +0900 Subject: [PATCH 01/16] sensor: rec: allow option parameter that can be NULL Change-Id: I037246fc8f4d924b9af131d523c40f36557d1cd0 Signed-off-by: kibak.yoon --- src/client/sensor_recorder.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/client/sensor_recorder.cpp b/src/client/sensor_recorder.cpp index f57fae3..e599b34 100644 --- a/src/client/sensor_recorder.cpp +++ b/src/client/sensor_recorder.cpp @@ -66,9 +66,12 @@ EXPORT_API int ctx_sensor_rec_is_supported(const char* subject, bool *supported) EXPORT_API int ctx_sensor_rec_start(const char* subject, ctx_sensor_rec_option_h option) { - IF_FAIL_RETURN(subject && option, E_PARAM); + IF_FAIL_RETURN(subject, E_PARAM); + + std::string optionStr(""); - std::string optionStr = __mapToJson(*static_cast(option)); + if (option) + optionStr = __mapToJson(*static_cast(option)); GVariant* param = g_variant_new("(ss)", subject, optionStr.c_str()); return __getServiceProxy()->call(METHOD_START_REC, param); -- 2.7.4 From 1ed432d120b8859f43373707f2bd4d39721bfab9 Mon Sep 17 00:00:00 2001 From: Mu-Woong Lee Date: Mon, 29 May 2017 14:42:08 +0900 Subject: [PATCH 02/16] Add dependency to sensord sensor-recorder requires sensord, as it collects sensory data from sensord. Change-Id: Id4eff150ca9882dc1fbb8a33cd62dc693270bef1 Signed-off-by: Mu-Woong Lee --- packaging/context-sensor-recorder.spec | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packaging/context-sensor-recorder.spec b/packaging/context-sensor-recorder.spec index 21760ef..a09e3a2 100644 --- a/packaging/context-sensor-recorder.spec +++ b/packaging/context-sensor-recorder.spec @@ -18,8 +18,11 @@ BuildRequires: pkgconfig(context-common-client) Requires: %{name}-dummy = %{version}-%{release} Requires: context-service +Requires: sensord + Provides: %{name}-profile_mobile = %{version}-%{release} Provides: %{name}-profile_wearable = %{version}-%{release} + %global __provides_exclude ^.*-genuine\\.so.*$ %description -- 2.7.4 From eba46fff255466754e3db98e0444499ced19f7ec Mon Sep 17 00:00:00 2001 From: Mu-Woong Lee Date: Thu, 8 Jun 2017 21:27:46 +0900 Subject: [PATCH 03/16] Rename the class Json to avoid symbol conflicts with Jsoncpp Change-Id: Iaa1159d13e1f60808fdd540f27cc9c5a0681a1c7 Signed-off-by: Mu-Woong Lee --- src/server/legacy/RecorderClientInfo.cpp | 12 ++++++------ src/server/legacy/RecorderClientInfo.h | 10 +++++----- src/server/legacy/SensorProvider.cpp | 12 ++++++------ src/server/legacy/SensorProvider.h | 8 ++++---- src/server/legacy/heartrate/HeartRate.cpp | 2 +- src/server/legacy/heartrate/HeartRate.h | 2 +- src/server/legacy/heartrate/HeartRateLogger.cpp | 2 +- 7 files changed, 24 insertions(+), 24 deletions(-) diff --git a/src/server/legacy/RecorderClientInfo.cpp b/src/server/legacy/RecorderClientInfo.cpp index 0ab8619..2bf99d8 100644 --- a/src/server/legacy/RecorderClientInfo.cpp +++ b/src/server/legacy/RecorderClientInfo.cpp @@ -55,7 +55,7 @@ RecorderClientInfo::~RecorderClientInfo() __uninstallMonitor = NULL; } -int RecorderClientInfo::get(std::string subject, std::string pkgId, Json& option) +int RecorderClientInfo::get(std::string subject, std::string pkgId, CtxJson& option) { bool ret; std::string optStr; @@ -78,7 +78,7 @@ int RecorderClientInfo::get(std::string subject, std::string pkgId, Json& option return E_NONE; } -int RecorderClientInfo::get(std::string subject, std::vector& options) +int RecorderClientInfo::get(std::string subject, std::vector& options) { bool ret; std::string optStr; @@ -97,7 +97,7 @@ int RecorderClientInfo::get(std::string subject, std::vector& options) for (auto& tuple : tuples) { tuple->getAt(0, &optStr); - options.push_back(Json(optStr)); + options.push_back(CtxJson(optStr)); } return E_NONE; @@ -122,7 +122,7 @@ bool RecorderClientInfo::exist(std::string subject) return true; } -bool RecorderClientInfo::set(std::string subject, std::string pkgId, Json option, int retentionPeriod) +bool RecorderClientInfo::set(std::string subject, std::string pkgId, CtxJson option, int retentionPeriod) { bool ret; char *query = sqlite3_mprintf( @@ -149,11 +149,11 @@ bool RecorderClientInfo::remove(std::string subject, std::string pkgId) return ret; } -void RecorderClientInfo::getParam(std::vector &options, const char *key, float *min, float *max) +void RecorderClientInfo::getParam(std::vector &options, const char *key, float *min, float *max) { double val; - for (Json& opt : options) { + for (CtxJson& opt : options) { if (!opt.get(NULL, key, &val)) continue; if (min) diff --git a/src/server/legacy/RecorderClientInfo.h b/src/server/legacy/RecorderClientInfo.h index 9a8bbc9..0c85919 100644 --- a/src/server/legacy/RecorderClientInfo.h +++ b/src/server/legacy/RecorderClientInfo.h @@ -19,7 +19,7 @@ #include #include -#include +#include #include #include "UninstallMonitor.h" @@ -32,14 +32,14 @@ namespace ctx { RecorderClientInfo(); ~RecorderClientInfo(); - int get(std::string subject, std::string pkgId, Json& option); - int get(std::string subject, std::vector& options); + int get(std::string subject, std::string pkgId, CtxJson& option); + int get(std::string subject, std::vector& options); bool exist(std::string subject); - bool set(std::string subject, std::string pkgId, Json option, int retentionPeriod); + bool set(std::string subject, std::string pkgId, CtxJson option, int retentionPeriod); bool remove(std::string subject, std::string pkgId); - void getParam(std::vector& options, const char *key, float *min, float *max); + void getParam(std::vector& options, const char *key, float *min, float *max); static void purgeClient(std::string pkgId); static void setHostService(SensorRecorderService* hostService); diff --git a/src/server/legacy/SensorProvider.cpp b/src/server/legacy/SensorProvider.cpp index 2103376..a31a050 100644 --- a/src/server/legacy/SensorProvider.cpp +++ b/src/server/legacy/SensorProvider.cpp @@ -98,7 +98,7 @@ const char* SensorProvider::getPrivilege() return NULL; } -int SensorProvider::readRecords(Json option, std::string* projection, std::vector>* tuples) +int SensorProvider::readRecords(CtxJson option, std::string* projection, std::vector>* tuples) { int endTime = static_cast(time(NULL)) + 1; int startTime = endTime - DEFAULT_QUERY_PERIOD - 1; @@ -141,7 +141,7 @@ int SensorProvider::readRecords(Json option, std::string* projection, std::vecto return ret; } -int SensorProvider::startRecording(const std::string& pkgId, Json option) +int SensorProvider::startRecording(const std::string& pkgId, CtxJson option) { int retentionPeriod = DEFAULT_RETENTION; @@ -165,16 +165,16 @@ int SensorProvider::stopRecording(const std::string& pkgId) return __removeClient(pkgId); } -bool SensorProvider::verifyOption(Json option) +bool SensorProvider::verifyOption(CtxJson option) { std::list keys; option.getKeys(&keys); return keys.size() == 0; } -int SensorProvider::__addClient(std::string pkgId, int retentionPeriod, Json option) +int SensorProvider::__addClient(std::string pkgId, int retentionPeriod, CtxJson option) { - Json tmp; + CtxJson tmp; int ret; /* Validate the retention period */ @@ -197,7 +197,7 @@ int SensorProvider::__addClient(std::string pkgId, int retentionPeriod, Json opt int SensorProvider::__removeClient(std::string pkgId) { - std::vector options; + std::vector options; int ret; /* Remove the app's request first */ diff --git a/src/server/legacy/SensorProvider.h b/src/server/legacy/SensorProvider.h index 245ec31..0e17775 100644 --- a/src/server/legacy/SensorProvider.h +++ b/src/server/legacy/SensorProvider.h @@ -35,8 +35,8 @@ namespace ctx { const char* getSubject(); - int readRecords(Json option, std::string* projection, std::vector>* tuples); - int startRecording(const std::string& pkgId, Json option); + int readRecords(CtxJson option, std::string* projection, std::vector>* tuples); + int startRecording(const std::string& pkgId, CtxJson option); int stopRecording(const std::string& pkgId); virtual bool isSupported(); @@ -55,10 +55,10 @@ namespace ctx { virtual SensorLogger* getLogger() = 0; virtual Querier* getQuerier() = 0; - virtual bool verifyOption(Json option); + virtual bool verifyOption(CtxJson option); private: - int __addClient(std::string pkgId, int retentionPeriod, Json option); + int __addClient(std::string pkgId, int retentionPeriod, CtxJson option); int __removeClient(std::string pkgId); std::string __subject; diff --git a/src/server/legacy/heartrate/HeartRate.cpp b/src/server/legacy/heartrate/HeartRate.cpp index c13b63f..55dadf2 100644 --- a/src/server/legacy/heartrate/HeartRate.cpp +++ b/src/server/legacy/heartrate/HeartRate.cpp @@ -49,7 +49,7 @@ Querier* HeartRateProvider::getQuerier() return &__querier; } -bool HeartRateProvider::verifyOption(Json option) +bool HeartRateProvider::verifyOption(CtxJson option) { std::list keys; option.getKeys(&keys); diff --git a/src/server/legacy/heartrate/HeartRate.h b/src/server/legacy/heartrate/HeartRate.h index 03d1fb6..05b1e60 100644 --- a/src/server/legacy/heartrate/HeartRate.h +++ b/src/server/legacy/heartrate/HeartRate.h @@ -34,7 +34,7 @@ namespace ctx { protected: SensorLogger* getLogger(); Querier* getQuerier(); - bool verifyOption(Json option); + bool verifyOption(CtxJson option); private: HeartRateLogger __logger; diff --git a/src/server/legacy/heartrate/HeartRateLogger.cpp b/src/server/legacy/heartrate/HeartRateLogger.cpp index c9bdc6e..427fcf1 100644 --- a/src/server/legacy/heartrate/HeartRateLogger.cpp +++ b/src/server/legacy/heartrate/HeartRateLogger.cpp @@ -58,7 +58,7 @@ HeartRateLogger::~HeartRateLogger() bool HeartRateLogger::start() { - std::vector options; + std::vector options; RecorderClientInfo clientInfo; float interval = MAX_MEASURING_INTERVAL; -- 2.7.4 From d91f4a83e60ae3692b7e4a265fa6156369c58e62 Mon Sep 17 00:00:00 2001 From: Mu-Woong Lee Date: Fri, 9 Jun 2017 19:45:42 +0900 Subject: [PATCH 04/16] Dependency cleanup: apply the modified service & client interfaces Change-Id: I9eda5fa56e03338e5acd8768976714f5bf007d5f Signed-off-by: Mu-Woong Lee --- include/private/SensorRecorderService.h | 24 +++++++++--- packaging/context-sensor-recorder.spec | 2 +- src/server-dummy/SensorRecorderService.cpp | 29 ++++++++++++-- ...sorRecorderClient.cpp => MethodCallHandler.cpp} | 44 ++++++++++++---------- ...{SensorRecorderClient.h => MethodCallHandler.h} | 27 +++++++------ src/server/SensorRecorderService.cpp | 43 +++++++++++++++++---- src/server/SensorTimer.cpp | 5 +-- src/server/SensorTimer.h | 5 ++- 8 files changed, 127 insertions(+), 52 deletions(-) rename src/server/{SensorRecorderClient.cpp => MethodCallHandler.cpp} (70%) rename src/server/{SensorRecorderClient.h => MethodCallHandler.h} (55%) diff --git a/include/private/SensorRecorderService.h b/include/private/SensorRecorderService.h index 50f9a8b..90520f4 100644 --- a/include/private/SensorRecorderService.h +++ b/include/private/SensorRecorderService.h @@ -19,22 +19,36 @@ /* This header SHOULD NOT be included by other headers in this directory. */ -#include +#include +#include +#include namespace ctx { - class EXPORT_API SensorRecorderService : public ServiceBase { + class EXPORT_API SensorRecorderService : public IService { public: - SensorRecorderService(GDBusConnection* conn); + SensorRecorderService(); ~SensorRecorderService(); + void setServiceRunner(IServiceRunner* runner); + bool isUserService(); - protected: + const char* getServiceName(); + const char* getMethodSpecs(); + bool prepare(); void cleanup(); - ClientBase* createClient(const std::string& busName); + void onUserActivated(); + void onUserDeactivated(); + + IMethodCallHandler* createMethodCallHandler(); + + GDBusConnection* getConnection(); + + private: + IServiceRunner* __serviceRunner; }; } diff --git a/packaging/context-sensor-recorder.spec b/packaging/context-sensor-recorder.spec index a09e3a2..83efa7b 100644 --- a/packaging/context-sensor-recorder.spec +++ b/packaging/context-sensor-recorder.spec @@ -1,6 +1,6 @@ Name: context-sensor-recorder Summary: Sensor recorder service server and client libraries -Version: 1.0.0 +Version: 1.0.1 Release: 1 Group: Service Framework/Context License: Apache-2.0 diff --git a/src/server-dummy/SensorRecorderService.cpp b/src/server-dummy/SensorRecorderService.cpp index 2501a40..06cf899 100644 --- a/src/server-dummy/SensorRecorderService.cpp +++ b/src/server-dummy/SensorRecorderService.cpp @@ -14,13 +14,14 @@ * limitations under the License. */ +#include #include #include using namespace ctx; -SensorRecorderService::SensorRecorderService(GDBusConnection* conn) : - ServiceBase(conn, CTX_SENSOR_RECORDER, CTX_SENSOR_RECORDER_SPEC) +SensorRecorderService::SensorRecorderService() : + __serviceRunner(NULL) { throw std::runtime_error("Sensor Recorder is not supported"); } @@ -29,11 +30,25 @@ SensorRecorderService::~SensorRecorderService() { } +void SensorRecorderService::setServiceRunner(IServiceRunner* runner) +{ +} + bool SensorRecorderService::isUserService() { return true; } +const char* SensorRecorderService::getServiceName() +{ + return NULL; +} + +const char* SensorRecorderService::getMethodSpecs() +{ + return NULL; +} + bool SensorRecorderService::prepare() { return false; @@ -43,7 +58,15 @@ void SensorRecorderService::cleanup() { } -ClientBase* SensorRecorderService::createClient(const std::string& busName) +void SensorRecorderService::onUserActivated() +{ +} + +void SensorRecorderService::onUserDeactivated() +{ +} + +IMethodCallHandler* SensorRecorderService::createMethodCallHandler() { return NULL; } diff --git a/src/server/SensorRecorderClient.cpp b/src/server/MethodCallHandler.cpp similarity index 70% rename from src/server/SensorRecorderClient.cpp rename to src/server/MethodCallHandler.cpp index 87eed76..8a20944 100644 --- a/src/server/SensorRecorderClient.cpp +++ b/src/server/MethodCallHandler.cpp @@ -14,10 +14,9 @@ * limitations under the License. */ -#include -#include +#include #include -#include "SensorRecorderClient.h" +#include "MethodCallHandler.h" #include "legacy/SensorProvider.h" #define IDX_SUBJECT 0 @@ -25,16 +24,21 @@ using namespace ctx; -SensorRecorderClient::SensorRecorderClient(ServiceBase* hostService, const std::string& busName) : - ClientBase(hostService, busName) +MethodCallHandler::MethodCallHandler() : + __caller(NULL) { } -SensorRecorderClient::~SensorRecorderClient() +MethodCallHandler::~MethodCallHandler() { } -void SensorRecorderClient::onMethodCalled(MethodCall* methodCall) +void MethodCallHandler::setCaller(IClient* client) +{ + __caller = client; +} + +void MethodCallHandler::onMethodCalled(IMethodCall* methodCall) { try { __verifyUid(methodCall->getUid()); @@ -64,19 +68,19 @@ void SensorRecorderClient::onMethodCalled(MethodCall* methodCall) delete methodCall; } -void SensorRecorderClient::onDisconnected() +void MethodCallHandler::onDisconnected() { } -void SensorRecorderClient::__verifyUid(uid_t uid) +void MethodCallHandler::__verifyUid(uid_t uid) { - if (!isSystemUid(uid) && uid != ServiceBase::getActiveUser()) { - _E("Invalid Uid: %u != %u (ActiveUser)", uid, ServiceBase::getActiveUser()); + if (!util::isSystemUid(uid) && uid != util::getActiveUid()) { + _E("Invalid Uid: %u != %u (ActiveUser)", uid, util::getActiveUid()); throw static_cast(E_ACCESS); } } -std::string SensorRecorderClient::__extractParameter(GVariant* param, unsigned int idx) +std::string MethodCallHandler::__extractParameter(GVariant* param, unsigned int idx) { const char* val = NULL; g_variant_get_child(param, idx, "&s", &val); @@ -87,13 +91,13 @@ std::string SensorRecorderClient::__extractParameter(GVariant* param, unsigned i return val; } -void SensorRecorderClient::__startRecording(SensorProvider& provider, MethodCall& methodCall) +void MethodCallHandler::__startRecording(SensorProvider& provider, IMethodCall& methodCall) { - if (!hasPrivilege(provider.getPrivilege())) + if (!methodCall.hasPrivilege(provider.getPrivilege())) throw static_cast(E_ACCESS); // TODO: use the 'real' package id, instead of the smack label - std::string pkgId = getClientId(); + std::string pkgId = methodCall.getCallerId(); std::string option = __extractParameter(methodCall.getParam(), IDX_OPTION); _D("Option: %s", option.c_str()); @@ -101,22 +105,22 @@ void SensorRecorderClient::__startRecording(SensorProvider& provider, MethodCall methodCall.reply(error); } -void SensorRecorderClient::__stopRecording(SensorProvider& provider, MethodCall& methodCall) +void MethodCallHandler::__stopRecording(SensorProvider& provider, IMethodCall& methodCall) { // TODO: use the 'real' package id, instead of the smack label - std::string pkgId = getClientId(); + std::string pkgId = methodCall.getCallerId(); int error = provider.stopRecording(pkgId); methodCall.reply(error); } -void SensorRecorderClient::__readRecords(SensorProvider& provider, MethodCall& methodCall) +void MethodCallHandler::__readRecords(SensorProvider& provider, IMethodCall& methodCall) { - if (!hasPrivilege(provider.getPrivilege())) + if (!methodCall.hasPrivilege(provider.getPrivilege())) throw static_cast(E_ACCESS); // TODO: use the 'real' package id, instead of the smack label - std::string pkgId = getClientId(); + std::string pkgId = methodCall.getCallerId(); std::string option = __extractParameter(methodCall.getParam(), IDX_OPTION); _D("Option: %s", option.c_str()); diff --git a/src/server/SensorRecorderClient.h b/src/server/MethodCallHandler.h similarity index 55% rename from src/server/SensorRecorderClient.h rename to src/server/MethodCallHandler.h index 45cc9fe..cde2a2b 100644 --- a/src/server/SensorRecorderClient.h +++ b/src/server/MethodCallHandler.h @@ -14,31 +14,36 @@ * limitations under the License. */ -#ifndef __SENSOR_RECORDER_CLIENT_H__ -#define __SENSOR_RECORDER_CLIENT_H__ +#ifndef __SENSOR_RECORDER_METHOD_CALL_HANDLER_H__ +#define __SENSOR_RECORDER_METHOD_CALL_HANDLER_H__ -#include +#include +#include +#include namespace ctx { class SensorProvider; - class SensorRecorderClient : public ClientBase { + class MethodCallHandler : public IMethodCallHandler { public: - SensorRecorderClient(ServiceBase* hostService, const std::string& busName); - ~SensorRecorderClient(); + MethodCallHandler(); + ~MethodCallHandler(); - void onMethodCalled(MethodCall* methodCall); + void setCaller(IClient* client); + void onMethodCalled(IMethodCall* methodCall); void onDisconnected(); private: void __verifyUid(uid_t uid); std::string __extractParameter(GVariant* param, unsigned int idx); - void __startRecording(SensorProvider& provider, MethodCall& methodCall); - void __stopRecording(SensorProvider& provider, MethodCall& methodCall); - void __readRecords(SensorProvider& provider, MethodCall& methodCall); + void __startRecording(SensorProvider& provider, IMethodCall& methodCall); + void __stopRecording(SensorProvider& provider, IMethodCall& methodCall); + void __readRecords(SensorProvider& provider, IMethodCall& methodCall); + + IClient* __caller; }; } -#endif /* __SENSOR_RECORDER_CLIENT_H__ */ +#endif /* __SENSOR_RECORDER_METHOD_CALL_HANDLER_H__ */ diff --git a/src/server/SensorRecorderService.cpp b/src/server/SensorRecorderService.cpp index b9ddf11..bb1ae60 100644 --- a/src/server/SensorRecorderService.cpp +++ b/src/server/SensorRecorderService.cpp @@ -14,9 +14,10 @@ * limitations under the License. */ +#include #include #include -#include "SensorRecorderClient.h" +#include "MethodCallHandler.h" #include "SensorDatabase.h" #include "SensorTimer.h" #include "legacy/SensorProvider.h" @@ -24,8 +25,8 @@ using namespace ctx; -SensorRecorderService::SensorRecorderService(GDBusConnection* conn) : - ServiceBase(conn, CTX_SENSOR_RECORDER, CTX_SENSOR_RECORDER_SPEC) +SensorRecorderService::SensorRecorderService() : + __serviceRunner(NULL) { } @@ -33,19 +34,34 @@ SensorRecorderService::~SensorRecorderService() { } +void SensorRecorderService::setServiceRunner(IServiceRunner* runner) +{ + __serviceRunner = runner; +} + bool SensorRecorderService::isUserService() { return true; } +const char* SensorRecorderService::getServiceName() +{ + return CTX_SENSOR_RECORDER; +} + +const char* SensorRecorderService::getMethodSpecs() +{ + return CTX_SENSOR_RECORDER_SPEC; +} + bool SensorRecorderService::prepare() { RecorderClientInfo::setHostService(this); - if (!SensorDatabase::open(getActiveUser())) + if (!SensorDatabase::open(util::getActiveUid())) return false; - SensorTimer::init(this); + SensorTimer::init(__serviceRunner->getMainContext()); SensorProvider::init(); return true; @@ -58,7 +74,20 @@ void SensorRecorderService::cleanup() SensorDatabase::close(); } -ClientBase* SensorRecorderService::createClient(const std::string& busName) +void SensorRecorderService::onUserActivated() +{ +} + +void SensorRecorderService::onUserDeactivated() +{ +} + +IMethodCallHandler* SensorRecorderService::createMethodCallHandler() +{ + return new MethodCallHandler(); +} + +GDBusConnection* SensorRecorderService::getConnection() { - return new SensorRecorderClient(this, busName); + return __serviceRunner->getConnection(); } diff --git a/src/server/SensorTimer.cpp b/src/server/SensorTimer.cpp index 62f7da9..2e83968 100644 --- a/src/server/SensorTimer.cpp +++ b/src/server/SensorTimer.cpp @@ -16,7 +16,6 @@ #include #include -#include #include #include "SensorTimer.h" @@ -28,9 +27,9 @@ SensorTimer::SensorTimer() { } -void SensorTimer::init(ServiceBase* hostService) +void SensorTimer::init(GMainContext* mainContext) { - __timer = new Timer(hostService); + __timer = new Timer(mainContext); } void SensorTimer::release() diff --git a/src/server/SensorTimer.h b/src/server/SensorTimer.h index ba79daa..3f258a3 100644 --- a/src/server/SensorTimer.h +++ b/src/server/SensorTimer.h @@ -17,15 +17,16 @@ #ifndef __SENSOR_RECORDER_TIMER_H__ #define __SENSOR_RECORDER_TIMER_H__ +#include + namespace ctx { - class ServiceBase; class Timer; class ITimerListener; class SensorTimer { public: - static void init(ServiceBase* hostService); + static void init(GMainContext* mainContext); static void release(); static unsigned int addIdle(GSourceFunc callback, gpointer userData); -- 2.7.4 From 7a76a4340beef3af12fad21a6f2c0a0c17a168f1 Mon Sep 17 00:00:00 2001 From: Mu-Woong Lee Date: Tue, 13 Jun 2017 18:56:27 +0900 Subject: [PATCH 05/16] Remove run dependency to 'sensord' This dependency should be stated in the 'sensor recorder' block spec file. Change-Id: I77c09c9e5e78af51781195566c9dbd7743dc5182 Signed-off-by: Mu-Woong Lee --- packaging/context-sensor-recorder.spec | 1 - 1 file changed, 1 deletion(-) diff --git a/packaging/context-sensor-recorder.spec b/packaging/context-sensor-recorder.spec index 83efa7b..63c9fa9 100644 --- a/packaging/context-sensor-recorder.spec +++ b/packaging/context-sensor-recorder.spec @@ -18,7 +18,6 @@ BuildRequires: pkgconfig(context-common-client) Requires: %{name}-dummy = %{version}-%{release} Requires: context-service -Requires: sensord Provides: %{name}-profile_mobile = %{version}-%{release} Provides: %{name}-profile_wearable = %{version}-%{release} -- 2.7.4 From e26360b5a9b488683ac57c5dbd258650639ff416 Mon Sep 17 00:00:00 2001 From: Mu-Woong Lee Date: Fri, 16 Jun 2017 16:49:54 +0900 Subject: [PATCH 06/16] Rename the DB file to .context-sensor-recorder.db Change-Id: I2dd961d1766a35ea205a67c519e01653b40c8516 Signed-off-by: Mu-Woong Lee --- src/shared/SensorRecorderTypesPrivate.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/shared/SensorRecorderTypesPrivate.h b/src/shared/SensorRecorderTypesPrivate.h index 11aec63..d53c592 100644 --- a/src/shared/SensorRecorderTypesPrivate.h +++ b/src/shared/SensorRecorderTypesPrivate.h @@ -44,6 +44,6 @@ #define METHOD_STOP_REC "StopRecording" #define METHOD_READ_REC "ReadRecords" -#define BASE_PATH "sensor-recorder" +#define BASE_PATH "context-sensor-recorder" #endif -- 2.7.4 From c637f23868f4b3b29957e6d0e9d233bff3008d4c Mon Sep 17 00:00:00 2001 From: Mu-Woong Lee Date: Mon, 26 Jun 2017 16:18:02 +0900 Subject: [PATCH 07/16] Remove thread switching of sensor events contextd is now single-threaded, thus sensor events don't need to be passed to the sensor-recorder's thread. Change-Id: I261f2487c76ea74634b7a502b3a12d5b419f395e Signed-off-by: Mu-Woong Lee --- src/server/SensorRecorderService.cpp | 2 +- src/server/SensorTimer.cpp | 9 ++------- src/server/SensorTimer.h | 3 +-- src/server/legacy/SensorProxy.cpp | 34 +--------------------------------- src/server/legacy/SensorProxy.h | 1 - 5 files changed, 5 insertions(+), 44 deletions(-) diff --git a/src/server/SensorRecorderService.cpp b/src/server/SensorRecorderService.cpp index bb1ae60..9846d00 100644 --- a/src/server/SensorRecorderService.cpp +++ b/src/server/SensorRecorderService.cpp @@ -61,7 +61,7 @@ bool SensorRecorderService::prepare() if (!SensorDatabase::open(util::getActiveUid())) return false; - SensorTimer::init(__serviceRunner->getMainContext()); + SensorTimer::init(); SensorProvider::init(); return true; diff --git a/src/server/SensorTimer.cpp b/src/server/SensorTimer.cpp index 2e83968..acf2bfa 100644 --- a/src/server/SensorTimer.cpp +++ b/src/server/SensorTimer.cpp @@ -27,9 +27,9 @@ SensorTimer::SensorTimer() { } -void SensorTimer::init(GMainContext* mainContext) +void SensorTimer::init() { - __timer = new Timer(mainContext); + __timer = new Timer(); } void SensorTimer::release() @@ -37,11 +37,6 @@ void SensorTimer::release() delete __timer; } -unsigned int SensorTimer::addIdle(GSourceFunc callback, gpointer userData) -{ - return __timer->addIdle(callback, userData); -} - unsigned int SensorTimer::addAlarm(unsigned int intervalMin, ITimerListener* listener) { return __timer->addAlarm(intervalMin, listener, NULL); diff --git a/src/server/SensorTimer.h b/src/server/SensorTimer.h index 3f258a3..752f86d 100644 --- a/src/server/SensorTimer.h +++ b/src/server/SensorTimer.h @@ -26,10 +26,9 @@ namespace ctx { class SensorTimer { public: - static void init(GMainContext* mainContext); + static void init(); static void release(); - static unsigned int addIdle(GSourceFunc callback, gpointer userData); static unsigned int addAlarm(unsigned int intervalMin, ITimerListener* listener); static void cancel(unsigned int timerId); diff --git a/src/server/legacy/SensorProxy.cpp b/src/server/legacy/SensorProxy.cpp index 53afe65..fb29fbd 100644 --- a/src/server/legacy/SensorProxy.cpp +++ b/src/server/legacy/SensorProxy.cpp @@ -23,11 +23,6 @@ using namespace ctx; -struct SensorEvent { - SensorProxy* listener; - sensor_data_t* data; -}; - SensorProxy::SensorProxy() : sensorHandle(-1), sensorType(UNKNOWN_SENSOR), @@ -125,32 +120,5 @@ bool SensorProxy::isSupported(sensor_type_t type) void SensorProxy::__eventCb(sensor_t sensor, unsigned int eventType, sensor_data_t *eventData, void *cbData) { - SensorEvent* sensorEvent = new SensorEvent; - sensorEvent->listener = static_cast(cbData); - - if (sensorEvent->listener->sensorType == HUMAN_PEDOMETER_SENSOR) { - sensorEvent->data = static_cast(g_memdup(eventData, sizeof(sensor_pedometer_data_t))); - } else { - sensorEvent->data = static_cast(g_memdup(eventData, sizeof(sensor_data_t))); - } - - if (!sensorEvent->data) { - _E_ALLOC; - delete sensorEvent; - return; - } - - SensorTimer::addIdle(__threadSwitcher, sensorEvent); -} - -gboolean SensorProxy::__threadSwitcher(gpointer data) -{ - SensorEvent* sensorEvent = static_cast(data); - - sensorEvent->listener->onEvent(sensorEvent->data); - - g_free(sensorEvent->data); - delete sensorEvent; - - return G_SOURCE_REMOVE; + static_cast(cbData)->onEvent(eventData); } diff --git a/src/server/legacy/SensorProxy.h b/src/server/legacy/SensorProxy.h index e2e4af5..7ae1c87 100644 --- a/src/server/legacy/SensorProxy.h +++ b/src/server/legacy/SensorProxy.h @@ -52,7 +52,6 @@ namespace ctx { private: static void __eventCb(sensor_t sensor, unsigned int eventType, sensor_data_t *eventData, void *cbData); - static gboolean __threadSwitcher(gpointer data); }; } -- 2.7.4 From fc7494c5b17cf3e2bb484b31879f4fdfdc676d0b Mon Sep 17 00:00:00 2001 From: Mu-Woong Lee Date: Thu, 29 Jun 2017 10:55:26 +0900 Subject: [PATCH 08/16] Replace MethodCallHandler::setCaller() with a parameterized constructor Change-Id: I2f1b7c954419dd4b9247eefb38e4598c1d127aae Signed-off-by: Mu-Woong Lee --- include/private/SensorRecorderService.h | 3 ++- src/server-dummy/SensorRecorderService.cpp | 2 +- src/server/MethodCallHandler.cpp | 9 ++------- src/server/MethodCallHandler.h | 3 +-- src/server/SensorRecorderService.cpp | 4 ++-- 5 files changed, 8 insertions(+), 13 deletions(-) diff --git a/include/private/SensorRecorderService.h b/include/private/SensorRecorderService.h index 90520f4..0235691 100644 --- a/include/private/SensorRecorderService.h +++ b/include/private/SensorRecorderService.h @@ -21,6 +21,7 @@ #include #include +#include #include namespace ctx { @@ -43,7 +44,7 @@ namespace ctx { void onUserActivated(); void onUserDeactivated(); - IMethodCallHandler* createMethodCallHandler(); + IMethodCallHandler* createMethodCallHandler(IClient* client); GDBusConnection* getConnection(); diff --git a/src/server-dummy/SensorRecorderService.cpp b/src/server-dummy/SensorRecorderService.cpp index 06cf899..5ef92f8 100644 --- a/src/server-dummy/SensorRecorderService.cpp +++ b/src/server-dummy/SensorRecorderService.cpp @@ -66,7 +66,7 @@ void SensorRecorderService::onUserDeactivated() { } -IMethodCallHandler* SensorRecorderService::createMethodCallHandler() +IMethodCallHandler* SensorRecorderService::createMethodCallHandler(IClient* client) { return NULL; } diff --git a/src/server/MethodCallHandler.cpp b/src/server/MethodCallHandler.cpp index 8a20944..6acc120 100644 --- a/src/server/MethodCallHandler.cpp +++ b/src/server/MethodCallHandler.cpp @@ -24,8 +24,8 @@ using namespace ctx; -MethodCallHandler::MethodCallHandler() : - __caller(NULL) +MethodCallHandler::MethodCallHandler(IClient* client) : + __caller(client) { } @@ -33,11 +33,6 @@ MethodCallHandler::~MethodCallHandler() { } -void MethodCallHandler::setCaller(IClient* client) -{ - __caller = client; -} - void MethodCallHandler::onMethodCalled(IMethodCall* methodCall) { try { diff --git a/src/server/MethodCallHandler.h b/src/server/MethodCallHandler.h index cde2a2b..83ff751 100644 --- a/src/server/MethodCallHandler.h +++ b/src/server/MethodCallHandler.h @@ -27,10 +27,9 @@ namespace ctx { class MethodCallHandler : public IMethodCallHandler { public: - MethodCallHandler(); + MethodCallHandler(IClient* client); ~MethodCallHandler(); - void setCaller(IClient* client); void onMethodCalled(IMethodCall* methodCall); void onDisconnected(); diff --git a/src/server/SensorRecorderService.cpp b/src/server/SensorRecorderService.cpp index 9846d00..8fba83b 100644 --- a/src/server/SensorRecorderService.cpp +++ b/src/server/SensorRecorderService.cpp @@ -82,9 +82,9 @@ void SensorRecorderService::onUserDeactivated() { } -IMethodCallHandler* SensorRecorderService::createMethodCallHandler() +IMethodCallHandler* SensorRecorderService::createMethodCallHandler(IClient* client) { - return new MethodCallHandler(); + return new MethodCallHandler(client); } GDBusConnection* SensorRecorderService::getConnection() -- 2.7.4 From 6bdda735777fa106e97977ba8546882f557a4217 Mon Sep 17 00:00:00 2001 From: Mu-Woong Lee Date: Thu, 29 Jun 2017 15:27:56 +0900 Subject: [PATCH 09/16] SensorRecorderService realizes IUserService instead of IService Change-Id: I5a6ce9b3a7b99dd80cba722d2258ad8cea6735b3 Signed-off-by: Mu-Woong Lee --- include/private/SensorRecorderService.h | 20 ++++++++------------ src/server-dummy/SensorRecorderService.cpp | 20 ++++++-------------- src/server/MethodCallHandler.cpp | 9 --------- src/server/MethodCallHandler.h | 1 - src/server/SensorRecorderService.cpp | 30 ++++++++---------------------- 5 files changed, 22 insertions(+), 58 deletions(-) diff --git a/include/private/SensorRecorderService.h b/include/private/SensorRecorderService.h index 0235691..aff866f 100644 --- a/include/private/SensorRecorderService.h +++ b/include/private/SensorRecorderService.h @@ -19,33 +19,29 @@ /* This header SHOULD NOT be included by other headers in this directory. */ -#include +#include #include #include #include namespace ctx { - class EXPORT_API SensorRecorderService : public IService { + class EXPORT_API SensorRecorderService : public IUserService { public: SensorRecorderService(); ~SensorRecorderService(); + // Inherited from IService void setServiceRunner(IServiceRunner* runner); - - bool isUserService(); - const char* getServiceName(); const char* getMethodSpecs(); - - bool prepare(); - void cleanup(); - - void onUserActivated(); - void onUserDeactivated(); - IMethodCallHandler* createMethodCallHandler(IClient* client); + // Inherited from IUserService + bool prepare(uid_t uid); + void cleanup(uid_t uid); + + // Own members GDBusConnection* getConnection(); private: diff --git a/src/server-dummy/SensorRecorderService.cpp b/src/server-dummy/SensorRecorderService.cpp index 5ef92f8..b5052a4 100644 --- a/src/server-dummy/SensorRecorderService.cpp +++ b/src/server-dummy/SensorRecorderService.cpp @@ -34,11 +34,6 @@ void SensorRecorderService::setServiceRunner(IServiceRunner* runner) { } -bool SensorRecorderService::isUserService() -{ - return true; -} - const char* SensorRecorderService::getServiceName() { return NULL; @@ -49,24 +44,21 @@ const char* SensorRecorderService::getMethodSpecs() return NULL; } -bool SensorRecorderService::prepare() -{ - return false; -} - -void SensorRecorderService::cleanup() +IMethodCallHandler* SensorRecorderService::createMethodCallHandler(IClient* client) { + return NULL; } -void SensorRecorderService::onUserActivated() +bool SensorRecorderService::prepare(uid_t uid) { + return false; } -void SensorRecorderService::onUserDeactivated() +void SensorRecorderService::cleanup(uid_t uid) { } -IMethodCallHandler* SensorRecorderService::createMethodCallHandler(IClient* client) +GDBusConnection* SensorRecorderService::getConnection() { return NULL; } diff --git a/src/server/MethodCallHandler.cpp b/src/server/MethodCallHandler.cpp index 6acc120..c821a24 100644 --- a/src/server/MethodCallHandler.cpp +++ b/src/server/MethodCallHandler.cpp @@ -36,7 +36,6 @@ MethodCallHandler::~MethodCallHandler() void MethodCallHandler::onMethodCalled(IMethodCall* methodCall) { try { - __verifyUid(methodCall->getUid()); std::string subject = __extractParameter(methodCall->getParam(), IDX_SUBJECT); _D("%s(%s)", methodCall->getMethodName().c_str(), subject.c_str()); @@ -67,14 +66,6 @@ void MethodCallHandler::onDisconnected() { } -void MethodCallHandler::__verifyUid(uid_t uid) -{ - if (!util::isSystemUid(uid) && uid != util::getActiveUid()) { - _E("Invalid Uid: %u != %u (ActiveUser)", uid, util::getActiveUid()); - throw static_cast(E_ACCESS); - } -} - std::string MethodCallHandler::__extractParameter(GVariant* param, unsigned int idx) { const char* val = NULL; diff --git a/src/server/MethodCallHandler.h b/src/server/MethodCallHandler.h index 83ff751..817d4bb 100644 --- a/src/server/MethodCallHandler.h +++ b/src/server/MethodCallHandler.h @@ -34,7 +34,6 @@ namespace ctx { void onDisconnected(); private: - void __verifyUid(uid_t uid); std::string __extractParameter(GVariant* param, unsigned int idx); void __startRecording(SensorProvider& provider, IMethodCall& methodCall); void __stopRecording(SensorProvider& provider, IMethodCall& methodCall); diff --git a/src/server/SensorRecorderService.cpp b/src/server/SensorRecorderService.cpp index 8fba83b..0b62991 100644 --- a/src/server/SensorRecorderService.cpp +++ b/src/server/SensorRecorderService.cpp @@ -14,7 +14,6 @@ * limitations under the License. */ -#include #include #include #include "MethodCallHandler.h" @@ -39,11 +38,6 @@ void SensorRecorderService::setServiceRunner(IServiceRunner* runner) __serviceRunner = runner; } -bool SensorRecorderService::isUserService() -{ - return true; -} - const char* SensorRecorderService::getServiceName() { return CTX_SENSOR_RECORDER; @@ -54,11 +48,16 @@ const char* SensorRecorderService::getMethodSpecs() return CTX_SENSOR_RECORDER_SPEC; } -bool SensorRecorderService::prepare() +IMethodCallHandler* SensorRecorderService::createMethodCallHandler(IClient* client) +{ + return new MethodCallHandler(client); +} + +bool SensorRecorderService::prepare(uid_t uid) { RecorderClientInfo::setHostService(this); - if (!SensorDatabase::open(util::getActiveUid())) + if (!SensorDatabase::open(uid)) return false; SensorTimer::init(); @@ -67,26 +66,13 @@ bool SensorRecorderService::prepare() return true; } -void SensorRecorderService::cleanup() +void SensorRecorderService::cleanup(uid_t uid) { SensorProvider::release(); SensorTimer::release(); SensorDatabase::close(); } -void SensorRecorderService::onUserActivated() -{ -} - -void SensorRecorderService::onUserDeactivated() -{ -} - -IMethodCallHandler* SensorRecorderService::createMethodCallHandler(IClient* client) -{ - return new MethodCallHandler(client); -} - GDBusConnection* SensorRecorderService::getConnection() { return __serviceRunner->getConnection(); -- 2.7.4 From 2f6cec5d5c89d6277488a93078a4ebf5a79608ba Mon Sep 17 00:00:00 2001 From: Mu-Woong Lee Date: Fri, 30 Jun 2017 10:28:40 +0900 Subject: [PATCH 10/16] Prevent uncaught exceptions from ctx_sensor_rec_read & ctx_sensor_rec_read_sync Change-Id: I6f6402d0cdb98fe418a2fb5220d27d5cf49ce974 Signed-off-by: Mu-Woong Lee --- src/client/sensor_recorder.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/client/sensor_recorder.cpp b/src/client/sensor_recorder.cpp index e599b34..86c64c9 100644 --- a/src/client/sensor_recorder.cpp +++ b/src/client/sensor_recorder.cpp @@ -161,10 +161,12 @@ EXPORT_API int ctx_sensor_rec_read(const char* subject, ctx_sensor_rec_query_h q { IF_FAIL_RETURN(subject && query && cb, E_PARAM); + QueryResultListener* listener = new(std::nothrow) QueryResultListener(subject, cb, user_data); + IF_FAIL_RETURN_TAG(listener, E_NO_MEM, _E, E_STR_ALLOC); + std::string queryStr = __mapToJson(*static_cast(query)); GVariant* param = g_variant_new("(ss)", subject, queryStr.c_str()); - QueryResultListener* listener = new QueryResultListener(subject, cb, user_data); int error = __getServiceProxy()->call(METHOD_READ_REC, param, listener); if (error != E_NONE) @@ -177,6 +179,9 @@ EXPORT_API int ctx_sensor_rec_read_sync(const char* subject, ctx_sensor_rec_quer { IF_FAIL_RETURN(subject && query && cb, E_PARAM); + QueryResultListener* listener = new(std::nothrow) QueryResultListener(subject, cb, user_data); + IF_FAIL_RETURN_TAG(listener, E_NO_MEM, _E, E_STR_ALLOC); + std::string queryStr = __mapToJson(*static_cast(query)); GVariant* param = g_variant_new("(ss)", subject, queryStr.c_str()); @@ -184,7 +189,6 @@ EXPORT_API int ctx_sensor_rec_read_sync(const char* subject, ctx_sensor_rec_quer int error = __getServiceProxy()->call(METHOD_READ_REC, param, &outParam); IF_FAIL_RETURN(error == E_NONE, error); - QueryResultListener* listener = new QueryResultListener(subject, cb, user_data); listener->onSuccess(METHOD_READ_REC, outParam); g_variant_unref(outParam); -- 2.7.4 From 10a9f13e028b41ab81650d123fc9e9b6b5984eed Mon Sep 17 00:00:00 2001 From: Mu-Woong Lee Date: Fri, 30 Jun 2017 11:26:52 +0900 Subject: [PATCH 11/16] Version 4.0.0 release 1 Change-Id: I4bdc5e9a467e4c13d38f034639e1a00437a9fd9c Signed-off-by: Mu-Woong Lee --- packaging/context-sensor-recorder.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging/context-sensor-recorder.spec b/packaging/context-sensor-recorder.spec index 63c9fa9..aaadc2d 100644 --- a/packaging/context-sensor-recorder.spec +++ b/packaging/context-sensor-recorder.spec @@ -1,6 +1,6 @@ Name: context-sensor-recorder Summary: Sensor recorder service server and client libraries -Version: 1.0.1 +Version: 4.0.0 Release: 1 Group: Service Framework/Context License: Apache-2.0 -- 2.7.4 From abd10dd23c14643e3f6362f9ddb8c032f09c6012 Mon Sep 17 00:00:00 2001 From: "kibak.yoon" Date: Tue, 23 May 2017 21:55:05 +0900 Subject: [PATCH 12/16] Change std::map to ctx::CtxJson for managing method options * CtxJson will be changed to Jsoncpp Change-Id: Ie97f308cbb30f986dcbdf3f4aefb01d3de929339 Signed-off-by: kibak.yoon --- src/client/sensor_recorder.cpp | 50 ++++++++++++++---------------------------- 1 file changed, 16 insertions(+), 34 deletions(-) diff --git a/src/client/sensor_recorder.cpp b/src/client/sensor_recorder.cpp index 86c64c9..618cfcf 100644 --- a/src/client/sensor_recorder.cpp +++ b/src/client/sensor_recorder.cpp @@ -14,43 +14,22 @@ * limitations under the License. */ -#include #include #include #include +#include #include "QueryResultListener.h" #define STR_BUFFER_SIZE 128 using namespace ctx; -typedef std::map ctx_sensor_rec_option_t; -typedef std::map ctx_sensor_rec_query_t; - static ServiceProxy* __getServiceProxy() { static ServiceProxy proxy(CTX_SENSOR_RECORDER); return &proxy; } -static std::string __mapToJson(const std::map& input) -{ - std::string output("{"); - char buf[STR_BUFFER_SIZE]; - - for (auto& elem : input) { - snprintf(buf, STR_BUFFER_SIZE, "\"%s\":%lld,", elem.first.c_str(), elem.second); - output += buf; - } - - if (output.back() == ',') - output.back() = '}'; - else - output += "}"; - - return output; -} - EXPORT_API int ctx_sensor_rec_is_supported(const char* subject, bool *supported) { IF_FAIL_RETURN(subject && supported, E_PARAM); @@ -68,10 +47,10 @@ EXPORT_API int ctx_sensor_rec_start(const char* subject, ctx_sensor_rec_option_h { IF_FAIL_RETURN(subject, E_PARAM); - std::string optionStr(""); - + std::string optionStr; if (option) - optionStr = __mapToJson(*static_cast(option)); + optionStr = static_cast(option)->str(); + GVariant* param = g_variant_new("(ss)", subject, optionStr.c_str()); return __getServiceProxy()->call(METHOD_START_REC, param); @@ -87,7 +66,7 @@ EXPORT_API int ctx_sensor_rec_create_option(ctx_sensor_rec_option_h *option) { IF_FAIL_RETURN(option, E_PARAM); - *option = new(std::nothrow) ctx_sensor_rec_option_t; + *option = new(std::nothrow) ctx::CtxJson; IF_FAIL_RETURN(*option, E_NO_MEM); return E_NONE; @@ -97,7 +76,7 @@ EXPORT_API int ctx_sensor_rec_destroy_option(ctx_sensor_rec_option_h option) { IF_FAIL_RETURN(option, E_PARAM); - delete static_cast(option); + delete static_cast(option); return E_NONE; } @@ -108,7 +87,8 @@ EXPORT_API int ctx_sensor_rec_option_set_int(ctx_sensor_rec_option_h option, con IF_FAIL_RETURN(STR_EQ(param, CTX_SENSOR_RECORDER_KEY_INTERVAL) || STR_EQ(param, CTX_SENSOR_RECORDER_KEY_RETENTION), E_PARAM); - (*static_cast(option))[param] = static_cast(value); + ctx::CtxJson* optionCtxJson = static_cast(option); + optionCtxJson->set(NULL, param, static_cast(value)); return E_NONE; } @@ -117,7 +97,7 @@ EXPORT_API int ctx_sensor_rec_create_query(ctx_sensor_rec_query_h *query) { IF_FAIL_RETURN(query, E_PARAM); - *query = new(std::nothrow) ctx_sensor_rec_query_t; + *query = new(std::nothrow) ctx::CtxJson; IF_FAIL_RETURN(*query, E_NO_MEM); return E_NONE; @@ -127,7 +107,7 @@ EXPORT_API int ctx_sensor_rec_destroy_query(ctx_sensor_rec_query_h query) { IF_FAIL_RETURN(query, E_PARAM); - delete static_cast(query); + delete static_cast(query); return E_NONE; } @@ -140,7 +120,8 @@ EXPORT_API int ctx_sensor_rec_query_set_int(ctx_sensor_rec_query_h query, const STR_EQ(param, CTX_SENSOR_RECORDER_KEY_START_TIME) || STR_EQ(param, CTX_SENSOR_RECORDER_KEY_END_TIME), E_PARAM); - (*static_cast(query))[param] = static_cast(value); + ctx::CtxJson* queryCtxJson = static_cast(query); + queryCtxJson->set(NULL, param, static_cast(value)); return E_NONE; } @@ -152,7 +133,8 @@ EXPORT_API int ctx_sensor_rec_query_set_time(ctx_sensor_rec_query_h query, const STR_EQ(param, CTX_SENSOR_RECORDER_KEY_START_TIME) || STR_EQ(param, CTX_SENSOR_RECORDER_KEY_END_TIME), E_PARAM); - (*static_cast(query))[param] = static_cast(t); + ctx::CtxJson* queryCtxJson = static_cast(query); + queryCtxJson->set(NULL, param, static_cast(t)); return E_NONE; } @@ -164,7 +146,7 @@ EXPORT_API int ctx_sensor_rec_read(const char* subject, ctx_sensor_rec_query_h q QueryResultListener* listener = new(std::nothrow) QueryResultListener(subject, cb, user_data); IF_FAIL_RETURN_TAG(listener, E_NO_MEM, _E, E_STR_ALLOC); - std::string queryStr = __mapToJson(*static_cast(query)); + std::string queryStr = static_cast(query)->str(); GVariant* param = g_variant_new("(ss)", subject, queryStr.c_str()); int error = __getServiceProxy()->call(METHOD_READ_REC, param, listener); @@ -182,7 +164,7 @@ EXPORT_API int ctx_sensor_rec_read_sync(const char* subject, ctx_sensor_rec_quer QueryResultListener* listener = new(std::nothrow) QueryResultListener(subject, cb, user_data); IF_FAIL_RETURN_TAG(listener, E_NO_MEM, _E, E_STR_ALLOC); - std::string queryStr = __mapToJson(*static_cast(query)); + std::string queryStr = static_cast(query)->str(); GVariant* param = g_variant_new("(ss)", subject, queryStr.c_str()); GVariant* outParam = NULL; -- 2.7.4 From 61da57e6c5ea97e9ea7a038ea2b810aeba940770 Mon Sep 17 00:00:00 2001 From: Mu-Woong Lee Date: Sat, 1 Jul 2017 23:18:44 +0900 Subject: [PATCH 13/16] Replace the glib-json wrapper CtxJson with jsoncpp Change-Id: I73edc779b88688e675bef73c9e43089df631cf5f Signed-off-by: Mu-Woong Lee --- packaging/context-sensor-recorder.spec | 1 + src/client/CMakeLists.txt | 2 +- src/client/sensor_recorder.cpp | 37 +++++++++------ src/server/CMakeLists.txt | 2 +- src/server/legacy/Querier.cpp | 6 +-- src/server/legacy/Querier.h | 6 +-- src/server/legacy/RecorderClientInfo.cpp | 35 ++++++++------ src/server/legacy/RecorderClientInfo.h | 10 ++-- src/server/legacy/SensorProvider.cpp | 59 ++++++++++++++---------- src/server/legacy/SensorProvider.h | 8 ++-- src/server/legacy/heartrate/HeartRate.cpp | 15 ++---- src/server/legacy/heartrate/HeartRate.h | 2 +- src/server/legacy/heartrate/HeartRateLogger.cpp | 2 +- src/server/legacy/heartrate/HeartRateQuerier.cpp | 4 +- src/server/legacy/heartrate/HeartRateQuerier.h | 4 +- src/server/legacy/pedometer/PedometerQuerier.cpp | 6 +-- src/server/legacy/pedometer/PedometerQuerier.h | 6 +-- src/server/legacy/pressure/PressureQuerier.cpp | 6 +-- src/server/legacy/pressure/PressureQuerier.h | 6 +-- src/server/legacy/sleep/SleepQuerier.cpp | 4 +- src/server/legacy/sleep/SleepQuerier.h | 4 +- 21 files changed, 123 insertions(+), 102 deletions(-) diff --git a/packaging/context-sensor-recorder.spec b/packaging/context-sensor-recorder.spec index aaadc2d..6a27459 100644 --- a/packaging/context-sensor-recorder.spec +++ b/packaging/context-sensor-recorder.spec @@ -9,6 +9,7 @@ Source0: %{name}-%{version}.tar.gz BuildRequires: cmake BuildRequires: pkgconfig(glib-2.0) BuildRequires: pkgconfig(gio-2.0) +BuildRequires: pkgconfig(jsoncpp) BuildRequires: pkgconfig(dlog) BuildRequires: pkgconfig(sensor) BuildRequires: pkgconfig(capi-base-common) diff --git a/src/client/CMakeLists.txt b/src/client/CMakeLists.txt index 8f551d7..46d4131 100644 --- a/src/client/CMakeLists.txt +++ b/src/client/CMakeLists.txt @@ -1,6 +1,6 @@ SET(target "${PROJECT_NAME}-client-genuine") -SET(DEPS "${DEPS} context-common-client") +SET(DEPS "${DEPS} jsoncpp context-common-client") FILE(GLOB_RECURSE SRCS *.cpp ../shared/*.cpp) MESSAGE("Sources: ${SRCS}") diff --git a/src/client/sensor_recorder.cpp b/src/client/sensor_recorder.cpp index 618cfcf..1973f76 100644 --- a/src/client/sensor_recorder.cpp +++ b/src/client/sensor_recorder.cpp @@ -14,10 +14,10 @@ * limitations under the License. */ +#include #include #include #include -#include #include "QueryResultListener.h" #define STR_BUFFER_SIZE 128 @@ -48,8 +48,11 @@ EXPORT_API int ctx_sensor_rec_start(const char* subject, ctx_sensor_rec_option_h IF_FAIL_RETURN(subject, E_PARAM); std::string optionStr; - if (option) - optionStr = static_cast(option)->str(); + if (option) { + Json::FastWriter fw; + fw.omitEndingLineFeed(); + optionStr = fw.write(*static_cast(option)); + } GVariant* param = g_variant_new("(ss)", subject, optionStr.c_str()); @@ -66,7 +69,7 @@ EXPORT_API int ctx_sensor_rec_create_option(ctx_sensor_rec_option_h *option) { IF_FAIL_RETURN(option, E_PARAM); - *option = new(std::nothrow) ctx::CtxJson; + *option = new(std::nothrow) Json::Value; IF_FAIL_RETURN(*option, E_NO_MEM); return E_NONE; @@ -76,7 +79,7 @@ EXPORT_API int ctx_sensor_rec_destroy_option(ctx_sensor_rec_option_h option) { IF_FAIL_RETURN(option, E_PARAM); - delete static_cast(option); + delete static_cast(option); return E_NONE; } @@ -87,8 +90,8 @@ EXPORT_API int ctx_sensor_rec_option_set_int(ctx_sensor_rec_option_h option, con IF_FAIL_RETURN(STR_EQ(param, CTX_SENSOR_RECORDER_KEY_INTERVAL) || STR_EQ(param, CTX_SENSOR_RECORDER_KEY_RETENTION), E_PARAM); - ctx::CtxJson* optionCtxJson = static_cast(option); - optionCtxJson->set(NULL, param, static_cast(value)); + Json::Value& optionJson = *static_cast(option); + optionJson[param] = value; return E_NONE; } @@ -97,7 +100,7 @@ EXPORT_API int ctx_sensor_rec_create_query(ctx_sensor_rec_query_h *query) { IF_FAIL_RETURN(query, E_PARAM); - *query = new(std::nothrow) ctx::CtxJson; + *query = new(std::nothrow) Json::Value; IF_FAIL_RETURN(*query, E_NO_MEM); return E_NONE; @@ -107,7 +110,7 @@ EXPORT_API int ctx_sensor_rec_destroy_query(ctx_sensor_rec_query_h query) { IF_FAIL_RETURN(query, E_PARAM); - delete static_cast(query); + delete static_cast(query); return E_NONE; } @@ -120,8 +123,8 @@ EXPORT_API int ctx_sensor_rec_query_set_int(ctx_sensor_rec_query_h query, const STR_EQ(param, CTX_SENSOR_RECORDER_KEY_START_TIME) || STR_EQ(param, CTX_SENSOR_RECORDER_KEY_END_TIME), E_PARAM); - ctx::CtxJson* queryCtxJson = static_cast(query); - queryCtxJson->set(NULL, param, static_cast(value)); + Json::Value& queryJson = *static_cast(query); + queryJson[param] = value; return E_NONE; } @@ -133,8 +136,8 @@ EXPORT_API int ctx_sensor_rec_query_set_time(ctx_sensor_rec_query_h query, const STR_EQ(param, CTX_SENSOR_RECORDER_KEY_START_TIME) || STR_EQ(param, CTX_SENSOR_RECORDER_KEY_END_TIME), E_PARAM); - ctx::CtxJson* queryCtxJson = static_cast(query); - queryCtxJson->set(NULL, param, static_cast(t)); + Json::Value& queryJson = *static_cast(query); + queryJson[param] = static_cast(t); return E_NONE; } @@ -146,7 +149,9 @@ EXPORT_API int ctx_sensor_rec_read(const char* subject, ctx_sensor_rec_query_h q QueryResultListener* listener = new(std::nothrow) QueryResultListener(subject, cb, user_data); IF_FAIL_RETURN_TAG(listener, E_NO_MEM, _E, E_STR_ALLOC); - std::string queryStr = static_cast(query)->str(); + Json::FastWriter fw; + fw.omitEndingLineFeed(); + std::string queryStr = fw.write(*static_cast(query)); GVariant* param = g_variant_new("(ss)", subject, queryStr.c_str()); int error = __getServiceProxy()->call(METHOD_READ_REC, param, listener); @@ -164,7 +169,9 @@ EXPORT_API int ctx_sensor_rec_read_sync(const char* subject, ctx_sensor_rec_quer QueryResultListener* listener = new(std::nothrow) QueryResultListener(subject, cb, user_data); IF_FAIL_RETURN_TAG(listener, E_NO_MEM, _E, E_STR_ALLOC); - std::string queryStr = static_cast(query)->str(); + Json::FastWriter fw; + fw.omitEndingLineFeed(); + std::string queryStr = fw.write(*static_cast(query)); GVariant* param = g_variant_new("(ss)", subject, queryStr.c_str()); GVariant* outParam = NULL; diff --git a/src/server/CMakeLists.txt b/src/server/CMakeLists.txt index ee007d8..d380df0 100644 --- a/src/server/CMakeLists.txt +++ b/src/server/CMakeLists.txt @@ -1,6 +1,6 @@ SET(target "${PROJECT_NAME}-server-genuine") -SET(DEPS "${DEPS} context-common-server capi-system-info sensor") +SET(DEPS "${DEPS} jsoncpp context-common-server capi-system-info sensor") FILE(GLOB_RECURSE SRCS *.cpp ../shared/*.cpp) MESSAGE("Sources: ${SRCS}") diff --git a/src/server/legacy/Querier.cpp b/src/server/legacy/Querier.cpp index 37f16e8..3eee5bf 100644 --- a/src/server/legacy/Querier.cpp +++ b/src/server/legacy/Querier.cpp @@ -39,17 +39,17 @@ int Querier::query(const char *sql, std::vector>* tuples) return ret ? E_NONE : E_FAILED; } -int Querier::queryRaw(int startTime, int endTime, std::vector>* tuples) +int Querier::queryRaw(time_t startTime, time_t endTime, std::vector>* tuples) { return E_PARAM; } -int Querier::query(int startTime, int endTime, std::vector>* tuples) +int Querier::query(time_t startTime, time_t endTime, std::vector>* tuples) { return E_PARAM; } -int Querier::query(int startTime, int endTime, int anchor, int interval, std::vector>* tuples) +int Querier::query(time_t startTime, time_t endTime, time_t anchor, int interval, std::vector>* tuples) { _D("Ignore anchor & interval"); return query(startTime, endTime, tuples); diff --git a/src/server/legacy/Querier.h b/src/server/legacy/Querier.h index 354681d..948fa4e 100644 --- a/src/server/legacy/Querier.h +++ b/src/server/legacy/Querier.h @@ -29,9 +29,9 @@ namespace ctx { virtual std::string getProjection(); - virtual int queryRaw(int startTime, int endTime, std::vector>* tuples); - virtual int query(int startTime, int endTime, std::vector>* tuples); - virtual int query(int startTime, int endTime, int anchor, int interval, std::vector>* tuples); + virtual int queryRaw(time_t startTime, time_t endTime, std::vector>* tuples); + virtual int query(time_t startTime, time_t endTime, std::vector>* tuples); + virtual int query(time_t startTime, time_t endTime, time_t anchor, int interval, std::vector>* tuples); protected: int query(const char *sql, std::vector>* tuples); diff --git a/src/server/legacy/RecorderClientInfo.cpp b/src/server/legacy/RecorderClientInfo.cpp index 2bf99d8..56b8f02 100644 --- a/src/server/legacy/RecorderClientInfo.cpp +++ b/src/server/legacy/RecorderClientInfo.cpp @@ -55,7 +55,7 @@ RecorderClientInfo::~RecorderClientInfo() __uninstallMonitor = NULL; } -int RecorderClientInfo::get(std::string subject, std::string pkgId, CtxJson& option) +int RecorderClientInfo::get(std::string subject, std::string pkgId, Json::Value& option) { bool ret; std::string optStr; @@ -73,12 +73,14 @@ int RecorderClientInfo::get(std::string subject, std::string pkgId, CtxJson& opt IF_FAIL_RETURN(!tuples.empty(), E_NO_DATA); tuples[0]->getAt(0, &optStr); - option = optStr; + + Json::Reader jr; + jr.parse(optStr, option); return E_NONE; } -int RecorderClientInfo::get(std::string subject, std::vector& options) +int RecorderClientInfo::get(std::string subject, std::vector& options) { bool ret; std::string optStr; @@ -95,9 +97,15 @@ int RecorderClientInfo::get(std::string subject, std::vector& options) IF_FAIL_RETURN(ret, E_FAILED); IF_FAIL_RETURN(!tuples.empty(), E_NO_DATA); + Json::Reader jr; + for (auto& tuple : tuples) { tuple->getAt(0, &optStr); - options.push_back(CtxJson(optStr)); + + Json::Value opt; + jr.parse(optStr, opt); + + options.push_back(opt); } return E_NONE; @@ -122,12 +130,15 @@ bool RecorderClientInfo::exist(std::string subject) return true; } -bool RecorderClientInfo::set(std::string subject, std::string pkgId, CtxJson option, int retentionPeriod) +bool RecorderClientInfo::set(std::string subject, std::string pkgId, const Json::Value& option, int retentionPeriod) { bool ret; + Json::FastWriter fw; + fw.omitEndingLineFeed(); + char *query = sqlite3_mprintf( "INSERT INTO " CLIENT_INFO " VALUES ('%q', '%q', '%q', %d)", - subject.c_str(), pkgId.c_str(), option.str().c_str(), retentionPeriod); + subject.c_str(), pkgId.c_str(), fw.write(option).c_str(), retentionPeriod); ret = SensorDatabase::execute(query, NULL); sqlite3_free(query); @@ -149,17 +160,15 @@ bool RecorderClientInfo::remove(std::string subject, std::string pkgId) return ret; } -void RecorderClientInfo::getParam(std::vector &options, const char *key, float *min, float *max) +void RecorderClientInfo::getParam(std::vector &options, const char *key, float *min, float *max) { - double val; - - for (CtxJson& opt : options) { - if (!opt.get(NULL, key, &val)) + for (auto& opt : options) { + if (!opt.isMember(key)) continue; if (min) - *min = MIN(*min, static_cast(val)); + *min = MIN(*min, static_cast(opt[key].asInt64())); if (max) - *max = MAX(*max, static_cast(val)); + *max = MAX(*max, static_cast(opt[key].asInt64())); } } diff --git a/src/server/legacy/RecorderClientInfo.h b/src/server/legacy/RecorderClientInfo.h index 0c85919..1b8b710 100644 --- a/src/server/legacy/RecorderClientInfo.h +++ b/src/server/legacy/RecorderClientInfo.h @@ -17,9 +17,9 @@ #ifndef __SENSOR_RECORDER_CLIENT_INFO_H__ #define __SENSOR_RECORDER_CLIENT_INFO_H__ +#include #include #include -#include #include #include "UninstallMonitor.h" @@ -32,14 +32,14 @@ namespace ctx { RecorderClientInfo(); ~RecorderClientInfo(); - int get(std::string subject, std::string pkgId, CtxJson& option); - int get(std::string subject, std::vector& options); + int get(std::string subject, std::string pkgId, Json::Value& option); + int get(std::string subject, std::vector& options); bool exist(std::string subject); - bool set(std::string subject, std::string pkgId, CtxJson option, int retentionPeriod); + bool set(std::string subject, std::string pkgId, const Json::Value& option, int retentionPeriod); bool remove(std::string subject, std::string pkgId); - void getParam(std::vector& options, const char *key, float *min, float *max); + void getParam(std::vector& options, const char *key, float *min, float *max); static void purgeClient(std::string pkgId); static void setHostService(SensorRecorderService* hostService); diff --git a/src/server/legacy/SensorProvider.cpp b/src/server/legacy/SensorProvider.cpp index a31a050..a3a4e00 100644 --- a/src/server/legacy/SensorProvider.cpp +++ b/src/server/legacy/SensorProvider.cpp @@ -98,24 +98,32 @@ const char* SensorProvider::getPrivilege() return NULL; } -int SensorProvider::readRecords(CtxJson option, std::string* projection, std::vector>* tuples) +int SensorProvider::readRecords(const std::string& option, std::string* projection, std::vector>* tuples) { - int endTime = static_cast(time(NULL)) + 1; - int startTime = endTime - DEFAULT_QUERY_PERIOD - 1; - int anchor = -1; + time_t endTime = time(NULL) + 1; + time_t startTime = endTime - DEFAULT_QUERY_PERIOD - 1; + time_t anchor = -1; int interval = -1; - if (option.get(NULL, KEY_START_TIME, &startTime)) - IF_FAIL_RETURN(startTime >= 0, E_PARAM); + Json::Reader jr; + Json::Value optionJson; + jr.parse(option, optionJson); - if (option.get(NULL, KEY_END_TIME, &endTime)) - IF_FAIL_RETURN(endTime >= 0, E_PARAM); + startTime = static_cast(optionJson.get(KEY_START_TIME, static_cast(startTime)).asInt64()); + IF_FAIL_RETURN(startTime >= 0, E_PARAM); - if (option.get(NULL, KEY_ANCHOR, &anchor)) + endTime = static_cast(optionJson.get(KEY_END_TIME, static_cast(endTime)).asInt64()); + IF_FAIL_RETURN(endTime >= 0, E_PARAM); + + if (optionJson.isMember(KEY_ANCHOR)) { + anchor = static_cast(optionJson[KEY_ANCHOR].asInt64()); IF_FAIL_RETURN(anchor >= 0, E_PARAM); + } - if (option.get(NULL, KEY_INTERVAL, &interval)) + if (optionJson.isMember(KEY_INTERVAL)) { + interval = optionJson[KEY_INTERVAL].asInt(); IF_FAIL_RETURN(interval >= 0, E_PARAM); + } if (endTime >= 0 && startTime >= endTime) return E_PARAM; @@ -141,21 +149,24 @@ int SensorProvider::readRecords(CtxJson option, std::string* projection, std::ve return ret; } -int SensorProvider::startRecording(const std::string& pkgId, CtxJson option) +int SensorProvider::startRecording(const std::string& pkgId, const std::string& option) { int retentionPeriod = DEFAULT_RETENTION; - _D("PkgId: %s", pkgId.c_str()); - _J("Option", option); + _D("PkgId: %s, Option: %s", pkgId.c_str(), option.c_str()); + + Json::Reader jr; + Json::Value optionJson; + jr.parse(option, optionJson); - if (option.get(NULL, KEY_RETENTION, &retentionPeriod)) { - retentionPeriod *= SECONDS_PER_HOUR; - option.remove(NULL, KEY_RETENTION); + if (optionJson.isMember(KEY_RETENTION)) { + retentionPeriod = optionJson[KEY_RETENTION].asInt() * SECONDS_PER_HOUR; + optionJson.removeMember(KEY_RETENTION); } - IF_FAIL_RETURN(verifyOption(option), E_PARAM); + IF_FAIL_RETURN(verifyOption(optionJson), E_PARAM); - return __addClient(pkgId, retentionPeriod, option); + return __addClient(pkgId, retentionPeriod, optionJson); } int SensorProvider::stopRecording(const std::string& pkgId) @@ -165,16 +176,14 @@ int SensorProvider::stopRecording(const std::string& pkgId) return __removeClient(pkgId); } -bool SensorProvider::verifyOption(CtxJson option) +bool SensorProvider::verifyOption(const Json::Value& option) { - std::list keys; - option.getKeys(&keys); - return keys.size() == 0; + return option.empty(); } -int SensorProvider::__addClient(std::string pkgId, int retentionPeriod, CtxJson option) +int SensorProvider::__addClient(std::string pkgId, int retentionPeriod, Json::Value& option) { - CtxJson tmp; + Json::Value tmp; int ret; /* Validate the retention period */ @@ -197,7 +206,7 @@ int SensorProvider::__addClient(std::string pkgId, int retentionPeriod, CtxJson int SensorProvider::__removeClient(std::string pkgId) { - std::vector options; + std::vector options; int ret; /* Remove the app's request first */ diff --git a/src/server/legacy/SensorProvider.h b/src/server/legacy/SensorProvider.h index 0e17775..e76068a 100644 --- a/src/server/legacy/SensorProvider.h +++ b/src/server/legacy/SensorProvider.h @@ -35,8 +35,8 @@ namespace ctx { const char* getSubject(); - int readRecords(CtxJson option, std::string* projection, std::vector>* tuples); - int startRecording(const std::string& pkgId, CtxJson option); + int readRecords(const std::string& option, std::string* projection, std::vector>* tuples); + int startRecording(const std::string& pkgId, const std::string& option); int stopRecording(const std::string& pkgId); virtual bool isSupported(); @@ -55,10 +55,10 @@ namespace ctx { virtual SensorLogger* getLogger() = 0; virtual Querier* getQuerier() = 0; - virtual bool verifyOption(CtxJson option); + virtual bool verifyOption(const Json::Value& option); private: - int __addClient(std::string pkgId, int retentionPeriod, CtxJson option); + int __addClient(std::string pkgId, int retentionPeriod, Json::Value& option); int __removeClient(std::string pkgId); std::string __subject; diff --git a/src/server/legacy/heartrate/HeartRate.cpp b/src/server/legacy/heartrate/HeartRate.cpp index 55dadf2..17ef774 100644 --- a/src/server/legacy/heartrate/HeartRate.cpp +++ b/src/server/legacy/heartrate/HeartRate.cpp @@ -49,18 +49,13 @@ Querier* HeartRateProvider::getQuerier() return &__querier; } -bool HeartRateProvider::verifyOption(CtxJson option) +bool HeartRateProvider::verifyOption(const Json::Value& option) { - std::list keys; - option.getKeys(&keys); + IF_FAIL_RETURN(option.size() <= 1, false); - IF_FAIL_RETURN(keys.size() <= 1, false); - - int interval = 0; - if (option.get(NULL, KEY_INTERVAL, &interval)) { - if (interval < MIN_MEASURING_INTERVAL || interval > MAX_MEASURING_INTERVAL) - return false; - } + int interval = option.get(KEY_INTERVAL, MIN_MEASURING_INTERVAL).asInt(); + if (interval < MIN_MEASURING_INTERVAL || interval > MAX_MEASURING_INTERVAL) + return false; return true; } diff --git a/src/server/legacy/heartrate/HeartRate.h b/src/server/legacy/heartrate/HeartRate.h index 05b1e60..0aaab05 100644 --- a/src/server/legacy/heartrate/HeartRate.h +++ b/src/server/legacy/heartrate/HeartRate.h @@ -34,7 +34,7 @@ namespace ctx { protected: SensorLogger* getLogger(); Querier* getQuerier(); - bool verifyOption(CtxJson option); + bool verifyOption(const Json::Value& option); private: HeartRateLogger __logger; diff --git a/src/server/legacy/heartrate/HeartRateLogger.cpp b/src/server/legacy/heartrate/HeartRateLogger.cpp index 427fcf1..15c2f12 100644 --- a/src/server/legacy/heartrate/HeartRateLogger.cpp +++ b/src/server/legacy/heartrate/HeartRateLogger.cpp @@ -58,7 +58,7 @@ HeartRateLogger::~HeartRateLogger() bool HeartRateLogger::start() { - std::vector options; + std::vector options; RecorderClientInfo clientInfo; float interval = MAX_MEASURING_INTERVAL; diff --git a/src/server/legacy/heartrate/HeartRateQuerier.cpp b/src/server/legacy/heartrate/HeartRateQuerier.cpp index 2bf1fba..546a50d 100644 --- a/src/server/legacy/heartrate/HeartRateQuerier.cpp +++ b/src/server/legacy/heartrate/HeartRateQuerier.cpp @@ -39,12 +39,12 @@ std::string HeartRateQuerier::getProjection() return KEY_HEART_RATE "," KEY_START_TIME "," KEY_END_TIME; } -int HeartRateQuerier::queryRaw(int startTime, int endTime, std::vector>* tuples) +int HeartRateQuerier::queryRaw(time_t startTime, time_t endTime, std::vector>* tuples) { return query(startTime, endTime, tuples); } -int HeartRateQuerier::query(int startTime, int endTime, std::vector>* tuples) +int HeartRateQuerier::query(time_t startTime, time_t endTime, std::vector>* tuples) { char *sql = sqlite3_mprintf( "SELECT " PROJECTION \ diff --git a/src/server/legacy/heartrate/HeartRateQuerier.h b/src/server/legacy/heartrate/HeartRateQuerier.h index 9ca670e..01995d3 100644 --- a/src/server/legacy/heartrate/HeartRateQuerier.h +++ b/src/server/legacy/heartrate/HeartRateQuerier.h @@ -28,8 +28,8 @@ namespace ctx { std::string getProjection(); - int queryRaw(int startTime, int endTime, std::vector>* tuples); - int query(int startTime, int endTime, std::vector>* tuples); + int queryRaw(time_t startTime, time_t endTime, std::vector>* tuples); + int query(time_t startTime, time_t endTime, std::vector>* tuples); }; } diff --git a/src/server/legacy/pedometer/PedometerQuerier.cpp b/src/server/legacy/pedometer/PedometerQuerier.cpp index 648c5d0..6df0d11 100644 --- a/src/server/legacy/pedometer/PedometerQuerier.cpp +++ b/src/server/legacy/pedometer/PedometerQuerier.cpp @@ -59,7 +59,7 @@ std::string PedometerQuerier::getProjection() KEY_END_TIME; } -int PedometerQuerier::queryRaw(int startTime, int endTime, std::vector>* tuples) +int PedometerQuerier::queryRaw(time_t startTime, time_t endTime, std::vector>* tuples) { char *sql = sqlite3_mprintf( "SELECT " PROJECTION_RAW \ @@ -74,7 +74,7 @@ int PedometerQuerier::queryRaw(int startTime, int endTime, std::vector>* tuples) +int PedometerQuerier::query(time_t startTime, time_t endTime, std::vector>* tuples) { char *sql = sqlite3_mprintf( "SELECT " PROJECTION \ @@ -88,7 +88,7 @@ int PedometerQuerier::query(int startTime, int endTime, std::vector>* tuples) +int PedometerQuerier::query(time_t startTime, time_t endTime, time_t anchor, int interval, std::vector>* tuples) { char *sql = sqlite3_mprintf( "SELECT " PROJECTION \ diff --git a/src/server/legacy/pedometer/PedometerQuerier.h b/src/server/legacy/pedometer/PedometerQuerier.h index 057d0d4..08ce5f7 100644 --- a/src/server/legacy/pedometer/PedometerQuerier.h +++ b/src/server/legacy/pedometer/PedometerQuerier.h @@ -28,9 +28,9 @@ namespace ctx { std::string getProjection(); - int queryRaw(int startTime, int endTime, std::vector>* tuples); - int query(int startTime, int endTime, std::vector>* tuples); - int query(int startTime, int endTime, int anchor, int interval, std::vector>* tuples); + int queryRaw(time_t startTime, time_t endTime, std::vector>* tuples); + int query(time_t startTime, time_t endTime, std::vector>* tuples); + int query(time_t startTime, time_t endTime, time_t anchor, int interval, std::vector>* tuples); }; } diff --git a/src/server/legacy/pressure/PressureQuerier.cpp b/src/server/legacy/pressure/PressureQuerier.cpp index 00f67bb..070dc25 100644 --- a/src/server/legacy/pressure/PressureQuerier.cpp +++ b/src/server/legacy/pressure/PressureQuerier.cpp @@ -57,7 +57,7 @@ std::string PressureQuerier::getProjection() KEY_END_TIME; } -int PressureQuerier::queryRaw(int startTime, int endTime, std::vector>* tuples) +int PressureQuerier::queryRaw(time_t startTime, time_t endTime, std::vector>* tuples) { char *sql = sqlite3_mprintf( "SELECT " PROJECTION_RAW \ @@ -71,7 +71,7 @@ int PressureQuerier::queryRaw(int startTime, int endTime, std::vector>* tuples) +int PressureQuerier::query(time_t startTime, time_t endTime, std::vector>* tuples) { char *sql = sqlite3_mprintf( "SELECT " PROJECTION \ @@ -85,7 +85,7 @@ int PressureQuerier::query(int startTime, int endTime, std::vector>* tuples) +int PressureQuerier::query(time_t startTime, time_t endTime, time_t anchor, int interval, std::vector>* tuples) { char *sql = sqlite3_mprintf( "SELECT " PROJECTION \ diff --git a/src/server/legacy/pressure/PressureQuerier.h b/src/server/legacy/pressure/PressureQuerier.h index f6380e6..a89e7ba 100644 --- a/src/server/legacy/pressure/PressureQuerier.h +++ b/src/server/legacy/pressure/PressureQuerier.h @@ -28,9 +28,9 @@ namespace ctx { std::string getProjection(); - int queryRaw(int startTime, int endTime, std::vector>* tuples); - int query(int startTime, int endTime, std::vector>* tuples); - int query(int startTime, int endTime, int anchor, int interval, std::vector>* tuples); + int queryRaw(time_t startTime, time_t endTime, std::vector>* tuples); + int query(time_t startTime, time_t endTime, std::vector>* tuples); + int query(time_t startTime, time_t endTime, time_t anchor, int interval, std::vector>* tuples); }; } diff --git a/src/server/legacy/sleep/SleepQuerier.cpp b/src/server/legacy/sleep/SleepQuerier.cpp index 1e3e344..9b2dd0f 100644 --- a/src/server/legacy/sleep/SleepQuerier.cpp +++ b/src/server/legacy/sleep/SleepQuerier.cpp @@ -40,12 +40,12 @@ std::string SleepQuerier::getProjection() return KEY_STATE "," KEY_START_TIME "," KEY_END_TIME; } -int SleepQuerier::queryRaw(int startTime, int endTime, std::vector>* tuples) +int SleepQuerier::queryRaw(time_t startTime, time_t endTime, std::vector>* tuples) { return query(startTime, endTime, tuples); } -int SleepQuerier::query(int startTime, int endTime, std::vector>* tuples) +int SleepQuerier::query(time_t startTime, time_t endTime, std::vector>* tuples) { char *sql = sqlite3_mprintf( "SELECT " PROJECTION \ diff --git a/src/server/legacy/sleep/SleepQuerier.h b/src/server/legacy/sleep/SleepQuerier.h index e76fc10..69da521 100644 --- a/src/server/legacy/sleep/SleepQuerier.h +++ b/src/server/legacy/sleep/SleepQuerier.h @@ -28,8 +28,8 @@ namespace ctx { std::string getProjection(); - int queryRaw(int startTime, int endTime, std::vector>* tuples); - int query(int startTime, int endTime, std::vector>* tuples); + int queryRaw(time_t startTime, time_t endTime, std::vector>* tuples); + int query(time_t startTime, time_t endTime, std::vector>* tuples); }; } -- 2.7.4 From f3bd13032f6dcc877c04403165d560a506e3aefb Mon Sep 17 00:00:00 2001 From: Mu-Woong Lee Date: Wed, 12 Jul 2017 19:10:58 +0900 Subject: [PATCH 14/16] Apply the changed function names in context-common Change-Id: I4f1c26d00d7b79be5f5c169188054e2108500f61 Signed-off-by: Mu-Woong Lee --- src/client/QueryResultListener.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/client/QueryResultListener.cpp b/src/client/QueryResultListener.cpp index 501856a..72566c0 100644 --- a/src/client/QueryResultListener.cpp +++ b/src/client/QueryResultListener.cpp @@ -36,7 +36,7 @@ void QueryResultListener::onSuccess(const std::string& methodName, GVariant* par int remains = records.size(); ctx_sensor_rec_data_s data; - data.keys = util::tokenizeString(schema, ","); + data.keys = util::tokenize_string(schema, ","); _D("%d records received", remains); -- 2.7.4 From cdc1d81a1435e606e12b89e1f0c0f4556ef3fbf2 Mon Sep 17 00:00:00 2001 From: Somin Kim Date: Mon, 11 Sep 2017 21:12:36 +0900 Subject: [PATCH 15/16] Fix coding rule violations Change-Id: Ie46bcbd0f0bd966d5ba12c20f0a8c4b8add5b450 Signed-off-by: Somin Kim --- src/server/MethodCallHandler.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/server/MethodCallHandler.cpp b/src/server/MethodCallHandler.cpp index c821a24..9b27d50 100644 --- a/src/server/MethodCallHandler.cpp +++ b/src/server/MethodCallHandler.cpp @@ -53,7 +53,6 @@ void MethodCallHandler::onMethodCalled(IMethodCall* methodCall) } else if (methodCall->getMethodName() == METHOD_READ_REC) { __readRecords(*provider, *methodCall); } - } catch (const int error) { _W("Catch: %s", CTX_ERROR_STR(error)); methodCall->reply(error); -- 2.7.4 From 2e29f97d4b06c423e842007b1c1ca20ab5a844da Mon Sep 17 00:00:00 2001 From: "kibak.yoon" Date: Fri, 13 Oct 2017 20:18:38 +0900 Subject: [PATCH 16/16] Revert "Replace the glib-json wrapper CtxJson with jsoncpp" This reverts commit 61da57e6c5ea97e9ea7a038ea2b810aeba940770. Change-Id: I6f61206006264eb36f35a09267c496ca15561252 --- packaging/context-sensor-recorder.spec | 1 - src/client/CMakeLists.txt | 2 +- src/client/sensor_recorder.cpp | 37 ++++++--------- src/server/CMakeLists.txt | 2 +- src/server/legacy/Querier.cpp | 6 +-- src/server/legacy/Querier.h | 6 +-- src/server/legacy/RecorderClientInfo.cpp | 35 ++++++-------- src/server/legacy/RecorderClientInfo.h | 10 ++-- src/server/legacy/SensorProvider.cpp | 59 ++++++++++-------------- src/server/legacy/SensorProvider.h | 8 ++-- src/server/legacy/heartrate/HeartRate.cpp | 15 ++++-- src/server/legacy/heartrate/HeartRate.h | 2 +- src/server/legacy/heartrate/HeartRateLogger.cpp | 2 +- src/server/legacy/heartrate/HeartRateQuerier.cpp | 4 +- src/server/legacy/heartrate/HeartRateQuerier.h | 4 +- src/server/legacy/pedometer/PedometerQuerier.cpp | 6 +-- src/server/legacy/pedometer/PedometerQuerier.h | 6 +-- src/server/legacy/pressure/PressureQuerier.cpp | 6 +-- src/server/legacy/pressure/PressureQuerier.h | 6 +-- src/server/legacy/sleep/SleepQuerier.cpp | 4 +- src/server/legacy/sleep/SleepQuerier.h | 4 +- 21 files changed, 102 insertions(+), 123 deletions(-) diff --git a/packaging/context-sensor-recorder.spec b/packaging/context-sensor-recorder.spec index 6a27459..aaadc2d 100644 --- a/packaging/context-sensor-recorder.spec +++ b/packaging/context-sensor-recorder.spec @@ -9,7 +9,6 @@ Source0: %{name}-%{version}.tar.gz BuildRequires: cmake BuildRequires: pkgconfig(glib-2.0) BuildRequires: pkgconfig(gio-2.0) -BuildRequires: pkgconfig(jsoncpp) BuildRequires: pkgconfig(dlog) BuildRequires: pkgconfig(sensor) BuildRequires: pkgconfig(capi-base-common) diff --git a/src/client/CMakeLists.txt b/src/client/CMakeLists.txt index 46d4131..8f551d7 100644 --- a/src/client/CMakeLists.txt +++ b/src/client/CMakeLists.txt @@ -1,6 +1,6 @@ SET(target "${PROJECT_NAME}-client-genuine") -SET(DEPS "${DEPS} jsoncpp context-common-client") +SET(DEPS "${DEPS} context-common-client") FILE(GLOB_RECURSE SRCS *.cpp ../shared/*.cpp) MESSAGE("Sources: ${SRCS}") diff --git a/src/client/sensor_recorder.cpp b/src/client/sensor_recorder.cpp index 1973f76..618cfcf 100644 --- a/src/client/sensor_recorder.cpp +++ b/src/client/sensor_recorder.cpp @@ -14,10 +14,10 @@ * limitations under the License. */ -#include #include #include #include +#include #include "QueryResultListener.h" #define STR_BUFFER_SIZE 128 @@ -48,11 +48,8 @@ EXPORT_API int ctx_sensor_rec_start(const char* subject, ctx_sensor_rec_option_h IF_FAIL_RETURN(subject, E_PARAM); std::string optionStr; - if (option) { - Json::FastWriter fw; - fw.omitEndingLineFeed(); - optionStr = fw.write(*static_cast(option)); - } + if (option) + optionStr = static_cast(option)->str(); GVariant* param = g_variant_new("(ss)", subject, optionStr.c_str()); @@ -69,7 +66,7 @@ EXPORT_API int ctx_sensor_rec_create_option(ctx_sensor_rec_option_h *option) { IF_FAIL_RETURN(option, E_PARAM); - *option = new(std::nothrow) Json::Value; + *option = new(std::nothrow) ctx::CtxJson; IF_FAIL_RETURN(*option, E_NO_MEM); return E_NONE; @@ -79,7 +76,7 @@ EXPORT_API int ctx_sensor_rec_destroy_option(ctx_sensor_rec_option_h option) { IF_FAIL_RETURN(option, E_PARAM); - delete static_cast(option); + delete static_cast(option); return E_NONE; } @@ -90,8 +87,8 @@ EXPORT_API int ctx_sensor_rec_option_set_int(ctx_sensor_rec_option_h option, con IF_FAIL_RETURN(STR_EQ(param, CTX_SENSOR_RECORDER_KEY_INTERVAL) || STR_EQ(param, CTX_SENSOR_RECORDER_KEY_RETENTION), E_PARAM); - Json::Value& optionJson = *static_cast(option); - optionJson[param] = value; + ctx::CtxJson* optionCtxJson = static_cast(option); + optionCtxJson->set(NULL, param, static_cast(value)); return E_NONE; } @@ -100,7 +97,7 @@ EXPORT_API int ctx_sensor_rec_create_query(ctx_sensor_rec_query_h *query) { IF_FAIL_RETURN(query, E_PARAM); - *query = new(std::nothrow) Json::Value; + *query = new(std::nothrow) ctx::CtxJson; IF_FAIL_RETURN(*query, E_NO_MEM); return E_NONE; @@ -110,7 +107,7 @@ EXPORT_API int ctx_sensor_rec_destroy_query(ctx_sensor_rec_query_h query) { IF_FAIL_RETURN(query, E_PARAM); - delete static_cast(query); + delete static_cast(query); return E_NONE; } @@ -123,8 +120,8 @@ EXPORT_API int ctx_sensor_rec_query_set_int(ctx_sensor_rec_query_h query, const STR_EQ(param, CTX_SENSOR_RECORDER_KEY_START_TIME) || STR_EQ(param, CTX_SENSOR_RECORDER_KEY_END_TIME), E_PARAM); - Json::Value& queryJson = *static_cast(query); - queryJson[param] = value; + ctx::CtxJson* queryCtxJson = static_cast(query); + queryCtxJson->set(NULL, param, static_cast(value)); return E_NONE; } @@ -136,8 +133,8 @@ EXPORT_API int ctx_sensor_rec_query_set_time(ctx_sensor_rec_query_h query, const STR_EQ(param, CTX_SENSOR_RECORDER_KEY_START_TIME) || STR_EQ(param, CTX_SENSOR_RECORDER_KEY_END_TIME), E_PARAM); - Json::Value& queryJson = *static_cast(query); - queryJson[param] = static_cast(t); + ctx::CtxJson* queryCtxJson = static_cast(query); + queryCtxJson->set(NULL, param, static_cast(t)); return E_NONE; } @@ -149,9 +146,7 @@ EXPORT_API int ctx_sensor_rec_read(const char* subject, ctx_sensor_rec_query_h q QueryResultListener* listener = new(std::nothrow) QueryResultListener(subject, cb, user_data); IF_FAIL_RETURN_TAG(listener, E_NO_MEM, _E, E_STR_ALLOC); - Json::FastWriter fw; - fw.omitEndingLineFeed(); - std::string queryStr = fw.write(*static_cast(query)); + std::string queryStr = static_cast(query)->str(); GVariant* param = g_variant_new("(ss)", subject, queryStr.c_str()); int error = __getServiceProxy()->call(METHOD_READ_REC, param, listener); @@ -169,9 +164,7 @@ EXPORT_API int ctx_sensor_rec_read_sync(const char* subject, ctx_sensor_rec_quer QueryResultListener* listener = new(std::nothrow) QueryResultListener(subject, cb, user_data); IF_FAIL_RETURN_TAG(listener, E_NO_MEM, _E, E_STR_ALLOC); - Json::FastWriter fw; - fw.omitEndingLineFeed(); - std::string queryStr = fw.write(*static_cast(query)); + std::string queryStr = static_cast(query)->str(); GVariant* param = g_variant_new("(ss)", subject, queryStr.c_str()); GVariant* outParam = NULL; diff --git a/src/server/CMakeLists.txt b/src/server/CMakeLists.txt index d380df0..ee007d8 100644 --- a/src/server/CMakeLists.txt +++ b/src/server/CMakeLists.txt @@ -1,6 +1,6 @@ SET(target "${PROJECT_NAME}-server-genuine") -SET(DEPS "${DEPS} jsoncpp context-common-server capi-system-info sensor") +SET(DEPS "${DEPS} context-common-server capi-system-info sensor") FILE(GLOB_RECURSE SRCS *.cpp ../shared/*.cpp) MESSAGE("Sources: ${SRCS}") diff --git a/src/server/legacy/Querier.cpp b/src/server/legacy/Querier.cpp index 3eee5bf..37f16e8 100644 --- a/src/server/legacy/Querier.cpp +++ b/src/server/legacy/Querier.cpp @@ -39,17 +39,17 @@ int Querier::query(const char *sql, std::vector>* tuples) return ret ? E_NONE : E_FAILED; } -int Querier::queryRaw(time_t startTime, time_t endTime, std::vector>* tuples) +int Querier::queryRaw(int startTime, int endTime, std::vector>* tuples) { return E_PARAM; } -int Querier::query(time_t startTime, time_t endTime, std::vector>* tuples) +int Querier::query(int startTime, int endTime, std::vector>* tuples) { return E_PARAM; } -int Querier::query(time_t startTime, time_t endTime, time_t anchor, int interval, std::vector>* tuples) +int Querier::query(int startTime, int endTime, int anchor, int interval, std::vector>* tuples) { _D("Ignore anchor & interval"); return query(startTime, endTime, tuples); diff --git a/src/server/legacy/Querier.h b/src/server/legacy/Querier.h index 948fa4e..354681d 100644 --- a/src/server/legacy/Querier.h +++ b/src/server/legacy/Querier.h @@ -29,9 +29,9 @@ namespace ctx { virtual std::string getProjection(); - virtual int queryRaw(time_t startTime, time_t endTime, std::vector>* tuples); - virtual int query(time_t startTime, time_t endTime, std::vector>* tuples); - virtual int query(time_t startTime, time_t endTime, time_t anchor, int interval, std::vector>* tuples); + virtual int queryRaw(int startTime, int endTime, std::vector>* tuples); + virtual int query(int startTime, int endTime, std::vector>* tuples); + virtual int query(int startTime, int endTime, int anchor, int interval, std::vector>* tuples); protected: int query(const char *sql, std::vector>* tuples); diff --git a/src/server/legacy/RecorderClientInfo.cpp b/src/server/legacy/RecorderClientInfo.cpp index 56b8f02..2bf99d8 100644 --- a/src/server/legacy/RecorderClientInfo.cpp +++ b/src/server/legacy/RecorderClientInfo.cpp @@ -55,7 +55,7 @@ RecorderClientInfo::~RecorderClientInfo() __uninstallMonitor = NULL; } -int RecorderClientInfo::get(std::string subject, std::string pkgId, Json::Value& option) +int RecorderClientInfo::get(std::string subject, std::string pkgId, CtxJson& option) { bool ret; std::string optStr; @@ -73,14 +73,12 @@ int RecorderClientInfo::get(std::string subject, std::string pkgId, Json::Value& IF_FAIL_RETURN(!tuples.empty(), E_NO_DATA); tuples[0]->getAt(0, &optStr); - - Json::Reader jr; - jr.parse(optStr, option); + option = optStr; return E_NONE; } -int RecorderClientInfo::get(std::string subject, std::vector& options) +int RecorderClientInfo::get(std::string subject, std::vector& options) { bool ret; std::string optStr; @@ -97,15 +95,9 @@ int RecorderClientInfo::get(std::string subject, std::vector& optio IF_FAIL_RETURN(ret, E_FAILED); IF_FAIL_RETURN(!tuples.empty(), E_NO_DATA); - Json::Reader jr; - for (auto& tuple : tuples) { tuple->getAt(0, &optStr); - - Json::Value opt; - jr.parse(optStr, opt); - - options.push_back(opt); + options.push_back(CtxJson(optStr)); } return E_NONE; @@ -130,15 +122,12 @@ bool RecorderClientInfo::exist(std::string subject) return true; } -bool RecorderClientInfo::set(std::string subject, std::string pkgId, const Json::Value& option, int retentionPeriod) +bool RecorderClientInfo::set(std::string subject, std::string pkgId, CtxJson option, int retentionPeriod) { bool ret; - Json::FastWriter fw; - fw.omitEndingLineFeed(); - char *query = sqlite3_mprintf( "INSERT INTO " CLIENT_INFO " VALUES ('%q', '%q', '%q', %d)", - subject.c_str(), pkgId.c_str(), fw.write(option).c_str(), retentionPeriod); + subject.c_str(), pkgId.c_str(), option.str().c_str(), retentionPeriod); ret = SensorDatabase::execute(query, NULL); sqlite3_free(query); @@ -160,15 +149,17 @@ bool RecorderClientInfo::remove(std::string subject, std::string pkgId) return ret; } -void RecorderClientInfo::getParam(std::vector &options, const char *key, float *min, float *max) +void RecorderClientInfo::getParam(std::vector &options, const char *key, float *min, float *max) { - for (auto& opt : options) { - if (!opt.isMember(key)) + double val; + + for (CtxJson& opt : options) { + if (!opt.get(NULL, key, &val)) continue; if (min) - *min = MIN(*min, static_cast(opt[key].asInt64())); + *min = MIN(*min, static_cast(val)); if (max) - *max = MAX(*max, static_cast(opt[key].asInt64())); + *max = MAX(*max, static_cast(val)); } } diff --git a/src/server/legacy/RecorderClientInfo.h b/src/server/legacy/RecorderClientInfo.h index 1b8b710..0c85919 100644 --- a/src/server/legacy/RecorderClientInfo.h +++ b/src/server/legacy/RecorderClientInfo.h @@ -17,9 +17,9 @@ #ifndef __SENSOR_RECORDER_CLIENT_INFO_H__ #define __SENSOR_RECORDER_CLIENT_INFO_H__ -#include #include #include +#include #include #include "UninstallMonitor.h" @@ -32,14 +32,14 @@ namespace ctx { RecorderClientInfo(); ~RecorderClientInfo(); - int get(std::string subject, std::string pkgId, Json::Value& option); - int get(std::string subject, std::vector& options); + int get(std::string subject, std::string pkgId, CtxJson& option); + int get(std::string subject, std::vector& options); bool exist(std::string subject); - bool set(std::string subject, std::string pkgId, const Json::Value& option, int retentionPeriod); + bool set(std::string subject, std::string pkgId, CtxJson option, int retentionPeriod); bool remove(std::string subject, std::string pkgId); - void getParam(std::vector& options, const char *key, float *min, float *max); + void getParam(std::vector& options, const char *key, float *min, float *max); static void purgeClient(std::string pkgId); static void setHostService(SensorRecorderService* hostService); diff --git a/src/server/legacy/SensorProvider.cpp b/src/server/legacy/SensorProvider.cpp index a3a4e00..a31a050 100644 --- a/src/server/legacy/SensorProvider.cpp +++ b/src/server/legacy/SensorProvider.cpp @@ -98,32 +98,24 @@ const char* SensorProvider::getPrivilege() return NULL; } -int SensorProvider::readRecords(const std::string& option, std::string* projection, std::vector>* tuples) +int SensorProvider::readRecords(CtxJson option, std::string* projection, std::vector>* tuples) { - time_t endTime = time(NULL) + 1; - time_t startTime = endTime - DEFAULT_QUERY_PERIOD - 1; - time_t anchor = -1; + int endTime = static_cast(time(NULL)) + 1; + int startTime = endTime - DEFAULT_QUERY_PERIOD - 1; + int anchor = -1; int interval = -1; - Json::Reader jr; - Json::Value optionJson; - jr.parse(option, optionJson); + if (option.get(NULL, KEY_START_TIME, &startTime)) + IF_FAIL_RETURN(startTime >= 0, E_PARAM); - startTime = static_cast(optionJson.get(KEY_START_TIME, static_cast(startTime)).asInt64()); - IF_FAIL_RETURN(startTime >= 0, E_PARAM); + if (option.get(NULL, KEY_END_TIME, &endTime)) + IF_FAIL_RETURN(endTime >= 0, E_PARAM); - endTime = static_cast(optionJson.get(KEY_END_TIME, static_cast(endTime)).asInt64()); - IF_FAIL_RETURN(endTime >= 0, E_PARAM); - - if (optionJson.isMember(KEY_ANCHOR)) { - anchor = static_cast(optionJson[KEY_ANCHOR].asInt64()); + if (option.get(NULL, KEY_ANCHOR, &anchor)) IF_FAIL_RETURN(anchor >= 0, E_PARAM); - } - if (optionJson.isMember(KEY_INTERVAL)) { - interval = optionJson[KEY_INTERVAL].asInt(); + if (option.get(NULL, KEY_INTERVAL, &interval)) IF_FAIL_RETURN(interval >= 0, E_PARAM); - } if (endTime >= 0 && startTime >= endTime) return E_PARAM; @@ -149,24 +141,21 @@ int SensorProvider::readRecords(const std::string& option, std::string* projecti return ret; } -int SensorProvider::startRecording(const std::string& pkgId, const std::string& option) +int SensorProvider::startRecording(const std::string& pkgId, CtxJson option) { int retentionPeriod = DEFAULT_RETENTION; - _D("PkgId: %s, Option: %s", pkgId.c_str(), option.c_str()); - - Json::Reader jr; - Json::Value optionJson; - jr.parse(option, optionJson); + _D("PkgId: %s", pkgId.c_str()); + _J("Option", option); - if (optionJson.isMember(KEY_RETENTION)) { - retentionPeriod = optionJson[KEY_RETENTION].asInt() * SECONDS_PER_HOUR; - optionJson.removeMember(KEY_RETENTION); + if (option.get(NULL, KEY_RETENTION, &retentionPeriod)) { + retentionPeriod *= SECONDS_PER_HOUR; + option.remove(NULL, KEY_RETENTION); } - IF_FAIL_RETURN(verifyOption(optionJson), E_PARAM); + IF_FAIL_RETURN(verifyOption(option), E_PARAM); - return __addClient(pkgId, retentionPeriod, optionJson); + return __addClient(pkgId, retentionPeriod, option); } int SensorProvider::stopRecording(const std::string& pkgId) @@ -176,14 +165,16 @@ int SensorProvider::stopRecording(const std::string& pkgId) return __removeClient(pkgId); } -bool SensorProvider::verifyOption(const Json::Value& option) +bool SensorProvider::verifyOption(CtxJson option) { - return option.empty(); + std::list keys; + option.getKeys(&keys); + return keys.size() == 0; } -int SensorProvider::__addClient(std::string pkgId, int retentionPeriod, Json::Value& option) +int SensorProvider::__addClient(std::string pkgId, int retentionPeriod, CtxJson option) { - Json::Value tmp; + CtxJson tmp; int ret; /* Validate the retention period */ @@ -206,7 +197,7 @@ int SensorProvider::__addClient(std::string pkgId, int retentionPeriod, Json::Va int SensorProvider::__removeClient(std::string pkgId) { - std::vector options; + std::vector options; int ret; /* Remove the app's request first */ diff --git a/src/server/legacy/SensorProvider.h b/src/server/legacy/SensorProvider.h index e76068a..0e17775 100644 --- a/src/server/legacy/SensorProvider.h +++ b/src/server/legacy/SensorProvider.h @@ -35,8 +35,8 @@ namespace ctx { const char* getSubject(); - int readRecords(const std::string& option, std::string* projection, std::vector>* tuples); - int startRecording(const std::string& pkgId, const std::string& option); + int readRecords(CtxJson option, std::string* projection, std::vector>* tuples); + int startRecording(const std::string& pkgId, CtxJson option); int stopRecording(const std::string& pkgId); virtual bool isSupported(); @@ -55,10 +55,10 @@ namespace ctx { virtual SensorLogger* getLogger() = 0; virtual Querier* getQuerier() = 0; - virtual bool verifyOption(const Json::Value& option); + virtual bool verifyOption(CtxJson option); private: - int __addClient(std::string pkgId, int retentionPeriod, Json::Value& option); + int __addClient(std::string pkgId, int retentionPeriod, CtxJson option); int __removeClient(std::string pkgId); std::string __subject; diff --git a/src/server/legacy/heartrate/HeartRate.cpp b/src/server/legacy/heartrate/HeartRate.cpp index 17ef774..55dadf2 100644 --- a/src/server/legacy/heartrate/HeartRate.cpp +++ b/src/server/legacy/heartrate/HeartRate.cpp @@ -49,13 +49,18 @@ Querier* HeartRateProvider::getQuerier() return &__querier; } -bool HeartRateProvider::verifyOption(const Json::Value& option) +bool HeartRateProvider::verifyOption(CtxJson option) { - IF_FAIL_RETURN(option.size() <= 1, false); + std::list keys; + option.getKeys(&keys); - int interval = option.get(KEY_INTERVAL, MIN_MEASURING_INTERVAL).asInt(); - if (interval < MIN_MEASURING_INTERVAL || interval > MAX_MEASURING_INTERVAL) - return false; + IF_FAIL_RETURN(keys.size() <= 1, false); + + int interval = 0; + if (option.get(NULL, KEY_INTERVAL, &interval)) { + if (interval < MIN_MEASURING_INTERVAL || interval > MAX_MEASURING_INTERVAL) + return false; + } return true; } diff --git a/src/server/legacy/heartrate/HeartRate.h b/src/server/legacy/heartrate/HeartRate.h index 0aaab05..05b1e60 100644 --- a/src/server/legacy/heartrate/HeartRate.h +++ b/src/server/legacy/heartrate/HeartRate.h @@ -34,7 +34,7 @@ namespace ctx { protected: SensorLogger* getLogger(); Querier* getQuerier(); - bool verifyOption(const Json::Value& option); + bool verifyOption(CtxJson option); private: HeartRateLogger __logger; diff --git a/src/server/legacy/heartrate/HeartRateLogger.cpp b/src/server/legacy/heartrate/HeartRateLogger.cpp index 15c2f12..427fcf1 100644 --- a/src/server/legacy/heartrate/HeartRateLogger.cpp +++ b/src/server/legacy/heartrate/HeartRateLogger.cpp @@ -58,7 +58,7 @@ HeartRateLogger::~HeartRateLogger() bool HeartRateLogger::start() { - std::vector options; + std::vector options; RecorderClientInfo clientInfo; float interval = MAX_MEASURING_INTERVAL; diff --git a/src/server/legacy/heartrate/HeartRateQuerier.cpp b/src/server/legacy/heartrate/HeartRateQuerier.cpp index 546a50d..2bf1fba 100644 --- a/src/server/legacy/heartrate/HeartRateQuerier.cpp +++ b/src/server/legacy/heartrate/HeartRateQuerier.cpp @@ -39,12 +39,12 @@ std::string HeartRateQuerier::getProjection() return KEY_HEART_RATE "," KEY_START_TIME "," KEY_END_TIME; } -int HeartRateQuerier::queryRaw(time_t startTime, time_t endTime, std::vector>* tuples) +int HeartRateQuerier::queryRaw(int startTime, int endTime, std::vector>* tuples) { return query(startTime, endTime, tuples); } -int HeartRateQuerier::query(time_t startTime, time_t endTime, std::vector>* tuples) +int HeartRateQuerier::query(int startTime, int endTime, std::vector>* tuples) { char *sql = sqlite3_mprintf( "SELECT " PROJECTION \ diff --git a/src/server/legacy/heartrate/HeartRateQuerier.h b/src/server/legacy/heartrate/HeartRateQuerier.h index 01995d3..9ca670e 100644 --- a/src/server/legacy/heartrate/HeartRateQuerier.h +++ b/src/server/legacy/heartrate/HeartRateQuerier.h @@ -28,8 +28,8 @@ namespace ctx { std::string getProjection(); - int queryRaw(time_t startTime, time_t endTime, std::vector>* tuples); - int query(time_t startTime, time_t endTime, std::vector>* tuples); + int queryRaw(int startTime, int endTime, std::vector>* tuples); + int query(int startTime, int endTime, std::vector>* tuples); }; } diff --git a/src/server/legacy/pedometer/PedometerQuerier.cpp b/src/server/legacy/pedometer/PedometerQuerier.cpp index 6df0d11..648c5d0 100644 --- a/src/server/legacy/pedometer/PedometerQuerier.cpp +++ b/src/server/legacy/pedometer/PedometerQuerier.cpp @@ -59,7 +59,7 @@ std::string PedometerQuerier::getProjection() KEY_END_TIME; } -int PedometerQuerier::queryRaw(time_t startTime, time_t endTime, std::vector>* tuples) +int PedometerQuerier::queryRaw(int startTime, int endTime, std::vector>* tuples) { char *sql = sqlite3_mprintf( "SELECT " PROJECTION_RAW \ @@ -74,7 +74,7 @@ int PedometerQuerier::queryRaw(time_t startTime, time_t endTime, std::vector>* tuples) +int PedometerQuerier::query(int startTime, int endTime, std::vector>* tuples) { char *sql = sqlite3_mprintf( "SELECT " PROJECTION \ @@ -88,7 +88,7 @@ int PedometerQuerier::query(time_t startTime, time_t endTime, std::vector>* tuples) +int PedometerQuerier::query(int startTime, int endTime, int anchor, int interval, std::vector>* tuples) { char *sql = sqlite3_mprintf( "SELECT " PROJECTION \ diff --git a/src/server/legacy/pedometer/PedometerQuerier.h b/src/server/legacy/pedometer/PedometerQuerier.h index 08ce5f7..057d0d4 100644 --- a/src/server/legacy/pedometer/PedometerQuerier.h +++ b/src/server/legacy/pedometer/PedometerQuerier.h @@ -28,9 +28,9 @@ namespace ctx { std::string getProjection(); - int queryRaw(time_t startTime, time_t endTime, std::vector>* tuples); - int query(time_t startTime, time_t endTime, std::vector>* tuples); - int query(time_t startTime, time_t endTime, time_t anchor, int interval, std::vector>* tuples); + int queryRaw(int startTime, int endTime, std::vector>* tuples); + int query(int startTime, int endTime, std::vector>* tuples); + int query(int startTime, int endTime, int anchor, int interval, std::vector>* tuples); }; } diff --git a/src/server/legacy/pressure/PressureQuerier.cpp b/src/server/legacy/pressure/PressureQuerier.cpp index 070dc25..00f67bb 100644 --- a/src/server/legacy/pressure/PressureQuerier.cpp +++ b/src/server/legacy/pressure/PressureQuerier.cpp @@ -57,7 +57,7 @@ std::string PressureQuerier::getProjection() KEY_END_TIME; } -int PressureQuerier::queryRaw(time_t startTime, time_t endTime, std::vector>* tuples) +int PressureQuerier::queryRaw(int startTime, int endTime, std::vector>* tuples) { char *sql = sqlite3_mprintf( "SELECT " PROJECTION_RAW \ @@ -71,7 +71,7 @@ int PressureQuerier::queryRaw(time_t startTime, time_t endTime, std::vector>* tuples) +int PressureQuerier::query(int startTime, int endTime, std::vector>* tuples) { char *sql = sqlite3_mprintf( "SELECT " PROJECTION \ @@ -85,7 +85,7 @@ int PressureQuerier::query(time_t startTime, time_t endTime, std::vector>* tuples) +int PressureQuerier::query(int startTime, int endTime, int anchor, int interval, std::vector>* tuples) { char *sql = sqlite3_mprintf( "SELECT " PROJECTION \ diff --git a/src/server/legacy/pressure/PressureQuerier.h b/src/server/legacy/pressure/PressureQuerier.h index a89e7ba..f6380e6 100644 --- a/src/server/legacy/pressure/PressureQuerier.h +++ b/src/server/legacy/pressure/PressureQuerier.h @@ -28,9 +28,9 @@ namespace ctx { std::string getProjection(); - int queryRaw(time_t startTime, time_t endTime, std::vector>* tuples); - int query(time_t startTime, time_t endTime, std::vector>* tuples); - int query(time_t startTime, time_t endTime, time_t anchor, int interval, std::vector>* tuples); + int queryRaw(int startTime, int endTime, std::vector>* tuples); + int query(int startTime, int endTime, std::vector>* tuples); + int query(int startTime, int endTime, int anchor, int interval, std::vector>* tuples); }; } diff --git a/src/server/legacy/sleep/SleepQuerier.cpp b/src/server/legacy/sleep/SleepQuerier.cpp index 9b2dd0f..1e3e344 100644 --- a/src/server/legacy/sleep/SleepQuerier.cpp +++ b/src/server/legacy/sleep/SleepQuerier.cpp @@ -40,12 +40,12 @@ std::string SleepQuerier::getProjection() return KEY_STATE "," KEY_START_TIME "," KEY_END_TIME; } -int SleepQuerier::queryRaw(time_t startTime, time_t endTime, std::vector>* tuples) +int SleepQuerier::queryRaw(int startTime, int endTime, std::vector>* tuples) { return query(startTime, endTime, tuples); } -int SleepQuerier::query(time_t startTime, time_t endTime, std::vector>* tuples) +int SleepQuerier::query(int startTime, int endTime, std::vector>* tuples) { char *sql = sqlite3_mprintf( "SELECT " PROJECTION \ diff --git a/src/server/legacy/sleep/SleepQuerier.h b/src/server/legacy/sleep/SleepQuerier.h index 69da521..e76fc10 100644 --- a/src/server/legacy/sleep/SleepQuerier.h +++ b/src/server/legacy/sleep/SleepQuerier.h @@ -28,8 +28,8 @@ namespace ctx { std::string getProjection(); - int queryRaw(time_t startTime, time_t endTime, std::vector>* tuples); - int query(time_t startTime, time_t endTime, std::vector>* tuples); + int queryRaw(int startTime, int endTime, std::vector>* tuples); + int query(int startTime, int endTime, std::vector>* tuples); }; } -- 2.7.4