From fcadb546401aea56c6ef2b257903ad06fe9f28ce Mon Sep 17 00:00:00 2001 From: Arnaud Ferraris Date: Mon, 26 Mar 2018 16:01:50 -0700 Subject: [PATCH] ecore_con_url: implement transfer speed limitation options Summary: Add MAX_SEND_SPEED & MAX_RECV_SPEED cURL options handling in ecore_con_url. Reviewers: cedric Reviewed By: cedric Subscribers: cedric Differential Revision: https://phab.enlightenment.org/D5848 Reviewed-by: Cedric BAIL --- src/lib/ecore_con/Ecore_Con.h | 17 ++++++++++++++++ src/lib/ecore_con/ecore_con_url.c | 28 ++++++++++++++++++++++++++ src/lib/ecore_con/ecore_con_url_curl.h | 2 ++ 3 files changed, 47 insertions(+) diff --git a/src/lib/ecore_con/Ecore_Con.h b/src/lib/ecore_con/Ecore_Con.h index e5916b1b69..d5d6758acb 100644 --- a/src/lib/ecore_con/Ecore_Con.h +++ b/src/lib/ecore_con/Ecore_Con.h @@ -2366,6 +2366,23 @@ EAPI void ecore_con_url_timeout_set(Ecore_Con_Url *url_con, double timeout); * @since 1.2 */ EAPI int ecore_con_url_status_code_get(Ecore_Con_Url *url_con); + +/** + * @brief Sets a maximum upload speed. + * + * @param url_con Connection object + * @param max_speed Maximum upload speed, in bytes per second + */ +EAPI void ecore_con_url_limit_upload_speed(Ecore_Con_Url *url_obj, off_t max_speed); + +/** + * @brief Sets a maximum download speed. + * + * @param url_con Connection object + * @param max_speed Maximum download speed, in bytes per second + */ +EAPI void ecore_con_url_limit_download_speed(Ecore_Con_Url *url_obj, off_t max_speed); + /** * @} */ diff --git a/src/lib/ecore_con/ecore_con_url.c b/src/lib/ecore_con/ecore_con_url.c index e8ca8c4cdf..6a9d06d582 100644 --- a/src/lib/ecore_con/ecore_con_url.c +++ b/src/lib/ecore_con/ecore_con_url.c @@ -1221,6 +1221,34 @@ ecore_con_url_ftp_use_epsv_set(Ecore_Con_Url *url_con, url_con->ftp_use_epsv = use_epsv; } +EAPI void +ecore_con_url_limit_upload_speed(Ecore_Con_Url *url_con, off_t max_speed) +{ + CURL *curl_easy; + + ECORE_CON_URL_CHECK_RETURN(url_con); + EINA_SAFETY_ON_NULL_RETURN(_c); + + curl_easy = efl_net_dialer_http_curl_get(url_con->dialer); + EINA_SAFETY_ON_NULL_RETURN(curl_easy); + + _c->curl_easy_setopt(curl_easy, CURLOPT_MAX_SEND_SPEED_LARGE, max_speed); +} + +EAPI void +ecore_con_url_limit_download_speed(Ecore_Con_Url *url_con, off_t max_speed) +{ + CURL *curl_easy; + + ECORE_CON_URL_CHECK_RETURN(url_con); + EINA_SAFETY_ON_NULL_RETURN(_c); + + curl_easy = efl_net_dialer_http_curl_get(url_con->dialer); + EINA_SAFETY_ON_NULL_RETURN(curl_easy); + + _c->curl_easy_setopt(curl_easy, CURLOPT_MAX_RECV_SPEED_LARGE, max_speed); +} + /* LEGACY: proxy */ EAPI Eina_Bool ecore_con_url_proxy_password_set(Ecore_Con_Url *url_con, const char *password) diff --git a/src/lib/ecore_con/ecore_con_url_curl.h b/src/lib/ecore_con/ecore_con_url_curl.h index ae79c4c5cb..ed68e5c4f4 100644 --- a/src/lib/ecore_con/ecore_con_url_curl.h +++ b/src/lib/ecore_con/ecore_con_url_curl.h @@ -268,6 +268,8 @@ typedef enum CINIT(INFILESIZE_LARGE, OFF_T, 115), CINIT(POSTFIELDSIZE_LARGE, OFF_T, 120), CINIT(COOKIELIST, OBJECTPOINT, 135), + CINIT(MAX_SEND_SPEED_LARGE, OFF_T, 145), + CINIT(MAX_RECV_SPEED_LARGE, OFF_T, 146), CINIT(OPENSOCKETFUNCTION, FUNCTIONPOINT, 163), CINIT(OPENSOCKETDATA, OBJECTPOINT, 164), CINIT(CRLFILE, STRINGPOINT, 169),