]> granicus.if.org Git - php/commitdiff
Private/public split curl header
authorNikita Popov <nikita.ppv@gmail.com>
Mon, 7 Sep 2020 09:12:41 +0000 (11:12 +0200)
committerNikita Popov <nikita.ppv@gmail.com>
Mon, 7 Sep 2020 09:12:41 +0000 (11:12 +0200)
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.

ext/curl/config.m4
ext/curl/config.w32
ext/curl/curl_file.c
ext/curl/curl_private.h [new file with mode: 0644]
ext/curl/interface.c
ext/curl/multi.c
ext/curl/php_curl.h
ext/curl/share.c

index 051d97743b67b875c2cc3a4c60128acd3ddb9e6a..3b11739654bd6a27832f52e3e8f02825ba16edbf 100644 (file)
@@ -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_INSTALL_HEADERS([ext/curl], [php_curl.h])
   PHP_SUBST(CURL_SHARED_LIBADD)
 fi
index 8ff6718b606be41ca7a4a72bb6ea9b2b1b4db5f4..9402e5b3ec8017e5e6d58c7c2cea7dc85a059e95 100644 (file)
@@ -29,6 +29,7 @@ if (PHP_CURL != "no") {
                EXTENSION("curl", "interface.c multi.c share.c curl_file.c");
                AC_DEFINE('HAVE_CURL', 1, 'Have cURL library');
                ADD_FLAG("CFLAGS_CURL", "/D CURL_STATICLIB");
+               PHP_INSTALL_HEADERS("ext/curl", "php_curl.h");
                // TODO: check for curl_version_info
        } else {
                WARNING("curl not enabled; libraries and headers not found");
index 3888840fd16a66cec1758a0cc54602d4511cc0ce..aad162604a1f4002fda65a087cc73c71d400a1cd 100644 (file)
@@ -21,7 +21,7 @@
 #include "php.h"
 #include "Zend/zend_exceptions.h"
 #include "Zend/zend_interfaces.h"
-#include "php_curl.h"
+#include "curl_private.h"
 #include "curl_file_arginfo.h"
 
 PHP_CURL_API zend_class_entry *curl_CURLFile_class;
diff --git a/ext/curl/curl_private.h b/ext/curl/curl_private.h
new file mode 100644 (file)
index 0000000..8ff0aef
--- /dev/null
@@ -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 */
index 906b1c4a0b6622fcc79455f612d9bc060574636a..09e02b3ba527c2cf7e9df85f6bfff2e77243302d 100644 (file)
@@ -60,7 +60,7 @@
 #include "ext/standard/info.h"
 #include "ext/standard/file.h"
 #include "ext/standard/url.h"
-#include "php_curl.h"
+#include "curl_private.h"
 #include "curl_arginfo.h"
 
 #ifdef PHP_CURL_NEED_OPENSSL_TSL /* {{{ */
index 954575d54f9c4eb0f0aa5d88487f0931f5dd979f..2c2e37e4028accbdab8111f091afcf3744f2cd29 100644 (file)
@@ -22,8 +22,9 @@
 
 #include "php.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/multi.h>
@@ -48,7 +49,7 @@
 
 /* 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) {
        return (php_curlm *)((char *)(obj) - XtOffsetOf(php_curlm, std));
index 2a195b082ba0183194bd69f5688898d756fcc62f..ebb56278aa24fd8d67b65704df3d693370f62a7a 100644 (file)
@@ -19,9 +19,6 @@
 #define _PHP_CURL_H
 
 #include "php.h"
-#include "zend_smart_str.h"
-
-#define PHP_CURL_DEBUG 0
 
 #ifdef PHP_WIN32
 # define PHP_CURL_API __declspec(dllexport)
 # define PHP_CURL_API
 #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;
 #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_share_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_multi_ce;
 PHP_CURL_API extern zend_class_entry *curl_CURLFile_class;
 
 #endif  /* _PHP_CURL_H */
index d7eb7be56a23fab486b025e1eac17e6985c60690..58135acdb5659b1126771e8c43a07fb80e6b4b21 100644 (file)
@@ -23,7 +23,7 @@
 #include "php.h"
 #include "Zend/zend_interfaces.h"
 
-#include "php_curl.h"
+#include "curl_private.h"
 
 #include <curl/curl.h>