From cf0b43f2c0e1e5c3c706acf01141efc6a093781c Mon Sep 17 00:00:00 2001 From: "kibak.yoon" Date: Tue, 25 Apr 2017 13:53:18 +0900 Subject: [PATCH 01/16] sensord: assign a category number to enum of commands manager : 0x100 listener : 0x200 provider : 0x300 etc : 0x1000 Change-Id: I137dd95bc523ac591775b743f9cc6e16234a78c6 Signed-off-by: kibak.yoon --- src/shared/command_types.h | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/shared/command_types.h b/src/shared/command_types.h index 0ada031..6ea1523 100644 --- a/src/shared/command_types.h +++ b/src/shared/command_types.h @@ -32,14 +32,14 @@ enum cmd_type_e { CMD_NONE = 0, /* Manager */ - CMD_MANAGER_CONNECT, + CMD_MANAGER_CONNECT = 0x100, CMD_MANAGER_DISCONNECT, CMD_MANAGER_SENSOR_LIST, CMD_MANAGER_SENSOR_ADDED, CMD_MANAGER_SENSOR_REMOVED, /* Listener */ - CMD_LISTENER_EVENT, + CMD_LISTENER_EVENT = 0x200, CMD_LISTENER_ACC_EVENT, CMD_LISTENER_CONNECT, CMD_LISTENER_DISCONNECT, @@ -50,14 +50,15 @@ enum cmd_type_e { CMD_LISTENER_GET_DATA, /* Provider */ - CMD_PROVIDER_CONNECT, + CMD_PROVIDER_CONNECT = 0x300, CMD_PROVIDER_DISCONNECT, CMD_PROVIDER_START, CMD_PROVIDER_STOP, CMD_PROVIDER_ATTR_INT, CMD_PROVIDER_PUBLISH, - CMD_HAS_PRIVILEGE, + /* Etc */ + CMD_HAS_PRIVILEGE = 0x1000, CMD_CNT, }; -- 2.7.4 From 0caaba1caf776b90daf11be00d874ac7180f930a Mon Sep 17 00:00:00 2001 From: "kibak.yoon" Date: Tue, 25 Apr 2017 18:10:59 +0900 Subject: [PATCH 02/16] sensord: change unclear classes to inner class - sensor_manager_handler -> sensor_manager::channel_handler - sensor_provider_handler -> sensor_provider::channel_handler Change-Id: I07637cd51e8075ca7ba7271e4b8fb4a6b2c02230 Signed-off-by: kibak.yoon --- src/client/sensor_manager.cpp | 4 +++- src/client/sensor_manager.h | 7 +++--- ...dler.cpp => sensor_manager_channel_handler.cpp} | 26 +++++++++++----------- ..._handler.h => sensor_manager_channel_handler.h} | 14 ++++++------ src/client/sensor_provider.cpp | 4 ++-- src/client/sensor_provider.h | 6 ++--- ...ler.cpp => sensor_provider_channel_handler.cpp} | 20 ++++++++--------- ...handler.h => sensor_provider_channel_handler.h} | 15 ++++++------- 8 files changed, 48 insertions(+), 48 deletions(-) rename src/client/{sensor_manager_handler.cpp => sensor_manager_channel_handler.cpp} (63%) rename src/client/{sensor_manager_handler.h => sensor_manager_channel_handler.h} (85%) rename src/client/{sensor_provider_handler.cpp => sensor_provider_channel_handler.cpp} (66%) rename src/client/{sensor_provider_handler.h => sensor_provider_channel_handler.h} (83%) diff --git a/src/client/sensor_manager.cpp b/src/client/sensor_manager.cpp index b2917b2..ee783f0 100644 --- a/src/client/sensor_manager.cpp +++ b/src/client/sensor_manager.cpp @@ -27,6 +27,8 @@ #include #include +#include "sensor_manager_channel_handler.h" + #define SIZE_STR_SENSOR_ALL 27 using namespace sensor; @@ -170,7 +172,7 @@ bool sensor_manager::init(void) m_client = new(std::nothrow) ipc::ipc_client(SENSOR_CHANNEL_PATH); retvm_if(!m_client, false, "Failed to allocate memory"); - m_handler = new(std::nothrow) sensor_manager_handler(this); + m_handler = new(std::nothrow) channel_handler(this); if (!m_handler) { delete m_client; m_client = NULL; diff --git a/src/client/sensor_manager.h b/src/client/sensor_manager.h index d0fabf8..a2409b4 100644 --- a/src/client/sensor_manager.h +++ b/src/client/sensor_manager.h @@ -29,7 +29,6 @@ #include "sensor_internal.h" #include "sensor_provider.h" -#include "sensor_manager_handler.h" namespace sensor { @@ -61,7 +60,7 @@ public: void remove_sensor_removed_cb(sensord_removed_cb cb); private: - typedef std::vector sensor_list_t; + class channel_handler; bool init(void); void deinit(void); @@ -80,9 +79,9 @@ private: ipc::channel *m_channel; ipc::event_loop m_loop; std::atomic m_connected; - sensor_manager_handler *m_handler; + channel_handler *m_handler; - sensor_list_t m_sensors; + std::vector m_sensors; }; } diff --git a/src/client/sensor_manager_handler.cpp b/src/client/sensor_manager_channel_handler.cpp similarity index 63% rename from src/client/sensor_manager_handler.cpp rename to src/client/sensor_manager_channel_handler.cpp index 5ba2acb..97ffd7b 100644 --- a/src/client/sensor_manager_handler.cpp +++ b/src/client/sensor_manager_channel_handler.cpp @@ -17,7 +17,7 @@ * */ -#include "sensor_manager_handler.h" +#include "sensor_manager_channel_handler.h" #include #include @@ -25,22 +25,22 @@ using namespace sensor; -sensor_manager_handler::sensor_manager_handler(sensor_manager *manager) +sensor_manager::channel_handler::channel_handler(sensor_manager *manager) : m_manager(manager) { } -void sensor_manager_handler::connected(ipc::channel *ch) +void sensor_manager::channel_handler::connected(ipc::channel *ch) { } -void sensor_manager_handler::disconnected(ipc::channel *ch) +void sensor_manager::channel_handler::disconnected(ipc::channel *ch) { /* If channel->disconnect() is not explicitly called, it will be restored */ m_manager->restore(); } -void sensor_manager_handler::read(ipc::channel *ch, ipc::message &msg) +void sensor_manager::channel_handler::read(ipc::channel *ch, ipc::message &msg) { switch (msg.header()->type) { case CMD_MANAGER_SENSOR_ADDED: @@ -52,15 +52,15 @@ void sensor_manager_handler::read(ipc::channel *ch, ipc::message &msg) } } -void sensor_manager_handler::read_complete(ipc::channel *ch) +void sensor_manager::channel_handler::read_complete(ipc::channel *ch) { } -void sensor_manager_handler::error_caught(ipc::channel *ch, int error) +void sensor_manager::channel_handler::error_caught(ipc::channel *ch, int error) { } -void sensor_manager_handler::on_sensor_added(ipc::channel *ch, ipc::message &msg) +void sensor_manager::channel_handler::on_sensor_added(ipc::channel *ch, ipc::message &msg) { ret_if(msg.header()->err < OP_SUCCESS); @@ -77,7 +77,7 @@ void sensor_manager_handler::on_sensor_added(ipc::channel *ch, ipc::message &msg } } -void sensor_manager_handler::on_sensor_removed(ipc::channel *ch, ipc::message &msg) +void sensor_manager::channel_handler::on_sensor_removed(ipc::channel *ch, ipc::message &msg) { ret_if(msg.header()->err < 0); char uri[NAME_MAX] = {0, }; @@ -92,22 +92,22 @@ void sensor_manager_handler::on_sensor_removed(ipc::channel *ch, ipc::message &m } } -void sensor_manager_handler::add_sensor_added_cb(sensord_added_cb cb, void *user_data) +void sensor_manager::channel_handler::add_sensor_added_cb(sensord_added_cb cb, void *user_data) { m_sensor_added_callbacks.emplace(cb, user_data); } -void sensor_manager_handler::remove_sensor_added_cb(sensord_added_cb cb) +void sensor_manager::channel_handler::remove_sensor_added_cb(sensord_added_cb cb) { m_sensor_added_callbacks.erase(cb); } -void sensor_manager_handler::add_sensor_removed_cb(sensord_removed_cb cb, void *user_data) +void sensor_manager::channel_handler::add_sensor_removed_cb(sensord_removed_cb cb, void *user_data) { m_sensor_removed_callbacks.emplace(cb, user_data); } -void sensor_manager_handler::remove_sensor_removed_cb(sensord_removed_cb cb) +void sensor_manager::channel_handler::remove_sensor_removed_cb(sensord_removed_cb cb) { m_sensor_removed_callbacks.erase(cb); } diff --git a/src/client/sensor_manager_handler.h b/src/client/sensor_manager_channel_handler.h similarity index 85% rename from src/client/sensor_manager_handler.h rename to src/client/sensor_manager_channel_handler.h index 4f1ac73..2bbc4c2 100644 --- a/src/client/sensor_manager_handler.h +++ b/src/client/sensor_manager_channel_handler.h @@ -17,21 +17,21 @@ * */ -#ifndef __SENSOR_MANAGER_HANDLER__ -#define __SENSOR_MANAGER_HANDLER__ +#ifndef __SENSOR_MANAGER_CHANNEL_HANDLER__ +#define __SENSOR_MANAGER_CHANNEL_HANDLER__ #include +#include #include #include namespace sensor { -class sensor_manager; - -class sensor_manager_handler : public ipc::channel_handler +class sensor_manager::channel_handler : public ipc::channel_handler { public: - sensor_manager_handler(sensor_manager *manager); + channel_handler(sensor_manager *manager); + void connected(ipc::channel *ch); void disconnected(ipc::channel *ch); void read(ipc::channel *ch, ipc::message &msg); @@ -58,4 +58,4 @@ private: } -#endif /* __SENSOR_MANAGER_HANDLER__ */ +#endif /* __SENSOR_MANAGER_CHANNEL_HANDLER__ */ diff --git a/src/client/sensor_provider.cpp b/src/client/sensor_provider.cpp index b07fec5..d38049a 100644 --- a/src/client/sensor_provider.cpp +++ b/src/client/sensor_provider.cpp @@ -26,7 +26,7 @@ #include #include -#include "sensor_provider_handler.h" +#include "sensor_provider_channel_handler.h" using namespace sensor; @@ -49,7 +49,7 @@ bool sensor_provider::init(const char *uri) m_client = new(std::nothrow) ipc::ipc_client(SENSOR_CHANNEL_PATH); retvm_if(!m_client, false, "Failed to allocate memory"); - m_handler = new(std::nothrow) sensor_provider_handler(this); + m_handler = new(std::nothrow) channel_handler(this); if (!m_handler) { delete m_client; return false; diff --git a/src/client/sensor_provider.h b/src/client/sensor_provider.h index 7fc4429..e30e617 100644 --- a/src/client/sensor_provider.h +++ b/src/client/sensor_provider.h @@ -30,8 +30,6 @@ #include #include -#include "sensor_provider_handler.h" - namespace sensor { class sensor_provider { @@ -53,6 +51,8 @@ public: int publish(sensor_data_t *data, int len); private: + class channel_handler; + bool init(const char *uri); void deinit(void); @@ -66,7 +66,7 @@ private: ipc::ipc_client *m_client; ipc::channel *m_channel; ipc::event_loop m_loop; - sensor_provider_handler *m_handler; + channel_handler *m_handler; std::atomic m_connected; }; diff --git a/src/client/sensor_provider_handler.cpp b/src/client/sensor_provider_channel_handler.cpp similarity index 66% rename from src/client/sensor_provider_handler.cpp rename to src/client/sensor_provider_channel_handler.cpp index 14fa3a1..a537546 100644 --- a/src/client/sensor_provider_handler.cpp +++ b/src/client/sensor_provider_channel_handler.cpp @@ -17,7 +17,7 @@ * */ -#include "sensor_provider_handler.h" +#include "sensor_provider_channel_handler.h" #include #include @@ -25,7 +25,7 @@ using namespace sensor; -sensor_provider_handler::sensor_provider_handler(sensor_provider *provider) +sensor_provider::channel_handler::channel_handler(sensor_provider *provider) : m_provider(provider) , m_start_cb(NULL) , m_stop_cb(NULL) @@ -36,18 +36,18 @@ sensor_provider_handler::sensor_provider_handler(sensor_provider *provider) { } -void sensor_provider_handler::connected(ipc::channel *ch) +void sensor_provider::channel_handler::connected(ipc::channel *ch) { _I("Connected"); } -void sensor_provider_handler::disconnected(ipc::channel *ch) +void sensor_provider::channel_handler::disconnected(ipc::channel *ch) { /* TODO */ /* m_provider->restore(); */ } -void sensor_provider_handler::read(ipc::channel *ch, ipc::message &msg) +void sensor_provider::channel_handler::read(ipc::channel *ch, ipc::message &msg) { switch (msg.type()) { case CMD_PROVIDER_START: @@ -66,27 +66,27 @@ void sensor_provider_handler::read(ipc::channel *ch, ipc::message &msg) } } -void sensor_provider_handler::read_complete(ipc::channel *ch) +void sensor_provider::channel_handler::read_complete(ipc::channel *ch) { } -void sensor_provider_handler::error_caught(ipc::channel *ch, int error) +void sensor_provider::channel_handler::error_caught(ipc::channel *ch, int error) { } -void sensor_provider_handler::set_start_cb(sensord_provider_start_cb cb, void *user_data) +void sensor_provider::channel_handler::set_start_cb(sensord_provider_start_cb cb, void *user_data) { m_start_cb = cb; m_start_user_data = user_data; } -void sensor_provider_handler::set_stop_cb(sensord_provider_stop_cb cb, void *user_data) +void sensor_provider::channel_handler::set_stop_cb(sensord_provider_stop_cb cb, void *user_data) { m_stop_cb = cb; m_stop_user_data = user_data; } -void sensor_provider_handler::set_interval_cb(sensord_provider_set_interval_cb cb, void *user_data) +void sensor_provider::channel_handler::set_interval_cb(sensord_provider_set_interval_cb cb, void *user_data) { m_set_interval_cb = cb; m_set_interval_user_data = user_data; diff --git a/src/client/sensor_provider_handler.h b/src/client/sensor_provider_channel_handler.h similarity index 83% rename from src/client/sensor_provider_handler.h rename to src/client/sensor_provider_channel_handler.h index 16bf479..efe5ce5 100644 --- a/src/client/sensor_provider_handler.h +++ b/src/client/sensor_provider_channel_handler.h @@ -17,20 +17,19 @@ * */ -#ifndef __SENSOR_PROVIDER_HANDLER__ -#define __SENSOR_PROVIDER_HANDLER__ +#ifndef __SENSOR_PROVIDER_CHANNEL_HANDLER__ +#define __SENSOR_PROVIDER_CHANNEL_HANDLER__ -#include #include +#include +#include "sensor_provider.h" namespace sensor { -class sensor_provider; - -class sensor_provider_handler : public ipc::channel_handler +class sensor_provider::channel_handler : public ipc::channel_handler { public: - sensor_provider_handler(sensor_provider *provider); + channel_handler(sensor_provider *provider); void connected(ipc::channel *ch); void disconnected(ipc::channel *ch); @@ -57,4 +56,4 @@ private: } -#endif /* __SENSOR_PROVIDER_HANDLER__ */ +#endif /* __SENSOR_PROVIDER_CHANNEL_HANDLER__ */ -- 2.7.4 From 6a16921a7f899af99fb8034e8e4373cc0e69437f Mon Sep 17 00:00:00 2001 From: "kibak.yoon" Date: Wed, 26 Apr 2017 16:21:57 +0900 Subject: [PATCH 03/16] sensord: change return type from bool to int for checking errors Change-Id: I0b232061df9ed8dd0a4297713e887c7f345a7de4 Signed-off-by: kibak.yoon --- src/client/sensor_internal.cpp | 6 +++--- src/client/sensor_provider.cpp | 6 +++--- src/client/sensor_provider.h | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/client/sensor_internal.cpp b/src/client/sensor_internal.cpp index 1a5b0b7..31af7d6 100644 --- a/src/client/sensor_internal.cpp +++ b/src/client/sensor_internal.cpp @@ -617,13 +617,13 @@ API int sensord_add_provider(sensord_provider_h provider) int ret; sensor_provider *p = static_cast(provider); - if (!p->connect()) - return OP_ERROR; + ret = p->connect(); + retv_if(ret < 0, ret); ret = manager.add_sensor(p); if (ret < 0) { p->disconnect(); - return OP_ERROR; + return ret; } return OP_SUCCESS; diff --git a/src/client/sensor_provider.cpp b/src/client/sensor_provider.cpp index d38049a..abfd9e1 100644 --- a/src/client/sensor_provider.cpp +++ b/src/client/sensor_provider.cpp @@ -119,10 +119,10 @@ int sensor_provider::send_sensor_info(sensor_info *info) return OP_SUCCESS; } -bool sensor_provider::connect(void) +int sensor_provider::connect(void) { m_channel = m_client->connect(m_handler, &m_loop); - retvm_if(!m_channel, false, "Failed to connect to server"); + retvm_if(!m_channel, -EIO, "Failed to connect to server"); /* serialize and send sensor info */ send_sensor_info(get_sensor_info()); @@ -136,7 +136,7 @@ bool sensor_provider::connect(void) _I("Provider URI[%s]", get_uri()); - return true; + return OP_SUCCESS; } bool sensor_provider::disconnect(void) diff --git a/src/client/sensor_provider.h b/src/client/sensor_provider.h index e30e617..b499995 100644 --- a/src/client/sensor_provider.h +++ b/src/client/sensor_provider.h @@ -40,7 +40,7 @@ public: const char *get_uri(void); sensor_info *get_sensor_info(void); - bool connect(void); + int connect(void); bool disconnect(void); void restore(void); -- 2.7.4 From 572ea8b3b6cf756c22a980e297c8412ae62385dd Mon Sep 17 00:00:00 2001 From: "kibak.yoon" Date: Wed, 26 Apr 2017 19:54:08 +0900 Subject: [PATCH 04/16] sensord: add NULL check when callbacks is called Change-Id: Ib2937c0e7ba4656c246b29a3addb1163d4494ef5 Signed-off-by: kibak.yoon --- src/client/sensor_provider_channel_handler.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/client/sensor_provider_channel_handler.cpp b/src/client/sensor_provider_channel_handler.cpp index a537546..52cc6bf 100644 --- a/src/client/sensor_provider_channel_handler.cpp +++ b/src/client/sensor_provider_channel_handler.cpp @@ -51,16 +51,18 @@ void sensor_provider::channel_handler::read(ipc::channel *ch, ipc::message &msg) { switch (msg.type()) { case CMD_PROVIDER_START: - m_start_cb(m_provider, m_start_user_data); + if (m_start_cb) + m_start_cb(m_provider, m_start_user_data); break; case CMD_PROVIDER_STOP: - m_stop_cb(m_provider, m_stop_user_data); + if (m_stop_cb) + m_stop_cb(m_provider, m_stop_user_data); break; case CMD_PROVIDER_ATTR_INT: cmd_provider_attr_int_t buf; msg.disclose((char *)&buf); - if (buf.attribute == SENSORD_ATTRIBUTE_INTERVAL) + if (buf.attribute == SENSORD_ATTRIBUTE_INTERVAL && m_set_interval_cb) m_set_interval_cb(m_provider, buf.value, m_set_interval_user_data); break; } -- 2.7.4 From d624758ea385f8f8a255687aa2e44340a1f79e79 Mon Sep 17 00:00:00 2001 From: "kibak.yoon" Date: Wed, 26 Apr 2017 22:01:39 +0900 Subject: [PATCH 05/16] sensord: check validation of sensor URI to create a sensor provider - URI format : http:///sensor// - Apps are not allowed to create a sensor of the type in sensor_type_e. - Allowed: - "http://example.org/sensor/mysensor_type/mysensor" - "http://developer.samsung.com/sensor/mysensor_type/mysensor" - Disallowed: - "http://tizen.org/sensor/accelerometer/mysensor" (predefined type) - "http://tizen.org/mysensor/accelerometer/mysensor" (syntax error) - "http:/tizen.org/accelerometer/mysensor" (syntax error) - "http:/example.org/sensor/mysensor/mysensor/mysensor" (syntax error) - test command $ sensorctl test auto provider_uri Change-Id: I0ce36a9c2a5a7953b975917962d50cf39c863bb3 Signed-off-by: kibak.yoon --- src/client/sensor_internal.cpp | 10 ++++++ src/sensorctl/testcase/unit_client.cpp | 6 ++-- src/sensorctl/testcase/unit_provider.cpp | 57 ++++++++++++++++++++++++++++++++ src/shared/sensor_types_private.h | 28 ++++++++++++++++ 4 files changed, 98 insertions(+), 3 deletions(-) create mode 100644 src/sensorctl/testcase/unit_provider.cpp create mode 100644 src/shared/sensor_types_private.h diff --git a/src/client/sensor_internal.cpp b/src/client/sensor_internal.cpp index 31af7d6..dcd497a 100644 --- a/src/client/sensor_internal.cpp +++ b/src/client/sensor_internal.cpp @@ -20,6 +20,7 @@ #include #include #include +#include #include #include @@ -28,6 +29,7 @@ #include #include #include +#include #define CONVERT_OPTION_PAUSE_POLICY(option) ((option) ^ 0b11) @@ -592,6 +594,14 @@ API int sensord_create_provider(const char *uri, sensord_provider_h *provider) { retvm_if(!provider, -EINVAL, "Invalid paramter"); + std::string str_uri(uri); + retvm_if(str_uri.find(PREDEFINED_TYPE_URI) != std::string::npos, + -EINVAL, "Invalid URI format[%s]", uri); + + static std::regex uri_regex(SENSOR_URI_REGEX, std::regex::optimize); + retvm_if(!std::regex_match(uri, uri_regex), + -EINVAL, "Invalid URI format[%s]", uri); + sensor_provider *p; p = new(std::nothrow) sensor_provider(uri); diff --git a/src/sensorctl/testcase/unit_client.cpp b/src/sensorctl/testcase/unit_client.cpp index 661e4a0..28900bb 100644 --- a/src/sensorctl/testcase/unit_client.cpp +++ b/src/sensorctl/testcase/unit_client.cpp @@ -174,7 +174,7 @@ static gboolean publish(gpointer gdata) /* TODO: change it from manual test to auto-test */ TESTCASE(sensor_api_mysensor_provider, provider_p_1) { - const char *uri = "http://example.org/mysensor/mysensor"; + const char *uri = "http://example.org/sensor/mysensor/mysensor"; const char *name = "mysensor"; const char *vendor = "tizen"; @@ -220,7 +220,7 @@ TESTCASE(sensor_api_mysensor_provider, provider_p_1) TESTCASE(sensor_api_mysensor_listener, listener_p_1) { - const char *uri = "http://example.org/mysensor/mysensor"; + const char *uri = "http://example.org/sensor/mysensor/mysensor"; int err; bool ret; int handle; @@ -259,7 +259,7 @@ TESTCASE(sensor_api_mysensor_listener, listener_p_1) static void add_mysensor(void) { - const char *uri = "http://example.org/mysensor/mysensor"; + const char *uri = "http://example.org/sensor/mysensor/mysensor"; const char *name = "mysensor"; const char *vendor = "tizen"; diff --git a/src/sensorctl/testcase/unit_provider.cpp b/src/sensorctl/testcase/unit_provider.cpp new file mode 100644 index 0000000..1914652 --- /dev/null +++ b/src/sensorctl/testcase/unit_provider.cpp @@ -0,0 +1,57 @@ +/* + * sensorctl + * + * Copyright (c) 2017 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include +#include +#include + +#include "log.h" +#include "mainloop.h" +#include "test_bench.h" + +TESTCASE(sensor_api_provider_uri, provider_check_uri) +{ + int err; + sensord_provider_h provider; + + const char *uri_p1 = "http://example.org/sensor/mysensor_type/mysensor"; + const char *uri_p2 = "http://developer.samsung.com/sensor/mysensor_type/mysensor"; + const char *uri_n1 = "http://tizen.org/sensor/accelerometer/mysensor"; + const char *uri_n2 = "http://tizen.org/mysensor/accelerometer/mysensor"; + const char *uri_n3 = "http:/example.org/sensor/mysensor_type/mysensor"; + const char *uri_n5 = "http://example.org/sensor/mysensor_type"; + const char *uri_n4 = "http://example.org/sensor/mysensor_type/mysensor/mysensor"; + + err = sensord_create_provider(uri_p1, &provider); + EXPECT_EQ(err, 0); + err = sensord_create_provider(uri_p2, &provider); + EXPECT_EQ(err, 0); + err = sensord_create_provider(uri_n1, &provider); + EXPECT_EQ(err, -EINVAL); + err = sensord_create_provider(uri_n2, &provider); + EXPECT_EQ(err, -EINVAL); + err = sensord_create_provider(uri_n3, &provider); + EXPECT_EQ(err, -EINVAL); + err = sensord_create_provider(uri_n4, &provider); + EXPECT_EQ(err, -EINVAL); + err = sensord_create_provider(uri_n5, &provider); + EXPECT_EQ(err, -EINVAL); + + return true; +} diff --git a/src/shared/sensor_types_private.h b/src/shared/sensor_types_private.h new file mode 100644 index 0000000..17fcd02 --- /dev/null +++ b/src/shared/sensor_types_private.h @@ -0,0 +1,28 @@ +/* + * sensord + * + * Copyright (c) 2017 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#ifndef __SENSOR_TYPES_PRIVATE__ +#define __SENSOR_TYPES_PRIVATE__ + +#define URI_REGEX(CATEGORY) R"~(^http:\/\/[\w-]+(\.[\w-]+)*\/)~" CATEGORY R"~(\/[\w-]+(\.[\w-]+)*(\/[\w-]+(\.[\w-]+)*)$)~" +#define SENSOR_URI_REGEX URI_REGEX("sensor") + +#define PREDEFINED_TYPE_URI "http://tizen.org/sensor/" + +#endif /* __SENSOR_TYPES_PRIVATE__ */ -- 2.7.4 From 508058e85db8f2032b5f99dfab2ffd60d530b709 Mon Sep 17 00:00:00 2001 From: "kibak.yoon" Date: Thu, 27 Apr 2017 12:43:37 +0900 Subject: [PATCH 06/16] sensord: version up 4.0.0 for Tizen 4 Change-Id: Ia69940ee6f5a1268372d994ff40381aecdcb7235 Signed-off-by: kibak.yoon --- packaging/sensord.spec | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packaging/sensord.spec b/packaging/sensord.spec index 5cdd8f2..8166693 100644 --- a/packaging/sensord.spec +++ b/packaging/sensord.spec @@ -1,6 +1,6 @@ Name: sensord Summary: Sensor daemon -Version: 2.0.11 +Version: 4.0.0 Release: 1 Group: System/Sensor Framework License: Apache-2.0 @@ -84,7 +84,8 @@ install -m 0644 %SOURCE2 %{buildroot}%{_unitdir} %install_service multi-user.target.wants sensord.service %install_service sockets.target.wants sensord.socket -ln -s libsensor.so.2 %{buildroot}%{_libdir}/libsensor.so.1 +ln -s libsensor.so.%{version} %{buildroot}/%{_libdir}/libsensor.so.2 +ln -s libsensor.so.%{version} %{buildroot}/%{_libdir}/libsensor.so.1 %post pushd %{_libdir} -- 2.7.4 From 4a6594a443bbb192a9ad5864d55dabdc843bf0f3 Mon Sep 17 00:00:00 2001 From: "kibak.yoon" Date: Thu, 27 Apr 2017 15:36:06 +0900 Subject: [PATCH 07/16] sensord: rv: fix invalid name of magnetic sensor type URI Change-Id: Ib52c3dd5bfd8f50f686f40d6e630b1f97de02b3e Signed-off-by: kibak.yoon --- src/sensor/rotation_vector/magnetic_rv_sensor.cpp | 2 +- src/sensor/rotation_vector/rv_sensor.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/sensor/rotation_vector/magnetic_rv_sensor.cpp b/src/sensor/rotation_vector/magnetic_rv_sensor.cpp index 2d480d2..2e4b255 100644 --- a/src/sensor/rotation_vector/magnetic_rv_sensor.cpp +++ b/src/sensor/rotation_vector/magnetic_rv_sensor.cpp @@ -30,7 +30,7 @@ #define SRC_STR_ACC "http://tizen.org/sensor/accelerometer" #define SRC_ID_MAG 0x3 -#define SRC_STR_MAG "http://tizen.org/sensor/geomagnetic" +#define SRC_STR_MAG "http://tizen.org/sensor/magnetic" static sensor_info2_t sensor_info = { id: 0x1, diff --git a/src/sensor/rotation_vector/rv_sensor.cpp b/src/sensor/rotation_vector/rv_sensor.cpp index 116541f..e88a004 100644 --- a/src/sensor/rotation_vector/rv_sensor.cpp +++ b/src/sensor/rotation_vector/rv_sensor.cpp @@ -33,7 +33,7 @@ #define SRC_STR_GYRO "http://tizen.org/sensor/gyroscope" #define SRC_ID_MAG 0x3 -#define SRC_STR_MAG "http://tizen.org/sensor/geomagnetic" +#define SRC_STR_MAG "http://tizen.org/sensor/magnetic" static sensor_info2_t sensor_info = { id: 0x1, -- 2.7.4 From 7dd43df5b7adb9e92db533ec1c03926872b12746 Mon Sep 17 00:00:00 2001 From: "kibak.yoon" Date: Thu, 27 Apr 2017 17:30:26 +0900 Subject: [PATCH 08/16] sensord: spec: provide libsensor.so.2 for build dependency Change-Id: Id5a50c908c3540900af34932779552c461bf9899 Signed-off-by: kibak.yoon --- packaging/sensord.spec | 1 + 1 file changed, 1 insertion(+) diff --git a/packaging/sensord.spec b/packaging/sensord.spec index 8166693..585cf57 100644 --- a/packaging/sensord.spec +++ b/packaging/sensord.spec @@ -33,6 +33,7 @@ of the Sensor Framework. The library replaces the dummy library installed by %{n %package dummy Summary: Sensor Framework 'dummy' library Provides: %{name}-profile_tv = %{version}-%{release} +Provides: libsensor.so.2 %description dummy This package provides the dummy library of the sensor internal API. -- 2.7.4 From 7e76859be442a519139eaa4648f38270d423ba53 Mon Sep 17 00:00:00 2001 From: Mu-Woong Lee Date: Thu, 27 Apr 2017 18:00:20 +0900 Subject: [PATCH 09/16] Provides libsensord.so.2()(64bit) in case of aarch64 This is a temporary walkaround for OBS build failures Change-Id: Iaa1f611333800160921e13c7ed8a25964c8aaab3 Signed-off-by: Mu-Woong Lee --- packaging/sensord.spec | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packaging/sensord.spec b/packaging/sensord.spec index 585cf57..1106875 100644 --- a/packaging/sensord.spec +++ b/packaging/sensord.spec @@ -33,7 +33,12 @@ of the Sensor Framework. The library replaces the dummy library installed by %{n %package dummy Summary: Sensor Framework 'dummy' library Provides: %{name}-profile_tv = %{version}-%{release} +%ifarch aarch64 +Provides: libsensor.so.2()(64bit) +%else Provides: libsensor.so.2 +%endif + %description dummy This package provides the dummy library of the sensor internal API. -- 2.7.4 From b3eada2b1aa56aa04c0f8cf8c4daf5f1f7e89f15 Mon Sep 17 00:00:00 2001 From: Mu-Woong Lee Date: Fri, 28 Apr 2017 07:00:07 +0000 Subject: [PATCH 10/16] Revert "Provides libsensord.so.2()(64bit) in case of aarch64" This reverts commit 7e76859be442a519139eaa4648f38270d423ba53. Change-Id: Ica1151ce7963371a11103975b47e79e7e6eb48bc --- packaging/sensord.spec | 5 ----- 1 file changed, 5 deletions(-) diff --git a/packaging/sensord.spec b/packaging/sensord.spec index 1106875..585cf57 100644 --- a/packaging/sensord.spec +++ b/packaging/sensord.spec @@ -33,12 +33,7 @@ of the Sensor Framework. The library replaces the dummy library installed by %{n %package dummy Summary: Sensor Framework 'dummy' library Provides: %{name}-profile_tv = %{version}-%{release} -%ifarch aarch64 -Provides: libsensor.so.2()(64bit) -%else Provides: libsensor.so.2 -%endif - %description dummy This package provides the dummy library of the sensor internal API. -- 2.7.4 From 94d9748f1415114e91f3d4c11ad51fb66620bfa9 Mon Sep 17 00:00:00 2001 From: Mu-Woong Lee Date: Fri, 28 Apr 2017 07:01:31 +0000 Subject: [PATCH 11/16] Revert "sensord: spec: provide libsensor.so.2 for build dependency" This reverts commit 7dd43df5b7adb9e92db533ec1c03926872b12746. Change-Id: I08ec3e11640066d926b88f34ddb1c08932dbcb8f --- packaging/sensord.spec | 1 - 1 file changed, 1 deletion(-) diff --git a/packaging/sensord.spec b/packaging/sensord.spec index 585cf57..8166693 100644 --- a/packaging/sensord.spec +++ b/packaging/sensord.spec @@ -33,7 +33,6 @@ of the Sensor Framework. The library replaces the dummy library installed by %{n %package dummy Summary: Sensor Framework 'dummy' library Provides: %{name}-profile_tv = %{version}-%{release} -Provides: libsensor.so.2 %description dummy This package provides the dummy library of the sensor internal API. -- 2.7.4 From 2d42ecb076f9c25010edcce5bda2cef6e5837225 Mon Sep 17 00:00:00 2001 From: "kibak.yoon" Date: Fri, 28 Apr 2017 16:05:03 +0900 Subject: [PATCH 12/16] sensord: sleep 10 ms instead of 100 ms if socket is unavailable temporarily Change-Id: I4c2552d18ce45bf16ff88703577279e19376418e Signed-off-by: kibak.yoon --- src/shared/stream_socket.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/shared/stream_socket.cpp b/src/shared/stream_socket.cpp index 0191f05..8ec9f7c 100644 --- a/src/shared/stream_socket.cpp +++ b/src/shared/stream_socket.cpp @@ -24,7 +24,7 @@ #include "sensor_log.h" -#define SLEEP_100_MS usleep(100000) +#define SLEEP_10_MS usleep(10000) using namespace ipc; @@ -54,7 +54,7 @@ ssize_t stream_socket::on_send(const void *buffer, size_t size) const if (len < 0) { if ((errno == EINTR) || (errno == EAGAIN) || (errno == EWOULDBLOCK)) { - SLEEP_100_MS; + SLEEP_10_MS; continue; } @@ -88,7 +88,7 @@ ssize_t stream_socket::on_recv(void *buffer, size_t size) const if (len < 0) { if ((errno == EINTR) || (errno == EAGAIN) || (errno == EWOULDBLOCK)) { - SLEEP_100_MS; + SLEEP_10_MS; continue; } -- 2.7.4 From 34cbe0ce45ce05cd3bd4b375445de616341dc5c9 Mon Sep 17 00:00:00 2001 From: "kibak.yoon" Date: Tue, 2 May 2017 20:34:05 +0900 Subject: [PATCH 13/16] sensord: add lazy binding event handler to event loop - TBD: 1. thread-safe issue 2. sensor event: global main context or thread-default context Change-Id: I1d0f4464e14dc0e6bd0bb529ffe14cf682ef69af Signed-off-by: kibak.yoon --- src/client/sensor_listener.cpp | 4 +++- src/shared/channel.cpp | 9 +++++++++ src/shared/channel.h | 2 ++ src/shared/ipc_client.cpp | 4 ++-- src/shared/ipc_client.h | 3 ++- 5 files changed, 18 insertions(+), 4 deletions(-) diff --git a/src/client/sensor_listener.cpp b/src/client/sensor_listener.cpp index 95c411c..0e66ef7 100644 --- a/src/client/sensor_listener.cpp +++ b/src/client/sensor_listener.cpp @@ -152,7 +152,7 @@ bool sensor_listener::connect(void) m_cmd_channel = m_client->connect(NULL); retvm_if(!m_cmd_channel, false, "Failed to connect to server"); - m_evt_channel = m_client->connect(m_handler, &m_loop); + m_evt_channel = m_client->connect(m_handler, &m_loop, false); retvm_if(!m_evt_channel, false, "Failed to connect to server"); ipc::message msg; @@ -170,6 +170,8 @@ bool sensor_listener::connect(void) m_id = buf.listener_id; m_connected.store(true); + m_evt_channel->bind(); + _D("Listener ID[%d]", get_id()); return true; diff --git a/src/shared/channel.cpp b/src/shared/channel.cpp index 8dc25ac..8549f1e 100644 --- a/src/shared/channel.cpp +++ b/src/shared/channel.cpp @@ -24,6 +24,7 @@ #include #include "sensor_log.h" +#include "channel_event_handler.h" #define SYSTEMD_SOCK_BUF_SIZE 40000 @@ -111,6 +112,14 @@ void channel::bind(channel_handler *handler, event_loop *loop) m_handler->connected(this); } +void channel::bind(void) +{ + ret_if(!m_loop); + m_event_id = m_loop->add_event(m_socket->get_fd(), + (EVENT_IN | EVENT_HUP | EVENT_NVAL), + dynamic_cast(m_handler)); +} + bool channel::connect(channel_handler *handler, event_loop *loop) { if (!m_socket->connect()) diff --git a/src/shared/channel.h b/src/shared/channel.h index e37a7a9..db709b6 100644 --- a/src/shared/channel.h +++ b/src/shared/channel.h @@ -38,6 +38,8 @@ public: channel(socket *sock); ~channel(); + /* TODO */ + void bind(void); void bind(channel_handler *handler, event_loop *loop); bool connect(channel_handler *handler, event_loop *loop); diff --git a/src/shared/ipc_client.cpp b/src/shared/ipc_client.cpp index 71fdde4..1376ac7 100644 --- a/src/shared/ipc_client.cpp +++ b/src/shared/ipc_client.cpp @@ -50,7 +50,7 @@ channel *ipc_client::connect(channel_handler *handler) return connect(handler, NULL); } -channel *ipc_client::connect(channel_handler *handler, event_loop *loop) +channel *ipc_client::connect(channel_handler *handler, event_loop *loop, bool bind) { socket *sock; channel *ch; @@ -81,7 +81,7 @@ channel *ipc_client::connect(channel_handler *handler, event_loop *loop) ch->connect(ev_handler, loop); - if (loop) { + if (loop && bind) { uint64_t id = loop->add_event(sock->get_fd(), (EVENT_IN | EVENT_HUP | EVENT_NVAL), ev_handler); ch->set_event_id(id); diff --git a/src/shared/ipc_client.h b/src/shared/ipc_client.h index 8f52678..40d9182 100644 --- a/src/shared/ipc_client.h +++ b/src/shared/ipc_client.h @@ -38,7 +38,8 @@ public: /* call channel->disconnect() after you have used it */ channel *connect(channel_handler *handler); - channel *connect(channel_handler *handler, event_loop *loop); + /* TODO: remove bind parameter */ + channel *connect(channel_handler *handler, event_loop *loop, bool bind = true); private: std::string m_path; -- 2.7.4 From 4e7257b9dc0e5ff7b9ec5d4760749e10d04df6d5 Mon Sep 17 00:00:00 2001 From: Mu-Woong Lee Date: Mon, 8 May 2017 15:01:32 +0900 Subject: [PATCH 14/16] Fix dependency issues that occur while building sensord on an old snapshot Change-Id: I328dffa4ae1c4c13f82836c68e9218d157b57f1d Signed-off-by: Mu-Woong Lee --- packaging/sensord.spec | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packaging/sensord.spec b/packaging/sensord.spec index 8166693..45901e6 100644 --- a/packaging/sensord.spec +++ b/packaging/sensord.spec @@ -33,6 +33,8 @@ of the Sensor Framework. The library replaces the dummy library installed by %{n %package dummy Summary: Sensor Framework 'dummy' library Provides: %{name}-profile_tv = %{version}-%{release} +# To support old-snapshot-based package builds +Provides: libsensor.so.2 %description dummy This package provides the dummy library of the sensor internal API. @@ -43,6 +45,8 @@ Installing %{name} replaces this dummy library with the actually functional libr Summary: Internal Sensor API (Development) Group: System/Development Requires: %{name}-dummy = %{version}-%{release} +# To support old-snapshot-based package builds +Provides: libsensord-devel %description devel Internal Sensor API (Development) -- 2.7.4 From 6d0b1e93be9b26d9949923e16ea40d293a4e8121 Mon Sep 17 00:00:00 2001 From: "kibak.yoon" Date: Wed, 10 May 2017 13:12:48 +0900 Subject: [PATCH 15/16] sensord: seperate socket channel for command and monitor - m_cmd_channel: get sensor information / check privilege - m_mon_channel: monitor sensors dynamically added/removed Change-Id: If746f701ddb32aefe70eafe1f934f8251954efff Signed-off-by: kibak.yoon --- src/client/sensor_manager.cpp | 45 +++++++++++++++++++---------------- src/client/sensor_manager.h | 3 ++- src/server/server_channel_handler.cpp | 2 +- 3 files changed, 27 insertions(+), 23 deletions(-) diff --git a/src/client/sensor_manager.cpp b/src/client/sensor_manager.cpp index ee783f0..1f66ac4 100644 --- a/src/client/sensor_manager.cpp +++ b/src/client/sensor_manager.cpp @@ -35,7 +35,8 @@ using namespace sensor; sensor_manager::sensor_manager() : m_client(NULL) -, m_channel(NULL) +, m_cmd_channel(NULL) +, m_mon_channel(NULL) , m_connected(false) , m_handler(NULL) { @@ -195,18 +196,16 @@ void sensor_manager::deinit(void) bool sensor_manager::connect_channel(void) { - m_channel = m_client->connect(m_handler, &m_loop); - retvm_if(!m_channel, false, "Failed to connect to server"); - ipc::message msg; - msg.set_type(CMD_MANAGER_CONNECT); - m_channel->send_sync(&msg); - m_channel->read_sync(msg); - if (msg.header()->err < 0) { - /* TODO: if failed, disconnect channel */ - return false; - } + m_cmd_channel = m_client->connect(NULL); + retvm_if(!m_cmd_channel, false, "Failed to connect to server"); + + m_mon_channel = m_client->connect(m_handler, &m_loop); + retvm_if(!m_mon_channel, false, "Failed to connect to server"); + + msg.set_type(CMD_MANAGER_CONNECT); + m_mon_channel->send_sync(&msg); m_connected.store(true); @@ -230,16 +229,20 @@ void sensor_manager::disconnect(void) ipc::message reply; msg.set_type(CMD_MANAGER_DISCONNECT); - m_channel->send_sync(&msg); - m_channel->read_sync(reply); + m_mon_channel->send_sync(&msg); + m_mon_channel->read_sync(reply); retm_if(reply.header()->err < 0, "Failed to disconnect"); - m_connected.store(false); - m_channel->disconnect(); + m_mon_channel->disconnect(); - delete m_channel; - m_channel = NULL; + delete m_mon_channel; + m_mon_channel = NULL; + m_cmd_channel->disconnect(); + delete m_cmd_channel; + m_cmd_channel = NULL; + + m_connected.store(false); _D("Disconnected"); } @@ -294,10 +297,10 @@ bool sensor_manager::get_sensors_internal(void) msg.set_type(CMD_MANAGER_SENSOR_LIST); - ret = m_channel->send_sync(&msg); + ret = m_cmd_channel->send_sync(&msg); retvm_if(!ret, false, "Failed to send message"); - ret = m_channel->read_sync(reply); + ret = m_cmd_channel->read_sync(reply); retvm_if(!ret, false, "Failed to receive message"); reply.disclose(buf); @@ -320,10 +323,10 @@ bool sensor_manager::has_privilege(std::string &uri) memcpy(buf.sensor, uri.c_str(), uri.size()); msg.enclose((const char *)&buf, sizeof(buf)); - ret = m_channel->send_sync(&msg); + ret = m_cmd_channel->send_sync(&msg); retvm_if(!ret, false, "Failed to send message"); - ret = m_channel->read_sync(reply); + ret = m_cmd_channel->read_sync(reply); retvm_if(!ret, false, "Failed to receive message"); if (reply.header()->err == OP_SUCCESS) diff --git a/src/client/sensor_manager.h b/src/client/sensor_manager.h index a2409b4..350bb01 100644 --- a/src/client/sensor_manager.h +++ b/src/client/sensor_manager.h @@ -76,7 +76,8 @@ private: std::vector get_infos(const char *uri); ipc::ipc_client *m_client; - ipc::channel *m_channel; + ipc::channel *m_cmd_channel; /* get sensor information */ + ipc::channel *m_mon_channel; /* monitor sensors dinamically added/removed */ ipc::event_loop m_loop; std::atomic m_connected; channel_handler *m_handler; diff --git a/src/server/server_channel_handler.cpp b/src/server/server_channel_handler.cpp index 429013a..9c908fd 100644 --- a/src/server/server_channel_handler.cpp +++ b/src/server/server_channel_handler.cpp @@ -120,7 +120,7 @@ void server_channel_handler::read(channel *ch, message &msg) int server_channel_handler::manager_connect(channel *ch, message &msg) { m_manager->register_channel(ch); - return send_reply(ch, OP_SUCCESS); + return OP_SUCCESS; } int server_channel_handler::manager_disconnect(channel *ch, message &msg) -- 2.7.4 From 77cfd1b76f05cd691b15f7cab4c30940be628ff7 Mon Sep 17 00:00:00 2001 From: "kibak.yoon" Date: Wed, 10 May 2017 17:24:12 +0900 Subject: [PATCH 16/16] sensord: remove useless privilege and macros Change-Id: I373f5645cbdf318f397e2e3e47bc0f98b46e94ad Signed-off-by: kibak.yoon --- include/sensor_types.h | 3 --- src/client/sensor_manager.cpp | 8 +++----- src/client/sensor_provider.cpp | 1 - src/server/server_channel_handler.cpp | 3 --- 4 files changed, 3 insertions(+), 12 deletions(-) diff --git a/include/sensor_types.h b/include/sensor_types.h index 5342f23..9c9426c 100644 --- a/include/sensor_types.h +++ b/include/sensor_types.h @@ -60,9 +60,6 @@ extern "C" #define SENSOR_UNKNOWN_TYPE "http://tizen.org/sensor/unknown" #define SENSOR_UNKNOWN_NAME "Unknown" -#define PRIV_APPLICATION_SENSOR "http://tizen.org/privilege/applicationsensor" -#define PRIV_APPLICATION_SENSOR_WRITE "http://tizen.org/privilege/applicationsensor.write" - typedef int64_t sensor_id_t; typedef void *sensor_t; diff --git a/src/client/sensor_manager.cpp b/src/client/sensor_manager.cpp index 1f66ac4..43fcb41 100644 --- a/src/client/sensor_manager.cpp +++ b/src/client/sensor_manager.cpp @@ -29,8 +29,6 @@ #include "sensor_manager_channel_handler.h" -#define SIZE_STR_SENSOR_ALL 27 - using namespace sensor; sensor_manager::sensor_manager() @@ -97,7 +95,7 @@ bool sensor_manager::is_supported(sensor_t sensor) bool sensor_manager::is_supported(const char *uri) { - if (strncmp(uri, utils::get_uri(ALL_SENSOR), SIZE_STR_SENSOR_ALL) == 0) + if (strncmp(uri, utils::get_uri(ALL_SENSOR), strlen(utils::get_uri(ALL_SENSOR))) == 0) return true; for (auto it = m_sensors.begin(); it != m_sensors.end(); ++it) { @@ -337,7 +335,7 @@ bool sensor_manager::has_privilege(std::string &uri) sensor_info *sensor_manager::get_info(const char *uri) { - if (strncmp(uri, utils::get_uri(ALL_SENSOR), SIZE_STR_SENSOR_ALL) == 0) + if (strncmp(uri, utils::get_uri(ALL_SENSOR), strlen(utils::get_uri(ALL_SENSOR))) == 0) return &m_sensors[0]; for (auto it = m_sensors.begin(); it != m_sensors.end(); ++it) { @@ -369,7 +367,7 @@ std::vector sensor_manager::get_infos(const char *uri) std::vector infos; bool all = false; - if (strncmp(uri, utils::get_uri(ALL_SENSOR), SIZE_STR_SENSOR_ALL) == 0) + if (strncmp(uri, utils::get_uri(ALL_SENSOR), strlen(utils::get_uri(ALL_SENSOR))) == 0) all = true; for (auto it = m_sensors.begin(); it != m_sensors.end(); ++it) { diff --git a/src/client/sensor_provider.cpp b/src/client/sensor_provider.cpp index abfd9e1..5d0b1c9 100644 --- a/src/client/sensor_provider.cpp +++ b/src/client/sensor_provider.cpp @@ -59,7 +59,6 @@ bool sensor_provider::init(const char *uri) m_sensor.set_min_range(0); m_sensor.set_max_range(1); m_sensor.set_resolution(1); - m_sensor.set_privilege(PRIV_APPLICATION_SENSOR); return true; } diff --git a/src/server/server_channel_handler.cpp b/src/server/server_channel_handler.cpp index 9c908fd..88c48e4 100644 --- a/src/server/server_channel_handler.cpp +++ b/src/server/server_channel_handler.cpp @@ -315,9 +315,6 @@ int server_channel_handler::listener_get_data(channel *ch, message &msg) int server_channel_handler::provider_connect(channel *ch, message &msg) { - retvm_if(!has_privileges(ch->get_fd(), PRIV_APPLICATION_SENSOR_WRITE), - -EACCES, "Permission denied"); - sensor_info info; info.clear(); info.deserialize(msg.body(), msg.size()); -- 2.7.4