auto newPair = DNSCryptContext::loadCertificatePair(certFile, keyFile);
newPair->active = active;
addNewCertificate(newPair, reload);
- d_certKeyPaths.push_back({certFile, keyFile});
+ {
+ WriteLock w(&d_lock);
+ d_certKeyPaths.push_back({certFile, keyFile});
+ }
}
void DNSCryptContext::reloadCertificates()
{
std::vector<std::shared_ptr<DNSCryptCertificatePair>> newCerts;
- for (const auto& pair : d_certKeyPaths) {
- newCerts.push_back(DNSCryptContext::loadCertificatePair(pair.cert, pair.key));
+
+ {
+ ReadLock rl(&d_lock);
+ newCerts.reserve(d_certKeyPaths.size());
+ for (const auto& pair : d_certKeyPaths) {
+ newCerts.push_back(DNSCryptContext::loadCertificatePair(pair.cert, pair.key));
+ }
}
{
}
}
+std::vector<std::shared_ptr<DNSCryptCertificatePair>> DNSCryptContext::getCertificates() {
+ std::vector<std::shared_ptr<DNSCryptCertificatePair>> ret;
+ {
+ ReadLock w(&d_lock);
+ ret = d_certs;
+ }
+
+ return ret;
+};
+
void DNSCryptContext::markActive(uint32_t serial)
{
WriteLock w(&d_lock);
void markActive(uint32_t serial);
void markInactive(uint32_t serial);
void removeInactiveCertificate(uint32_t serial);
- std::vector<std::shared_ptr<DNSCryptCertificatePair>> getCertificates() { return d_certs; };
+ std::vector<std::shared_ptr<DNSCryptCertificatePair>> getCertificates();
const DNSName& getProviderName() const { return providerName; }
int encryptQuery(PacketBuffer& query, size_t maximumSize, const unsigned char clientPublicKey[DNSCRYPT_PUBLIC_KEY_SIZE], const DNSCryptPrivateKey& clientPrivateKey, const unsigned char clientNonce[DNSCRYPT_NONCE_SIZE / 2], bool tcp, const std::shared_ptr<DNSCryptCert>& cert) const;