Main Page
Related Pages
Namespaces
Classes
Files
File List
File Members
opt
cpr
opt
curl
lib
speedcheck.c
Go to the documentation of this file.
1
/***************************************************************************
2
* _ _ ____ _
3
* Project ___| | | | _ \| |
4
* / __| | | | |_) | |
5
* | (__| |_| | _ <| |___
6
* \___|\___/|_| \_\_____|
7
*
8
* Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, et al.
9
*
10
* This software is licensed as described in the file COPYING, which
11
* you should have received as part of this distribution. The terms
12
* are also available at https://curl.haxx.se/docs/copyright.html.
13
*
14
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
15
* copies of the Software, and permit persons to whom the Software is
16
* furnished to do so, under the terms of the COPYING file.
17
*
18
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
19
* KIND, either express or implied.
20
*
21
***************************************************************************/
22
23
#include "
curl_setup.h
"
24
25
#include <
curl/curl.h
>
26
#include "
urldata.h
"
27
#include "
sendf.h
"
28
#include "
multiif.h
"
29
#include "
speedcheck.h
"
30
31
void
Curl_speedinit
(
struct
Curl_easy
*
data
)
32
{
33
memset(&data->
state
.
keeps_speed
, 0,
sizeof
(
struct
curltime
));
34
}
35
36
/*
37
* @unittest: 1606
38
*/
39
CURLcode
Curl_speedcheck
(
struct
Curl_easy
*
data
,
40
struct
curltime
now
)
41
{
42
if
((data->
progress
.
current_speed
>= 0) && data->
set
.
low_speed_time
) {
43
if
(data->
progress
.
current_speed
< data->
set
.
low_speed_limit
) {
44
if
(!data->
state
.
keeps_speed
.
tv_sec
)
45
/* under the limit at this very moment */
46
data->
state
.
keeps_speed
=
now
;
47
else
{
48
/* how long has it been under the limit */
49
time_t howlong =
Curl_tvdiff
(now, data->
state
.
keeps_speed
);
50
51
if
(howlong >= data->
set
.
low_speed_time
* 1000) {
52
/* too long */
53
failf
(data,
54
"Operation too slow. "
55
"Less than %ld bytes/sec transferred the last %ld seconds"
,
56
data->
set
.
low_speed_limit
,
57
data->
set
.
low_speed_time
);
58
return
CURLE_OPERATION_TIMEDOUT
;
59
}
60
}
61
}
62
else
63
/* faster right now */
64
data->
state
.
keeps_speed
.
tv_sec
= 0;
65
}
66
67
if
(data->
set
.
low_speed_limit
)
68
/* if low speed limit is enabled, set the expire timer to make this
69
connection's speed get checked again in a second */
70
Curl_expire
(data, 1000,
EXPIRE_SPEEDCHECK
);
71
72
return
CURLE_OK
;
73
}
CURLE_OPERATION_TIMEDOUT
Definition:
curl.h:495
Curl_easy::set
struct UserDefined set
Definition:
urldata.h:1762
EXPIRE_SPEEDCHECK
Definition:
urldata.h:1220
curltime::tv_sec
time_t tv_sec
Definition:
timeval.h:33
failf
#define failf
Definition:
sendf.h:48
sendf.h
CURLcode
CURLcode
Definition:
curl.h:454
now
struct curltime now
Definition:
unit1399.c:83
curl.h
speedcheck.h
Progress::current_speed
curl_off_t current_speed
Definition:
urldata.h:1100
UserDefined::low_speed_limit
long low_speed_limit
Definition:
urldata.h:1554
UserDefined::low_speed_time
long low_speed_time
Definition:
urldata.h:1555
Curl_speedinit
void Curl_speedinit(struct Curl_easy *data)
Definition:
speedcheck.c:31
Curl_easy::progress
struct Progress progress
Definition:
urldata.h:1768
curltime
Definition:
timeval.h:32
CURLE_OK
Definition:
curl.h:455
Curl_speedcheck
CURLcode Curl_speedcheck(struct Curl_easy *data, struct curltime now)
Definition:
speedcheck.c:39
multiif.h
curl_setup.h
Curl_easy::state
struct UrlState state
Definition:
urldata.h:1769
Curl_easy
Definition:
urldata.h:1732
UrlState::keeps_speed
struct curltime keeps_speed
Definition:
urldata.h:1246
Curl_tvdiff
#define Curl_tvdiff(x, y)
Definition:
timeval.h:58
Curl_expire
void Curl_expire(struct Curl_easy *data, time_t milli, expire_id id)
Definition:
multi.c:2930
urldata.h
data
Definition:
debug.c:29
rc_tagdetect_client
Author(s): Monika Florek-Jasinska
, Raphael Schaller
autogenerated on Sat Feb 13 2021 03:42:16