xref: /unit/src/nxt_application.h (revision 804)
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 
14743Smax.romanov@nginx.com #include <nxt_unit_typedefs.h>
15743Smax.romanov@nginx.com 
16678Svbart@nginx.com 
17133Sigor@sysoev.ru typedef enum {
18*804Svbart@nginx.com     NXT_APP_EXTERNAL,
19141Smax.romanov@nginx.com     NXT_APP_PYTHON,
20133Sigor@sysoev.ru     NXT_APP_PHP,
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;
35743Smax.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 {
43*804Svbart@nginx.com     char                       *executable;
44*804Svbart@nginx.com     nxt_conf_value_t           *arguments;
45*804Svbart@nginx.com } nxt_external_app_conf_t;
46*804Svbart@nginx.com 
47*804Svbart@nginx.com 
48*804Svbart@nginx.com typedef struct {
49394Smax.romanov@nginx.com     char       *home;
50141Smax.romanov@nginx.com     nxt_str_t  path;
51141Smax.romanov@nginx.com     nxt_str_t  module;
52141Smax.romanov@nginx.com } nxt_python_app_conf_t;
53141Smax.romanov@nginx.com 
54141Smax.romanov@nginx.com 
55141Smax.romanov@nginx.com typedef struct {
56687Svbart@nginx.com     char                       *root;
57687Svbart@nginx.com     nxt_str_t                  script;
58687Svbart@nginx.com     nxt_str_t                  index;
59687Svbart@nginx.com     nxt_conf_value_t           *options;
60141Smax.romanov@nginx.com } nxt_php_app_conf_t;
61141Smax.romanov@nginx.com 
62141Smax.romanov@nginx.com 
63141Smax.romanov@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 {
83*804Svbart@nginx.com         nxt_external_app_conf_t  external;
84*804Svbart@nginx.com         nxt_python_app_conf_t    python;
85*804Svbart@nginx.com         nxt_php_app_conf_t       php;
86*804Svbart@nginx.com         nxt_perl_app_conf_t      perl;
87*804Svbart@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 
133743Smax.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 
163743Smax.romanov@nginx.com NXT_EXPORT extern nxt_str_t  nxt_server;
164*804Svbart@nginx.com extern nxt_app_module_t      nxt_external_module;
165743Smax.romanov@nginx.com 
166743Smax.romanov@nginx.com NXT_EXPORT nxt_int_t nxt_unit_default_init(nxt_task_t *task,
167743Smax.romanov@nginx.com     nxt_unit_init_t *init);
168216Sigor@sysoev.ru 
169216Sigor@sysoev.ru 
1700Sigor@sysoev.ru #endif /* _NXT_APPLICATION_H_INCLIDED_ */
171