#include "common/platform_exception.h"
#include "common/dbus_operation.h"
-//Hardcoded values for Kiran Device
-#define FEATURE_OPTIONAL_TELEPHONY 1
-#define FEATURE_OPTIONAL_BT 1
-#define ENABLE_KIRAN 1
-#define FEATURE_OPTIONAL_WI_FI 1
+// TODO:: hardcoded value, only for IsBluetoothAlwaysOn
#define PROFILE_MOBILE 1
-#define DUID_KEY_STRING 28
-#define DUID_BUFFER_SIZE 100
-#define SEED_LENGTH 16
-#define CRYPT_KEY_SIZE 8
-
-#define TAPI_HANDLE_MAX 2
-#define DEFAULT_PROPERTY_COUNT 1
-
-#ifdef FEATURE_OPTIONAL_WI_FI
-#include <wifi.h>
-#endif
-
-#ifdef FEATURE_OPTIONAL_TELEPHONY
-#include <ITapiModem.h>
-#endif
-
-#ifdef FEATURE_OPTIONAL_BT
-#include <bluetooth.h>
-#endif
-
-
namespace extension {
namespace systeminfo {
namespace {
+
const std::string MEMORY_STATE_NORMAL = "NORMAL";
const std::string MEMORY_STATE_WARNING = "WARNING";
const int MEMORY_TO_BYTE = 1024;
const int BASE_GATHERING_INTERVAL = 100;
const double DISPLAY_INCH_TO_MILLIMETER = 2.54;
-}
+
+const int kTapiMaxHandle = 2;
+const int kDefaultPropertyCount = 1;
+
+} // namespace
+
using namespace common;
//Callback functions declarations
}
} else {
LoggerE("Failed to get cp list");
- sim_count_ = TAPI_HANDLE_MAX;
+ sim_count_ = kTapiMaxHandle;
}
g_strfreev(cp_list);
}
PlatformResult RegisterWifiNetworkListener(const SysteminfoUtilsCallback& callback,
SysteminfoInstance& instance);
PlatformResult UnregisterWifiNetworkListener();
+ PlatformResult RegisterEthernetNetworkListener(const SysteminfoUtilsCallback& callback,
+ SysteminfoInstance& instance);
+ PlatformResult UnregisterEthernetNetworkListener();
PlatformResult RegisterCellularNetworkListener(const SysteminfoUtilsCallback& callback,
SysteminfoInstance& instance);
PlatformResult UnregisterCellularNetworkListener();
static PlatformResult UnregisterVconfCallback(const char *in_key, vconf_callback_fn cb);
PlatformResult RegisterIpChangeCallback(SysteminfoInstance& instance);
PlatformResult UnregisterIpChangeCallback();
+ bool IsIpChangeCallbackInvalid();
void InitTapiHandles();
guint m_cpu_event_id;
SysteminfoUtilsCallback m_locale_listener;
SysteminfoUtilsCallback m_network_listener;
SysteminfoUtilsCallback m_wifi_network_listener;
+ SysteminfoUtilsCallback m_ethernet_network_listener;
SysteminfoUtilsCallback m_cellular_network_listener;
SysteminfoUtilsCallback m_peripheral_listener;
SysteminfoUtilsCallback m_memory_listener;
SysteminfoUtilsCallback m_camera_flash_listener;
- TapiHandle *m_tapi_handles[TAPI_HANDLE_MAX+1];
+ TapiHandle *m_tapi_handles[kTapiMaxHandle+1];
//for ip change callback
connection_h m_connection_handle;
//! Sensor handle for DeviceOrientation purposes
m_locale_listener(nullptr),
m_network_listener(nullptr),
m_wifi_network_listener(nullptr),
+ m_ethernet_network_listener(nullptr),
m_cellular_network_listener(nullptr),
m_peripheral_listener(nullptr),
m_memory_listener(nullptr),
PlatformResult SystemInfoListeners::RegisterWifiNetworkListener(const SysteminfoUtilsCallback& callback,
SysteminfoInstance& instance)
{
+ LoggerD("Entered");
+
+ if (IsIpChangeCallbackInvalid()) {
+ PlatformResult ret = PlatformResult(ErrorCode::NO_ERROR);
+ CHECK_LISTENER_ERROR(RegisterIpChangeCallback(instance));
+ LoggerD("Registered IP change listener");
+ } else {
+ LoggerD("No need to register IP listener on platform, already registered");
+ }
+
if (nullptr == m_wifi_network_listener) {
- if (nullptr == m_cellular_network_listener){
- //register if there is no callback both for wifi and cellular
- PlatformResult ret = PlatformResult(ErrorCode::NO_ERROR);
- CHECK_LISTENER_ERROR(RegisterIpChangeCallback(instance))
- } else {
- LoggerD("No need to register ip listener on platform, already registered");
- }
LoggerD("Added callback for WIFI_NETWORK");
m_wifi_network_listener = callback;
}
PlatformResult SystemInfoListeners::UnregisterWifiNetworkListener()
{
- //unregister if is wifi callback, but no cellular callback
- if (nullptr != m_wifi_network_listener && nullptr == m_cellular_network_listener) {
+ LoggerD("Entered");
+
+ m_wifi_network_listener = nullptr;
+
+ if (IsIpChangeCallbackInvalid()) {
PlatformResult ret = PlatformResult(ErrorCode::NO_ERROR);
- CHECK_LISTENER_ERROR(UnregisterIpChangeCallback())
- LoggerD("Removed callback for WIFI_NETWORK");
+ CHECK_LISTENER_ERROR(UnregisterIpChangeCallback());
+ LoggerD("Removed IP change listener");
} else {
- LoggerD("Removed callback for WIFI_NETWORK, but cellular listener still works");
+ LoggerD("Removed callback for WIFI_NETWORK, but IP change listener still works");
}
- m_wifi_network_listener = nullptr;
+
+ return PlatformResult(ErrorCode::NO_ERROR);
+}
+
+PlatformResult SystemInfoListeners::RegisterEthernetNetworkListener(const SysteminfoUtilsCallback& callback,
+ SysteminfoInstance& instance)
+{
+ LoggerD("Entered");
+
+ if (IsIpChangeCallbackInvalid()) {
+ PlatformResult ret = PlatformResult(ErrorCode::NO_ERROR);
+ CHECK_LISTENER_ERROR(RegisterIpChangeCallback(instance));
+ LoggerD("Registered IP change listener");
+ } else {
+ LoggerD("No need to register IP listener on platform, already registered");
+ }
+
+ if (nullptr == m_ethernet_network_listener) {
+ LoggerD("Added callback for ETHERNET_NETWORK");
+ m_ethernet_network_listener = callback;
+ }
+ return PlatformResult(ErrorCode::NO_ERROR);
+}
+
+PlatformResult SystemInfoListeners::UnregisterEthernetNetworkListener()
+{
+ LoggerD("Entered");
+
+ m_ethernet_network_listener = nullptr;
+
+ if (IsIpChangeCallbackInvalid()) {
+ PlatformResult ret = PlatformResult(ErrorCode::NO_ERROR);
+ CHECK_LISTENER_ERROR(UnregisterIpChangeCallback());
+ LoggerD("Removed IP change listener");
+ } else {
+ LoggerD("Removed callback for ETHERNET_NETWORK, but IP change listener still works");
+ }
+
return PlatformResult(ErrorCode::NO_ERROR);
}
PlatformResult SystemInfoListeners::RegisterCellularNetworkListener(const SysteminfoUtilsCallback& callback,
SysteminfoInstance& instance)
{
+ LoggerD("Entered");
+
+ if (IsIpChangeCallbackInvalid()) {
+ PlatformResult ret = PlatformResult(ErrorCode::NO_ERROR);
+ CHECK_LISTENER_ERROR(RegisterIpChangeCallback(instance));
+ LoggerD("Registered IP change listener");
+ } else {
+ LoggerD("No need to register IP listener on platform, already registered");
+ }
+
if (nullptr == m_cellular_network_listener) {
PlatformResult ret = PlatformResult(ErrorCode::NO_ERROR);
- if (nullptr == m_wifi_network_listener){
- //register if there is no callback both for wifi and cellular
- CHECK_LISTENER_ERROR(RegisterIpChangeCallback(instance))
- } else {
- LoggerD("No need to register ip listener on platform, already registered");
- }
CHECK_LISTENER_ERROR(RegisterVconfCallback(VCONFKEY_TELEPHONY_FLIGHT_MODE,
OnCellularNetworkValueChangedCb, instance))
CHECK_LISTENER_ERROR(RegisterVconfCallback(VCONFKEY_TELEPHONY_CELLID,
PlatformResult SystemInfoListeners::UnregisterCellularNetworkListener()
{
+ LoggerD("Entered");
+
if (nullptr != m_cellular_network_listener) {
PlatformResult ret = PlatformResult(ErrorCode::NO_ERROR);
CHECK_LISTENER_ERROR(UnregisterVconfCallback(VCONFKEY_TELEPHONY_FLIGHT_MODE,
OnCellularNetworkValueChangedCb))
CHECK_LISTENER_ERROR(UnregisterVconfCallback(VCONFKEY_TELEPHONY_SVC_ROAM,
OnCellularNetworkValueChangedCb))
- if (nullptr == m_wifi_network_listener) {
- //register if there is no callback both for wifi and cellular
- CHECK_LISTENER_ERROR(UnregisterIpChangeCallback())
- LoggerD("Removed callback for CELLULAR_NETWORK");
- } else {
- LoggerD("Removed callback for CELLULAR_NETWORK, but cellular listener still works");
- }
}
m_cellular_network_listener = nullptr;
+
+ if (IsIpChangeCallbackInvalid()) {
+ PlatformResult ret = PlatformResult(ErrorCode::NO_ERROR);
+ CHECK_LISTENER_ERROR(UnregisterIpChangeCallback());
+ LoggerD("Removed IP change listener");
+ } else {
+ LoggerD("Removed callback for CELLULAR_NETWORK, but IP change listener still works");
+ }
+
return PlatformResult(ErrorCode::NO_ERROR);
}
void SystemInfoListeners::OnNetworkValueCallback(const char* /*ipv4_address*/,
const char* /*ipv6_address*/, void* event_ptr)
{
+ LoggerD("Entered");
+
SysteminfoInstance* instance = static_cast<SysteminfoInstance*>(event_ptr);
if (nullptr != m_wifi_network_listener) {
m_wifi_network_listener(*instance);
}
+ if (nullptr != m_ethernet_network_listener) {
+ m_ethernet_network_listener(*instance);
+ }
if (nullptr != m_cellular_network_listener) {
m_cellular_network_listener(*instance);
}
}
} else {
LoggerE("Failed to get cp list");
- sim_count = TAPI_HANDLE_MAX;
+ sim_count = kTapiMaxHandle;
}
g_strfreev(cp_list);
}
return PlatformResult(ErrorCode::NO_ERROR);
}
+bool SystemInfoListeners::IsIpChangeCallbackInvalid() {
+ LoggerD("Entered");
+ return (nullptr == m_wifi_network_listener &&
+ nullptr == m_ethernet_network_listener &&
+ nullptr == m_cellular_network_listener);
+}
/////////////////////////// system_info_listeners object ////////////////////////
if ("BATTERY" == property || "CPU" == property || "STORAGE" == property ||
"DISPLAY" == property || "DEVICE_ORIENTATION" == property ||
"BUILD" == property || "LOCALE" == property || "NETWORK" == property ||
- "WIFI_NETWORK" == property || "CELLULAR_NETWORK" == property ||
- "PERIPHERAL" == property || "MEMORY" == property) {
- count = DEFAULT_PROPERTY_COUNT;
+ "WIFI_NETWORK" == property || "ETHERNET_NETWORK" == property ||
+ "CELLULAR_NETWORK" == property || "PERIPHERAL" == property ||
+ "MEMORY" == property) {
+ count = kDefaultPropertyCount;
} else if ("SIM" == property) {
count = sim_mgr.GetSimCount(system_info_listeners.GetTapiHandles());
} else if ("CAMERA_FLASH" == property) {
return ReportNetwork(res_obj);
} else if ("WIFI_NETWORK" == property) {
return ReportWifiNetwork(res_obj);
+ } else if ("ETHERNET_NETWORK" == property) {
+ return ReportEthernetNetwork(res_obj);
} else if ("CELLULAR_NETWORK" == property) {
return ReportCellularNetwork(res_obj);
} else if ("SIM" == property) {
}
PlatformResult SysteminfoUtils::ReportWifiNetwork(picojson::object& out) {
+ LoggerD("Entered");
+
bool result_status = false;
std::string result_ssid;
std::string result_ip_address;
connection_handle_ptr(connection_handle, &connection_destroy);
// automatically release the memory
- char* mac = NULL;
- error = wifi_get_mac_address(&mac);
- if(WIFI_ERROR_NONE == error) {
- LoggerD("macAddress fetched: %s", mac);
+ char* mac = nullptr;
+ error = connection_get_mac_address(connection_handle, CONNECTION_TYPE_WIFI, &mac);
+ if (CONNECTION_ERROR_NONE == error && nullptr != mac) {
+ SLoggerD("MAC address fetched: %s", mac);
result_mac_address = mac;
free(mac);
} else {
return PlatformResult(ErrorCode::NO_ERROR);
}
+PlatformResult SysteminfoUtils::ReportEthernetNetwork(picojson::object& out) {
+ LoggerD("Entered");
+
+ std::string result_cable;
+ std::string result_status;
+ std::string result_ip_address;
+ std::string result_ipv6_address;
+ std::string result_mac_address;
+
+ connection_h connection_handle = nullptr;
+ connection_ethernet_state_e connection_state = CONNECTION_ETHERNET_STATE_DEACTIVATED;
+ connection_type_e connection_type = CONNECTION_TYPE_DISCONNECTED;
+ connection_profile_h profile_handle = nullptr;
+
+ // connection must be created in every call, in other case error occurs
+ int error = connection_create(&connection_handle);
+ if (CONNECTION_ERROR_NONE != error) {
+ std::string log_msg = "Cannot create connection: " + std::to_string(error);
+ LoggerE("%s", log_msg.c_str());
+ return PlatformResult(ErrorCode::UNKNOWN_ERR, log_msg);
+ }
+ std::unique_ptr<std::remove_pointer<connection_h>::type, int (*)(connection_h)> connection_handle_ptr(
+ connection_handle, &connection_destroy); // automatically release the memory
+
+ error = connection_get_ethernet_state(connection_handle, &connection_state);
+ if (CONNECTION_ERROR_NONE != error) {
+ std::string log_msg = "Cannot get ethernet connection state: " + std::to_string(error);
+ LoggerE("%s", log_msg.c_str());
+ return PlatformResult(ErrorCode::UNKNOWN_ERR, log_msg);
+ }
+
+ switch (connection_state) {
+ case CONNECTION_ETHERNET_STATE_DEACTIVATED:
+ result_status = "DEACTIVATED";
+ break;
+
+ case CONNECTION_ETHERNET_STATE_DISCONNECTED:
+ result_status = "DISCONNECTED";
+ break;
+
+ case CONNECTION_ETHERNET_STATE_CONNECTED:
+ result_status = "CONNECTED";
+ break;
+
+ default:
+ result_status = "UNKNOWN";
+ break;
+ }
+
+ connection_ethernet_cable_state_e cable_state = CONNECTION_ETHERNET_CABLE_DETACHED;
+ error = connection_get_ethernet_cable_state(connection_handle, &cable_state);
+ if (CONNECTION_ERROR_NONE != error) {
+ std::string log_msg = "Cannot get ethernet cable state: " + std::to_string(error);
+ LoggerE("%s", log_msg.c_str());
+ return PlatformResult(ErrorCode::UNKNOWN_ERR, log_msg);
+ }
+
+ switch (cable_state) {
+ case CONNECTION_ETHERNET_CABLE_DETACHED:
+ result_cable = "DETACHED";
+ break;
+
+ case CONNECTION_ETHERNET_CABLE_ATTACHED:
+ result_cable = "ATTACHED";
+ break;
+
+ default:
+ result_cable = "UNKNOWN";
+ break;
+ }
+
+ char* mac = nullptr;
+ error = connection_get_mac_address(connection_handle, CONNECTION_TYPE_ETHERNET, &mac);
+ if (CONNECTION_ERROR_NONE == error && nullptr != mac) {
+ SLoggerD("MAC address fetched: %s", mac);
+ result_mac_address = mac;
+ free(mac);
+ } else {
+ std::string log_msg = "Failed to get mac address: " + std::to_string(error);
+ LoggerE("%s", log_msg.c_str());
+ return PlatformResult(ErrorCode::UNKNOWN_ERR, log_msg);
+ }
+
+ error = connection_get_type(connection_handle, &connection_type);
+ if (CONNECTION_ERROR_NONE != error) {
+ std::string log_msg = "Cannot get connection type: " + std::to_string(error);
+ LoggerE("%s", log_msg.c_str());
+ return PlatformResult(ErrorCode::UNKNOWN_ERR, log_msg);
+ }
+
+ if (CONNECTION_TYPE_ETHERNET == connection_type) {
+ //gathering profile
+ error = connection_get_current_profile(connection_handle, &profile_handle);
+ if (CONNECTION_ERROR_NONE != error) {
+ std::string log_msg = "Cannot get connection profile: " + std::to_string(error);
+ LoggerE("%s", log_msg.c_str());
+ return PlatformResult(ErrorCode::UNKNOWN_ERR, log_msg);
+ }
+ std::unique_ptr<std::remove_pointer<connection_profile_h>::type,
+ int (*)(connection_profile_h)> profile_handle_ptr(
+ profile_handle, &connection_profile_destroy); // automatically release the memory
+
+ //gathering ips
+ PlatformResult ret = GetIps(profile_handle, &result_ip_address, &result_ipv6_address);
+ if (ret.IsError()) {
+ return ret;
+ }
+ } else {
+ LoggerD("Connection type = %d. ETHERNET is disabled", connection_type);
+ }
+
+ out.insert(std::make_pair("cable", picojson::value(result_cable)));
+ out.insert(std::make_pair("status", picojson::value(result_status)));
+ out.insert(std::make_pair("ipAddress", picojson::value(result_ip_address)));
+ out.insert(std::make_pair("ipv6Address", picojson::value(result_ipv6_address)));
+ out.insert(std::make_pair("macAddress", picojson::value(result_mac_address)));
+
+ return PlatformResult(ErrorCode::NO_ERROR);
+}
+
static PlatformResult FetchVconfSettings(
unsigned short *result_mcc,
unsigned short *result_mnc,
return system_info_listeners.UnregisterWifiNetworkListener();
}
+PlatformResult SysteminfoUtils::RegisterEthernetNetworkListener(const SysteminfoUtilsCallback& callback,
+ SysteminfoInstance& instance)
+{
+ LoggerD("Entered");
+ return system_info_listeners.RegisterEthernetNetworkListener(callback, instance);
+}
+
+PlatformResult SysteminfoUtils::UnregisterEthernetNetworkListener()
+{
+ LoggerD("Entered");
+ return system_info_listeners.UnregisterEthernetNetworkListener();
+}
+
PlatformResult SysteminfoUtils::RegisterCellularNetworkListener(const SysteminfoUtilsCallback& callback,
SysteminfoInstance& instance)
{