Annotation of embedaddon/php/main/SAPI.h, revision 1.1.1.4

1.1       misho       1: /*
                      2:    +----------------------------------------------------------------------+
                      3:    | PHP Version 5                                                        |
                      4:    +----------------------------------------------------------------------+
1.1.1.4 ! misho       5:    | Copyright (c) 1997-2014 The PHP Group                                |
1.1       misho       6:    +----------------------------------------------------------------------+
                      7:    | This source file is subject to version 3.01 of the PHP license,      |
                      8:    | that is bundled with this package in the file LICENSE, and is        |
                      9:    | available through the world-wide-web at the following url:           |
                     10:    | http://www.php.net/license/3_01.txt                                  |
                     11:    | If you did not receive a copy of the PHP license and are unable to   |
                     12:    | obtain it through the world-wide-web, please send a note to          |
                     13:    | license@php.net so we can mail you a copy immediately.               |
                     14:    +----------------------------------------------------------------------+
                     15:    | Author:  Zeev Suraski <zeev@zend.com>                                |
                     16:    +----------------------------------------------------------------------+
                     17: */
                     18: 
1.1.1.2   misho      19: /* $Id$ */
1.1       misho      20: 
                     21: #ifndef SAPI_H
                     22: #define SAPI_H
                     23: 
                     24: #include "zend.h"
                     25: #include "zend_API.h"
                     26: #include "zend_llist.h"
                     27: #include "zend_operators.h"
                     28: #ifdef PHP_WIN32
                     29: #include "win95nt.h"
                     30: #endif
                     31: #include <sys/stat.h>
                     32: 
                     33: #define SAPI_OPTION_NO_CHDIR 1
                     34: 
                     35: #define SAPI_POST_BLOCK_SIZE 4000
                     36: 
                     37: #ifdef PHP_WIN32
                     38: #      ifdef SAPI_EXPORTS
                     39: #              define SAPI_API __declspec(dllexport) 
                     40: #      else
                     41: #              define SAPI_API __declspec(dllimport) 
                     42: #      endif
                     43: #elif defined(__GNUC__) && __GNUC__ >= 4
                     44: #      define SAPI_API __attribute__ ((visibility("default")))
                     45: #else
                     46: #      define SAPI_API
                     47: #endif
                     48: 
                     49: #undef shutdown
                     50: 
                     51: typedef struct {
                     52:        char *header;
                     53:        uint header_len;
                     54: } sapi_header_struct;
                     55: 
                     56: 
                     57: typedef struct {
                     58:        zend_llist headers;
                     59:        int http_response_code;
                     60:        unsigned char send_default_content_type;
                     61:        char *mimetype;
                     62:        char *http_status_line;
                     63: } sapi_headers_struct;
                     64: 
                     65: 
                     66: typedef struct _sapi_post_entry sapi_post_entry;
                     67: typedef struct _sapi_module_struct sapi_module_struct;
                     68: 
                     69: BEGIN_EXTERN_C()
                     70: extern SAPI_API sapi_module_struct sapi_module;  /* true global */
                     71: END_EXTERN_C()
                     72: 
                     73: /* Some values in this structure needs to be filled in before
                     74:  * calling sapi_activate(). We WILL change the `char *' entries,
                     75:  * so make sure that you allocate a separate buffer for them
                     76:  * and that you free them after sapi_deactivate().
                     77:  */
                     78: 
                     79: typedef struct {
                     80:        const char *request_method;
                     81:        char *query_string;
                     82:        char *post_data, *raw_post_data;
                     83:        char *cookie_data;
                     84:        long content_length;
                     85:        uint post_data_length, raw_post_data_length;
                     86: 
                     87:        char *path_translated;
                     88:        char *request_uri;
                     89: 
                     90:        const char *content_type;
                     91: 
                     92:        zend_bool headers_only;
                     93:        zend_bool no_headers;
                     94:        zend_bool headers_read;
                     95: 
                     96:        sapi_post_entry *post_entry;
                     97: 
                     98:        char *content_type_dup;
                     99: 
                    100:        /* for HTTP authentication */
                    101:        char *auth_user;
                    102:        char *auth_password;
                    103:        char *auth_digest;
                    104: 
                    105:        /* this is necessary for the CGI SAPI module */
                    106:        char *argv0;
                    107: 
                    108:        char *current_user;
                    109:        int current_user_length;
                    110: 
                    111:        /* this is necessary for CLI module */
                    112:        int argc;
                    113:        char **argv;
                    114:        int proto_num;
                    115: } sapi_request_info;
                    116: 
                    117: 
                    118: typedef struct _sapi_globals_struct {
                    119:        void *server_context;
                    120:        sapi_request_info request_info;
                    121:        sapi_headers_struct sapi_headers;
                    122:        int read_post_bytes;
                    123:        unsigned char headers_sent;
                    124:        struct stat global_stat;
                    125:        char *default_mimetype;
                    126:        char *default_charset;
                    127:        HashTable *rfc1867_uploaded_files;
                    128:        long post_max_size;
                    129:        int options;
                    130:        zend_bool sapi_started;
1.1.1.2   misho     131:        double global_request_time;
1.1       misho     132:        HashTable known_post_content_types;
1.1.1.2   misho     133:        zval *callback_func;
                    134:        zend_fcall_info_cache fci_cache;
                    135:        zend_bool callback_run;
1.1       misho     136: } sapi_globals_struct;
                    137: 
                    138: 
                    139: BEGIN_EXTERN_C()
                    140: #ifdef ZTS
                    141: # define SG(v) TSRMG(sapi_globals_id, sapi_globals_struct *, v)
                    142: SAPI_API extern int sapi_globals_id;
                    143: #else
                    144: # define SG(v) (sapi_globals.v)
                    145: extern SAPI_API sapi_globals_struct sapi_globals;
                    146: #endif
                    147: 
                    148: SAPI_API void sapi_startup(sapi_module_struct *sf);
                    149: SAPI_API void sapi_shutdown(void);
                    150: SAPI_API void sapi_activate(TSRMLS_D);
                    151: SAPI_API void sapi_deactivate(TSRMLS_D);
                    152: SAPI_API void sapi_initialize_empty_request(TSRMLS_D);
                    153: END_EXTERN_C()
                    154: 
                    155: /*
                    156:  * This is the preferred and maintained API for 
                    157:  * operating on HTTP headers.
                    158:  */
                    159: 
                    160: /*
                    161:  * Always specify a sapi_header_line this way:
                    162:  *
                    163:  *     sapi_header_line ctr = {0};
                    164:  */
                    165:  
                    166: typedef struct {
                    167:        char *line; /* If you allocated this, you need to free it yourself */
                    168:        uint line_len;
                    169:        long response_code; /* long due to zend_parse_parameters compatibility */
                    170: } sapi_header_line;
                    171: 
                    172: typedef enum {                                 /* Parameter:                   */
                    173:        SAPI_HEADER_REPLACE,            /* sapi_header_line*    */
                    174:        SAPI_HEADER_ADD,                        /* sapi_header_line*    */
                    175:        SAPI_HEADER_DELETE,                     /* sapi_header_line*    */
                    176:        SAPI_HEADER_DELETE_ALL,         /* void                                 */
                    177:        SAPI_HEADER_SET_STATUS          /* int                                  */
                    178: } sapi_header_op_enum;
                    179: 
                    180: BEGIN_EXTERN_C()
                    181: SAPI_API int sapi_header_op(sapi_header_op_enum op, void *arg TSRMLS_DC);
                    182: 
                    183: /* Deprecated functions. Use sapi_header_op instead. */
                    184: SAPI_API int sapi_add_header_ex(char *header_line, uint header_line_len, zend_bool duplicate, zend_bool replace TSRMLS_DC);
                    185: #define sapi_add_header(a, b, c) sapi_add_header_ex((a),(b),(c),1 TSRMLS_CC)
                    186: 
                    187: 
                    188: SAPI_API int sapi_send_headers(TSRMLS_D);
                    189: SAPI_API void sapi_free_header(sapi_header_struct *sapi_header);
                    190: SAPI_API void sapi_handle_post(void *arg TSRMLS_DC);
                    191: 
                    192: SAPI_API int sapi_register_post_entries(sapi_post_entry *post_entry TSRMLS_DC);
                    193: SAPI_API int sapi_register_post_entry(sapi_post_entry *post_entry TSRMLS_DC);
                    194: SAPI_API void sapi_unregister_post_entry(sapi_post_entry *post_entry TSRMLS_DC);
