Annotation of embedaddon/php/main/php_output.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:    +----------------------------------------------------------------------+
1.1.1.2   misho      15:    | Author: Michael Wallner <mike@php.net>                               |
1.1       misho      16:    +----------------------------------------------------------------------+
                     17: */
                     18: 
1.1.1.2   misho      19: /* $Id$ */
1.1       misho      20: 
                     21: #ifndef PHP_OUTPUT_H
                     22: #define PHP_OUTPUT_H
                     23: 
1.1.1.2   misho      24: #define PHP_OUTPUT_NEWAPI 1
                     25: 
                     26: /* handler ops */
                     27: #define PHP_OUTPUT_HANDLER_WRITE       0x00    /* standard passthru */
                     28: #define PHP_OUTPUT_HANDLER_START       0x01    /* start */
                     29: #define PHP_OUTPUT_HANDLER_CLEAN       0x02    /* restart */
                     30: #define PHP_OUTPUT_HANDLER_FLUSH       0x04    /* pass along as much as possible */
                     31: #define PHP_OUTPUT_HANDLER_FINAL       0x08    /* finalize */
                     32: #define PHP_OUTPUT_HANDLER_CONT                PHP_OUTPUT_HANDLER_WRITE
                     33: #define PHP_OUTPUT_HANDLER_END         PHP_OUTPUT_HANDLER_FINAL
                     34: 
                     35: /* handler types */
                     36: #define PHP_OUTPUT_HANDLER_INTERNAL            0x0000
                     37: #define PHP_OUTPUT_HANDLER_USER                        0x0001
                     38: 
                     39: /* handler ability flags */
                     40: #define PHP_OUTPUT_HANDLER_CLEANABLE   0x0010
                     41: #define PHP_OUTPUT_HANDLER_FLUSHABLE   0x0020
                     42: #define PHP_OUTPUT_HANDLER_REMOVABLE   0x0040
                     43: #define PHP_OUTPUT_HANDLER_STDFLAGS            0x0070
                     44: 
                     45: /* handler status flags */
                     46: #define PHP_OUTPUT_HANDLER_STARTED             0x1000
                     47: #define PHP_OUTPUT_HANDLER_DISABLED            0x2000
1.1.1.3   misho      48: #define PHP_OUTPUT_HANDLER_PROCESSED   0x4000
1.1.1.2   misho      49: 
                     50: /* handler op return values */
                     51: typedef enum _php_output_handler_status_t {
                     52:        PHP_OUTPUT_HANDLER_FAILURE,
                     53:        PHP_OUTPUT_HANDLER_SUCCESS,
                     54:        PHP_OUTPUT_HANDLER_NO_DATA
                     55: } php_output_handler_status_t;
                     56: 
                     57: /* php_output_stack_pop() flags */
                     58: #define PHP_OUTPUT_POP_TRY                     0x000
                     59: #define PHP_OUTPUT_POP_FORCE           0x001
                     60: #define PHP_OUTPUT_POP_DISCARD         0x010
                     61: #define PHP_OUTPUT_POP_SILENT          0x100
                     62: 
                     63: /* real global flags */
                     64: #define PHP_OUTPUT_IMPLICITFLUSH               0x01
                     65: #define PHP_OUTPUT_DISABLED                            0x02
                     66: #define PHP_OUTPUT_WRITTEN                             0x04
                     67: #define PHP_OUTPUT_SENT                                        0x08
                     68: /* supplementary flags for php_output_get_status() */
                     69: #define PHP_OUTPUT_ACTIVE                              0x10
                     70: #define PHP_OUTPUT_LOCKED                              0x20
                     71: /* output layer is ready to use */
                     72: #define PHP_OUTPUT_ACTIVATED           0x100000
                     73: 
                     74: /* handler hooks */
                     75: typedef enum _php_output_handler_hook_t {
                     76:        PHP_OUTPUT_HANDLER_HOOK_GET_OPAQ,
                     77:        PHP_OUTPUT_HANDLER_HOOK_GET_FLAGS,
                     78:        PHP_OUTPUT_HANDLER_HOOK_GET_LEVEL,
                     79:        PHP_OUTPUT_HANDLER_HOOK_IMMUTABLE,
                     80:        PHP_OUTPUT_HANDLER_HOOK_DISABLE,
                     81:        /* unused */
                     82:        PHP_OUTPUT_HANDLER_HOOK_LAST
                     83: } php_output_handler_hook_t;
                     84: 
                     85: #define PHP_OUTPUT_HANDLER_INITBUF_SIZE(s) \
