您的位置:首页 > 其它

wifi.c中函数分析: :::int wifi_connect_to_supplicant()

2011-11-16 11:19 555 查看
/* Make sure supplicant is running */

查看属性,保存在supp_status

判断是否运行:否返回-1

if (!property_get(SUPP_PROP_NAME, supp_status, NULL)

|| strcmp(supp_status, "running") != 0) {

LOGE("Supplicant not running, cannot connect");

return -1;

}

获得属性:wifi.interface值,保存在iface中
在该环境中:iface=wlan0

property_get("wifi.interface", iface, WIFI_TEST_INTERFACE);

判断文件IFACE_DIR = "/data/system/wpa_supplicant";是否存在,

存在:ifname="/data/system/wpa_supplicant/wlan0";

不存在:ifname=wlan0

if (access(IFACE_DIR, F_OK) == 0) {

snprintf(ifname, sizeof(ifname), "%s/%s", IFACE_DIR, iface);

} else {

strlcpy(ifname, iface, sizeof(ifname));

}

创建两个socket,并链接由ifname,生成的des.sun_path

ctrl_conn = wpa_ctrl_open(ifname);

monitor_conn = wpa_ctrl_open(ifname);

测试链接是否成功:

if (wpa_ctrl_attach(monitor_conn) != 0) {

wpa_ctrl_close(monitor_conn);

wpa_ctrl_close(ctrl_conn);

ctrl_conn = monitor_conn = NULL;

return -1;

}

return 0;

wpa_ctrl_open()

wpa_ctrl * wpa_ctrl_open(const char *ctrl_path)

在wifi.c中:传入参数

ctrl_path=ifname="/data/system/wpa_supplicant/wlan0";

也就是wpa_supplicant的soket。

如果定义android

则生成自己的soket文件路径组合如下:

%s/%s%d-%d", local_socket_dir, local_socket_prefix, getpid(), counter++);

其中:local_socket_dir= "/data/misc/wifi/sockets";

local_socket_prefix = "wpa_ctrl_";

在wpa_ctrl.c中定义。

生成后绑定本地soket文件,修改权限及所属组。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: