#endif /** FALSE */
#define WIFI_DIRECT_MAX_SSID_LEN 32
+#define WIFI_DIRECT_MIN_SSID_LEN 1
#define WIFI_DIRECT_MAX_DEVICE_NAME_LEN 32
#define WIFI_DIRECT_WPS_PIN_LEN 8
#define WIFI_DIRECT_MAX_SERVICES_LEN 1024
#define DEFAULT_PRIMARY_DEVICE_TYPE WIFI_DIRECT_PRIMARY_DEVICE_TYPE_TELEPHONE
#define DEFAULT_SECONDARY_DEVICE_TYPE WIFI_DIRECT_SECONDARY_DEVICE_TYPE_TELEPHONE_SMARTPHONE_DUAL
+#define WFD_MAX_TYPE 8
+#define WFD_GO_INTENT_MIN 0
+#define WFD_GO_INTENT_DISPLY_SOURCE 2
+#define WFD_GO_INTENT_MAX 15
#define WFD_MAX_CLIENT 16
#define WFD_MAX_STATION 8
WFD_DISPLAY_TYPE_PRISINK,
WFD_DISPLAY_TYPE_SECSINK,
WFD_DISPLAY_TYPE_DUAL,
+ WFD_DISPLAY_TYPE_NONE,
} wfd_display_type_e;
typedef struct {
#endif /* TIZEN_ENABLE_PRD */
int session_timer;
+ int go_intent_per_type[WFD_MAX_TYPE];
gboolean auto_group_remove_enable;
gboolean is_on_demand_supported;
gboolean is_service_discovery_supported;
int wfd_local_get_wps_mode(int *wps_mode);
int wfd_manager_get_go_intent(int *go_intent);
int wfd_manager_set_go_intent(int go_intent);
+int wfd_manager_get_go_intent_per_type(int type, int *go_intent);
+int wfd_manager_set_go_intent_per_type(int type, int go_intent);
int wfd_manager_get_max_station(int *max_station);
int wfd_manager_set_max_station(int max_station);
int wfd_manager_get_autoconnection(int *autoconnection);
void get_mac_address_handler(GVariant *parameters, void *dest);
void get_go_intent_handler(GVariant *parameters, void *dest);
void set_go_intent_handler(GVariant *parameters, void *dest);
+void get_go_intent_per_type_handler(GVariant *parameters, void *dest);
+void set_go_intent_per_type_handler(GVariant *parameters, void *dest);
void get_max_client_handler(GVariant *parameters, void *dest);
void set_max_client_handler(GVariant *parameters, void *dest);
void set_autoconnection_mode_handler(GVariant *parameters, void *dest);
void cancel_seek_service_handler(GVariant *parameters, void *dest);
void connect_sessoin_handler(GVariant *parameters, void *dest);
void confirm_sessoin_handler(GVariant *parameters, void *dest);
+void get_wps_config_method_handler(GVariant *parameter, void *dest);
+void set_wps_config_method_handler(GVariant *parameter, void *dest);
+void remove_persistent_device_handler(GVariant *parameters, void *dest);
+void remove_all_persistent_device_handler(GVariant *parameters, void *dest);
#ifdef __cplusplus
}
return prd_ops->prd_init(&g_event_cbs);
}
#endif /* TIZEN_ENABLE_PRD */
+
+int wfd_oem_set_supported_wps_mode(wfd_oem_ops_s *ops, int wps_mode)
+{
+ if (!ops || !ops->set_supported_wps_mode) {
+ return -1;
+ }
+
+ return ops->set_supported_wps_mode(wps_mode);
+}
+
+int wfd_oem_remove_persistent_device(wfd_oem_ops_s *ops, unsigned char *peer_mac_address)
+{
+ if (!ops || !ops->remove_persistent_device) {
+ return -1;
+ }
+
+ return ops->remove_persistent_device(peer_mac_address);
+}
+
+int wfd_oem_remove_all_persistent_device(wfd_oem_ops_s *ops)
+{
+ if (!ops || !ops->remove_all_persistent_device) {
+ return -1;
+ }
+
+ return ops->remove_all_persistent_device();
+}
int (*add_vsie)(wfd_oem_vsie_frames_e frame_id, const char* vsie);
int (*get_vsie)(wfd_oem_vsie_frames_e frame_id, char **vsie);
int (*remove_vsie)(wfd_oem_vsie_frames_e frame_id, const char *vsie);
+ int (*set_supported_wps_mode) (int wps_mode);
+ int (*remove_persistent_device) (unsigned char *peer_mac_addr);
+ int (*remove_all_persistent_device) (void);
void *extra_data;
} wfd_oem_ops_s;
char **vsie);
int wfd_oem_remove_vsie(wfd_oem_ops_s *ops, wfd_oem_vsie_frames_e frame_id,
const char *vsie);
+int wfd_oem_get_supported_wps_mode(wfd_oem_ops_s *ops, int *wps_mode);
+int wfd_oem_set_supported_wps_mode(wfd_oem_ops_s *ops, int wps_mode);
+int wfd_oem_remove_persistent_device(wfd_oem_ops_s *ops, unsigned char *peer_mac_address);
+int wfd_oem_remove_all_persistent_device(wfd_oem_ops_s *ops);
#if defined TIZEN_ENABLE_PRD
typedef struct {
int ws_add_vsie(wfd_oem_vsie_frames_e frame_id, const char* vsie);
int ws_get_vsie(wfd_oem_vsie_frames_e frame_id, char **vsie);
int ws_remove_vsie(wfd_oem_vsie_frames_e frame_id, const char *vsie);
+int ws_set_supported_wps_mode(int wps_mode);
+int ws_remove_persistent_device(unsigned char *mac_addr);
+int ws_remove_all_persistent_device(void);
#ifdef __cplusplus
}
.add_vsie = ws_add_vsie,
.get_vsie = ws_get_vsie,
.remove_vsie = ws_remove_vsie,
+ .set_supported_wps_mode = ws_set_supported_wps_mode,
+ .remove_persistent_device = ws_remove_persistent_device,
+ .remove_all_persistent_device = ws_remove_all_persistent_device,
.extra_data = NULL
};
static wfd_oem_config_s *config = NULL;
static int is_peer_joined_notified = 0;
static int is_peer_disconnected_notified = 0;
+static int wps_config_method = WFD_OEM_WPS_MODE_PBC|WFD_OEM_WPS_MODE_DISPLAY|WFD_OEM_WPS_MODE_KEYPAD;
static GList *service_list;
static GList *seek_list;
int ws_get_supported_wps_mode(int *wps_mode)
{
__WDP_LOG_FUNC_ENTER__;
+ if (!wps_mode) {
+ WDP_LOGE("Invalid parameter");
+ __WDP_LOG_FUNC_EXIT__;
+ return -1;
+ }
+ *wps_mode = wps_config_method;
__WDP_LOG_FUNC_EXIT__;
return 0;
}
__WDP_LOG_FUNC_EXIT__;
return 0;
}
+
+int ws_set_supported_wps_mode(int wps_mode)
+{
+ __WDP_LOG_FUNC_ENTER__;
+ char config_value[DBUS_OBJECT_PATH_MAX+1] = {0,};
+ int length = 0;
+ int new_wps_mode = wps_mode;
+ int res = 0;
+
+ if (!config) {
+ WDP_LOGE("no configurable data found");
+ __WDP_LOG_FUNC_EXIT__;
+ return -1;
+ }
+
+ if (new_wps_mode == 0) {
+ WDP_LOGE("Reset to default value");
+ new_wps_mode = WFD_OEM_WPS_MODE_PBC|WFD_OEM_WPS_MODE_DISPLAY|WFD_OEM_WPS_MODE_KEYPAD;
+ }
+
+ if (new_wps_mode & WFD_OEM_WPS_MODE_KEYPAD) {
+ strncat(config_value, "keypad ", 7);
+ length += 7;
+ }
+ if (new_wps_mode & WFD_OEM_WPS_MODE_PBC) {
+ strncat(config_value, "virtual_push_button ", 20);
+ length += 20;
+ }
+ if (new_wps_mode & WFD_OEM_WPS_MODE_DISPLAY) {
+ strncat(config_value, "physical_display ", 17);
+ length += 17;
+ }
+ config_value[length-1] = 0;
+ g_strlcpy(config->config_methods, config_value, OEM_CONFIG_METHOD_LEN);
+ WDP_LOGD("config_value = %s, length = %d", config_value, length-1);
+ res = __ws_set_config_methods();
+ if (res < 0) {
+ WDP_LOGE("Failed to set config method");
+ __WDP_LOG_FUNC_EXIT__;
+ return -1;
+ }
+ wps_config_method = new_wps_mode;
+ __WDP_LOG_FUNC_EXIT__;
+ return 0;
+}
+
+static int _ws_remove_persistent_group_by_object_path(const char *object_path)
+{
+ __WDP_LOG_FUNC_ENTER__;
+ GDBusConnection *g_dbus = NULL;
+ dbus_method_param_s params;
+ int res = 0;
+
+ if (!g_pd) {
+ WDP_LOGE("ws_dbus_plugin_data_s is not created yet");
+ __WDP_LOG_FUNC_EXIT__;
+ return -1;
+ }
+
+ g_dbus = g_pd->g_dbus;
+ if (!g_dbus) {
+ WDP_LOGE("DBus connection is NULL");
+ __WDP_LOG_FUNC_EXIT__;
+ return -1;
+ }
+
+ memset(¶ms, 0x0, sizeof(dbus_method_param_s));
+ dbus_set_method_param(¶ms, "RemovePersistentGroup",
+ g_pd->iface_path, g_dbus);
+ params.params = g_variant_new("(o)", object_path);
+
+ res = dbus_method_call(¶ms, SUPPLICANT_P2PDEVICE, NULL, NULL);
+ if (res < 0) {
+ WDP_LOGE("Failed to send command to wpa_supplicant");
+ __WDP_LOG_FUNC_EXIT__;
+ return -1;
+ }
+
+ ws_save_config();
+ WDP_LOGD("Succeeded to remove persistent group");;
+ __WDP_LOG_FUNC_EXIT__;
+ return 0;
+}
+
+int ws_remove_persistent_device(unsigned char *mac_addr)
+{
+ __WDP_LOG_FUNC_ENTER__;
+ GDBusConnection *g_dbus = NULL;
+ ws_network_info_s networks[WS_MAX_PERSISTENT_COUNT];
+ int i = 0;
+ int cnt = 0;
+ int need_delete = 0;
+ int res = 0;
+
+ if (!g_pd) {
+ WDP_LOGE("ws_dbus_plugin_data_s is not created yet");
+ __WDP_LOG_FUNC_EXIT__;
+ return -1;
+ }
+
+ g_dbus = g_pd->g_dbus;
+ if (!g_dbus) {
+ WDP_LOGE("DBus connection is NULL");
+ __WDP_LOG_FUNC_EXIT__;
+ return -1;
+ }
+ memset(&networks, 0x0, WS_MAX_PERSISTENT_COUNT * sizeof(ws_network_info_s));
+ dbus_property_get_all(g_pd->iface_path, g_dbus, SUPPLICANT_P2PDEVICE,
+ __ws_extract_p2pdevice_details, networks);
+
+ cnt = networks[0].total;
+
+ WDP_LOGD("Persistent Group Count=%d", cnt);
+ if (cnt > WS_MAX_PERSISTENT_COUNT) {
+ WDP_LOGE("Persistent group count exceeded or parsing error");
+ __WDP_LOG_FUNC_EXIT__;
+ return -1;
+ }
+
+ for (i = 0 ; i < cnt ; i++) {
+ int j = 0;
+ need_delete = 0;
+
+ WDP_LOGD("----persistent group [%d]----", i);
+ WDP_LOGD("network_id [%d]", networks[i].network_id);
+ WDP_LOGD("ssid [%s]", networks[i].ssid);
+ WDP_LOGD("bssid ["MACSTR"]", MAC2STR(networks[i].bssid));
+ WDP_LOGD("p2p_client_num [%d]", networks[i].p2p_client_num);
+ for (j = 0; j < networks[i].p2p_client_num; j++) {
+ WDP_LOGD("p2p_client_list ["MACSTR"]", MAC2STR(networks[i].p2p_client_list[j]));
+ }
+
+ WDP_LOGD("mac_addr ["MACSTR"]", MAC2STR(mac_addr));
+
+ if (memcmp(mac_addr, networks[i].bssid, WS_MACADDR_LEN) == 0) {
+ WDP_LOGD("Persistent group owner found [%d: "MACSTR"]", networks[i].network_id, MAC2STR(mac_addr));
+ need_delete = 1;
+ }
+
+ if (need_delete == 0) {
+ for (j = 0; j < networks[i].p2p_client_num; j++) {
+ if (!memcmp(mac_addr, networks[i].p2p_client_list[j], WS_MACADDR_LEN)) {
+ WDP_LOGD("Persistent group client found [%d: "MACSTR"]", networks[i].network_id, MAC2STR(mac_addr));
+ need_delete = 1;
+ }
+ }
+ }
+
+ if (need_delete) {
+ res = _ws_remove_persistent_group_by_object_path(networks[i].persistent_path);
+ WDP_LOGI("persistent group deleted [%s]", networks[i].persistent_path);
+ if (res < 0) {
+ WDP_LOGE("Failed to _ws_remove_persistent_group_by_object_path");
+ } else {
+ WDP_LOGD("Succeeded to _ws_remove_persistent_group_by_object_path");
+ }
+ }
+ }
+
+ __WDP_LOG_FUNC_EXIT__;
+ return res;
+}
+
+int ws_remove_all_persistent_device(void)
+{
+ __WDP_LOG_FUNC_ENTER__;
+ GDBusConnection *g_dbus = NULL;
+ dbus_method_param_s params;
+ int res = 0;
+
+ g_dbus = g_pd->g_dbus;
+ if (!g_dbus) {
+ WDP_LOGE("DBus connection is NULL");
+ __WDP_LOG_FUNC_EXIT__;
+ return -1;
+ }
+ memset(¶ms, 0x0, sizeof(dbus_method_param_s));
+
+ dbus_set_method_param(¶ms, "RemoveAllPersistentGroups", g_pd->iface_path, g_dbus);
+ params.params = NULL;
+
+ res = dbus_method_call(¶ms, SUPPLICANT_P2PDEVICE, NULL, NULL);
+ if (res < 0) {
+ WDP_LOGE("Failed to RemoveAllPersistentGroups");
+ } else {
+ WDP_LOGD("Succeeded to RemoveAllPersistentGroups");
+ }
+
+ ws_save_config();
+ WDP_LOGD("Succeeded to remove all network");
+ __WDP_LOG_FUNC_EXIT__;
+ return res;
+}
"<method name='IsPersistentGroupEnabled'>"
"<arg type='b' name='result' direction='out'/>"
"</method>"
+ "<method name='RemovePersistentDevice'>"
+ "<arg type='s' name='mac_address' direction='in'/>"
+ "<arg type='i' name='error_code' direction='out'/>"
+ "</method>"
+ "<method name='RemoveAllPersistentDevice'>"
+ "<arg type='i' name='error_code' direction='out'/>"
+ "</method>"
"<signal name='Created'>"
"</signal>"
"<signal name='Destroyed'>"
"<arg type='i' name='go_intent' direction='in'/>"
"<arg type='i' name='error_code' direction='out'/>"
"</method>"
+ "<method name='SetGoIntentPerType'>"
+ "<arg type='i' name='type' direction='in'/>"
+ "<arg type='i' name='go_intent' direction='in'/>"
+ "<arg type='i' name='error_code' direction='out'/>"
+ "</method>"
+ "<method name='GetGoIntentPerType'>"
+ "<arg type='i' name='type' direction='in'/>"
+ "<arg type='i' name='error_code' direction='out'/>"
+ "<arg type='i' name='go_intent' direction='out'/>"
+ "</method>"
"<method name='GetMaxClient'>"
"<arg type='i' name='error_code' direction='out'/>"
"<arg type='i' name='max_client' direction='out'/>"
"<arg type='s' name='vsie' direction='in'/>"
"<arg type='i' name='error_code' direction='out'/>"
"</method>"
+ "<method name='GetWpsConfigMethod'>"
+ "<arg type='i' name='error_code' direction='out'/>"
+ "<arg type='i' name='req_wps_mode' direction='out'/>"
+ "</method>"
+ "<method name='SetWpsConfigMethod'>"
+ "<arg type='i' name='req_wps_mode' direction='in'/>"
+ "<arg type='i' name='error_code' direction='out'/>"
+ "</method>"
"</interface>"
"<interface name='net.wifidirect.service'>"
"<method name='StartDiscovery'>"
wfd_device_s *peer = NULL;
unsigned char peer_addr[MACADDR_LEN] = {0, };
char peer_mac_address[MACSTR_LEN+1] = {0, };
+ char peer_dev_name[DEV_NAME_LEN+1] = {0, };
group = (wfd_group_s*) manager->group;
if (!group) {
}
}
memcpy(peer_addr, peer->dev_addr, MACADDR_LEN);
+ g_strlcpy(peer_dev_name, peer->dev_name, DEV_NAME_LEN+1);
/**
* If state is not DISCONNECTING, connection is finished by peer.
g_snprintf(peer_mac_address, MACSTR_LEN, MACSTR, MAC2STR(peer_addr));
if (group->member_count) {
wfd_manager_dbus_emit_signal(WFD_MANAGER_MANAGE_INTERFACE,
- "Disconnection",
- g_variant_new("(iis)", WIFI_DIRECT_ERROR_NONE,
+ "DisconnectionInd",
+ g_variant_new("(iiss)", WIFI_DIRECT_ERROR_NONE,
WFD_EVENT_DISASSOCIATION_IND,
- peer_mac_address));
+ peer_mac_address, peer_dev_name));
} else {
wfd_manager_dbus_emit_signal(WFD_MANAGER_MANAGE_INTERFACE,
- "Disconnection",
- g_variant_new("(iis)", WIFI_DIRECT_ERROR_NONE,
+ "DisconnectionInd",
+ g_variant_new("(iiss)", WIFI_DIRECT_ERROR_NONE,
WFD_EVENT_DISCONNECTION_IND,
- peer_mac_address));
+ peer_mac_address, peer_dev_name));
}
} else if (manager->state == WIFI_DIRECT_STATE_CONNECTING &&
wfd_group_remove_member(group, peer_addr);
g_snprintf(peer_mac_address, MACSTR_LEN, MACSTR, MAC2STR(peer_addr));
wfd_manager_dbus_emit_signal(WFD_MANAGER_MANAGE_INTERFACE,
- "Disconnection",
- g_variant_new("(iis)", WIFI_DIRECT_ERROR_NONE,
+ "DisconnectionInd",
+ g_variant_new("(iiss)", WIFI_DIRECT_ERROR_NONE,
WFD_EVENT_DISASSOCIATION_IND,
- peer_mac_address));
+ peer_mac_address, peer_dev_name));
} else if (WFD_PEER_STATE_CONNECTING == peer->state) {
WDS_LOGD("Peer is Connecting...");//LCOV_EXCL_LINE
{"GetPassphrase", get_passphrase_handler},
{"SetPersistentGroupEnabled", set_persistent_group_handler},
{"IsPersistentGroupEnabled", is_persistent_group_enabled_handler},
+ {"RemovePersistentDevice", remove_persistent_device_handler},
+ {"RemoveAllPersistentDevice", remove_all_persistent_device_handler},
{NULL, NULL},
};
{"GetMacAddress", get_mac_address_handler},
{"GetGoIntent", get_go_intent_handler},
{"SetGoIntent", set_go_intent_handler},
+ {"SetGoIntentPerType", set_go_intent_per_type_handler},
+ {"GetGoIntentPerType", get_go_intent_per_type_handler},
{"GetMaxClient", get_max_client_handler},
{"SetMaxClient", set_max_client_handler},
{"SetAutoConnectionMode", set_autoconnection_mode_handler},
{"AddVsie", add_vsie_handler},
{"GetVsie", get_vsie_handler},
{"RemoveVsie", remove_vsie_handler},
+ {"GetWpsConfigMethod", get_wps_config_method_handler},
+ {"SetWpsConfigMethod", set_wps_config_method_handler},
{NULL, NULL},
};
return 0;
}
+int wfd_manager_get_go_intent_per_type(int type, int *go_intent)
+{
+ __WDS_LOG_FUNC_ENTER__;
+ if (!go_intent) {
+ WDS_LOGE("Invalid parameter");
+ __WDS_LOG_FUNC_EXIT__;
+ return -1;
+ }
+
+ if (type < 0 || type >= WFD_MAX_TYPE) {
+ WDS_LOGE("Invalid parameter");
+ __WDS_LOG_FUNC_EXIT__;
+ return -1;
+ }
+
+ *go_intent = g_manager->go_intent_per_type[type];
+ WDS_LOGD("Get Go_Intent[%d] : [%d]", type, *go_intent);
+
+ __WDS_LOG_FUNC_EXIT__;
+ return 0;
+}
+
+int wfd_manager_set_go_intent_per_type(int type, int go_intent)
+{
+ __WDS_LOG_FUNC_ENTER__;
+
+ if (go_intent < 0 || go_intent > 15) {
+ WDS_LOGE("Invalid parameter");
+ __WDS_LOG_FUNC_EXIT__;
+ return -1;
+ }
+
+ if (type < 0 || type >= WFD_MAX_TYPE) {
+ WDS_LOGE("Invalid parameter");
+ __WDS_LOG_FUNC_EXIT__;
+ return -1;
+ }
+
+ g_manager->go_intent_per_type[type] = go_intent;
+ WDS_LOGD("Set Go_Intent[%d] : [%d]", type, g_manager->go_intent_per_type[type]);
+
+ __WDS_LOG_FUNC_EXIT__;
+ return 0;
+}
+
int wfd_manager_get_max_station(int *max_station)
{
__WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
manager->max_station = 8;
manager->session_timer = 120;
manager->auto_group_remove_enable = TRUE;
+
+ manager->go_intent_per_type[WFD_DISPLAY_TYPE_SOURCE] = WFD_GO_INTENT_DISPLY_SOURCE;
+ manager->go_intent_per_type[WFD_DISPLAY_TYPE_PRISINK] = WFD_GO_INTENT_MAX;
+ manager->go_intent_per_type[WFD_DISPLAY_TYPE_SECSINK] = WFD_GO_INTENT_MAX;
+ manager->go_intent_per_type[WFD_DISPLAY_TYPE_DUAL] = WFD_GO_INTENT_MAX;
+ manager->go_intent_per_type[WFD_DISPLAY_TYPE_NONE] = WFD_GO_INTENT_MAX;
+
wfd_util_check_features(manager);
wfd_util_load_wfd_conf(manager);
gchar *key = NULL;
GVariant *var = NULL;
const char *ssid = NULL;
+ int ssid_len = 0;
GVariant *return_parameters = NULL;
int ret;
if (oem_conf && oem_conf->group_operating_freq != 0)
param.freq = oem_conf->group_operating_freq;
- if (ssid != NULL)
- g_strlcpy(param.ssid, ssid, WIFI_DIRECT_MAX_DEVICE_NAME_LEN+1);
+ if (ssid != NULL) {
+ ssid_len = strlen(ssid);
+ if (ssid_len < WIFI_DIRECT_MIN_SSID_LEN || ssid_len > WIFI_DIRECT_MAX_SSID_LEN) {
+ WDS_LOGE("SSID length incorrect [%s]:[%d], whereas [Proper SSID Length Range is 1-32 ]", ssid, ssid_len);
+ ret = WIFI_DIRECT_ERROR_INVALID_PARAMETER;
+ g_variant_iter_free(iter);
+ return_parameters = g_variant_new("(i)", ret);
+ wfd_manager_dbus_reply_params((GDBusMethodInvocation *)dest, return_parameters);
+ __WDS_LOG_FUNC_EXIT__;
+ return;
+ }
+
+ g_strlcpy(param.ssid, ssid, WIFI_DIRECT_MAX_SSID_LEN+1);
+ }
g_variant_iter_free(iter);
return;
}
+void get_go_intent_per_type_handler(GVariant *parameters, void *dest)
+{
+ __WDS_LOG_FUNC_ENTER__;
+ GVariant *return_parameters = NULL;
+ int go_intent = 0;
+ int type;
+ int ret;
+
+ g_variant_get(parameters, "(i)", &type);
+ ret = wfd_manager_get_go_intent_per_type(type, &go_intent);
+ if (ret < 0)
+ WIFI_DIRECT_METHOD_RET_ERR(WIFI_DIRECT_ERROR_OPERATION_FAILED, dest);
+
+ ret = WIFI_DIRECT_ERROR_NONE;
+ return_parameters = g_variant_new("(ii)", ret, go_intent);
+ wfd_manager_dbus_reply_params((GDBusMethodInvocation *)dest, return_parameters);
+
+ __WDS_LOG_FUNC_EXIT__;
+ return;
+}
+
+void set_go_intent_per_type_handler(GVariant *parameters, void *dest)
+{
+ __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
+ GVariant *return_parameters = NULL;
+ int go_intent = 0;
+ int type;
+ int ret;
+
+ g_variant_get(parameters, "(ii)", &type, &go_intent);
+ ret = wfd_manager_set_go_intent_per_type(type, go_intent);
+ if (ret < 0)
+ WIFI_DIRECT_METHOD_RET_ERR(WIFI_DIRECT_ERROR_OPERATION_FAILED, dest);
+
+ ret = WIFI_DIRECT_ERROR_NONE;
+ return_parameters = g_variant_new("(i)", ret);
+ wfd_manager_dbus_reply_params((GDBusMethodInvocation *)dest, return_parameters);
+
+ __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
+ return;
+}
+
void get_max_client_handler(GVariant *parameters, void *dest)
{
__WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
return;
}
+void get_wps_config_method_handler(GVariant *parameter, void *dest)
+{
+ __WDS_LOG_FUNC_ENTER__;
+ wfd_manager_s *manager = wfd_get_manager();
+ GVariant *return_parameters = NULL;
+ int wps_mode = 0;
+ int ret;
+
+ WIFI_DIRECT_METHOD_RET_IF_NULL(manager);
+
+ wfd_oem_get_supported_wps_mode(manager->oem_ops, &wps_mode);
+ WDS_LOGD("Requested wps mode [0x%x]", wps_mode);
+
+ ret = WIFI_DIRECT_ERROR_NONE;
+ return_parameters = g_variant_new("(ii)", ret, wps_mode);
+ wfd_manager_dbus_reply_params((GDBusMethodInvocation *)dest, return_parameters);
+
+ __WDS_LOG_FUNC_EXIT__;
+ return;
+}
+
+void set_wps_config_method_handler(GVariant *parameter, void *dest)
+{
+ __WDS_LOG_FUNC_ENTER__;
+ wfd_manager_s *manager = wfd_get_manager();
+ GVariant *return_parameters = NULL;
+ int wps_mode = 0;
+ int ret;
+
+ WIFI_DIRECT_METHOD_RET_IF_NULL(manager);
+
+ if (manager->state < WIFI_DIRECT_STATE_ACTIVATED)
+ WIFI_DIRECT_METHOD_RET_ERR(WIFI_DIRECT_ERROR_NOT_PERMITTED, dest);
+
+ g_variant_get(parameter, "(i)", &wps_mode);
+ WDS_LOGD("Requested wps mode [0x%x]", wps_mode);
+ wfd_oem_set_supported_wps_mode(manager->oem_ops, wps_mode);
+
+ ret = WIFI_DIRECT_ERROR_NONE;
+ return_parameters = g_variant_new("(i)", ret);
+ wfd_manager_dbus_reply_params((GDBusMethodInvocation *)dest, return_parameters);
+
+ __WDS_LOG_FUNC_EXIT__;
+ return;
+}
+
void srv_start_discovery_handler(GVariant *parameters, void *dest)
{
__WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
__WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
return;
}
+
+void remove_persistent_device_handler(GVariant *parameters, void *dest)
+{
+ __WDS_LOG_FUNC_ENTER__;
+ wfd_manager_s *manager = wfd_get_manager();
+ GVariant *return_parameters = NULL;
+ gchar *mac_address;
+ unsigned char peer_mac_address[6];
+ int ret;
+
+ WIFI_DIRECT_METHOD_RET_IF_NULL(manager);
+
+ if (manager->state < WIFI_DIRECT_STATE_ACTIVATED)
+ WIFI_DIRECT_METHOD_RET_ERR(WIFI_DIRECT_ERROR_NOT_PERMITTED, dest);
+
+ g_variant_get(parameters, "(&s)", &mac_address);
+ if (mac_address == NULL)
+ WIFI_DIRECT_METHOD_RET_ERR(WIFI_DIRECT_ERROR_INVALID_PARAMETER, dest);
+
+ macaddr_atoe(mac_address, peer_mac_address);
+ WDS_LOGD("Remove persistent device [" MACSTR "]", MAC2STR(peer_mac_address));
+
+ ret = wfd_oem_remove_persistent_device(manager->oem_ops, peer_mac_address);
+ if (ret < 0)
+ WIFI_DIRECT_METHOD_RET_ERR(WIFI_DIRECT_ERROR_OPERATION_FAILED, dest);
+
+ return_parameters = g_variant_new("(i)", ret);
+ wfd_manager_dbus_reply_params((GDBusMethodInvocation *)dest, return_parameters);
+
+ __WDS_LOG_FUNC_EXIT__;
+ return;
+}
+
+void remove_all_persistent_device_handler(GVariant *parameters, void *dest)
+{
+ __WDS_LOG_FUNC_ENTER__;
+ wfd_manager_s *manager = wfd_get_manager();
+ GVariant *return_parameters = NULL;
+ int ret;
+
+ WIFI_DIRECT_METHOD_RET_IF_NULL(manager);
+
+ if (manager->state < WIFI_DIRECT_STATE_ACTIVATED)
+ WIFI_DIRECT_METHOD_RET_ERR(WIFI_DIRECT_ERROR_NOT_PERMITTED, dest);
+
+ ret = wfd_oem_remove_all_persistent_device(manager->oem_ops);
+ if (ret < 0)
+ WIFI_DIRECT_METHOD_RET_ERR(WIFI_DIRECT_ERROR_OPERATION_FAILED, dest);
+
+ ret = WIFI_DIRECT_ERROR_NONE;
+ return_parameters = g_variant_new("(i)", ret);
+ wfd_manager_dbus_reply_params((GDBusMethodInvocation *)dest, return_parameters);
+
+ __WDS_LOG_FUNC_EXIT__;
+ return;
+}
if (peer->dev_role == WFD_DEV_ROLE_GO || session->type == SESSION_TYPE_INVITE)
param.conn_flags |= WFD_OEM_CONN_TYPE_JOIN;
param.go_intent = session->go_intent;
+ if (peer->display.availability)
+ param.go_intent = manager->go_intent_per_type[manager->local->display.type];
param.freq = session->freq;
if (manager->local->group_flags & WFD_GROUP_FLAG_PERSISTENT)
param.conn_flags |= WFD_OEM_CONN_TYPE_PERSISTENT;