/*
 * 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.
 */

/* DEBUG: section 28    Access Control */

#include "squid.h"
#include "acl/ConnectionsEncrypted.h"
#include "acl/FilledChecklist.h"
#include "Debug.h"
#include "HttpReply.h"
#include "HttpRequest.h"
#include "SquidConfig.h"

ACL *
Acl::ConnectionsEncrypted::clone() const
{
    return new Acl::ConnectionsEncrypted(*this);
}

Acl::ConnectionsEncrypted::ConnectionsEncrypted (char const *theClass) : class_ (theClass)
{}

Acl::ConnectionsEncrypted::ConnectionsEncrypted (Acl::ConnectionsEncrypted const & old) :class_ (old.class_)
{}

Acl::ConnectionsEncrypted::~ConnectionsEncrypted()
{}

char const *
Acl::ConnectionsEncrypted::typeString() const
{
    return class_;
}

bool
Acl::ConnectionsEncrypted::empty () const
{
    return false;
}

void
Acl::ConnectionsEncrypted::parse()
{
    if (ConfigParser::strtokFile()) {
        debugs(89, DBG_CRITICAL, "WARNING: connections_encrypted does not accept any value.");
    }
}

int
Acl::ConnectionsEncrypted::match(ACLChecklist *checklist)
{
    if (!checklist->hasRequest()) {
        debugs(28, DBG_IMPORTANT, "WARNING: " << name << " ACL is used in " <<
               "context without an HTTP request. Assuming mismatch.");
        return 0;
    }

    ACLFilledChecklist *filled = Filled((ACLChecklist*)checklist);

    const bool safeRequest =
        !(filled->request->sources & Http::Message::srcUnsafe);
    const bool safeReply = !filled->reply ||
                           !(filled->reply->sources & Http::Message::srcUnsafe);

    return (safeRequest && safeReply) ? 1 : 0;
}

SBufList
Acl::ConnectionsEncrypted::dump() const
{
    return SBufList();
}

