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

1.1       misho       1: /*
                      2:    +----------------------------------------------------------------------+
                      3:    | PHP Version 5                                                        |
                      4:    +----------------------------------------------------------------------+
                      5:    | Copyright (c) 1997-2012 The PHP Group                                |
                      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:        /* this is necessary for Safe Mode */
                    109:        char *current_user;
                    110:        int current_user_length;
                    111: 
                    112:        /* this is necessary for CLI module */
                    113:        int argc;
                    114:        char **argv;
                    115:        int proto_num;
                    116: } sapi_request_info;
                    117: 
                    118: 
                    119: typedef struct _sapi_globals_struct {
                    120:        void *server_context;
                    121:        sapi_request_info request_info;
                    122:        sapi_headers_struct sapi_headers;
                    123:        int read_post_bytes;
                    124:        unsigned char headers_sent;
                    125:        struct stat global_stat;
                    126:        char *default_mimetype;
                    127:        char *default_charset;
                    128:        HashTable *rfc1867_uploaded_files;
                    129:        long post_max_size;
                    130:        int options;
                    131:        zend_bool sapi_started;
1.1.1.2 ! misho     132:        double global_request_time;
1.1       misho     133:        HashTable known_post_content_types;
1.1.1.2 ! misho     134:        zval *callback_func;
        !           135:        zend_fcall_info_cache fci_cache;
        !           136:        zend_bool callback_run;
1.1       misho     137: } sapi_globals_struct;
                    138: 
                    139: 
                    140: BEGIN_EXTERN_C()
                    141: #ifdef ZTS
                    142: # define SG(v) TSRMG(sapi_globals_id, sapi_globals_struct *, v)
                    143: SAPI_API extern int sapi_globals_id;
                    144: #else
                    145: # define SG(v) (sapi_globals.v)
                    146: extern SAPI_API sapi_globals_struct sapi_globals;
                    147: #endif
                    148: 
                    149: SAPI_API void sapi_startup(sapi_module_struct *sf);
                    150: SAPI_API void sapi_shutdown(void);
                    151: SAPI_API void sapi_activate(TSRMLS_D);
                    152: SAPI_API void sapi_deactivate(TSRMLS_D);
                    153: SAPI_API void sapi_initialize_empty_request(TSRMLS_D);
                    154: END_EXTERN_C()
                    155: 
                    156: /*
                    157:  * This is the preferred and maintained API for 
                    158:  * operating on HTTP headers.
                    159:  */
                    160: 
                    161: /*
                    162:  * Always specify a sapi_header_line this way:
                    163:  *
                    164:  *     sapi_header_line ctr = {0};
                    165:  */
                    166:  
                    167: typedef struct {
                    168:        char *line; /* If you allocated this, you need to free it yourself */
                    169:        uint line_len;
                    170:        long response_code; /* long due to zend_parse_parameters compatibility */
                    171: } sapi_header_line;
                    172: 
                    173: typedef enum {                                 /* Parameter:                   */
                    174:        SAPI_HEADER_REPLACE,            /* sapi_header_line*    */
                    175:        SAPI_HEADER_ADD,                        /* sapi_header_line*    */
                    176:        SAPI_HEADER_DELETE,                     /* sapi_header_line*    */
                    177:        SAPI_HEADER_DELETE_ALL,         /* void                                 */
                    178:        SAPI_HEADER_SET_STATUS          /* int                                  */
                    179: } sapi_header_op_enum;
                    180: 
                    181: BEGIN_EXTERN_C()
                    182: SAPI_API int sapi_header_op(sapi_header_op_enum op, void *arg TSRMLS_DC);
                    183: 
                    184: /* Deprecated functions. Use sapi_header_op instead. */
                    185: SAPI_API int sapi_add_header_ex(char *header_line, uint header_line_len, zend_bool duplicate, zend_bool replace TSRMLS_DC);
                    186: #define sapi_add_header(a, b, c) sapi_add_header_ex((a),(b),(c),1 TSRMLS_CC)
                    187: 
                    188: 
                    189: SAPI_API int sapi_send_headers(TSRMLS_D);
                    190: SAPI_API void sapi_free_header(sapi_header_struct *sapi_header);
                    191: SAPI_API void sapi_handle_post(void *arg TSRMLS_DC);
                    192: 
                    193: SAPI_API int sapi_register_post_entries(sapi_post_entry *post_entry TSRMLS_DC);
                    194: SAPI_API int sapi_register_post_entry(sapi_post_entry *post_entry TSRMLS_DC);
                    195: SAPI_API void sapi_unregister_post_entry(sapi_post_entry *post_entry TSRMLS_DC);
