openwrt luci學習記錄1--啓動流程

uhttpd在整體的架構中,負責與客戶端進行通信,有關的相關解析,都在程序中cgi部分實現,例如解析與組裝http的格式,調用相應的腳本文件。其具體關係如下圖所示

 

相應的uhttp配置

 

這裏通過解析url_prefix確定去執行那種方式,在我們使用的系統中使用的cgi_prefix,當相應的url包含/cgi-bin時,就去執行相應的腳本程序。

 

cgi程序的作用

CGI即通用網關接口,是外部應用程序(即CGI程序)與WEB服務器之間的接口標準,負責在CGI程序和Web服務器之間傳遞信息。

下圖中的r = luci.http.Request(…)函數主要的作用是用來獲取客戶端提交的信息如圖1 圖2 所示

其中luci.dispather.httpdispatch(…)函數,主要用來解析相應的http指令,執行相應的腳本,同時組建http相關的幀

res爲協同程序的狀態

id=1,響應消息比如200OK

id爲2,3組建相應的消息頭部,http的格式裏的 如圖3所示

id爲4時,是向uhttpd發送相關的html代碼  如圖4所示

id爲5時,刷新緩衝區

io.write(…)是向uhttpd服務器發送信息

httpdispatch部分函數的解析

當訪問登錄成功時,會跳轉到下面這個頁面

 

 

通過對上面的打印信息,可以發現進入的是'/admin/network/mwan/overview/interface_status'這個頁面,進入相應的文件夾下打開相應的html文件

 

 

 

當調用這個函數時,會爲傳遞的參數(一個函數)再建立一個協程,當協程中的協程yield時,會遞歸的把上一級直到dispatch這個協程yield

 

在dispatch(…)函數中,最關鍵的部分

 

 

 

這部分代碼將\lua\luci\controller下的所有的腳本文件存放在index表中

表中存放的是相應的lua的名稱,和裏面對應的index的函數,再將所有腳本設置爲可執行狀態

 

在回到createtree函數中,遍歷index表,將所有的lua腳本運行起來,所以開始設置的頁面就在這個文件里加載起來了。

entry函數就會生成一個node-tree,父節點的nodes會記錄它的子節點

 

request是輸入url,根據這個找到相應的nodes。最後將nodes對應的target使用copcall運行

 

 

target主要是cbi、template、call這些返回的都是table,firstchildred、alias返回的是函數

 

_cbi調用cbi.load函數,加載運行

 

剩下的還在研究……

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章