WPA_GUI=QT+WPA_SUPPLICANT

WPA_GUI=QT+WPA_SUPPLICANT
WPA_GUI=QT+WPA_SUPPLICANT

QT + WPA_SUPPLICANT ANALYSIS

wpa_gui是一个基于wpa_supplicant的无线连接管理工具,其实质就是为wpa_supplicant利用QT机制提供了一个交互的用户界面,其实际的功能由底层的wpa_supplicant实现.实现了前台程序和后台程序相分离.

前台的用户界面和后台的wpa_supplicant交互的方式是基于数据报文的(即利用socket).wpa_supplicant在头文件wpa_ctrl.h中提供了一套函数接口,来供前台的应用程序调用来实现交互,以及宏定义的事件消

息.wpa_supplicant通过向用户界面程序发送事先定义好的事件消息,而用户界面应用程序就根据发送过来的事件消息来确定下一步将要执行何种动作.

用宏定义的事件消息

wpa_supplicant提供的一套函数接口

在与wpa_supplicant交互前,首先要使用wpa_supplicant的接口来建立连接,到指定目录下去寻找socket文件(默认的目录是/var/run/wpa_supplicant),一旦找到,就建立连接,一般的会建立两个连接,一个用于发送命令的,另一个用于监视状态的变化,即在头文件wpagui.h中声明的变量,monitor_conn和

ctrl_conn.

在用户界面主要是通过在各个相应函数中调用ctrlRequest(const char *cmd, char *buf, size_t *buflen)函数向wpa_supplicant发送各种命令,(使用的是ctrl_conn),其实进一步通过调用wpa_ctrl_request()函数向

wpa_supplicant发送命令.在发送各命令之前,首先要通过调用

openCtrlConnection(const char *ifname)函数来建立与wpa_supplicant的连接后才能发送各种命令.

用户界面的各种控件都是通过调用wpa_ctrl_request()来发送命令的如下所示A.扫描按钮scanButton:

通过单击该按钮触发scan()函数的执行,在scan()函数中调用setWpaGui(),然后在该函数中调用updateResults()来更新搜索

的结果,接着在该函数中调用ctrlRequest()函数来向wpa_supplicant发送命令,并将wpa_supplicant反馈回来的信息放在了reply中带回.紧接着在ctrlRequest()函数中又调用了wpa_ctrl_request()函数来向wpa_supplicant 发送控制命令.在wpa_ctrl_request()函数中通过调用send()函数发送命令请求,然后调用select()函数以阻塞的方式监听读的文件描述符,一旦监听到就调

B.编辑(配置)按钮editNetworkButton :

单击该按钮,将触发调用editListedNetwork()

函数

,在该函数中调用editNetwork()来配置某一网络,向wpa_supplicant 发送GET_NETWORK 命令

单击该按钮将调用addNetWork()函数,在该函数中继而又调用

newNetworkl()函数,在该函数中又调用了getEapCapa()函数在该函数体内又调用了ctrlRequest()函数来向wap_supplicant 来发送命令请求

D.连接按钮connectionButton:

当单击该按钮时,触发connectB()函数,在该函数内又调用ctrlRequest()函数发送REASSOCIATE 命令给wpa_supplicant

E.取消连接按钮disconnectButton

当单击该按钮时,触发disconnect()函数,最终通过调用

wpa_ctrl_request()函数向wpa_supplicant发送DISCONNECT命令来断开连接

G.更新搜索到的网络列表(LIST_NETWORKS)

H.选择网络selectNetwork

I.在选中(添加)的网络列表中删除某一网络removeNetwork

J.使某一网络的配置参数可用enableNetwork

K.使某一网络的配置参数不可用disableNetwork

L.保存某一网络的配置saveConfig其实配置一个网络,在过程中都是在

M.添加接口interfaceSelected

N.scanButton按钮在调用ScanResults构造函数的时候,关联了scanRequest()函数,当有按Scan按钮时该函数执行并向wpa_supplicant发送SCAN命令

对于Scan按钮来说,当按下该按钮时,不止触发一个动作

对于后台的wpa_supplicant来说

相关主题
相关文档
最新文档