X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-http;a=blobdiff_plain;f=http_request_api.c;h=aac05fd62f2937be778d4a75d089cd3868b01b28;hp=3dabcd759d5302d2094f534ebec04ef39836268c;hb=c8ff1f2a523b5f914a7bae73bb6f29d40a0d3786;hpb=3d4001d8462ccf22372b7436e1a1c134e83b683e diff --git a/http_request_api.c b/http_request_api.c index 3dabcd7..aac05fd 100644 --- a/http_request_api.c +++ b/http_request_api.c @@ -181,7 +181,6 @@ void *_http_request_data_copy(int type, void *data TSRMLS_DC) /* {{{ void http_request_data_free_string(char **) */ void _http_request_data_free_string(void *string) { - //fprintf(stderr, "FREE STRING %p (%s)\n", *((char **)string), *((char **)string)); efree(*((char **)string)); } /* }}} */ @@ -411,10 +410,10 @@ PHP_HTTP_API STATUS _http_request_init(CURL *ch, http_request_method meth, char #endif /* compress, empty string enables deflate and gzip */ - if (zoption = http_curl_getopt(options, "compress", IS_BOOL)) { - if (Z_LVAL_P(zoption)) { - HTTP_CURL_OPT(ENCODING, ""); - } + if ((zoption = http_curl_getopt(options, "compress", IS_BOOL)) && Z_LVAL_P(zoption)) { + HTTP_CURL_OPT(ENCODING, ""); + } else { + HTTP_CURL_OPT(ENCODING, 0); } /* redirects, defaults to 0 */ @@ -431,6 +430,8 @@ PHP_HTTP_API STATUS _http_request_init(CURL *ch, http_request_method meth, char /* referer */ if (zoption = http_curl_getopt(options, "referer", IS_STRING)) { HTTP_CURL_OPT(REFERER, http_request_data_copy(COPY_STRING, Z_STRVAL_P(zoption))); + } else { + HTTP_CURL_OPT(REFERER, NULL); } /* useragent, default "PECL::HTTP/version (PHP/version)" */ @@ -490,34 +491,60 @@ PHP_HTTP_API STATUS _http_request_init(CURL *ch, http_request_method meth, char HTTP_CURL_OPT(COOKIE, http_request_data_copy(COPY_STRING, qstr->data)); } phpstr_free(qstr); + } else { + HTTP_CURL_OPT(COOKIE, NULL); } - /* cookiestore */ - if (zoption = http_curl_getopt(options, "cookiestore", IS_STRING)) { + /* session cookies */ + if (zoption = http_curl_getopt(options, "cookiesession", IS_BOOL)) { + if (Z_LVAL_P(zoption)) { + /* accept cookies for this session */ + HTTP_CURL_OPT(COOKIEFILE, ""); + } else { + /* reset session cookies */ + HTTP_CURL_OPT(COOKIESESSION, 1); + } + } else { + HTTP_CURL_OPT(COOKIEFILE, NULL); + } + + /* cookiestore, read initial cookies from that file and store cookies back into that file */ + if ((zoption = http_curl_getopt(options, "cookiestore", IS_STRING)) && Z_STRLEN_P(zoption)) { HTTP_CURL_OPT(COOKIEFILE, http_request_data_copy(COPY_STRING, Z_STRVAL_P(zoption))); HTTP_CURL_OPT(COOKIEJAR, http_request_data_copy(COPY_STRING, Z_STRVAL_P(zoption))); + } else { + HTTP_CURL_OPT(COOKIEFILE, NULL); + HTTP_CURL_OPT(COOKIEJAR, NULL); } /* resume */ if (zoption = http_curl_getopt(options, "resume", IS_LONG)) { range_req = 1; HTTP_CURL_OPT(RESUME_FROM, Z_LVAL_P(zoption)); + } else { + HTTP_CURL_OPT(RESUME_FROM, 0); } /* maxfilesize */ if (zoption = http_curl_getopt(options, "maxfilesize", IS_LONG)) { HTTP_CURL_OPT(MAXFILESIZE, Z_LVAL_P(zoption)); + } else { + HTTP_CURL_OPT(MAXFILESIZE, 0); } /* lastmodified */ if (zoption = http_curl_getopt(options, "lastmodified", IS_LONG)) { HTTP_CURL_OPT(TIMECONDITION, range_req ? CURL_TIMECOND_IFUNMODSINCE : CURL_TIMECOND_IFMODSINCE); HTTP_CURL_OPT(TIMEVALUE, Z_LVAL_P(zoption)); + } else { + HTTP_CURL_OPT(TIMEVALUE, 0); } /* timeout */ if (zoption = http_curl_getopt(options, "timeout", IS_LONG)) { HTTP_CURL_OPT(TIMEOUT, Z_LVAL_P(zoption)); + } else { + HTTP_CURL_OPT(TIMEOUT, 1); } /* connecttimeout, defaults to 1 */ @@ -863,7 +890,6 @@ static size_t http_curl_write_callback(char *buf, size_t len, size_t n, void *s) /* {{{ static size_t http_curl_read_callback(void *, size_t, size_t, void *) */ static size_t http_curl_read_callback(void *data, size_t len, size_t n, void *s) { - static char *offset = NULL, *original = NULL; HTTP_CURL_CALLBACK_DATA(s, http_request_body *, body); if (body->type != HTTP_REQUEST_BODY_UPLOADFILE) {