1.1.1.2   misho     195: SAPI_API int sapi_register_default_post_reader(void (*default_post_reader)(TSRMLS_D) TSRMLS_DC);
                    196: SAPI_API int sapi_register_treat_data(void (*treat_data)(int arg, char *str, zval *destArray TSRMLS_DC) TSRMLS_DC);
                    197: SAPI_API int sapi_register_input_filter(unsigned int (*input_filter)(int arg, char *var, char **val, unsigned int val_len, unsigned int *new_val_len TSRMLS_DC), unsigned int (*input_filter_init)(TSRMLS_D) TSRMLS_DC);
1.1       misho     198: 
                    199: SAPI_API int sapi_flush(TSRMLS_D);
                    200: SAPI_API struct stat *sapi_get_stat(TSRMLS_D);
                    201: SAPI_API char *sapi_getenv(char *name, size_t name_len TSRMLS_DC);
                    202: 
                    203: SAPI_API char *sapi_get_default_content_type(TSRMLS_D);
                    204: SAPI_API void sapi_get_default_content_type_header(sapi_header_struct *default_header TSRMLS_DC);
                    205: SAPI_API size_t sapi_apply_default_charset(char **mimetype, size_t len TSRMLS_DC);
                    206: SAPI_API void sapi_activate_headers_only(TSRMLS_D);
                    207: 
                    208: SAPI_API int sapi_get_fd(int *fd TSRMLS_DC);
                    209: SAPI_API int sapi_force_http_10(TSRMLS_D);
                    210: 
                    211: SAPI_API int sapi_get_target_uid(uid_t * TSRMLS_DC);
                    212: SAPI_API int sapi_get_target_gid(gid_t * TSRMLS_DC);