1.1.1.2 ! misho     196: SAPI_API int sapi_register_default_post_reader(void (*default_post_reader)(TSRMLS_D) TSRMLS_DC);
        !           197: SAPI_API int sapi_register_treat_data(void (*treat_data)(int arg, char *str, zval *destArray TSRMLS_DC) TSRMLS_DC);
        !           198: 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     199: 
                    200: SAPI_API int sapi_flush(TSRMLS_D);
                    201: SAPI_API struct stat *sapi_get_stat(TSRMLS_D);
                    202: SAPI_API char *sapi_getenv(char *name, size_t name_len TSRMLS_DC);
                    203: 
                    204: SAPI_API char *sapi_get_default_content_type(TSRMLS_D);
                    205: SAPI_API void sapi_get_default_content_type_header(sapi_header_struct *default_header TSRMLS_DC);
                    206: SAPI_API size_t sapi_apply_default_charset(char **mimetype, size_t len TSRMLS_DC);
                    207: SAPI_API void sapi_activate_headers_only(TSRMLS_D);
                    208: 
                    209: SAPI_API int sapi_get_fd(int *fd TSRMLS_DC);
                    210: SAPI_API int sapi_force_http_10(TSRMLS_D);
                    211: 
                    212: SAPI_API int sapi_get_target_uid(uid_t * TSRMLS_DC);
                    213: SAPI_API int sapi_get_target_gid(gid_t * TSRMLS_DC);
