10Sigor@sysoev.ru 20Sigor@sysoev.ru /* 30Sigor@sysoev.ru * Copyright (C) Igor Sysoev 40Sigor@sysoev.ru * Copyright (C) NGINX, Inc. 50Sigor@sysoev.ru */ 60Sigor@sysoev.ru 70Sigor@sysoev.ru #ifndef _NXT_SOURCE_H_INCLUDED_ 80Sigor@sysoev.ru #define _NXT_SOURCE_H_INCLUDED_ 90Sigor@sysoev.ru 100Sigor@sysoev.ru 110Sigor@sysoev.ru /* 120Sigor@sysoev.ru * A source handler should store a pointer to a passed source hook, but not 130Sigor@sysoev.ru * the hook's values themselves, because a source filter may change the values. 140Sigor@sysoev.ru */ 150Sigor@sysoev.ru typedef struct { 160Sigor@sysoev.ru void *context; 170Sigor@sysoev.ru nxt_work_handler_t filter; 180Sigor@sysoev.ru } nxt_source_hook_t; 190Sigor@sysoev.ru 200Sigor@sysoev.ru 210Sigor@sysoev.ru typedef void (*nxt_source_handler_t)(void *source_context, 220Sigor@sysoev.ru nxt_source_hook_t *query); 230Sigor@sysoev.ru 240Sigor@sysoev.ru 25*2084Salx.manpages@gmail.com #define nxt_source_filter(thr, wq, task, next, out) \ 260Sigor@sysoev.ru do { \ 270Sigor@sysoev.ru if (thr->engine->batch != 0) { \ 280Sigor@sysoev.ru nxt_thread_work_queue_add(thr, wq, nxt_source_filter_handler, \ 291Sigor@sysoev.ru task, next, out); \ 300Sigor@sysoev.ru \ 310Sigor@sysoev.ru } else { \ 321Sigor@sysoev.ru (next)->filter(task, (next)->context, out); \ 330Sigor@sysoev.ru } \ 340Sigor@sysoev.ru \ 350Sigor@sysoev.ru } while (0) 360Sigor@sysoev.ru 370Sigor@sysoev.ru 381Sigor@sysoev.ru NXT_EXPORT void nxt_source_filter_handler(nxt_task_t *task, void *obj, 390Sigor@sysoev.ru void *data); 400Sigor@sysoev.ru 410Sigor@sysoev.ru 420Sigor@sysoev.ru #endif /* _NXT_SOURCE_H_INCLUDED_ */ 43