xref: /unit/src/nxt_application.h (revision 2014)
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 {
18804Svbart@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,
23977Smax.romanov@gmail.com     NXT_APP_JAVA,
24141Smax.romanov@nginx.com 
25216Sigor@sysoev.ru     NXT_APP_UNKNOWN,
26133Sigor@sysoev.ru } nxt_app_type_t;
27133Sigor@sysoev.ru 
28133Sigor@sysoev.ru 
29216Sigor@sysoev.ru typedef struct nxt_app_module_s  nxt_app_module_t;
301488St.nateldemoura@f5.com typedef nxt_int_t (*nxt_application_setup_t)(nxt_task_t *task,
311488St.nateldemoura@f5.com     nxt_process_t *process, nxt_common_app_conf_t *conf);
32216Sigor@sysoev.ru 
33216Sigor@sysoev.ru 
34216Sigor@sysoev.ru typedef struct {
35356Svbart@nginx.com     nxt_app_type_t            type;
36354Svbart@nginx.com     u_char                    *version;
37216Sigor@sysoev.ru     char                      *file;
38743Smax.romanov@nginx.com     nxt_app_module_t          *module;
391489St.nateldemoura@f5.com     nxt_array_t               *mounts;    /* of nxt_fs_mount_t */
40216Sigor@sysoev.ru } nxt_app_lang_module_t;
41216Sigor@sysoev.ru 
42216Sigor@sysoev.ru 
43141Smax.romanov@nginx.com typedef struct {
44804Svbart@nginx.com     char                       *executable;
45804Svbart@nginx.com     nxt_conf_value_t           *arguments;
46804Svbart@nginx.com } nxt_external_app_conf_t;
47804Svbart@nginx.com 
48804Svbart@nginx.com 
49804Svbart@nginx.com typedef struct {
501759Svbart@nginx.com     char                       *home;
511759Svbart@nginx.com     nxt_conf_value_t           *path;
521759Svbart@nginx.com     nxt_str_t                  module;
531759Svbart@nginx.com     char                       *callable;
541759Svbart@nginx.com     nxt_str_t                  protocol;
551759Svbart@nginx.com     uint32_t                   threads;
561759Svbart@nginx.com     uint32_t                   thread_stack_size;
571872So.canty@f5.com     nxt_conf_value_t           *targets;
58141Smax.romanov@nginx.com } nxt_python_app_conf_t;
59141Smax.romanov@nginx.com 
60141Smax.romanov@nginx.com 
61141Smax.romanov@nginx.com typedef struct {
621473Svbart@nginx.com     nxt_conf_value_t           *targets;
63687Svbart@nginx.com     nxt_conf_value_t           *options;
64141Smax.romanov@nginx.com } nxt_php_app_conf_t;
65141Smax.romanov@nginx.com 
66141Smax.romanov@nginx.com 
67141Smax.romanov@nginx.com typedef struct {
68510Salexander.borisov@nginx.com     char       *script;
691689Smax.romanov@nginx.com     uint32_t   threads;
701689Smax.romanov@nginx.com     uint32_t   thread_stack_size;
71510Salexander.borisov@nginx.com } nxt_perl_app_conf_t;
72510Salexander.borisov@nginx.com 
73510Salexander.borisov@nginx.com 
74584Salexander.borisov@nginx.com typedef struct {
75584Salexander.borisov@nginx.com     nxt_str_t  script;
761687Smax.romanov@nginx.com     uint32_t   threads;
771910So.canty@f5.com     nxt_str_t  hooks;
78584Salexander.borisov@nginx.com } nxt_ruby_app_conf_t;
79584Salexander.borisov@nginx.com 
80584Salexander.borisov@nginx.com 
81977Smax.romanov@gmail.com typedef struct {
82977Smax.romanov@gmail.com     nxt_conf_value_t           *classpath;
83977Smax.romanov@gmail.com     char                       *webapp;
84977Smax.romanov@gmail.com     nxt_conf_value_t           *options;
85977Smax.romanov@gmail.com     char                       *unit_jars;
861684Smax.romanov@nginx.com     uint32_t                   threads;
871684Smax.romanov@nginx.com     uint32_t                   thread_stack_size;
88977Smax.romanov@gmail.com } nxt_java_app_conf_t;
89977Smax.romanov@gmail.com 
90977Smax.romanov@gmail.com 
91141Smax.romanov@nginx.com struct nxt_common_app_conf_s {
92678Svbart@nginx.com     nxt_str_t                  name;
93678Svbart@nginx.com     nxt_str_t                  type;
94678Svbart@nginx.com     nxt_str_t                  user;
95678Svbart@nginx.com     nxt_str_t                  group;
96141Smax.romanov@nginx.com 
97678Svbart@nginx.com     char                       *working_directory;
98678Svbart@nginx.com     nxt_conf_value_t           *environment;
99271Smax.romanov@nginx.com 
1001182St.nateldemoura@f5.com     nxt_conf_value_t           *isolation;
1011320Smax.romanov@nginx.com     nxt_conf_value_t           *limits;
1021320Smax.romanov@nginx.com 
1031320Smax.romanov@nginx.com     size_t                     shm_limit;
1041980Smax.romanov@nginx.com     uint32_t                   request_limit;
1051182St.nateldemoura@f5.com 
106*2014Smax.romanov@nginx.com     nxt_fd_t                   shared_port_fd;
107*2014Smax.romanov@nginx.com     nxt_fd_t                   shared_queue_fd;
108*2014Smax.romanov@nginx.com 
109141Smax.romanov@nginx.com     union {
110804Svbart@nginx.com         nxt_external_app_conf_t  external;
111804Svbart@nginx.com         nxt_python_app_conf_t    python;
112804Svbart@nginx.com         nxt_php_app_conf_t       php;
113804Svbart@nginx.com         nxt_perl_app_conf_t      perl;
114804Svbart@nginx.com         nxt_ruby_app_conf_t      ruby;
115977Smax.romanov@gmail.com         nxt_java_app_conf_t      java;
116141Smax.romanov@nginx.com     } u;
1171473Svbart@nginx.com 
1181473Svbart@nginx.com     nxt_conf_value_t           *self;
119141Smax.romanov@nginx.com };
120141Smax.romanov@nginx.com 
121141Smax.romanov@nginx.com 
122216Sigor@sysoev.ru struct nxt_app_module_s {
123258Sigor@sysoev.ru     size_t                     compat_length;
124258Sigor@sysoev.ru     uint32_t                   *compat;
125258Sigor@sysoev.ru 
126216Sigor@sysoev.ru     nxt_str_t                  type;
127612Salexander.borisov@nginx.com     const char                 *version;
128141Smax.romanov@nginx.com 
1291489St.nateldemoura@f5.com     const nxt_fs_mount_t       *mounts;
1301489St.nateldemoura@f5.com     nxt_uint_t                 nmounts;
1311489St.nateldemoura@f5.com 
1321488St.nateldemoura@f5.com     nxt_application_setup_t    setup;
1331488St.nateldemoura@f5.com     nxt_process_start_t        start;
134141Smax.romanov@nginx.com };
1350Sigor@sysoev.ru 
1360Sigor@sysoev.ru 
137216Sigor@sysoev.ru nxt_app_lang_module_t *nxt_app_lang_module(nxt_runtime_t *rt, nxt_str_t *name);
138510Salexander.borisov@nginx.com nxt_app_type_t nxt_app_parse_type(u_char *p, size_t length);
139216Sigor@sysoev.ru 
140743Smax.romanov@nginx.com NXT_EXPORT extern nxt_str_t  nxt_server;
141804Svbart@nginx.com extern nxt_app_module_t      nxt_external_module;
142743Smax.romanov@nginx.com 
143743Smax.romanov@nginx.com NXT_EXPORT nxt_int_t nxt_unit_default_init(nxt_task_t *task,
1441980Smax.romanov@nginx.com     nxt_unit_init_t *init, nxt_common_app_conf_t *conf);
145216Sigor@sysoev.ru 
146216Sigor@sysoev.ru 
1470Sigor@sysoev.ru #endif /* _NXT_APPLICATION_H_INCLIDED_ */
148