Index: common/goopdate_command_line_validator.cc |
diff --git a/common/goopdate_command_line_validator.cc b/common/goopdate_command_line_validator.cc |
deleted file mode 100644 |
index a115c81c08180fd0300998677e22df86718bc0b6..0000000000000000000000000000000000000000 |
--- a/common/goopdate_command_line_validator.cc |
+++ /dev/null |
@@ -1,485 +0,0 @@ |
-// 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/common/goopdate_command_line_validator.h" |
-#include "omaha/base/command_line_parser.h" |
-#include "omaha/base/command_line_validator.h" |
-#include "omaha/base/debug.h" |
-#include "omaha/base/error.h" |
-#include "omaha/base/logging.h" |
-#include "omaha/base/path.h" |
-#include "omaha/base/string.h" |
-#include "omaha/common/command_line.h" |
-#include "omaha/common/const_cmd_line.h" |
-#include "omaha/common/extra_args_parser.h" |
- |
-namespace omaha { |
- |
-GoopdateCommandLineValidator::GoopdateCommandLineValidator() { |
-} |
- |
-GoopdateCommandLineValidator::~GoopdateCommandLineValidator() { |
-} |
- |
-HRESULT GoopdateCommandLineValidator::Setup() { |
- validator_.reset(new CommandLineValidator); |
- |
- CString cmd_line; |
- |
- // gu.exe |
- cmd_line.Empty(); |
- CreateScenario(cmd_line, &GoopdateCommandLineValidator::OnNoArgs); |
- |
- // gu.exe /c [/nocrashserver |
- cmd_line.Format(_T("/%s [/%s"), kCmdLineCore, kCmdLineNoCrashHandler); |
- CreateScenario(cmd_line, &GoopdateCommandLineValidator::OnCore); |
- |
- // gu.exe /crashhandler |
- cmd_line.Format(_T("/%s"), kCmdLineCrashHandler); |
- CreateScenario(cmd_line, &GoopdateCommandLineValidator::OnCrashHandler); |
- |
- // gu.exe /svc |
- cmd_line.Format(_T("/%s"), kCmdLineService); |
- CreateScenario(cmd_line, &GoopdateCommandLineValidator::OnService); |
- |
- // gu.exe /medsvc |
- cmd_line.Format(_T("/%s"), kCmdLineMediumService); |
- CreateScenario(cmd_line, &GoopdateCommandLineValidator::OnMediumService); |
- |
- // gu.exe /regsvc |
- cmd_line.Format(_T("/%s"), kCmdLineRegisterService); |
- CreateScenario(cmd_line, &GoopdateCommandLineValidator::OnServiceRegister); |
- |
- // gu.exe /unregsvc |
- cmd_line.Format(_T("/%s"), kCmdLineUnregisterService); |
- CreateScenario(cmd_line, &GoopdateCommandLineValidator::OnServiceUnregister); |
- |
- // gu.exe /regserver |
- cmd_line.Format(_T("/%s"), kCmdRegServer); |
- CreateScenario(cmd_line, &GoopdateCommandLineValidator::OnRegServer); |
- |
- // gu.exe /unregserver |
- cmd_line.Format(_T("/%s"), kCmdUnregServer); |
- CreateScenario(cmd_line, &GoopdateCommandLineValidator::OnUnregServer); |
- |
- // gu.exe /netdiags |
- cmd_line.Format(_T("/%s"), kCmdLineNetDiags); |
- CreateScenario(cmd_line, &GoopdateCommandLineValidator::OnNetDiags); |
- |
- // gu.exe /crash |
- cmd_line.Format(_T("/%s"), kCmdLineCrash); |
- CreateScenario(cmd_line, &GoopdateCommandLineValidator::OnCrash); |
- |
- // gu.exe -Embedding. The -Embedding text is injected via COM. |
- CreateScenario(kCmdLineComServerDash, |
- &GoopdateCommandLineValidator::OnComServer); |
- |
- // COM server mode, but only for the broker. |
- CreateScenario(kCmdLineComBroker, &GoopdateCommandLineValidator::OnComBroker); |
- |
- // COM server mode, but only for the OnDemand. |
- CreateScenario(kCmdLineOnDemand, &GoopdateCommandLineValidator::OnDemand); |
- |
- // gu.exe /install <extraargs> [/appargs <appargs> [/installsource source |
- // [/silent [/eularequired [/oem [/installelevated [/sessionid <sid> |
- cmd_line.Format(_T("/%s extra [/%s appargs [/%s src [/%s [/%s [/%s [/%s ") |
- _T("[/%s sid"), |
- kCmdLineInstall, |
- kCmdLineAppArgs, |
- kCmdLineInstallSource, |
- kCmdLineSilent, |
- kCmdLineEulaRequired, |
- kCmdLineOem, |
- kCmdLineInstallElevated, |
- kCmdLineSessionId); |
- CreateScenario(cmd_line, &GoopdateCommandLineValidator::OnInstall); |
- |
- // gu.exe /update [/sessionid <sid> |
- cmd_line.Format(_T("/%s [/%s sid"), kCmdLineUpdate, kCmdLineSessionId); |
- CreateScenario(cmd_line, &GoopdateCommandLineValidator::OnUpdate); |
- |
- // gu.exe /handoff <extraargs> [/appargs <appargs> [/installsource source |
- // [/silent [/eularequired [/offlineinstall [/offlinedir <dir> |
- // [/sessionid <sid> |
- cmd_line.Format(_T("/%s extra [/%s appargs [/%s src [/%s [/%s [/%s [/%s dir ") |
- _T("[/%s sid"), |
- kCmdLineAppHandoffInstall, |
- kCmdLineAppArgs, |
- kCmdLineInstallSource, |
- kCmdLineSilent, |
- kCmdLineEulaRequired, |
- kCmdLineLegacyOfflineInstall, |
- kCmdLineOfflineDir, |
- kCmdLineSessionId); |
- CreateScenario(cmd_line, |
- &GoopdateCommandLineValidator::OnInstallHandoffWorker); |
- |
- // gu.exe /ua [/installsource source [/machine |
- cmd_line.Format(_T("/%s [/%s source [/%s"), |
- kCmdLineUpdateApps, kCmdLineInstallSource, kCmdLineMachine); |
- CreateScenario(cmd_line, |
- &GoopdateCommandLineValidator::OnUpdateApps); |
- |
- // gu.exe /report <crash_filename> [/machine |
- // [/custom_info <custom_info_filename> |
- cmd_line.Format(_T("/%s filename [/%s [/%s customfilename"), |
- kCmdLineReport, |
- kCmdLineMachine, |
- kCmdLineCustomInfoFileName); |
- CreateScenario(cmd_line, &GoopdateCommandLineValidator::OnReportCrash); |
- |
- // gu.exe /report /i <crash_filename> [/machine |
- cmd_line.Format(_T("/%s /%s filename [/%s"), |
- kCmdLineReport, |
- kCmdLineInteractive, |
- kCmdLineMachine); |
- CreateScenario(cmd_line, |
- &GoopdateCommandLineValidator::OnReportCrashInteractive); |
- |
- // gu.exe /pi <domainurl> <args> /installsource <oneclick|update3web> |
- cmd_line.Format(_T("/%s domainurl args /%s src"), |
- kCmdLineWebPlugin, |
- kCmdLineInstallSource); |
- CreateScenario(cmd_line, &GoopdateCommandLineValidator::OnWebPlugin); |
- |
- // gu.exe /cr |
- cmd_line.Format(_T("/%s"), kCmdLineCodeRedCheck); |
- CreateScenario(cmd_line, &GoopdateCommandLineValidator::OnCodeRed); |
- |
- // gu.exe /recover <repair_file> |
- cmd_line.Format(_T("/%s repairfile"), kCmdLineRecover); |
- CreateScenario(cmd_line, &GoopdateCommandLineValidator::OnRecover); |
- |
- // gu.exe /recover /machine <repair_file> |
- cmd_line.Format(_T("/%s /%s repairfile"), kCmdLineRecover, kCmdLineMachine); |
- CreateScenario(cmd_line, &GoopdateCommandLineValidator::OnRecoverMachine); |
- |
- // gu.exe /uninstall |
- cmd_line.Format(_T("/%s"), kCmdLineUninstall); |
- CreateScenario(cmd_line, &GoopdateCommandLineValidator::OnUninstall); |
- |
- // gu.exe /registerproduct "extraargs" [/installsource source |
- cmd_line.Format(_T("/%s extraargs [/%s source"), |
- kCmdLineRegisterProduct, |
- kCmdLineInstallSource); |
- CreateScenario(cmd_line, &GoopdateCommandLineValidator::OnRegisterProduct); |
- |
- // gu.exe /unregisterproduct "extraargs" |
- cmd_line.Format(_T("/%s extraargs"), kCmdLineUnregisterProduct); |
- CreateScenario(cmd_line, &GoopdateCommandLineValidator::OnUnregisterProduct); |
- |
- // gu.exe /ping pingstring |
- cmd_line.Format(_T("/%s pingstring"), kCmdLinePing); |
- CreateScenario(cmd_line, &GoopdateCommandLineValidator::OnPing); |
- |
- return S_OK; |
-} |
- |
-// TODO(Omaha): Add check that each scenario is unique and does not overlap an |
-// existing one in DBG builds. |
-HRESULT GoopdateCommandLineValidator::Validate(const CommandLineParser* parser, |
- CommandLineArgs* args) { |
- ASSERT1(parser); |
- ASSERT1(args); |
- |
- parser_ = parser; |
- args_ = args; |
- |
- CString scenario_name; |
- HRESULT hr = validator_->Validate(*parser_, &scenario_name); |
- if (FAILED(hr)) { |
- CORE_LOG(LE, (_T("[GoopdateCommandLineValidator::Validate Failed][0x%x]"), |
- hr)); |
- return hr; |
- } |
- |
- MapScenarioHandlersIter iter = scenario_handlers_.find(scenario_name); |
- if (iter == scenario_handlers_.end()) { |
- ASSERT1(false); |
- return GOOGLEUPDATE_COMMANDLINE_E_NO_SCENARIO_HANDLER; |
- } |
- |
- ScenarioHandler handler = (*iter).second; |
- return (this->*handler)(); |
-} |
- |
-void GoopdateCommandLineValidator::CreateScenario(const TCHAR* cmd_line, |
- ScenarioHandler handler) { |
- // Prepend the program name onto the cmd_line. |
- CString scenario_cmd_line; |
- scenario_cmd_line.Format(_T("prog.exe %s"), cmd_line); |
- |
- CString scenario_name; |
- validator_->CreateScenarioFromCmdLine(scenario_cmd_line, &scenario_name); |
- // TODO(omaha): Make sure it doesn't already exist. |
- scenario_handlers_[scenario_name] = handler; |
-} |
- |
-HRESULT GoopdateCommandLineValidator::GetExtraAndAppArgs(const CString& name) { |
- HRESULT hr = parser_->GetSwitchArgumentValue(name, |
- 0, |
- &args_->extra_args_str); |
- if (FAILED(hr)) { |
- return hr; |
- } |
- |
- hr = parser_->GetSwitchArgumentValue(kCmdLineAppArgs, |
- 0, |
- &args_->app_args_str); |
- if (FAILED(hr)) { |
- args_->app_args_str.Empty(); |
- } |
- |
- ExtraArgsParser extra_args_parser; |
- return extra_args_parser.Parse(args_->extra_args_str, |
- args_->app_args_str, |
- &args_->extra); |
-} |
- |
-HRESULT GoopdateCommandLineValidator::OnNoArgs() { |
- args_->mode = COMMANDLINE_MODE_NOARGS; |
- return S_OK; |
-} |
- |
-HRESULT GoopdateCommandLineValidator::OnCore() { |
- args_->mode = COMMANDLINE_MODE_CORE; |
- args_->is_crash_handler_disabled = parser_->HasSwitch(kCmdLineNoCrashHandler); |
- |
- return S_OK; |
-} |
- |
-HRESULT GoopdateCommandLineValidator::OnCrashHandler() { |
- args_->mode = COMMANDLINE_MODE_CRASH_HANDLER; |
- return S_OK; |
-} |
- |
-HRESULT GoopdateCommandLineValidator::OnService() { |
- args_->mode = COMMANDLINE_MODE_SERVICE; |
- return S_OK; |
-} |
- |
-HRESULT GoopdateCommandLineValidator::OnMediumService() { |
- args_->mode = COMMANDLINE_MODE_MEDIUM_SERVICE; |
- return S_OK; |
-} |
- |
-HRESULT GoopdateCommandLineValidator::OnServiceRegister() { |
- args_->mode = COMMANDLINE_MODE_SERVICE_REGISTER; |
- return S_OK; |
-} |
- |
-HRESULT GoopdateCommandLineValidator::OnServiceUnregister() { |
- args_->mode = COMMANDLINE_MODE_SERVICE_UNREGISTER; |
- return S_OK; |
-} |
- |
-HRESULT GoopdateCommandLineValidator::OnRegServer() { |
- args_->mode = COMMANDLINE_MODE_REGSERVER; |
- return S_OK; |
-} |
- |
-HRESULT GoopdateCommandLineValidator::OnUnregServer() { |
- args_->mode = COMMANDLINE_MODE_UNREGSERVER; |
- return S_OK; |
-} |
- |
-HRESULT GoopdateCommandLineValidator::OnNetDiags() { |
- args_->mode = COMMANDLINE_MODE_NETDIAGS; |
- return S_OK; |
-} |
- |
-HRESULT GoopdateCommandLineValidator::OnCrash() { |
- args_->mode = COMMANDLINE_MODE_CRASH; |
- return S_OK; |
-} |
- |
-HRESULT GoopdateCommandLineValidator::OnComServer() { |
- args_->mode = COMMANDLINE_MODE_COMSERVER; |
- return S_OK; |
-} |
- |
-HRESULT GoopdateCommandLineValidator::OnComBroker() { |
- args_->mode = COMMANDLINE_MODE_COMBROKER; |
- return S_OK; |
-} |
- |
-HRESULT GoopdateCommandLineValidator::OnDemand() { |
- args_->mode = COMMANDLINE_MODE_ONDEMAND; |
- return S_OK; |
-} |
- |
-HRESULT GoopdateCommandLineValidator::OnInstall() { |
- args_->mode = COMMANDLINE_MODE_INSTALL; |
- parser_->GetSwitchArgumentValue(kCmdLineInstallSource, |
- 0, |
- &args_->install_source); |
- parser_->GetSwitchArgumentValue(kCmdLineSessionId, |
- 0, |
- &args_->session_id); |
- args_->is_silent_set = parser_->HasSwitch(kCmdLineSilent); |
- args_->is_eula_required_set = parser_->HasSwitch(kCmdLineEulaRequired); |
- args_->is_oem_set = parser_->HasSwitch(kCmdLineOem); |
- args_->is_install_elevated = parser_->HasSwitch(kCmdLineInstallElevated); |
- return GetExtraAndAppArgs(kCmdLineInstall); |
-} |
- |
-HRESULT GoopdateCommandLineValidator::OnUpdate() { |
- args_->mode = COMMANDLINE_MODE_UPDATE; |
- parser_->GetSwitchArgumentValue(kCmdLineSessionId, |
- 0, |
- &args_->session_id); |
- return S_OK; |
-} |
- |
-HRESULT GoopdateCommandLineValidator::OnInstallHandoffWorker() { |
- args_->mode = COMMANDLINE_MODE_HANDOFF_INSTALL; |
- parser_->GetSwitchArgumentValue(kCmdLineInstallSource, |
- 0, |
- &args_->install_source); |
- parser_->GetSwitchArgumentValue(kCmdLineSessionId, |
- 0, |
- &args_->session_id); |
- args_->is_silent_set = parser_->HasSwitch(kCmdLineSilent); |
- args_->is_eula_required_set = parser_->HasSwitch(kCmdLineEulaRequired); |
- args_->is_offline_set = parser_->HasSwitch(kCmdLineLegacyOfflineInstall) || |
- parser_->HasSwitch(kCmdLineOfflineDir); |
- |
- if (SUCCEEDED(parser_->GetSwitchArgumentValue(kCmdLineOfflineDir, |
- 0, |
- &args_->offline_dir))) { |
- RemoveMismatchedEndQuoteInDirectoryPath(&args_->offline_dir); |
- ::PathRemoveBackslash(CStrBuf(args_->offline_dir, MAX_PATH)); |
- } |
- |
- return GetExtraAndAppArgs(kCmdLineAppHandoffInstall); |
-} |
- |
-HRESULT GoopdateCommandLineValidator::OnUpdateApps() { |
- args_->mode = COMMANDLINE_MODE_UA; |
- args_->is_machine_set = parser_->HasSwitch(kCmdLineMachine); |
- parser_->GetSwitchArgumentValue(kCmdLineInstallSource, |
- 0, |
- &args_->install_source); |
- return S_OK; |
-} |
- |
-HRESULT GoopdateCommandLineValidator::OnReportCrash() { |
- args_->mode = COMMANDLINE_MODE_REPORTCRASH; |
- args_->is_machine_set = parser_->HasSwitch(kCmdLineMachine); |
- parser_->GetSwitchArgumentValue(kCmdLineCustomInfoFileName, |
- 0, |
- &args_->custom_info_filename); |
- return parser_->GetSwitchArgumentValue(kCmdLineReport, |
- 0, |
- &args_->crash_filename); |
-} |
- |
-HRESULT GoopdateCommandLineValidator::OnReportCrashInteractive() { |
- args_->mode = COMMANDLINE_MODE_REPORTCRASH; |
- args_->is_interactive_set = true; |
- args_->is_machine_set = parser_->HasSwitch(kCmdLineMachine); |
- return parser_->GetSwitchArgumentValue(kCmdLineInteractive, |
- 0, |
- &args_->crash_filename); |
-} |
- |
-HRESULT GoopdateCommandLineValidator::OnWebPlugin() { |
- HRESULT hr = parser_->GetSwitchArgumentValue(kCmdLineInstallSource, |
- 0, |
- &args_->install_source); |
- if (FAILED(hr)) { |
- return hr; |
- } |
- // Validate install_source value. |
- args_->install_source.MakeLower(); |
- if ((args_->install_source.Compare(kCmdLineInstallSource_OneClick) != 0) && |
- (args_->install_source.Compare(kCmdLineInstallSource_Update3Web) != 0)) { |
- args_->install_source.Empty(); |
- return E_INVALIDARG; |
- } |
- |
- args_->mode = COMMANDLINE_MODE_WEBPLUGIN; |
- |
- CString urldomain; |
- hr = parser_->GetSwitchArgumentValue(kCmdLineWebPlugin, |
- 0, |
- &urldomain); |
- if (FAILED(hr)) { |
- return hr; |
- } |
- hr = StringUnescape(urldomain, &args_->webplugin_urldomain); |
- if (FAILED(hr)) { |
- return hr; |
- } |
- |
- CString webplugin_args; |
- hr = parser_->GetSwitchArgumentValue(kCmdLineWebPlugin, |
- 1, |
- &webplugin_args); |
- if (FAILED(hr)) { |
- return hr; |
- } |
- return StringUnescape(webplugin_args, &args_->webplugin_args); |
-} |
- |
-HRESULT GoopdateCommandLineValidator::OnCodeRed() { |
- args_->mode = COMMANDLINE_MODE_CODE_RED_CHECK; |
- return S_OK; |
-} |
- |
-HRESULT GoopdateCommandLineValidator::OnRecover() { |
- args_->mode = COMMANDLINE_MODE_RECOVER; |
- return parser_->GetSwitchArgumentValue( |
- kCmdLineRecover, |
- 0, |
- &args_->code_red_metainstaller_path); |
-} |
- |
-HRESULT GoopdateCommandLineValidator::OnRecoverMachine() { |
- args_->mode = COMMANDLINE_MODE_RECOVER; |
- args_->is_machine_set = true; |
- return parser_->GetSwitchArgumentValue( |
- kCmdLineMachine, |
- 0, |
- &args_->code_red_metainstaller_path); |
-} |
- |
-HRESULT GoopdateCommandLineValidator::OnUninstall() { |
- args_->mode = COMMANDLINE_MODE_UNINSTALL; |
- return S_OK; |
-} |
- |
-HRESULT GoopdateCommandLineValidator::OnRegisterProduct() { |
- args_->mode = COMMANDLINE_MODE_REGISTER_PRODUCT; |
- parser_->GetSwitchArgumentValue(kCmdLineInstallSource, |
- 0, |
- &args_->install_source); |
- return GetExtraAndAppArgs(kCmdLineRegisterProduct); |
-} |
- |
-HRESULT GoopdateCommandLineValidator::OnUnregisterProduct() { |
- args_->mode = COMMANDLINE_MODE_UNREGISTER_PRODUCT; |
- return GetExtraAndAppArgs(kCmdLineUnregisterProduct); |
-} |
- |
-HRESULT GoopdateCommandLineValidator::OnPing() { |
- args_->mode = COMMANDLINE_MODE_PING; |
- return parser_->GetSwitchArgumentValue(kCmdLinePing, |
- 0, |
- &args_->ping_string); |
-} |
- |
-} // namespace omaha |
- |