\r
XSECCryptoKey* resolveKey(const KeyInfo* keyInfo) const;\r
XSECCryptoKey* resolveKey(DSIGKeyInfoList* keyInfo) const;\r
- vector<XSECCryptoX509*>::size_type resolveCertificates(const KeyInfo* keyInfo, vector<XSECCryptoX509*>& certs) const;\r
- vector<XSECCryptoX509*>::size_type resolveCertificates(DSIGKeyInfoList* keyInfo, vector<XSECCryptoX509*>& certs) const;\r
+ vector<XSECCryptoX509*>::size_type resolveCertificates(const KeyInfo* keyInfo, ResolvedCertificates& certs) const;\r
+ vector<XSECCryptoX509*>::size_type resolveCertificates(DSIGKeyInfoList* keyInfo, ResolvedCertificates& certs) const;\r
XSECCryptoX509CRL* resolveCRL(const KeyInfo* keyInfo) const;\r
XSECCryptoX509CRL* resolveCRL(DSIGKeyInfoList* keyInfo) const;\r
\r
}\r
\r
vector<XSECCryptoX509*>::size_type InlineKeyResolver::resolveCertificates(\r
- const KeyInfo* keyInfo, vector<XSECCryptoX509*>& certs\r
+ const KeyInfo* keyInfo, ResolvedCertificates& certs\r
) const\r
{\r
// Caching?\r
if (i != m_cache.end()) {\r
// Found in cache, so just return the results.\r
SharedLock locker(m_lock,false);\r
- certs.assign(i->second.m_certs.begin(), i->second.m_certs.end());\r
- return certs.size();\r
+ accessCertificates(certs).assign(i->second.m_certs.begin(), i->second.m_certs.end());\r
+ accessOwned(certs) = false;\r
+ return accessCertificates(certs).size();\r
}\r
else {\r
// Elevate lock.\r
i = m_cache.insert(make_pair(keyInfo,CacheEntry())).first;\r
_resolve(i->first, i->second);\r
}\r
- certs.assign(i->second.m_certs.begin(), i->second.m_certs.end());\r
- return certs.size();\r
+ accessCertificates(certs).assign(i->second.m_certs.begin(), i->second.m_certs.end());\r
+ accessOwned(certs) = false;\r
+ return accessCertificates(certs).size();\r
}\r
}\r
- return _resolveCertificates(keyInfo, certs);\r
+ accessOwned(certs) = true;\r
+ return _resolveCertificates(keyInfo, accessCertificates(certs));\r
}\r
\r
XSECCryptoKey* InlineKeyResolver::resolveKey(DSIGKeyInfoList* keyInfo) const\r
}\r
\r
vector<XSECCryptoX509*>::size_type InlineKeyResolver::resolveCertificates(\r
- DSIGKeyInfoList* keyInfo, vector<XSECCryptoX509*>& certs\r
+ DSIGKeyInfoList* keyInfo, ResolvedCertificates& certs\r
) const\r
{\r
- certs.clear();\r
+ accessCertificates(certs).clear();\r
+ accessOwned(certs) = false;\r
DSIGKeyInfoList::size_type sz = keyInfo->getSize();\r
- for (DSIGKeyInfoList::size_type i=0; certs.empty() && i<sz; ++i) {\r
+ for (DSIGKeyInfoList::size_type i=0; accessCertificates(certs).empty() && i<sz; ++i) {\r
if (keyInfo->item(i)->getKeyInfoType()==DSIGKeyInfo::KEYINFO_X509) {\r
DSIGKeyInfoX509* x509 = static_cast<DSIGKeyInfoX509*>(keyInfo->item(i));\r
int count = x509->getCertificateListSize();\r
for (int j=0; j<count; ++j) {\r
- certs.push_back(x509->getCertificateCryptoItem(j));\r
+ accessCertificates(certs).push_back(x509->getCertificateCryptoItem(j));\r
}\r
}\r
}\r
- return certs.size();\r
+ return accessCertificates(certs).size();\r
}\r
\r
XSECCryptoX509CRL* InlineKeyResolver::resolveCRL(DSIGKeyInfoList* keyInfo) const\r