#ifndef HEADER_CURL_MULTI_EV_H #define HEADER_CURL_MULTI_EV_H /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at https://curl.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * SPDX-License-Identifier: curl * ***************************************************************************/ #include "hash.h" #include "hash_offt.h" struct Curl_easy; struct Curl_multi; struct easy_pollset; struct curl_multi_ev { struct Curl_hash sh_entries; struct Curl_hash_offt xfer_pollsets; struct Curl_hash_offt conn_pollsets; }; /* Setup/teardown of multi event book-keeping. */ void Curl_multi_ev_init(struct Curl_multi *multi, size_t hashsize); void Curl_multi_ev_cleanup(struct Curl_multi *multi); /* Assign a 'user_data' to be passed to the socket callback when * invoked with the given socket. This will fail if this socket * is not active, e.g. the application has not been told to monitor it. */ CURLMcode Curl_multi_ev_assign(struct Curl_multi *multi, curl_socket_t s, void *user_data); /* Assess the transfer by getting its current pollset, compute * any changes to the last one and inform the application's socket * callback if things have changed. */ CURLMcode Curl_multi_ev_assess_xfer(struct Curl_multi *multi, struct Curl_easy *data); /* Assess all easy handles on the list */ CURLMcode Curl_multi_ev_assess_xfer_list(struct Curl_multi *multi, struct Curl_llist *list); /* Assess the connection by getting its current pollset */ CURLMcode Curl_multi_ev_assess_conn(struct Curl_multi *multi, struct Curl_easy *data, struct connectdata *conn); /* Expire all transfers tied to the given socket */ void Curl_multi_ev_expire_xfers(struct Curl_multi *multi, curl_socket_t s, const struct curltime *nowp, bool *run_cpool); /* Socket will be closed, forget anything we know about it. */ void Curl_multi_ev_socket_done(struct Curl_multi *multi, struct Curl_easy *data, curl_socket_t s); /* Transfer is removed from the multi */ void Curl_multi_ev_xfer_done(struct Curl_multi *multi, struct Curl_easy *data); /* Connection is being destroyed */ void Curl_multi_ev_conn_done(struct Curl_multi *multi, struct Curl_easy *data, struct connectdata *conn); #endif /* HEADER_CURL_MULTI_EV_H */