Apache中的挂钩剖析(2)[5]

[入库:2006年2月23日] [更新:2007年3月24日]

本文简介:

    return ok;
}
从展开的结果来看,ALL类型在对挂钩数组进行遍历调用的时候,即使调用的请求被“DECLINE”,调用也将继续;只有调用请求发生错误才返回该错误值,同时退出遍历。
(3)、AP_IMPLEMENT_HOOK_FIRST简称为FIRST类型,对于该类型Apache核心从头逐一遍历挂钩数组中所注册的挂钩函数,直到遇到一个能够完成所提交任务的函数或者发生错误为止。该宏的定义如下:
#define APR_IMPLEMENT_EXTERNAL_HOOK_RUN_FIRST(ns,link,ret,name,args_decl,args_use,decline) \
APR_IMPLEMENT_EXTERNAL_HOOK_BASE(ns,link,name) \
link##_DECLARE(ret) ns##_run_##name args_decl \
{ \
    ns##_LINK_##name##_t *pHook; \
    int n; \
    ret rv; \
\
    if(!_hooks.link_##name) \
     return decline; \
\
    pHook=(ns##_LINK_##name##_t *)_hooks.link_##name->elts; \
    for(n=0 ; n < _hooks.link_##name->nelts ; ++n) \
     { \
     rv=pHook[n].pFunc args_use; \
\
     if(rv != decline) \
         return rv; \
     } \
    return decline; \
}
quick_handler就是属于该类型的挂钩,其在config.c中定义如下:
AP_IMPLEMENT_HOOK_RUN_FIRST(int, quick_handler, (request_rec *r, int lookup),
                            (r, lookup), DECLINED)
该宏展开后的结果如下所示:
AP_DECLARE(ret) ap_run_quick_handler(request_rec *r, int lookup)
{
    ap_LINK_quick_handler_t  *pHook;
    int n;
    ret rv;
    if(!_hooks.link_quick_handler)
          return decline;
    pHook=(ap_LINK_quick_handler_t *)_hooks.link_quick_handler->elts;

本文关键:Apache中的挂钩剖析(2)
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top