1.1.1.2 ! misho     214: SAPI_API double sapi_get_request_time(TSRMLS_D);
1.1       misho     215: SAPI_API void sapi_terminate_process(TSRMLS_D);
                    216: END_EXTERN_C()
                    217: 
                    218: struct _sapi_module_struct {
                    219:        char *name;
                    220:        char *pretty_name;
                    221: 
                    222:        int (*startup)(struct _sapi_module_struct *sapi_module);
                    223:        int (*shutdown)(struct _sapi_module_struct *sapi_module);
                    224: 
                    225:        int (*activate)(TSRMLS_D);
                    226:        int (*deactivate)(TSRMLS_D);
                    227: 
                    228:        int (*ub_write)(const char *str, unsigned int str_length TSRMLS_DC);
                    229:        void (*flush)(void *server_context);
                    230:        struct stat *(*get_stat)(TSRMLS_D);
                    231:        char *(*getenv)(char *name, size_t name_len TSRMLS_DC);
                    232: 
                    233:        void (*sapi_error)(int type, const char *error_msg, ...);
                    234: 
                    235:        int (*header_handler)(sapi_header_struct *sapi_header, sapi_header_op_enum op, sapi_headers_struct *sapi_headers TSRMLS_DC);
                    236:        int (*send_headers)(sapi_headers_struct *sapi_headers TSRMLS_DC);
                    237:        void (*send_header)(sapi_header_struct *sapi_header, void *server_context TSRMLS_DC);
                    238: 
                    239:        int (*read_post)(char *buffer, uint count_bytes TSRMLS_DC);
                    240:        char *(*read_cookies)(TSRMLS_D);
                    241: 
                    242:        void (*register_server_variables)(zval *track_vars_array TSRMLS_DC);
1.1.1.2 ! misho     243:        void (*log_message)(char *message TSRMLS_DC);
        !           244:        double (*get_request_time)(TSRMLS_D);
1.1       misho     245:        void (*terminate_process)(TSRMLS_D);
                    246: 
                    247:        char *php_ini_path_override;
                    248: 
                    249:        void (*block_interruptions)(void);
                    250:        void (*unblock_interruptions)(void);
                    251: 
                    252:        void (*default_post_reader)(TSRMLS_D);
                    253:        void (*treat_data)(int arg, char *str, zval *destArray TSRMLS_DC);
                    254:        char *executable_location;
                    255: 
                    256:        int php_ini_ignore;
1.1.1.2 ! misho     257:        int php_ini_ignore_cwd; /* don't look for php.ini in the current directory */
1.1       misho     258: 
                    259:        int (*get_fd)(int *fd TSRMLS_DC);
                    260: 
                    261:        int (*force_http_10)(TSRMLS_D);
                    262: 
                    263:        int (*get_target_uid)(uid_t * TSRMLS_DC);
                    264:        int (*get_target_gid)(gid_t * TSRMLS_DC);
                    265: 
                    266:        unsigned int (*input_filter)(int arg, char *var, char **val, unsigned int val_len, unsigned int *new_val_len TSRMLS_DC);
                    267:        
                    268:        void (*ini_defaults)(HashTable *configuration_hash);
                    269:        int phpinfo_as_text;
                    270: 
                    271:        char *ini_entries;
                    272:        const zend_function_entry *additional_functions;
                    273:        unsigned int (*input_filter_init)(TSRMLS_D);
                    274: };
                    275: 
                    276: 
                    277: struct _sapi_post_entry {
                    278:        char *content_type;
                    279:        uint content_type_len;
                    280:        void (*post_reader)(TSRMLS_D);
                    281:        void (*post_handler)(char *content_type_dup, void *arg TSRMLS_DC);
                    282: };
                    283: 
                    284: /* header_handler() constants */
                    285: #define SAPI_HEADER_ADD                        (1<<0)
                    286: 
                    287: 
                    288: #define SAPI_HEADER_SENT_SUCCESSFULLY  1
                    289: #define SAPI_HEADER_DO_SEND                            2
                    290: #define SAPI_HEADER_SEND_FAILED                        3
                    291: 
                    292: #define SAPI_DEFAULT_MIMETYPE          "text/html"
                    293: #define SAPI_DEFAULT_CHARSET           ""
                    294: #define SAPI_PHP_VERSION_HEADER                "X-Powered-By: PHP/" PHP_VERSION
                    295: 
                    296: #define SAPI_POST_READER_FUNC(post_reader) void post_reader(TSRMLS_D)
                    297: #define SAPI_POST_HANDLER_FUNC(post_handler) void post_handler(char *content_type_dup, void *arg TSRMLS_DC)
                    298: 
                    299: #define SAPI_TREAT_DATA_FUNC(treat_data) void treat_data(int arg, char *str, zval* destArray TSRMLS_DC)
                    300: #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)
                    301: 
                    302: BEGIN_EXTERN_C()
                    303: SAPI_API SAPI_POST_READER_FUNC(sapi_read_standard_form_data);
                    304: SAPI_API SAPI_POST_READER_FUNC(php_default_post_reader);
                    305: SAPI_API SAPI_TREAT_DATA_FUNC(php_default_treat_data);
                    306: SAPI_API SAPI_INPUT_FILTER_FUNC(php_default_input_filter);
                    307: END_EXTERN_C()
                    308: 
                    309: #define STANDARD_SAPI_MODULE_PROPERTIES
                    310: 
                    311: #endif /* SAPI_H */
                    312: 
                    313: /*
                    314:  * Local variables:
                    315:  * tab-width: 4
                    316:  * c-basic-offset: 4
                    317:  * End:
                    318:  */

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