diff options
| author | Ansariel <ansariel.hiller@phoenixviewer.com> | 2024-05-22 19:04:52 +0200 |
|---|---|---|
| committer | Ansariel <ansariel.hiller@phoenixviewer.com> | 2024-05-22 19:04:52 +0200 |
| commit | 1b67dd855c41f5a0cda7ec2a68d98071986ca703 (patch) | |
| tree | ab243607f74f78200787bba5b9b88f07ef1b966f /indra/newview/llcommandhandler.cpp | |
| parent | 6d6eabca44d08d5b97bfe3e941d2b9687c2246ea (diff) | |
| parent | e1623bb276f83a43ce7a197e388720c05bdefe61 (diff) | |
Merge remote-tracking branch 'origin/main' into DRTVWR-600-maint-A
# Conflicts:
# autobuild.xml
# indra/cmake/CMakeLists.txt
# indra/cmake/GoogleMock.cmake
# indra/llaudio/llaudioengine_fmodstudio.cpp
# indra/llaudio/llaudioengine_fmodstudio.h
# indra/llaudio/lllistener_fmodstudio.cpp
# indra/llaudio/lllistener_fmodstudio.h
# indra/llaudio/llstreamingaudio_fmodstudio.cpp
# indra/llaudio/llstreamingaudio_fmodstudio.h
# indra/llcharacter/llmultigesture.cpp
# indra/llcharacter/llmultigesture.h
# indra/llimage/llimage.cpp
# indra/llimage/llimagepng.cpp
# indra/llimage/llimageworker.cpp
# indra/llimage/tests/llimageworker_test.cpp
# indra/llmessage/tests/llmockhttpclient.h
# indra/llprimitive/llgltfmaterial.h
# indra/llrender/llfontfreetype.cpp
# indra/llui/llcombobox.cpp
# indra/llui/llfolderview.cpp
# indra/llui/llfolderviewmodel.h
# indra/llui/lllineeditor.cpp
# indra/llui/lllineeditor.h
# indra/llui/lltextbase.cpp
# indra/llui/lltextbase.h
# indra/llui/lltexteditor.cpp
# indra/llui/lltextvalidate.cpp
# indra/llui/lltextvalidate.h
# indra/llui/lluictrl.h
# indra/llui/llview.cpp
# indra/llwindow/llwindowmacosx.cpp
# indra/newview/app_settings/settings.xml
# indra/newview/llappearancemgr.cpp
# indra/newview/llappearancemgr.h
# indra/newview/llavatarpropertiesprocessor.cpp
# indra/newview/llavatarpropertiesprocessor.h
# indra/newview/llbreadcrumbview.cpp
# indra/newview/llbreadcrumbview.h
# indra/newview/llbreastmotion.cpp
# indra/newview/llbreastmotion.h
# indra/newview/llconversationmodel.h
# indra/newview/lldensityctrl.cpp
# indra/newview/lldensityctrl.h
# indra/newview/llface.inl
# indra/newview/llfloatereditsky.cpp
# indra/newview/llfloatereditwater.cpp
# indra/newview/llfloateremojipicker.h
# indra/newview/llfloaterimsessiontab.cpp
# indra/newview/llfloaterprofiletexture.cpp
# indra/newview/llfloaterprofiletexture.h
# indra/newview/llgesturemgr.cpp
# indra/newview/llgesturemgr.h
# indra/newview/llimpanel.cpp
# indra/newview/llimpanel.h
# indra/newview/llinventorybridge.cpp
# indra/newview/llinventorybridge.h
# indra/newview/llinventoryclipboard.cpp
# indra/newview/llinventoryclipboard.h
# indra/newview/llinventoryfunctions.cpp
# indra/newview/llinventoryfunctions.h
# indra/newview/llinventorygallery.cpp
# indra/newview/lllistbrowser.cpp
# indra/newview/lllistbrowser.h
# indra/newview/llpanelobjectinventory.cpp
# indra/newview/llpanelprofile.cpp
# indra/newview/llpanelprofile.h
# indra/newview/llpreviewgesture.cpp
# indra/newview/llsavedsettingsglue.cpp
# indra/newview/llsavedsettingsglue.h
# indra/newview/lltooldraganddrop.cpp
# indra/newview/llurllineeditorctrl.cpp
# indra/newview/llvectorperfoptions.cpp
# indra/newview/llvectorperfoptions.h
# indra/newview/llviewerparceloverlay.cpp
# indra/newview/llviewertexlayer.cpp
# indra/newview/llviewertexturelist.cpp
# indra/newview/macmain.h
# indra/test/test.cpp
Diffstat (limited to 'indra/newview/llcommandhandler.cpp')
| -rw-r--r-- | indra/newview/llcommandhandler.cpp | 246 |
1 files changed, 123 insertions, 123 deletions
diff --git a/indra/newview/llcommandhandler.cpp b/indra/newview/llcommandhandler.cpp index caa27e530b..4038ae8002 100644 --- a/indra/newview/llcommandhandler.cpp +++ b/indra/newview/llcommandhandler.cpp @@ -7,21 +7,21 @@ * $LicenseInfo:firstyear=2007&license=viewerlgpl$ * Second Life Viewer Source Code * Copyright (C) 2010, Linden Research, Inc. - * + * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; * version 2.1 of the License only. - * + * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. - * + * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * + * * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ @@ -48,81 +48,81 @@ const std::string LLCommandHandler::NAV_TYPE_NAVIGATED = "navigated"; //--------------------------------------------------------------------------- struct LLCommandHandlerInfo { - LLCommandHandler::EUntrustedAccess mUntrustedBrowserAccess; - LLCommandHandler* mHandler; // safe, all of these are static objects + LLCommandHandler::EUntrustedAccess mUntrustedBrowserAccess; + LLCommandHandler* mHandler; // safe, all of these are static objects }; class LLCommandHandlerRegistry { public: - static LLCommandHandlerRegistry& instance(); - void add(const char* cmd, - LLCommandHandler::EUntrustedAccess untrusted_access, - LLCommandHandler* handler); - bool dispatch(const std::string& cmd, - const LLSD& params, - const LLSD& query_map, + static LLCommandHandlerRegistry& instance(); + void add(const char* cmd, + LLCommandHandler::EUntrustedAccess untrusted_access, + LLCommandHandler* handler); + bool dispatch(const std::string& cmd, + const LLSD& params, + const LLSD& query_map, const std::string& grid, - LLMediaCtrl* web, - const std::string& nav_type, - bool trusted_browser); + LLMediaCtrl* web, + const std::string& nav_type, + bool trusted_browser); private: void notifySlurlBlocked(); void notifySlurlThrottled(); - friend LLSD LLCommandDispatcher::enumerate(); - std::map<std::string, LLCommandHandlerInfo> mMap; + friend LLSD LLCommandDispatcher::enumerate(); + std::map<std::string, LLCommandHandlerInfo> mMap; }; -// static +// static LLCommandHandlerRegistry& LLCommandHandlerRegistry::instance() { - // Force this to be initialized on first call, because we're going - // to be adding items to the std::map before main() and we can't - // rely on a global being initialized in the right order. - static LLCommandHandlerRegistry instance; - return instance; + // Force this to be initialized on first call, because we're going + // to be adding items to the std::map before main() and we can't + // rely on a global being initialized in the right order. + static LLCommandHandlerRegistry instance; + return instance; } void LLCommandHandlerRegistry::add(const char* cmd, - LLCommandHandler::EUntrustedAccess untrusted_access, - LLCommandHandler* handler) + LLCommandHandler::EUntrustedAccess untrusted_access, + LLCommandHandler* handler) { - LLCommandHandlerInfo info; - info.mUntrustedBrowserAccess = untrusted_access; - info.mHandler = handler; + LLCommandHandlerInfo info; + info.mUntrustedBrowserAccess = untrusted_access; + info.mHandler = handler; - mMap[cmd] = info; + mMap[cmd] = info; } bool LLCommandHandlerRegistry::dispatch(const std::string& cmd, - const LLSD& params, - const LLSD& query_map, - const std::string& grid, - LLMediaCtrl* web, - const std::string& nav_type, - bool trusted_browser) + const LLSD& params, + const LLSD& query_map, + const std::string& grid, + LLMediaCtrl* web, + const std::string& nav_type, + bool trusted_browser) { - static F64 last_throttle_time = 0.0; - F64 cur_time = 0.0; - std::map<std::string, LLCommandHandlerInfo>::iterator it = mMap.find(cmd); - if (it == mMap.end()) return false; - const LLCommandHandlerInfo& info = it->second; - if (!trusted_browser) - { - switch (info.mUntrustedBrowserAccess) - { - case LLCommandHandler::UNTRUSTED_ALLOW: - // fall through and let the command be handled - break; + static F64 last_throttle_time = 0.0; + F64 cur_time = 0.0; + std::map<std::string, LLCommandHandlerInfo>::iterator it = mMap.find(cmd); + if (it == mMap.end()) return false; + const LLCommandHandlerInfo& info = it->second; + if (!trusted_browser) + { + switch (info.mUntrustedBrowserAccess) + { + case LLCommandHandler::UNTRUSTED_ALLOW: + // fall through and let the command be handled + break; - case LLCommandHandler::UNTRUSTED_BLOCK: - // block request from external browser, but report as - // "handled" because it was well formatted. - LL_WARNS_ONCE("SLURL") << "Blocked SLURL command from untrusted browser" << LL_ENDL; + case LLCommandHandler::UNTRUSTED_BLOCK: + // block request from external browser, but report as + // "handled" because it was well formatted. + LL_WARNS_ONCE("SLURL") << "Blocked SLURL command from untrusted browser" << LL_ENDL; notifySlurlBlocked(); - return true; + return true; case LLCommandHandler::UNTRUSTED_CLICK_ONLY: if (nav_type == LLCommandHandler::NAV_TYPE_CLICKED @@ -134,40 +134,40 @@ bool LLCommandHandlerRegistry::dispatch(const std::string& cmd, notifySlurlBlocked(); return true; - case LLCommandHandler::UNTRUSTED_THROTTLE: - //skip initial request from external browser before STATE_BROWSER_INIT - if (LLStartUp::getStartupState() == STATE_FIRST) - { - return true; - } + case LLCommandHandler::UNTRUSTED_THROTTLE: + //skip initial request from external browser before STATE_BROWSER_INIT + if (LLStartUp::getStartupState() == STATE_FIRST) + { + return true; + } if (!info.mHandler->canHandleUntrusted(params, query_map, web, nav_type)) { LL_WARNS_ONCE("SLURL") << "Blocked SLURL command from untrusted browser" << LL_ENDL; notifySlurlBlocked(); return true; } - // if users actually click on a link, we don't need to throttle it - // (throttling mechanism is used to prevent an avalanche of clicks via - // javascript - if (nav_type == LLCommandHandler::NAV_TYPE_CLICKED) - { - break; - } - cur_time = LLTimer::getElapsedSeconds(); - if (cur_time < last_throttle_time + THROTTLE_PERIOD) - { - // block request from external browser if it happened - // within THROTTLE_PERIOD seconds of the last command - LL_WARNS_ONCE("SLURL") << "Throttled SLURL command from untrusted browser" << LL_ENDL; + // if users actually click on a link, we don't need to throttle it + // (throttling mechanism is used to prevent an avalanche of clicks via + // javascript + if (nav_type == LLCommandHandler::NAV_TYPE_CLICKED) + { + break; + } + cur_time = LLTimer::getElapsedSeconds(); + if (cur_time < last_throttle_time + THROTTLE_PERIOD) + { + // block request from external browser if it happened + // within THROTTLE_PERIOD seconds of the last command + LL_WARNS_ONCE("SLURL") << "Throttled SLURL command from untrusted browser" << LL_ENDL; notifySlurlThrottled(); - return true; - } - last_throttle_time = cur_time; - break; - } - } - if (!info.mHandler) return false; - return info.mHandler->handle(params, query_map, grid, web); + return true; + } + last_throttle_time = cur_time; + break; + } + } + if (!info.mHandler) return false; + return info.mHandler->handle(params, query_map, grid, web); } void LLCommandHandlerRegistry::notifySlurlBlocked() @@ -203,15 +203,15 @@ void LLCommandHandlerRegistry::notifySlurlThrottled() //--------------------------------------------------------------------------- LLCommandHandler::LLCommandHandler(const char* cmd, - EUntrustedAccess untrusted_access) + EUntrustedAccess untrusted_access) { - LLCommandHandlerRegistry::instance().add(cmd, untrusted_access, this); + LLCommandHandlerRegistry::instance().add(cmd, untrusted_access, this); } LLCommandHandler::~LLCommandHandler() { - // Don't care about unregistering these, all the handlers - // should be static objects. + // Don't care about unregistering these, all the handlers + // should be static objects. } //--------------------------------------------------------------------------- @@ -220,67 +220,67 @@ LLCommandHandler::~LLCommandHandler() // static bool LLCommandDispatcher::dispatch(const std::string& cmd, - const LLSD& params, - const LLSD& query_map, - const std::string& grid, - LLMediaCtrl* web, - const std::string& nav_type, - bool trusted_browser) + const LLSD& params, + const LLSD& query_map, + const std::string& grid, + LLMediaCtrl* web, + const std::string& nav_type, + bool trusted_browser) { - return LLCommandHandlerRegistry::instance().dispatch( - cmd, params, query_map, grid, web, nav_type, trusted_browser); + return LLCommandHandlerRegistry::instance().dispatch( + cmd, params, query_map, grid, web, nav_type, trusted_browser); } static std::string lookup(LLCommandHandler::EUntrustedAccess value); LLSD LLCommandDispatcher::enumerate() { - LLSD response; - LLCommandHandlerRegistry& registry(LLCommandHandlerRegistry::instance()); - for (std::map<std::string, LLCommandHandlerInfo>::const_iterator chi(registry.mMap.begin()), - chend(registry.mMap.end()); - chi != chend; ++chi) - { - LLSD info; - info["untrusted"] = chi->second.mUntrustedBrowserAccess; - info["untrusted_str"] = lookup(chi->second.mUntrustedBrowserAccess); - response[chi->first] = info; - } - return response; + LLSD response; + LLCommandHandlerRegistry& registry(LLCommandHandlerRegistry::instance()); + for (std::map<std::string, LLCommandHandlerInfo>::const_iterator chi(registry.mMap.begin()), + chend(registry.mMap.end()); + chi != chend; ++chi) + { + LLSD info; + info["untrusted"] = chi->second.mUntrustedBrowserAccess; + info["untrusted_str"] = lookup(chi->second.mUntrustedBrowserAccess); + response[chi->first] = info; + } + return response; } /*------------------------------ lookup stuff ------------------------------*/ struct symbol_info { - const char* name; - LLCommandHandler::EUntrustedAccess value; + const char* name; + LLCommandHandler::EUntrustedAccess value; }; -#define ent(SYMBOL) \ - { \ - &#SYMBOL[28], /* skip "LLCommandHandler::UNTRUSTED_" prefix */ \ - SYMBOL \ - } +#define ent(SYMBOL) \ + { \ + &#SYMBOL[28], /* skip "LLCommandHandler::UNTRUSTED_" prefix */ \ + SYMBOL \ + } symbol_info symbols[] = { - ent(LLCommandHandler::UNTRUSTED_ALLOW), // allow commands from untrusted browsers - ent(LLCommandHandler::UNTRUSTED_BLOCK), // ignore commands from untrusted browsers + ent(LLCommandHandler::UNTRUSTED_ALLOW), // allow commands from untrusted browsers + ent(LLCommandHandler::UNTRUSTED_BLOCK), // ignore commands from untrusted browsers ent(LLCommandHandler::UNTRUSTED_CLICK_ONLY), // allow untrusted, but only if clicked - ent(LLCommandHandler::UNTRUSTED_THROTTLE) // allow untrusted, but only a few per min. + ent(LLCommandHandler::UNTRUSTED_THROTTLE) // allow untrusted, but only a few per min. }; #undef ent static std::string lookup(LLCommandHandler::EUntrustedAccess value) { - for (symbol_info *sii(symbols), *siend(symbols + (sizeof(symbols)/sizeof(symbols[0]))); - sii != siend; ++sii) - { - if (sii->value == value) - { - return sii->name; - } - } - return STRINGIZE("UNTRUSTED_" << value); + for (symbol_info *sii(symbols), *siend(symbols + (sizeof(symbols)/sizeof(symbols[0]))); + sii != siend; ++sii) + { + if (sii->value == value) + { + return sii->name; + } + } + return STRINGIZE("UNTRUSTED_" << value); } |
