X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-http;a=blobdiff_plain;f=http_response_object.c;h=c8d45cca997de2f9327f51a0f78ec5681b4678cb;hp=2bbef46b61b7919a10bc27dcb9def0f6f2ead469;hb=refs%2Fheads%2Fv1.7.x;hpb=aca5a5a21e4514707a71cfa69cc19ae50a78f5d3 diff --git a/http_response_object.c b/http_response_object.c index 2bbef46..c8d45cc 100644 --- a/http_response_object.c +++ b/http_response_object.c @@ -6,7 +6,7 @@ | modification, are permitted provided that the conditions mentioned | | in the accompanying LICENSE file are met. | +--------------------------------------------------------------------+ - | Copyright (c) 2004-2007, Michael Wallner | + | Copyright (c) 2004-2010, Michael Wallner | +--------------------------------------------------------------------+ */ @@ -132,7 +132,7 @@ HTTP_EMPTY_ARGS(getRequestHeaders); HTTP_EMPTY_ARGS(getRequestBody); HTTP_EMPTY_ARGS(getRequestBodyStream); -#define OBJ_PROP_CE http_response_object_ce +#define THIS_CE http_response_object_ce zend_class_entry *http_response_object_ce; zend_function_entry http_response_object_fe[] = { @@ -193,29 +193,29 @@ PHP_MINIT_FUNCTION(http_response_object) { HTTP_REGISTER_CLASS(HttpResponse, http_response_object, NULL, 0); - DCL_STATIC_PROP(PRIVATE, bool, sent, 0); - DCL_STATIC_PROP(PRIVATE, bool, catch, 0); - DCL_STATIC_PROP(PRIVATE, long, mode, -1); - DCL_STATIC_PROP(PRIVATE, long, stream, 0); - DCL_STATIC_PROP_N(PRIVATE, file); - DCL_STATIC_PROP_N(PRIVATE, data); - DCL_STATIC_PROP(PROTECTED, bool, cache, 0); - DCL_STATIC_PROP(PROTECTED, bool, gzip, 0); - DCL_STATIC_PROP_N(PROTECTED, eTag); - DCL_STATIC_PROP(PROTECTED, long, lastModified, 0); - DCL_STATIC_PROP_N(PROTECTED, cacheControl); - DCL_STATIC_PROP_N(PROTECTED, contentType); - DCL_STATIC_PROP_N(PROTECTED, contentDisposition); - DCL_STATIC_PROP(PROTECTED, long, bufferSize, 0); - DCL_STATIC_PROP(PROTECTED, double, throttleDelay, 0.0); + zend_declare_property_bool(THIS_CE, ZEND_STRS("sent")-1, 0, (ZEND_ACC_STATIC|ZEND_ACC_PRIVATE) TSRMLS_CC); + zend_declare_property_bool(THIS_CE, ZEND_STRS("catch")-1, 0, (ZEND_ACC_STATIC|ZEND_ACC_PRIVATE) TSRMLS_CC); + zend_declare_property_long(THIS_CE, ZEND_STRS("mode")-1, -1, (ZEND_ACC_STATIC|ZEND_ACC_PRIVATE) TSRMLS_CC); + zend_declare_property_long(THIS_CE, ZEND_STRS("stream")-1, 0, (ZEND_ACC_STATIC|ZEND_ACC_PRIVATE) TSRMLS_CC); + zend_declare_property_null(THIS_CE, ZEND_STRS("file")-1, (ZEND_ACC_STATIC|ZEND_ACC_PRIVATE) TSRMLS_CC); + zend_declare_property_null(THIS_CE, ZEND_STRS("data")-1, (ZEND_ACC_STATIC|ZEND_ACC_PRIVATE) TSRMLS_CC); + zend_declare_property_bool(THIS_CE, ZEND_STRS("cache")-1, 0, (ZEND_ACC_STATIC|ZEND_ACC_PROTECTED) TSRMLS_CC); + zend_declare_property_bool(THIS_CE, ZEND_STRS("gzip")-1, 0, (ZEND_ACC_STATIC|ZEND_ACC_PROTECTED) TSRMLS_CC); + zend_declare_property_null(THIS_CE, ZEND_STRS("eTag")-1, (ZEND_ACC_STATIC|ZEND_ACC_PROTECTED) TSRMLS_CC); + zend_declare_property_long(THIS_CE, ZEND_STRS("lastModified")-1, 0, (ZEND_ACC_STATIC|ZEND_ACC_PROTECTED) TSRMLS_CC); + zend_declare_property_null(THIS_CE, ZEND_STRS("cacheControl")-1, (ZEND_ACC_STATIC|ZEND_ACC_PROTECTED) TSRMLS_CC); + zend_declare_property_null(THIS_CE, ZEND_STRS("contentType")-1, (ZEND_ACC_STATIC|ZEND_ACC_PROTECTED) TSRMLS_CC); + zend_declare_property_null(THIS_CE, ZEND_STRS("contentDisposition")-1, (ZEND_ACC_STATIC|ZEND_ACC_PROTECTED) TSRMLS_CC); + zend_declare_property_long(THIS_CE, ZEND_STRS("bufferSize")-1, 0, (ZEND_ACC_STATIC|ZEND_ACC_PROTECTED) TSRMLS_CC); + zend_declare_property_double(THIS_CE, ZEND_STRS("throttleDelay")-1, 0.0, (ZEND_ACC_STATIC|ZEND_ACC_PROTECTED) TSRMLS_CC); #ifndef WONKY - DCL_CONST(long, "REDIRECT", HTTP_REDIRECT); - DCL_CONST(long, "REDIRECT_PERM", HTTP_REDIRECT_PERM); - DCL_CONST(long, "REDIRECT_FOUND", HTTP_REDIRECT_FOUND); - DCL_CONST(long, "REDIRECT_POST", HTTP_REDIRECT_POST); - DCL_CONST(long, "REDIRECT_PROXY", HTTP_REDIRECT_PROXY); - DCL_CONST(long, "REDIRECT_TEMP", HTTP_REDIRECT_TEMP); + zend_declare_class_constant_long(THIS_CE, ZEND_STRS("REDIRECT")-1, HTTP_REDIRECT TSRMLS_CC); + zend_declare_class_constant_long(THIS_CE, ZEND_STRS("REDIRECT_PERM")-1, HTTP_REDIRECT_PERM TSRMLS_CC); + zend_declare_class_constant_long(THIS_CE, ZEND_STRS("REDIRECT_FOUND")-1, HTTP_REDIRECT_FOUND TSRMLS_CC); + zend_declare_class_constant_long(THIS_CE, ZEND_STRS("REDIRECT_POST")-1, HTTP_REDIRECT_POST TSRMLS_CC); + zend_declare_class_constant_long(THIS_CE, ZEND_STRS("REDIRECT_PROXY")-1, HTTP_REDIRECT_PROXY TSRMLS_CC); + zend_declare_class_constant_long(THIS_CE, ZEND_STRS("REDIRECT_TEMP")-1, HTTP_REDIRECT_TEMP TSRMLS_CC); #endif /* WONKY */ return SUCCESS; @@ -288,7 +288,7 @@ PHP_METHOD(HttpResponse, setCache) RETURN_FALSE; } - RETURN_SUCCESS(UPD_STATIC_PROP(bool, cache, do_cache)); + RETURN_SUCCESS(zend_update_static_property_bool(THIS_CE, ZEND_STRS("cache")-1, do_cache TSRMLS_CC)); } /* }}} */ @@ -299,13 +299,8 @@ PHP_METHOD(HttpResponse, getCache) NO_ARGS; if (return_value_used) { - zval *cache_p, *cache = convert_to_type_ex(IS_BOOL, GET_STATIC_PROP(cache), &cache_p); - - RETVAL_ZVAL(cache, 1, 0); - - if (cache_p) { - zval_ptr_dtor(&cache_p); - } + zval *cache = http_zsep(IS_BOOL, *(zend_std_get_static_property(THIS_CE, ZEND_STRS("cache")-1, 0 ZEND_LITERAL_NIL_CC TSRMLS_CC))); + RETVAL_ZVAL(cache, 1, 1); } } /* }}}*/ @@ -320,7 +315,7 @@ PHP_METHOD(HttpResponse, setGzip) RETURN_FALSE; } - RETURN_SUCCESS(UPD_STATIC_PROP(bool, gzip, do_gzip)); + RETURN_SUCCESS(zend_update_static_property_bool(THIS_CE, ZEND_STRS("gzip")-1, do_gzip TSRMLS_CC)); } /* }}} */ @@ -331,13 +326,8 @@ PHP_METHOD(HttpResponse, getGzip) NO_ARGS; if (return_value_used) { - zval *gzip_p, *gzip = convert_to_type_ex(IS_BOOL, GET_STATIC_PROP(gzip), &gzip_p); - - RETVAL_ZVAL(gzip, 1, 0); - - if (gzip_p) { - zval_ptr_dtor(&gzip_p); - } + zval *gzip = http_zsep(IS_BOOL, *(zend_std_get_static_property(THIS_CE, ZEND_STRS("gzip")-1, 0 ZEND_LITERAL_NIL_CC TSRMLS_CC))); + RETVAL_ZVAL(gzip, 1, 1); } } /* }}} */ @@ -360,7 +350,7 @@ PHP_METHOD(HttpResponse, setCacheControl) RETURN_FALSE; } else { size_t cctl_len = spprintf(&cctl, 0, "%s,%s max-age=%ld", ccontrol, must_revalidate?" must-revalidate,":"", max_age); - RETVAL_SUCCESS(UPD_STATIC_STRL(cacheControl, cctl, cctl_len)); + RETVAL_SUCCESS(zend_update_static_property_stringl(THIS_CE, ZEND_STRS("cacheControl")-1, cctl, cctl_len TSRMLS_CC)); efree(cctl); } } @@ -373,13 +363,8 @@ PHP_METHOD(HttpResponse, getCacheControl) NO_ARGS; if (return_value_used) { - zval *ccontrol_p, *ccontrol = convert_to_type_ex(IS_STRING, GET_STATIC_PROP(cacheControl), &ccontrol_p); - - RETVAL_ZVAL(ccontrol, 1, 0); - - if (ccontrol_p) { - zval_ptr_dtor(&ccontrol_p); - } + zval *cctl = http_zsep(IS_STRING, *(zend_std_get_static_property(THIS_CE, ZEND_STRS("cacheControl")-1, 0 ZEND_LITERAL_NIL_CC TSRMLS_CC))); + RETVAL_ZVAL(cctl, 1, 1); } } /* }}} */ @@ -396,7 +381,7 @@ PHP_METHOD(HttpResponse, setContentType) } HTTP_CHECK_CONTENT_TYPE(ctype, RETURN_FALSE); - RETURN_SUCCESS(UPD_STATIC_STRL(contentType, ctype, ctype_len)); + RETURN_SUCCESS(zend_update_static_property_stringl(THIS_CE, ZEND_STRS("contentType")-1, ctype, ctype_len TSRMLS_CC)); } /* }}} */ @@ -407,13 +392,8 @@ PHP_METHOD(HttpResponse, getContentType) NO_ARGS; if (return_value_used) { - zval *ctype_p, *ctype = convert_to_type_ex(IS_STRING, GET_STATIC_PROP(contentType), &ctype_p); - - RETVAL_ZVAL(ctype, 1, 0); - - if (ctype_p) { - zval_ptr_dtor(&ctype_p); - } + zval *ctype = http_zsep(IS_STRING, *(zend_std_get_static_property(THIS_CE, ZEND_STRS("contentType")-1, 0 ZEND_LITERAL_NIL_CC TSRMLS_CC))); + RETVAL_ZVAL(ctype, 1, 1); } } /* }}} */ @@ -430,10 +410,10 @@ PHP_METHOD(HttpResponse, guessContentType) RETVAL_FALSE; SET_EH_THROW_HTTP(); if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|l", &magic_file, &magic_file_len, &magic_mode)) { - switch (Z_LVAL_P(GET_STATIC_PROP(mode))) { + switch (Z_LVAL_P(*zend_std_get_static_property(THIS_CE, ZEND_STRS("mode")-1, 0 ZEND_LITERAL_NIL_CC TSRMLS_CC))) { case SEND_DATA: { - zval *data = GET_STATIC_PROP(data); + zval *data = *zend_std_get_static_property(THIS_CE, ZEND_STRS("data")-1, 0 ZEND_LITERAL_NIL_CC TSRMLS_CC); ct = http_guess_content_type(magic_file, magic_mode, Z_STRVAL_P(data), Z_STRLEN_P(data), SEND_DATA); break; } @@ -441,7 +421,7 @@ PHP_METHOD(HttpResponse, guessContentType) case SEND_RSRC: { php_stream *s; - zval *z = GET_STATIC_PROP(stream); + zval *z = *zend_std_get_static_property(THIS_CE, ZEND_STRS("stream")-1, 0 ZEND_LITERAL_NIL_CC TSRMLS_CC); z->type = IS_RESOURCE; php_stream_from_zval(s, &z); ct = http_guess_content_type(magic_file, magic_mode, s, 0, SEND_RSRC); @@ -449,11 +429,11 @@ PHP_METHOD(HttpResponse, guessContentType) } default: - ct = http_guess_content_type(magic_file, magic_mode, Z_STRVAL_P(GET_STATIC_PROP(file)), 0, -1); + ct = http_guess_content_type(magic_file, magic_mode, Z_STRVAL_P(*zend_std_get_static_property(THIS_CE, ZEND_STRS("file")-1, 0 ZEND_LITERAL_NIL_CC TSRMLS_CC)), 0, -1); break; } if (ct) { - UPD_STATIC_PROP(string, contentType, ct); + zend_update_static_property_string(THIS_CE, ZEND_STRS("contentType")-1, ct TSRMLS_CC); RETVAL_STRING(ct, 0); } } @@ -479,7 +459,7 @@ PHP_METHOD(HttpResponse, setContentDisposition) } cd_len = spprintf(&cd, 0, "%s; filename=\"%s\"", send_inline ? "inline" : "attachment", file); - RETVAL_SUCCESS(UPD_STATIC_STRL(contentDisposition, cd, cd_len)); + RETVAL_SUCCESS(zend_update_static_property_stringl(THIS_CE, ZEND_STRS("contentDisposition")-1, cd, cd_len TSRMLS_CC)); efree(cd); } /* }}} */ @@ -491,13 +471,8 @@ PHP_METHOD(HttpResponse, getContentDisposition) NO_ARGS; if (return_value_used) { - zval *cd_p, *cd = convert_to_type_ex(IS_STRING, GET_STATIC_PROP(contentDisposition), &cd_p); - - RETVAL_ZVAL(cd, 1, 0); - - if (cd_p) { - zval_ptr_dtor(&cd_p); - } + zval *cdisp = http_zsep(IS_STRING, *(zend_std_get_static_property(THIS_CE, ZEND_STRS("contentDisposition")-1, 0 ZEND_LITERAL_NIL_CC TSRMLS_CC))); + RETVAL_ZVAL(cdisp, 1, 1); } } /* }}} */ @@ -513,7 +488,7 @@ PHP_METHOD(HttpResponse, setETag) RETURN_FALSE; } - RETURN_SUCCESS(UPD_STATIC_STRL(eTag, etag, etag_len)); + RETURN_SUCCESS(zend_update_static_property_stringl(THIS_CE, ZEND_STRS("eTag")-1, etag, etag_len TSRMLS_CC)); } /* }}} */ @@ -524,13 +499,8 @@ PHP_METHOD(HttpResponse, getETag) NO_ARGS; if (return_value_used) { - zval *etag_p, *etag = convert_to_type_ex(IS_STRING, GET_STATIC_PROP(eTag), &etag_p); - - RETVAL_ZVAL(etag, 1, 0); - - if (etag_p) { - zval_ptr_dtor(&etag_p); - } + zval *etag = http_zsep(IS_STRING, *(zend_std_get_static_property(THIS_CE, ZEND_STRS("eTag")-1, 0 ZEND_LITERAL_NIL_CC TSRMLS_CC))); + RETVAL_ZVAL(etag, 1, 1); } } /* }}} */ @@ -545,7 +515,7 @@ PHP_METHOD(HttpResponse, setLastModified) RETURN_FALSE; } - RETURN_SUCCESS(UPD_STATIC_PROP(long, lastModified, lm)); + RETURN_SUCCESS(zend_update_static_property_long(THIS_CE, ZEND_STRS("lastModified")-1, lm TSRMLS_CC)); } /* }}} */ @@ -556,13 +526,8 @@ PHP_METHOD(HttpResponse, getLastModified) NO_ARGS; if (return_value_used) { - zval *lm_p, *lm = convert_to_type_ex(IS_LONG, GET_STATIC_PROP(lastModified), &lm_p); - - RETVAL_ZVAL(lm, 1, 0); - - if (lm_p) { - zval_ptr_dtor(&lm_p); - } + zval *lmod = http_zsep(IS_LONG, *(zend_std_get_static_property(THIS_CE, ZEND_STRS("lastModified")-1, 0 ZEND_LITERAL_NIL_CC TSRMLS_CC))); + RETVAL_ZVAL(lmod, 1, 1); } } /* }}} */ @@ -576,7 +541,7 @@ PHP_METHOD(HttpResponse, setThrottleDelay) if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "d", &seconds)) { RETURN_FALSE; } - RETURN_SUCCESS(UPD_STATIC_PROP(double, throttleDelay, seconds)); + RETURN_SUCCESS(zend_update_static_property_double(THIS_CE, ZEND_STRS("throttleDelay")-1, seconds TSRMLS_CC)); } /* }}} */ @@ -587,13 +552,8 @@ PHP_METHOD(HttpResponse, getThrottleDelay) NO_ARGS; if (return_value_used) { - zval *delay_p, *delay = convert_to_type_ex(IS_DOUBLE, GET_STATIC_PROP(throttleDelay), &delay_p); - - RETVAL_ZVAL(delay, 1, 0); - - if (delay_p) { - zval_ptr_dtor(&delay_p); - } + zval *tdel = http_zsep(IS_DOUBLE, *(zend_std_get_static_property(THIS_CE, ZEND_STRS("throttleDelay")-1, 0 ZEND_LITERAL_NIL_CC TSRMLS_CC))); + RETVAL_ZVAL(tdel, 1, 1); } } /* }}} */ @@ -607,7 +567,7 @@ PHP_METHOD(HttpResponse, setBufferSize) if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &bytes)) { RETURN_FALSE; } - RETURN_SUCCESS(UPD_STATIC_PROP(long, bufferSize, bytes)); + RETURN_SUCCESS(zend_update_static_property_long(THIS_CE, ZEND_STRS("bufferSize")-1, bytes TSRMLS_CC)); } /* }}} */ @@ -618,13 +578,8 @@ PHP_METHOD(HttpResponse, getBufferSize) NO_ARGS; if (return_value_used) { - zval *size_p, *size = convert_to_type_ex(IS_LONG, GET_STATIC_PROP(bufferSize), &size_p); - - RETVAL_ZVAL(size, 1, 0); - - if (size_p) { - zval_ptr_dtor(&size_p); - } + zval *bsize = http_zsep(IS_LONG, *(zend_std_get_static_property(THIS_CE, ZEND_STRS("bufferSize")-1, 0 ZEND_LITERAL_NIL_CC TSRMLS_CC))); + RETVAL_ZVAL(bsize, 1, 1); } } /* }}} */ @@ -640,17 +595,17 @@ PHP_METHOD(HttpResponse, setData) RETURN_FALSE; } if (Z_TYPE_P(the_data) != IS_STRING) { - convert_to_string_ex(&the_data); + convert_to_string(the_data); } - if ( (SUCCESS != SET_STATIC_PROP(data, the_data)) || - (SUCCESS != UPD_STATIC_PROP(long, mode, SEND_DATA))) { + if ( (SUCCESS != zend_update_static_property(THIS_CE, ZEND_STRS("data")-1, the_data TSRMLS_CC)) || + (SUCCESS != zend_update_static_property_long(THIS_CE, ZEND_STRS("mode")-1, SEND_DATA TSRMLS_CC))) { RETURN_FALSE; } - UPD_STATIC_PROP(long, lastModified, http_last_modified(the_data, SEND_DATA)); + zend_update_static_property_long(THIS_CE, ZEND_STRS("lastModified")-1, http_last_modified(the_data, SEND_DATA) TSRMLS_CC); if ((etag = http_etag(Z_STRVAL_P(the_data), Z_STRLEN_P(the_data), SEND_DATA))) { - UPD_STATIC_PROP(string, eTag, etag); + zend_update_static_property_string(THIS_CE, ZEND_STRS("eTag")-1, etag TSRMLS_CC); efree(etag); } @@ -665,7 +620,7 @@ PHP_METHOD(HttpResponse, getData) NO_ARGS; if (return_value_used) { - zval *the_data = GET_STATIC_PROP(data); + zval *the_data = *zend_std_get_static_property(THIS_CE, ZEND_STRS("data")-1, 0 ZEND_LITERAL_NIL_CC TSRMLS_CC); RETURN_ZVAL(the_data, 1, 0); } @@ -690,15 +645,15 @@ PHP_METHOD(HttpResponse, setStream) RETURN_FALSE; } - if ( (SUCCESS != UPD_STATIC_PROP(long, stream, Z_LVAL_P(the_stream))) || - (SUCCESS != UPD_STATIC_PROP(long, mode, SEND_RSRC))) { + if ( (SUCCESS != zend_update_static_property_long(THIS_CE, ZEND_STRS("stream")-1, Z_LVAL_P(the_stream) TSRMLS_CC)) || + (SUCCESS != zend_update_static_property_long(THIS_CE, ZEND_STRS("mode")-1, SEND_RSRC TSRMLS_CC))) { RETURN_FALSE; } zend_list_addref(Z_LVAL_P(the_stream)); - UPD_STATIC_PROP(long, lastModified, http_last_modified(the_real_stream, SEND_RSRC)); + zend_update_static_property_long(THIS_CE, ZEND_STRS("lastModified")-1, http_last_modified(the_real_stream, SEND_RSRC) TSRMLS_CC); if ((etag = http_etag(the_real_stream, 0, SEND_RSRC))) { - UPD_STATIC_PROP(string, eTag, etag); + zend_update_static_property_string(THIS_CE, ZEND_STRS("eTag")-1, etag TSRMLS_CC); efree(etag); } @@ -713,13 +668,9 @@ PHP_METHOD(HttpResponse, getStream) NO_ARGS; if (return_value_used) { - zval *stream_p; - - RETVAL_RESOURCE(Z_LVAL_P(convert_to_type_ex(IS_LONG, GET_STATIC_PROP(stream), &stream_p))); - - if (stream_p) { - zval_ptr_dtor(&stream_p); - } + zval *stream = http_zsep(IS_LONG, *(zend_std_get_static_property(THIS_CE, ZEND_STRS("stream")-1, 0 ZEND_LITERAL_NIL_CC TSRMLS_CC))); + RETVAL_RESOURCE(Z_LVAL_P(stream)); + zval_ptr_dtor(&stream); } } /* }}} */ @@ -740,14 +691,14 @@ PHP_METHOD(HttpResponse, setFile) RETURN_FALSE; } - if ( (SUCCESS != UPD_STATIC_STRL(file, the_file, file_len)) || - (SUCCESS != UPD_STATIC_PROP(long, mode, -1))) { + if ( (SUCCESS != zend_update_static_property_stringl(THIS_CE, ZEND_STRS("file")-1, the_file, file_len TSRMLS_CC)) || + (SUCCESS != zend_update_static_property_long(THIS_CE, ZEND_STRS("mode")-1, -1 TSRMLS_CC))) { RETURN_FALSE; } - UPD_STATIC_PROP(long, lastModified, http_last_modified(the_file, -1)); + zend_update_static_property_long(THIS_CE, ZEND_STRS("lastModified")-1, http_last_modified(the_file, -1) TSRMLS_CC); if ((etag = http_etag(the_file, 0, -1))) { - UPD_STATIC_PROP(string, eTag, etag); + zend_update_static_property_string(THIS_CE, ZEND_STRS("eTag")-1, etag TSRMLS_CC); efree(etag); } @@ -762,13 +713,8 @@ PHP_METHOD(HttpResponse, getFile) NO_ARGS; if (return_value_used) { - zval *the_file_p, *the_file = convert_to_type_ex(IS_STRING, GET_STATIC_PROP(file), &the_file_p); - - RETVAL_ZVAL(the_file, 1, 0); - - if (the_file_p) { - zval_ptr_dtor(&the_file_p); - } + zval *file = http_zsep(IS_STRING, *(zend_std_get_static_property(THIS_CE, ZEND_STRS("file")-1, 0 ZEND_LITERAL_NIL_CC TSRMLS_CC))); + RETVAL_ZVAL(file, 1, 1); } } /* }}} */ @@ -786,7 +732,7 @@ PHP_METHOD(HttpResponse, send) HTTP_CHECK_HEADERS_SENT(RETURN_FALSE); - sent = GET_STATIC_PROP(sent); + sent = *zend_std_get_static_property(THIS_CE, ZEND_STRS("sent")-1, 0 ZEND_LITERAL_NIL_CC TSRMLS_CC); if (Z_LVAL_P(sent)) { http_error(HE_WARNING, HTTP_E_RESPONSE, "Cannot send HttpResponse, response has already been sent"); RETURN_FALSE; @@ -795,26 +741,28 @@ PHP_METHOD(HttpResponse, send) } /* capture mode */ - if (zval_is_true(GET_STATIC_PROP(catch))) { - zval *etag_p, *the_data; + if (i_zend_is_true(*zend_std_get_static_property(THIS_CE, ZEND_STRS("catch")-1, 0 ZEND_LITERAL_NIL_CC TSRMLS_CC))) { + zval *zetag, *the_data; MAKE_STD_ZVAL(the_data); +#ifdef PHP_OUTPUT_NEWAPI + php_output_get_contents(the_data TSRMLS_CC); +#else php_ob_get_buffer(the_data TSRMLS_CC); - SET_STATIC_PROP(data, the_data); - ZVAL_LONG(GET_STATIC_PROP(mode), SEND_DATA); +#endif + zend_update_static_property(THIS_CE, ZEND_STRS("data")-1, the_data TSRMLS_CC); + ZVAL_LONG(*zend_std_get_static_property(THIS_CE, ZEND_STRS("mode")-1, 0 ZEND_LITERAL_NIL_CC TSRMLS_CC), SEND_DATA); - if (!Z_STRLEN_P(convert_to_type_ex(IS_STRING, GET_STATIC_PROP(eTag), &etag_p))) { + zetag = http_zsep(IS_STRING, *(zend_std_get_static_property(THIS_CE, ZEND_STRS("eTag")-1, 0 ZEND_LITERAL_NIL_CC TSRMLS_CC))); + if (!Z_STRLEN_P(zetag)) { char *etag = http_etag(Z_STRVAL_P(the_data), Z_STRLEN_P(the_data), SEND_DATA); if (etag) { - UPD_STATIC_PROP(string, eTag, etag); + zend_update_static_property_string(THIS_CE, ZEND_STRS("eTag")-1, etag TSRMLS_CC); efree(etag); } } zval_ptr_dtor(&the_data); - - if (etag_p) { - zval_ptr_dtor(&etag_p); - } + zval_ptr_dtor(&zetag); clean_ob = 1; } @@ -823,16 +771,20 @@ PHP_METHOD(HttpResponse, send) /* interrupt on-the-fly etag generation */ HTTP_G->etag.started = 0; /* discard previous output buffers */ +#ifdef PHP_OUTPUT_NEWAPI + php_output_discard_all(TSRMLS_C); +#else php_end_ob_buffers(0 TSRMLS_CC); +#endif } /* caching */ - if (zval_is_true(GET_STATIC_PROP(cache))) { - zval *cctl, *cctl_p, *etag, *etag_p, *lmod, *lmod_p; + if (i_zend_is_true(*zend_std_get_static_property(THIS_CE, ZEND_STRS("cache")-1, 0 ZEND_LITERAL_NIL_CC TSRMLS_CC))) { + zval *cctl, *etag, *lmod; - etag = convert_to_type_ex(IS_STRING, GET_STATIC_PROP(eTag), &etag_p); - lmod = convert_to_type_ex(IS_LONG, GET_STATIC_PROP(lastModified), &lmod_p); - cctl = convert_to_type_ex(IS_STRING, GET_STATIC_PROP(cacheControl), &cctl_p); + lmod = http_zsep(IS_LONG, *(zend_std_get_static_property(THIS_CE, ZEND_STRS("lastModified")-1, 0 ZEND_LITERAL_NIL_CC TSRMLS_CC))); + etag = http_zsep(IS_STRING, *(zend_std_get_static_property(THIS_CE, ZEND_STRS("eTag")-1, 0 ZEND_LITERAL_NIL_CC TSRMLS_CC))); + cctl = http_zsep(IS_STRING, *(zend_std_get_static_property(THIS_CE, ZEND_STRS("cacheControl")-1, 0 ZEND_LITERAL_NIL_CC TSRMLS_CC))); if (Z_LVAL_P(lmod) || Z_STRLEN_P(etag)) { if (Z_STRLEN_P(cctl)) { @@ -848,14 +800,14 @@ PHP_METHOD(HttpResponse, send) } } - if (etag_p) zval_ptr_dtor(&etag_p); - if (lmod_p) zval_ptr_dtor(&lmod_p); - if (cctl_p) zval_ptr_dtor(&cctl_p); + zval_ptr_dtor(&etag); + zval_ptr_dtor(&lmod); + zval_ptr_dtor(&cctl); } /* content type */ { - zval *ctype_p, *ctype = convert_to_type_ex(IS_STRING, GET_STATIC_PROP(contentType), &ctype_p); + zval *ctype = http_zsep(IS_STRING, *(zend_std_get_static_property(THIS_CE, ZEND_STRS("contentType")-1, 0 ZEND_LITERAL_NIL_CC TSRMLS_CC))); if (Z_STRLEN_P(ctype)) { http_send_content_type(Z_STRVAL_P(ctype), Z_STRLEN_P(ctype)); } else { @@ -868,61 +820,57 @@ PHP_METHOD(HttpResponse, send) http_send_content_type("application/x-octetstream", lenof("application/x-octetstream")); } } - if (ctype_p) { - zval_ptr_dtor(&ctype_p); - } + zval_ptr_dtor(&ctype); } /* content disposition */ { - zval *cd_p, *cd = convert_to_type_ex(IS_STRING, GET_STATIC_PROP(contentDisposition), &cd_p); + zval *cd = http_zsep(IS_STRING, *(zend_std_get_static_property(THIS_CE, ZEND_STRS("contentDisposition")-1, 0 ZEND_LITERAL_NIL_CC TSRMLS_CC))); if (Z_STRLEN_P(cd)) { http_send_header_ex("Content-Disposition", lenof("Content-Disposition"), Z_STRVAL_P(cd), Z_STRLEN_P(cd), 1, NULL); } - if (cd_p) { - zval_ptr_dtor(&cd_p); - } + zval_ptr_dtor(&cd); } /* throttling */ { - zval *bsize_p, *bsize = convert_to_type_ex(IS_LONG, GET_STATIC_PROP(bufferSize), &bsize_p); - zval *delay_p, *delay = convert_to_type_ex(IS_DOUBLE, GET_STATIC_PROP(throttleDelay), &delay_p); + zval *bsize = http_zsep(IS_LONG, *(zend_std_get_static_property(THIS_CE, ZEND_STRS("bufferSize")-1, 0 ZEND_LITERAL_NIL_CC TSRMLS_CC))); + zval *delay = http_zsep(IS_DOUBLE, *(zend_std_get_static_property(THIS_CE, ZEND_STRS("throttleDelay")-1, 0 ZEND_LITERAL_NIL_CC TSRMLS_CC))); HTTP_G->send.buffer_size = Z_LVAL_P(bsize); HTTP_G->send.throttle_delay = Z_DVAL_P(delay); - if (bsize_p) zval_ptr_dtor(&bsize_p); - if (delay_p) zval_ptr_dtor(&delay_p); + zval_ptr_dtor(&bsize); + zval_ptr_dtor(&delay); } /* gzip */ - HTTP_G->send.deflate.response = zval_is_true(GET_STATIC_PROP(gzip)); + HTTP_G->send.deflate.response = i_zend_is_true(*zend_std_get_static_property(THIS_CE, ZEND_STRS("gzip")-1, 0 ZEND_LITERAL_NIL_CC TSRMLS_CC)); /* send */ - switch (Z_LVAL_P(GET_STATIC_PROP(mode))) { + switch (Z_LVAL_P(*zend_std_get_static_property(THIS_CE, ZEND_STRS("mode")-1, 0 ZEND_LITERAL_NIL_CC TSRMLS_CC))) { case SEND_DATA: { - zval *zdata_p, *zdata = convert_to_type_ex(IS_STRING, GET_STATIC_PROP(data), &zdata_p); + zval *zdata = http_zsep(IS_STRING, *(zend_std_get_static_property(THIS_CE, ZEND_STRS("data")-1, 0 ZEND_LITERAL_NIL_CC TSRMLS_CC))); RETVAL_SUCCESS(http_send_data(Z_STRVAL_P(zdata), Z_STRLEN_P(zdata))); - if (zdata_p) zval_ptr_dtor(&zdata_p); + zval_ptr_dtor(&zdata); return; } case SEND_RSRC: { php_stream *the_real_stream; - zval *the_stream_p, *the_stream = convert_to_type_ex(IS_LONG, GET_STATIC_PROP(stream), &the_stream_p); + zval *the_stream = http_zsep(IS_LONG, *(zend_std_get_static_property(THIS_CE, ZEND_STRS("stream")-1, 0 ZEND_LITERAL_NIL_CC TSRMLS_CC))); the_stream->type = IS_RESOURCE; php_stream_from_zval(the_real_stream, &the_stream); RETVAL_SUCCESS(http_send_stream(the_real_stream)); - if (the_stream_p) zval_ptr_dtor(&the_stream_p); + zval_ptr_dtor(&the_stream); return; } default: { - zval *file_p; - RETVAL_SUCCESS(http_send_file(Z_STRVAL_P(convert_to_type_ex(IS_STRING, GET_STATIC_PROP(file), &file_p)))); - if (file_p) zval_ptr_dtor(&file_p); + zval *file = http_zsep(IS_STRING, *(zend_std_get_static_property(THIS_CE, ZEND_STRS("file")-1, 0 ZEND_LITERAL_NIL_CC TSRMLS_CC))); + RETVAL_SUCCESS(http_send_file(Z_STRVAL_P(file))); + zval_ptr_dtor(&file); return; } } @@ -938,10 +886,14 @@ PHP_METHOD(HttpResponse, capture) HTTP_CHECK_HEADERS_SENT(RETURN_FALSE); - UPD_STATIC_PROP(long, catch, 1); - + zend_update_static_property_long(THIS_CE, ZEND_STRS("catch")-1, 1 TSRMLS_CC); +#ifdef PHP_OUTPUT_NEWAPI + php_output_discard_all(TSRMLS_C); + php_output_start_default(TSRMLS_C); +#else php_end_ob_buffers(0 TSRMLS_CC); php_start_ob_buffer(NULL, 0, 0 TSRMLS_CC); +#endif /* register shutdown function */ {