static void __ws_path_to_addr(char *peer_path,
unsigned char *dev_addr, GVariant *parameter)
{
- __WDP_LOG_FUNC_ENTER__;
-
static unsigned char peer_dev[WS_MACSTR_LEN] = {'\0',};
const char *path = NULL;
char *loc = NULL;
WDP_LOGD("peer mac [" MACSTR "]", MAC2STR(dev_addr));
return;
- __WDP_LOG_FUNC_EXIT__;
}
static int __ws_unpack_ay(unsigned char *dst, GVariant *src, int size)
const gchar *sender, const gchar *object_path, const gchar *interface,
const gchar *signal, GVariant *parameters, gpointer user_data)
{
+#if defined (TIZEN_DEBUG_DBUS_VALUE)
DEBUG_SIGNAL(sender, object_path, interface, signal, parameters);
+#endif /* TIZEN_DEBUG_DBUS_VALUE */
if (!g_strcmp0(signal,"InterfaceAdded")) {
WDP_LOGD("InterfaceAdded");
static void __ws_get_peer_property(const char *key, GVariant *value, void *user_data)
{
- __WDP_LOG_FUNC_ENTER__;
-
wfd_oem_device_s *peer = (wfd_oem_device_s *)user_data;
if(!peer) {
__WDP_LOG_FUNC_EXIT__;
return;
}
+#if defined (TIZEN_DEBUG_DBUS_VALUE)
CHECK_KEY_VALUE(key, value);
+#endif /* TIZEN_DEBUG_DBUS_VALUE */
if (g_strcmp0(key, "DeviceName") == 0) {
const char *name = NULL;
g_variant_get(value, "s", &name);
g_strlcpy(peer->dev_name, name, WS_SSID_LEN);
- WDP_LOGD("[%s]", peer->dev_name);
+ WDP_LOGD("Device name [%s]", peer->dev_name);
} else if (g_strcmp0(key, "config_method") == 0) {
int config_methods = 0;
peer->config_methods |= WFD_OEM_WPS_MODE_PBC;
if (config_methods & WS_CONFIG_METHOD_KEYPAD)
peer->config_methods |= WFD_OEM_WPS_MODE_KEYPAD;
- WDP_LOGD("[0x%x]", peer->config_methods);
+ WDP_LOGD("Config method [0x%x]", peer->config_methods);
} else if (g_strcmp0(key, "level") == 0) {
g_variant_get(value, "y", &devicecapability);
peer->dev_flags = (int)devicecapability;
- WDP_LOGD("[0x%02x]", peer->dev_flags);
+ WDP_LOGD("Device Capa [0x%02x]", peer->dev_flags);
} else if (g_strcmp0(key, "groupcapability") == 0) {
unsigned char groupcapability = 0;
g_variant_get(value, "y", &groupcapability);
- WDP_LOGD("[0x%02x]", groupcapability);
+ WDP_LOGD("Group Capa [0x%02x]", groupcapability);
if (groupcapability & WS_GROUP_CAP_GROUP_OWNER) {
peer->group_flags = WFD_OEM_GROUP_FLAG_GROUP_OWNER;
peer->dev_role = WFD_OEM_DEV_ROLE_GO;
} else if (g_strcmp0(key, "DeviceAddress") == 0) {
if (__ws_unpack_ay(peer->dev_addr, value, WS_MACADDR_LEN))
- WDP_LOGD("[" MACSTR "]", MAC2STR(peer->dev_addr));
+ WDP_LOGD("Device address [" MACSTR "]", MAC2STR(peer->dev_addr));
} else if (g_strcmp0(key, "InterfaceAddress") == 0) {
if (__ws_unpack_ay(peer->intf_addr, value, WS_MACADDR_LEN))
- WDP_LOGD("[" MACSTR "]", MAC2STR(peer->intf_addr));
+ WDP_LOGD("Interface address [" MACSTR "]", MAC2STR(peer->intf_addr));
} else if (g_strcmp0(key, "GODeviceAddress") == 0) {
if (__ws_unpack_ay(peer->go_dev_addr, value, WS_MACADDR_LEN))
- WDP_LOGD("[" MACSTR "]", MAC2STR(peer->go_dev_addr));
+ WDP_LOGD("GODevice address [" MACSTR "]", MAC2STR(peer->go_dev_addr));
if(!ISZEROMACADDR(peer->go_dev_addr))
peer->dev_role = WFD_OEM_DEV_ROLE_GC;
} else {
WDP_LOGE("Unknown value");
}
- __WDP_LOG_FUNC_EXIT__;
+ return;
}
static void __ws_peer_property(const char *key, GVariant *value, void *user_data)
{
- __WDP_LOG_FUNC_ENTER__;
if(!user_data) {
- __WDP_LOG_FUNC_EXIT__;
return;
}
wfd_oem_dev_data_s *peer = (wfd_oem_dev_data_s *)user_data;
-
+#if defined (TIZEN_DEBUG_DBUS_VALUE)
CHECK_KEY_VALUE(key, value);
-
+#endif /* TIZEN_DEBUG_DBUS_VALUE */
if (g_strcmp0(key, "DeviceName") == 0) {
const char *name = NULL;
g_variant_get(value, "s", &name);
g_strlcpy(peer->name, name, WS_SSID_LEN);
- WDP_LOGD("[%s]", peer->name);
+ WDP_LOGD("Device Name [%s]", peer->name);
} else if (g_strcmp0(key, "config_method") == 0) {
int config_methods = 0;
peer->config_methods |= WFD_OEM_WPS_MODE_PBC;
if (config_methods & WS_CONFIG_METHOD_KEYPAD)
peer->config_methods |= WFD_OEM_WPS_MODE_KEYPAD;
- WDP_LOGD("[0x%x]", peer->config_methods);
+ WDP_LOGD("Config method [0x%x]", peer->config_methods);
} else if (g_strcmp0(key, "level") == 0) {
g_variant_get(value, "y", &devicecapability);
peer->dev_flags = (int)devicecapability;
- WDP_LOGD("[0x%02x]", peer->dev_flags);
+ WDP_LOGD("Device Capa [0x%02x]", peer->dev_flags);
} else if (g_strcmp0(key, "groupcapability") == 0) {
unsigned char groupcapability = 0;
g_variant_get(value, "y", &groupcapability);
- WDP_LOGD("[0x%02x]", groupcapability);
+ WDP_LOGD("Group Capa [0x%02x]", groupcapability);
if (groupcapability & WS_GROUP_CAP_GROUP_OWNER) {
peer->group_flags = WFD_OEM_GROUP_FLAG_GROUP_OWNER;
peer->dev_role = WFD_OEM_DEV_ROLE_GO;
} else if (g_strcmp0(key, "DeviceAddress") == 0) {
if (__ws_unpack_ay(peer->p2p_dev_addr, value, WS_MACADDR_LEN))
- WDP_LOGD("[" MACSTR "]", MAC2STR(peer->p2p_dev_addr));
+ WDP_LOGD("Device address [" MACSTR "]", MAC2STR(peer->p2p_dev_addr));
} else if (g_strcmp0(key, "InterfaceAddress") == 0) {
if (__ws_unpack_ay(peer->p2p_intf_addr, value, WS_MACADDR_LEN))
- WDP_LOGD("[" MACSTR "]", MAC2STR(peer->p2p_intf_addr));
+ WDP_LOGD("Interface Address [" MACSTR "]", MAC2STR(peer->p2p_intf_addr));
} else if (g_strcmp0(key, "GODeviceAddress") == 0) {
unsigned char go_dev_addr[OEM_MACADDR_LEN];
if (__ws_unpack_ay(go_dev_addr, value, WS_MACADDR_LEN))
WDP_LOGD("[" MACSTR "]", MAC2STR(go_dev_addr));
- WDP_LOGD("[" MACSTR "]", MAC2STR(go_dev_addr));
if(!ISZEROMACADDR(go_dev_addr))
peer->dev_role = WFD_OEM_DEV_ROLE_GC;
} else {
WDP_LOGE("Unknown value");
}
- __WDP_LOG_FUNC_EXIT__;
+ return;
}
void __ws_interface_property(const char *key, GVariant *value, void *user_data)
{
- __WDP_LOG_FUNC_ENTER__;
wfd_oem_event_s *event = (wfd_oem_event_s *)user_data;
if(!event)
return;
-
+#if defined (TIZEN_DEBUG_DBUS_VALUE)
CHECK_KEY_VALUE(key, value);
-
+#endif /* TIZEN_DEBUG_DBUS_VALUE */
if (g_strcmp0(key, "Ifname") == 0) {
const char *ifname = NULL;
WDP_LOGD("Ifname [%s]", event->ifname);
}
-
- __WDP_LOG_FUNC_EXIT__;
+ return;
}
void __ws_group_property(const char *key, GVariant *value, void *user_data)
{
- __WDP_LOG_FUNC_ENTER__;
wfd_oem_event_s *event = (wfd_oem_event_s *)user_data;
if(!event || !event->edata)
return;
wfd_oem_group_data_s *group = (wfd_oem_group_data_s *)event->edata;
-
+#if defined (TIZEN_DEBUG_DBUS_VALUE)
CHECK_KEY_VALUE(key, value);
-
+#endif /* TIZEN_DEBUG_DBUS_VALUE */
if (g_strcmp0(key, "Role") == 0) {
const char *role = NULL;
g_variant_get(value, "s", &role);
- WDP_LOGD("role [%s]", role);
+ WDP_LOGD("Role [%s]", role);
if (!strncmp(role, "GO", 2))
event->dev_role = WFD_OEM_DEV_ROLE_GO;
unsigned char ssid[WS_SSID_LEN +1] = {0,};
__ws_unpack_ay(ssid, value, WS_SSID_LEN);
- memcpy(group->ssid, ssid, WS_SSID_LEN+1);
- WDP_LOGD("ssid [%s]", group->ssid);
+ memcpy(group->ssid, ssid, WS_SSID_LEN+1);
+ WDP_LOGD("ssid [%s]", group->ssid);
} else if (g_strcmp0(key, "BSSID") == 0) {
} else {
WDP_LOGE("Unknown value");
}
- __WDP_LOG_FUNC_EXIT__;
+ return;
}
void __ws_extract_invitation_details(const char *key, GVariant *value, void *user_data)
{
- __WDP_LOG_FUNC_ENTER__;
wfd_oem_event_s *event = (wfd_oem_event_s *)user_data;
if(!event || !event->edata)
return;
wfd_oem_invite_data_s *invitation = (wfd_oem_invite_data_s *)event->edata;
-
+#if defined (TIZEN_DEBUG_DBUS_VALUE)
CHECK_KEY_VALUE(key, value);
-
+#endif /* TIZEN_DEBUG_DBUS_VALUE */
if (g_strcmp0(key, "sa") == 0) {
if (__ws_unpack_ay(invitation->sa, value, WS_MACADDR_LEN))
- WDP_LOGD("[" MACSTR "]", MAC2STR(invitation->sa));
+ WDP_LOGD("SA [" MACSTR "]", MAC2STR(invitation->sa));
} else if (g_strcmp0(key, "go_dev_add") == 0) {
if (__ws_unpack_ay(invitation->go_dev_addr, value, WS_MACADDR_LEN))
- WDP_LOGD("[" MACSTR "]", MAC2STR(invitation->go_dev_addr));
+ WDP_LOGD("GO device address [" MACSTR "]", MAC2STR(invitation->go_dev_addr));
} else if (g_strcmp0(key, "bssid") == 0) {
if (__ws_unpack_ay(invitation->bssid, value, WS_MACADDR_LEN))
- WDP_LOGD("[" MACSTR "]", MAC2STR(invitation->bssid));
+ WDP_LOGD("BSSID [" MACSTR "]", MAC2STR(invitation->bssid));
} else if (g_strcmp0(key, "persistent_id") == 0) {
g_variant_get(value, "i", &(invitation->persistent_id));
} else {
WDP_LOGE("Unknown value");
}
- __WDP_LOG_FUNC_EXIT__;
+ return;
}
void __ws_extract_group_details(const char *key, GVariant *value, void *user_data)
{
-
- __WDP_LOG_FUNC_ENTER__;
wfd_oem_event_s *event = (wfd_oem_event_s *)user_data;
if(!event || !event->edata)
return;
wfd_oem_group_data_s *group = (wfd_oem_group_data_s *)event->edata;
-
+#if defined (TIZEN_DEBUG_DBUS_VALUE)
CHECK_KEY_VALUE(key, value);
-
+#endif /* TIZEN_DEBUG_DBUS_VALUE */
if (g_strcmp0(key, "interface_object") == 0) {
static char interface_path[DBUS_OBJECT_PATH_MAX] = {'\0',};
const char *i_path = NULL;
const char *role = NULL;
g_variant_get(value, "s", &role);
- WDP_LOGD("role [%s]", role);
+ WDP_LOGD("Role [%s]", role);
if (!strncmp(role, "GO", 2))
event->dev_role = WFD_OEM_DEV_ROLE_GO;
} else if (g_strcmp0(key, "IpAddr") == 0) {
if (__ws_unpack_ay(group->ip_addr, value, OEM_IPADDR_LEN))
- WDP_LOGD("[" IPSTR "]", IP2STR(group->ip_addr));
+ WDP_LOGD("IP address [" IPSTR "]", IP2STR(group->ip_addr));
} else if (g_strcmp0(key, "IpAddrMask") == 0) {
if (__ws_unpack_ay(group->ip_addr_mask, value, OEM_IPADDR_LEN))
- WDP_LOGD("[" IPSTR "]", IP2STR(group->ip_addr_mask));
+ WDP_LOGD("IP mask [" IPSTR "]", IP2STR(group->ip_addr_mask));
} else if (g_strcmp0(key, "IpAddrGo") == 0) {
if (__ws_unpack_ay(group->ip_addr_go, value, OEM_IPADDR_LEN))
- WDP_LOGD("[" IPSTR "]", IP2STR(group->ip_addr_go));
+ WDP_LOGD("GO IP address [" IPSTR "]", IP2STR(group->ip_addr_go));
} else if (g_strcmp0(key, "group_object") == 0) {
static char group_path[DBUS_OBJECT_PATH_MAX] = {'\0',};
_group_signal_cb,
NULL, NULL);
}
- __WDP_LOG_FUNC_EXIT__;
+ return;
}
void __ws_extract_gonegfailaure_details(const char *key, GVariant *value, void *user_data)
{
- __WDP_LOG_FUNC_ENTER__;
wfd_oem_event_s *event = (wfd_oem_event_s *)user_data;
if(!event || !event->edata)
return;
wfd_oem_conn_data_s *conn = (wfd_oem_conn_data_s *)event->edata;
-
+#if defined (TIZEN_DEBUG_DBUS_VALUE)
CHECK_KEY_VALUE(key, value);
-
+#endif /* TIZEN_DEBUG_DBUS_VALUE */
if (g_strcmp0(key, "peer_object") == 0) {
static char peer_path[DBUS_OBJECT_PATH_MAX] = {'\0',};
const char *path;
WDP_LOGD("Retrive status [%d]", status);
conn->status = status;
}
- __WDP_LOG_FUNC_EXIT__;
+ return;
}
void __ws_extract_gonegsuccess_details(const char *key, GVariant *value, void *user_data)
{
- __WDP_LOG_FUNC_ENTER__;
wfd_oem_event_s *event = (wfd_oem_event_s *)user_data;
if(!event || !event->edata)
return;
wfd_oem_conn_data_s *edata = (wfd_oem_conn_data_s *)event->edata;
-
+#if defined (TIZEN_DEBUG_DBUS_VALUE)
CHECK_KEY_VALUE(key, value);
-
+#endif /* TIZEN_DEBUG_DBUS_VALUE */
if (g_strcmp0(key, "peer_object") == 0) {
} else if (g_strcmp0(key, "status") == 0) {
} else if (g_strcmp0(key, "peer_device_addr") == 0) {
if(__ws_unpack_ay(edata->peer_device_addr, value, WS_MACADDR_LEN))
- WDP_LOGD("[" MACSTR "]", MAC2STR(edata->peer_device_addr));
+ WDP_LOGD("Device address[" MACSTR "]", MAC2STR(edata->peer_device_addr));
} else if(g_strcmp0(key, "peer_interface_addr") == 0) {
if(__ws_unpack_ay(edata->peer_intf_addr, value, WS_MACADDR_LEN))
- WDP_LOGD("[" MACSTR "]", MAC2STR(edata->peer_intf_addr));
+ WDP_LOGD("Interface address [" MACSTR "]", MAC2STR(edata->peer_intf_addr));
} else if (g_strcmp0(key, "wps_method") == 0) {
} else if (g_strcmp0(key, "peer_config_timeout") == 0) {
}
- __WDP_LOG_FUNC_EXIT__;
+ return;
}
#ifdef TIZEN_FEATURE_SERVICE_DISCOVERY
if(!event)
return;
-
+#if defined (TIZEN_DEBUG_DBUS_VALUE)
CHECK_KEY_VALUE(key, value);
-
+#endif /* TIZEN_DEBUG_DBUS_VALUE */
if (g_strcmp0(key, "peer_object") == 0) {
static char peer_path[DBUS_OBJECT_PATH_MAX] = {'\0',};
__ws_path_to_addr(peer_path, event->dev_addr, value);
event.event_id = WFD_OEM_EVENT_SERV_DISC_RESP;
if(parameters != NULL) {
- g_variant_get(parameters, "(a{sv}", &iter);
+ g_variant_get(parameters, "(a{sv})", &iter);
if(iter != NULL) {
dbus_property_foreach(iter, __ws_extract_servicediscoveryresponse_details, &event);
event.edata_type = WFD_OEM_EDATA_TYPE_NEW_SERVICE;
GVariant *value = NULL;
while (g_variant_iter_loop(iter, "{sv}", &key, &value)) {
+#if defined (TIZEN_DEBUG_DBUS_VALUE)
CHECK_KEY_VALUE(key, value);
+#endif /* TIZEN_DEBUG_DBUS_VALUE */
}
g_variant_iter_free(iter);
}
const gchar *signal, GVariant *parameters, gpointer user_data)
{
int i = 0;
+#if defined (TIZEN_DEBUG_DBUS_VALUE)
DEBUG_SIGNAL(sender, object_path, interface, signal, parameters);
+#endif /* TIZEN_DEBUG_DBUS_VALUE */
for (i = 0; ws_p2pdevice_signal_map[i].member != NULL; i++) {
if (!g_strcmp0(signal, ws_p2pdevice_signal_map[i].member) &&
const gchar *sender, const gchar *object_path, const gchar *interface,
const gchar *signal, GVariant *parameters, gpointer user_data)
{
+#if defined (TIZEN_DEBUG_DBUS_VALUE)
DEBUG_SIGNAL(sender, object_path, interface, signal, parameters);
+#endif /* TIZEN_DEBUG_DBUS_VALUE */
if(!g_strcmp0(signal,"PeerJoined")){
SUPPLICANT_PATH, g_pd->g_dbus);
params.params = g_variant_new("(s)", iface_name);
- WDP_LOGE("param [%s]", g_variant_print(params.params,TRUE));
+#if defined (TIZEN_DEBUG_DBUS_VALUE)
+ WDP_LOGE("param [%s]", g_variant_print(params.params, TRUE));
+#endif /* TIZEN_DEBUG_DBUS_VALUE */
res = dbus_method_call(¶ms, SUPPLICANT_INTERFACE,
function, user_data);
g_variant_builder_unref (builder);
param = g_variant_new("(ssv)", SUPPLICANT_P2PDEVICE, "P2PDeviceConfig", value);
- WDP_LOGD("init param [%s]", g_variant_print(param,TRUE));
+#if defined (TIZEN_DEBUG_DBUS_VALUE)
+ WDP_LOGD("init param [%s]", g_variant_print(param, TRUE));
+#endif /* TIZEN_DEBUG_DBUS_VALUE */
params.params = param;
res = dbus_method_call(¶ms, DBUS_PROPERTIES_INTERFACE, NULL, NULL);
- g_variant_unref(value);
- g_variant_unref(param);
if (res < 0)
WDP_LOGE("Failed to send command to wpa_supplicant");
else
params.params = param;
res = dbus_method_call(¶ms, DBUS_PROPERTIES_INTERFACE, NULL, NULL);
- g_variant_unref(value);
- g_variant_unref(param);
if (res < 0)
WDP_LOGE("Failed to send command to wpa_supplicant");
else
}
params.params = value;
-
+#if defined (TIZEN_DEBUG_DBUS_VALUE)
WDP_LOGD("params [%s]", g_variant_print(value, TRUE));
+#endif /* TIZEN_DEBUG_DBUS_VALUE */
res = dbus_method_call(¶ms, SUPPLICANT_P2PDEVICE, NULL, NULL);
- g_variant_unref(value);
if (res < 0)
WDP_LOGE("Failed to send command to wpa_supplicant");
else
g_variant_builder_unref (builder);
params.params = value;
-
+#if defined (TIZEN_DEBUG_DBUS_VALUE)
WDP_LOGD("params [%s]", g_variant_print(value, TRUE));
+#endif /* TIZEN_DEBUG_DBUS_VALUE */
res = dbus_method_call(¶ms, SUPPLICANT_P2PDEVICE, NULL, NULL);
- g_variant_unref(value);
if (res < 0)
WDP_LOGE("Failed to send command to wpa_supplicant");
else
WDP_LOGD("get peer path [%s]", peer_path);
value = g_variant_new ("(os)", peer_path, __ws_wps_to_txt(wps_mode));
+#if defined (TIZEN_DEBUG_DBUS_VALUE)
WDP_LOGD("params [%s]", g_variant_print(value, TRUE));
+#endif /* TIZEN_DEBUG_DBUS_VALUE */
params.params = value;
res = dbus_method_call(¶ms, SUPPLICANT_P2PDEVICE, NULL, NULL);
- g_variant_unref(value);
if (res < 0)
WDP_LOGE("Failed to send command to wpa_supplicant");
else
value = g_variant_new ("(a{sv})", builder);
g_variant_builder_unref (builder);
-
- WDP_LOGE("params [%s]", g_variant_print(value, TRUE));
+#if defined (TIZEN_DEBUG_DBUS_VALUE)
+ WDP_LOGD("params [%s]", g_variant_print(value, TRUE));
+#endif /* TIZEN_DEBUG_DBUS_VALUE */
params.params = value;
res = dbus_method_call(¶ms, SUPPLICANT_P2PDEVICE, NULL, NULL);
- g_variant_unref(value);
if (res < 0)
WDP_LOGE("Failed to send command to wpa_supplicant");
else
WDP_LOGE("get peer path [%s]", peer_path);
value = g_variant_new ("(oi)", peer_path, 0);
- WDP_LOGE("params [%s]", g_variant_print(value, TRUE));
+#if defined (TIZEN_DEBUG_DBUS_VALUE)
+ WDP_LOGD("params [%s]", g_variant_print(value, TRUE));
+#endif /* TIZEN_DEBUG_DBUS_VALUE */
params.params = value;
res = dbus_method_call(¶ms, SUPPLICANT_P2PDEVICE, NULL, NULL);
- g_variant_unref(value);
if (res < 0)
WDP_LOGE("Failed to send command to wpa_supplicant");
else
WDP_LOGE("get peer path [%s]", peer_path);
value = g_variant_new ("(o)", peer_path);
- WDP_LOGE("params [%s]", g_variant_print(value, TRUE));
+#if defined (TIZEN_DEBUG_DBUS_VALUE)
+ WDP_LOGD("params [%s]", g_variant_print(value, TRUE));
+#endif /* TIZEN_DEBUG_DBUS_VALUE */
params.params = value;
res = dbus_method_call(¶ms, SUPPLICANT_P2PDEVICE, NULL, NULL);
- g_variant_unref(value);
if (res < 0)
WDP_LOGE("Failed to send command to wpa_supplicant");
else
value = g_variant_new ("(a{sv})", builder);
g_variant_builder_unref (builder);
-
+#if defined (TIZEN_DEBUG_DBUS_VALUE)
WDP_LOGD("params [%s]", g_variant_print(value, TRUE));
-
+#endif /* TIZEN_DEBUG_DBUS_VALUE */
params.params = value;
res = dbus_method_call(¶ms, SUPPLICANT_P2PDEVICE,
__store_group_iface_path, g_pd);
- g_variant_unref(value);
if (res < 0)
WDP_LOGE("Failed to send command to wpa_supplicant");
else
g_variant_builder_add (builder, "{sv}", "peer", g_variant_new_object_path(peer_path));
value = g_variant_new ("(a{sv})", builder);
g_variant_builder_unref (builder);
-
- WDP_LOGE("params [%s]", g_variant_print(value, TRUE));
-
+#if defined (TIZEN_DEBUG_DBUS_VALUE)
+ WDP_LOGD("params [%s]", g_variant_print(value, TRUE));
+#endif /* TIZEN_DEBUG_DBUS_VALUE */
params.params = value;
res = dbus_method_call(¶ms, SUPPLICANT_P2PDEVICE, NULL, NULL);
- g_variant_unref(value);
if (res < 0)
WDP_LOGE("Failed to send command to wpa_supplicant");
else
value = g_variant_new ("(a{sv})", builder);
g_variant_builder_unref (builder);
-
- WDP_LOGE("params [%s]", g_variant_print(value, TRUE));
-
+#if defined (TIZEN_DEBUG_DBUS_VALUE)
+ WDP_LOGD("params [%s]", g_variant_print(value, TRUE));
+#endif /* TIZEN_DEBUG_DBUS_VALUE */
params.params = value;
res = dbus_method_call(¶ms, SUPPLICANT_WPS, NULL, NULL);
- g_variant_unref(params.params);
-
- if (peer_addr != NULL)
- g_variant_unref(dev_addr);
if (res < 0)
WDP_LOGE("Failed to send command to wpa_supplicant");
else
param = g_variant_new("(ssv)", SUPPLICANT_P2PDEVICE,
"P2PDeviceConfig", value);
- WDP_LOGE("param [%s]", g_variant_print(param,TRUE));
+#if defined (TIZEN_DEBUG_DBUS_VALUE)
+ WDP_LOGD("params [%s]", g_variant_print(param, TRUE));
+#endif /* TIZEN_DEBUG_DBUS_VALUE */
params.params = param;
res = dbus_method_call(¶ms, DBUS_PROPERTIES_INTERFACE, NULL, NULL);
- g_variant_unref(value);
- g_variant_unref(param);
if (res < 0)
WDP_LOGE("Failed to send command to wpa_supplicant");
else
}
param = g_variant_new("(ss)", SUPPLICANT_P2PDEVICE, "P2PDeviceConfig");
- WDP_LOGE("param [%s]", g_variant_print(param,TRUE));
+#if defined (TIZEN_DEBUG_DBUS_VALUE)
+ WDP_LOGD("params [%s]", g_variant_print(param, TRUE));
+#endif /* TIZEN_DEBUG_DBUS_VALUE */
reply = g_dbus_connection_call_sync (
g_dbus,
SUPPLICANT_SERVICE, /* bus name */
- SUPPLICANT_INTERFACE, /* object path */
+ g_pd->iface_path, /* object path */
DBUS_PROPERTIES_INTERFACE, /* interface name */
DBUS_PROPERTIES_METHOD_GET, /* method name */
param, /* GVariant *params */
__WDP_LOG_FUNC_EXIT__;
return -1;
}
- g_variant_unref(param);
-
if(reply != NULL){
g_variant_get(reply, "(a{sv})", &iter);
GVariant *value = NULL;
while(g_variant_iter_loop(iter, "{sv}", &key, &value)) {
+#if defined (TIZEN_DEBUG_DBUS_VALUE)
CHECK_KEY_VALUE(key, value);
+#endif /* TIZEN_DEBUG_DBUS_VALUE */
if(g_strcmp0(key, "GOIntent") == 0)
g_variant_get(value, "u", go_intent);
}
g_variant_builder_unref (builder);
param = g_variant_new("(ssv)", SUPPLICANT_P2PDEVICE, "P2PDeviceConfig", value);
- WDP_LOGE("param [%s]", g_variant_print(param,TRUE));
+#if defined (TIZEN_DEBUG_DBUS_VALUE)
+ WDP_LOGD("param [%s]", g_variant_print(param, TRUE));
+#endif /* TIZEN_DEBUG_DBUS_VALUE */
params.params = param;
res = dbus_method_call(¶ms, DBUS_PROPERTIES_INTERFACE, NULL, NULL);
- g_variant_unref(value);
- g_variant_unref(param);
if (res < 0)
WDP_LOGE("Failed to send command to wpa_supplicant");
else
value = g_variant_new_string(ccode);
param = g_variant_new("(ssv)", SUPPLICANT_IFACE, "Country", value);
- WDP_LOGE("param [%s]", g_variant_print(param,TRUE));
+#if defined (TIZEN_DEBUG_DBUS_VALUE)
+ WDP_LOGD("param [%s]", g_variant_print(param, TRUE));
+#endif /* TIZEN_DEBUG_DBUS_VALUE */
params.params = param;
res = dbus_method_call(¶ms, DBUS_PROPERTIES_INTERFACE, NULL, NULL);
- g_variant_unref(value);
- g_variant_unref(param);
if (res < 0)
WDP_LOGE("Failed to send command to wpa_supplicant");
else
}
ws_network_info_s *network = (ws_network_info_s *)user_data;
-
+#if defined (TIZEN_DEBUG_DBUS_VALUE)
CHECK_KEY_VALUE(key, value);
-
+#endif /* TIZEN_DEBUG_DBUS_VALUE */
if (g_strcmp0(key, "ssid") == 0) {
const char *ssid = NULL;
g_variant_get(value, "s", &ssid);
{
__WDP_LOG_FUNC_ENTER__;
-
+#if defined (TIZEN_DEBUG_DBUS_VALUE)
CHECK_KEY_VALUE(key, value);
-
+#endif /* TIZEN_DEBUG_DBUS_VALUE */
if (g_strcmp0(key, "PersistentGroups") == 0) {
GVariantIter *iter = NULL;
const char *path = NULL;
params.params = param;
res = dbus_method_call(¶ms, DBUS_PROPERTIES_INTERFACE, NULL, NULL);
- g_variant_unref(value);
- g_variant_unref(param);
if (res < 0)
WDP_LOGE("Failed to send command to wpa_supplicant");
else
value = g_variant_new ("(a{sv})", builder);
g_variant_builder_unref (builder);
- WDP_LOGE("params [%s]", g_variant_print(value, TRUE));
+#if defined (TIZEN_DEBUG_DBUS_VALUE)
+ WDP_LOGD("params [%s]", g_variant_print(value, TRUE));
+#endif /* TIZEN_DEBUG_DBUS_VALUE */
params.params = value;
value = g_variant_new ("(a{sv})", builder);
g_variant_builder_unref (builder);
-
+#if defined (TIZEN_DEBUG_DBUS_VALUE)
WDP_LOGE("params [%s]", g_variant_print(value, TRUE));
+#endif /* TIZEN_DEBUG_DBUS_VALUE */
params.params = value;
value = g_variant_new ("(a{sv})", builder);
g_variant_builder_unref (builder);
-
- WDP_LOGE("params [%s]", g_variant_print(value, TRUE));
-
+#if defined (TIZEN_DEBUG_DBUS_VALUE)
+ WDP_LOGD("params [%s]", g_variant_print(value, TRUE));
+#endif /* TIZEN_DEBUG_DBUS_VALUE */
params.params = value;
res = dbus_method_call(¶ms, SUPPLICANT_P2PDEVICE, NULL, NULL);
g_variant_builder_unref (builder);
param = g_variant_new("(ssv)", SUPPLICANT_INTERFACE, "WFDIEs", value);
- WDP_LOGE("param [%s]", g_variant_print(param,TRUE));
-
+#if defined (TIZEN_DEBUG_DBUS_VALUE)
+ WDP_LOGD("param [%s]", g_variant_print(param,TRUE));
+#endif /* TIZEN_DEBUG_DBUS_VALUE */
params.params = param;
res = dbus_method_call(¶ms, DBUS_PROPERTIES_INTERFACE, NULL, NULL);
- g_variant_unref(value);
- g_variant_unref(param);
if (res < 0)
WDP_LOGE("Failed to send command to wpa_supplicant");
else
g_variant_builder_add(builder, "y", ies[i]);
value = g_variant_new ("ay", builder);
g_variant_builder_unref (builder);
-
+#if defined (TIZEN_DEBUG_DBUS_VALUE)
WDP_LOGD("value [%s]", g_variant_print(value,TRUE));
-
+#endif /* TIZEN_DEBUG_DBUS_VALUE */
param = g_variant_new("(ssv)", SUPPLICANT_INTERFACE, "WFDIEs", value);
WDP_LOGE("param [%s]", g_variant_print(param,TRUE));
params.params = param;
res = dbus_method_call(¶ms, DBUS_PROPERTIES_INTERFACE, NULL, NULL);
- g_variant_unref(value);
- g_variant_unref(param);
if (res < 0)
WDP_LOGE("Failed to send command to wpa_supplicant");
else
static int _wfd_event_update_peer(wfd_manager_s *manager, wfd_oem_dev_data_s *data)
{
__WDS_LOG_FUNC_ENTER__;
+
wfd_device_s *peer = NULL;
if (!manager || !data) {
return G_SOURCE_REMOVE;
}
-int wfd_process_event(void *user_data, void *data)
-{
- __WDS_LOG_FUNC_ENTER__;
- wfd_manager_s *manager = (wfd_manager_s*) user_data;
- wfd_oem_event_s *event = (wfd_oem_event_s*) data;
+ static void __wfd_process_deactivated(wfd_manager_s *manager, wfd_oem_event_s *event)
+ {
+ __WDS_LOG_FUNC_ENTER__;
+
+ wifi_direct_client_noti_s noti;
+
+ memset(¬i, 0x0, sizeof(wifi_direct_client_noti_s));
+ noti.event = WIFI_DIRECT_CLI_EVENT_DEACTIVATION;
+ noti.error = WIFI_DIRECT_ERROR_NONE;
+ wfd_client_send_event(manager, ¬i);
+
+ wfd_destroy_group(manager, GROUP_IFNAME);
+ wfd_destroy_session(manager);
+ wfd_peer_clear_all(manager);
+ wfd_local_reset_data(manager);
+
+ wfd_state_set(manager, WIFI_DIRECT_STATE_DEACTIVATED);
+ wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_DEACTIVATED);
+ manager->req_wps_mode = WFD_WPS_MODE_PBC;
+
+ __WDS_LOG_FUNC_EXIT__;
+ return;
+ }
+
+ static void __wfd_process_peer_found(wfd_manager_s *manager, wfd_oem_event_s *event)
+ {
+ __WDS_LOG_FUNC_ENTER__;
+
+ wfd_oem_dev_data_s *edata = NULL;
+ wifi_direct_client_noti_s noti;
int res = 0;
- if (!manager || !event) {
- WDS_LOGE("Invalid parameter");
- return -1;
+ edata = (wfd_oem_dev_data_s*) event->edata;
+ if (!edata || event->edata_type != WFD_OEM_EDATA_TYPE_DEVICE) {
+ WDS_LOGE("Invalid event data");
+ return;
}
- WDS_LOGD("Event[%d] from " MACSECSTR, event->event_id, MAC2SECSTR(event->dev_addr));
+ res = _wfd_event_update_peer(manager, edata);
+ if (res < 0) {
+ WDS_LOGE("Failed to update peer data");
+ return;
+ }
- switch (event->event_id) {
- case WFD_OEM_EVENT_DEACTIVATED:
- {
- // TODO: notify app
- wifi_direct_client_noti_s noti;
+ if (manager->state > WIFI_DIRECT_STATE_ACTIVATING &&
+ manager->state != WIFI_DIRECT_STATE_CONNECTING &&
+ manager->state != WIFI_DIRECT_STATE_DISCONNECTING) {
memset(¬i, 0x0, sizeof(wifi_direct_client_noti_s));
- noti.event = WIFI_DIRECT_CLI_EVENT_DEACTIVATION;
+ snprintf(noti.param1, MACSTR_LEN, MACSTR, MAC2STR(edata->p2p_dev_addr));
+ noti.event = WIFI_DIRECT_CLI_EVENT_DISCOVER_FOUND_PEERS;
noti.error = WIFI_DIRECT_ERROR_NONE;
wfd_client_send_event(manager, ¬i);
+ }
- // TODO: remove group, session, all peers
- wfd_destroy_group(manager, GROUP_IFNAME);
- wfd_destroy_session(manager);
- wfd_peer_clear_all(manager);
- wfd_local_reset_data(manager);
+ __WDS_LOG_FUNC_EXIT__;
+ return;
+ }
+
+ static void __wfd_process_peer_disappeared(wfd_manager_s *manager, wfd_oem_event_s *event)
+ {
+ __WDS_LOG_FUNC_ENTER__;
+
+ wifi_direct_client_noti_s noti;
+
+ wfd_remove_peer(manager, event->dev_addr);
+
+ memset(¬i, 0x0, sizeof(wifi_direct_client_noti_s));
+ noti.event = WIFI_DIRECT_CLI_EVENT_DISCOVER_FOUND_PEERS;
+ noti.error = WIFI_DIRECT_ERROR_NONE;
+ wfd_client_send_event(manager, ¬i);
- wfd_state_set(manager, WIFI_DIRECT_STATE_DEACTIVATED);
- wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_DEACTIVATED);
- manager->req_wps_mode = WFD_WPS_MODE_PBC;
+ __WDS_LOG_FUNC_EXIT__;
+ return;
+ }
+
+ static void __wfd_process_discovery_finished(wfd_manager_s *manager, wfd_oem_event_s *event)
+ {
+ __WDS_LOG_FUNC_ENTER__;
+
+ wifi_direct_client_noti_s noti;
+
+ if (manager->state != WIFI_DIRECT_STATE_DISCOVERING &&
+ manager->state != WIFI_DIRECT_STATE_ACTIVATED) {
+ WDS_LOGE("Notify finding stopped when discovering or activated. [%d]", manager->state);
+ return;
}
- break;
- case WFD_OEM_EVENT_PEER_FOUND:
- {
- wfd_oem_dev_data_s *edata = (wfd_oem_dev_data_s*) event->edata;
- if (!edata || event->edata_type != WFD_OEM_EDATA_TYPE_DEVICE) {
- WDS_LOGE("Invalid event data");
- break;
- }
- res = _wfd_event_update_peer(manager, edata);
- if (res < 0) {
- WDS_LOGE("Failed to update peer data");
- break;
- }
+ if (manager->scan_mode == WFD_SCAN_MODE_PASSIVE) {
+ WDS_LOGE("During passive scan, Discover Finished event will not notified");
+ return;
+ }
- if (manager->state > WIFI_DIRECT_STATE_ACTIVATING &&
- manager->state != WIFI_DIRECT_STATE_CONNECTING &&
- manager->state != WIFI_DIRECT_STATE_DISCONNECTING) {
- wifi_direct_client_noti_s noti;
- memset(¬i, 0x0, sizeof(wifi_direct_client_noti_s));
- snprintf(noti.param1, MACSTR_LEN, MACSTR, MAC2STR(edata->p2p_dev_addr));
- noti.event = WIFI_DIRECT_CLI_EVENT_DISCOVER_FOUND_PEERS;
- noti.error = WIFI_DIRECT_ERROR_NONE;
- wfd_client_send_event(manager, ¬i);
- }
+ if (manager->local->dev_role == WFD_DEV_ROLE_GO) {
+ wfd_state_set(manager, WIFI_DIRECT_STATE_GROUP_OWNER);
+ wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_GROUP_OWNER);
+ } else {
+ wfd_state_set(manager, WIFI_DIRECT_STATE_ACTIVATED);
+ wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_ACTIVATED);
}
- break;
- case WFD_OEM_EVENT_PROV_DISC_REQ:
- case WFD_OEM_EVENT_PROV_DISC_RESP:
- {
- wfd_device_s *peer = NULL;
+ manager->scan_mode = WFD_SCAN_MODE_NONE;
+
+ memset(¬i, 0x0, sizeof(wifi_direct_client_noti_s));
+ noti.event = WIFI_DIRECT_CLI_EVENT_DISCOVER_END;
+ noti.error = WIFI_DIRECT_ERROR_NONE;
+ wfd_client_send_event(manager, ¬i);
+
+ __WDS_LOG_FUNC_EXIT__;
+ return;
+ }
+
+ static void __wfd_process_prov_disc_req(wfd_manager_s *manager, wfd_oem_event_s *event)
+ {
+ __WDS_LOG_FUNC_ENTER__;
+
+ wfd_device_s *peer = NULL;
+ int res = 0;
+
#ifdef CTRL_IFACE_DBUS
- wfd_oem_dev_data_s *edata = (wfd_oem_dev_data_s*) event->edata;
- if (!edata || event->edata_type != WFD_OEM_EDATA_TYPE_DEVICE) {
- WDS_LOGE("Invalid event data");
- break;
- }
+ wfd_oem_dev_data_s *edata = NULL;
- res = _wfd_event_update_peer(manager, edata);
- peer = wfd_peer_find_by_dev_addr(manager, event->dev_addr);
- if (peer)
- peer->state = WFD_PEER_STATE_CONNECTING;
+ edata = (wfd_oem_dev_data_s*) event->edata;
+ if (!edata || event->edata_type != WFD_OEM_EDATA_TYPE_DEVICE) {
+ WDS_LOGE("Invalid event data");
+ return;
+ }
+
+ res = _wfd_event_update_peer(manager, edata);
+ peer = wfd_peer_find_by_dev_addr(manager, event->dev_addr);
+ if (peer)
+ peer->state = WFD_PEER_STATE_CONNECTING;
#else /* CTRL_IFACE_DBUS */
- peer = wfd_peer_find_by_dev_addr(manager, event->dev_addr);
+ peer = wfd_peer_find_by_dev_addr(manager, event->dev_addr);
+ if (!peer) {
+ WDS_LOGD("Prov_disc from unknown peer. Add new peer");
+ peer = wfd_add_peer(manager, event->dev_addr, "DIRECT-");
if (!peer) {
- WDS_LOGD("Porv_disc from unknown peer. Add new peer");
- peer = wfd_add_peer(manager, event->dev_addr, "DIRECT-");
- if (!peer) {
- WDS_LOGE("Failed to add peer for invitation");
- return -1;
- }
- peer->state = WFD_PEER_STATE_CONNECTING;
- wfd_update_peer(manager, peer);
+ WDS_LOGE("Failed to add peer for invitation");
+ return;
}
- wfd_update_peer_time(manager, event->dev_addr);
+ peer->state = WFD_PEER_STATE_CONNECTING;
+ wfd_update_peer(manager, peer);
+ }
+ wfd_update_peer_time(manager, event->dev_addr);
#endif /* CTRL_IFACE_DBUS */
- res = wfd_session_process_event(manager, event);
- if (res < 0) {
- WDS_LOGE("Failed to process event of session");
- break;
+
+ res = wfd_session_process_event(manager, event);
+ if (res < 0)
+ WDS_LOGE("Failed to process event of session");
+
+ __WDS_LOG_FUNC_EXIT__;
+ return;
+ }
+
+ static void __wfd_process_prov_disc_resp(wfd_manager_s *manager, wfd_oem_event_s *event)
+ {
+ __WDS_LOG_FUNC_ENTER__;
+
+ wfd_device_s *peer = NULL;
+ int res = 0;
+
+#ifdef CTRL_IFACE_DBUS
+ wfd_oem_dev_data_s *edata = NULL;
+
+ edata = (wfd_oem_dev_data_s*) event->edata;
+ if (!edata || event->edata_type != WFD_OEM_EDATA_TYPE_DEVICE) {
+ WDS_LOGE("Invalid event data");
+ return;
+ }
+
+ res = _wfd_event_update_peer(manager, edata);
+ peer = wfd_peer_find_by_dev_addr(manager, event->dev_addr);
+ if (peer)
+ peer->state = WFD_PEER_STATE_CONNECTING;
+#else /* CTRL_IFACE_DBUS */
+ peer = wfd_peer_find_by_dev_addr(manager, event->dev_addr);
+ if (!peer) {
+ WDS_LOGD("Prov_disc from unknown peer. Add new peer");
+ peer = wfd_add_peer(manager, event->dev_addr, "DIRECT-");
+ if (!peer) {
+ WDS_LOGE("Failed to add peer for invitation");
+ return;
}
+ peer->state = WFD_PEER_STATE_CONNECTING;
+ wfd_update_peer(manager, peer);
}
- break;
- case WFD_OEM_EVENT_PEER_DISAPPEARED:
- {
- wfd_remove_peer(manager, event->dev_addr);
- wifi_direct_client_noti_s noti;
- memset(¬i, 0x0, sizeof(wifi_direct_client_noti_s));
- noti.event = WIFI_DIRECT_CLI_EVENT_DISCOVER_FOUND_PEERS;
- noti.error = WIFI_DIRECT_ERROR_NONE;
- wfd_client_send_event(manager, ¬i);
+ wfd_update_peer_time(manager, event->dev_addr);
+#endif /* CTRL_IFACE_DBUS */
+
+ res = wfd_session_process_event(manager, event);
+ if (res < 0)
+ WDS_LOGE("Failed to process event of session");
+
+ __WDS_LOG_FUNC_EXIT__;
+ return;
+ }
+
+ static void __wfd_process_prov_disc_fail(wfd_manager_s *manager, wfd_oem_event_s *event)
+ {
+ __WDS_LOG_FUNC_ENTER__;
+
+ wfd_session_s *session = NULL;
+ wifi_direct_client_noti_s noti;
+ unsigned char *peer_addr = NULL;
+
+ session = (wfd_session_s*) manager->session;
+ if (!session) {
+ WDS_LOGE("Unexpected event. Session not exist");
+ return;
}
- break;
- case WFD_OEM_EVENT_DISCOVERY_FINISHED:
- {
- if (manager->state != WIFI_DIRECT_STATE_DISCOVERING &&
- manager->state != WIFI_DIRECT_STATE_ACTIVATED) {
- WDS_LOGE("Notify finding stoped when discovering or activated. [%d]", manager->state);
- break;
- }
- if (manager->scan_mode == WFD_SCAN_MODE_PASSIVE) {
- WDS_LOGE("During passive scan, Discover Finished event will not notified");
- break;
- }
+ peer_addr = wfd_session_get_peer_addr(session);
+ if (!peer_addr) {
+ WDS_LOGE("Session do not have peer");
+ return;
+ }
+
+ memset(¬i, 0x0, sizeof(wifi_direct_client_noti_s));
+ noti.event = WIFI_DIRECT_CLI_EVENT_CONNECTION_RSP;
+ noti.error = WIFI_DIRECT_ERROR_CONNECTION_FAILED;
+ snprintf(noti.param1, MACSTR_LEN, MACSTR, MAC2STR(peer_addr));
+ wfd_client_send_event(manager, ¬i);
+
+ if (manager->local->dev_role == WFD_DEV_ROLE_GO) {
+ wfd_group_s *group = (wfd_group_s*) manager->group;
+ if (group && !group->member_count && (wfd_group_is_autonomous(group) == FALSE)) {
+ wfd_destroy_group(manager, GROUP_IFNAME);
- if (manager->local->dev_role == WFD_DEV_ROLE_GO) {
- wfd_state_set(manager, WIFI_DIRECT_STATE_GROUP_OWNER);
- wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_GROUP_OWNER);
- } else {
wfd_state_set(manager, WIFI_DIRECT_STATE_ACTIVATED);
wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_ACTIVATED);
+ } else {
+ wfd_state_set(manager, WIFI_DIRECT_STATE_GROUP_OWNER);
+ wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_GROUP_OWNER);
}
- manager->scan_mode = WFD_SCAN_MODE_NONE;
+ } else {
+ wfd_state_set(manager, WIFI_DIRECT_STATE_ACTIVATED);
+ wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_ACTIVATED);
+ }
- wifi_direct_client_noti_s noti;
- memset(¬i, 0x0, sizeof(wifi_direct_client_noti_s));
- noti.event = WIFI_DIRECT_CLI_EVENT_DISCOVER_END;
- noti.error = WIFI_DIRECT_ERROR_NONE;
- wfd_client_send_event(manager, ¬i);
+ wfd_destroy_session(manager);
+
+ wfd_oem_refresh(manager->oem_ops);
+#if 0
+ /* After connection failed, scan again */
+ wfd_oem_scan_param_s param;
+ memset(¶m, 0x0, sizeof(wfd_oem_scan_param_s));
+ param.scan_mode = WFD_OEM_SCAN_MODE_ACTIVE;
+ param.scan_time = 2;
+ param.scan_type = WFD_OEM_SCAN_TYPE_SOCIAL;
+ wfd_oem_start_scan(manager->oem_ops, ¶m);
+ manager->scan_mode = WFD_SCAN_MODE_ACTIVE;
+#endif
+ __WDS_LOG_FUNC_EXIT__;
+ return;
+ }
+
+ static void __wfd_process_go_neg_req(wfd_manager_s *manager, wfd_oem_event_s *event)
+ {
+ __WDS_LOG_FUNC_ENTER__;
+
+ wfd_session_s *session = NULL;
+ wifi_direct_client_noti_s noti;
+
+#ifdef CTRL_IFACE_DBUS
+ wfd_oem_dev_data_s *edata = NULL;
+
+ edata = (wfd_oem_dev_data_s*) event->edata;
+ if (!edata || event->edata_type != WFD_OEM_EDATA_TYPE_DEVICE) {
+ WDS_LOGE("Invalid event data");
+ return;
+ }
+
+ if (_wfd_event_update_peer(manager, edata) < 0) {
+ WDS_LOGE("Failed to update peer data");
+ return;
+ }
+#else /* CTRL_IFACE_DBUS */
+ wfd_oem_conn_data_s *edata = NULL;
+ wfd_device_s *peer = NULL;
+
+ edata = (wfd_oem_conn_data_s*) event->edata;
+ if (!edata || event->edata_type != WFD_OEM_EDATA_TYPE_CONN) {
+ WDS_LOGE("Invalid connection event data");
+ return;
}
- break;
- case WFD_OEM_EVENT_INVITATION_REQ:
- {
- wfd_device_s *peer = NULL;
- wfd_session_s *session = NULL;
- wfd_oem_invite_data_s *edata = (wfd_oem_invite_data_s*) event->edata;
- peer = wfd_peer_find_by_dev_addr(manager, event->dev_addr);
+ peer = wfd_peer_find_by_dev_addr(manager, event->dev_addr);
+ if (!peer) {
+ WDS_LOGD("Invitation from unknown peer. Add new peer");
+ peer = wfd_add_peer(manager, event->dev_addr, "DIRECT-");
if (!peer) {
- WDS_LOGD("Invitation from unknown peer. Add new peer");
- peer = wfd_add_peer(manager, event->dev_addr, "DIRECT-");
- if (!peer) {
- WDS_LOGE("Failed to add peer for invitation");
- return -1;
- }
+ WDS_LOGE("Failed to add peer for invitation");
+ return;
}
- peer->dev_role = WFD_DEV_ROLE_GO;
- memcpy(peer->intf_addr, edata->bssid, MACADDR_LEN);
- wfd_update_peer_time(manager, event->dev_addr);
+ }
+
+ if (edata->wps_mode == 0)
+ edata->wps_mode = 1;
+#endif /* CTRL_IFACE_DBUS */
+ session = (wfd_session_s*) manager->session;
+ if (!session) {
session = wfd_create_session(manager, event->dev_addr,
- manager->req_wps_mode, SESSION_DIRECTION_INCOMING);
+#ifdef CTRL_IFACE_DBUS
+ event->wps_mode, SESSION_DIRECTION_INCOMING);
+#else /* CTRL_IFACE_DBUS */
+ edata->wps_mode, SESSION_DIRECTION_INCOMING);
+#endif /* CTRL_IFACE_DBUS */
if (!session) {
WDS_LOGE("Failed to create session");
- return -1;
+ return;
}
- session->type = SESSION_TYPE_INVITE;
+ session->type = SESSION_TYPE_NORMAL;
+ session->state = SESSION_STATE_GO_NEG;
wfd_session_timer(session, 1);
-
wfd_state_set(manager, WIFI_DIRECT_STATE_CONNECTING);
- res = wfd_session_start(session);
- if (res < 0) {
- WDS_LOGE("Failed to start session");
- return -1;
- }
-
- wifi_direct_client_noti_s noti;
memset(¬i, 0x0, sizeof(wifi_direct_client_noti_s));
noti.event = WIFI_DIRECT_CLI_EVENT_CONNECTION_REQ;
noti.error = WIFI_DIRECT_ERROR_NONE;
- snprintf(noti.param1, sizeof(noti.param1), MACSTR, MAC2STR(event->dev_addr));
+ g_snprintf(noti.param1, sizeof(noti.param1), MACSTR, MAC2STR(event->dev_addr));
wfd_client_send_event(manager, ¬i);
+ } else {
+ wfd_session_process_event(manager, event);
}
- break;
- case WFD_OEM_EVENT_GO_NEG_REQ:
- {
- wfd_session_s *session = (wfd_session_s*) manager->session;
-#ifdef CTRL_IFACE_DBUS
- wfd_oem_dev_data_s *edata = (wfd_oem_dev_data_s*) event->edata;
- if (!edata || event->edata_type != WFD_OEM_EDATA_TYPE_DEVICE) {
- WDS_LOGE("Invalid event data");
- break;
- }
+ __WDS_LOG_FUNC_EXIT__;
+ return;
+ }
- res = _wfd_event_update_peer(manager, edata);
- if (res < 0) {
- WDS_LOGE("Failed to update peer data");
- break;
- }
-#else /* CTRL_IFACE_DBUS */
- wfd_device_s *peer = NULL;
- wfd_oem_conn_data_s *edata = (wfd_oem_conn_data_s*) event->edata;
+ static void __wfd_process_go_neg_fail(wfd_manager_s *manager, wfd_oem_event_s *event)
+ {
+ __WDS_LOG_FUNC_ENTER__;
- if (!edata || event->edata_type != WFD_OEM_EDATA_TYPE_CONN) {
- WDS_LOGE("Invalid connection event data");
- break;
- }
+ wfd_session_s *session = NULL;
+ wfd_oem_conn_data_s *edata = NULL;
+ wifi_direct_client_noti_s noti;
+ unsigned char *peer_addr = NULL;
- peer = wfd_peer_find_by_dev_addr(manager, event->dev_addr);
- if (!peer) {
- WDS_LOGD("Invitation from unknown peer. Add new peer");
- peer = wfd_add_peer(manager, event->dev_addr, "DIRECT-");
- if (!peer) {
- WDS_LOGE("Failed to add peer for invitation");
- break;
- }
+ session = (wfd_session_s*) manager->session;
+ if (!session) {
+ WDS_LOGE("Unexpected event. Session not exist");
+ return;
+ }
+
+ peer_addr = wfd_session_get_peer_addr(session);
+ if (!peer_addr) {
+ WDS_LOGE("Session do not have peer");
+ return;
+ }
+
+ edata = (wfd_oem_conn_data_s*) event->edata;
+ if (edata && edata->status < 0 && session->connecting_120) {
+ if (session->retry_gsrc) {
+ g_source_remove(session->retry_gsrc);
+ session->retry_gsrc = 0;
}
+ session->retry_gsrc = g_idle_add((GSourceFunc) _wfd_connection_retry, session);
+ WDS_LOGD("Connection will be retried");
+ return;
+ }
+
+ memset(¬i, 0x0, sizeof(wifi_direct_client_noti_s));
+ noti.event = WIFI_DIRECT_CLI_EVENT_CONNECTION_RSP;
+ noti.error = WIFI_DIRECT_ERROR_CONNECTION_FAILED;
+ snprintf(noti.param1, MACSTR_LEN, MACSTR, MAC2STR(peer_addr));
+ wfd_client_send_event(manager, ¬i);
+
+ wfd_state_set(manager, WIFI_DIRECT_STATE_ACTIVATED);
+ wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_ACTIVATED);
+
+ wfd_destroy_group(manager, GROUP_IFNAME);
+ wfd_destroy_session(manager);
+ manager->local->dev_role = WFD_DEV_ROLE_NONE;
+
+ __WDS_LOG_FUNC_EXIT__;
+ return;
+ }
+
+ static void __wfd_process_go_neg_done(wfd_manager_s *manager, wfd_oem_event_s *event)
+ {
+ __WDS_LOG_FUNC_ENTER__;
- if (edata->wps_mode == 0)
- edata->wps_mode = 1;
-#endif /* CTRL_IFACE_DBUS */
- if (!session) {
- session = wfd_create_session(manager, event->dev_addr,
#ifdef CTRL_IFACE_DBUS
- event->wps_mode, SESSION_DIRECTION_INCOMING);
-#else /* CTRL_IFACE_DBUS */
- edata->wps_mode, SESSION_DIRECTION_INCOMING);
+ wfd_session_s *session = NULL;
+ wfd_oem_conn_data_s *edata = NULL;
+ wfd_device_s *peer = NULL;
+
+ edata = (wfd_oem_conn_data_s*) event->edata;
+ if (event == NULL || edata == NULL) {
+ WDS_LOGE("Invalid event data");
+ return;
+ }
+
+ session = (wfd_session_s*) manager->session;
+ if(session && session->peer) {
+ peer = session->peer;
+ memcpy(peer->intf_addr, edata->peer_intf_addr, MACADDR_LEN);
+ }
+ manager->local->dev_role = event->dev_role;
+ wfd_session_process_event(manager, event);
#endif /* CTRL_IFACE_DBUS */
- if (!session) {
- WDS_LOGE("Failed to create session");
- return -1;
- }
- session->type = SESSION_TYPE_NORMAL;
- session->state = SESSION_STATE_GO_NEG;
- wfd_session_timer(session, 1);
- wfd_state_set(manager, WIFI_DIRECT_STATE_CONNECTING);
+ __WDS_LOG_FUNC_EXIT__;
+ return;
+ }
- wifi_direct_client_noti_s noti;
- memset(¬i, 0x0, sizeof(wifi_direct_client_noti_s));
- noti.event = WIFI_DIRECT_CLI_EVENT_CONNECTION_REQ;
- noti.error = WIFI_DIRECT_ERROR_NONE;
- g_snprintf(noti.param1, sizeof(noti.param1), MACSTR, MAC2STR(event->dev_addr));
- wfd_client_send_event(manager, ¬i);
+ static void __wfd_process_wps_fail(wfd_manager_s *manager, wfd_oem_event_s *event)
+ {
+ __WDS_LOG_FUNC_ENTER__;
+
+ wfd_session_s *session = NULL;
+ wifi_direct_client_noti_s noti;
+ unsigned char *peer_addr = NULL;
+
+ session = (wfd_session_s*) manager->session;
+ if (!session) {
+ WDS_LOGE("Unexpected event. Session not exist");
+ return;
+ }
+
+ peer_addr = wfd_session_get_peer_addr(session);
+ if (!peer_addr) {
+ WDS_LOGE("Session do not have peer");
+ return;
+ }
+
+ memset(¬i, 0x0, sizeof(wifi_direct_client_noti_s));
+ noti.event = WIFI_DIRECT_CLI_EVENT_CONNECTION_RSP;
+ noti.error = WIFI_DIRECT_ERROR_CONNECTION_FAILED;
+ snprintf(noti.param1, MACSTR_LEN, MACSTR, MAC2STR(peer_addr));
+ wfd_client_send_event(manager, ¬i);
+
+ if (manager->local->dev_role == WFD_DEV_ROLE_GO) {
+ wfd_group_s *group = (wfd_group_s*) manager->group;
+ if (group && !group->member_count && (wfd_group_is_autonomous(group) == FALSE)) {
+ wfd_destroy_group(manager, GROUP_IFNAME);
+
+ wfd_state_set(manager, WIFI_DIRECT_STATE_ACTIVATED);
+ wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_ACTIVATED);
} else {
- wfd_session_process_event(manager, event);
+ wfd_state_set(manager, WIFI_DIRECT_STATE_GROUP_OWNER);
+ wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_GROUP_OWNER);
}
+ } else {
+ wfd_state_set(manager, WIFI_DIRECT_STATE_ACTIVATED);
+ wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_ACTIVATED);
}
- break;
- case WFD_OEM_EVENT_GO_NEG_DONE:
-#ifdef CTRL_IFACE_DBUS
- {
- wfd_session_s *session = (wfd_session_s*) manager->session;
- wfd_oem_conn_data_s *edata = (wfd_oem_conn_data_s*) event->edata;
- wfd_device_s *peer = NULL;
- if (event == NULL || edata == NULL) {
- WDS_LOGE("Invalid event data");
- break;
- }
+ wfd_destroy_session(manager);
- if(session && session->peer) {
- peer = session->peer;
- memcpy(peer->intf_addr, edata->peer_intf_addr, MACADDR_LEN);
- }
- manager->local->dev_role = event->dev_role;
- wfd_session_process_event(manager, event);
+ wfd_oem_refresh(manager->oem_ops);
+#if 0
+ /* After connection failed, scan again */
+ wfd_oem_scan_param_s param;
+ memset(¶m, 0x0, sizeof(wfd_oem_scan_param_s));
+ param.scan_mode = WFD_OEM_SCAN_MODE_ACTIVE;
+ param.scan_time = 2;
+ param.scan_type = WFD_OEM_SCAN_TYPE_SOCIAL;
+ wfd_oem_start_scan(manager->oem_ops, ¶m);
+ manager->scan_mode = WFD_SCAN_MODE_ACTIVE;
+#endif
+ __WDS_LOG_FUNC_EXIT__;
+ return;
+ }
+
+ static void __wfd_process_wps_done(wfd_manager_s *manager, wfd_oem_event_s *event)
+ {
+ __WDS_LOG_FUNC_ENTER__;
+
+ wfd_session_process_event(manager, event);
+
+ __WDS_LOG_FUNC_EXIT__;
+ return;
+ }
+
+ static void __wfd_process_key_neg_fail(wfd_manager_s *manager, wfd_oem_event_s *event)
+ {
+ __WDS_LOG_FUNC_ENTER__;
+
+ wfd_session_s *session = NULL;
+ wifi_direct_client_noti_s noti;
+ unsigned char *peer_addr = NULL;
+
+ session = (wfd_session_s*) manager->session;
+ if (!session) {
+ WDS_LOGE("Unexpected event. Session not exist");
+ return;
}
- break;
-#endif /* CTRL_IFACE_DBUS */
- case WFD_OEM_EVENT_WPS_DONE:
- wfd_session_process_event(manager, event);
- break;
- case WFD_OEM_EVENT_CONNECTED:
- case WFD_OEM_EVENT_STA_CONNECTED:
- {
- // FIXME: Move this code to plugin
- if (!memcmp(event->intf_addr, manager->local->intf_addr, MACADDR_LEN)) {
- WDS_LOGD("Ignore this event");
- break;
- }
- wfd_session_s *session = (wfd_session_s*) manager->session;
- if (!session) {
- WDS_LOGD("Unexpected event. Session is NULL [peer: " MACSECSTR "]",
- MAC2SECSTR(event->dev_addr));
- wfd_oem_destroy_group(manager->oem_ops, GROUP_IFNAME);
+ peer_addr = wfd_session_get_peer_addr(session);
+ if (!peer_addr) {
+ WDS_LOGE("Session do not has peer");
+ return;
+ }
+
+ memset(¬i, 0x0, sizeof(wifi_direct_client_noti_s));
+ noti.event = WIFI_DIRECT_CLI_EVENT_CONNECTION_RSP;
+ noti.error = WIFI_DIRECT_ERROR_CONNECTION_FAILED;
+ snprintf(noti.param1, MACSTR_LEN, MACSTR, MAC2STR(peer_addr));
+ wfd_client_send_event(manager, ¬i);
+
+ if (manager->local->dev_role == WFD_DEV_ROLE_GO) {
+ wfd_group_s *group = (wfd_group_s*) manager->group;
+ if (group && !group->member_count && (wfd_group_is_autonomous(group) == FALSE)) {
wfd_destroy_group(manager, GROUP_IFNAME);
+
wfd_state_set(manager, WIFI_DIRECT_STATE_ACTIVATED);
wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_ACTIVATED);
- break;
+ } else {
+ wfd_state_set(manager, WIFI_DIRECT_STATE_GROUP_OWNER);
+ wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_GROUP_OWNER);
}
+ } else {
+ wfd_state_set(manager, WIFI_DIRECT_STATE_ACTIVATED);
+ wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_ACTIVATED);
+ }
- wfd_device_s *peer = wfd_session_get_peer(session);
- if (!peer) {
- WDS_LOGE("Peer not found");
- break;
+ wfd_destroy_session(manager);
+
+ wfd_oem_refresh(manager->oem_ops);
+#if 0
+ /* After connection failed, scan again */
+ wfd_oem_scan_param_s param;
+ memset(¶m, 0x0, sizeof(wfd_oem_scan_param_s));
+ param.scan_mode = WFD_OEM_SCAN_MODE_ACTIVE;
+ param.scan_time = 2;
+ param.scan_type = WFD_OEM_SCAN_TYPE_SOCIAL;
+ wfd_oem_start_scan(manager->oem_ops, ¶m);
+ manager->scan_mode = WFD_SCAN_MODE_ACTIVE;
+#endif
+ __WDS_LOG_FUNC_EXIT__;
+ return;
+ }
+
+ static void __wfd_process_key_neg_done(wfd_manager_s *manager, wfd_oem_event_s *event)
+ {
+ __WDS_LOG_FUNC_ENTER__;
+
+ __WDS_LOG_FUNC_EXIT__;
+ return;
+ }
+
+ static void __wfd_process_conn_fail(wfd_manager_s *manager, wfd_oem_event_s *event)
+ {
+ __WDS_LOG_FUNC_ENTER__;
+
+ __WDS_LOG_FUNC_EXIT__;
+ return;
+ }
+
+ static void __wfd_process_conn_done(wfd_manager_s *manager, wfd_oem_event_s *event)
+ {
+ __WDS_LOG_FUNC_ENTER__;
+
+ __WDS_LOG_FUNC_EXIT__;
+ return;
+ }
+
+ static void __wfd_process_group_created(wfd_manager_s *manager, wfd_oem_event_s *event)
+ {
+ __WDS_LOG_FUNC_ENTER__;
+
+ wfd_group_s *group = NULL;
+ wfd_session_s *session = NULL;
+ wifi_direct_client_noti_s noti;
+
+ group = (wfd_group_s*) manager->group;
+ session = (wfd_session_s*)manager->session;
+#ifdef CTRL_IFACE_DBUS
+ if(event->dev_role == WFD_DEV_ROLE_GC && !group) {
+
+ group = wfd_create_pending_group(manager, event->intf_addr);
+ if (!group) {
+ WDS_LOGE("Failed to create pending group");
+ return;
+ }
+ manager->group = group;
+ }
+#endif /* CTRL_IFACE_DBUS */
+ if (!group) {
+ if (!session) {
+ WDS_LOGE("Unexpected Event. Group should be removed(Client)");
+ wfd_oem_destroy_group(manager->oem_ops, event->ifname);
+ return;
}
- wfd_group_s *group = (wfd_group_s*) manager->group;
+ group = wfd_create_group(manager, event);
if (!group) {
- group = wfd_create_pending_group(manager, event->intf_addr);
- if (!group) {
- WDS_LOGE("Failed to create pending group");
- break;
- }
- manager->group = group;
+ WDS_LOGE("Failed to create group");
+ return;
+ }
+ } else {
+ if (!session && !(group->flags & WFD_GROUP_FLAG_AUTONOMOUS)) {
+ WDS_LOGE("Unexpected Event. Group should be removed(Owner)");
+ wfd_oem_destroy_group(manager->oem_ops, group->ifname);
+ return;
}
- wfd_group_add_member(group, peer->dev_addr);
- session->state = SESSION_STATE_COMPLETED;
-#ifndef CTRL_IFACE_DBUS
- memcpy(peer->intf_addr, event->intf_addr, MACADDR_LEN);
-#endif /* CTRL_IFACE_DBUS */
- peer->state = WFD_PEER_STATE_CONNECTED;
+ if (group->pending) {
+ wfd_group_complete(manager, event);
+ } else {
+ WDS_LOGE("Unexpected event. Group already exist");
+ return;
+ }
+ }
- if (event->event_id == WFD_OEM_EVENT_STA_CONNECTED) { // GO
+ memset(¬i, 0x0, sizeof(wifi_direct_client_noti_s));
+ if (group->role == WFD_DEV_ROLE_GC && session) {
+#ifdef CTRL_IFACE_DBUS
+ if(session->peer && session->peer->ip_type == WFD_IP_TYPE_OVER_EAPOL)
+ wfd_util_ip_over_eap_assign(session->peer, event->ifname);
+#else /* CTRL_IFACE_DBUS */
+ wfd_destroy_session(manager);
+#endif /* CTRL_IFACE_DBUS */
+ wfd_peer_clear_all(manager);
+ } else {
+ if (group->flags & WFD_GROUP_FLAG_AUTONOMOUS) {
+ noti.event = WIFI_DIRECT_CLI_EVENT_GROUP_CREATE_RSP;
+ wfd_client_send_event(manager, ¬i);
wfd_state_set(manager, WIFI_DIRECT_STATE_GROUP_OWNER);
wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_GROUP_OWNER);
+ }
+ }
- wifi_direct_client_noti_s noti;
- memset(¬i, 0x0, sizeof(wifi_direct_client_noti_s));
- noti.event = WIFI_DIRECT_CLI_EVENT_CONNECTION_RSP;
- noti.error = WIFI_DIRECT_ERROR_NONE;
- snprintf(noti.param1, MACSTR_LEN, MACSTR, MAC2STR(peer->dev_addr));
- wfd_client_send_event(manager, ¬i);
-#ifdef CTRL_IFACE_DBUS
- wfd_update_peer(manager, peer);
- if (event->ip_addr_peer[3]) {
- peer->ip_type = WFD_IP_TYPE_OVER_EAPOL;
- memcpy(peer->client_ip_addr, event->ip_addr_peer, IPADDR_LEN);
- WDS_LOGE("Peer's client IP [" IPSTR "]", IP2STR((char*) &peer->client_ip_addr));
- memcpy(peer->go_ip_addr, manager->local->ip_addr, IPADDR_LEN);
- WDS_LOGE("Peer's GO IP [" IPSTR "]", IP2STR((char*) &peer->go_ip_addr));
- }
- if(peer->ip_type == WFD_IP_TYPE_OVER_EAPOL)
- wfd_util_ip_over_eap_lease(peer);
- else
-#endif /* CTRL_IFACE_DBUS */
- wfd_util_dhcps_wait_ip_leased(peer);
- wfd_destroy_session(manager);
+ __WDS_LOG_FUNC_EXIT__;
+ return;
+ }
+
+ static void __wfd_process_group_destroyed(wfd_manager_s *manager, wfd_oem_event_s *event)
+ {
+ __WDS_LOG_FUNC_ENTER__;
+
+ wifi_direct_client_noti_s noti;
+
+ memset(¬i, 0x0, sizeof(wifi_direct_client_noti_s));
+ if (manager->state == WIFI_DIRECT_STATE_DISCONNECTING) {
+ noti.event = WIFI_DIRECT_CLI_EVENT_DISCONNECTION_RSP;
+ noti.error = WIFI_DIRECT_ERROR_NONE;
+ } else if (manager->state == WIFI_DIRECT_STATE_CONNECTING && manager->session){
+ noti.event = WIFI_DIRECT_CLI_EVENT_CONNECTION_RSP;
+ noti.error = WIFI_DIRECT_ERROR_CONNECTION_FAILED;
+ unsigned char *peer_addr = wfd_session_get_peer_addr(manager->session);
+ if(peer_addr != NULL)
+ g_snprintf(noti.param1, MACSTR_LEN, MACSTR, MAC2STR(peer_addr));
+ } else if (manager->state >= WIFI_DIRECT_STATE_CONNECTED) {
+ noti.event = WIFI_DIRECT_CLI_EVENT_GROUP_DESTROY_RSP;
+ noti.error = WIFI_DIRECT_ERROR_NONE;
+ } else {
+ WDS_LOGD("Unexpected event(GROUP_DESTROYED). Ignore it");
+ return;
+ }
+ wfd_client_send_event(manager, ¬i);
+
+ wfd_state_set(manager, WIFI_DIRECT_STATE_ACTIVATED);
+ wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_ACTIVATED);
+ wfd_destroy_group(manager, event->ifname);
+ wfd_destroy_session(manager);
+ manager->local->dev_role = WFD_DEV_ROLE_NONE;
+
+ __WDS_LOG_FUNC_EXIT__;
+ return;
+ }
+
+ static void __wfd_process_invitation_req(wfd_manager_s *manager, wfd_oem_event_s *event)
+ {
+ __WDS_LOG_FUNC_ENTER__;
+
+ wfd_device_s *peer = NULL;
+ wfd_session_s *session = NULL;
+ wfd_oem_invite_data_s *edata = NULL;
+ wifi_direct_client_noti_s noti;
+ int res = 0;
+
+ peer = wfd_peer_find_by_dev_addr(manager, event->dev_addr);
+ if (!peer) {
+ WDS_LOGD("Invitation from unknown peer. Add new peer");
+ peer = wfd_add_peer(manager, event->dev_addr, "DIRECT-");
+ if (!peer) {
+ WDS_LOGE("Failed to add peer for invitation");
+ return;
}
}
- break;
- case WFD_OEM_EVENT_DISCONNECTED:
- case WFD_OEM_EVENT_STA_DISCONNECTED:
- {
- wfd_group_s *group = (wfd_group_s*) manager->group;
- wfd_session_s *session = (wfd_session_s*) manager->session;
- wfd_device_s *peer = NULL;
- unsigned char peer_addr[MACADDR_LEN] = {0, };
- wifi_direct_client_noti_s noti;
- memset(¬i, 0x0, sizeof(wifi_direct_client_noti_s));
+ peer->dev_role = WFD_DEV_ROLE_GO;
+
+ edata = (wfd_oem_invite_data_s*) event->edata;
+ memcpy(peer->intf_addr, edata->bssid, MACADDR_LEN);
+ wfd_update_peer_time(manager, event->dev_addr);
+
+ session = wfd_create_session(manager, event->dev_addr,
+ manager->req_wps_mode, SESSION_DIRECTION_INCOMING);
+ if (!session) {
+ WDS_LOGE("Failed to create session");
+ return;
+ }
+ session->type = SESSION_TYPE_INVITE;
+ wfd_session_timer(session, 1);
+
+ wfd_state_set(manager, WIFI_DIRECT_STATE_CONNECTING);
+
+ res = wfd_session_start(session);
+ if (res < 0) {
+ WDS_LOGE("Failed to start session");
+ return;
+ }
+
+ memset(¬i, 0x0, sizeof(wifi_direct_client_noti_s));
+ noti.event = WIFI_DIRECT_CLI_EVENT_CONNECTION_REQ;
+ noti.error = WIFI_DIRECT_ERROR_NONE;
+ snprintf(noti.param1, sizeof(noti.param1), MACSTR, MAC2STR(event->dev_addr));
+ wfd_client_send_event(manager, ¬i);
+
+ __WDS_LOG_FUNC_EXIT__;
+ return;
+ }
+
+ static void __wfd_process_invitation_res(wfd_manager_s *manager, wfd_oem_event_s *event)
+ {
+ __WDS_LOG_FUNC_ENTER__;
+
+ __WDS_LOG_FUNC_EXIT__;
+ return;
+ }
+
+ static void __wfd_process_sta_connected(wfd_manager_s *manager, wfd_oem_event_s *event)
+ {
+ __WDS_LOG_FUNC_ENTER__;
+
+ wfd_session_s *session = NULL;
+ wfd_device_s *peer = NULL;
+ wfd_group_s *group = NULL;
+ wifi_direct_client_noti_s noti;
+
+ // FIXME: Move this code to plugin
+ if (!memcmp(event->intf_addr, manager->local->intf_addr, MACADDR_LEN)) {
+ WDS_LOGD("Ignore this event");
+ return;
+ }
+ session = (wfd_session_s*) manager->session;
+ if (!session) {
+ WDS_LOGD("Unexpected event. Session is NULL [peer: " MACSECSTR "]",
+ MAC2SECSTR(event->dev_addr));
+ wfd_oem_destroy_group(manager->oem_ops, GROUP_IFNAME);
+ wfd_destroy_group(manager, GROUP_IFNAME);
+ wfd_state_set(manager, WIFI_DIRECT_STATE_ACTIVATED);
+ wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_ACTIVATED);
+ return;
+ }
+
+ peer = wfd_session_get_peer(session);
+ if (!peer) {
+ WDS_LOGE("Peer not found");
+ return;
+ }
+
+ group = (wfd_group_s*) manager->group;
+ if (!group) {
+ group = wfd_create_pending_group(manager, event->intf_addr);
if (!group) {
- WDS_LOGE("Group not found");
- break;
+ WDS_LOGE("Failed to create pending group");
+ return;
}
+ manager->group = group;
+ }
+ wfd_group_add_member(group, peer->dev_addr);
+
+ session->state = SESSION_STATE_COMPLETED;
+#ifndef CTRL_IFACE_DBUS
+ memcpy(peer->intf_addr, event->intf_addr, MACADDR_LEN);
+#endif /* CTRL_IFACE_DBUS */
+ peer->state = WFD_PEER_STATE_CONNECTED;
+
+ wfd_state_set(manager, WIFI_DIRECT_STATE_GROUP_OWNER);
+ wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_GROUP_OWNER);
+ memset(¬i, 0x0, sizeof(wifi_direct_client_noti_s));
+ noti.event = WIFI_DIRECT_CLI_EVENT_CONNECTION_RSP;
+ noti.error = WIFI_DIRECT_ERROR_NONE;
+ snprintf(noti.param1, MACSTR_LEN, MACSTR, MAC2STR(peer->dev_addr));
+ wfd_client_send_event(manager, ¬i);
#ifdef CTRL_IFACE_DBUS
- peer = wfd_group_find_member_by_addr(group, event->dev_addr);
+ wfd_update_peer(manager, peer);
+ if (event->ip_addr_peer[3]) {
+ peer->ip_type = WFD_IP_TYPE_OVER_EAPOL;
+ memcpy(peer->client_ip_addr, event->ip_addr_peer, IPADDR_LEN);
+ WDS_LOGE("Peer's client IP [" IPSTR "]", IP2STR((char*) &peer->client_ip_addr));
+ memcpy(peer->go_ip_addr, manager->local->ip_addr, IPADDR_LEN);
+ WDS_LOGE("Peer's GO IP [" IPSTR "]", IP2STR((char*) &peer->go_ip_addr));
+ }
+ if(peer->ip_type == WFD_IP_TYPE_OVER_EAPOL)
+ wfd_util_ip_over_eap_lease(peer);
+ else
+#endif /* CTRL_IFACE_DBUS */
+ wfd_util_dhcps_wait_ip_leased(peer);
+ wfd_destroy_session(manager);
+
+ __WDS_LOG_FUNC_EXIT__;
+ return;
+ }
+
+ static void __wfd_process_sta_disconnected(wfd_manager_s *manager, wfd_oem_event_s *event)
+ {
+ __WDS_LOG_FUNC_ENTER__;
+
+ wfd_group_s *group = NULL;
+ wfd_device_s *peer = NULL;
+ wifi_direct_client_noti_s noti;
+ unsigned char peer_addr[MACADDR_LEN] = {0, };
+
+ group = (wfd_group_s*) manager->group;
+ if (!group) {
+ WDS_LOGE("Group not found");
+ return;
+ }
+
+#ifdef CTRL_IFACE_DBUS
+ peer = wfd_group_find_member_by_addr(group, event->dev_addr);
#else /* CTRL_IFACE_DBUS */
- peer = wfd_group_find_member_by_addr(group, event->intf_addr);
+ peer = wfd_group_find_member_by_addr(group, event->intf_addr);
#endif /* DBUS_IFACE */
+ if (!peer) {
+ WDS_LOGE("Failed to find connected peer");
+ peer = wfd_session_get_peer(manager->session);
if (!peer) {
- WDS_LOGE("Failed to find connected peer");
- peer = wfd_session_get_peer(session);
- if (!peer) {
- WDS_LOGE("Failed to find connecting peer");
- break;
- }
+ WDS_LOGE("Failed to find connecting peer");
+ return;
}
- memcpy(peer_addr, peer->dev_addr, MACADDR_LEN);
-
- /* If state is not DISCONNECTING, connection is finished by peer */
- if (manager->state >= WIFI_DIRECT_STATE_CONNECTED) {
- wfd_group_remove_member(group, peer_addr);
- if (group->member_count)
- noti.event = WIFI_DIRECT_CLI_EVENT_DISASSOCIATION_IND;
- else
- noti.event = WIFI_DIRECT_CLI_EVENT_DISCONNECTION_IND;
- noti.error = WIFI_DIRECT_ERROR_NONE;
- g_snprintf(noti.param1, MACSTR_LEN, MACSTR, MAC2STR(peer_addr));
- /* If there is no member, GO should be destroyed */
+ }
+ memcpy(peer_addr, peer->dev_addr, MACADDR_LEN);
+ memset(¬i, 0x0, sizeof(wifi_direct_client_noti_s));
+
+ /* If state is not DISCONNECTING, connection is finished by peer */
+ if (manager->state >= WIFI_DIRECT_STATE_CONNECTED) {
+ wfd_group_remove_member(group, peer_addr);
+ if (group->member_count)
+ noti.event = WIFI_DIRECT_CLI_EVENT_DISASSOCIATION_IND;
+ else
+ noti.event = WIFI_DIRECT_CLI_EVENT_DISCONNECTION_IND;
+ noti.error = WIFI_DIRECT_ERROR_NONE;
+ g_snprintf(noti.param1, MACSTR_LEN, MACSTR, MAC2STR(peer_addr));
+ /* If there is no member, GO should be destroyed */
#ifdef TIZEN_TV
- /* If GO is Auto GO, then it should not be removed when no member left */
- if (!group->member_count && (wfd_group_is_autonomous(group) == FALSE)) {
+ /* If GO is Auto GO, then it should not be removed when no member left */
+ if (!group->member_count && (wfd_group_is_autonomous(group) == FALSE)) {
#else /* TIZEN_TV */
- if (!group->member_count) {
+ if (!group->member_count) {
#endif /* TIZEN_TV */
- wfd_oem_destroy_group(manager->oem_ops, group->ifname);
- wfd_destroy_group(manager, group->ifname);
- }
- } else if (manager->state == WIFI_DIRECT_STATE_DISCONNECTING) {
- noti.event = WIFI_DIRECT_CLI_EVENT_DISCONNECTION_RSP;
+ wfd_oem_destroy_group(manager->oem_ops, group->ifname);
+ wfd_destroy_group(manager, group->ifname);
+ }
+ } else if (manager->state == WIFI_DIRECT_STATE_DISCONNECTING) {
+ noti.event = WIFI_DIRECT_CLI_EVENT_DISCONNECTION_RSP;
+ noti.error = WIFI_DIRECT_ERROR_NONE;
+ g_snprintf(noti.param1, MACSTR_LEN, MACSTR, MAC2STR(peer_addr));
+ } else if (manager->state == WIFI_DIRECT_STATE_CONNECTING &&
+ /* Some devices(GO) send disconnection message before connection completed.
+ * This message should be ignored when device is not GO */
+ manager->local->dev_role == WFD_DEV_ROLE_GO) {
+ if (WFD_PEER_STATE_CONNECTED == peer->state) {
+ WDS_LOGD("Peer is already Connected !!!");
+ noti.event = WIFI_DIRECT_CLI_EVENT_DISASSOCIATION_IND;
noti.error = WIFI_DIRECT_ERROR_NONE;
- g_snprintf(noti.param1, MACSTR_LEN, MACSTR, MAC2STR(peer_addr));
- } else if (manager->state == WIFI_DIRECT_STATE_CONNECTING &&
- /* Some devices(GO) send disconnection message before connection completed.
- * This message should be ignored when device is not GO */
- manager->local->dev_role == WFD_DEV_ROLE_GO) {
- if (WFD_PEER_STATE_CONNECTED == peer->state) {
- WDS_LOGD("Peer is already Connected !!!");
- noti.event = WIFI_DIRECT_CLI_EVENT_DISASSOCIATION_IND;
- noti.error = WIFI_DIRECT_ERROR_NONE;
- } else if (WFD_PEER_STATE_CONNECTING == peer->state) {
- WDS_LOGD("Peer is Connecting...");
- noti.event = WIFI_DIRECT_CLI_EVENT_CONNECTION_RSP;
- noti.error = WIFI_DIRECT_ERROR_CONNECTION_FAILED;
- } else {
- WDS_LOGE("Unexpected Peer State. Ignore it");
- break;
- }
- g_snprintf(noti.param1, MACSTR_LEN, MACSTR, MAC2STR(peer_addr));
+ } else if (WFD_PEER_STATE_CONNECTING == peer->state) {
+ WDS_LOGD("Peer is Connecting...");
+ noti.event = WIFI_DIRECT_CLI_EVENT_CONNECTION_RSP;
+ noti.error = WIFI_DIRECT_ERROR_CONNECTION_FAILED;
} else {
- WDS_LOGE("Unexpected event. Ignore it");
- break;
+ WDS_LOGE("Unexpected Peer State. Ignore it");
+ return;
}
- wfd_client_send_event(manager, ¬i);
+ g_snprintf(noti.param1, MACSTR_LEN, MACSTR, MAC2STR(peer_addr));
+ } else {
+ WDS_LOGE("Unexpected event. Ignore it");
+ return;
+ }
+ wfd_client_send_event(manager, ¬i);
- if (manager->local->dev_role == WFD_DEV_ROLE_GO) {
- wfd_state_set(manager, WIFI_DIRECT_STATE_GROUP_OWNER);
- wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_GROUP_OWNER);
- } else {
- wfd_destroy_group(manager, GROUP_IFNAME);
- wfd_state_set(manager, WIFI_DIRECT_STATE_ACTIVATED);
- wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_ACTIVATED);
- }
- wfd_destroy_session(manager);
+ wfd_state_set(manager, WIFI_DIRECT_STATE_GROUP_OWNER);
+ wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_GROUP_OWNER);
+ wfd_destroy_session(manager);
+
+ __WDS_LOG_FUNC_EXIT__;
+ return;
+ }
+
+ static void __wfd_process_connected(wfd_manager_s *manager, wfd_oem_event_s *event)
+ {
+ __WDS_LOG_FUNC_ENTER__;
+
+ wfd_session_s *session = NULL;
+ wfd_device_s *peer = NULL;
+ wfd_group_s *group = NULL;
+
+ // FIXME: Move this code to plugin
+ if (!memcmp(event->intf_addr, manager->local->intf_addr, MACADDR_LEN)) {
+ WDS_LOGD("Ignore this event");
+ return;
}
- break;
- case WFD_OEM_EVENT_GROUP_CREATED:
- {
- wfd_group_s *group = (wfd_group_s*) manager->group;
- wfd_session_s *session = (wfd_session_s*)manager->session;
-#ifdef CTRL_IFACE_DBUS
- if(event->dev_role == WFD_DEV_ROLE_GC && !group) {
- group = wfd_create_pending_group(manager, event->intf_addr);
- if (!group) {
- WDS_LOGE("Failed to create pending group");
- break;
- }
- manager->group = group;
+ session = (wfd_session_s*) manager->session;
+ if (!session) {
+ WDS_LOGD("Unexpected event. Session is NULL [peer: " MACSECSTR "]",
+ MAC2SECSTR(event->dev_addr));
+ wfd_oem_destroy_group(manager->oem_ops, GROUP_IFNAME);
+ wfd_destroy_group(manager, GROUP_IFNAME);
+ wfd_state_set(manager, WIFI_DIRECT_STATE_ACTIVATED);
+ wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_ACTIVATED);
+ return;
+ }
+
+ peer = wfd_session_get_peer(session);
+ if (!peer) {
+ WDS_LOGE("Peer not found");
+ return;
+ }
+
+ group = (wfd_group_s*) manager->group;
+ if (!group) {
+ group = wfd_create_pending_group(manager, event->intf_addr);
+ if (!group) {
+ WDS_LOGE("Failed to create pending group");
+ return;
}
+ manager->group = group;
+ }
+ wfd_group_add_member(group, peer->dev_addr);
+
+ session->state = SESSION_STATE_COMPLETED;
+#ifndef CTRL_IFACE_DBUS
+ memcpy(peer->intf_addr, event->intf_addr, MACADDR_LEN);
#endif /* CTRL_IFACE_DBUS */
+ peer->state = WFD_PEER_STATE_CONNECTED;
- if (!group) {
- if (!session) {
- WDS_LOGE("Unexpected Event. Group should be removed(Client)");
- wfd_oem_destroy_group(manager->oem_ops, event->ifname);
- break;
- }
+ __WDS_LOG_FUNC_EXIT__;
+ return;
+ }
- group = wfd_create_group(manager, event);
- if (!group) {
- WDS_LOGE("Failed to create group");
- break;
- }
- } else {
- if (!session && !(group->flags & WFD_GROUP_FLAG_AUTONOMOUS)) {
- WDS_LOGE("Unexpected Event. Group should be removed(Owner)");
- wfd_oem_destroy_group(manager->oem_ops, group->ifname);
- break;
- }
+ static void __wfd_process_disconnected(wfd_manager_s *manager, wfd_oem_event_s *event)
+ {
+ __WDS_LOG_FUNC_ENTER__;
- if (group->pending) {
- wfd_group_complete(manager, event);
- } else {
- WDS_LOGE("Unexpected event. Group already exist");
- break;
- }
- }
+ wfd_group_s *group = NULL;
+ wfd_device_s *peer = NULL;
+ wifi_direct_client_noti_s noti;
+ unsigned char peer_addr[MACADDR_LEN] = {0, };
+
+ group = (wfd_group_s*) manager->group;
+ if (!group) {
+ WDS_LOGE("Group not found");
+ return;
+ }
- wifi_direct_client_noti_s noti;
- memset(¬i, 0x0, sizeof(wifi_direct_client_noti_s));
- if (group->role == WFD_DEV_ROLE_GC && session) {
#ifdef CTRL_IFACE_DBUS
- if(session->peer && session->peer->ip_type == WFD_IP_TYPE_OVER_EAPOL)
- wfd_util_ip_over_eap_assign(session->peer, event->ifname);
+ peer = wfd_group_find_member_by_addr(group, event->dev_addr);
#else /* CTRL_IFACE_DBUS */
- wfd_destroy_session(manager);
-#endif /* CTRL_IFACE_DBUS */
- wfd_peer_clear_all(manager);
- } else {
- if (group->flags & WFD_GROUP_FLAG_AUTONOMOUS) {
- noti.event = WIFI_DIRECT_CLI_EVENT_GROUP_CREATE_RSP;
- wfd_client_send_event(manager, ¬i);
- wfd_state_set(manager, WIFI_DIRECT_STATE_GROUP_OWNER);
- wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_GROUP_OWNER);
- }
+ peer = wfd_group_find_member_by_addr(group, event->intf_addr);
+#endif /* DBUS_IFACE */
+ if (!peer) {
+ WDS_LOGE("Failed to find connected peer");
+ peer = wfd_session_get_peer(manager->session);
+ if (!peer) {
+ WDS_LOGE("Failed to find connecting peer");
+ return;
}
}
- break;
- case WFD_OEM_EVENT_GROUP_DESTROYED:
- {
- wifi_direct_client_noti_s noti;
- memset(¬i, 0x0, sizeof(wifi_direct_client_noti_s));
- if (manager->state == WIFI_DIRECT_STATE_DISCONNECTING) {
- noti.event = WIFI_DIRECT_CLI_EVENT_DISCONNECTION_RSP;
+ memcpy(peer_addr, peer->dev_addr, MACADDR_LEN);
+ memset(¬i, 0x0, sizeof(wifi_direct_client_noti_s));
+
+ /* If state is not DISCONNECTING, connection is finished by peer */
+ if (manager->state >= WIFI_DIRECT_STATE_CONNECTED) {
+ wfd_group_remove_member(group, peer_addr);
+ if (group->member_count)
+ noti.event = WIFI_DIRECT_CLI_EVENT_DISASSOCIATION_IND;
+ else
+ noti.event = WIFI_DIRECT_CLI_EVENT_DISCONNECTION_IND;
+ noti.error = WIFI_DIRECT_ERROR_NONE;
+ g_snprintf(noti.param1, MACSTR_LEN, MACSTR, MAC2STR(peer_addr));
+ /* If there is no member, GO should be destroyed */
+#ifdef TIZEN_TV
+ /* If GO is Auto GO, then it should not be removed when no member left */
+ if (!group->member_count && (wfd_group_is_autonomous(group) == FALSE)) {
+#else /* TIZEN_TV */
+ if (!group->member_count) {
+#endif /* TIZEN_TV */
+ wfd_oem_destroy_group(manager->oem_ops, group->ifname);
+ wfd_destroy_group(manager, group->ifname);
+ }
+ } else if (manager->state == WIFI_DIRECT_STATE_DISCONNECTING) {
+ noti.event = WIFI_DIRECT_CLI_EVENT_DISCONNECTION_RSP;
+ noti.error = WIFI_DIRECT_ERROR_NONE;
+ g_snprintf(noti.param1, MACSTR_LEN, MACSTR, MAC2STR(peer_addr));
+ } else if (manager->state == WIFI_DIRECT_STATE_CONNECTING &&
+ /* Some devices(GO) send disconnection message before connection completed.
+ * This message should be ignored when device is not GO */
+ manager->local->dev_role == WFD_DEV_ROLE_GO) {
+ if (WFD_PEER_STATE_CONNECTED == peer->state) {
+ WDS_LOGD("Peer is already Connected !!!");
+ noti.event = WIFI_DIRECT_CLI_EVENT_DISASSOCIATION_IND;
noti.error = WIFI_DIRECT_ERROR_NONE;
- } else if (manager->state == WIFI_DIRECT_STATE_CONNECTING && manager->session){
+ } else if (WFD_PEER_STATE_CONNECTING == peer->state) {
+ WDS_LOGD("Peer is Connecting...");
noti.event = WIFI_DIRECT_CLI_EVENT_CONNECTION_RSP;
noti.error = WIFI_DIRECT_ERROR_CONNECTION_FAILED;
- unsigned char *peer_addr = wfd_session_get_peer_addr(manager->session);
- if(peer_addr != NULL)
- g_snprintf(noti.param1, MACSTR_LEN, MACSTR, MAC2STR(peer_addr));
- } else if (manager->state >= WIFI_DIRECT_STATE_CONNECTED) {
- noti.event = WIFI_DIRECT_CLI_EVENT_GROUP_DESTROY_RSP;
- noti.error = WIFI_DIRECT_ERROR_NONE;
} else {
- WDS_LOGD("Unexpected event(GROUP_DESTROYED). Ignore it");
- break;
+ WDS_LOGE("Unexpected Peer State. Ignore it");
+ return;
}
- wfd_client_send_event(manager, ¬i);
-
- wfd_state_set(manager, WIFI_DIRECT_STATE_ACTIVATED);
- wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_ACTIVATED);
- wfd_destroy_group(manager, event->ifname);
- wfd_destroy_session(manager);
- manager->local->dev_role = WFD_DEV_ROLE_NONE;
+ g_snprintf(noti.param1, MACSTR_LEN, MACSTR, MAC2STR(peer_addr));
+ } else {
+ WDS_LOGE("Unexpected event. Ignore it");
+ return;
}
- break;
- case WFD_OEM_EVENT_GO_NEG_FAIL:
- {
- wfd_session_s *session = (wfd_session_s*) manager->session;
- if (!session) {
- WDS_LOGE("Unexpected event. Session not exist");
- break;
- }
+ wfd_client_send_event(manager, ¬i);
- unsigned char *peer_addr = wfd_session_get_peer_addr(session);
- if (!peer_addr) {
- WDS_LOGE("Session do not has peer");
- break;
- }
+ wfd_destroy_group(manager, GROUP_IFNAME);
+ wfd_state_set(manager, WIFI_DIRECT_STATE_ACTIVATED);
+ wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_ACTIVATED);
+ wfd_destroy_session(manager);
- if (event->event_id == WFD_OEM_EVENT_GO_NEG_FAIL) {
- wfd_oem_conn_data_s *edata = (wfd_oem_conn_data_s*) event->edata;
- if (edata && edata->status < 0 && session->connecting_120) {
- if (session->retry_gsrc) {
- g_source_remove(session->retry_gsrc);
- session->retry_gsrc = 0;
- }
- session->retry_gsrc = g_idle_add((GSourceFunc) _wfd_connection_retry, session);
- WDS_LOGD("Connection will be retried");
- break;
- }
- }
+ __WDS_LOG_FUNC_EXIT__;
+ return;
+ }
- wifi_direct_client_noti_s noti;
- memset(¬i, 0x0, sizeof(wifi_direct_client_noti_s));
- noti.event = WIFI_DIRECT_CLI_EVENT_CONNECTION_RSP;
- noti.error = WIFI_DIRECT_ERROR_CONNECTION_FAILED;
- snprintf(noti.param1, MACSTR_LEN, MACSTR, MAC2STR(peer_addr));
- wfd_client_send_event(manager, ¬i);
+ static void __wfd_process_terminating(wfd_manager_s *manager, wfd_oem_event_s *event)
+ {
+ __WDS_LOG_FUNC_ENTER__;
- wfd_state_set(manager, WIFI_DIRECT_STATE_ACTIVATED);
- wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_ACTIVATED);
+ __WDS_LOG_FUNC_EXIT__;
+ return;
+ }
+#ifdef TIZEN_FEATURE_SERVICE_DISCOVERY
+ static void __wfd_process_serv_disc_resp(wfd_manager_s *manager, wfd_oem_event_s *event)
+ {
+ __WDS_LOG_FUNC_ENTER__;
- wfd_destroy_group(manager, GROUP_IFNAME);
- wfd_destroy_session(manager);
- manager->local->dev_role = WFD_DEV_ROLE_NONE;
- }
- break;
- case WFD_OEM_EVENT_PROV_DISC_FAIL:
- case WFD_OEM_EVENT_WPS_FAIL:
- case WFD_OEM_EVENT_KEY_NEG_FAIL:
- {
- wfd_session_s *session = (wfd_session_s*) manager->session;
- if (!session) {
- WDS_LOGE("Unexpected event. Session not exist");
- break;
- }
+ wifi_direct_client_noti_s noti;
+ wfd_update_peer_time(manager, event->dev_addr);
- unsigned char *peer_addr = wfd_session_get_peer_addr(session);
- if (!peer_addr) {
- WDS_LOGE("Session do not has peer");
- break;
- }
+ if (event->edata_type == WFD_OEM_EDATA_TYPE_NEW_SERVICE) {
+ wfd_oem_new_service_s *service = NULL;;
+ GList *temp = NULL;
+ GList *services = (GList*) event->edata;
+ int count = 0;
- if (event->event_id == WFD_OEM_EVENT_GO_NEG_FAIL) {
- wfd_oem_conn_data_s *edata = (wfd_oem_conn_data_s*) event->edata;
- if (edata && edata->status < 0 && session->connecting_120) {
- if (session->retry_gsrc) {
- g_source_remove(session->retry_gsrc);
- session->retry_gsrc = 0;
- }
- session->retry_gsrc = g_idle_add((GSourceFunc) _wfd_connection_retry, session);
- WDS_LOGD("Connection will be retried");
- break;
+ WDS_LOGD("%d service data found", event->dev_role);
+
+ temp = g_list_first(services);
+ while(temp && count < event->dev_role) {
+ service = (wfd_oem_new_service_s*) temp->data;
+ memset(¬i, 0x0, sizeof(wifi_direct_client_noti_s));
+ noti.event = WIFI_DIRECT_CLI_EVENT_SERVICE_DISCOVERY_FOUND;
+ noti.type = service->protocol;
+ if (service->protocol == WFD_OEM_SERVICE_TYPE_BONJOUR) {
+ g_snprintf(noti.param1, MACSTR_LEN, MACSTR, MAC2STR(event->dev_addr));
+ g_snprintf(noti.param2, 256, "%s|%s", service->data.bonjour.query, service->data.bonjour.rdata);
+ WDS_LOGD("Found service: [%d: %s] - [" MACSECSTR "]", service->protocol,
+ service->data.bonjour.query, MAC2SECSTR(event->dev_addr));
+ } else if (service->protocol == WFD_OEM_SERVICE_TYPE_BT_ADDR) {
+ g_snprintf(noti.param1, MACSTR_LEN, MACSTR, MAC2STR(event->dev_addr));
+ g_snprintf(noti.param2, MACSTR_LEN, "%s", service->data.vendor.data2);
+ WDS_LOGD("Found service: [%d: %s] - [" MACSECSTR "]", service->protocol,
+ service->data.vendor.data2, MAC2SECSTR(event->dev_addr));
+ } else {
+ WDS_LOGD("Found service is not supported");
+ goto next;
}
+ wfd_client_send_event(manager, ¬i);
+next:
+ temp = g_list_next(temp);
+ service = NULL;
+ count++;
}
+ } else if (event->edata_type == WFD_OEM_EDATA_TYPE_SERVICE) {
+ wfd_oem_service_data_s *edata = (wfd_oem_service_data_s*) event->edata;
- wifi_direct_client_noti_s noti;
memset(¬i, 0x0, sizeof(wifi_direct_client_noti_s));
- noti.event = WIFI_DIRECT_CLI_EVENT_CONNECTION_RSP;
- noti.error = WIFI_DIRECT_ERROR_CONNECTION_FAILED;
- snprintf(noti.param1, MACSTR_LEN, MACSTR, MAC2STR(peer_addr));
- wfd_client_send_event(manager, ¬i);
-
- if (manager->local->dev_role == WFD_DEV_ROLE_GO) {
- wfd_group_s *group = (wfd_group_s*) manager->group;
- if (group && !group->member_count && (wfd_group_is_autonomous(group) == FALSE)) {
- wfd_destroy_group(manager, GROUP_IFNAME);
-
- wfd_state_set(manager, WIFI_DIRECT_STATE_ACTIVATED);
- wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_ACTIVATED);
- } else {
- wfd_state_set(manager, WIFI_DIRECT_STATE_GROUP_OWNER);
- wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_GROUP_OWNER);
- }
+ noti.event = WIFI_DIRECT_CLI_EVENT_SERVICE_DISCOVERY_FOUND;
+ if(!edata) {
+ noti.type = -1;
} else {
- wfd_state_set(manager, WIFI_DIRECT_STATE_ACTIVATED);
- wfd_util_set_wifi_direct_state(WIFI_DIRECT_STATE_ACTIVATED);
+ noti.type = edata->type;
+ g_snprintf(noti.param1, MACSTR_LEN, MACSTR, MAC2STR(event->dev_addr));
+ switch(edata->type) {
+ case WFD_OEM_SERVICE_TYPE_BT_ADDR:
+ g_snprintf(noti.param2, MACSTR_LEN, MACSTR, MAC2STR(edata->data));
+ return;
+ case WFD_OEM_SERVICE_TYPE_CONTACT_INFO:
+ g_snprintf(noti.param2, MACSTR_LEN, "%s", edata->value);
+ return;
+ default:
+ WDS_LOGE("Unknown type [type ID: %d]", edata->type);
+ }
}
+ wfd_client_send_event(manager, ¬i);
+ }
- wfd_destroy_session(manager);
+ __WDS_LOG_FUNC_EXIT__;
+ return;
+ }
- wfd_oem_refresh(manager->oem_ops);
-#if 0
- /* After connection failed, scan again */
- wfd_oem_scan_param_s param;
- memset(¶m, 0x0, sizeof(wfd_oem_scan_param_s));
- param.scan_mode = WFD_OEM_SCAN_MODE_ACTIVE;
- param.scan_time = 2;
- param.scan_type = WFD_OEM_SCAN_TYPE_SOCIAL;
- wfd_oem_start_scan(manager->oem_ops, ¶m);
- manager->scan_mode = WFD_SCAN_MODE_ACTIVE;
-#endif
- }
- break;
+ static void __wfd_process_serv_disc_started(wfd_manager_s *manager, wfd_oem_event_s *event)
+ {
+ __WDS_LOG_FUNC_ENTER__;
+ __WDS_LOG_FUNC_EXIT__;
+ return;
+ }
+#endif /* TIZEN_FEATURE_SERVICE_DISCOVERY */
+
+static struct {
+ const int event_id;
+ void (*function) (wfd_manager_s *manager, wfd_oem_event_s *event);
+} wfd_oem_event_map[] = {
+ {
+ WFD_OEM_EVENT_DEACTIVATED,
+ __wfd_process_deactivated
+ },
+ {
+ WFD_OEM_EVENT_PEER_FOUND,
+ __wfd_process_peer_found
+ },
+ {
+ WFD_OEM_EVENT_PEER_DISAPPEARED,
+ __wfd_process_peer_disappeared
+ },
+ {
+ WFD_OEM_EVENT_DISCOVERY_FINISHED,
+ __wfd_process_discovery_finished
+ },
+ {
+ WFD_OEM_EVENT_PROV_DISC_REQ,
+ __wfd_process_prov_disc_req
+ },
+ {
+ WFD_OEM_EVENT_PROV_DISC_RESP,
+ __wfd_process_prov_disc_resp
+ },
+ {
+ WFD_OEM_EVENT_PROV_DISC_FAIL,
+ __wfd_process_prov_disc_fail
+ },
+ {
+ WFD_OEM_EVENT_GO_NEG_REQ,
+ __wfd_process_go_neg_req
+ },
+ {
+ WFD_OEM_EVENT_GO_NEG_FAIL,
+ __wfd_process_go_neg_fail
+ },
+ {
+ WFD_OEM_EVENT_GO_NEG_DONE,
+ __wfd_process_go_neg_done
+ },
+ {
+ WFD_OEM_EVENT_WPS_FAIL,
+ __wfd_process_wps_fail
+ },
+ {
+ WFD_OEM_EVENT_WPS_DONE,
+ __wfd_process_wps_done
+ },
+ {
+ WFD_OEM_EVENT_KEY_NEG_FAIL,
+ __wfd_process_key_neg_fail
+ },
+ {
+ WFD_OEM_EVENT_KEY_NEG_DONE,
+ __wfd_process_key_neg_done
+ },
+ {
+ WFD_OEM_EVENT_CONN_FAIL,
+ __wfd_process_conn_fail
+ },
+ {
+ WFD_OEM_EVENT_CONN_DONE,
+ __wfd_process_conn_done
+ },
+ {
+ WFD_OEM_EVENT_GROUP_CREATED,
+ __wfd_process_group_created
+ },
+ {
+ WFD_OEM_EVENT_GROUP_DESTROYED,
+ __wfd_process_group_destroyed
+ },
+ {
+ WFD_OEM_EVENT_INVITATION_REQ,
+ __wfd_process_invitation_req
+ },
+ {
+ WFD_OEM_EVENT_INVITATION_RES,
+ __wfd_process_invitation_res
+ },
+ {
+ WFD_OEM_EVENT_STA_CONNECTED,
+ __wfd_process_sta_connected
+ },
+ {
+ WFD_OEM_EVENT_STA_DISCONNECTED,
+ __wfd_process_sta_disconnected
+ },
+ {
+ WFD_OEM_EVENT_CONNECTED,
+ __wfd_process_connected
+ },
+ {
+ WFD_OEM_EVENT_DISCONNECTED,
+ __wfd_process_disconnected
+ },
+ {
+ WFD_OEM_EVENT_TERMINATING,
+ __wfd_process_terminating
+ },
#ifdef TIZEN_FEATURE_SERVICE_DISCOVERY
- case WFD_OEM_EVENT_SERV_DISC_RESP:
{
- wifi_direct_client_noti_s noti;
- wfd_update_peer_time(manager, event->dev_addr);
-
- if (event->edata_type == WFD_OEM_EDATA_TYPE_NEW_SERVICE) {
- wfd_oem_new_service_s *service = NULL;;
- GList *temp = NULL;
- GList *services = (GList*) event->edata;
- int count = 0;
-
- WDS_LOGD("%d service data found", event->dev_role);
-
- temp = g_list_first(services);
- while(temp && count < event->dev_role) {
- service = (wfd_oem_new_service_s*) temp->data;
- memset(¬i, 0x0, sizeof(wifi_direct_client_noti_s));
- noti.event = WIFI_DIRECT_CLI_EVENT_SERVICE_DISCOVERY_FOUND;
- noti.type = service->protocol;
- if (service->protocol == WFD_OEM_SERVICE_TYPE_BONJOUR) {
- g_snprintf(noti.param1, MACSTR_LEN, MACSTR, MAC2STR(event->dev_addr));
- g_snprintf(noti.param2, 256, "%s|%s", service->data.bonjour.query, service->data.bonjour.rdata);
- WDS_LOGD("Found service: [%d: %s] - [" MACSECSTR "]", service->protocol,
- service->data.bonjour.query, MAC2SECSTR(event->dev_addr));
- } else if (service->protocol == WFD_OEM_SERVICE_TYPE_BT_ADDR) {
- g_snprintf(noti.param1, MACSTR_LEN, MACSTR, MAC2STR(event->dev_addr));
- g_snprintf(noti.param2, MACSTR_LEN, "%s", service->data.vendor.data2);
- WDS_LOGD("Found service: [%d: %s] - [" MACSECSTR "]", service->protocol,
- service->data.vendor.data2, MAC2SECSTR(event->dev_addr));
- } else {
- WDS_LOGD("Found service is not supported");
- goto next;
- }
- wfd_client_send_event(manager, ¬i);
-next:
- temp = g_list_next(temp);
- service = NULL;
- count++;
- }
- } else if (event->edata_type == WFD_OEM_EDATA_TYPE_SERVICE) {
- wfd_oem_service_data_s *edata = (wfd_oem_service_data_s*) event->edata;
+ WFD_OEM_EVENT_SERV_DISC_RESP,
+ __wfd_process_serv_disc_resp
+ },
+ {
+ WFD_OEM_EVENT_SERV_DISC_STARTED,
+ __wfd_process_serv_disc_started
+ },
+#endif /* TIZEN_FEATURE_SERVICE_DISCOVERY */
+ {
+ WFD_OEM_EVENT_MAX,
+ NULL
+ }
+ };
- memset(¬i, 0x0, sizeof(wifi_direct_client_noti_s));
- noti.event = WIFI_DIRECT_CLI_EVENT_SERVICE_DISCOVERY_FOUND;
- if(!edata) {
- noti.type = -1;
- } else {
- noti.type = edata->type;
- g_snprintf(noti.param1, MACSTR_LEN, MACSTR, MAC2STR(event->dev_addr));
- switch(edata->type) {
- case WFD_OEM_SERVICE_TYPE_BT_ADDR:
- g_snprintf(noti.param2, MACSTR_LEN, MACSTR, MAC2STR(edata->data));
- break;
- case WFD_OEM_SERVICE_TYPE_CONTACT_INFO:
- g_snprintf(noti.param2, MACSTR_LEN, "%s", edata->value);
- break;
- default:
- WDS_LOGE("Unknown type [type ID: %d]", edata->type);
- }
- }
- wfd_client_send_event(manager, ¬i);
- }
+ int wfd_process_event(void *user_data, void *data)
+ {
+ __WDS_LOG_FUNC_ENTER__;
+ wfd_manager_s *manager = NULL;
+ wfd_oem_event_s *event = NULL;
+ int i = 0;
+
+ if (!user_data || !data) {
+ WDS_LOGE("Invalid parameter");
+ return -1;
}
- break;
-#endif /* TIZEN_FEATURE_SERVICE_DISCOVERY */
- default:
- WDS_LOGE("Unknown event [event ID: %d]", event->event_id);
- break;
+ manager = (wfd_manager_s*) user_data;
+ event = (wfd_oem_event_s*) data;
+ WDS_LOGD("Event[%d] from " MACSECSTR, event->event_id,
+ MAC2SECSTR(event->dev_addr));
+ for(i = 0; wfd_oem_event_map[i].function != NULL; i++) {
+ if(event->event_id == wfd_oem_event_map[i].event_id)
+ wfd_oem_event_map[i].function(manager, event);
}
__WDS_LOG_FUNC_EXIT__;
return 0;
-}
-
+ }