1.1.1.3   misho      86: ( ((s) > 1) ? \
1.1.1.2   misho      87:        (s) + PHP_OUTPUT_HANDLER_ALIGNTO_SIZE - ((s) % (PHP_OUTPUT_HANDLER_ALIGNTO_SIZE)) : \
                     88:        PHP_OUTPUT_HANDLER_DEFAULT_SIZE \
                     89: )
                     90: #define PHP_OUTPUT_HANDLER_ALIGNTO_SIZE                0x1000
                     91: #define PHP_OUTPUT_HANDLER_DEFAULT_SIZE                0x4000
                     92: 
                     93: typedef struct _php_output_buffer {
                     94:        char *data;
                     95:        size_t size;
                     96:        size_t used;
                     97:        uint free:1;
                     98:        uint _res:31;
                     99: } php_output_buffer;
                    100: 
                    101: typedef struct _php_output_context {
                    102:        int op;
                    103:        php_output_buffer in;
                    104:        php_output_buffer out;
                    105: #ifdef ZTS
                    106:        void ***tsrm_ls;
                    107: #endif
                    108: } php_output_context;
                    109: 
                    110: #define PHP_OUTPUT_TSRMLS(ctx) TSRMLS_FETCH_FROM_CTX((ctx)->tsrm_ls)
                    111: 
                    112: /* old-style, stateless callback */
1.1       misho     113: typedef void (*php_output_handler_func_t)(char *output, uint output_len, char **handled_output, uint *handled_output_len, int mode TSRMLS_DC);
1.1.1.2   misho     114: /* new-style, opaque context callback */
                    115: typedef int (*php_output_handler_context_func_t)(void **handler_context, php_output_context *output_context);
                    116: /* output handler context dtor */
                    117: typedef void (*php_output_handler_context_dtor_t)(void *opaq TSRMLS_DC);
                    118: /* conflict check callback */
                    119: typedef int (*php_output_handler_conflict_check_t)(const char *handler_name, size_t handler_name_len TSRMLS_DC);
                    120: /* ctor for aliases */
                    121: typedef struct _php_output_handler *(*php_output_handler_alias_ctor_t)(const char *handler_name, size_t handler_name_len, size_t chunk_size, int flags TSRMLS_DC);
                    122: 
                    123: typedef struct _php_output_handler_user_func_t {
                    124:        zend_fcall_info fci;
                    125:        zend_fcall_info_cache fcc;
                    126:        zval *zoh;
                    127: } php_output_handler_user_func_t;
                    128: 
                    129: typedef struct _php_output_handler {
                    130:        char *name;
                    131:        size_t name_len;
                    132:        int flags;
                    133:        int level;
                    134:        size_t size;
                    135:        php_output_buffer buffer;
                    136:        
                    137:        void *opaq;
                    138:        void (*dtor)(void *opaq TSRMLS_DC);
                    139:        
                    140:        union {
                    141:                php_output_handler_user_func_t *user;
                    142:                php_output_handler_context_func_t internal;
                    143:        } func;
                    144: } php_output_handler;
                    145: 
                    146: ZEND_BEGIN_MODULE_GLOBALS(output)
                    147:        int flags;
                    148:        zend_stack handlers;
                    149:        php_output_handler *active;
                    150:        php_output_handler *running;
                    151:        const char *output_start_filename;
                    152:        int output_start_lineno;
                    153: ZEND_END_MODULE_GLOBALS(output)
                    154: 
                    155: /* there should not be a need to use OG() from outside of output.c */
                    156: #ifdef ZTS
                    157: # define OG(v) TSRMG(output_globals_id, zend_output_globals *, v)
                    158: #else
                    159: # define OG(v) (output_globals.v)
                    160: #endif
                    161: 
                    162: /* convenience macros */
                    163: #define PHPWRITE(str, str_len)         php_output_write((str), (str_len) TSRMLS_CC)
                    164: #define PHPWRITE_H(str, str_len)       php_output_write_unbuffered((str), (str_len) TSRMLS_CC)
                    165: 
                    166: #define PUTC(c)                                                (php_output_write(&(c), 1 TSRMLS_CC), (c))
                    167: #define PUTC_H(c)                                      (php_output_write_unbuffered(&(c), 1 TSRMLS_CC), (c))
                    168: 
                    169: #define PUTS(str)                                      do {                            \
                    170:        const char *__str = (str);                                                      \
                    171:        php_output_write(__str, strlen(__str) TSRMLS_CC);       \
                    172: } while (0)
                    173: #define PUTS_H(str)                                    do {                                                    \
                    174:        const char *__str = (str);                                                                              \
                    175:        php_output_write_unbuffered(__str, strlen(__str) TSRMLS_CC);    \
                    176: } while (0)
                    177: 
