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

#ifndef SQUID_SRC_SSL_PROXYCERTS_H
#define SQUID_SRC_SSL_PROXYCERTS_H

#if USE_OPENSSL
#include "acl/forward.h"
#include "acl/Gadgets.h"
#include "ssl/gadgets.h"

class sslproxy_cert_sign
{
public:
    sslproxy_cert_sign() = default;
    sslproxy_cert_sign(sslproxy_cert_sign &&) = delete; // prohibit all copy/move
    ~sslproxy_cert_sign() {
        while (const auto first = next) {
            next = first->next;
            first->next = nullptr;
            delete first;
        }
        if (aclList)
            aclDestroyAclList(&aclList);
    }

public:
    Ssl::CertSignAlgorithm alg = Ssl::algSignEnd;
    ACLList *aclList = nullptr;
    sslproxy_cert_sign *next = nullptr;
};

class sslproxy_cert_adapt
{
public:
    sslproxy_cert_adapt() = default;
    sslproxy_cert_adapt(sslproxy_cert_adapt &&) = delete; // prohibit all copy/move
    ~sslproxy_cert_adapt() {
        while (const auto first = next) {
            next = first->next;
            first->next = nullptr;
            delete first;
        }
        xfree(param);
        if (aclList)
            aclDestroyAclList(&aclList);
    }

public:
    Ssl::CertAdaptAlgorithm alg = Ssl::algSetEnd;
    char *param = nullptr;
    ACLList *aclList = nullptr;
    sslproxy_cert_adapt *next = nullptr;
};
#endif

#endif /* SQUID_SRC_SSL_PROXYCERTS_H */

