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; 30216Sigor@sysoev.ru 31216Sigor@sysoev.ru 32216Sigor@sysoev.ru typedef struct { 33356Svbart@nginx.com nxt_app_type_t type; 34354Svbart@nginx.com u_char *version; 35216Sigor@sysoev.ru char *file; 36743Smax.romanov@nginx.com nxt_app_module_t *module; 37216Sigor@sysoev.ru } nxt_app_lang_module_t; 38216Sigor@sysoev.ru 39216Sigor@sysoev.ru 40141Smax.romanov@nginx.com typedef struct nxt_common_app_conf_s nxt_common_app_conf_t; 41141Smax.romanov@nginx.com 42141Smax.romanov@nginx.com 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 { 50394Smax.romanov@nginx.com char *home; 51141Smax.romanov@nginx.com nxt_str_t path; 52141Smax.romanov@nginx.com nxt_str_t module; 53141Smax.romanov@nginx.com } nxt_python_app_conf_t; 54141Smax.romanov@nginx.com 55141Smax.romanov@nginx.com 56141Smax.romanov@nginx.com typedef struct { 57*1473Svbart@nginx.com nxt_conf_value_t *targets; 58687Svbart@nginx.com nxt_conf_value_t *options; 59141Smax.romanov@nginx.com } nxt_php_app_conf_t; 60141Smax.romanov@nginx.com 61141Smax.romanov@nginx.com 62141Smax.romanov@nginx.com typedef struct { 63510Salexander.borisov@nginx.com char *script; 64510Salexander.borisov@nginx.com } nxt_perl_app_conf_t; 65510Salexander.borisov@nginx.com 66510Salexander.borisov@nginx.com 67584Salexander.borisov@nginx.com typedef struct { 68584Salexander.borisov@nginx.com nxt_str_t script; 69584Salexander.borisov@nginx.com } nxt_ruby_app_conf_t; 70584Salexander.borisov@nginx.com 71584Salexander.borisov@nginx.com 72977Smax.romanov@gmail.com typedef struct { 73977Smax.romanov@gmail.com nxt_conf_value_t *classpath; 74977Smax.romanov@gmail.com char *webapp; 75977Smax.romanov@gmail.com nxt_conf_value_t *options; 76977Smax.romanov@gmail.com char *unit_jars; 77977Smax.romanov@gmail.com } nxt_java_app_conf_t; 78977Smax.romanov@gmail.com 79977Smax.romanov@gmail.com 80141Smax.romanov@nginx.com struct nxt_common_app_conf_s { 81678Svbart@nginx.com nxt_str_t name; 82678Svbart@nginx.com nxt_str_t type; 83678Svbart@nginx.com nxt_str_t user; 84678Svbart@nginx.com nxt_str_t group; 85141Smax.romanov@nginx.com 86678Svbart@nginx.com char *working_directory; 87678Svbart@nginx.com nxt_conf_value_t *environment; 88271Smax.romanov@nginx.com 891182St.nateldemoura@f5.com nxt_conf_value_t *isolation; 901320Smax.romanov@nginx.com nxt_conf_value_t *limits; 911320Smax.romanov@nginx.com 921320Smax.romanov@nginx.com size_t shm_limit; 931182St.nateldemoura@f5.com 94141Smax.romanov@nginx.com union { 95804Svbart@nginx.com nxt_external_app_conf_t external; 96804Svbart@nginx.com nxt_python_app_conf_t python; 97804Svbart@nginx.com nxt_php_app_conf_t php; 98804Svbart@nginx.com nxt_perl_app_conf_t perl; 99804Svbart@nginx.com nxt_ruby_app_conf_t ruby; 100977Smax.romanov@gmail.com nxt_java_app_conf_t java; 101141Smax.romanov@nginx.com } u; 102*1473Svbart@nginx.com 103*1473Svbart@nginx.com nxt_conf_value_t *self; 104141Smax.romanov@nginx.com }; 105141Smax.romanov@nginx.com 106141Smax.romanov@nginx.com 107216Sigor@sysoev.ru struct nxt_app_module_s { 108258Sigor@sysoev.ru size_t compat_length; 109258Sigor@sysoev.ru uint32_t *compat; 110258Sigor@sysoev.ru 111216Sigor@sysoev.ru nxt_str_t type; 112612Salexander.borisov@nginx.com const char *version; 113141Smax.romanov@nginx.com 114977Smax.romanov@gmail.com nxt_int_t (*pre_init)(nxt_task_t *task, 115977Smax.romanov@gmail.com nxt_common_app_conf_t *conf); 116141Smax.romanov@nginx.com nxt_int_t (*init)(nxt_task_t *task, 117141Smax.romanov@nginx.com nxt_common_app_conf_t *conf); 118141Smax.romanov@nginx.com }; 1190Sigor@sysoev.ru 1200Sigor@sysoev.ru 121216Sigor@sysoev.ru nxt_app_lang_module_t *nxt_app_lang_module(nxt_runtime_t *rt, nxt_str_t *name); 122510Salexander.borisov@nginx.com nxt_app_type_t nxt_app_parse_type(u_char *p, size_t length); 123216Sigor@sysoev.ru 124743Smax.romanov@nginx.com NXT_EXPORT extern nxt_str_t nxt_server; 125804Svbart@nginx.com extern nxt_app_module_t nxt_external_module; 126743Smax.romanov@nginx.com 127743Smax.romanov@nginx.com NXT_EXPORT nxt_int_t nxt_unit_default_init(nxt_task_t *task, 128743Smax.romanov@nginx.com nxt_unit_init_t *init); 129216Sigor@sysoev.ru 130216Sigor@sysoev.ru 1310Sigor@sysoev.ru #endif /* _NXT_APPLICATION_H_INCLIDED_ */ 132