mirror of
https://github.com/php/php-src.git
synced 2025-08-16 05:58:45 +02:00
Private/public split curl header
To allow exporting the php_curl.h header containing curl class entries, split off a separate curl_private.h header with all the implementation details. We may move or expose additional APIs in php_curl.h on an as-needed basis.
This commit is contained in:
parent
d1ac7e3ab1
commit
85b5dc4711
8 changed files with 168 additions and 143 deletions
|
@ -82,5 +82,6 @@ int main(int argc, char *argv[])
|
||||||
])
|
])
|
||||||
|
|
||||||
PHP_NEW_EXTENSION(curl, interface.c multi.c share.c curl_file.c, $ext_shared)
|
PHP_NEW_EXTENSION(curl, interface.c multi.c share.c curl_file.c, $ext_shared)
|
||||||
|
PHP_INSTALL_HEADERS([ext/curl], [php_curl.h])
|
||||||
PHP_SUBST(CURL_SHARED_LIBADD)
|
PHP_SUBST(CURL_SHARED_LIBADD)
|
||||||
fi
|
fi
|
||||||
|
|
|
@ -29,6 +29,7 @@ if (PHP_CURL != "no") {
|
||||||
EXTENSION("curl", "interface.c multi.c share.c curl_file.c");
|
EXTENSION("curl", "interface.c multi.c share.c curl_file.c");
|
||||||
AC_DEFINE('HAVE_CURL', 1, 'Have cURL library');
|
AC_DEFINE('HAVE_CURL', 1, 'Have cURL library');
|
||||||
ADD_FLAG("CFLAGS_CURL", "/D CURL_STATICLIB");
|
ADD_FLAG("CFLAGS_CURL", "/D CURL_STATICLIB");
|
||||||
|
PHP_INSTALL_HEADERS("ext/curl", "php_curl.h");
|
||||||
// TODO: check for curl_version_info
|
// TODO: check for curl_version_info
|
||||||
} else {
|
} else {
|
||||||
WARNING("curl not enabled; libraries and headers not found");
|
WARNING("curl not enabled; libraries and headers not found");
|
||||||
|
|
|
@ -21,7 +21,7 @@
|
||||||
#include "php.h"
|
#include "php.h"
|
||||||
#include "Zend/zend_exceptions.h"
|
#include "Zend/zend_exceptions.h"
|
||||||
#include "Zend/zend_interfaces.h"
|
#include "Zend/zend_interfaces.h"
|
||||||
#include "php_curl.h"
|
#include "curl_private.h"
|
||||||
#include "curl_file_arginfo.h"
|
#include "curl_file_arginfo.h"
|
||||||
|
|
||||||
PHP_CURL_API zend_class_entry *curl_CURLFile_class;
|
PHP_CURL_API zend_class_entry *curl_CURLFile_class;
|
||||||
|
|
159
ext/curl/curl_private.h
Normal file
159
ext/curl/curl_private.h
Normal file
|
@ -0,0 +1,159 @@
|
||||||
|
/*
|
||||||
|
+----------------------------------------------------------------------+
|
||||||
|
| Copyright (c) The PHP Group |
|
||||||
|
+----------------------------------------------------------------------+
|
||||||
|
| This source file is subject to version 3.01 of the PHP license, |
|
||||||
|
| that is bundled with this package in the file LICENSE, and is |
|
||||||
|
| available through the world-wide-web at the following url: |
|
||||||
|
| http://www.php.net/license/3_01.txt |
|
||||||
|
| If you did not receive a copy of the PHP license and are unable to |
|
||||||
|
| obtain it through the world-wide-web, please send a note to |
|
||||||
|
| license@php.net so we can mail you a copy immediately. |
|
||||||
|
+----------------------------------------------------------------------+
|
||||||
|
| Author: Sterling Hughes <sterling@php.net> |
|
||||||
|
| Wez Furlong <wez@thebrainroom.com> |
|
||||||
|
+----------------------------------------------------------------------+
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _PHP_CURL_PRIVATE_H
|
||||||
|
#define _PHP_CURL_PRIVATE_H
|
||||||
|
|
||||||
|
#include "php_curl.h"
|
||||||
|
|
||||||
|
#define PHP_CURL_DEBUG 0
|
||||||
|
|
||||||
|
#include "php_version.h"
|
||||||
|
#define PHP_CURL_VERSION PHP_VERSION
|
||||||
|
|
||||||
|
#include <curl/curl.h>
|
||||||
|
#include <curl/multi.h>
|
||||||
|
|
||||||
|
#define CURLOPT_RETURNTRANSFER 19913
|
||||||
|
#define CURLOPT_BINARYTRANSFER 19914 /* For Backward compatibility */
|
||||||
|
#define PHP_CURL_STDOUT 0
|
||||||
|
#define PHP_CURL_FILE 1
|
||||||
|
#define PHP_CURL_USER 2
|
||||||
|
#define PHP_CURL_DIRECT 3
|
||||||
|
#define PHP_CURL_RETURN 4
|
||||||
|
#define PHP_CURL_IGNORE 7
|
||||||
|
|
||||||
|
#define SAVE_CURL_ERROR(__handle, __err) \
|
||||||
|
do { (__handle)->err.no = (int) __err; } while (0)
|
||||||
|
|
||||||
|
PHP_MINIT_FUNCTION(curl);
|
||||||
|
PHP_MSHUTDOWN_FUNCTION(curl);
|
||||||
|
PHP_MINFO_FUNCTION(curl);
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
zval func_name;
|
||||||
|
zend_fcall_info_cache fci_cache;
|
||||||
|
FILE *fp;
|
||||||
|
smart_str buf;
|
||||||
|
int method;
|
||||||
|
zval stream;
|
||||||
|
} php_curl_write;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
zval func_name;
|
||||||
|
zend_fcall_info_cache fci_cache;
|
||||||
|
FILE *fp;
|
||||||
|
zend_resource *res;
|
||||||
|
int method;
|
||||||
|
zval stream;
|
||||||
|
} php_curl_read;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
zval func_name;
|
||||||
|
zend_fcall_info_cache fci_cache;
|
||||||
|
int method;
|
||||||
|
} php_curl_progress, php_curl_fnmatch, php_curlm_server_push;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
php_curl_write *write;
|
||||||
|
php_curl_write *write_header;
|
||||||
|
php_curl_read *read;
|
||||||
|
zval std_err;
|
||||||
|
php_curl_progress *progress;
|
||||||
|
#if LIBCURL_VERSION_NUM >= 0x071500 /* Available since 7.21.0 */
|
||||||
|
php_curl_fnmatch *fnmatch;
|
||||||
|
#endif
|
||||||
|
} php_curl_handlers;
|
||||||
|
|
||||||
|
struct _php_curl_error {
|
||||||
|
char str[CURL_ERROR_SIZE + 1];
|
||||||
|
int no;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct _php_curl_send_headers {
|
||||||
|
zend_string *str;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct _php_curl_free {
|
||||||
|
zend_llist str;
|
||||||
|
zend_llist post;
|
||||||
|
zend_llist stream;
|
||||||
|
HashTable *slist;
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
CURL *cp;
|
||||||
|
php_curl_handlers *handlers;
|
||||||
|
struct _php_curl_free *to_free;
|
||||||
|
struct _php_curl_send_headers header;
|
||||||
|
struct _php_curl_error err;
|
||||||
|
zend_bool in_callback;
|
||||||
|
uint32_t* clone;
|
||||||
|
zval postfields;
|
||||||
|
zend_object std;
|
||||||
|
} php_curl;
|
||||||
|
|
||||||
|
#define CURLOPT_SAFE_UPLOAD -1
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
php_curlm_server_push *server_push;
|
||||||
|
} php_curlm_handlers;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
int still_running;
|
||||||
|
CURLM *multi;
|
||||||
|
zend_llist easyh;
|
||||||
|
php_curlm_handlers *handlers;
|
||||||
|
struct {
|
||||||
|
int no;
|
||||||
|
} err;
|
||||||
|
zend_object std;
|
||||||
|
} php_curlm;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
CURLSH *share;
|
||||||
|
struct {
|
||||||
|
int no;
|
||||||
|
} err;
|
||||||
|
zend_object std;
|
||||||
|
} php_curlsh;
|
||||||
|
|
||||||
|
php_curl *init_curl_handle_into_zval(zval *curl);
|
||||||
|
void init_curl_handle(php_curl *ch);
|
||||||
|
void _php_curl_cleanup_handle(php_curl *);
|
||||||
|
void _php_curl_multi_cleanup_list(void *data);
|
||||||
|
void _php_curl_verify_handlers(php_curl *ch, int reporterror);
|
||||||
|
void _php_setup_easy_copy_handlers(php_curl *ch, php_curl *source);
|
||||||
|
|
||||||
|
static inline php_curl *curl_from_obj(zend_object *obj) {
|
||||||
|
return (php_curl *)((char *)(obj) - XtOffsetOf(php_curl, std));
|
||||||
|
}
|
||||||
|
|
||||||
|
#define Z_CURL_P(zv) curl_from_obj(Z_OBJ_P(zv))
|
||||||
|
|
||||||
|
static inline php_curlsh *curl_share_from_obj(zend_object *obj) {
|
||||||
|
return (php_curlsh *)((char *)(obj) - XtOffsetOf(php_curlsh, std));
|
||||||
|
}
|
||||||
|
|
||||||
|
#define Z_CURL_SHARE_P(zv) curl_share_from_obj(Z_OBJ_P(zv))
|
||||||
|
|
||||||
|
void curl_multi_register_class(const zend_function_entry *method_entries);
|
||||||
|
void curl_share_register_class(const zend_function_entry *method_entries);
|
||||||
|
void curlfile_register_class(void);
|
||||||
|
int curl_cast_object(zend_object *obj, zval *result, int type);
|
||||||
|
|
||||||
|
#endif /* _PHP_CURL_PRIVATE_H */
|
|
@ -60,7 +60,7 @@
|
||||||
#include "ext/standard/info.h"
|
#include "ext/standard/info.h"
|
||||||
#include "ext/standard/file.h"
|
#include "ext/standard/file.h"
|
||||||
#include "ext/standard/url.h"
|
#include "ext/standard/url.h"
|
||||||
#include "php_curl.h"
|
#include "curl_private.h"
|
||||||
#include "curl_arginfo.h"
|
#include "curl_arginfo.h"
|
||||||
|
|
||||||
#ifdef PHP_CURL_NEED_OPENSSL_TSL /* {{{ */
|
#ifdef PHP_CURL_NEED_OPENSSL_TSL /* {{{ */
|
||||||
|
|
|
@ -22,8 +22,9 @@
|
||||||
|
|
||||||
#include "php.h"
|
#include "php.h"
|
||||||
#include "Zend/zend_interfaces.h"
|
#include "Zend/zend_interfaces.h"
|
||||||
|
#include "Zend/zend_smart_str.h"
|
||||||
|
|
||||||
#include "php_curl.h"
|
#include "curl_private.h"
|
||||||
|
|
||||||
#include <curl/curl.h>
|
#include <curl/curl.h>
|
||||||
#include <curl/multi.h>
|
#include <curl/multi.h>
|
||||||
|
@ -48,7 +49,7 @@
|
||||||
|
|
||||||
/* CurlMultiHandle class */
|
/* CurlMultiHandle class */
|
||||||
|
|
||||||
static zend_class_entry *curl_multi_ce;
|
zend_class_entry *curl_multi_ce;
|
||||||
|
|
||||||
static inline php_curlm *curl_multi_from_obj(zend_object *obj) {
|
static inline php_curlm *curl_multi_from_obj(zend_object *obj) {
|
||||||
return (php_curlm *)((char *)(obj) - XtOffsetOf(php_curlm, std));
|
return (php_curlm *)((char *)(obj) - XtOffsetOf(php_curlm, std));
|
||||||
|
|
|
@ -19,9 +19,6 @@
|
||||||
#define _PHP_CURL_H
|
#define _PHP_CURL_H
|
||||||
|
|
||||||
#include "php.h"
|
#include "php.h"
|
||||||
#include "zend_smart_str.h"
|
|
||||||
|
|
||||||
#define PHP_CURL_DEBUG 0
|
|
||||||
|
|
||||||
#ifdef PHP_WIN32
|
#ifdef PHP_WIN32
|
||||||
# define PHP_CURL_API __declspec(dllexport)
|
# define PHP_CURL_API __declspec(dllexport)
|
||||||
|
@ -31,146 +28,12 @@
|
||||||
# define PHP_CURL_API
|
# define PHP_CURL_API
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "php_version.h"
|
|
||||||
#define PHP_CURL_VERSION PHP_VERSION
|
|
||||||
|
|
||||||
#include <curl/curl.h>
|
|
||||||
#include <curl/multi.h>
|
|
||||||
|
|
||||||
extern zend_module_entry curl_module_entry;
|
extern zend_module_entry curl_module_entry;
|
||||||
#define phpext_curl_ptr &curl_module_entry
|
#define phpext_curl_ptr &curl_module_entry
|
||||||
|
|
||||||
#define CURLOPT_RETURNTRANSFER 19913
|
|
||||||
#define CURLOPT_BINARYTRANSFER 19914 /* For Backward compatibility */
|
|
||||||
#define PHP_CURL_STDOUT 0
|
|
||||||
#define PHP_CURL_FILE 1
|
|
||||||
#define PHP_CURL_USER 2
|
|
||||||
#define PHP_CURL_DIRECT 3
|
|
||||||
#define PHP_CURL_RETURN 4
|
|
||||||
#define PHP_CURL_IGNORE 7
|
|
||||||
|
|
||||||
#define SAVE_CURL_ERROR(__handle, __err) \
|
|
||||||
do { (__handle)->err.no = (int) __err; } while (0)
|
|
||||||
|
|
||||||
PHP_MINIT_FUNCTION(curl);
|
|
||||||
PHP_MSHUTDOWN_FUNCTION(curl);
|
|
||||||
PHP_MINFO_FUNCTION(curl);
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
zval func_name;
|
|
||||||
zend_fcall_info_cache fci_cache;
|
|
||||||
FILE *fp;
|
|
||||||
smart_str buf;
|
|
||||||
int method;
|
|
||||||
zval stream;
|
|
||||||
} php_curl_write;
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
zval func_name;
|
|
||||||
zend_fcall_info_cache fci_cache;
|
|
||||||
FILE *fp;
|
|
||||||
zend_resource *res;
|
|
||||||
int method;
|
|
||||||
zval stream;
|
|
||||||
} php_curl_read;
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
zval func_name;
|
|
||||||
zend_fcall_info_cache fci_cache;
|
|
||||||
int method;
|
|
||||||
} php_curl_progress, php_curl_fnmatch, php_curlm_server_push;
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
php_curl_write *write;
|
|
||||||
php_curl_write *write_header;
|
|
||||||
php_curl_read *read;
|
|
||||||
zval std_err;
|
|
||||||
php_curl_progress *progress;
|
|
||||||
#if LIBCURL_VERSION_NUM >= 0x071500 /* Available since 7.21.0 */
|
|
||||||
php_curl_fnmatch *fnmatch;
|
|
||||||
#endif
|
|
||||||
} php_curl_handlers;
|
|
||||||
|
|
||||||
struct _php_curl_error {
|
|
||||||
char str[CURL_ERROR_SIZE + 1];
|
|
||||||
int no;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct _php_curl_send_headers {
|
|
||||||
zend_string *str;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct _php_curl_free {
|
|
||||||
zend_llist str;
|
|
||||||
zend_llist post;
|
|
||||||
zend_llist stream;
|
|
||||||
HashTable *slist;
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
CURL *cp;
|
|
||||||
php_curl_handlers *handlers;
|
|
||||||
struct _php_curl_free *to_free;
|
|
||||||
struct _php_curl_send_headers header;
|
|
||||||
struct _php_curl_error err;
|
|
||||||
zend_bool in_callback;
|
|
||||||
uint32_t* clone;
|
|
||||||
zval postfields;
|
|
||||||
zend_object std;
|
|
||||||
} php_curl;
|
|
||||||
|
|
||||||
#define CURLOPT_SAFE_UPLOAD -1
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
php_curlm_server_push *server_push;
|
|
||||||
} php_curlm_handlers;
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
int still_running;
|
|
||||||
CURLM *multi;
|
|
||||||
zend_llist easyh;
|
|
||||||
php_curlm_handlers *handlers;
|
|
||||||
struct {
|
|
||||||
int no;
|
|
||||||
} err;
|
|
||||||
zend_object std;
|
|
||||||
} php_curlm;
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
CURLSH *share;
|
|
||||||
struct {
|
|
||||||
int no;
|
|
||||||
} err;
|
|
||||||
zend_object std;
|
|
||||||
} php_curlsh;
|
|
||||||
|
|
||||||
php_curl *init_curl_handle_into_zval(zval *curl);
|
|
||||||
void init_curl_handle(php_curl *ch);
|
|
||||||
void _php_curl_cleanup_handle(php_curl *);
|
|
||||||
void _php_curl_multi_cleanup_list(void *data);
|
|
||||||
void _php_curl_verify_handlers(php_curl *ch, int reporterror);
|
|
||||||
void _php_setup_easy_copy_handlers(php_curl *ch, php_curl *source);
|
|
||||||
|
|
||||||
static inline php_curl *curl_from_obj(zend_object *obj) {
|
|
||||||
return (php_curl *)((char *)(obj) - XtOffsetOf(php_curl, std));
|
|
||||||
}
|
|
||||||
|
|
||||||
#define Z_CURL_P(zv) curl_from_obj(Z_OBJ_P(zv))
|
|
||||||
|
|
||||||
static inline php_curlsh *curl_share_from_obj(zend_object *obj) {
|
|
||||||
return (php_curlsh *)((char *)(obj) - XtOffsetOf(php_curlsh, std));
|
|
||||||
}
|
|
||||||
|
|
||||||
#define Z_CURL_SHARE_P(zv) curl_share_from_obj(Z_OBJ_P(zv))
|
|
||||||
|
|
||||||
PHP_CURL_API extern zend_class_entry *curl_ce;
|
PHP_CURL_API extern zend_class_entry *curl_ce;
|
||||||
PHP_CURL_API extern zend_class_entry *curl_share_ce;
|
PHP_CURL_API extern zend_class_entry *curl_share_ce;
|
||||||
|
PHP_CURL_API extern zend_class_entry *curl_multi_ce;
|
||||||
void curl_multi_register_class(const zend_function_entry *method_entries);
|
|
||||||
void curl_share_register_class(const zend_function_entry *method_entries);
|
|
||||||
void curlfile_register_class(void);
|
|
||||||
int curl_cast_object(zend_object *obj, zval *result, int type);
|
|
||||||
|
|
||||||
PHP_CURL_API extern zend_class_entry *curl_CURLFile_class;
|
PHP_CURL_API extern zend_class_entry *curl_CURLFile_class;
|
||||||
|
|
||||||
#endif /* _PHP_CURL_H */
|
#endif /* _PHP_CURL_H */
|
||||||
|
|
|
@ -23,7 +23,7 @@
|
||||||
#include "php.h"
|
#include "php.h"
|
||||||
#include "Zend/zend_interfaces.h"
|
#include "Zend/zend_interfaces.h"
|
||||||
|
|
||||||
#include "php_curl.h"
|
#include "curl_private.h"
|
||||||
|
|
||||||
#include <curl/curl.h>
|
#include <curl/curl.h>
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue