上一節(jié)提到httpdAddC404Content 及它的回調(diào)函數(shù),還有相應(yīng)的流程堡掏,只是講解功能应结,并不是指注冊了回調(diào)函數(shù)就可以執(zhí)行回調(diào)函數(shù)了,而是要等客戶端觸發(fā)回調(diào)函數(shù)才執(zhí)行。下面接著講解其他部分鹅龄。
fw_destroy(), 清掉和wifidog 有關(guān)的iptables 規(guī)則揩慕,這里不細說。
fw_init(), 添加wifidog 相關(guān)的iptables 鏈及規(guī)則扮休,這里的規(guī)則主要是wifidog.conf 里設(shè)置的firewall rule set, global/validating-users/known-users/unknown-users/locked-users迎卤,這里unknown-users 默認的四條關(guān)于53/67 port 的allow 規(guī)則需要打開。除了.conf里的玷坠,還有認證服務(wù)器也會被加入白名單蜗搔,以使得客戶端能夠正常和認證服務(wù)器交互。
接下來八堡,wifidog 會創(chuàng)建幾個線程樟凄,注意,wifidog 是多線程運行不是fork 子進程:
1兄渺,超時檢查線程:函數(shù)thread_client_timeout_check缝龄;
2,ping協(xié)議線程:函數(shù)thread_ping溶耘;
3二拐,和wdctl 交互的線程,wdctl 是控制wifidog 結(jié)束凳兵,重啟的程序,這里不細說企软;
4庐扫,httpd處理線程,函數(shù)thread_httpd仗哨,這個線程是在一個while 死循環(huán)里接受http 連接然后處理連接的線程形庭,可以讀取http 請求的具體內(nèi)容,主要調(diào)用了兩個函數(shù)httpdReadRequest/httpdProcessRequest厌漂,讀取和處理http 請求萨醒。
我們主要來講解下超時檢查和ping 協(xié)議線程.
1) 函數(shù)thread_client_timeout_check 調(diào)用了fw_sync_with_authserver,其他部分代碼是線程鎖苇倡,我們只需要關(guān)注fw_sync_with_authserver 函數(shù)富纸。
fw_sync_with_authserver 函數(shù)功能:網(wǎng)關(guān)每隔config.checkinterval 時間檢查,把所有客戶端鏈表的信息發(fā)送給認證服務(wù)器進行流量更新旨椒,并且計算每一個客戶端距離上次認證成功之后所經(jīng)過的時間晓褪,如果距離上次認證成功經(jīng)過的時間超過config.checkinterval * config.clienttimeout,即認為已經(jīng)超時综慎,網(wǎng)關(guān)會發(fā)送此客戶端的logout 通知認證服務(wù)器涣仿,并將此客戶端的iptables 白名單移除,客戶端需要重新認證。
2) 函數(shù)thread_ping 調(diào)用ping 函數(shù)好港。
ping()函數(shù)功能:網(wǎng)關(guān)定時發(fā)送Ping 協(xié)議包通知認證服務(wù)器證明自己是活的愉镰,發(fā)包的時間間隔也是config.checkinterval, ping協(xié)議格式:http://auth_server/ping/?gw_id=xxx&sys_uptime=xxx&sys_memfree&sys_load=xxx&wifidog_uptime=xxx,這些都是網(wǎng)關(guān)的參數(shù)钧汹,和客戶端沒有的關(guān)系岛杀。
本文由http://www.wifidog.pro/2014/12/09/wifidog%E4%BB%A3%E7%A0%81%E5%88%86%E6%9E%90-1.html整理編輯,轉(zhuǎn)載請注明出處