1.1       misho     178: 
                    179: BEGIN_EXTERN_C()
1.1.1.2   misho     180: 
                    181: extern const char php_output_default_handler_name[sizeof("default output handler")];
                    182: extern const char php_output_devnull_handler_name[sizeof("null output handler")];
                    183: 
                    184: #define php_output_tearup() \
                    185:        php_output_startup(); \
                    186:        php_output_activate(TSRMLS_C)
                    187: #define php_output_teardown() \
                    188:        php_output_end_all(TSRMLS_C); \
                    189:        php_output_deactivate(TSRMLS_C); \
                    190:        php_output_shutdown()
                    191: 
                    192: /* MINIT */
1.1       misho     193: PHPAPI void php_output_startup(void);
1.1.1.2   misho     194: /* MSHUTDOWN */
                    195: PHPAPI void php_output_shutdown(void);
                    196: 
1.1       misho     197: PHPAPI void php_output_register_constants(TSRMLS_D);
1.1.1.2   misho     198: 
                    199: /* RINIT */
                    200: PHPAPI int php_output_activate(TSRMLS_D);
                    201: /* RSHUTDOWN */
                    202: PHPAPI void php_output_deactivate(TSRMLS_D);
                    203: 
                    204: PHPAPI void php_output_set_status(int status TSRMLS_DC);
                    205: PHPAPI int php_output_get_status(TSRMLS_D);
                    206: PHPAPI void php_output_set_implicit_flush(int flush TSRMLS_DC);
                    207: PHPAPI const char *php_output_get_start_filename(TSRMLS_D);
                    208: PHPAPI int php_output_get_start_lineno(TSRMLS_D);
                    209: 
                    210: PHPAPI int php_output_write_unbuffered(const char *str, size_t len TSRMLS_DC);
                    211: PHPAPI int php_output_write(const char *str, size_t len TSRMLS_DC);
                    212: 
                    213: PHPAPI int php_output_flush(TSRMLS_D);
                    214: PHPAPI void php_output_flush_all(TSRMLS_D);
                    215: PHPAPI int php_output_clean(TSRMLS_D);
                    216: PHPAPI void php_output_clean_all(TSRMLS_D);
                    217: PHPAPI int php_output_end(TSRMLS_D);
                    218: PHPAPI void php_output_end_all(TSRMLS_D);
                    219: PHPAPI int php_output_discard(TSRMLS_D);
                    220: PHPAPI void php_output_discard_all(TSRMLS_D);
                    221: 
                    222: PHPAPI int php_output_get_contents(zval *p TSRMLS_DC);
                    223: PHPAPI int php_output_get_length(zval *p TSRMLS_DC);
                    224: PHPAPI int php_output_get_level(TSRMLS_D);
                    225: PHPAPI php_output_handler* php_output_get_active_handler(TSRMLS_D);
                    226: 
                    227: PHPAPI int php_output_start_default(TSRMLS_D);
                    228: PHPAPI int php_output_start_devnull(TSRMLS_D);
                    229: 
                    230: PHPAPI int php_output_start_user(zval *output_handler, size_t chunk_size, int flags TSRMLS_DC);
                    231: PHPAPI int php_output_start_internal(const char *name, size_t name_len, php_output_handler_func_t output_handler, size_t chunk_size, int flags TSRMLS_DC);
                    232: 
                    233: PHPAPI php_output_handler *php_output_handler_create_user(zval *handler, size_t chunk_size, int flags TSRMLS_DC);
                    234: PHPAPI php_output_handler *php_output_handler_create_internal(const char *name, size_t name_len, php_output_handler_context_func_t handler, size_t chunk_size, int flags TSRMLS_DC);
                    235: 
                    236: PHPAPI void php_output_handler_set_context(php_output_handler *handler, void *opaq, void (*dtor)(void* TSRMLS_DC) TSRMLS_DC);
                    237: PHPAPI int php_output_handler_start(php_output_handler *handler TSRMLS_DC);
                    238: PHPAPI int php_output_handler_started(const char *name, size_t name_len TSRMLS_DC);
                    239: PHPAPI int php_output_handler_hook(php_output_handler_hook_t type, void *arg TSRMLS_DC);
                    240: PHPAPI void php_output_handler_dtor(php_output_handler *handler TSRMLS_DC);
                    241: PHPAPI void php_output_handler_free(php_output_handler **handler TSRMLS_DC);
                    242: 
                    243: PHPAPI int php_output_handler_conflict(const char *handler_new, size_t handler_new_len, const char *handler_set, size_t handler_set_len TSRMLS_DC);
                    244: PHPAPI int php_output_handler_conflict_register(const char *handler_name, size_t handler_name_len, php_output_handler_conflict_check_t check_func TSRMLS_DC);
                    245: PHPAPI int php_output_handler_reverse_conflict_register(const char *handler_name, size_t handler_name_len, php_output_handler_conflict_check_t check_func TSRMLS_DC);
                    246: 
                    247: PHPAPI php_output_handler_alias_ctor_t *php_output_handler_alias(const char *handler_name, size_t handler_name_len TSRMLS_DC);
                    248: PHPAPI int php_output_handler_alias_register(const char *handler_name, size_t handler_name_len, php_output_handler_alias_ctor_t func TSRMLS_DC);
                    249: 
