123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527 |
- #include "stdafx.h"
- #include "uuid4.h"
- #if (defined _WIN32 || defined _WIN64)
- #include "processControl.h"
- #define SPLIT_SLASH_STR "\\"
- #else
- #include <mutex>
- #include <thread>
- #include "path.h"
- #include "fileutil.h"
- #include <boost/process.hpp>
- #include <boost/thread.hpp>
- #include "CommEntityUtil.hpp"
- #include <SDL2/SDL.h>
- //#include <winpr/wnd.h>
- #define HWND_TOP (0)
- #define HWND_BOTTOM (1)
- #define HWND_TOPMOST (-1)
- #define HWND_NOTOPMOST (-2)
- #endif
- #include "baseEx.h"
- #include "CModTools.h"
- #include "SpIni.h"
- #include <vector>
- #include <list>
- #include <memory>
- #include <iostream>
- #include "../mod_upload/Upload_client_g.h"
- #include "mod_chromium.h"
- #include <boost/thread/mutex.hpp>
- #include "EventCode.h"
- #include "url_encoder.h"
- #include "SpUtility.h"
- void SystemRunTest(const std::string& systemCmd);
- extern std::pair<bool, std::string> DetectActiveHttp(std::vector<std::string> urlArr);
- auto GetCefHead = [](CEntityBase* curEntity)->CSimpleStringA {
- CSimpleStringA strChromiumPath, basePath;
- curEntity->GetFunction()->GetPath("Base", basePath);
- strChromiumPath.Append(basePath);
- #if defined(_MSC_VER)
- strChromiumPath.Append(CSimpleStringA(SPLIT_SLASH_STR) + "bin" + SPLIT_SLASH_STR + "Chromium" + SPLIT_SLASH_STR);
- strChromiumPath.Append(CEFCLIENT_NAME);
- #else
- strChromiumPath.Append(CSimpleStringA(SPLIT_SLASH_STR) + "res" + SPLIT_SLASH_STR + "RunScript" + SPLIT_SLASH_STR);
- strChromiumPath.Append("startMixBrower.sh");
- #endif //_MSC_VER
- return strChromiumPath;
- };
- auto detectUrls = [](std::string urls) -> std::string {
- std::vector<std::string> urlArr;
- urlArr.emplace_back(urls);
- auto checkRet = DetectActiveHttp(urlArr);
- LogWarn(Severity_Low, Error_Debug, LOG_SLV_CHROMIUM_URLCHECK,
- CSimpleStringA::Format("check chromium url %d, %s", checkRet.first, checkRet.first ? checkRet.second.c_str() : urls.c_str()));
- if (checkRet.first)
- return checkRet.second.c_str();
- else
- return urlArr[0];
- };
- namespace Chromium {
- boost::mutex g_mutexFreerdp, m_guardInterruptLock;
- void CModTools::lockGuard()
- {
- m_guardInterruptLock.lock();
- }
- void CModTools::unlockGuard()
- {
- m_guardInterruptLock.unlock();
- }
- void CModTools::InitCModTools(CEntityBase* pEntity) {
- this->m_pEntity = pEntity;
- m_UseUOSBrowser = 0;
- m_isGuardMainBrowser = false;
- CSmartPointer<IConfigInfo> spConfig;
- ErrorCodeEnum Error = m_pEntity->GetFunction()->OpenConfig(Config_Root, spConfig);
- if (Error == Error_Succeed)
- {
- Error = spConfig->ReadConfigValue("Terminal", "MachineType", ConfigManager::getInstance().m_strMachineType);
- if (Error == Error_Succeed)
- {
- Error = spConfig->ReadConfigValue("Terminal", "Site", ConfigManager::getInstance().m_strSite);
- if (Error != Error_Succeed)
- {
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("ReadConfigValue, get Site value failed");
- }
- }
- else
- {
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("ReadConfigValue, get MachineType value failed");
- }
- }
- auto configRet = ReadCenterConfigStr();
- ConfigManager::getInstance().m_UserMgrUrlStr = std::get<0>(configRet);
- ConfigManager::getInstance().m_UserMgrUrlNoSidebarStr = std::get<1>(configRet);
- ConfigManager::getInstance().m_UserMgrUrlNoSidebarMutiStr = std::get<2>(configRet);
- ConfigManager::getInstance().m_UserMgrUrlFultureStr = std::get<3>(configRet);
- ConfigManager::getInstance().m_UserMgrAdStr = std::get<4>(configRet);
- notifyExist = breakdownExist = m_isAdOpen = false;
- m_magicStr = uuid4_generate(8);
- ConfigManager::getInstance().m_withMin = false;
- #if defined(RVC_OS_LINUX)
- InitBrowserUseMode();
- #endif //RVC_OS_LINUX
- SetSpecialPageParam("", "", "", 0);
- }
- bool CModTools::killAllChromium()
- {
- #if (defined _WIN32 || defined _WIN64)
- const char* killCmd = "taskkill /F /IM cefclient.exe /T";
- SYSTEM_ON(killCmd);
- return true;
- #else
- do
- {
- boost::process::child child_process("sudo killall -9 uosbrowser");
- child_process.wait();
- } while (false);
- do
- {
- boost::process::child child_process("sudo killall -9 cefclient");
- child_process.wait();
- } while (false);
- do {
- boost::process::child child_process("sudo killall -9 browser");
- child_process.wait();
- } while (false);
- breakdownExist = m_isAdOpen = notifyExist = false;
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("run killAllChromium success ex");
- return true;
- #endif
- }
- void CModTools::killAllChromiumByThread(int seconds)
- {
- #if (defined _WIN32 || defined _WIN64)
- #else
- auto cur = std::async([]() {
- CModTools::get_mutable_instance().killAllChromium();
- });
- std::future_status a1 = cur.wait_for(std::chrono::seconds(seconds));
- if (a1 == std::future_status::deferred)
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("killAllChromiumByThread run delay");
- else
- {
- if (a1 == std::future_status::ready)
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("killAllChromiumByThread run end");
- else
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("killAllChromiumByThread do not end, over than %d seconds", seconds);
- }
- #endif
- }
- bool CModTools::killChromiumByName(std::string name)
- {
- return true;
- }
- std::pair<bool, std::string> CModTools::getAdUrl()
- {
- auto AdUrl = ConfigManager::getInstance().m_UserMgrAdStr;
- std::string strUrl = AdUrl.GetData();
- //auto strUrl = detectUrls(AdUrl.GetData());
- return strUrl.length() > 0 ? std::make_pair(true, strUrl) : std::make_pair(false, strUrl);
- }
- std::pair<bool, std::string> CModTools::getErrUrl(ERR_PAGE_REASON errType)
- {
- CSimpleStringA errPagePath;
- m_pEntity->GetFunction()->GetPath("Base", errPagePath);
- errPagePath.Append(SPLIT_SLASH_STR).Append("res").Append(SPLIT_SLASH_STR);
- errPagePath.Append("ManagerDesktop").Append(SPLIT_SLASH_STR);
- if (errType._to_integral() == ERR_PAGE_REASON::breakdown)
- errPagePath.Append("entityCheck.html");
- else if (errType._to_integral() == ERR_PAGE_REASON::warnPrompt)
- errPagePath.Append("serverNoAccess.html");
- else if (errType._to_integral() == ERR_PAGE_REASON::audioErr)
- errPagePath.Append("audioErr.html");
- else if (errType._to_integral() == ERR_PAGE_REASON::CardStoreIsBusy)
- errPagePath.Append("cardStore.html");
- else if (errType._to_integral() == ERR_PAGE_REASON::main)
- errPagePath.Append("homePageErr.html");
- else if (errType._to_integral() == ERR_PAGE_REASON::startup)
- errPagePath.Append("startPage.html");
- else if (errType._to_integral() == ERR_PAGE_REASON::redirect)
- errPagePath.Append("redirect.html");
- else
- errPagePath.Append("entityCheck.html");
- return std::make_pair(true, errPagePath.GetData());
- }
- std::pair<bool, std::string> CModTools::GenerateErrPage(ERR_PAGE_REASON errType, std::tuple < std::string, std::string> norParam, std::tuple<std::string, std::string, std::string, DWORD, DWORD> exParam)
- {
- auto generate_url_prefix = []() -> CSimpleStringA {
- #if defined(RVC_OS_WIN)
- return CSimpleStringA("");
- #else
- return CSimpleStringA("\\");
- #endif
- };
- auto errUrlRet = getErrUrl(errType);
- CSimpleStringA errPagePathBase = errUrlRet.second.c_str();
- CSimpleStringA errPageParams(true);
- CSimpleStringA needGuardian = "Y";
- auto rc = this->m_pEntity->GetFunction()->GetSysVar("NeedGuardian", needGuardian);
- bool showRebootTime = true;
- if (rc == Error_Succeed && needGuardian.Compare("Y", false))
- showRebootTime = false;
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("NeedGuardian:%s", needGuardian.GetData());
- switch (errType)
- {
- case ERR_PAGE_REASON::CardStoreIsBusy:
- break;
- case ERR_PAGE_REASON::breakdown:
- case ERR_PAGE_REASON::warnPrompt:
- case ERR_PAGE_REASON::audioErr:
- {
- errPageParams.Append(CSimpleStringA("showlimit=1"));
- if (ConfigManager::getInstance().m_withMin) {
- errPageParams.Append(CSimpleStringA(generate_url_prefix())).Append(CSimpleStringA("&showmin=1"));
- }
- }
- break;
- default:
- return std::make_pair(false, std::string("unknown err_page_reason:").append(errType._to_string()));
- }
- CSimpleStringA errPageUrl(true);
- if (!errPageParams.IsNullOrEmpty()) {
- errPageUrl = CSimpleStringA("file:///") + errPagePathBase + "?" + errPageParams;
- } else {
- errPageUrl = CSimpleStringA("file:///") + errPagePathBase;
- }
- #if defined(RVC_OS_WIN)
- std::string in = errPageUrl.GetData();
- errPageUrl = UrlEncoder::Encode(in).c_str();
- errPageUrl.Append(" ");
- CSimpleStringA cachePath;
- this->m_pEntity->GetFunction()->GetPath("Temp", cachePath);
- cachePath.Append(CSimpleStringA(SPLIT_SLASH_STR)).Append("cefCache_").
- Append(ConfigManager::getInstance().m_strCacheHead.length() > 0 ? ConfigManager::getInstance().m_strCacheHead.c_str() : "").Append(errType._to_string());
- errPageUrl.Append(" --cache-path=").Append(cachePath);
- if (ConfigManager::getInstance().m_extension_withTerminal && ConfigManager::getInstance().m_extension_headerStr.length() > 0)
- errPageUrl.Append(" --modify-header=").Append(ConfigManager::getInstance().m_extension_headerStr.c_str());
- if (ConfigManager::getInstance().m_extension_debugOpen)
- errPageUrl.Append(" --right-menu");
- if (ConfigManager::getInstance().isUseMagic())
- errPageUrl.Append(" --magic-str=").Append(m_magicStr.c_str());
- if (ConfigManager::getInstance().m_withMedia)
- errPageUrl.Append(" --enable-media-stream=1 --enable-speech-input=1");
- if (ConfigManager::getInstance().m_withConsole)
- errPageUrl.Append(" --with-console");
- if(ConfigManager::getInstance().getSogouForce() != 0)
- errPageUrl.Append(" --adapt-sogou=").Append(std::to_string(ConfigManager::getInstance().getSogouForce()).c_str());
- errPageUrl.Append(" --no-sandbox").Append(" --hide-controls --hide-overlays --hide-frame --winhttp-proxy-resolver").Append(" --always-on-top");
- switch (errType) {
- case ERR_PAGE_REASON::TerminalManagerKickOut:
- case ERR_PAGE_REASON::TerminalManagerOff:
- errPageUrl.Append(" --logextend=").Append((+PAGE_TYPE::TerminalManager)._to_string());
- break;
- case ERR_PAGE_REASON::CardStoreIsBusy:
- errPageUrl.Append(" --logextend=").Append((+PAGE_TYPE::CardStoreIsBusy)._to_string());
- break;
- case ERR_PAGE_REASON::CameraConfig:
- errPageUrl.Append(" --logextend=").Append((+PAGE_TYPE::CameraConfig)._to_string());
- break;
- case ERR_PAGE_REASON::disabled:
- case ERR_PAGE_REASON::jobuncomplete:
- errPageUrl.Append(" --logextend=").Append((+PAGE_TYPE::TradeManager)._to_string());
- break;
- case ERR_PAGE_REASON::warnPrompt:
- case ERR_PAGE_REASON::breakdown:
- case ERR_PAGE_REASON::audioErr:
- errPageUrl.Append(" --logextend=").Append((+PAGE_TYPE::breakdown)._to_string());
- break;
- default:
- errPageUrl.Append(" --logextend=").Append((+PAGE_TYPE::errPage)._to_string());
- break;
- }
- CSimpleStringA strChromiumPath = GetCefHead(this->m_pEntity);
- CSimpleString dstCmd = strChromiumPath + " --url=" + errPageUrl;
- #else
- CSimpleString dstCmd = generateBrowserCMDForEverything(errPageUrl.GetData(), 2, false).c_str();
- #endif //RVC_OS_WIN
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("GenerateErrPage dstPage=%s", dstCmd.GetData());
- return std::make_pair(true, (const char*)dstCmd.GetData());
- }
- std::string CModTools::GetSpShellNextRebootTime()
- {
- static std::string shellBootTime;
- if (0 == shellBootTime.length())
- {
- CAutoArray<CSimpleStringA> t_names;
- CAutoArray<int> t_Idx;
- CAutoArray<CEntityStartInfo> t_Infos;
- this->m_pEntity->GetFunction()->GetAllEntityStartInfo(t_names, t_Idx, t_Infos);
- for (int i = 0; i < t_Infos.GetCount(); i++) {
- //if (0 == t_Idx[i])//shell
- if (t_names[i].Compare("HealthManager") == 0) {
- SYSTEMTIME startTime = t_Infos[i].startTime;
- CSmallDateTime dateTime;
- dateTime.FromSystemTime(startTime);
- /** 十分钟后重启 [Gifur@2022324]*/
- CSmallDateTime dateNewTime((DWORD)dateTime + 10 * 60);
- shellBootTime = dateNewTime.ToTimeString().GetData();
- #if defined(RVC_OS_LINUX)
- SP::Utility::replaceInPlace(shellBootTime, " ", "-");
- #endif //RVC_OS_LINUX
- break;
- }
- }
- }
- return shellBootTime;
- }
- void CModTools::setLimitReason(const char* reason) {
- CSimpleStringA m_strLimitReason = reason;
- if (m_strLimitReason.Compare("breakdown") != 0 && !m_strLimitReason.IsNullOrEmpty())
- {
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("reason:%d, setState:%s", reason, "L");
- this->m_pEntity->GetFunction()->SetSysVar("TradeManageState", "L", true);
- }
- if (m_strLimitReason.Compare("breakdown") == 0) {
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("reason:%d, no setState", reason);
- }
- if (m_strLimitReason.IsNullOrEmpty())
- {
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("reason:%d, setState:%s", reason, "T");
- this->m_pEntity->GetFunction()->SetSysVar("TradeManageState", "T", true);
- }
- }
- void CModTools::stopCommonPage(std::string name)
- {
- #if defined(_MSC_VER)
- CSimpleStringA strChromiumPath = GetCefHead(this->m_pEntity), strCmdLine = "";
- strCmdLine.Append(strChromiumPath).Append(" --kill");
- strCmdLine.Append(" --logextend=").Append(name.c_str());
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("stopCommonPage cmdline:%s", strCmdLine.GetData());
- SYSTEM_ON(strCmdLine.GetData());
- #endif //_MSC_VER
- }
- /** 这个接口将移除,信创不再使用CEFClient [Gifur@2023626]*/
- void CModTools::StopChromiumBrowser(ERR_PAGE_REASON reason, bool stopAll)
- {
- #if defined(_MSC_VER)
- CSimpleStringA strChromiumPath = GetCefHead(this->m_pEntity), strCmdLine = "";
- strCmdLine.Append(strChromiumPath).Append(" --kill");
- if (!stopAll)
- strCmdLine.Append(" --logextend=").Append(reason._to_string());
- if (reason._to_integral() == ERR_PAGE_REASON::main)
- m_isGuardMainBrowser = false;
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("StopChromiumBrowser cmdline:%s, current guardian main browser : %d", strCmdLine.GetData(), m_isGuardMainBrowser);
- SYSTEM_ON(strCmdLine.GetData());
- if (reason._to_integral() == ERR_PAGE_REASON::breakdown || reason._to_integral() == ERR_PAGE_REASON::warnPrompt || reason._to_integral() == ERR_PAGE_REASON::audioErr)
- breakdownExist = false;
- if (reason._to_integral() == ERR_PAGE_REASON::ErrNotify)
- notifyExist = false;
- if (stopAll)
- breakdownExist = notifyExist = m_isAdOpen = false;
- #else
- if (stopAll)
- killAllChromium();
- else
- {
- CSimpleStringA strBasePath(true);
- this->m_pEntity->GetFunction()->GetPath("BaseDir", strBasePath);
- std::string strPath(strBasePath.GetData());
- std::string stopBrowser_path = "sudo " + strPath + SPLIT_SLASH_STR + "res" + SPLIT_SLASH_STR + "RunScript" + SPLIT_SLASH_STR + "stopBrowser.sh";
- stopBrowser_path.append(" --vtm_browser_type=").append(reason._to_string());
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("StopChromiumBrowser cmdline:%s", stopBrowser_path.c_str());
- do {
- boost::process::child child_process(stopBrowser_path);
- child_process.wait_for(std::chrono::seconds(5));
- } while (false);
- }
- #endif //_MSC_VER
- }
- void CModTools::StopChromiumBrowser_security(ERR_PAGE_REASON reason, int times)
- {
- for (int i = 0; i < times; )
- {
- StopChromiumBrowser(reason, false);
- i++;
- if(i < times)
- std::this_thread::sleep_for(std::chrono::seconds(2));
- }
- }
- /** 这个接口将移除,信创不再使用CEFClient [Gifur@2023626]*/
- void CModTools::StopSingleChromiumBrowserByName(std::string cefName)
- {
- #if defined(_MSC_VER)
- CSimpleStringA strChromiumPath = GetCefHead(this->m_pEntity), strCmdLine = "";
- strCmdLine.Append(strChromiumPath).Append(" --kill");
- strCmdLine.Append(" --logextend=").Append(cefName.c_str());
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("StopChromiumBrowser cmdline:%s, current guardian main browser : %d", strCmdLine.GetData(), m_isGuardMainBrowser);
- SYSTEM_ON(strCmdLine.GetData());
- #else
- LogWarn(Severity_Low, Error_NotSupport, LOG_WARN_CHROMIUM_NOT_SUPPORT_TOKILL_SPECIFIED_BROWSER,
- CSimpleStringA::Format("StopSingleChromiumBrowserByName: %s", cefName.c_str()));
- #endif //_MSC_VER
- }
- std::pair<bool, std::string> CModTools::getMainUrl()
- {
- CSimpleStringA strUrl;
- bool isOpenExtend = false;
- auto mainUrl = ConfigManager::getInstance().m_UserMgrUrlFultureStr;
- //strUrl = detectUrls(mainUrl.GetData()).c_str();
- strUrl = mainUrl;
- isOpenExtend = false;
- return std::make_pair(isOpenExtend, strUrl.GetData());
- }
- std::pair<bool, std::string> CModTools::getExtendUrl()
- {
- CSimpleStringA strUrl;
- if (ConfigManager::getInstance().m_UserMgrUrlNoSidebarStr.Compare(""))
- {
- auto mainUrl = ConfigManager::getInstance().m_UserMgrUrlNoSidebarStr;
- auto exUrl = ConfigManager::getInstance().m_UserMgrUrlNoSidebarMutiStr;
- auto t_Arr = exUrl.Split('|');
- std::vector<std::string> urlArr;
- urlArr.emplace_back(mainUrl.GetData());
- for (int i = 0; i < t_Arr.GetCount(); i++)
- urlArr.emplace_back(t_Arr[i].GetData());
- auto checkRet = DetectActiveHttp(urlArr);
- if (checkRet.first)
- strUrl = checkRet.second.c_str();
- else
- strUrl = mainUrl;
- }
- else
- strUrl = ConfigManager::getInstance().m_UserMgrUrlStr;
- return std::make_pair(strUrl.GetLength() > 0, strUrl.GetData());
- }
- std::string CModTools::generateAdCmd(std::string AdUrl) {
- #if defined(RVC_OS_LINUX)
- return generateBrowserCMDForEverything(AdUrl, 1, ConfigManager::getInstance().m_withUnsafeAd);
- #else
- CSimpleStringA strChromiumPath = GetCefHead(this->m_pEntity), strCmdLine = "";
- strCmdLine.Append(strChromiumPath).Append(" --url=").Append(AdUrl.c_str());
- if (ConfigManager::getInstance().m_extension_debugOpen)
- strCmdLine.Append(" --right-menu");
- if (ConfigManager::getInstance().m_extension_withTerminal && ConfigManager::getInstance().m_extension_headerStr.length() > 0)
- strCmdLine.Append(" --modify-header=").Append(ConfigManager::getInstance().m_extension_headerStr.c_str());
- CSimpleStringA cachePath;
- this->m_pEntity->GetFunction()->GetPath("Temp", cachePath);
- cachePath.Append(CSimpleStringA(SPLIT_SLASH_STR)).Append("cefCache_").
- Append(ConfigManager::getInstance().m_strCacheHead.length() > 0 ? ConfigManager::getInstance().m_strCacheHead.c_str() : "").Append((+ERR_PAGE_REASON::Ad)._to_string());
- strCmdLine.Append(" --cache-path=").Append(cachePath);
- if (ConfigManager::getInstance().isUseMagic())
- strCmdLine.Append(" --magic-str=").Append(m_magicStr.c_str());
- if (ConfigManager::getInstance().m_withMedia)
- strCmdLine.Append(" --enable-media-stream=1 --enable-speech-input=1");
- if (ConfigManager::getInstance().m_withConsole)
- strCmdLine.Append(" --with-console");
- if (ConfigManager::getInstance().getSogouForce() != 0)
- strCmdLine.Append(" --adapt-sogou=").Append(std::to_string(ConfigManager::getInstance().getSogouForce()).c_str());
- strCmdLine.Append(" --no-sandbox").Append(" --hide-controls --hide-overlays --hide-frame --winhttp-proxy-resolver");
- strCmdLine.Append(" --logextend=").Append((+PAGE_TYPE::Ad)._to_string());
- strCmdLine.Append(" --top=-1");
- strCmdLine.Append(" --run-extend");
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("cmdline : %s", strCmdLine.GetData());
- return strCmdLine.GetData();
- #endif //RVC_OS_LINUX
- }
- #if defined(RVC_OS_WIN)
- std::string CModTools::generateCefclientCmd(bool isExtend, std::string mainUrl)
- {
- CSimpleStringA strChromiumPath = GetCefHead(this->m_pEntity), strCmdLine = "";
- strCmdLine.Append(strChromiumPath).Append(" --url=").Append(mainUrl.c_str());
- if (ConfigManager::getInstance().m_withUnsafeMain)
- strCmdLine.Append(" --allow-running-insecure-content");
- if (ConfigManager::getInstance().m_extension_debugOpen)
- strCmdLine.Append(" --right-menu");
- if (ConfigManager::getInstance().m_extension_withTerminal && ConfigManager::getInstance().m_extension_headerStr.length() > 0)
- strCmdLine.Append(" --modify-header=").Append(ConfigManager::getInstance().m_extension_headerStr.c_str());
- if (isExtend) {
- //not support
- }
- CSimpleStringA cachePath;
- this->m_pEntity->GetFunction()->GetPath("Temp", cachePath);
- cachePath.Append(CSimpleStringA(SPLIT_SLASH_STR)).Append("cefCache_").
- Append(ConfigManager::getInstance().m_strCacheHead.length() > 0 ? ConfigManager::getInstance().m_strCacheHead.c_str() : "")
- .Append(isExtend ? (+ERR_PAGE_REASON::extend)._to_string() : (+ERR_PAGE_REASON::main)._to_string());
- //strCmdLine.Append(" --hide-controls=true")
- strCmdLine.Append(" --cache-path=").Append(cachePath);
- strCmdLine.Append(" --no-sandbox").Append(" --hide-controls --hide-overlays --hide-frame --winhttp-proxy-resolver --hide-tabs");
- if (ConfigManager::getInstance().isUseMagic())
- strCmdLine.Append(" --magic-str=").Append(m_magicStr.c_str());
- if (ConfigManager::getInstance().m_withMedia)
- strCmdLine.Append(" --enable-media-stream=1 --enable-speech-input=1");
- if (ConfigManager::getInstance().m_withConsole)
- strCmdLine.Append(" --with-console");
- if (ConfigManager::getInstance().getSogouForce() != 0)
- strCmdLine.Append(" --adapt-sogou=").Append(std::to_string(ConfigManager::getInstance().getSogouForce()).c_str());
- if (ConfigManager::getInstance().m_withDebugMode)
- strCmdLine.Append(" --remote-debugging-port=9222");
- if (isExtend) {
- strCmdLine.Append(" --logextend=").Append((+PAGE_TYPE::extend)._to_string());
- } else
- strCmdLine.Append(" --logextend=").Append((+PAGE_TYPE::slv)._to_string());
- strCmdLine.Append(" --errurl=file:\/\/\/").Append(getErrUrl(ERR_PAGE_REASON::main).second.c_str());
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("cmdline : %s", strCmdLine.GetData());
- return strCmdLine.GetData();
- }
- #endif //RVC_OS_WIN
- std::string CModTools::generateMainCmd(std::string mainUrl)
- {
- #if defined(_MSC_VER)
- return generateCefclientCmd(false, mainUrl);
- #else
- return generateBrowserCMDForEverything(mainUrl, 0, ConfigManager::getInstance().m_withUnsafeMain);
- #endif //_MSC_VER
- }
- std::string CModTools::generateInstallCmd(std::string installUrl)
- {
- #if defined(RVC_OS_LINUX)
- return generateBrowserCMDForEverything(installUrl, 0, false);
- #else
- CSimpleStringA strChromiumPath = GetCefHead(this->m_pEntity), strCmdLine = "";
- strCmdLine.Append(strChromiumPath).Append(" --url=").Append(installUrl.c_str());
- if (ConfigManager::getInstance().m_extension_debugOpen)
- strCmdLine.Append(" --right-menu");
- if (ConfigManager::getInstance().m_extension_withTerminal && ConfigManager::getInstance().m_extension_headerStr.length() > 0)
- strCmdLine.Append(" --modify-header=").Append(ConfigManager::getInstance().m_extension_headerStr.c_str());
- CSimpleStringA cachePath;
- this->m_pEntity->GetFunction()->GetPath("Temp", cachePath);
- cachePath.Append(CSimpleStringA(SPLIT_SLASH_STR)).Append("cefCache_").
- Append(ConfigManager::getInstance().m_strCacheHead.length() > 0 ? ConfigManager::getInstance().m_strCacheHead.c_str() : "").
- Append((+ERR_PAGE_REASON::Ad)._to_string());
- strCmdLine.Append(" --cache-path=").Append(cachePath);
- strCmdLine.Append(" --no-sandbox").Append(" --hide-controls --hide-overlays --hide-frame --winhttp-proxy-resolver --hide-tabs");
- strCmdLine.Append(" --lang=zh-CN");//install page need language chinese
- strCmdLine.Append(" --logextend=").Append((+PAGE_TYPE::Install)._to_string());
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("cmdline : %s", strCmdLine.GetData());
- return strCmdLine.GetData();
- #endif //RVC_OS_LINUX
- }
- bool startsWithHttpCaseInsensitive(std::string url) {
- std::transform(url.begin(), url.end(), url.begin(), ::tolower);
- return url.find("http") == 0;
- }
- std::string CModTools::generateCommonPage(std::string url, std::string name, int width, int height, int point_x, int point_y, int top)
- {
- #if defined(RVC_OS_LINUX)
- std::string dstUrl = url;
- CSimpleStringA strBasePath(true);
- this->m_pEntity->GetFunction()->GetPath("BaseDir", strBasePath);
- std::string strPath(strBasePath.GetData());
- const std::string execute_newbrowser_path = "sudo " + strPath + SPLIT_SLASH_STR + "res" + SPLIT_SLASH_STR + "RunScript" + SPLIT_SLASH_STR + "startBrower.sh";
- const std::string execute_oldbrowser_path = "sudo " + strPath + SPLIT_SLASH_STR + "res" + SPLIT_SLASH_STR + "RunScript" + SPLIT_SLASH_STR + "startUOSBrower.sh";
- CSimpleStringA strParams(true);
- if (width > 0 && height > 0)
- strParams.Append(" --window-size=").Append(std::to_string(width).c_str()).Append(",").Append(std::to_string(height).c_str());
-
- do
- {
- if (point_x != -1 && point_y != -1)
- {
- strParams.Append(" --window-position=").Append(std::to_string(point_x).c_str()).Append(",").Append(std::to_string(point_y).c_str());
- break;
- }
- if (SDL_Init(SDL_INIT_VIDEO) < 0) {
- break;
- }
- SDL_DisplayMode mode;
- if (SDL_GetDesktopDisplayMode(0, &mode) != 0) {
- // 错误处理
- SDL_Quit();
- break;
- }
- // 获取屏幕的宽度和高度
- int screen_width = mode.w;
- int screen_height = mode.h;
- SDL_Quit();
- point_x = (screen_width - width) / 2;
- point_y = (screen_height - height) / 2;
- strParams.Append(" --window-position=").Append(std::to_string(point_x).c_str()).Append(",").Append(std::to_string(point_y).c_str());
- } while (false);
-
- //旧版浏览器(系统自带)
- if (m_UseUOSBrowser == 1) {
- CSimpleStringA strUOSBrowserPath(execute_oldbrowser_path.c_str());
- strParams.Append(" --new-window --no-first-run --disable-popup-blocking --disable-notifications --disable-desktop-notifications ");
- if (ConfigManager::getInstance().m_extension_withTerminal)
- {
- strParams.Append(" --load-extension=").Append(ConfigManager::getInstance().m_extensionPath.c_str());
- if (startsWithHttpCaseInsensitive(url))
- {
- auto redirctUrlRet = getErrUrl(ERR_PAGE_REASON::redirect);
- dstUrl = "\"file:///" + redirctUrlRet.second + "?redirect_open=" + url + "&redirect_type=" + name + "\"";
- }
- }
- strParams.Append(" --allow-running-insecure-content --disable-infobars --disable-suggestions-service --disable-save-password-bubble --disable-component-update");
-
-
- CSimpleStringA tempPath;
- this->m_pEntity->GetFunction()->GetPath("Temp", tempPath);
- CSimpleStringA cachePath(tempPath);
- cachePath.Append(CSimpleStringA(SPLIT_SLASH_STR)).Append("UOSBrowser_").Append(name.c_str());
- strParams.Append(" --disk-cache-dir=").Append(cachePath);
- strParams.Append(" --disk-cache-size=").Append("2147483647"); //2G
- if (ConfigManager::getInstance().m_withMedia)
- strParams.Append(" --use-fake-ui-for-media-stream");
- CSimpleStringA usrDataPath(tempPath);
- usrDataPath.Append(SPLIT_SLASH_STR).Append("UOSBrowserConfig_").Append(name.c_str());
- strParams.Append(" --user-data-dir=").Append(usrDataPath);
- strParams.Append(" --vtm_browser_type=").Append(name.c_str());
- CSimpleStringA debug_log_path = usrDataPath + "/chrome_debug.log";
- if (ConfigManager::getInstance().m_withDebugMode)
- strParams.Append(" --enable-logging --vmodule=*/webrtc/*=2,*/media/*=2 --log-file=").Append(debug_log_path);
- strParams.Append(" --app=").Append(dstUrl.c_str());
- strUOSBrowserPath.Append(strParams);
- return strUOSBrowserPath.GetData();
- }
- //新版浏览器
- if (m_UseUOSBrowser == 2) {
- CSimpleStringA strUOSBrowserPath(execute_newbrowser_path.c_str());
- strParams.Append(" --allow-running-insecure-content --new-window");
- if (ConfigManager::getInstance().m_extension_withTerminal)
- {
- strParams.Append(" --load-extension=").Append(ConfigManager::getInstance().m_extensionPath.c_str());
- if (startsWithHttpCaseInsensitive(url))
- {
- auto redirctUrlRet = getErrUrl(ERR_PAGE_REASON::redirect);
- dstUrl = "\"file:///" + redirctUrlRet.second + "?redirect_open=" + url + "&redirect_type=" + name + "\"";
- }
- }
- CSimpleStringA tempPath;
- this->m_pEntity->GetFunction()->GetPath("Temp", tempPath);
- CSimpleStringA cachePath(tempPath);
- cachePath.Append(CSimpleStringA(SPLIT_SLASH_STR)).Append("Browser_").Append(name.c_str());
- strParams.Append(" --disk-cache-dir=").Append(cachePath);
- strParams.Append(" --disk-cache-size=").Append("2147483647"); //2G
- if (ConfigManager::getInstance().m_withMedia)
- strParams.Append(" --use-fake-ui-for-media-stream");
- CSimpleStringA usrDataPath(tempPath);
- usrDataPath.Append(SPLIT_SLASH_STR).Append("BrowserConfig_").Append(name.c_str());
- strParams.Append(" --user-data-dir=").Append(usrDataPath);
- strParams.Append(" --vtm_browser_type=").Append(name.c_str());
- CSimpleStringA debug_log_path = usrDataPath + "/chrome_debug.log";
- if (ConfigManager::getInstance().m_withDebugMode)
- strParams.Append(" --enable-logging --vmodule=*/webrtc/*=2,*/media/*=2 --log-file=").Append(debug_log_path);
- strParams.Append(" --app=").Append(dstUrl.c_str());
- strUOSBrowserPath.Append(strParams);
- return strUOSBrowserPath.GetData();
- }
- return std::string("");
- #else
- CSimpleStringA strChromiumPath = GetCefHead(this->m_pEntity), strCmdLine = "";
- strCmdLine.Append(strChromiumPath).Append(" --url=").Append(url.c_str());
- if (ConfigManager::getInstance().m_extension_debugOpen)
- strCmdLine.Append(" --right-menu");
- if (ConfigManager::getInstance().m_extension_withTerminal && ConfigManager::getInstance().m_extension_headerStr.length() > 0)
- strCmdLine.Append(" --modify-header=").Append(ConfigManager::getInstance().m_extension_headerStr.c_str());
- if (width > 0 && height > 0)
- strCmdLine.Append(" --center-size=").Append(std::to_string(width).c_str()).Append("*").Append(std::to_string(height).c_str());
- if (point_x != -1 && point_y != -1)
- {
- strCmdLine.Append(" --src-pos=").Append(std::to_string(point_x).c_str()).Append("*").Append(std::to_string(point_y).c_str());
- }
- CSimpleStringA cachePath;
- this->m_pEntity->GetFunction()->GetPath("Temp", cachePath);
- cachePath.Append(CSimpleStringA(SPLIT_SLASH_STR)).Append("cefCache_").
- Append(ConfigManager::getInstance().m_strCacheHead.length() > 0 ? ConfigManager::getInstance().m_strCacheHead.c_str() : "").Append(name.c_str());
- strCmdLine.Append(" --cache-path=").Append(cachePath);
- strCmdLine.Append(" --no-sandbox").Append(" --hide-controls --hide-overlays --hide-frame --winhttp-proxy-resolver --hide-tabs");
- strCmdLine.Append(" --lang=zh-CN");//install page need language chinese
- strCmdLine.Append(" --logextend=").Append(name.c_str());
- strCmdLine.Append(" --top=").Append(std::to_string(top).c_str());
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("%s cmdline : %s", name.c_str(), strCmdLine.GetData());
- return strCmdLine.GetData();
- #endif
- }
- std::string CModTools::generateSpecialPageFromOtherEntityCmd(std::string mainUrl)
- {
- #if defined(RVC_OS_WIN)
- CSimpleStringA cachePath;
- CSimpleStringA strChromiumPath = GetCefHead(this->m_pEntity), strCmdLine = "";
- strCmdLine.Append(strChromiumPath).Append(" --url=").Append(mainUrl.c_str());
- if (ConfigManager::getInstance().m_extension_debugOpen)
- strCmdLine.Append(" --right-menu");
- if (ConfigManager::getInstance().m_extension_withTerminal && ConfigManager::getInstance().m_extension_headerStr.length() > 0)
- strCmdLine.Append(" --modify-header=").Append(ConfigManager::getInstance().m_extension_headerStr.c_str());
- this->m_pEntity->GetFunction()->GetPath("Temp", cachePath);
- cachePath.Append(CSimpleStringA(SPLIT_SLASH_STR)).Append("cefCache_").
- Append(ConfigManager::getInstance().m_strCacheHead.length() > 0 ? ConfigManager::getInstance().m_strCacheHead.c_str() : "").
- Append(m_specialPage_temp_name.c_str());
- //strCmdLine.Append(" --hide-controls=true")
- strCmdLine.Append(" --cache-path=").Append(cachePath);
- strCmdLine.Append(" --no-sandbox").Append(" --hide-controls --hide-overlays --hide-frame --winhttp-proxy-resolver --hide-tabs");;//don't use single-process, it will affect the cef log
- if (ConfigManager::getInstance().isUseMagic())
- strCmdLine.Append(" --magic-str=").Append(m_magicStr.c_str());
- if (ConfigManager::getInstance().m_withMedia)
- strCmdLine.Append(" --enable-media-stream=1 --enable-speech-input=1");
- if (ConfigManager::getInstance().m_withConsole)
- strCmdLine.Append(" --with-console");
- if (ConfigManager::getInstance().getSogouForce() != 0)
- strCmdLine.Append(" --adapt-sogou=").Append(std::to_string(ConfigManager::getInstance().getSogouForce()).c_str());
- strCmdLine.Append(" --logextend=").Append(m_specialPage_temp_name.c_str());
- if (m_specialPage_temp_size.length() > 0)
- strCmdLine.Append(" --center-size=").Append(m_specialPage_temp_size.c_str());
- if (m_specialPage_temp_point.length() > 0)
- strCmdLine.Append(" --src-pos=").Append(m_specialPage_temp_point.c_str());
- strCmdLine.Append(" --top=").Append(std::to_string((unsigned long long)m_specialPage_temp_top).c_str());
- strCmdLine.Append(" --errurl=file:\/\/\/").Append(getErrUrl(ERR_PAGE_REASON::main).second.c_str());
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("cmdline : %s", strCmdLine.GetData());
- return strCmdLine.GetData();
- #else
- return generateBrowserCMDForEverything(mainUrl, 3, false);
- #endif //RVC_OS_WIN
- }
- #if defined(RVC_OS_LINUX)
- std::string CModTools::generateBrowserCMDForEverything(const std::string& url, int pageType, bool ignoreSecurity)
- {
- std::string dstUrl = url;
- CSimpleStringA strBasePath(true);
- this->m_pEntity->GetFunction()->GetPath("BaseDir", strBasePath);
- std::string strPath(strBasePath.GetData());
- const std::string execute_newbrowser_path = "sudo " + strPath + SPLIT_SLASH_STR + "res" + SPLIT_SLASH_STR + "RunScript" + SPLIT_SLASH_STR + "startBrower.sh";
- const std::string execute_oldbrowser_path = "sudo " + strPath + SPLIT_SLASH_STR + "res" + SPLIT_SLASH_STR + "RunScript" + SPLIT_SLASH_STR + "startUOSBrower.sh";
- std::string name = "";
- if (pageType == 0) {
- name = (+ERR_PAGE_REASON::main)._to_string();
- }
- else if (pageType == 1) {
- name = (+ERR_PAGE_REASON::Ad)._to_string();
- }
- else if (pageType == 2) {
- name = (+ERR_PAGE_REASON::breakdown)._to_string();
- }
- else if (pageType == 3) {
- name = (+ERR_PAGE_REASON::OutsideRequest)._to_string();
- }
- auto getUnsafeDomain = [](const std::string& url)
- {
- // 移除协议部分
- std::string::size_type pos = url.find("://");
- if (pos != std::string::npos) {
- pos += 3;
- }
- else {
- pos = 0;
- }
- // 查找域名结束位置
- std::string::size_type endPos = url.find('/', pos);
- if (endPos == std::string::npos) {
- endPos = url.length();
- }
- // 提取域名
- std::string domain = url.substr(pos, endPos - pos);
- domain = "http://" + domain;
- return domain;
- };
- //旧版浏览器(系统自带)
- if (m_UseUOSBrowser == 1) {
- CSimpleStringA strUOSBrowserPath(execute_oldbrowser_path.c_str());
- CSimpleStringA strParams(" --new-window --no-first-run --disable-popup-blocking --disable-notifications --disable-desktop-notifications --allow-running-insecure-content --disable-infobars --disable-suggestions-service --disable-save-password-bubble --disable-component-update");
- if (!ConfigManager::getInstance().m_extension_debugOpen)
- strParams.Append(" --kiosk");
- if (ConfigManager::getInstance().m_extension_withTerminal)
- {
- strParams.Append(" --load-extension=").Append(ConfigManager::getInstance().m_extensionPath.c_str());
- if (startsWithHttpCaseInsensitive(url))
- {
- auto redirctUrlRet = getErrUrl(ERR_PAGE_REASON::redirect);
- dstUrl = "\"file:///" + redirctUrlRet.second + "?redirect_open=" + url + "&redirect_type=" + name + "\"";
- }
- }
- if (pageType == 0 || pageType == 2 || pageType == 3) {
- } else if (pageType == 1) {
- strParams.Append(" --window-position=1280,1024");
- }
- CSimpleStringA tempPath;
- this->m_pEntity->GetFunction()->GetPath("Temp", tempPath);
- CSimpleStringA cachePath(tempPath);
- if (pageType == 0 || pageType == 2 || pageType == 3) {
- cachePath.Append(CSimpleStringA(SPLIT_SLASH_STR)).Append("UOSBrowserMain_").Append((+ERR_PAGE_REASON::main)._to_string());
- } else if (pageType == 1) {
- cachePath.Append(CSimpleStringA(SPLIT_SLASH_STR)).Append("UOSBrowserVice_").Append((+ERR_PAGE_REASON::Ad)._to_string());
- } else if (pageType == 2) {
- cachePath.Append(CSimpleStringA(SPLIT_SLASH_STR)).Append("UOSBrowserMain_").Append((+ERR_PAGE_REASON::breakdown)._to_string());
- } else if (pageType == 3) {
- cachePath.Append(CSimpleStringA(SPLIT_SLASH_STR)).Append("UOSBrowserMain_").Append((+ERR_PAGE_REASON::OutsideRequest)._to_string());
- }
- strParams.Append(" --disk-cache-dir=").Append(cachePath);
- strParams.Append(" --disk-cache-size=").Append("2147483647"); //2G
- if (ConfigManager::getInstance().m_withMedia)
- {
- strParams.Append(" --use-fake-ui-for-media-stream");
- }
- if (ignoreSecurity)
- {
- auto unsafeDomain = getUnsafeDomain(url);
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("srcurl:%s, unsafeDomain:%s", url.c_str(), unsafeDomain.c_str());
- strParams.Append(" --unsafely-treat-insecure-origin-as-secure=").Append(unsafeDomain.c_str());
- }
- CSimpleStringA usrDataPath(tempPath);
- if (pageType == 0) {
- usrDataPath.Append(SPLIT_SLASH_STR).Append("UOSBrowserConfigMain_").Append((+ERR_PAGE_REASON::main)._to_string());
- } else if (pageType == 1) {
- usrDataPath.Append(CSimpleStringA(SPLIT_SLASH_STR)).Append("UOSBrowserConfigVice_").Append((+ERR_PAGE_REASON::Ad)._to_string());
- } else if (pageType == 2) {
- usrDataPath.Append(CSimpleStringA(SPLIT_SLASH_STR)).Append("UOSBrowserConfigMain_").Append((+ERR_PAGE_REASON::breakdown)._to_string());
- } else if (pageType == 3) {
- usrDataPath.Append(CSimpleStringA(SPLIT_SLASH_STR)).Append("UOSBrowserConfigMain_").Append((+ERR_PAGE_REASON::OutsideRequest)._to_string());
- }
- strParams.Append(" --user-data-dir=").Append(usrDataPath);
- strParams.Append(" --vtm_browser_type=").Append(name.c_str());
- CSimpleStringA debug_log_path = usrDataPath + "/chrome_debug.log";
- if (ConfigManager::getInstance().m_withDebugMode)
- strParams.Append(" --enable-logging --vmodule=*/webrtc/*=2,*/media/*=2 --log-file=").Append(debug_log_path);
- strParams.Append(" ");
- strParams.Append(dstUrl.c_str());
- strUOSBrowserPath.Append(strParams);
- if (pageType == 0) {
- LogWarn(Severity_Low, Error_Unexpect, LOG_EVT_CHROMIUM_OPEN_MAIN_WITH_UOS, strUOSBrowserPath);
- } else if (pageType == 1) {
- LogWarn(Severity_Low, Error_Unexpect, LOG_EVT_CHROMIUM_OPEN_AD_WITH_UOS, strUOSBrowserPath);
- }
- return strUOSBrowserPath.GetData();
- }
- //新版浏览器
- if (m_UseUOSBrowser == 2) {
- CSimpleStringA strUOSBrowserPath(execute_newbrowser_path.c_str());
- CSimpleStringA strParams(" --allow-running-insecure-content --new-window");
- if (!ConfigManager::getInstance().m_extension_debugOpen)
- strParams.Append(" --kiosk");
- if (ConfigManager::getInstance().m_extension_withTerminal)
- {
- strParams.Append(" --load-extension=").Append(ConfigManager::getInstance().m_extensionPath.c_str());
- if (startsWithHttpCaseInsensitive(url))
- {
- auto redirctUrlRet = getErrUrl(ERR_PAGE_REASON::redirect);
- dstUrl = "\"file:///" + redirctUrlRet.second + "?redirect_open=" + url + "&redirect_type=" + name + "\"";
- }
- }
- if (pageType == 0 || pageType == 2 || pageType == 3) {
- } else if (pageType == 1) {
- strParams.Append(" --window-position=1280,1024");
- }
- CSimpleStringA tempPath;
- this->m_pEntity->GetFunction()->GetPath("Temp", tempPath);
- CSimpleStringA cachePath(tempPath);
- if (pageType == 0) {
- cachePath.Append(CSimpleStringA(SPLIT_SLASH_STR)).Append("BrowserMain_").Append((+ERR_PAGE_REASON::main)._to_string());
- } else if (pageType == 1) {
- cachePath.Append(CSimpleStringA(SPLIT_SLASH_STR)).Append("BrowserVice_").Append((+ERR_PAGE_REASON::Ad)._to_string());
- } else if (pageType == 2) {
- cachePath.Append(CSimpleStringA(SPLIT_SLASH_STR)).Append("BrowserMain_").Append((+ERR_PAGE_REASON::breakdown)._to_string());
- } else if (pageType == 3) {
- cachePath.Append(CSimpleStringA(SPLIT_SLASH_STR)).Append("BrowserMain_").Append((+ERR_PAGE_REASON::OutsideRequest)._to_string());
- }
- strParams.Append(" --disk-cache-dir=").Append(cachePath);
- strParams.Append(" --disk-cache-size=").Append("2147483647"); //2G
- if (ConfigManager::getInstance().m_withMedia)
- {
- strParams.Append(" --use-fake-ui-for-media-stream");
- }
- if (ignoreSecurity)
- {
- auto unsafeDomain = getUnsafeDomain(url);
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("srcurl:%s, unsafeDomain:%s", url.c_str(), unsafeDomain.c_str());
- strParams.Append(" --unsafely-treat-insecure-origin-as-secure=").Append(unsafeDomain.c_str());
- }
- CSimpleStringA usrDataPath(tempPath);
- if (pageType == 0) {
- usrDataPath.Append(SPLIT_SLASH_STR).Append("BrowserConfigMain_").Append((+ERR_PAGE_REASON::main)._to_string());
- } else if (pageType == 1) {
- usrDataPath.Append(CSimpleStringA(SPLIT_SLASH_STR)).Append("BrowserConfigVice_").Append((+ERR_PAGE_REASON::Ad)._to_string());
- } else if (pageType == 2) {
- cachePath.Append(CSimpleStringA(SPLIT_SLASH_STR)).Append("BrowserConfigMain_").Append((+ERR_PAGE_REASON::breakdown)._to_string());
- } else if (pageType == 3) {
- cachePath.Append(CSimpleStringA(SPLIT_SLASH_STR)).Append("BrowserConfigMain_").Append((+ERR_PAGE_REASON::OutsideRequest)._to_string());
- }
- strParams.Append(" --user-data-dir=").Append(usrDataPath);
- strParams.Append(" --vtm_browser_type=").Append(name.c_str());
- CSimpleStringA debug_log_path = usrDataPath + "/chrome_debug.log";
- if (ConfigManager::getInstance().m_withDebugMode)
- strParams.Append(" --enable-logging --vmodule=*/webrtc/*=2,*/media/*=2 --log-file=").Append(debug_log_path);
- strParams.Append(" ");
- strParams.Append(dstUrl.c_str());
- strUOSBrowserPath.Append(strParams);
- if (pageType == 0) {
- LogWarn(Severity_Low, Error_Unexpect, LOG_EVT_CHROMIUM_OPEN_MAIN_WITH_UOSV2, strUOSBrowserPath);
- } else if (pageType == 1) {
- LogWarn(Severity_Low, Error_Unexpect, LOG_EVT_CHROMIUM_OPEN_AD_WITH_UOSV2, strUOSBrowserPath);
- }
- return strUOSBrowserPath.GetData();
- }
- return std::string("");
- }
- #endif //RVC_OS_LINUX
- std::pair<bool, std::string> CModTools::openAdPage()
- {
- if (m_isAdOpen)//only open ad in first time
- return std::make_pair(false, "open AdPage failed! Already exist.");
- auto AdUrlRet = getAdUrl();
- if (AdUrlRet.first)
- {
- auto strAdCmd = generateAdCmd(AdUrlRet.second);
- auto openAdRet = openCef(strAdCmd, (m_UseUOSBrowser == 0));
- if (Error_Succeed != openAdRet.first)
- return std::make_pair(false, "open Ad err!");
- else
- {
- m_isAdOpen = true;
- return std::make_pair(true, "");
- }
- }
- else
- return std::make_pair(false, "StartChromiumBrowser Ad url err!");
- }
- std::pair<ErrorCodeEnum, int> CModTools::StartChromiumBrowser(
- ERR_PAGE_REASON reason, std::tuple < std::string, std::string> normalParam
- , std::tuple<std::string, std::string, std::string, DWORD, DWORD> exParam) {
- g_mutexFreerdp.lock();
- std::shared_ptr<void> delHandleFun((void*)0, [&](void*) {
- g_mutexFreerdp.unlock();
- });
- DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("start browser %d, %s", reason._to_integral(), reason._to_string());
- if (reason._to_integral() == ERR_PAGE_REASON::main)
- {
- auto mainUrlRet = getMainUrl();
- if (0 == mainUrlRet.second.length())
- {
- LogManager::getInstance().logEntityOpenPage(reason._to_string(), 0, 2, "none", Error_Unexpect, "StartChromiumBrowser get url failed!");
- LogWarn(Severity_High, Error_Unexpect, LOG_EVT_CHROMIUM_DETECT_MAIN_URL_EMPTY,
- CSimpleStringA::Format("StartChromiumBrowser get %s url failed!", reason._to_string()));
- return std::make_pair(Error_Unexpect, 0);
- }
- auto strCmdLine = generateMainCmd(mainUrlRet.second);
- auto openCefRet = openCef(strCmdLine, (m_UseUOSBrowser == 0));//with guard
- if (Error_Succeed == openCefRet.first) {
- LogWarn(Severity_Low, Error_Debug, LOG_EVT_CHROMIUM_OPEN_MAIN_URL,
- CSimpleStringA::Format("StartChromiumBrowser %s", mainUrlRet.second.c_str()));
- LogManager::getInstance().logEntityOpenPage(reason._to_string(), openCefRet.second, 0, "open");
- DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER)(CSimpleStringA::Format("StartChromiumBrowser %s", mainUrlRet.second.c_str()).GetData());
- /*
- #ifndef DEVOPS_ON_PRD
- LogEvent(Severity_High, LOG_EVT_CHROMIUM_OPEN_MAIN_URL, CSimpleStringA::Format("当前打开的业务链接:%s", mainUrlRet.second.c_str()));
- #endif
- */
- return std::make_pair(Error_Succeed, openCefRet.second);
- }
- }
- else if (reason._to_integral() == ERR_PAGE_REASON::extend)
- {
- LogManager::getInstance().logEntityOpenPage(reason._to_string(), 0, 2, "open", Error_Unexpect, "do not support freerdp");
- }
- else if (reason._to_integral() == ERR_PAGE_REASON::Ad)
- {
- auto AdRet = openAdPage();
- if(AdRet.first)
- LogManager::getInstance().logEntityOpenPage(reason._to_string(), 0, 0, "open");
- else
- LogManager::getInstance().logEntityOpenPage(reason._to_string(), 0, 2, "none", Error_Unexpect, AdRet.second);
- return std::make_pair(AdRet.first ? Error_Succeed : Error_Unexpect, 0);
- }
- else if (reason._to_integral() == ERR_PAGE_REASON::OutsideRequest) {
- #if defined(RVC_OS_WIN)
- auto strCmdLine = generateCefclientCmd(false, std::get<0>(normalParam));
- #else
- auto strCmdLine = generateBrowserCMDForEverything(std::get<0>(normalParam), 3, false);
- #endif //RVC_OS_WIN
- auto openCefRet = openCef(strCmdLine, false);
- if (Error_Succeed == openCefRet.first)
- {
- LogManager::getInstance().logEntityOpenPage(reason._to_string(), openCefRet.second, 0, "open");
- return std::make_pair(Error_Succeed, openCefRet.second);
- }
- else
- {
- LogManager::getInstance().logEntityOpenPage(reason._to_string(), openCefRet.second, 0, "none", openCefRet.first, "");
- }
- }
- else if (reason._to_integral() == ERR_PAGE_REASON::SpecialPageFromOtherEntity)
- {
- auto strCmdLine = generateSpecialPageFromOtherEntityCmd(std::get<0>(normalParam));
- auto openCefRet = openCef(strCmdLine, false);
- if (Error_Succeed == openCefRet.first)
- {
- LogManager::getInstance().logEntityOpenPage(reason._to_string(), openCefRet.second, 0, "open");
- return std::make_pair(Error_Succeed, openCefRet.second);
- }
- else
- LogManager::getInstance().logEntityOpenPage(reason._to_string(), openCefRet.second, 0, "none", openCefRet.first, "");
- }
- else if (reason._to_integral() == ERR_PAGE_REASON::startup)
- {
- auto url = std::string(R"(file:///)") + getErrUrl(reason).second;
- #if defined(RVC_OS_WIN)
- auto strCmdline = generateCommonPage(url, (+ERR_PAGE_REASON::startup)._to_string(), 900, 600, -1, -1, (int)HWND_NOTOPMOST);
- #else
- auto strCmdline = generateCommonPage(url, (+ERR_PAGE_REASON::startup)._to_string(), 900, 650, -1, -1, (int)HWND_NOTOPMOST);
- #endif
- auto openCefRet = openCef(strCmdline, false);
- if (Error_Succeed == openCefRet.first)
- {
- LogManager::getInstance().logEntityOpenPage(reason._to_string(), openCefRet.second, 0, "open");
- return std::make_pair(Error_Succeed, openCefRet.second);
- }
- else
- LogManager::getInstance().logEntityOpenPage(reason._to_string(), openCefRet.second, 0, "none", openCefRet.first, "");
- }
- else if (reason._to_integral() == ERR_PAGE_REASON::performance_monitor)
- {
- auto url = std::string(R"(file:///)") + getErrUrl(reason).second;
- auto strCmdline = generateCommonPage(url, (+ERR_PAGE_REASON::performance_monitor)._to_string(), 900, 600, -1, -1, (int)HWND_NOTOPMOST);
- auto openCefRet = openCef(strCmdline, false);
- if (Error_Succeed == openCefRet.first)
- {
- LogManager::getInstance().logEntityOpenPage(reason._to_string(), openCefRet.second, 0, "open");
- return std::make_pair(Error_Succeed, openCefRet.second);
- }
- else
- LogManager::getInstance().logEntityOpenPage(reason._to_string(), openCefRet.second, 0, "none", openCefRet.first, "");
- }
- else if (reason._to_integral() == ERR_PAGE_REASON::Install)
- {
- std::vector<std::string> installUrls;
- #ifdef DEVOPS_ON_ST /*DevOps流水线编译,ST环境*/
- installUrls.push_back("https://deviceinstallweb.paasst.cmbchina.cn/installRequire");
- #elif defined(DEVOPS_ON_UAT)/*DevOps流水线编译,UAT环境*/
- installUrls.push_back("https://deviceinstallweb.paasuat.cmbchina.cn/installRequire");
- #elif defined(DEVOPS_ON_PRD)/*DevOps流水线编译,PRD环境*/
- installUrls.push_back("https://deviceinstallweb.paas.cmbchina.cn/installRequire");
- #else/*本地编译等非DevOps环境编译的版本*/
- installUrls.push_back("https://deviceinstallweb.paasst.cmbchina.cn/installRequire");
- #endif
- auto checkRet = DetectActiveHttp(installUrls);
- if (!checkRet.first)
- {
- LogWarn(Severity_High, Error_NetBroken, LOG_WARN_CHROMIUM_INSTALL_URLS_CHECK,
- CSimpleString::Format("install page check err, can not connect to %s", installUrls[0].c_str()));
- }
- std::string dstInstallUrl = checkRet.first ? checkRet.second : installUrls[0];
- CSimpleString runningVer = "";
- m_pEntity->GetFunction()->GetRunningVersion(runningVer);
- dstInstallUrl.append("?terminalVersion=").append(runningVer.GetData());
- //TODO: CrossPlaform 由良瑜确认并处理:考虑采用 SpUtility.h 中的 replaceInPlace 函数 [Gifur@2025730]
- #if defined(RVC_OS_LINUX)
- auto replaceAll = [](std::string& str, const std::string& search, const std::string& replace) {
- size_t pos = 0;
- while ((pos = str.find(search, pos)) != std::string::npos) {
- str.replace(pos, search.length(), replace);
- pos += replace.length();
- }
- };
- replaceAll(dstInstallUrl, "&", "\\&");
- #endif // RVC_OS_WIN
- auto strCmdLine = generateInstallCmd(dstInstallUrl);
- auto openCefRet = openCef(strCmdLine, false);
- if (Error_Succeed == openCefRet.first)
- {
- LogManager::getInstance().logEntityOpenPage(reason._to_string(), openCefRet.second, 0, "open");
- return std::make_pair(Error_Succeed, openCefRet.second);
- }
- else
- LogManager::getInstance().logEntityOpenPage(reason._to_string(), openCefRet.second, 0, "none", openCefRet.first, "");
- }
- else
- {
- //open err page
-
- if (notifyExist)
- return std::make_pair(Error_Duplication, 0);
- if ((ERR_PAGE_REASON::breakdown == reason._to_integral()
- || reason._to_integral() == ERR_PAGE_REASON::warnPrompt
- || reason._to_integral() == ERR_PAGE_REASON::audioErr) && breakdownExist)
- return std::make_pair(Error_Duplication, 0);//只打开一个breakdown页面,后续通过cefclient改动,避免打开同种页面
- auto errPageUrl = GenerateErrPage(reason, normalParam, exParam);
- if (!errPageUrl.first)
- {
- LogManager::getInstance().logEntityOpenPage(reason._to_string(), 2, 0, "none", Error_Unexpect, "errPage get url failed!");
- return std::make_pair(Error_Unexpect, 0);
- }
- auto errPageRet = openCef(errPageUrl.second);
- if (Error_Succeed == errPageRet.first)
- {
- if (ERR_PAGE_REASON::ErrNotify == reason._to_integral())
- notifyExist = true;
- else if (ERR_PAGE_REASON::breakdown == reason._to_integral()
- || reason._to_integral() == ERR_PAGE_REASON::warnPrompt
- || reason._to_integral() == ERR_PAGE_REASON::audioErr)
- breakdownExist = true;
- LogManager::getInstance().logEntityOpenPage(reason._to_string(), errPageRet.second, 0, "open");
- }
- else
- LogManager::getInstance().logEntityOpenPage(reason._to_string(), errPageRet.second, 0, "none", errPageRet.first, "");
- return std::make_pair(errPageRet.first, 0);
- }
- return std::make_pair(Error_Unexpect, 0);
- }
- std::pair<ErrorCodeEnum, int> CModTools::startCommonPage(std::string name, std::string url, int width, int height, int point_x, int point_y, std::string top)
- {
- CSimpleString topStr = top.c_str();
- int top_param = (int)HWND_NOTOPMOST;
- if (topStr.Compare("top", true) == 0)
- top_param = (int)HWND_TOP;
- else if (topStr.Compare("topmost", true) == 0)
- top_param = (int)HWND_TOPMOST;
- else if (topStr.Compare("notopmost", true) == 0)
- top_param = (int)HWND_NOTOPMOST;
- else if (topStr.Compare("bottom", true) == 0)
- top_param = (int)HWND_BOTTOM;
- auto strCmdline = generateCommonPage(url, name, width, height, point_x, point_y, top_param);
- auto openCefRet = openCef(strCmdline, false);
- if (Error_Succeed == openCefRet.first)
- return std::make_pair(Error_Succeed, openCefRet.second);
- else
- {
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("open cef %s size:%d*%d at %d*%d in layer %s failed: %d"
- , name.c_str(), width, height, height, point_x, point_y, top.c_str(), openCefRet.first);
- return std::make_pair(openCefRet.first, openCefRet.first);
- }
- }
- void CModTools::cefClientGuardian(std::string cmdline)
- {
- //DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("create thread:%s", __FUNCTION__);
- m_isGuardMainBrowser = true;
- while (m_isGuardMainBrowser)
- {
- try
- {
- #if (defined _WIN32 || defined _WIN64)
- auto startRet = startProcessInJob(cmdline, "");
- if (!std::get<0>(startRet))
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("cefClientGuardian startProcessInJob failed!");
- else
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("cefClientGuardian open cefclient pid:%d, cmd:%s", std::get<1>(startRet), cmdline.c_str());
- WaitForSingleObject(std::get<3>(startRet), INFINITE);
- boost::mutex::scoped_lock(m_guardInterruptLock);//必须保证unlock被执行,不然就会有问题
- #else
- boost::process::child child_process(cmdline);
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("open cefclient pid:%d, cmd:%s", child_process.id(), cmdline.c_str());
- child_process.wait();
- #endif
- }
- catch (const std::exception& e)
- {
- std::cout << e.what() << std::endl;
- return;
- }
- catch (...)
- {
- return;
- }
- boost::this_thread::sleep_for(boost::chrono::seconds(3));
- }
- return;
- }
- // 输入为北京时间 输出为北京时间戳
- int CModTools::StandardToStamp(const char* str_time, bool dateOnly)
- {
- DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("StandardToStamp str = %s", str_time);
- struct tm stm;
- int iY, iM, iD, iH, iMin, iS;
- // 检查有效性
- if ('-' != str_time[4] || '-' != str_time[7])
- {
- return 0;
- }
- memset(&stm, 0, sizeof(stm));
- iY = atoi(str_time);
- iM = atoi(str_time + 5);
- iD = atoi(str_time + 8);
- if (dateOnly)
- {
- iH = 0;
- iMin = 0;
- iS = 0;
- }
- else {
- iH = atoi(str_time + 11);
- iMin = atoi(str_time + 14);
- iS = atoi(str_time + 17);
- }
- stm.tm_year = iY - 1900;
- stm.tm_mon = iM - 1;
- stm.tm_mday = iD;
- stm.tm_hour = iH;
- stm.tm_min = iMin;
- stm.tm_sec = iS;
- /*printf("%d-%0d-%0d %0d:%0d:%0d\n", iY, iM, iD, iH, iMin, iS);*/ //标准时间格式例如:2016:08:02 12:12:30
- return (int)mktime(&stm);
- }
- bool CModTools::findRestartCode(DWORD userCode) {
- DWORD authArr_noretry_norestart[] = ERRARR_ACCESSAUTH_NORETRY_NORESTART;
- DWORD authArr_retry_norestart[] = ERRARR_ACCESSAUTH_RETRY_NORESTART;
- std::vector<DWORD> norestartArr;
- #if (defined _WIN32 || defined _WIN64)
- for each (auto i in authArr_noretry_norestart)
- #else
- for (auto i : authArr_noretry_norestart)
- #endif
- norestartArr.emplace_back(i);
- #if (defined _WIN32 || defined _WIN64)
- for each (auto i in authArr_retry_norestart)
- #else
- for (auto i : authArr_retry_norestart)
- #endif
- norestartArr.emplace_back(i);
- #if (defined _WIN32 || defined _WIN64)
- for each (auto i in norestartArr)
- #else
- for (auto i : norestartArr)
- #endif
- {
- if (userCode == i) {
- return false;
- }
- }
- return true;
- }
- DWORD CModTools::spiltErrMsg(std::string errMsg)
- {
- DWORD usercode = 0;
- CSimpleString m_sAuthErrMsg = errMsg.c_str();
- auto authArr = m_sAuthErrMsg.Split('|');
- if (authArr.GetCount() > 1)
- {
- auto ErrcodeStr = authArr[0];
- if (ErrcodeStr[0] == '0' && ErrcodeStr[1] == 'x')
- usercode = std::stoi(ErrcodeStr.GetData(), 0, 0);
- }
- return usercode;
- }
- void CModTools::InitBrowserUseMode()
- {
- #if (defined _WIN32 || defined _WIN64)
- #else
- if (m_pEntity != nullptr) {
- CSmartPointer<IConfigInfo> spConfig;
- m_pEntity->GetFunction()->OpenConfig(Config_Cache, spConfig);
- CSimpleStringA value(true);
- spConfig->ReadConfigValue("BusinessBrowserType", "FultureEx", value);
- if (!(value.IsNullOrEmpty() || (value.Compare("1") != 0))) {
- m_UseUOSBrowser = 0;
- } else {
- m_UseUOSBrowser = ToGetUOSBrowserType();
- }
- } else {
- m_UseUOSBrowser = ToGetUOSBrowserType();
- }
- #endif
- }
- int CModTools::ToGetUOSBrowserType()
- {
- #if (defined _WIN32 || defined _WIN64)
- return 0;
- #else
- const std::string execute_newbrowser_path_check = "/usr/share/browser/browser";
- const std::string execute_oldbrowser_path_check = "/usr/share/uosbrowser/uosbrowser";
- CSimpleStringA strBasePath(true);
- this->m_pEntity->GetFunction()->GetPath("BaseDir", strBasePath);
- std::string strPath(strBasePath.GetData());
- const std::string execute_newbrowser_path = "sudo " + strPath + SPLIT_SLASH_STR + "res" + SPLIT_SLASH_STR + "RunScript" + SPLIT_SLASH_STR + "startBrower.sh";
- const std::string execute_oldbrowser_path = "sudo " + strPath + SPLIT_SLASH_STR + "res" + SPLIT_SLASH_STR + "RunScript" + SPLIT_SLASH_STR + "startUOSBrower.sh";
- int result(0);
- std::string additional("");
- std::string succStr, errStr;
- std::string runStr("dpkg -l | grep org.deepin.browser | awk '{print $3}'");
- if (SP::Module::Util::ShellExecute(runStr, succStr, errStr)) {
- if (succStr.empty()) {
- if (ExistsFileA(execute_oldbrowser_path_check.c_str())) {
- DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("%s exists!", execute_oldbrowser_path_check.c_str());
- result = 1;
- } else {
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("%s not exists!", execute_oldbrowser_path_check.c_str());
- }
- LogWarn(Severity_Low, Error_Debug, LOG_EVT_CHROMIUM_BROWSER_LACK_OF_NEWONE, "have not installered new version UOS browser");
- } else {
- DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("new browser version: %s", succStr.c_str());
- additional = succStr;
- if (!ExistsFileA(execute_newbrowser_path.c_str())) {
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("%s not exists!", execute_newbrowser_path.c_str());
- }
- result = 2;
- }
- } else {
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("execute '%s' failed!", runStr.c_str());
- }
- UploadBrowserInfo(result, additional.c_str());
- return result;
- #endif
- }
- void CModTools::UploadBrowserInfo(int usingType, LPCTSTR info)
- {
- CSmartPointer<IConfigInfo> spConfig;
- this->m_pEntity->GetFunction()->OpenConfig(Config_Run, spConfig);
- int oldType(0);
- CSimpleStringA strVersion;
- spConfig->ReadConfigValueInt("BrowserUse", "Type", oldType);
- spConfig->ReadConfigValue("BrowserUse", "Version", strVersion);
- if (oldType != usingType || strVersion.Compare(info) != 0) {
- LogWarn(Severity_Low, Error_Unexpect, LOG_EVT_CHROMIUM_BROWSER_USING_TYPE_CHANGE,
- CSimpleStringA::Format("{ \"type\":%d, \"version\":\"%s\"}", usingType, info));
- spConfig->WriteConfigValueInt("BrowserUse", "Type", usingType);
- spConfig->WriteConfigValue("BrowserUse", "Version", info);
- }
- }
- std::pair<ErrorCodeEnum, int> CModTools::openCef(std::string cmdline, bool isGuard, bool usingSystemCmd)
- {
- if (isGuard) {
- //mod_chromium相当于cefclient的守护进程
- boost::thread cefGuardian(boost::bind(&CModTools::cefClientGuardian, this, cmdline));
- cefGuardian.detach();
- }
- else
- {
- #if (defined _WIN32 || defined _WIN64)
- auto startRet = startProcessInJob(cmdline, "");
- if (!std::get<0>(startRet))
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("startProcessInJob failed!");
- return std::make_pair(std::get<0>(startRet) ? Error_Succeed : Error_Unexpect, std::get<1>(startRet));
- #else
- auto systemStartChromium = [](std::string str, bool systemCmd) {
- if (systemCmd) {
- DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("system(%s)", str.c_str());
- system(str.c_str());
- } else {
- SystemRunTest(str);
- }
- };
- boost::thread(systemStartChromium, cmdline, usingSystemCmd).detach();
- #endif
- }
- return std::make_pair(Error_Succeed, 0);
- }
- bool CModTools::RestartProxyServer() {
- // start tcp bridge service
- ErrorCodeEnum Error;
- CSmartPointer<IEntityFunction> spEntityFunction = this->m_pEntity->GetFunction();
- Error = spEntityFunction->StopTcpBridgeServer();
- if (Error != Error_Succeed)
- {
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("stop tcp bridge server failed! error = %d", Error);
- return false;
- }
-
- Error = spEntityFunction->StartTcpBridgeServer(4504);
- if (Error != Error_Succeed)
- {
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("start tcp bridge server failed! error = %d", Error);
- return false;
- }
-
- return true;
- }
- std::tuple<CSimpleStringA, CSimpleStringA, CSimpleStringA, CSimpleStringA, CSimpleStringA> CModTools::ReadCenterConfigStr(CSimpleStringA entityName) {
- CSimpleStringA str = "", strNew = "", strEx = "", strFulture = "", strAd = "", strCacheHead;
- bool forceCleanCache = false;
- CSmartPointer<IConfigInfo> spCerConfig;
- ErrorCodeEnum err = this->m_pEntity->GetFunction()->OpenConfig(Config_CenterSetting, spCerConfig);
- if (entityName == "")
- entityName = this->m_pEntity->GetEntityName();
- SpIniMappingTable table;
- // clean cache every time
- table.AddEntryString(entityName, "UserMgrUrlFulture", strFulture, "");
- table.AddEntryString(entityName, "UserMgrAd", strAd, "");
- table.AddEntryString(entityName, "CacheHead", strCacheHead, "");
- if (Error_Succeed == table.Load(spCerConfig))
- DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)(CSimpleString::Format("read centersetting config : UserMgrUrlFulture-%s, UserMgrAd-%s", strFulture.GetData(), strAd.GetData()));
- CChromiumEntity* pChromiumEntity = reinterpret_cast<CChromiumEntity*>(m_pEntity);
- if (pChromiumEntity != nullptr && pChromiumEntity->HasCustomMainUrl()) {
- strFulture = pChromiumEntity->GetCustomMainUrl();
- CSimpleStringA strTmp = CSimpleStringA::Format("更新业务中台链接为:[%s]", strFulture.GetData());
- LogWarn(Severity_Low, Error_Debug, LOG_EVT_CHROMIUM_USE_CUSTOM_FULTURE_URL, strTmp);
- }
- ConfigManager::getInstance().m_strCacheHead = strCacheHead.GetData();
- return std::make_tuple(str, strNew, strEx, strFulture, strAd);
- }
- }
|