xref: /unit/src/nxt_application.h (revision 1473:e07d5b451423)
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     nxt_conf_value_t           *targets;
58     nxt_conf_value_t           *options;
59 } nxt_php_app_conf_t;
60 
61 
62 typedef struct {
63     char       *script;
64 } nxt_perl_app_conf_t;
65 
66 
67 typedef struct {
68     nxt_str_t  script;
69 } nxt_ruby_app_conf_t;
70 
71 
72 typedef struct {
73     nxt_conf_value_t           *classpath;
74     char                       *webapp;
75     nxt_conf_value_t           *options;
76     char                       *unit_jars;
77 } nxt_java_app_conf_t;
78 
79 
80 struct nxt_common_app_conf_s {
81     nxt_str_t                  name;
82     nxt_str_t                  type;
83     nxt_str_t                  user;
84     nxt_str_t                  group;
85 
86     char                       *working_directory;
87     nxt_conf_value_t           *environment;
88 
89     nxt_conf_value_t           *isolation;
90     nxt_conf_value_t           *limits;
91 
92     size_t                     shm_limit;
93 
94     union {
95         nxt_external_app_conf_t  external;
96         nxt_python_app_conf_t    python;
97         nxt_php_app_conf_t       php;
98         nxt_perl_app_conf_t      perl;
99         nxt_ruby_app_conf_t      ruby;
100         nxt_java_app_conf_t      java;
101     } u;
102 
103     nxt_conf_value_t           *self;
104 };
105 
106 
107 struct nxt_app_module_s {
108     size_t                     compat_length;
109     uint32_t                   *compat;
110 
111     nxt_str_t                  type;
112     const char                 *version;
113 
114     nxt_int_t                  (*pre_init)(nxt_task_t *task,
115                                     nxt_common_app_conf_t *conf);
116     nxt_int_t                  (*init)(nxt_task_t *task,
117                                     nxt_common_app_conf_t *conf);
118 };
119 
120 
121 nxt_app_lang_module_t *nxt_app_lang_module(nxt_runtime_t *rt, nxt_str_t *name);
122 nxt_app_type_t nxt_app_parse_type(u_char *p, size_t length);
123 
124 NXT_EXPORT extern nxt_str_t  nxt_server;
125 extern nxt_app_module_t      nxt_external_module;
126 
127 NXT_EXPORT nxt_int_t nxt_unit_default_init(nxt_task_t *task,
128     nxt_unit_init_t *init);
129 
130 
131 #endif /* _NXT_APPLICATION_H_INCLIDED_ */
132