学习《apache源代码全景分析》之常用过滤器摘录
1.目前核心輸入過濾器和核心輸出過濾器包括以下幾種:
? a.CHUNK編碼過濾器;
? b.CORE_IN過濾器;
? c.CORE_OUT過濾器;
? d.Byterange過濾器;
2.輸入過濾器
? ?(1) CORE_IN?
? ?(2) LOG_INPUT_OUTPUT
? ?(3) SSL/TLS Filter
? ?(4) HTTP_IN
? ?(5) DEFLATE
? ?(6) XLATEIN_FILTER_NAME
?3.HTTP連接上的過濾器(注意:請求點在A點)
? ?
??
4.CORE_IN過濾器的上下文是在掛鉤pre_connection中實現(xiàn)的。
5.HTTP_INde上下文結構用http_ctx_t描述:
typedef struct http_filter_ctx {apr_off_t remaining;apr_off_t limit;apr_off_t limit_used;enum {BODY_NONE,//請求中不包括任何的請求體BODY_LENGTH, //請求中包含報文體BODY_CHUNK, //請求中包含請求體,并且報文采用Chunk編碼BODY_CHUNK_PART} state;int eos_sent;char chunk_in[32];char *pos;apr_off_t linesize;apr_bucket_brigade *bb; //過濾器每次讀取的數(shù)據(jù)都保存在存儲段組bb中 } http_ctx_t;6.
7.BODY_LENGTH
? ?不管對于BODY_LENGTH還是BODY_CHUNK,任何時候只要發(fā)現(xiàn)eos_sent被設置,則意味著已經(jīng)達到了報文體的最后,此時將在存儲段組中插入一個EOS存儲段標記結束。
? ?ctx->remaining中記錄了剩余的要讀取的報文字節(jié)數(shù)目,如果ctx->remaining為0,則意味著讀取數(shù)據(jù)已經(jīng)完畢,此時插入一個EOS存儲段。如果ctx->remaining>0,則意味著還有數(shù)據(jù)要讀取,那么讀取流程將繼續(xù)。
? ?readbytes是要讀取的報文體數(shù)據(jù),如果實際剩余的數(shù)據(jù)已經(jīng)不足readbytes,那么調整readbytes,并且調用ap_get_brigade從網(wǎng)絡中讀取。實際讀取的數(shù)據(jù)長度保存在變量totalread中,同時剩余的可讀取數(shù)據(jù)ctx->remaining遞減totalread.
8.Apache中提供的輸出過濾器層次
? ??
?
總結
以上是生活随笔為你收集整理的学习《apache源代码全景分析》之常用过滤器摘录的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 学习《apache源代码全景分析》之存储
- 下一篇: 内核中用于数据接收的结构体struct