bool CRemoteDataObject::SetData(size_t len, const void* buf) { char* data = (char*)buf; if (data[len - 1] != 0) return false; if (!m_xmlFile.ParseData(data)) return false; TiXmlElement* pElement = m_xmlFile.GetElement(); if (!pElement || !(pElement = pElement->FirstChildElement("RemoteDataObject"))) return false; m_processId = GetTextElementInt(pElement, "ProcessId", -1); if (m_processId == -1) return false; TiXmlElement* pServer = pElement->FirstChildElement("Server"); if (!pServer || !::GetServer(pServer, m_server)) return false; wxString path = GetTextElement(pElement, "Path"); if (path == _T("") || !m_path.SetSafePath(path)) return false; m_fileList.clear(); TiXmlElement* pFiles = pElement->FirstChildElement("Files"); if (!pFiles) return false; for (TiXmlElement* pFile = pFiles->FirstChildElement("File"); pFile; pFile = pFile->NextSiblingElement("File")) { t_fileInfo info; info.name = GetTextElement(pFile, "Name"); if (info.name == _T("")) return false; const int dir = GetTextElementInt(pFile, "Dir", -1); if (dir == -1) return false; info.dir = dir == 1; info.size = GetTextElementLongLong(pFile, "Size", -2); if (info.size <= -2) return false; info.link = GetTextElementBool(pFile, "Link", false); m_fileList.push_back(info); } return true; }
void CVerifyCertDialog::LoadTrustedCerts() { CReentrantInterProcessMutexLocker mutex(MUTEX_TRUSTEDCERTS); if (!m_xmlFile.Modified()) { return; } TiXmlElement* pElement = m_xmlFile.Load(); if (!pElement) { return; } m_trustedCerts.clear(); if (!(pElement = pElement->FirstChildElement("TrustedCerts"))) return; bool modified = false; TiXmlElement* pCert = pElement->FirstChildElement("Certificate"); while (pCert) { wxString value = GetTextElement(pCert, "Data"); TiXmlElement* pRemove = 0; t_certData data; if (value.empty() || !(data.data = ConvertStringToHex(value, data.len))) pRemove = pCert; data.host = GetTextElement(pCert, "Host"); data.port = GetTextElementInt(pCert, "Port"); if (data.host.empty() || data.port < 1 || data.port > 65535) pRemove = pCert; wxLongLong activationTime = GetTextElementLongLong(pCert, "ActivationTime", 0); if (activationTime == 0 || activationTime > wxDateTime::GetTimeNow()) pRemove = pCert; wxLongLong expirationTime = GetTextElementLongLong(pCert, "ExpirationTime", 0); if (expirationTime == 0 || expirationTime < wxDateTime::GetTimeNow()) pRemove = pCert; if (IsTrusted(data.host, data.port, data.data, data.len, true)) // Weed out duplicates pRemove = pCert; if (!pRemove) m_trustedCerts.push_back(data); else delete [] data.data; pCert = pCert->NextSiblingElement("Certificate"); if (pRemove) { modified = true; pElement->RemoveChild(pRemove); } } if (modified) m_xmlFile.Save(false); }