X7ROOT File Manager
Current Path:
/opt/alt/php84/usr/include/php/ext/swoole/ext-src
opt
/
alt
/
php84
/
usr
/
include
/
php
/
ext
/
swoole
/
ext-src
/
??
..
??
php_swoole_call_stack.h
(1.81 KB)
??
php_swoole_client.h
(2.79 KB)
??
php_swoole_coroutine.h
(9.85 KB)
??
php_swoole_coroutine_system.h
(1.89 KB)
??
php_swoole_curl.h
(5.07 KB)
??
php_swoole_cxx.h
(27.05 KB)
??
php_swoole_firebird.h
(4.87 KB)
??
php_swoole_ftp_def.h
(1.17 KB)
??
php_swoole_http.h
(16.25 KB)
??
php_swoole_http_server.h
(4.12 KB)
??
php_swoole_library.h
(425.52 KB)
??
php_swoole_odbc.h
(5.62 KB)
??
php_swoole_oracle.h
(2.97 KB)
??
php_swoole_pgsql.h
(2.55 KB)
??
php_swoole_private.h
(44.83 KB)
??
php_swoole_process.h
(1.52 KB)
??
php_swoole_server.h
(6.87 KB)
??
php_swoole_sqlite.h
(2.2 KB)
??
php_swoole_ssh2.h
(2.31 KB)
??
php_swoole_ssh2_def.h
(1.28 KB)
??
php_swoole_ssh2_hook.h
(21.9 KB)
??
php_swoole_stdext.h
(1.84 KB)
??
php_swoole_thread.h
(10.78 KB)
??
php_swoole_websocket.h
(2.49 KB)
??
swoole_curl_interface.h
(2.31 KB)
Editing: php_swoole_curl.h
/* +----------------------------------------------------------------------+ | Swoole | +----------------------------------------------------------------------+ | This source file is subject to version 2.0 of the Apache 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.apache.org/licenses/LICENSE-2.0.html | | If you did not receive a copy of the Apache2.0 license and are unable| | to obtain it through the world-wide-web, please send a note to | | license@swoole.com so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Tianfeng Han <rango@swoole.com> | +----------------------------------------------------------------------+ */ #pragma once #include "php_swoole_cxx.h" #ifdef SW_USE_CURL #include "swoole_util.h" SW_EXTERN_C_BEGIN #include <curl/curl.h> #include <curl/multi.h> #if PHP_VERSION_ID >= 80400 #include "thirdparty/php84/curl/curl_private.h" #else #include "thirdparty/php/curl/curl_private.h" #endif SW_EXTERN_C_END #if LIBCURL_VERSION_NUM < 0x073800 #error "require cURL version 7.56.0 or later" #endif #include <unordered_set> CURLcode swoole_curl_easy_perform(CURL *cp); php_curl *swoole_curl_get_handle(zval *zid, bool exclusive = true, bool required = true); void swoole_curl_easy_reset(CURL *curl); namespace swoole { namespace curl { class Multi; struct Socket { Multi *multi; network::Socket *socket; int bitmask; int sockfd; int action; bool deleted; }; struct Handle { CURL *cp; Multi *multi; /** * This is only for the swoole_curl_easy_perform function, * and it has a one-to-one relationship with the curl handle. * It must be destroyed when the curl handle is released. */ Multi *easy_multi; explicit Handle(CURL *_cp) { cp = _cp; multi = nullptr; easy_multi = nullptr; } }; Handle *get_handle(CURL *cp); Handle *create_handle(CURL *ch); void destroy_handle(CURL *ch); struct Selector { bool timer_callback = false; bool executing = false; std::unordered_set<Socket *> active_sockets; std::unordered_set<Socket *> release_sockets; }; class Multi { CURLM *multi_handle_; TimerNode *timer = nullptr; long timeout_ms_ = 0; Coroutine *co = nullptr; int running_handles_ = 0; bool defer_callback = false; Selector selector; std::unordered_map<curl_socket_t, Socket *> sockets; CURLcode read_info() const; int set_event(void *socket_ptr, curl_socket_t sockfd, int action); int del_event(void *socket_ptr, curl_socket_t sockfd); void selector_finish(); void selector_prepare(); bool wait_event() const { return timer || !sockets.empty(); } void add_timer(long timeout_ms) { if (timer && swoole_timer_is_available()) { swoole_timer_del(timer); } timeout_ms_ = timeout_ms; timer = swoole_timer_add(timeout_ms, false, [this](Timer *_timer, TimerNode *tnode) { timer = nullptr; callback(nullptr, 0); }); } void del_timer() { if (timer && swoole_timer_is_available()) { swoole_timer_del(timer); timeout_ms_ = -1; timer = nullptr; } } void set_timer() { long _timeout_ms = 0; curl_multi_timeout(multi_handle_, &_timeout_ms); handle_timeout(multi_handle_, _timeout_ms, this); } public: Multi(); ~Multi(); CURLM *get_multi_handle() const { return multi_handle_; } int get_running_handles() const { return running_handles_; } CURLMcode add_handle(Handle *handle); CURLMcode remove_handle(Handle *handle) const; CURLMcode perform() { return curl_multi_perform(multi_handle_, &running_handles_); } int get_event(int action) { return action == CURL_POLL_IN ? SW_EVENT_READ : SW_EVENT_WRITE; } Coroutine *check_bound_co() { if (co) { Coroutine::set_socket_bound_cid(co->get_cid()); swoole_fatal_error(SW_ERROR_CO_HAS_BEEN_BOUND, "This cURL handle is currently executing in coroutine#%ld, cannot be operated", co->get_cid()); return nullptr; } return Coroutine::get_current_safe(); } CURLcode exec(Handle *handle); long select(php_curlm *mh, double timeout = -1); void callback(Socket *curl_socket, int bitmask, int sockfd = -1); static int cb_readable(Reactor *reactor, Event *event); static int cb_writable(Reactor *reactor, Event *event); static int cb_error(Reactor *reactor, Event *event); static int handle_socket(CURL *easy, curl_socket_t s, int action, void *userp, void *socketp); static int handle_timeout(CURLM *multi, long timeout_ms, void *userp); }; }; // namespace curl } // namespace swoole #endif
Upload File
Create Folder