summaryrefslogblamecommitdiffhomepage
path: root/src/nxt_application.h
blob: 3668697a6e7f071c2342cb0fde99e032398bcf20 (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11

  
                            







                                     

                     

                              
 
              
                     
                   
                
                 
                 
                 
                 
                    
                 
 
                    


                 
                                                  

                                                              


                
                                   
                                    
                                       
                                    
                                      
                                                                 


                        
                





                                           

                                     


                                                 
                                        



                        
                                        
                                        



                     
                       

                                 


                      

                      
                       
                     


                      




                                          

                                                 


                      











                                            

                              


                      






                                 




                      
                              



                                     
 


                                           

                                                  
 
                                          


                                         
                                             
 


                                               
           




                                          
                                      
                                      
                                         
                                      
        

                                     


  
                         


                                             
                                    
                                        
 


                                       

                                     
  

 
                                                                               
                                                            
 
                                        
                                                 

                                                            
                                                        
 
                                            
 
                                         

/*
 * Copyright (C) Max Romanov
 * Copyright (C) Valentin V. Bartenev
 * Copyright (C) NGINX, Inc.
 */

#ifndef _NXT_APPLICATION_H_INCLUDED_
#define _NXT_APPLICATION_H_INCLUDED_


#include <nxt_conf.h>

#include <nxt_unit_typedefs.h>


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_ */