- file = GET_PROP(obj, dispoFile);
- is_inline = GET_PROP(obj, dispoInline);
-
- array_init(return_value);
- add_assoc_stringl(return_value, "filename", Z_STRVAL_P(file), Z_STRLEN_P(file), 1);
- add_assoc_bool(return_value, "inline", Z_LVAL_P(is_inline));
-}
-/* }}} */
-
-/* {{{ proto bool HTTPi_Response::setETag(string etag)
- *
- */
-PHP_METHOD(HTTPi_Response, setETag)
-{
- char *etag;
- int etag_len;
- getObject(httpi_response_object, obj);
-
- if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &etag, &etag_len)) {
- RETURN_FALSE;
- }
-
- UPD_PROP(obj, string, eTag, etag);
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto string HTTPi_Response::getETag()
- *
- */
-PHP_METHOD(HTTPi_Response, getETag)
-{
- zval *etag;
- getObject(httpi_response_object, obj);
-
- if (ZEND_NUM_ARGS()) {
- WRONG_PARAM_COUNT;
- }
-
- etag = GET_PROP(obj, eTag);
- RETURN_STRINGL(Z_STRVAL_P(etag), Z_STRLEN_P(etag), 1);
-}
-/* }}} */
-
-/* {{{ proto bool HTTPi_Response::setData(string data)
- *
- */
-PHP_METHOD(HTTPi_Response, setData)
-{
- zval *the_data;
- char *etag;
- getObject(httpi_response_object, obj);
-
- if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &the_data)) {
- RETURN_FALSE;
- }
-
- convert_to_string_ex(&the_data);
- etag = http_etag(Z_STRVAL_P(the_data), Z_STRLEN_P(the_data), SEND_DATA);
- SET_PROP(obj, data, the_data);
- UPD_PROP(obj, string, eTag, etag);
- UPD_PROP(obj, long, size, Z_STRLEN_P(the_data));
- UPD_PROP(obj, long, lastModified, time(NULL));
- UPD_PROP(obj, long, send_mode, SEND_DATA);
- efree(etag);
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto string HTTPi_Response::getData()
- *
- */
-PHP_METHOD(HTTPi_Response, getData)
-{
- zval *the_data;
- getObject(httpi_response_object, obj);
-
- if (ZEND_NUM_ARGS()) {
- WRONG_PARAM_COUNT;
- }
-
- the_data = GET_PROP(obj, data);
- RETURN_STRINGL(Z_STRVAL_P(the_data), Z_STRLEN_P(the_data), 1);
-}
-/* }}} */
-
-/* {{{ proto bool HTTPi_Response::setStream(resource stream)
- *
- */
-PHP_METHOD(HTTPi_Response, setStream)
-{
- zval *the_stream;
- php_stream *the_real_stream;
- char *etag;
- getObject(httpi_response_object, obj);
-
- if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &the_stream)) {
- RETURN_FALSE;
- }
-
- php_stream_from_zval(the_real_stream, &the_stream);
- etag = http_etag(the_real_stream, 0, SEND_RSRC);
-
- SET_PROP(obj, stream, the_stream);
- UPD_PROP(obj, string, eTag, etag);
- UPD_PROP(obj, long, size, HTTP_G(ssb).sb.st_size);
- UPD_PROP(obj, long, lastModified, HTTP_G(ssb).sb.st_mtime);
- UPD_PROP(obj, long, send_mode, SEND_RSRC);
- efree(etag);
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto resource HTTPi_Response::getStream()
- *
- */
-PHP_METHOD(HTTPi_Response, getStream)
-{
- zval *the_stream;
- getObject(httpi_response_object, obj);
-
- if (ZEND_NUM_ARGS()) {
- WRONG_PARAM_COUNT;
- }
-
- the_stream = GET_PROP(obj, stream);
- RETURN_RESOURCE(Z_LVAL_P(the_stream));
-}
-/* }}} */
-
-/* {{{ proto bool HTTPi_Response::setFile(string file)
- *
- */
-PHP_METHOD(HTTPi_Response, setFile)
-{
- char *the_file;
- int file_len;
- zval fmtime, fsize;
- getObject(httpi_response_object, obj);
-
- if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &the_file, &file_len)) {
- RETURN_FALSE;
- }
-
- php_stat(the_file, file_len, FS_SIZE, &fsize TSRMLS_CC);
- php_stat(the_file, file_len, FS_MTIME, &fmtime TSRMLS_CC);
-
- UPD_PROP(obj, string, file, the_file);
- UPD_PROP(obj, long, size, Z_LVAL(fsize));
- UPD_PROP(obj, long, lastModified, Z_LVAL(fmtime));
- UPD_PROP(obj, long, send_mode, -1);
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto string HTTPi_Response::getFile()
- *
- */
-PHP_METHOD(HTTPi_Response, getFile)
-{
- zval *the_file;
- getObject(httpi_response_object, obj);
-
- if (ZEND_NUM_ARGS()) {
- WRONG_PARAM_COUNT;
- }
-
- the_file = GET_PROP(obj, file);
- RETURN_STRINGL(Z_STRVAL_P(the_file), Z_STRLEN_P(the_file), 1);
-}
-/* }}} */
-
-/* {{{ proto int HTTPi_Response::getSize()
- *
- */
-PHP_METHOD(HTTPi_Response, getSize)
-{
- zval *the_size;
- getObject(httpi_response_object, obj);
-
- if (ZEND_NUM_ARGS()) {
- WRONG_PARAM_COUNT;
- }
-
- the_size = GET_PROP(obj, size);
- RETURN_LONG(Z_LVAL_P(the_size));
-}
-/* }}} */
-
-PHP_METHOD(HTTPi_Response, send)
-{
- zval *do_cache;
- getObject(httpi_response_object, obj);
-
- do_cache = GET_PROP(obj, cache);
-
- /* caching */
- if (Z_LVAL_P(do_cache)) {
- /* cache header */
- {
- zval *ccontrol = GET_PROP(obj, cacheControl);
- if (Z_STRLEN_P(ccontrol)) {
- char *cc_header;
- zval *cc_raw = GET_PROP(obj, raw_cache_header);
- if (Z_LVAL_P(cc_raw)) {
- cc_header = ecalloc(sizeof("Cache-Control: ") + Z_STRLEN_P(ccontrol), 1);
- sprintf(cc_header, "Cache-Control: %s", Z_STRVAL_P(ccontrol));
- } else {
- cc_header = ecalloc(sizeof("Cache-Control: , must-revalidate, max-age=0") + Z_STRLEN_P(ccontrol), 1);
- sprintf(cc_header, "Cache-Control: %s, must-revalidate, max-age=0", Z_STRVAL_P(ccontrol));
- }
- http_send_header(cc_header);
- efree(cc_header);
- } else {
- http_send_header("Cache-Control: public, must-revalidate, max-age=0");
- }
- }
- /* etag */
- {
- zval *etag = GET_PROP(obj, eTag);
- if (Z_STRLEN_P(etag)) {
- if ((!http_is_range_request()) && http_etag_match("HTTP_IF_NONE_MATCH", Z_STRVAL_P(etag))) {
- http_send_status(304);
- RETURN_TRUE;
- }
- http_send_etag(Z_STRVAL_P(etag), Z_STRLEN_P(etag));
- if (HTTP_G(etag)) {
- efree(HTTP_G(etag));
- }
- HTTP_G(etag) = estrndup(Z_STRVAL_P(etag), Z_STRLEN_P(etag));
- }
- }
- /* last modified */
- {
- zval *lmod = GET_PROP(obj, lastModified);
- if (Z_LVAL_P(lmod)) {
- if (http_modified_match("HTTP_IF_MODIFIED_SINCE", Z_LVAL_P(lmod))) {
- http_send_status(304);
- RETURN_TRUE;
- }
- http_send_last_modified(Z_LVAL_P(lmod));
- HTTP_G(lmod) = Z_LVAL_P(lmod);
- } else {
- time_t t = time(NULL);
- http_send_last_modified(t);
- HTTP_G(lmod) = t;
- }
- }
- } /* caching done */
-
- /* gzip */
- /* ... */
-
- /* content type */
- {
- zval *ctype = GET_PROP(obj, contentType);
- if (Z_STRLEN_P(ctype)) {
- char *ctype_header = ecalloc(sizeof("Content-Type: ") + Z_STRLEN_P(ctype), 1);
- sprintf(ctype_header, "Content-Type: %s", Z_STRVAL_P(ctype));
- http_send_header(ctype_header);
- efree(ctype_header);
- if (HTTP_G(ctype)) {
- efree(HTTP_G(ctype));
- }
- HTTP_G(ctype) = estrndup(Z_STRVAL_P(ctype), Z_STRLEN_P(ctype));
- } else {
- http_send_header("Content-Type: application/x-octetstream");
- if (HTTP_G(ctype)) {
- efree(HTTP_G(ctype));
- }
- HTTP_G(ctype) = estrdup("application/x-octetstream");
- }
- }
-
- /* content disposition */
- {
- zval *dispo_file = GET_PROP(obj, dispoFile);
- if (Z_STRLEN_P(dispo_file)) {
- char *dispo_header;
- zval *dispo_inline = GET_PROP(obj, dispoInline);
- if (Z_LVAL_P(dispo_inline)) {
- dispo_header = ecalloc(sizeof("Content-Disposition: inline; filename=\"\"") + Z_STRLEN_P(dispo_file), 1);
- sprintf(dispo_header, "Content-Disposition: inline; filename=\"%s\"", Z_STRVAL_P(dispo_file));
- } else {
- dispo_header = ecalloc(sizeof("Content-Disposition: attachment; filename=\"\"") + Z_STRLEN_P(dispo_file), 1);
- sprintf(dispo_header, "Content-Disposition: attachment; filename=\"%s\"", Z_STRVAL_P(dispo_file));
- }
- http_send_header(dispo_header);
- efree(dispo_header);
- }
- }
-
- /* send */
- {
- zval *send_mode = GET_PROP(obj, send_mode);
- switch (Z_LVAL_P(send_mode))
- {
- case SEND_DATA:
- {
- RETURN_SUCCESS(http_send_data(GET_PROP(obj, data)));
- }
-
- case SEND_RSRC:
- {
- php_stream *the_real_stream;
- zval *the_stream = GET_PROP(obj, stream);
- php_stream_from_zval(the_real_stream, &the_stream);
- RETURN_SUCCESS(http_send_stream(the_real_stream));
- }
-
- default:
- {
- RETURN_SUCCESS(http_send_file(GET_PROP(obj, file)));
- }
- }
- }
-}
-
-#endif /* ZEND_ENGINE_2 */
-
-/* {{{ http_module_entry */
-zend_module_entry http_module_entry = {
-#if ZEND_MODULE_API_NO >= 20010901
- STANDARD_MODULE_HEADER,
-#endif
- "http",
- http_functions,
- PHP_MINIT(http),
- PHP_MSHUTDOWN(http),
- PHP_RINIT(http),
- PHP_RSHUTDOWN(http),
- PHP_MINFO(http),
-#if ZEND_MODULE_API_NO >= 20010901
- PHP_EXT_HTTP_VERSION,