1.1.1.2   misho     213: SAPI_API double sapi_get_request_time(TSRMLS_D);
1.1       misho     214: SAPI_API void sapi_terminate_process(TSRMLS_D);
                    215: END_EXTERN_C()
                    216: 
                    217: struct _sapi_module_struct {
                    218:        char *name;
                    219:        char *pretty_name;
                    220: 
                    221:        int (*startup)(struct _sapi_module_struct *sapi_module);
                    222:        int (*shutdown)(struct _sapi_module_struct *sapi_module);
                    223: 
                    224:        int (*activate)(TSRMLS_D);
                    225:        int (*deactivate)(TSRMLS_D);
                    226: 
                    227:        int (*ub_write)(const char *str, unsigned int str_length TSRMLS_DC);
                    228:        void (*flush)(void *server_context);
                    229:        struct stat *(*get_stat)(TSRMLS_D);
                    230:        char *(*getenv)(char *name, size_t name_len TSRMLS_DC);
                    231: 
                    232:        void (*sapi_error)(int type, const char *error_msg, ...);
                    233: 
                    234:        int (*header_handler)(sapi_header_struct *sapi_header, sapi_header_op_enum op, sapi_headers_struct *sapi_headers TSRMLS_DC);
                    235:        int (*send_headers)(sapi_headers_struct *sapi_headers TSRMLS_DC);
                    236:        void (*send_header)(sapi_header_struct *sapi_header, void *server_context TSRMLS_DC);
                    237: 
                    238:        int (*read_post)(char *buffer, uint count_bytes TSRMLS_DC);
                    239:        char *(*read_cookies)(TSRMLS_D);
                    240: 
                    241:        void (*register_server_variables)(zval *track_vars_array TSRMLS_DC);
1.1.1.2   misho     242:        void (*log_message)(char *message TSRMLS_DC);
                    243:        double (*get_request_time)(TSRMLS_D);
1.1       misho     244:        void (*terminate_process)(TSRMLS_D);
                    245: 
                    246:        char *php_ini_path_override;
                    247: 
                    248:        void (*block_interruptions)(void);
                    249:        void (*unblock_interruptions)(void);
                    250: 
                    251:        void (*default_post_reader)(TSRMLS_D);
                    252:        void (*treat_data)(int arg, char *str, zval *destArray TSRMLS_DC);
                    253:        char *executable_location;
                    254: 
                    255:        int php_ini_ignore;
1.1.1.2   misho     256:        int php_ini_ignore_cwd; /* don't look for php.ini in the current directory */
1.1       misho     257: 
                    258:        int (*get_fd)(int *fd TSRMLS_DC);
                    259: 
                    260:        int (*force_http_10)(TSRMLS_D);
                    261: 
                    262:        int (*get_target_uid)(uid_t * TSRMLS_DC);
                    263:        int (*get_target_gid)(gid_t * TSRMLS_DC);
                    264: 
                    265:        unsigned int (*input_filter)(int arg, char *var, char **val, unsigned int val_len, unsigned int *new_val_len TSRMLS_DC);
                    266:        
                    267:        void (*ini_defaults)(HashTable *configuration_hash);
                    268:        int phpinfo_as_text;
                    269: 
                    270:        char *ini_entries;
                    271:        const zend_function_entry *additional_functions;
                    272:        unsigned int (*input_filter_init)(TSRMLS_D);
                    273: };
                    274: 
                    275: 
                    276: struct _sapi_post_entry {
                    277:        char *content_type;
                    278:        uint content_type_len;
                    279:        void (*post_reader)(TSRMLS_D);
                    280:        void (*post_handler)(char *content_type_dup, void *arg TSRMLS_DC);
                    281: };
                    282: 
                    283: /* header_handler() constants */
                    284: #define SAPI_HEADER_ADD                        (1<<0)
                    285: 
                    286: 
                    287: #define SAPI_HEADER_SENT_SUCCESSFULLY  1
                    288: #define SAPI_HEADER_DO_SEND                            2
                    289: #define SAPI_HEADER_SEND_FAILED                        3
                    290: 
                    291: #define SAPI_DEFAULT_MIMETYPE          "text/html"
                    292: #define SAPI_DEFAULT_CHARSET           ""
                    293: #define SAPI_PHP_VERSION_HEADER                "X-Powered-By: PHP/" PHP_VERSION
                    294: 
                    295: #define SAPI_POST_READER_FUNC(post_reader) void post_reader(TSRMLS_D)
                    296: #define SAPI_POST_HANDLER_FUNC(post_handler) void post_handler(char *content_type_dup, void *arg TSRMLS_DC)
                    297: 
                    298: #define SAPI_TREAT_DATA_FUNC(treat_data) void treat_data(int arg, char *str, zval* destArray TSRMLS_DC)
                    299: #define SAPI_INPUT_FILTER_FUNC(input_filter) unsigned int input_filter(int arg, char *var, char **val, unsigned int val_len, unsigned int *new_val_len TSRMLS_DC)
                    300: 
                    301: BEGIN_EXTERN_C()
                    302: SAPI_API SAPI_POST_READER_FUNC(sapi_read_standard_form_data);
                    303: SAPI_API SAPI_POST_READER_FUNC(php_default_post_reader);
                    304: SAPI_API SAPI_TREAT_DATA_FUNC(php_default_treat_data);
                    305: SAPI_API SAPI_INPUT_FILTER_FUNC(php_default_input_filter);
                    306: END_EXTERN_C()
                    307: 
                    308: #define STANDARD_SAPI_MODULE_PROPERTIES
                    309: 
                    310: #endif /* SAPI_H */
                    311: 
                    312: /*
                    313:  * Local variables:
                    314:  * tab-width: 4
                    315:  * c-basic-offset: 4
                    316:  * End:
                    317:  */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>