Coverity issues Fix
[platform/core/system/sensord.git] / src / client / sensor_provider.cpp
old mode 100644 (file)
new mode 100755 (executable)
index b07fec5..c8f0ef6
 #include <channel.h>
 #include <sensor_log.h>
 #include <sensor_types.h>
+#include <sensor_utils.h>
 #include <ipc_client.h>
 #include <command_types.h>
+#include <cfloat>
+#include <cmath>
 
-#include "sensor_provider_handler.h"
+#include "sensor_provider_channel_handler.h"
+
+#define DEFAULT_RESOLUTION 0.1
 
 using namespace sensor;
 
@@ -49,17 +54,19 @@ 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;
        }
 
        m_sensor.set_uri(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);
+       m_sensor.set_min_range(-FLT_MAX);
+       m_sensor.set_max_range(FLT_MAX);
+       m_sensor.set_resolution(DEFAULT_RESOLUTION);
+       /* TODO: temporary walkaround */
+       const char *priv = sensor::utils::get_privilege(uri);
+       m_sensor.set_privilege(priv);
 
        return true;
 }
@@ -116,13 +123,15 @@ int sensor_provider::send_sensor_info(sensor_info *info)
 
        m_channel->send_sync(&msg);
 
+       delete []bytes;
+
        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 +145,7 @@ bool sensor_provider::connect(void)
 
        _I("Provider URI[%s]", get_uri());
 
-       return true;
+       return OP_SUCCESS;
 }
 
 bool sensor_provider::disconnect(void)
@@ -144,16 +153,7 @@ bool sensor_provider::disconnect(void)
        retv_if(!is_connected(), false);
        m_connected.store(false);
 
-       ipc::message msg(OP_SUCCESS);
-       ipc::message reply;
-
-       msg.set_type(CMD_PROVIDER_DISCONNECT);
-
-       m_channel->send_sync(&msg);
-       m_channel->read_sync(reply);
-
        m_channel->disconnect();
-
        delete m_channel;
        m_channel = NULL;
 
@@ -172,6 +172,14 @@ void sensor_provider::restore(void)
 
 int sensor_provider::publish(sensor_data_t *data, int len)
 {
+       for (int i = 0; i < data->value_count; ++i) {
+               if (!(data->values[i] >= m_sensor.get_min_range() &&
+                     data->values[i] <= m_sensor.get_max_range())) {
+                       _E("Out of range");
+                       return OP_ERROR;
+               }
+       }
+
        ipc::message msg;
        msg.set_type(CMD_PROVIDER_PUBLISH);
        msg.enclose((const char *)data, len);
@@ -196,7 +204,7 @@ void sensor_provider::set_stop_cb(sensord_provider_stop_cb cb, void *user_data)
        m_handler->set_stop_cb(cb, user_data);
 }
 
-void sensor_provider::set_interval_cb(sensord_provider_set_interval_cb cb, void *user_data)
+void sensor_provider::set_interval_cb(sensord_provider_interval_changed_cb cb, void *user_data)
 {
        m_handler->set_interval_cb(cb, user_data);
 }