X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-http;a=blobdiff_plain;f=http_functions.c;h=80030ce0469279b2ba76545b7c2471a5b5598aea;hp=0231946501e01fa24777e9062cdfde2fe488b896;hb=ef227f4f7f697c954eef0adb9f9f897148a771ca;hpb=9d2250ea30eb8d9905eef2e28b82e8559e237aa2 diff --git a/http_functions.c b/http_functions.c index 0231946..80030ce 100644 --- a/http_functions.c +++ b/http_functions.c @@ -894,6 +894,7 @@ PHP_FUNCTION(http_parse_message) * ) * [Folded] => works * too + * ) * ?> * */ @@ -914,6 +915,44 @@ PHP_FUNCTION(http_parse_headers) } /* }}}*/ +/* {{{ proto object http_parse_cookie(string cookie) + * + * Parses HTTP cookies like sent in a response into a struct. + * + * Expects a string as parameter containing the value of a Set-Cookie response header. + * + * Returns an stdClass object with the cookie params as properties on success or FALSE on failure. + * + * Example: + *
+ *  foo
+ *     [value] => bar
+ *     [path] => /
+ * )
+ * ?>
+ * 
+ */ +PHP_FUNCTION(http_parse_cookie) +{ + char *cookie; + int cookie_len; + + if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &cookie, &cookie_len)) { + RETURN_FALSE; + } + + object_init(return_value); + if (SUCCESS != http_parse_cookie(cookie, HASH_OF(return_value))) { + zval_dtor(return_value); + RETURN_FALSE; + } +} + /* {{{ proto array http_get_request_headers(void) * * Get a list of incoming HTTP headers. @@ -1161,12 +1200,8 @@ PHP_FUNCTION(http_post_data) RETVAL_FALSE; - body.type = HTTP_REQUEST_BODY_CSTRING; - body.data = postdata; - body.size = postdata_len; - http_request_init_ex(&request, NULL, HTTP_POST, URL); - request.body = &body; + request.body = http_request_body_init_ex(&body, HTTP_REQUEST_BODY_CSTRING, postdata, postdata_len, 0); if (SUCCESS == http_request_prepare(&request, options?Z_ARRVAL_P(options):NULL)) { http_request_exec(&request); if (info) { @@ -1174,7 +1209,6 @@ PHP_FUNCTION(http_post_data) } RETVAL_RESPONSE_OR_BODY(request); } - request.body = NULL; http_request_dtor(&request); } /* }}} */ @@ -1200,7 +1234,7 @@ PHP_FUNCTION(http_post_fields) RETURN_FALSE; } - if (SUCCESS != http_request_body_fill(&body, Z_ARRVAL_P(fields), files ? Z_ARRVAL_P(files) : NULL)) { + if (!http_request_body_fill(&body, Z_ARRVAL_P(fields), files ? Z_ARRVAL_P(files) : NULL)) { RETURN_FALSE; } @@ -1215,14 +1249,11 @@ PHP_FUNCTION(http_post_fields) request.body = &body; if (SUCCESS == http_request_prepare(&request, options?Z_ARRVAL_P(options):NULL)) { http_request_exec(&request); - http_request_body_dtor(&body); if (info) { http_request_info(&request, Z_ARRVAL_P(info)); } RETVAL_RESPONSE_OR_BODY(request); } - http_request_body_dtor(&body); - request.body = NULL; http_request_dtor(&request); } /* }}} */ @@ -1503,7 +1534,7 @@ PHP_FUNCTION(http_build_query) /* {{{ */ #ifdef HTTP_HAVE_ZLIB -/* {{{ proto string http_gzencode(string data[, int level = -1]) +/* {{{ proto string http_gzencode(string data[, int level = -1[, int mtime = 0]]) * * Compress data with the HTTP compatible GZIP encoding. * @@ -1518,17 +1549,17 @@ PHP_FUNCTION(http_gzencode) { char *data; int data_len; - long level = -1; + long level = -1, mtime = 0; RETVAL_NULL(); - if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|l", &data, &data_len, &level)) { + if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|ll", &data, &data_len, &level, &mtime)) { HTTP_CHECK_GZIP_LEVEL(level, return); { char *encoded; size_t encoded_len; - if (SUCCESS == http_encoding_gzencode(level, data, data_len, &encoded, &encoded_len)) { + if (SUCCESS == http_encoding_gzencode(level, mtime, data, data_len, &encoded, &encoded_len)) { RETURN_STRINGL(encoded, (int) encoded_len, 0); } } @@ -1562,7 +1593,7 @@ PHP_FUNCTION(http_gzdecode) } /* }}} */ -/* {{{ proto string http_deflate(string data[, int level = -1]) +/* {{{ proto string http_deflate(string data[, int level = -1[, bool zlib_header = false]]) * * Compress data with the HTTP compatible DEFLATE encoding. * @@ -1578,16 +1609,17 @@ PHP_FUNCTION(http_deflate) char *data; int data_len; long level = -1; + zend_bool zhdr = 0; RETVAL_NULL(); - if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|l", &data, &data_len, &level)) { + if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|lb", &data, &data_len, &level, &zhdr)) { HTTP_CHECK_GZIP_LEVEL(level, return); { char *encoded; size_t encoded_len; - if (SUCCESS == http_encoding_deflate(level, data, data_len, &encoded, &encoded_len)) { + if (SUCCESS == http_encoding_deflate(level, zhdr, data, data_len, &encoded, &encoded_len)) { RETURN_STRINGL(encoded, (int) encoded_len, 0); } } @@ -1621,64 +1653,6 @@ PHP_FUNCTION(http_inflate) } /* }}} */ -/* {{{ proto string http_compress(string data[, int level = -1]) - * - * Compress data with the HTTP compatible COMPRESS encoding. - * - * Expects the first parameter to be a string containing the data which should - * be encoded. Additionally accepts an optional int parameter specifying the - * compression level, where -1 is default, 0 is no compression and 9 is best - * compression ratio. - * - * Returns the encoded string on success, or NULL on failure. - */ -PHP_FUNCTION(http_compress) -{ - char *data; - int data_len; - long level = -1; - - RETVAL_NULL(); - - if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|l", &data, &data_len, &level)) { - HTTP_CHECK_GZIP_LEVEL(level, return); - { - char *encoded; - size_t encoded_len; - - if (SUCCESS == http_encoding_compress(level, data, data_len, &encoded, &encoded_len)) { - RETURN_STRINGL(encoded, (int) encoded_len, 0); - } - } - } -} -/* }}} */ - -/* {{{ proto string http_uncompress(string data) - * - * Uncompress data compressed with the HTTP compatible COMPRESS encoding. - * - * Expects a string as parameter containing the compressed data. - * - * Returns the decoded string on success, or NULL on failure. - */ -PHP_FUNCTION(http_uncompress) -{ - char *data; - int data_len; - - RETVAL_NULL(); - - if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &data, &data_len)) { - char *decoded; - size_t decoded_len; - - if (SUCCESS == http_encoding_uncompress(data, data_len, &decoded, &decoded_len)) { - RETURN_STRINGL(decoded, (int) decoded_len, 0); - } - } -} -/* }}} */ #endif /* HTTP_HAVE_ZLIB */ /* }}} */