/* * Copyright (C) Max Romanov * Copyright (C) Valentin V. Bartenev * Copyright (C) NGINX, Inc. */ #ifndef _NXT_APPLICATION_H_INCLUDED_ #define _NXT_APPLICATION_H_INCLUDED_ #include #include typedef enum { NXT_APP_EXTERNAL, NXT_APP_PYTHON, NXT_APP_PHP, NXT_APP_PERL, NXT_APP_RUBY, NXT_APP_JAVA, NXT_APP_WASM, NXT_APP_WASM_WC, NXT_APP_SKEL, NXT_APP_UNKNOWN, } nxt_app_type_t; typedef struct nxt_app_module_s nxt_app_module_t; typedef nxt_int_t (*nxt_application_setup_t)(nxt_task_t *task, nxt_process_t *process, nxt_common_app_conf_t *conf); typedef struct { nxt_app_type_t type; char *name; u_char *version; char *file; nxt_app_module_t *module; nxt_array_t *mounts; /* of nxt_fs_mount_t */ } nxt_app_lang_module_t; typedef struct { char *executable; nxt_conf_value_t *arguments; } nxt_external_app_conf_t; typedef struct { char *home; nxt_conf_value_t *path; nxt_str_t protocol; uint32_t threads; uint32_t thread_stack_size; nxt_conf_value_t *targets; } nxt_python_app_conf_t; typedef struct { nxt_conf_value_t *targets; nxt_conf_value_t *options; } nxt_php_app_conf_t; typedef struct { char *script; uint32_t threads; uint32_t thread_stack_size; } nxt_perl_app_conf_t; typedef struct { nxt_str_t script; uint32_t threads; nxt_str_t hooks; } nxt_ruby_app_conf_t; typedef struct { nxt_conf_value_t *classpath; char *webapp; nxt_conf_value_t *options; char *unit_jars; uint32_t threads; uint32_t thread_stack_size; } nxt_java_app_conf_t; typedef struct { const char *module; const char *request_handler; const char *malloc_handler; const char *free_handler; const char *module_init_handler; const char *module_end_handler; const char *request_init_handler; const char *request_end_handler; const char *response_end_handler; nxt_conf_value_t *access; } nxt_wasm_app_conf_t; typedef struct { const char *component; nxt_conf_value_t *access; } nxt_wasm_wc_app_conf_t; typedef struct { char *module; } nxt_skel_app_conf_t; struct nxt_common_app_conf_s { nxt_str_t name; nxt_str_t type; nxt_str_t user; nxt_str_t group; char *stdout_log; char *stderr_log; char *working_directory; nxt_conf_value_t *environment; nxt_conf_value_t *isolation; nxt_conf_value_t *limits; size_t shm_limit; uint32_t request_limit; nxt_fd_t shared_port_fd; nxt_fd_t shared_queue_fd; union { nxt_external_app_conf_t external; nxt_python_app_conf_t python; nxt_php_app_conf_t php; nxt_perl_app_conf_t perl; nxt_ruby_app_conf_t ruby; nxt_java_app_conf_t java; nxt_wasm_app_conf_t wasm; nxt_wasm_wc_app_conf_t wasm_wc; nxt_skel_app_conf_t skel; } u; nxt_conf_value_t *self; }; struct nxt_app_module_s { size_t compat_length; uint32_t *compat; nxt_str_t type; const char *version; const nxt_fs_mount_t *mounts; nxt_uint_t nmounts; nxt_application_setup_t setup; nxt_process_start_t start; }; nxt_app_lang_module_t *nxt_app_lang_module(nxt_runtime_t *rt, nxt_str_t *name); nxt_app_type_t nxt_app_parse_type(u_char *p, size_t length); NXT_EXPORT extern nxt_str_t nxt_server; extern nxt_app_module_t nxt_external_module; NXT_EXPORT nxt_int_t nxt_unit_default_init(nxt_task_t *task, nxt_unit_init_t *init, nxt_common_app_conf_t *conf); NXT_EXPORT nxt_int_t nxt_app_set_logs(void); #endif /* _NXT_APPLICATION_H_INCLIDED_ */