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