xref: /unit/src/nxt_application.h (revision 977:4f9268f27b57)
1 
2 /*
3  * Copyright (C) Max Romanov
4  * Copyright (C) Valentin V. Bartenev
5  * Copyright (C) NGINX, Inc.
6  */
7 
8 #ifndef _NXT_APPLICATION_H_INCLUDED_
9 #define _NXT_APPLICATION_H_INCLUDED_
10 
11 
12 #include <nxt_conf.h>
13 
14 #include <nxt_unit_typedefs.h>
15 
16 
17 typedef enum {
18     NXT_APP_EXTERNAL,
19     NXT_APP_PYTHON,
20     NXT_APP_PHP,
21     NXT_APP_PERL,
22     NXT_APP_RUBY,
23     NXT_APP_JAVA,
24 
25     NXT_APP_UNKNOWN,
26 } nxt_app_type_t;
27 
28 
29 typedef struct nxt_app_module_s  nxt_app_module_t;
30 
31 
32 typedef struct {
33     nxt_app_type_t            type;
34     u_char                    *version;
35     char                      *file;
36     nxt_app_module_t          *module;
37 } nxt_app_lang_module_t;
38 
39 
40 typedef struct nxt_common_app_conf_s nxt_common_app_conf_t;
41 
42 
43 typedef struct {
44     char                       *executable;
45     nxt_conf_value_t           *arguments;
46 } nxt_external_app_conf_t;
47 
48 
49 typedef struct {
50     char       *home;
51     nxt_str_t  path;
52     nxt_str_t  module;
53 } nxt_python_app_conf_t;
54 
55 
56 typedef struct {
57     char                       *root;
58     nxt_str_t                  script;
59     nxt_str_t                  index;
60     nxt_conf_value_t           *options;
61 } nxt_php_app_conf_t;
62 
63 
64 typedef struct {
65     char       *script;
66 } nxt_perl_app_conf_t;
67 
68 
69 typedef struct {
70     nxt_str_t  script;
71 } nxt_ruby_app_conf_t;
72 
73 
74 typedef struct {
75     nxt_conf_value_t           *classpath;
76     char                       *webapp;
77     nxt_conf_value_t           *options;
78     char                       *unit_jars;
79 } nxt_java_app_conf_t;
80 
81 
82 struct nxt_common_app_conf_s {
83     nxt_str_t                  name;
84     nxt_str_t                  type;
85     nxt_str_t                  user;
86     nxt_str_t                  group;
87 
88     char                       *working_directory;
89     nxt_conf_value_t           *environment;
90 
91     union {
92         nxt_external_app_conf_t  external;
93         nxt_python_app_conf_t    python;
94         nxt_php_app_conf_t       php;
95         nxt_perl_app_conf_t      perl;
96         nxt_ruby_app_conf_t      ruby;
97         nxt_java_app_conf_t      java;
98     } u;
99 };
100 
101 
102 typedef struct {
103     nxt_str_t                  method;
104     nxt_str_t                  target;
105     nxt_str_t                  version;
106     nxt_str_t                  path;
107     nxt_str_t                  query;
108     nxt_str_t                  server_name;
109 
110     nxt_list_t                 *fields;
111 
112     nxt_str_t                  cookie;
113     nxt_str_t                  content_length;
114     nxt_str_t                  content_type;
115 
116     off_t                      parsed_content_length;
117     nxt_bool_t                 done;
118 
119     size_t                     bufs;
120     nxt_buf_t                  *buf;
121 } nxt_app_request_header_t;
122 
123 
124 typedef struct {
125     size_t                     preread_size;
126     nxt_bool_t                 done;
127 
128     nxt_buf_t                  *buf;
129 } nxt_app_request_body_t;
130 
131 
132 typedef struct {
133     nxt_app_request_header_t   header;
134     nxt_app_request_body_t     body;
135 
136     nxt_str_t                  remote;
137     nxt_str_t                  local;
138 } nxt_app_request_t;
139 
140 
141 typedef struct nxt_app_parse_ctx_s  nxt_app_parse_ctx_t;
142 
143 
144 struct nxt_app_parse_ctx_s {
145     nxt_app_request_t         r;
146     nxt_http_request_t        *request;
147     nxt_timer_t               timer;
148     void                      *timer_data;
149     nxt_http_request_parse_t  parser;
150     nxt_http_request_parse_t  resp_parser;
151     nxt_mp_t                  *mem_pool;
152 };
153 
154 
155 nxt_int_t nxt_app_http_req_done(nxt_task_t *task, nxt_app_parse_ctx_t *ctx);
156 
157 
158 struct nxt_app_module_s {
159     size_t                     compat_length;
160     uint32_t                   *compat;
161 
162     nxt_str_t                  type;
163     const char                 *version;
164 
165     nxt_int_t                  (*pre_init)(nxt_task_t *task,
166                                     nxt_common_app_conf_t *conf);
167     nxt_int_t                  (*init)(nxt_task_t *task,
168                                     nxt_common_app_conf_t *conf);
169 };
170 
171 
172 nxt_app_lang_module_t *nxt_app_lang_module(nxt_runtime_t *rt, nxt_str_t *name);
173 nxt_app_type_t nxt_app_parse_type(u_char *p, size_t length);
174 
175 NXT_EXPORT extern nxt_str_t  nxt_server;
176 extern nxt_app_module_t      nxt_external_module;
177 
178 NXT_EXPORT nxt_int_t nxt_unit_default_init(nxt_task_t *task,
179     nxt_unit_init_t *init);
180 
181 
182 #endif /* _NXT_APPLICATION_H_INCLIDED_ */
183