* Global Variables
*****************************************************************************/
-static __thread wifi_direct_client_info_s g_client_info = {0, };
+static pthread_mutex_t g_wfd_thread_mutex = PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP;
+static wifi_direct_client_info_s g_client_info = {0, };
/*****************************************************************************
* Local Functions Definition
return WIFI_DIRECT_ERROR_NONE;
}
+void _wfd_lock(void)
+{
+ pthread_mutex_lock(&g_wfd_thread_mutex);
+}
+
+void _wfd_unlock(void)
+{
+ pthread_mutex_unlock(&g_wfd_thread_mutex);
+}
+
//LCOV_EXCL_START
void __wfd_vconf_state_changed_cb(keynode_t *key, void *data)
{
int state = 0;
int res = 0;
+ WFD_LOCK;
if (!g_client_info.state_cb) {
WDC_LOGI("g_state_cb is NULL!!");
+ WFD_UNLOCK;
__WDC_LOG_FUNC_END__;
return; //LCOV_EXCL_LINE
}
if (res < 0) {
WDC_LOGE("Failed to get vconf value [%s]\n",
VCONFKEY_WIFI_DIRECT_STATE);
+ WFD_UNLOCK;
__WDC_LOG_FUNC_END__;
return;
}
state = WIFI_DIRECT_STATE_DISCONNECTING;
} else {
WDC_LOGE("This state cannot be set as wifi_direct vconf state[%d]", state);
+ WFD_UNLOCK;
__WDC_LOG_FUNC_END__;
return;
}
g_client_info.state_cb(state, g_client_info.user_data_for_cb_state);
+ WFD_UNLOCK;
__WDC_LOG_FUNC_END__;
return;
{
__WDC_LOG_FUNC_START__;
int error_code;
+
+ WFD_LOCK;
wifi_direct_client_info_s *client = __wfd_get_control();
if (!client->activation_cb) {
WDC_LOGI("activation_cb is NULL!!");
+ WFD_UNLOCK;
return; //LCOV_EXCL_LINE
}
if (!parameters) {
+ WFD_UNLOCK;
__WDC_LOG_FUNC_END__;
return;
}
WIFI_DIRECT_DEVICE_STATE_ACTIVATED,
client->user_data_for_cb_activation);
+ WFD_UNLOCK;
__WDC_LOG_FUNC_END__;
}
{
__WDC_LOG_FUNC_START__;
int error_code;
+
+ WFD_LOCK;
wifi_direct_client_info_s *client = __wfd_get_control();
if (!parameters) {
+ WFD_UNLOCK;
__WDC_LOG_FUNC_END__;
return; //LCOV_EXCL_LINE
}
if (!client->activation_cb) {
WDC_LOGI("activation_cb is NULL!!");
+ WFD_UNLOCK;
__WDC_LOG_FUNC_END__;
return;
}
client->activation_cb(error_code,
WIFI_DIRECT_DEVICE_STATE_DEACTIVATED,
client->user_data_for_cb_activation);
+ WFD_UNLOCK;
__WDC_LOG_FUNC_END__;
}
int error_code;
wifi_direct_connection_state_e connection_state;
const gchar *peer_mac_address = NULL;
+
+ WFD_LOCK;
wifi_direct_client_info_s *client = __wfd_get_control();
if (!parameters) {
+ WFD_UNLOCK;
__WDC_LOG_FUNC_END__;
return;
}
if (!client->connection_cb) {
WDC_LOGI("connection_cb is NULL!!");
+ WFD_UNLOCK;
__WDC_LOG_FUNC_END__;
return;
}
connection_state,
peer_mac_address,
client->user_data_for_cb_connection);
+ WFD_UNLOCK;
__WDC_LOG_FUNC_END__;
}
int error_code;
wifi_direct_connection_state_e connection_state;
const gchar *peer_mac_address = NULL;
+
+ WFD_LOCK;
wifi_direct_client_info_s *client = __wfd_get_control();
if (!parameters) {
+ WFD_UNLOCK;
__WDC_LOG_FUNC_END__;
return;
}
if (!client->connection_cb) {
WDC_LOGI("connection_cb is NULL!!");
+ WFD_UNLOCK;
__WDC_LOG_FUNC_END__;
return;
}
connection_state,
peer_mac_address,
client->user_data_for_cb_connection);
+ WFD_UNLOCK;
__WDC_LOG_FUNC_END__;
}
const gchar *peer_dev_name = NULL;
wifi_direct_connection_state_cb_data_s data_s;
+ WFD_LOCK;
wifi_direct_client_info_s *client = __wfd_get_control();
if (!parameters) {
__WDC_LOG_FUNC_END__;
+ WFD_UNLOCK;
return;
}
client->user_data_for_cb_peer_data_connection);
}
+ WFD_UNLOCK;
__WDC_LOG_FUNC_END__;
}
//LCOV_EXCL_STOP
const gchar *peer_mac_address = NULL;
const gchar *assigned_ip_address = NULL;
int ret = 0;
+
+ WFD_LOCK;
wifi_direct_client_info_s *client = __wfd_get_control();
if (!parameters) {
+ WFD_UNLOCK;
__WDC_LOG_FUNC_END__;
return;
}
if (!client->ip_assigned_cb) {
WDC_LOGI("ip_assigned_cb is NULL!!");
+ WFD_UNLOCK;
__WDC_LOG_FUNC_END__;
return;
}
client->user_data_for_cb_ip_assigned);
g_variant_unref(reply);
+ WFD_UNLOCK;
+
__WDC_LOG_FUNC_END__;
}
gpointer user_data)
{
__WDC_LOG_FUNC_START__;
+ WFD_LOCK;
wifi_direct_client_info_s *client = __wfd_get_control();
if (!client->discover_cb) {
WDC_LOGI("discover_cb is NULL!!");
+ WFD_UNLOCK;
__WDC_LOG_FUNC_END__;
return;
}
client->discover_cb(WIFI_DIRECT_ERROR_NONE,
WIFI_DIRECT_ONLY_LISTEN_STARTED,
client->user_data_for_cb_discover);
+ WFD_UNLOCK;
__WDC_LOG_FUNC_END__;
}
gpointer user_data)
{
__WDC_LOG_FUNC_START__;
+ WFD_LOCK;
wifi_direct_client_info_s *client = __wfd_get_control();
if (!client->discover_cb) {
WDC_LOGI("discover_cb is NULL!!");
+ WFD_UNLOCK;
__WDC_LOG_FUNC_END__;
return;
}
client->discover_cb(WIFI_DIRECT_ERROR_NONE,
WIFI_DIRECT_DISCOVERY_STARTED,
client->user_data_for_cb_discover);
+ WFD_UNLOCK;
__WDC_LOG_FUNC_END__;
}
gpointer user_data)
{
__WDC_LOG_FUNC_START__;
+ WFD_LOCK;
wifi_direct_client_info_s *client = __wfd_get_control();
if (!client->discover_cb) {
WDC_LOGI("discover_cb is NULL!!");
+ WFD_UNLOCK;
__WDC_LOG_FUNC_END__;
return;
}
client->discover_cb(WIFI_DIRECT_ERROR_NONE,
WIFI_DIRECT_DISCOVERY_FINISHED,
client->user_data_for_cb_discover);
+ WFD_UNLOCK;
__WDC_LOG_FUNC_END__;
}
{
__WDC_LOG_FUNC_START__;
const gchar *peer_mac_address = NULL;
+ WFD_LOCK;
wifi_direct_client_info_s *client = __wfd_get_control();
if (!parameters) {
+ WFD_UNLOCK;
__WDC_LOG_FUNC_END__;
return;
}
if (!client->discover_cb) {
WDC_LOGI("discover_cb is NULL!!");
+ WFD_UNLOCK;
__WDC_LOG_FUNC_END__;
return;
}
client->discover_cb(WIFI_DIRECT_ERROR_NONE,
WIFI_DIRECT_DISCOVERY_FOUND,
client->user_data_for_cb_discover);
+ WFD_UNLOCK;
__WDC_LOG_FUNC_END__;
}
{
__WDC_LOG_FUNC_START__;
const gchar *peer_mac_address = NULL;
+ WFD_LOCK;
wifi_direct_client_info_s *client = __wfd_get_control();
if (!parameters) {
+ WFD_UNLOCK;
__WDC_LOG_FUNC_END__;
return;
}
if (!client->discover_cb) {
WDC_LOGI("discover_cb is NULL!!");
+ WFD_UNLOCK;
__WDC_LOG_FUNC_END__;
return;
}
client->discover_cb(WIFI_DIRECT_ERROR_NONE,
WIFI_DIRECT_DISCOVERY_LOST,
client->user_data_for_cb_discover);
+ WFD_UNLOCK;
__WDC_LOG_FUNC_END__;
}
gpointer user_data)
{
__WDC_LOG_FUNC_START__;
+ WFD_LOCK;
wifi_direct_client_info_s *client = __wfd_get_control();
if (!client->connection_cb) {
WDC_LOGI("connection_cb is NULL!!");
+ WFD_UNLOCK;
__WDC_LOG_FUNC_END__;
return;
}
WIFI_DIRECT_GROUP_CREATED,
"",
client->user_data_for_cb_connection);
+ WFD_UNLOCK;
__WDC_LOG_FUNC_END__;
}
gpointer user_data)
{
__WDC_LOG_FUNC_START__;
+ WFD_LOCK;
wifi_direct_client_info_s *client = __wfd_get_control();
if (!client->connection_cb) {
WDC_LOGI("connection_cb is NULL!!");
+ WFD_UNLOCK;
__WDC_LOG_FUNC_END__;
return;
}
WIFI_DIRECT_GROUP_DESTROYED,
"",
client->user_data_for_cb_connection);
+ WFD_UNLOCK;
__WDC_LOG_FUNC_END__;
}
gpointer user_data)
{
__WDC_LOG_FUNC_START__;
+ WFD_LOCK;
wifi_direct_client_info_s *client = __wfd_get_control();
if (!client->is_service_discovery_supported) {
WDC_LOGI("service discovery is not supported\n");
+ WFD_UNLOCK;
__WDC_LOG_FUNC_END__;
return;
}
if (!client->service_cb) {
WDC_LOGI("service_cb is NULL!!\n");
+ WFD_UNLOCK;
__WDC_LOG_FUNC_END__;
return;
}
"",
"",
client->user_data_for_cb_service);
+ WFD_UNLOCK;
__WDC_LOG_FUNC_END__;
}
wifi_direct_service_type_e service_type;
const gchar* response_data = NULL;
const gchar* peer_mac_address = NULL;
+
+ WFD_LOCK;
wifi_direct_client_info_s *client = __wfd_get_control();
if (!client->is_service_discovery_supported) {
WDC_LOGI("service discovery is not supported\n");
+ WFD_UNLOCK;
__WDC_LOG_FUNC_END__;
return;
}
if (!parameters) {
+ WFD_UNLOCK;
__WDC_LOG_FUNC_END__;
return;
}
if (!client->service_cb) {
WDC_LOGI("service_cb is NULL!!\n");
+ WFD_UNLOCK;
__WDC_LOG_FUNC_END__;
return;
}
(void *) response_data,
peer_mac_address,
client->user_data_for_cb_service);
+ WFD_UNLOCK;
__WDC_LOG_FUNC_END__;
}
gpointer user_data)
{
__WDC_LOG_FUNC_START__;
+ WFD_LOCK;
wifi_direct_client_info_s *client = __wfd_get_control();
if (!client->is_service_discovery_supported) {
WDC_LOGI("service discovery is not supported\n");
+ WFD_UNLOCK;
__WDC_LOG_FUNC_END__;
return;
}
if (!client->service_cb) {
WDC_LOGI("service_cb is NULL!!\n");
+ WFD_UNLOCK;
__WDC_LOG_FUNC_END__;
return;
}
"",
"",
client->user_data_for_cb_service);
+ WFD_UNLOCK;
__WDC_LOG_FUNC_END__;
}
info->secondary_device_type = g_variant_get_uint16(var);
} else if (!g_strcmp0(key, "IsWfdDevice")) {
+ WFD_LOCK;
if (g_client_info.is_display_supported)
info->is_miracast_device = g_variant_get_boolean(var);
+ WFD_UNLOCK;
} else {
;/* Do Nothing */
}
GVariant *reply = NULL;
int res = 0;
+ WFD_LOCK;
if (g_client_info.is_registered == TRUE) {
WDC_LOGW("Warning!!! Already registered\nUpdate user data and callback!");
+ WFD_UNLOCK;
__WDC_LOG_FUNC_END__;
return WIFI_DIRECT_ERROR_ALREADY_INITIALIZED;
}
- CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
-
if (wifi_direct_dbus_init() == FALSE) {
WDC_LOGW("Failed to initialize dbus");
+ WFD_UNLOCK;
__WDC_LOG_FUNC_END__;
return WIFI_DIRECT_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
}
res = __net_wifidirect_gerror_to_enum(error);
if (res != WIFI_DIRECT_ERROR_NONE) {
WDC_LOGE("Failed to Add Active Client");
+ WFD_UNLOCK;
return res;
}
g_client_info.service_cb = NULL;
g_client_info.user_data_for_cb_service = NULL;
+ WFD_UNLOCK;
__WDC_LOG_FUNC_END__;
return WIFI_DIRECT_ERROR_NONE;
wifi_direct_dbus_deinit();
+ WFD_LOCK;
g_client_info.activation_cb = NULL;
g_client_info.user_data_for_cb_activation = NULL;
g_client_info.user_data_for_cb_service = NULL;
g_client_info.is_registered = FALSE;
+ WFD_UNLOCK;
__WDC_LOG_FUNC_END__;
return WIFI_DIRECT_ERROR_NONE;
CHECK_INITIALIZED();
+ WFD_LOCK;
g_client_info.activation_cb = cb;
g_client_info.user_data_for_cb_activation = user_data;
+ WFD_UNLOCK;
__WDC_LOG_FUNC_END__;
return WIFI_DIRECT_ERROR_NONE;
CHECK_INITIALIZED();
+ WFD_LOCK;
g_client_info.activation_cb = NULL;
g_client_info.user_data_for_cb_activation = NULL;
+ WFD_UNLOCK;
__WDC_LOG_FUNC_END__;
return WIFI_DIRECT_ERROR_NONE;
CHECK_INITIALIZED();
+ WFD_LOCK;
g_client_info.discover_cb = cb;
g_client_info.user_data_for_cb_discover = user_data;
+ WFD_UNLOCK;
__WDC_LOG_FUNC_END__;
return WIFI_DIRECT_ERROR_NONE;
CHECK_INITIALIZED();
+ WFD_LOCK;
g_client_info.discover_cb = NULL;
g_client_info.user_data_for_cb_discover = NULL;
+ WFD_UNLOCK;
__WDC_LOG_FUNC_END__;
return WIFI_DIRECT_ERROR_NONE;
CHECK_INITIALIZED();
+ WFD_LOCK;
g_client_info.peer_found_cb = cb;
g_client_info.user_data_for_cb_peer_found = user_data;
+ WFD_UNLOCK;
__WDC_LOG_FUNC_END__;
return WIFI_DIRECT_ERROR_NONE;
CHECK_INITIALIZED();
+ WFD_LOCK;
g_client_info.peer_found_cb = NULL;
g_client_info.user_data_for_cb_peer_found = NULL;
+ WFD_UNLOCK;
__WDC_LOG_FUNC_END__;
return WIFI_DIRECT_ERROR_NONE;
CHECK_INITIALIZED();
+ WFD_LOCK;
g_client_info.service_cb = cb;
g_client_info.user_data_for_cb_service = user_data;
+ WFD_UNLOCK;
__WDC_LOG_FUNC_END__;
CHECK_INITIALIZED();
+ WFD_LOCK;
g_client_info.service_cb = NULL;
g_client_info.user_data_for_cb_service = NULL;
+ WFD_UNLOCK;
__WDC_LOG_FUNC_END__;
CHECK_INITIALIZED();
+ WFD_LOCK;
g_client_info.connection_cb = cb;
g_client_info.user_data_for_cb_connection = user_data;
+ WFD_UNLOCK;
__WDC_LOG_FUNC_END__;
return WIFI_DIRECT_ERROR_NONE;
CHECK_INITIALIZED();
+ WFD_LOCK;
g_client_info.connection_cb = NULL;
g_client_info.user_data_for_cb_connection = NULL;
+ WFD_UNLOCK;
__WDC_LOG_FUNC_END__;
return WIFI_DIRECT_ERROR_NONE;
CHECK_INITIALIZED();
+ WFD_LOCK;
g_client_info.peer_data_connection_cb = cb;
g_client_info.user_data_for_cb_peer_data_connection = user_data;
+ WFD_UNLOCK;
__WDC_LOG_FUNC_END__;
return WIFI_DIRECT_ERROR_NONE;
CHECK_INITIALIZED();
+ WFD_LOCK;
g_client_info.peer_data_connection_cb = NULL;
g_client_info.user_data_for_cb_peer_data_connection = NULL;
+ WFD_UNLOCK;
__WDC_LOG_FUNC_END__;
return WIFI_DIRECT_ERROR_NONE;
CHECK_INITIALIZED();
+ WFD_LOCK;
g_client_info.ip_assigned_cb = cb;
g_client_info.user_data_for_cb_ip_assigned = user_data;
+ WFD_UNLOCK;
__WDC_LOG_FUNC_END__;
return WIFI_DIRECT_ERROR_NONE;
CHECK_INITIALIZED();
+ WFD_LOCK;
g_client_info.ip_assigned_cb = NULL;
g_client_info.user_data_for_cb_ip_assigned = NULL;
+ WFD_UNLOCK;
__WDC_LOG_FUNC_END__;
return WIFI_DIRECT_ERROR_NONE;
return WIFI_DIRECT_ERROR_OPERATION_FAILED;
}
+ WFD_LOCK;
g_client_info.state_cb = cb;
g_client_info.user_data_for_cb_state = user_data;
+ WFD_UNLOCK;
__WDC_LOG_FUNC_END__;
return WIFI_DIRECT_ERROR_NONE;
return WIFI_DIRECT_ERROR_OPERATION_FAILED;
}
+ WFD_LOCK;
g_client_info.state_cb = NULL;
g_client_info.user_data_for_cb_state = NULL;
+ WFD_UNLOCK;
__WDC_LOG_FUNC_END__;
return WIFI_DIRECT_ERROR_NONE;
} else if (!g_strcmp0(key, "IsWfdDevice")) {
+ WFD_LOCK;
if (g_client_info.is_display_supported)
peer_list->is_miracast_device = g_variant_get_boolean(var);
+ WFD_UNLOCK;
} else if (!g_strcmp0(key, "IsP2P")) {
peer_list->p2p_supported = g_variant_get_boolean(var);
peer->secondary_device_type = g_variant_get_uint16(var);
} else if (!g_strcmp0(key, "IsWfdDevice")) {
+ WFD_LOCK;
if (g_client_info.is_display_supported)
peer->is_miracast_device = g_variant_get_boolean(var);
+ WFD_UNLOCK;
} else {
;/* Do Nothing */
}