前面講了lighttpd插件系統(tǒng)的加載和初始化现斋,這一篇中便锨,將介紹一下plugin.c中的宏P(guān)LUGIN_TO_SLOT亿昏。
在將PLUGIN_TO_SLOT宏之前浑测,我們先來看看lighttpd中插件系統(tǒng)的對外接口。這個(gè)接口所對的“外”指的是lighttpd服務(wù)器赎败。前面已經(jīng)提到秕衙,在運(yùn)行的過程中,lighttpd不知道所加載的插件都是干什么用的僵刮,只知道這些插件所實(shí)現(xiàn)的接口据忘,也就是在plugin結(jié)構(gòu)體中那些函數(shù)指針有哪些對于某個(gè)插件是NULL,哪些是具體的函數(shù)地址搞糕。
既然lighttpd只知道這些勇吊,那么它又是怎樣調(diào)用這些插件的呢?
答案就在plugin.h文件中的下面一系列函數(shù)聲明:
handler_t plugins_call_handle_uri_raw(server * srv, connection * con);
handler_t plugins_call_handle_uri_clean(server * srv,connection * con);
handler_t plugins_call_handle_subrequest_start(server * srv,connection * con);
handler_t plugins_call_handle_subrequest(server * srv,connection * con);
handler_t plugins_call_handle_request_done(server * srv,connection * con);
handler_t plugins_call_handle_docroot(server * srv,connection * con);
handler_t plugins_call_handle_physical(server * srv,connection * con);
handler_t plugins_call_handle_connection_close(server * srv,connection * con);
handler_t plugins_call_handle_joblist(server * srv,connection * con);
handler_t plugins_call_connection_reset(server * srv,connection * con);
handler_t plugins_call_handle_trigger(server * srv);
handler_t plugins_call_handle_sighup(server * srv);
handler_t plugins_call_init(server * srv);
handler_t plugins_call_set_defaults(server * srv);
handler_t plugins_call_cleanup(server * srv);
這些函數(shù)就是插件系統(tǒng)對外的接口窍仰。在運(yùn)行過程中汉规,lighttpd靠調(diào)用上面的這些函數(shù)調(diào)用插件。比如:在server.c的main函數(shù)中驹吮,就調(diào)用了plugins_call_set_defaults函數(shù):
if (HANDLER_GO_ON != plugins_call_set_defaults(srv))
{
log_error_write(srv, __FILE__, __LINE__, "s",
"Configuration of plugins failed. Going down.");
plugins_free(srv);
network_close(srv);
server_free(srv);
return -1;
}
......本站只呈現(xiàn)部分內(nèi)容针史,查看完整文章請到WiFiDog官網(wǎng)社區(qū) http://www.wifidog.pro/2015/04/17/wifidog%E6%BA%90%E7%A0%81%E5%88%86%E6%9E%90lighttpd%E6%8F%92%E4%BB%B6%E5%AE%8F%E5%AE%9A%E4%B9%89.html,轉(zhuǎn)載請注明出處