/* * Copyright (C) Yichun Zhang (agentzh) */ #ifndef NGX_HTTP_ECHO_UTIL_H #define NGX_HTTP_ECHO_UTIL_H #include "ngx_http_echo_module.h" #define ngx_http_echo_strcmp_const(a, b) \ ngx_strncmp(a, b, sizeof(b) - 1) #define ngx_http_echo_hash_literal(s) \ ngx_http_echo_hash_str((u_char *) s, sizeof(s) - 1) static ngx_inline ngx_uint_t ngx_http_echo_hash_str(u_char *src, size_t n) { ngx_uint_t key; key = 0; while (n--) { key = ngx_hash(key, *src); src++; } return key; } extern ngx_uint_t ngx_http_echo_content_length_hash; ngx_http_echo_ctx_t *ngx_http_echo_create_ctx(ngx_http_request_t *r); ngx_int_t ngx_http_echo_eval_cmd_args(ngx_http_request_t *r, ngx_http_echo_cmd_t *cmd, ngx_array_t *computed_args, ngx_array_t *opts); ngx_int_t ngx_http_echo_send_header_if_needed(ngx_http_request_t *r, ngx_http_echo_ctx_t *ctx); ngx_int_t ngx_http_echo_send_chain_link(ngx_http_request_t *r, ngx_http_echo_ctx_t *ctx, ngx_chain_t *cl); ssize_t ngx_http_echo_atosz(u_char *line, size_t n); u_char *ngx_http_echo_strlstrn(u_char *s1, u_char *last, u_char *s2, size_t n); ngx_int_t ngx_http_echo_post_request_at_head(ngx_http_request_t *r, ngx_http_posted_request_t *pr); u_char *ngx_http_echo_rebase_path(ngx_pool_t *pool, u_char *src, size_t osize, size_t *nsize); ngx_int_t ngx_http_echo_flush_postponed_outputs(ngx_http_request_t *r); #endif /* NGX_HTTP_ECHO_UTIL_H */