10Sigor@sysoev.ru 20Sigor@sysoev.ru /* 384Smax.romanov@nginx.com * Copyright (C) Max Romanov 40Sigor@sysoev.ru * Copyright (C) Valentin V. Bartenev 50Sigor@sysoev.ru * Copyright (C) NGINX, Inc. 60Sigor@sysoev.ru */ 70Sigor@sysoev.ru 80Sigor@sysoev.ru #ifndef _NXT_APPLICATION_H_INCLUDED_ 90Sigor@sysoev.ru #define _NXT_APPLICATION_H_INCLUDED_ 100Sigor@sysoev.ru 110Sigor@sysoev.ru 12678Svbart@nginx.com #include <nxt_conf.h> 13678Svbart@nginx.com 14*743Smax.romanov@nginx.com #include <nxt_unit_typedefs.h> 15*743Smax.romanov@nginx.com 16678Svbart@nginx.com 17133Sigor@sysoev.ru typedef enum { 18141Smax.romanov@nginx.com NXT_APP_PYTHON, 19133Sigor@sysoev.ru NXT_APP_PHP, 20133Sigor@sysoev.ru NXT_APP_GO, 21510Salexander.borisov@nginx.com NXT_APP_PERL, 22584Salexander.borisov@nginx.com NXT_APP_RUBY, 23141Smax.romanov@nginx.com 24216Sigor@sysoev.ru NXT_APP_UNKNOWN, 25133Sigor@sysoev.ru } nxt_app_type_t; 26133Sigor@sysoev.ru 27133Sigor@sysoev.ru 28216Sigor@sysoev.ru typedef struct nxt_app_module_s nxt_app_module_t; 29216Sigor@sysoev.ru 30216Sigor@sysoev.ru 31216Sigor@sysoev.ru typedef struct { 32356Svbart@nginx.com nxt_app_type_t type; 33354Svbart@nginx.com u_char *version; 34216Sigor@sysoev.ru char *file; 35*743Smax.romanov@nginx.com nxt_app_module_t *module; 36216Sigor@sysoev.ru } nxt_app_lang_module_t; 37216Sigor@sysoev.ru 38216Sigor@sysoev.ru 39141Smax.romanov@nginx.com typedef struct nxt_common_app_conf_s nxt_common_app_conf_t; 40141Smax.romanov@nginx.com 41141Smax.romanov@nginx.com 42141Smax.romanov@nginx.com typedef struct { 43394Smax.romanov@nginx.com char *home; 44141Smax.romanov@nginx.com nxt_str_t path; 45141Smax.romanov@nginx.com nxt_str_t module; 46141Smax.romanov@nginx.com } nxt_python_app_conf_t; 47141Smax.romanov@nginx.com 48141Smax.romanov@nginx.com 49141Smax.romanov@nginx.com typedef struct { 50687Svbart@nginx.com char *root; 51687Svbart@nginx.com nxt_str_t script; 52687Svbart@nginx.com nxt_str_t index; 53687Svbart@nginx.com nxt_conf_value_t *options; 54141Smax.romanov@nginx.com } nxt_php_app_conf_t; 55141Smax.romanov@nginx.com 56141Smax.romanov@nginx.com 57141Smax.romanov@nginx.com typedef struct { 58685Svbart@nginx.com char *executable; 59685Svbart@nginx.com nxt_conf_value_t *arguments; 60141Smax.romanov@nginx.com } nxt_go_app_conf_t; 61141Smax.romanov@nginx.com 62141Smax.romanov@nginx.com 63510Salexander.borisov@nginx.com typedef struct { 64510Salexander.borisov@nginx.com char *script; 65510Salexander.borisov@nginx.com } nxt_perl_app_conf_t; 66510Salexander.borisov@nginx.com 67510Salexander.borisov@nginx.com 68584Salexander.borisov@nginx.com typedef struct { 69584Salexander.borisov@nginx.com nxt_str_t script; 70584Salexander.borisov@nginx.com } nxt_ruby_app_conf_t; 71584Salexander.borisov@nginx.com 72584Salexander.borisov@nginx.com 73141Smax.romanov@nginx.com struct nxt_common_app_conf_s { 74678Svbart@nginx.com nxt_str_t name; 75678Svbart@nginx.com nxt_str_t type; 76678Svbart@nginx.com nxt_str_t user; 77678Svbart@nginx.com nxt_str_t group; 78141Smax.romanov@nginx.com 79678Svbart@nginx.com char *working_directory; 80678Svbart@nginx.com nxt_conf_value_t *environment; 81271Smax.romanov@nginx.com 82141Smax.romanov@nginx.com union { 83141Smax.romanov@nginx.com nxt_python_app_conf_t python; 84141Smax.romanov@nginx.com nxt_php_app_conf_t php; 85141Smax.romanov@nginx.com nxt_go_app_conf_t go; 86510Salexander.borisov@nginx.com nxt_perl_app_conf_t perl; 87584Salexander.borisov@nginx.com nxt_ruby_app_conf_t ruby; 88141Smax.romanov@nginx.com } u; 89141Smax.romanov@nginx.com }; 90141Smax.romanov@nginx.com 91141Smax.romanov@nginx.com 920Sigor@sysoev.ru typedef struct { 930Sigor@sysoev.ru nxt_str_t method; 94112Smax.romanov@nginx.com nxt_str_t target; 95112Smax.romanov@nginx.com nxt_str_t version; 960Sigor@sysoev.ru nxt_str_t path; 9784Smax.romanov@nginx.com nxt_str_t query; 9884Smax.romanov@nginx.com 9984Smax.romanov@nginx.com nxt_list_t *fields; 1000Sigor@sysoev.ru 10184Smax.romanov@nginx.com nxt_str_t cookie; 10284Smax.romanov@nginx.com nxt_str_t content_length; 10384Smax.romanov@nginx.com nxt_str_t content_type; 10484Smax.romanov@nginx.com nxt_str_t host; 10584Smax.romanov@nginx.com 10684Smax.romanov@nginx.com off_t parsed_content_length; 10784Smax.romanov@nginx.com nxt_bool_t done; 108206Smax.romanov@nginx.com 109206Smax.romanov@nginx.com size_t bufs; 110206Smax.romanov@nginx.com nxt_buf_t *buf; 1110Sigor@sysoev.ru } nxt_app_request_header_t; 1120Sigor@sysoev.ru 1130Sigor@sysoev.ru 1140Sigor@sysoev.ru typedef struct { 115206Smax.romanov@nginx.com size_t preread_size; 11684Smax.romanov@nginx.com nxt_bool_t done; 117206Smax.romanov@nginx.com 118206Smax.romanov@nginx.com nxt_buf_t *buf; 11984Smax.romanov@nginx.com } nxt_app_request_body_t; 1200Sigor@sysoev.ru 1210Sigor@sysoev.ru 12284Smax.romanov@nginx.com typedef struct { 1230Sigor@sysoev.ru nxt_app_request_header_t header; 12484Smax.romanov@nginx.com nxt_app_request_body_t body; 125113Smax.romanov@nginx.com 126113Smax.romanov@nginx.com nxt_str_t remote; 127268Sigor@sysoev.ru nxt_str_t local; 1280Sigor@sysoev.ru } nxt_app_request_t; 1290Sigor@sysoev.ru 1300Sigor@sysoev.ru 131431Sigor@sysoev.ru typedef struct nxt_app_parse_ctx_s nxt_app_parse_ctx_t; 132163Smax.romanov@nginx.com 133*743Smax.romanov@nginx.com 134163Smax.romanov@nginx.com struct nxt_app_parse_ctx_s { 13584Smax.romanov@nginx.com nxt_app_request_t r; 136431Sigor@sysoev.ru nxt_http_request_t *request; 137431Sigor@sysoev.ru nxt_timer_t timer; 138615Smax.romanov@nginx.com void *timer_data; 13984Smax.romanov@nginx.com nxt_http_request_parse_t parser; 140431Sigor@sysoev.ru nxt_http_request_parse_t resp_parser; 14184Smax.romanov@nginx.com nxt_mp_t *mem_pool; 142163Smax.romanov@nginx.com }; 14384Smax.romanov@nginx.com 14484Smax.romanov@nginx.com 14584Smax.romanov@nginx.com nxt_int_t nxt_app_http_req_done(nxt_task_t *task, nxt_app_parse_ctx_t *ctx); 14684Smax.romanov@nginx.com 14784Smax.romanov@nginx.com 148216Sigor@sysoev.ru struct nxt_app_module_s { 149258Sigor@sysoev.ru size_t compat_length; 150258Sigor@sysoev.ru uint32_t *compat; 151258Sigor@sysoev.ru 152216Sigor@sysoev.ru nxt_str_t type; 153612Salexander.borisov@nginx.com const char *version; 154141Smax.romanov@nginx.com 155141Smax.romanov@nginx.com nxt_int_t (*init)(nxt_task_t *task, 156141Smax.romanov@nginx.com nxt_common_app_conf_t *conf); 157141Smax.romanov@nginx.com }; 1580Sigor@sysoev.ru 1590Sigor@sysoev.ru 160216Sigor@sysoev.ru nxt_app_lang_module_t *nxt_app_lang_module(nxt_runtime_t *rt, nxt_str_t *name); 161510Salexander.borisov@nginx.com nxt_app_type_t nxt_app_parse_type(u_char *p, size_t length); 162216Sigor@sysoev.ru 163*743Smax.romanov@nginx.com NXT_EXPORT extern nxt_str_t nxt_server; 164*743Smax.romanov@nginx.com extern nxt_app_module_t nxt_go_module; 165*743Smax.romanov@nginx.com 166*743Smax.romanov@nginx.com NXT_EXPORT nxt_int_t nxt_unit_default_init(nxt_task_t *task, 167*743Smax.romanov@nginx.com nxt_unit_init_t *init); 168216Sigor@sysoev.ru 169216Sigor@sysoev.ru 1700Sigor@sysoev.ru #endif /* _NXT_APPLICATION_H_INCLIDED_ */ 171