blob: 970e0e6d52483504f579d1f5fe2585ce949c9485 [file]
// Copyright 2008-2009 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/console_writer.h"
#include <Windows.h>
#include <tchar.h>
#include "omaha/common/debug.h"
#include "omaha/common/logging.h"
#include "omaha/common/utils.h"
#include "omaha/tools/omahacompatibility/common/ping_observer.h"
namespace omaha {
CString ConsoleWriter::PingTypeToString(PingEvent::Types type) {
switch (type) {
case PingEvent::EVENT_UNKNOWN:
return _T("EVENT_UNKNOWN");
case PingEvent::EVENT_INSTALL_DOWNLOAD_FINISH:
return _T("EVENT_INSTALL_DOWNLOAD_FINISH");
case PingEvent::EVENT_INSTALL_COMPLETE:
return _T("EVENT_INSTALL_COMPLETE");
case PingEvent::EVENT_UPDATE_COMPLETE:
return _T("EVENT_UPDATE_COMPLETE");
case PingEvent::EVENT_UNINSTALL:
return _T("EVENT_UNINSTALL");
case PingEvent::EVENT_INSTALL_DOWNLOAD_START:
return _T("EVENT_INSTALL_DOWNLOAD_START");
case PingEvent::EVENT_INSTALL_INSTALLER_START:
return _T("EVENT_INSTALL_INSTALLER_START");
case PingEvent::EVENT_INSTALL_APPLICATION_BEGIN:
return _T("EVENT_INSTALL_APPLICATION_BEGIN");
// Install Setup events.
case PingEvent::EVENT_SETUP_INSTALL_BEGIN:
return _T("EVENT_SETUP_INSTALL_BEGIN");
case PingEvent::EVENT_SETUP_INSTALL_COMPLETE:
return _T("EVENT_SETUP_INSTALL_COMPLETE");
// Register Product Events.
case PingEvent::EVENT_REGISTER_PRODUCT_COMPLETE:
return _T("EVENT_REGISTER_PRODUCT_COMPLETE");
// Update Events.
case PingEvent::EVENT_UPDATE_APPLICATION_BEGIN:
return _T("EVENT_UPDATE_APPLICATION_BEGIN");
case PingEvent::EVENT_UPDATE_DOWNLOAD_START:
return _T("EVENT_UPDATE_DOWNLOAD_START");
case PingEvent::EVENT_UPDATE_DOWNLOAD_FINISH:
return _T("EVENT_UPDATE_DOWNLOAD_FINISH");
case PingEvent::EVENT_UPDATE_INSTALLER_START:
return _T("EVENT_UPDATE_INSTALLER_START");
// Self-update Setup events.
case PingEvent::EVENT_SETUP_UPDATE_BEGIN:
return _T("EVENT_SETUP_UPDATE_BEGIN");
case PingEvent::EVENT_SETUP_UPDATE_COMPLETE:
return _T("EVENT_SETUP_UPDATE_COMPLETE");
// Other events.
case PingEvent::EVENT_INSTALL_OEM_FIRST_CHECK:
return _T("EVENT_INSTALL_OEM_FIRST_CHECK");
// Failure report events - not part of the normal flow.
case PingEvent::EVENT_SETUP_INSTALL_FAILURE:
return _T("EVENT_SETUP_INSTALL_FAILURE");
case PingEvent::EVENT_SETUP_COM_SERVER_FAILURE:
return _T("EVENT_SETUP_COM_SERVER_FAILURE");
case PingEvent::EVENT_SETUP_UPDATE_FAILURE:
return _T("EVENT_SETUP_UPDATE_FAILURE");
default:
return _T("Unknown");
}
}
CString ConsoleWriter::PingResultToString(PingEvent::Results result) {
switch (result) {
case PingEvent::EVENT_RESULT_ERROR:
return _T("EVENT_RESULT_ERROR");
case PingEvent::EVENT_RESULT_SUCCESS:
return _T("EVENT_RESULT_SUCCESS");
case PingEvent::EVENT_RESULT_SUCCESS_REBOOT:
return _T("EVENT_RESULT_SUCCESS_REBOOT");
case PingEvent::EVENT_RESULT_CANCELLED:
return _T("EVENT_RESULT_CANCELLED");
case PingEvent::EVENT_RESULT_INSTALLER_ERROR_MSI:
return _T("EVENT_RESULT_INSTALLER_ERROR_MSI");
case PingEvent::EVENT_RESULT_INSTALLER_ERROR_OTHER:
return _T("EVENT_RESULT_INSTALLER_ERROR_OTHER");
case PingEvent::EVENT_RESULT_NOUPDATE:
return _T("EVENT_RESULT_NOUPDATE");
case PingEvent::EVENT_RESULT_INSTALLER_ERROR_SYSTEM:
return _T("EVENT_RESULT_INSTALLER_ERROR_SYSTEM");
case PingEvent::EVENT_RESULT_UPDATE_DEFERRED:
return _T("EVENT_RESULT_UPDATE_DEFERRED");
default:
return _T("unknown result");
}
}
bool ConsoleWriter::IsUpdateCompletedEvent(const CString& app_guid,
const PingEvent& ping) {
return app_guid == app_guid_ &&
ping.event_type() == PingEvent::EVENT_UPDATE_COMPLETE;
}
bool ConsoleWriter::IsInstallCompletedEvent(const CString& app_guid,
const PingEvent& ping) {
return app_guid == app_guid_ &&
ping.event_type() == PingEvent::EVENT_INSTALL_COMPLETE;
}
void ConsoleWriter::Observe(const AppRequestData& data) {
PingEventVector::const_iterator iter = data.ping_events_begin();
for (; iter != data.ping_events_end(); ++iter) {
PingEvent ping = *iter;
CString msg;
msg.Format(_T("\nPing App = %s, Type = %s, Result = %s, Error = %d\n"),
GuidToString(data.app_data().app_guid()),
PingTypeToString(ping.event_type()),
PingResultToString(ping.event_result()),
ping.error_code());
printf("%S", msg);
CORE_LOG(L1, (msg));
if (IsInstallCompletedEvent(GuidToString(data.app_data().app_guid()),
ping)) {
__mutexScope(lock_);
install_result_ = ping.event_result();
install_completed_ = true;
} else if (IsUpdateCompletedEvent(GuidToString(data.app_data().app_guid()),
ping)) {
__mutexScope(lock_);
update_result_ = ping.event_result();
update_completed_ = true;
}
}
}
} // namespace omaha