]> git.ipfire.org Git - thirdparty/squid.git/blobdiff - src/adaptation/icap/History.cc
Source Format Enforcement (#1234)
[thirdparty/squid.git] / src / adaptation / icap / History.cc
index 56e52908274ead1dd616c87b6376c31db3e8666c..a75d44faff667f665efd60cdca94e93695f1b588 100644 (file)
-#include "adaptation/icap/History.h"
+/*
+ * Copyright (C) 1996-2023 The Squid Software Foundation and contributors
+ *
+ * Squid software is distributed under GPLv2+ license and includes
+ * contributions from numerous individuals and organizations.
+ * Please see the COPYING and CONTRIBUTORS files for details.
+ */
+
 #include "squid.h"
+#include "adaptation/icap/History.h"
+#include "debug/Stream.h"
 #include "globals.h"
-#include "SquidTime.h"
-
-Adaptation::Icap::History::History(): mergeOfIcapHeaders(hoRequest),
-    lastIcapHeader(hoRequest), logType(LOG_TAG_NONE), req_sz(0),
-    pastTime(0), concurrencyLevel(0)
-{
-}
-
-Adaptation::Icap::History::History(const Adaptation::Icap::History& ih)
-{
-    assign(ih);
-}
-
-Adaptation::Icap::History::~History()
-{
-    mergeOfIcapHeaders.clean();
-    lastIcapHeader.clean();
-    rfc931.clean();
-#if USE_SSL
-    ssluser.clean();
-#endif 
-    log_uri.clean();
-}
-
-void Adaptation::Icap::History::assign(const Adaptation::Icap::History& ih)
-{
-    mergeOfIcapHeaders.clean();
-    mergeOfIcapHeaders.update(&ih.mergeOfIcapHeaders, NULL);
-    lastIcapHeader.clean();
-    lastIcapHeader.update(&ih.lastIcapHeader, NULL);
-    rfc931 = ih.rfc931;
-
-#if USE_SSL
-    ssluser = ih.ssluser;
-#endif
-
-    logType = ih.logType;
-    log_uri = ih.log_uri;
-    req_sz = ih.req_sz;
-    pastTime = ih.pastTime;
-    currentStart = ih.currentStart;
-    concurrencyLevel = ih.concurrencyLevel;
-    debugs(93,7, HERE << this << " = " << &ih);
-}
-
-Adaptation::Icap::History& Adaptation::Icap::History::operator=(const History& ih)
-{
-    if (this != &ih)
-        assign(ih);
-    return *this;
-}
+#include "time/gadgets.h"
 
-void Adaptation::Icap::History::setIcapLastHeader(const HttpHeader * lih)
+Adaptation::Icap::History::History():
+    req_sz(0),
+    concurrencyLevel(0)
 {
-    lastIcapHeader.clean();
-    lastIcapHeader.update(lih, NULL);
+    memset(&currentStart, 0, sizeof(currentStart));
+    memset(&pastTime, 0, sizeof(pastTime));
 }
 
-void Adaptation::Icap::History::mergeIcapHeaders(const HttpHeader * lih)
-{
-    mergeOfIcapHeaders.update(lih, NULL);
-    mergeOfIcapHeaders.compact();
-}
-
-void Adaptation::Icap::History::start(const char *context) 
+void Adaptation::Icap::History::start(const char *context)
 {
     if (!concurrencyLevel++)
         currentStart = current_time;
 
-    debugs(93,4, HERE << "start " << context << " level=" << concurrencyLevel
-        << " time=" << pastTime << ' ' << this);
+    debugs(93,4, "start " << context << " level=" << concurrencyLevel
+           << " time=" << tvToMsec(pastTime) << ' ' << this);
 }
 
-void Adaptation::Icap::History::stop(const char *context) 
+void Adaptation::Icap::History::stop(const char *context)
 {
     if (!concurrencyLevel) {
-        debugs(93,1, HERE << "Internal error: poor history accounting " << this);
+        debugs(93, DBG_IMPORTANT, "ERROR: Squid BUG: poor history accounting " << this);
         return;
     }
 
-    const int current = currentTime();
-    debugs(93,4, HERE << "stop " << context << " level=" << concurrencyLevel <<
-        " time=" << pastTime << '+' << current << ' ' << this);
-    
+    struct timeval current;
+    currentTime(current);
+    debugs(93,4, "stop " << context << " level=" << concurrencyLevel <<
+           " time=" << tvToMsec(pastTime) << '+' << tvToMsec(current) << ' ' << this);
+
     if (!--concurrencyLevel)
-        pastTime += current;
+        tvAssignAdd(pastTime, current);
 }
 
-int Adaptation::Icap::History::processingTime() const
+void
+Adaptation::Icap::History::processingTime(timeval &total) const
 {
-    const int total = pastTime + currentTime();
-    debugs(93,7, HERE << " current total: " << total << ' ' << this);
-    return total;
+    currentTime(total);
+    tvAssignAdd(total, pastTime);
+    debugs(93,7, " current total: " << tvToMsec(total) << ' ' << this);
 }
 
-int Adaptation::Icap::History::currentTime() const
+void
+Adaptation::Icap::History::currentTime(timeval &current) const
 {
-    return concurrencyLevel > 0 ?
-        max(0, tvSubMsec(currentStart, current_time)) : 0;
+    if (concurrencyLevel > 0)
+        tvSub(current, currentStart, current_time);
+    else {
+        current.tv_sec = 0;
+        current.tv_usec = 0;
+    }
 }
+