1.1       misho     250: END_EXTERN_C()
                    251: 
1.1.1.2   misho     252: 
1.1       misho     253: PHP_FUNCTION(ob_start);
                    254: PHP_FUNCTION(ob_flush);
                    255: PHP_FUNCTION(ob_clean);
                    256: PHP_FUNCTION(ob_end_flush);
                    257: PHP_FUNCTION(ob_end_clean);
                    258: PHP_FUNCTION(ob_get_flush);
                    259: PHP_FUNCTION(ob_get_clean);
                    260: PHP_FUNCTION(ob_get_contents);
                    261: PHP_FUNCTION(ob_get_length);
                    262: PHP_FUNCTION(ob_get_level);
                    263: PHP_FUNCTION(ob_get_status);
                    264: PHP_FUNCTION(ob_implicit_flush);
                    265: PHP_FUNCTION(ob_list_handlers);
                    266: 
                    267: PHP_FUNCTION(output_add_rewrite_var);
                    268: PHP_FUNCTION(output_reset_rewrite_vars);
                    269: 
1.1.1.2   misho     270: #endif
1.1       misho     271: 
1.1.1.2   misho     272: /*
                    273:  * Local variables:
                    274:  * tab-width: 4
                    275:  * c-basic-offset: 4
                    276:  * End:
                    277:  * vim600: sw=4 ts=4 fdm=marker
                    278:  * vim<600: sw=4 ts=4
                    279:  */

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