Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(109)

Unified Diff: tools/OmahaCompatibility/HttpServer/xml_parser.cc

Issue 624713003: Keep only base/extractor.[cc|h]. (Closed) Base URL: https://chromium.googlesource.com/external/omaha.git@master
Patch Set: Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « tools/OmahaCompatibility/HttpServer/xml_parser.h ('k') | tools/OmahaCompatibility/build.scons » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/OmahaCompatibility/HttpServer/xml_parser.cc
diff --git a/tools/OmahaCompatibility/HttpServer/xml_parser.cc b/tools/OmahaCompatibility/HttpServer/xml_parser.cc
deleted file mode 100644
index 1f5ba902d47ca0b73a44cb54f7206a732cdc5f58..0000000000000000000000000000000000000000
--- a/tools/OmahaCompatibility/HttpServer/xml_parser.cc
+++ /dev/null
@@ -1,396 +0,0 @@
-// Copyright 2008-2010 Google Inc.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-// ========================================================================
-
-
-#include "omaha/tools/omahacompatibility/httpserver/xml_parser.h"
-#include <msxml2.h>
-#include "omaha/common/string.h"
-#include "omaha/common/xml_utils.h"
-#include "omaha/goopdate/goopdate_xml_parser.h"
-
-namespace omaha {
-
-// Constant strings to form the server responses.
-const TCHAR* const kResponseXmlHeader = _T("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"); // NOLINT
-const TCHAR* const kResponseXmlGupdateHeader = _T("<gupdate xmlns=\"http://www.google.com/update2/response\" protocol=\"2.0\">"); // NOLINT
-const TCHAR* const kResponseAppEvent = _T("<app appid=\"%s\" status=\"ok\"><event status=\"ok\"/></app>"); // NOLINT
-const TCHAR* const kResponseAppNoUpdate = _T("<app appid=\"%s\" status=\"ok\"><event status=\"no-update\"/></app>"); // NOLINT
-const TCHAR* const kResponseAppUpdate = _T("<app appid=\"%s\" status=\"ok\"><updatecheck codebase=\"%s\" hash=\"%s\" needsadmin=\"%s\" size=\"%d\" status=\"ok\"/></app>"); // NOLINT
-const TCHAR* const kResponseGupdateEndTag = _T("</gupdate>");
-
-// Constants for creating the xml request.
-namespace Xml {
- const TCHAR* const kHeaderText =
- _T("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
- const TCHAR* const kProcessingText =
- _T("version=\"1.0\" encoding=\"UTF-8\"");
-
- namespace Namespace {
- const TCHAR* const kRequest = _T("http://www.google.com/update2/request");
- const TCHAR* const kResponse = _T("http://www.google.com/update2/response");
- const TCHAR* const kSeed = _T("http://www.google.com/update2/install");
- } // Namespace.
-
- namespace Element {
- const TCHAR* const kXml = _T("xml");
- const TCHAR* const kRequests = _T("gupdate");
- const TCHAR* const kOmahaVersion = _T("updaterversion");
- const TCHAR* const kOs = _T("os");
- const TCHAR* const kApp = _T("app");
- const TCHAR* const kUpdateCheck = _T("updatecheck");
- const TCHAR* const kPing = _T("ping");
- const TCHAR* const kEvent = _T("event");
- const TCHAR* const kComponents = _T("components");
- const TCHAR* const kComponent = _T("component");
-
- const TCHAR* const kResponses = _T("gupdate");
- } // namespace Element.
-
- namespace Attribute {
- const TCHAR* const kActive = _T("active");
- const TCHAR* const kAdditionalParameter = _T("ap");
- const TCHAR* const kAppGuid = _T("appguid");
- const TCHAR* const kApplicationName = _T("appname");
- const TCHAR* const kAppId = _T("appid");
- const TCHAR* const kArguments = _T("arguments");
- const TCHAR* const kBrandCode = _T("brand");
- const TCHAR* const kBrowserType = _T("browser");
- const TCHAR* const kClientId = _T("client");
- const TCHAR* const kCodebase = _T("codebase");
- const TCHAR* const kCountry = _T("country");
- const TCHAR* const kErrorCode = _T("errorcode");
- const TCHAR* const kEventResult = _T("eventresult");
- const TCHAR* const kEventType = _T("eventtype");
- const TCHAR* const kExtraCode1 = _T("extracode1");
- const TCHAR* const kHash = _T("hash");
- const TCHAR* const kIsMachine = _T("ismachine");
- const TCHAR* const kInstallationId = _T("iid");
- const TCHAR* const kInstallSource = _T("installsource");
- const TCHAR* const kLang = _T("lang");
- const TCHAR* const kNeedsAdmin = _T("needsadmin");
- const TCHAR* const kParameter = _T("parameter");
- const TCHAR* const kPlatform = _T("platform");
- const TCHAR* const kPreviousVersion = _T("previousversion");
- const TCHAR* const kProtocol = _T("protocol");
- const TCHAR* const kServicePack = _T("sp");
- const TCHAR* const kSessionId = _T("sessionid");
- const TCHAR* const kSignature = _T("signature");
- const TCHAR* const kSize = _T("size");
- const TCHAR* const kStatus = _T("status");
- const TCHAR* const kSuccessAction = _T("onsuccess");
- const TCHAR* const kSuccessUrl = _T("successurl");
- const TCHAR* const kTag = _T("tag");
- const TCHAR* const kTestSource = _T("testsource");
- const TCHAR* const kTerminateAllBrowsers = _T("terminateallbrowsers");
- const TCHAR* const kVersion = _T("version");
- const TCHAR* const kXmlns = _T("xmlns");
- const TCHAR* const kTTToken = _T("tttoken");
- } // namespace Attribute.
-
- namespace Value {
- const TCHAR* const kRequestType = _T("UpdateRequest");
- const TCHAR* const kProtocol = _T("2.0");
- const TCHAR* const kVersion2 = _T("2.0");
- const TCHAR* const kVersion3 = _T("3.0");
- const TCHAR* const kTrue = _T("true");
- const TCHAR* const kFalse = _T("false");
- const TCHAR* const kStatusError = _T("error");
- const TCHAR* const kSuccessActionDefault = _T("default");
- const TCHAR* const kSuccessActionExitSilently = _T("exitsilently");
- const TCHAR* const kWinPlatform = _T("win");
-
- const TCHAR* const kStatusOk = kResponseStatusOkValue;
- } // namespace value.
-} // namespace xml.
-
-HRESULT ReadAttribute(IXMLDOMNode* node,
- const TCHAR* attr_name,
- BSTR* value) {
- ASSERT1(node != NULL);
- ASSERT1(attr_name != NULL);
- ASSERT1(value != NULL);
-
- // First read the attributes.
- CComPtr<IXMLDOMNamedNodeMap> attributes;
- HRESULT hr = node->get_attributes(&attributes);
- if (FAILED(hr)) { return hr; }
- if (!attributes) { return E_FAIL; } // Protect against msxml S_FALSE return.
-
- CComPtr<IXMLDOMNode> attribute_node;
- CComVariant node_value;
- CComBSTR temp_attr_name(attr_name);
-
- // Get the attribute using a named node.
- hr = attributes->getNamedItem(static_cast<BSTR>(temp_attr_name),
- &attribute_node);
- if (FAILED(hr)) { return hr; }
- if (!attribute_node) { return E_FAIL; } // Protect against msxml S_FALSE
- // return.
-
- hr = attribute_node->get_nodeValue(&node_value);
- if (FAILED(hr)) { return hr; }
- if (node_value.vt == VT_EMPTY) { return E_FAIL; }
-
- // Extract the variant into a BSTR.
- node_value.CopyTo(value);
-
- return S_OK;
-}
-
-HRESULT ReadIntAttribute(IXMLDOMNode* node,
- const TCHAR* attr_name,
- int* value) {
- ASSERT1(node != NULL);
- ASSERT1(attr_name != NULL);
- ASSERT1(value != NULL);
-
- CComBSTR node_value;
- HRESULT hr = ReadAttribute(node, attr_name, &node_value);
- if (FAILED(hr)) { return hr; }
- if (!String_StringToDecimalIntChecked(
- static_cast<const TCHAR*>(node_value), value)) {
- return E_FAIL;
- }
- return S_OK;
-}
-
-HRESULT ReadGuidAttribute(IXMLDOMNode* node,
- const TCHAR* attr_name,
- GUID* value) {
- ASSERT1(node != NULL);
- ASSERT1(attr_name != NULL);
- ASSERT1(value != NULL);
-
- CComBSTR node_value;
- HRESULT hr = ReadAttribute(node, attr_name, &node_value);
- if (FAILED(hr)) { return hr; }
- hr = ::CLSIDFromString(static_cast<TCHAR*>(node_value), value);
- if (FAILED(hr)) { return hr; }
-
- return S_OK;
-}
-
-HRESULT ReadStringAttribute(IXMLDOMNode* node,
- const TCHAR* attr_name,
- CString* value) {
- ASSERT1(node != NULL);
- ASSERT1(attr_name != NULL);
- ASSERT1(value != NULL);
-
- CComBSTR node_value;
- HRESULT hr = ReadAttribute(node, attr_name, &node_value);
- if (FAILED(hr)) { return hr; }
-
- // Will extract the underlying string.
- *value = static_cast<TCHAR*>(node_value);
-
- return S_OK;
-}
-
-HRESULT ParseAppUpdateCheckNode(IXMLDOMNode* node, AppData* request) {
- ASSERT1(node);
- ASSERT1(request);
-
- // Read the tag value.
- CString str;
- ReadStringAttribute(node, Xml::Attribute::kTag, &str);
- request->set_ap(str);
-
- return S_OK;
-}
-
-HRESULT ParseAppPingNode(IXMLDOMNode* node, AppRequestData* request) {
- ASSERT1(node);
- ASSERT1(request);
-
- // Read the event type.
- int event_type = 0;
- HRESULT hr = ReadIntAttribute(node, Xml::Attribute::kEventType, &event_type);
- if (FAILED(hr)) { return hr; }
-
- // Read the event result.
- int event_result = 0;
- hr = ReadIntAttribute(node, Xml::Attribute::kEventResult, &event_result);
- if (FAILED(hr)) { return hr; }
-
- // Read the errorcode.
- int error_code = 0;
- hr = ReadIntAttribute(node, Xml::Attribute::kErrorCode, &error_code);
- if (FAILED(hr)) { return hr; }
-
- // Read the extracode1.
- int extra_code = 0;
- hr = ReadIntAttribute(node, Xml::Attribute::kExtraCode1, &extra_code);
- if (FAILED(hr)) { return hr; }
-
- PingEvent ping_event(static_cast<PingEvent::Types>(event_type),
- static_cast<PingEvent::Results>(event_result),
- error_code,
- extra_code,
- CString());
- request->AddPingEvent(ping_event);
-
- return S_OK;
-}
-
-HRESULT ParseAppNode(IXMLDOMNode* node, AppRequestDataVector* request) {
- ASSERT1(node);
- ASSERT1(request);
-
- AppRequest app_request;
- AppData app_data;
- AppRequestData app_request_data;
-
- // Read the app guid.
- GUID guid = {0};
- HRESULT hr = ReadGuidAttribute(node, Xml::Attribute::kAppId, &guid);
- if (FAILED(hr)) { return hr; }
- app_data.set_app_guid(guid);
-
- // Read the app version.
- CString str;
- hr = ReadStringAttribute(node, Xml::Attribute::kVersion, &str);
- if (FAILED(hr)) { return hr; }
- app_data.set_version(str);
-
- // Read the app language.
- hr = ReadStringAttribute(node, Xml::Attribute::kLang, &str);
- if (FAILED(hr)) { return hr; }
- app_data.set_language(str);
-
- CComPtr<IXMLDOMNodeList> child_nodes;
- // Get all the children of the Node.
- hr = node->get_childNodes(&child_nodes);
- if (FAILED(hr)) { return hr; }
- if (!child_nodes) { return E_FAIL; } // Protect against msxml S_FALSE return.
-
- // Go Over all the children and read each of them. we will ignore ones that
- // we dont understand.
- hr = child_nodes->reset();
- if (FAILED(hr)) { return hr; }
-
- CComPtr<IXMLDOMNode> child_node;
- while (child_nodes->nextNode(&child_node) != S_FALSE) {
- XMLFQName child_node_name;
- hr = GetXMLFQName(child_node, &child_node_name);
- if (FAILED(hr)) { return hr; }
-
- if (child_node_name.base == Xml::Element::kUpdateCheck) {
- // Read in the update check request.
- hr = ParseAppUpdateCheckNode(child_node, &app_data);
- if (FAILED(hr)) { return hr; }
- } else if (child_node_name.base == Xml::Element::kEvent) {
- // Read in the ping request.
- hr = ParseAppPingNode(child_node, &app_request_data);
- }
-
- child_node = NULL;
- }
-
- app_request_data.set_app_data(app_data);
- request->push_back(app_request_data);
- return S_OK;
-}
-
-HRESULT ParseGupdateNode(IXMLDOMNode* node, AppRequestDataVector* request) {
- ASSERT1(node);
- ASSERT1(request);
-
- CComPtr<IXMLDOMNodeList> child_nodes;
- // Get all the children of the Node.
- HRESULT hr = node->get_childNodes(&child_nodes);
- if (FAILED(hr)) { return hr; }
- if (!child_nodes) { return E_FAIL; } // Protect against msxml S_FALSE return.
-
- // Go Over all the children and read each of them. we will ignore ones that
- // we dont understand.
- hr = child_nodes->reset();
- if (FAILED(hr)) { return hr; }
-
- CComPtr<IXMLDOMNode> child_node;
- while (child_nodes->nextNode(&child_node) != S_FALSE) {
- XMLFQName child_node_name;
- hr = GetXMLFQName(child_node, &child_node_name);
- if (FAILED(hr)) { return hr; }
-
- if (child_node_name.base == Xml::Element::kApp) {
- // we got a response we should read that in.
- hr = ParseAppNode(child_node, request);
- if (FAILED(hr)) { return hr; }
- }
- child_node = NULL;
- }
- return S_OK;
-}
-
-HRESULT ParseUpdateCheck(const CString& request_str,
- AppRequestDataVector* request) {
- ASSERT1(request);
-
- CComPtr<IXMLDOMDocument> document;
- HRESULT hr = LoadXMLFromMemory(request_str, false, &document);
- if (FAILED(hr)) {
- return hr;
- }
-
- CComPtr<IXMLDOMElement> document_element;
- hr = document->get_documentElement(&document_element);
- if (FAILED(hr)) {
- return hr;
- }
- if (!document_element) { // Protect against msxml S_FALSE return.
- return E_FAIL;
- }
-
- return ParseGupdateNode(document_element, request);
-}
-
-HRESULT BuildUpdateResponse(const ServerResponses& responses,
- CString* response) {
- ASSERT1(response);
-
- CString response_str(kResponseXmlHeader);
- response_str.Append(kResponseXmlGupdateHeader);
-
- for (size_t i = 0; i < responses.size(); ++i) {
- CString guid = responses[i].guid;
-
- if (responses[i].is_ping) {
- // If the response is to a ping event, then we just add the ok to the
- // response. The reason this works is because we either have a ping
- // request or a update check, never both. If this changes, then we need
- // to change this code.
- response_str.AppendFormat(kResponseAppEvent, guid);
- } else if (responses[i].is_update_response) {
- // respond with the value of the updates.
- UpdateResponseData data = responses[i].response_data;
- response_str.AppendFormat(kResponseAppUpdate,
- guid,
- data.url(),
- data.hash(),
- data.needs_admin() ? _T("true") : _T("false"),
- data.size());
- } else {
- // respond with a no-update.
- response_str.AppendFormat(kResponseAppNoUpdate, guid);
- }
- }
-
- response_str.Append(kResponseGupdateEndTag);
- *response = response_str;
- return S_OK;
-}
-
-} // namespace omaha
« no previous file with comments | « tools/OmahaCompatibility/HttpServer/xml_parser.h ('k') | tools/OmahaCompatibility/build.scons » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698