/*****************************************************************************************************************
Document Author : ELvins Fu
Digtal technology park, A3 -06 , shenzhen, China
*************************************************************************************************************/
1.
多语言
1
)检查:
opkg list | grep luci-i18n-
2
)安装语言包:
opkg install luci-i18n-hungarian
2.uhttpd
这个是LuCI所在的Web Server。docroot在/www下边,index-html指向了/cgi-bin/luci,注意这是相对于docroot而言的路径。
openwrt
中利用它作为
web
服务器,实现客户端
web
页面配置功能。对于
request
处理方式,采用的是
cgi
,而所用的
cgi
程序就是
luci
。
1
)工作框架如下图所示:
Client
端和
serv
端采用
cgi
方式交互,
uhttpd
服务器的
cgi
方式中,
fork
出一个子进程,子进程利用
execl
替换为
luci
进程空间,并通过
setenv
环境变量的方式,传递一些固定格式的数据(如
PATH_INFO
)给
luci
。另外一些非固定格式的数据(
post-data
)则由父进程通过一个
w_pipe
写给
luci
的
stdin
,而
luci
的返回数据则写在
stdout
上,由父进程通过一个
r_pipe
读取。
2
)
luci
文件(权限一般是
755
)
,
luci
的代码如下:
#!/usr/bin/lua —
执行命令的路径
require”luci.cacheloader” —
导入
cacheloader
包
require”luci.sgi.cgi” —
导入
sgi.cgi
包
luci.dispatcher.indexcache = “/tmp/luci-indexcache” –cache
缓存路径地址
luci.sgi.cgi.run() —
执
行
run
方法,此方法位于
/usr/lib/lua/luci/sgi/cgi.lua
中
3
)
web
配置时的数据交互:
-
首次运行时,是以普通的
file
方式获得
docroot/index.html
,该文件中以
meta
的方式自动跳转到
cgi
的
url
,这是
web
服务器的一般做法。
-
然后第一次执行
luci
,
path_info=’/’
,会
alise
到
‘/admin’
(
‘/’
会索引到
tree.rootnode
,并执行其
target
方法,即
alise(‘/admin’)
,即重新去索引
adminnode
,这在后面会详细描述),该节点需要认证,所以返回一个登录界面。
-
第
3
次交互,过程同上一次的,只是这时已
post
来了登录信息,所以
serv
端会生成一个
session
值,然后执行
‘/admin’
的
target
(它的
target
为
firstchild
,即索引第一个子节点),最终返回
/admin/status.html
,同时会把
session
值以
cookie
的形式发给
client
。这就是从原始状态到得到显示页面的过程,之后主要就是点击页面上的连接,产生新的
request
。
-
每个链接的
url
中都会带有一个
stok
值(它是
serv
生成的,并放在
html
中的
url
里),并且每个新
request
都要带有
session
值,它和
stok
值一起供
serv
端联合认证。
初始阶段
http
报文,可以看到从第
2
次交互开始,所有
request
都是
cgi
方式(除一些
css
、
js
等
resource
文件外),且执行的
cgi
程序都是
luci
,只是带的参数不同,且即使所带参数相同(如都是