File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / curl / lib / speedcheck.c
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Wed Jun 3 10:01:15 2020 UTC (5 years ago) by misho
Branches: curl, MAIN
CVS tags: v7_70_0p4, HEAD
curl

    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:         timediff_t howlong = Curl_timediff(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: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>