Add a standalong hash table for curl_offt_t as key. This allows a smaller memory footprint and faster lookups as we do not need to deal with variable key lengths. Use in all places we had the standard hash for this purpose.
83 lines
3.3 KiB
C
83 lines
3.3 KiB
C
#ifndef HEADER_CURL_MULTI_EV_H
|
|
#define HEADER_CURL_MULTI_EV_H
|
|
/***************************************************************************
|
|
* _ _ ____ _
|
|
* Project ___| | | | _ \| |
|
|
* / __| | | | |_) | |
|
|
* | (__| |_| | _ <| |___
|
|
* \___|\___/|_| \_\_____|
|
|
*
|
|
* Copyright (C) Daniel Stenberg, <daniel@haxx.se>, 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 */
|