diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index b9cbd04adf17f8e983f89c94544f624ece748eb6..512a91b99663ae6a5220ac9176ed0b8495e1607e 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -2395,9 +2395,10 @@ if (LL_TESTS) ${LLVFS_LIBRARIES} ${LLMATH_LIBRARIES} ${LLXML_LIBRARIES} + ${LLUI_LIBRARIES} ${LLMESSAGE_LIBRARIES} ${LLLOGIN_LIBRARIES} - ${LLCOREHTTP_LIBRARIES} + ${LLCOREHTTP_LIBRARIES} ${LLCOMMON_LIBRARIES} ${OPENSSL_LIBRARIES} ${CRYPTO_LIBRARIES} @@ -2416,21 +2417,21 @@ if (LL_TESTS) "${test_libs}" ) - #set(llslurl_test_sources - # llslurl.cpp - # llviewernetwork.cpp - #) + set(llslurl_test_sources + llslurl.cpp + llviewernetwork.cpp + ) - #LL_ADD_INTEGRATION_TEST(llslurl - # "${llslurl_test_sources}" - # "${test_libs}" - # ) + LL_ADD_INTEGRATION_TEST(llslurl + "${llslurl_test_sources}" + "${test_libs}" + ) - #set(llviewernetwork_test_sources - # llviewernetwork.cpp - # lllogininstance.cpp - #) + set(llviewernetwork_test_sources + llviewernetwork.cpp + lllogininstance.cpp + ) #LL_ADD_INTEGRATION_TEST(llviewernetwork # "${llviewernetwork_test_sources}" diff --git a/indra/newview/lllogininstance.cpp b/indra/newview/lllogininstance.cpp index 74748b55a0d33988e471eb9ed6e96bca69a8082a..c097bbe86fdd6f2ee64217ea214eefa264e8aa1c 100644 --- a/indra/newview/lllogininstance.cpp +++ b/indra/newview/lllogininstance.cpp @@ -643,6 +643,10 @@ bool LLLoginInstance::handleLoginEvent(const LLSD& event) mLoginState = event["state"].asString(); mResponseData = event["data"]; + + // Kinda hacky, I know. This won't work right after disconnect, but fuck it, why are + // you changing the grid after disconnect? Needs expanded upon. + LLGridManager::getInstance()->setLoggedIn(mLoginState == LLStringExplicit("online")); if(event.has("transfer_rate")) { @@ -659,8 +663,6 @@ bool LLLoginInstance::handleLoginEvent(const LLSD& event) void LLLoginInstance::handleLoginFailure(const LLSD& event) { - - // Login has failed. // Figure out why and respond... LLSD response = event["data"]; diff --git a/indra/newview/llviewernetwork.cpp b/indra/newview/llviewernetwork.cpp index 1f506e5b85f3094b4addf3a761a5014778053854..735367d88865c307547c59aed75225e5c6caad06 100644 --- a/indra/newview/llviewernetwork.cpp +++ b/indra/newview/llviewernetwork.cpp @@ -32,12 +32,10 @@ #include "llviewernetwork.h" #include "llviewercontrol.h" #include "llcorehttputil.h" -#include "lllogininstance.h" #include "llnotificationsutil.h" #include "llsdserialize.h" #include "llsecapi.h" #include "lltrans.h" -#include "llweb.h" #include "llxmlnode.h" /// key used to store the grid, and the name attribute in the grid data @@ -106,6 +104,7 @@ const std::string GRIDS_USER_FILE = "grids_user.xml"; LLGridManager::LLGridManager() : mPlatform(NOPLATFORM) +, mLoggedIn(false) { // by default, we use the 'grids.xml' file in the user settings directory // this file is an LLSD file containing multiple grid definitions. @@ -616,7 +615,7 @@ void LLGridManager::saveGridList() LLSD data; for(LLSD::map_iterator grid_iter = mGridList.beginMap(); grid_iter != mGridList.endMap(); - grid_iter++) + ++grid_iter) { // We don't need to store system grids, they're hard coded! if (grid_iter->second.has(GRID_IS_SYSTEM_GRID_VALUE) @@ -641,7 +640,7 @@ std::map<std::string, std::string> LLGridManager::getKnownGrids() const std::map<std::string, std::string> result; for(LLSD::map_const_iterator grid_iter = mGridList.beginMap(); grid_iter != mGridList.endMap(); - grid_iter++) + ++grid_iter) { // skip temp grids. since this is just for "grid label mappings for UI purposes" if (grid_iter->second.has(GRID_TEMPORARY) && grid_iter->second[GRID_TEMPORARY].asBoolean()) @@ -654,9 +653,9 @@ std::map<std::string, std::string> LLGridManager::getKnownGrids() const void LLGridManager::setGridChoice(const std::string& grid, const bool only_select /* = true */) { - // Don't allow grid choice the grid once we're already logged in. - if (LLLoginInstance::getInstance()->authSuccess()) return; - + // Can't change grid once we are logged in + if (mLoggedIn) return; + // Set the grid choice based on a string. LL_DEBUGS("GridManager") << "requested " << grid << LL_ENDL; std::string grid_name = getGrid(grid); // resolved either the name or the id to the name @@ -699,7 +698,7 @@ std::string LLGridManager::getGrid(const std::string& grid) const // search the grid list for a grid with a matching id for(LLSD::map_const_iterator grid_iter = mGridList.beginMap(); grid_name.empty() && grid_iter != mGridList.endMap(); - grid_iter++) + ++grid_iter) { if (grid_iter->second.has(GRID_ID_VALUE)) { @@ -733,7 +732,7 @@ std::string LLGridManager::getGridByAttribute(const std::string& attribute, cons for(LLSD::map_const_iterator grid_iter = mGridList.beginMap(); grid_iter != mGridList.endMap(); - grid_iter++) + ++grid_iter) { if (grid_iter->second.has(attribute) && LLStringUtil::compareStrings(value, grid_iter->second[attribute].asString()) == 0) @@ -802,7 +801,7 @@ void LLGridManager::getLoginURIs(const std::string& grid, std::vector<std::strin { for (LLSD::array_const_iterator llsd_uri = mGridList[grid_name][GRID_LOGIN_URI_VALUE].beginArray(); llsd_uri != mGridList[grid_name][GRID_LOGIN_URI_VALUE].endArray(); - llsd_uri++) + ++llsd_uri) { uris.push_back(llsd_uri->asString()); } diff --git a/indra/newview/llviewernetwork.h b/indra/newview/llviewernetwork.h index db12570c7b419d1ccc44b4b0eb3a041d0c30f993..c205a49c04b75dd79afe1cbd57fd066b0cfa61e9 100644 --- a/indra/newview/llviewernetwork.h +++ b/indra/newview/llviewernetwork.h @@ -261,6 +261,9 @@ class LLGridManager : public LLSingleton<LLGridManager> ///< @returns true if successfully removed //@} + + /// Sets login lock so grid cannot be changed once we are logged in + void setLoggedIn(bool logged_in) { mLoggedIn = logged_in; } protected: @@ -290,7 +293,8 @@ private: const std::string& administrator, const std::string& platform, const std::string& login_id = ""); - + + bool mLoggedIn; std::string mGrid; std::string mGridFile; LLSD mGridList; diff --git a/indra/newview/tests/llslurl_test.cpp b/indra/newview/tests/llslurl_test.cpp index 46f621c7a760954a04a7eacaf3ebad075b756987..12edbec63c03833439809339e02f084bac0180ea 100644 --- a/indra/newview/tests/llslurl_test.cpp +++ b/indra/newview/tests/llslurl_test.cpp @@ -33,7 +33,6 @@ #include "../llslurl.h" #include "llxmlnode.h" #include "llcontrol.h" -#include "llsdserialize.h" #include "llnotificationsutil.h" namespace @@ -218,26 +217,26 @@ namespace tut "http://maps.secondlife.com/secondlife/my%20region/1/2/3"); LLGridManager::getInstance()->setGridChoice("my.grid.com"); - slurl = LLSLURL("http://my.grid.com/region/my%20region/1/2/3"); + slurl = LLSLURL("x-grid-info://my.grid.com/region/my%20region/1/2/3"); ensure_equals("grid slurl, region + coords - type", slurl.getType(), LLSLURL::LOCATION); ensure_equals("grid slurl, region + coords", slurl.getSLURLString(), - "http://my.grid.com/region/my%20region/1/2/3"); + "x-grid-info://my.grid.com/region/my%20region/1/2/3"); - slurl = LLSLURL("http://my.grid.com/region/my region"); + slurl = LLSLURL("x-grid-info://my.grid.com/region/my region"); ensure_equals("grid slurl, region + coords - type", slurl.getType(), LLSLURL::LOCATION); ensure_equals("grid slurl, region + coords", slurl.getSLURLString(), - "http://my.grid.com/region/my%20region/128/128/0"); + "x-grid-info://my.grid.com/region/my%20region/128/128/0"); LLGridManager::getInstance()->setGridChoice("foo.bar.com"); slurl = LLSLURL("/myregion/1/2/3"); ensure_equals("/: slurl, region + coords - type", slurl.getType(), LLSLURL::LOCATION); ensure_equals("/ slurl, region + coords", slurl.getSLURLString(), - "http://foo.bar.com/region/myregion/1/2/3"); + "x-grid-info://foo.bar.com/region/myregion/1/2/3"); slurl = LLSLURL("myregion/1/2/3"); ensure_equals(": slurl, region + coords - type", slurl.getType(), LLSLURL::LOCATION); ensure_equals(" slurl, region + coords", slurl.getSLURLString(), - "http://foo.bar.com/region/myregion/1/2/3"); + "x-grid-info://foo.bar.com/region/myregion/1/2/3"); slurl = LLSLURL(LLSLURL::SIM_LOCATION_HOME); ensure_equals("home", slurl.getType(), LLSLURL::HOME_LOCATION); @@ -275,7 +274,7 @@ namespace tut ensure_equals("grid4", slurl.getGrid(), "Aditi" ); LLGridManager::getInstance()->setGridChoice("my.grid.com"); - slurl = LLSLURL("https://my.grid.com/app/foo/bar?12345"); + slurl = LLSLURL("x-grid-info://my.grid.com/app/foo/bar?12345"); ensure_equals("app", slurl.getType(), LLSLURL::APP); ensure_equals("appcmd", slurl.getAppCmd(), "foo"); ensure_equals("apppath", slurl.getAppPath().size(), 1); @@ -297,12 +296,12 @@ namespace tut LLSLURL slurl = LLSLURL("my.grid.com", "my region"); ensure_equals("grid/region - type", slurl.getType(), LLSLURL::LOCATION); ensure_equals("grid/region", slurl.getSLURLString(), - "http://my.grid.com/region/my%20region/128/128/0"); + "x-grid-info://my.grid.com/region/my%20region/128/128/0"); slurl = LLSLURL("my.grid.com", "my region", LLVector3(1,2,3)); ensure_equals("grid/region/vector - type", slurl.getType(), LLSLURL::LOCATION); ensure_equals(" grid/region/vector", slurl.getSLURLString(), - "http://my.grid.com/region/my%20region/1/2/3"); + "x-grid-info://my.grid.com/region/my%20region/1/2/3"); LLGridManager::getInstance()->setGridChoice("util.agni.lindenlab.com"); slurl = LLSLURL("my region", LLVector3(1,2,3)); @@ -314,36 +313,10 @@ namespace tut slurl = LLSLURL("my region", LLVector3(1,2,3)); ensure_equals("default grid/region/vector - type", slurl.getType(), LLSLURL::LOCATION); ensure_equals(" default grid/region/vector", slurl.getSLURLString(), - "http://my.grid.com/region/my%20region/1/2/3"); + "x-grid-info://my.grid.com/region/my%20region/1/2/3"); } - // Accessors - template<> template<> - void slurlTestObject::test<3>() - { - llofstream gridfile(TEST_FILENAME); - gridfile << gSampleGridFile; - gridfile.close(); - - LLGridManager::getInstance()->initialize(TEST_FILENAME); - - LLGridManager::getInstance()->setGridChoice("my.grid.com"); - LLSLURL slurl = LLSLURL("https://my.grid.com/region/my%20region/1/2/3"); - ensure_equals("login string", slurl.getLoginString(), "uri:my region&1&2&3"); - ensure_equals("location string", slurl.getLocationString(), "my region/1/2/3"); - ensure_equals("grid", slurl.getGrid(), "my.grid.com"); - ensure_equals("region", slurl.getRegion(), "my region"); - ensure_equals("position", slurl.getPosition(), LLVector3(1, 2, 3)); - - slurl = LLSLURL("http://my.grid.com:8002/region/my%20region/1/2/3"); - ensure_equals("login string", slurl.getLoginString(), "uri:my region&1&2&3"); - ensure_equals("location string", slurl.getLocationString(), "my region/1/2/3"); - ensure_equals("grid", slurl.getGrid(), "my.grid.com:8002"); - ensure_equals("region", slurl.getRegion(), "my region"); - ensure_equals("position", slurl.getPosition(), LLVector3(1, 2, 3)); - } - // x-grid-location-info template<> template<> void slurlTestObject::test<4>() @@ -355,7 +328,7 @@ namespace tut LLGridManager::getInstance()->initialize(TEST_FILENAME); LLGridManager::getInstance()->setGridChoice("my.grid.com"); - LLSLURL slurl = LLSLURL("x-grid-location-info://my.grid.com/app/foo/bar?12345"); + LLSLURL slurl = LLSLURL("x-grid-info://my.grid.com/app/foo/bar?12345"); ensure_equals("app", slurl.getType(), LLSLURL::APP); ensure_equals("appcmd", slurl.getAppCmd(), "foo"); ensure_equals("apppath", slurl.getAppPath().size(), 1); @@ -363,7 +336,7 @@ namespace tut ensure_equals("appquery", slurl.getAppQuery(), "12345"); ensure_equals("grid1", slurl.getGrid(), "my.grid.com"); - slurl = LLSLURL("x-grid-location-info://lincoln.lindenlab.com/app/agent/0e346d8b-4433-4d66-a6b0-fd37083abc4c/about"); + slurl = LLSLURL("x-grid-info://lincoln.lindenlab.com/app/agent/0e346d8b-4433-4d66-a6b0-fd37083abc4c/about"); ensure_equals("app", slurl.getType(), LLSLURL::APP); ensure_equals("appcmd", slurl.getAppCmd(), "agent"); ensure_equals("apppath", slurl.getAppPath().size(), 2); @@ -372,7 +345,7 @@ namespace tut ensure_equals("grid1", slurl.getGrid(), "lincoln.lindenlab.com"); LLGridManager::getInstance()->setGridChoice("my.stupidgrid.com:8002"); - slurl = LLSLURL("x-grid-location-info://my.stupidgrid.com:8002/app/foo/bar/baz?12345"); + slurl = LLSLURL("x-grid-info://my.stupidgrid.com:8002/app/foo/bar/baz?12345"); ensure_equals("app", slurl.getType(), LLSLURL::APP); ensure_equals("appcmd", slurl.getAppCmd(), "foo"); ensure_equals("apppath", slurl.getAppPath().size(), 2); @@ -381,7 +354,7 @@ namespace tut ensure_equals("appquery", slurl.getAppQuery(), "12345"); ensure_equals("grid1", slurl.getGrid(), "my.stupidgrid.com:8002"); - slurl = LLSLURL("x-grid-location-info://my.stupidgrid.com:8002/region/my%20region/1/2/3"); + slurl = LLSLURL("x-grid-info://my.stupidgrid.com:8002/region/my%20region/1/2/3"); ensure_equals("login string", slurl.getLoginString(), "uri:my region&1&2&3"); ensure_equals("location string", slurl.getLocationString(), "my region/1/2/3"); ensure_equals("grid", slurl.getGrid(), "my.stupidgrid.com:8002"); diff --git a/indra/newview/tests/llviewernetwork_test.cpp b/indra/newview/tests/llviewernetwork_test.cpp index ca65bc3cfc343b1bb18a3edb5c4519b4edfe60be..02592cc805b7cd6676dec8e58350a64fae08f95f 100644 --- a/indra/newview/tests/llviewernetwork_test.cpp +++ b/indra/newview/tests/llviewernetwork_test.cpp @@ -32,6 +32,7 @@ #include "../test/lltut.h" #include "llcontrol.h" #include "llfile.h" +#include "lltrans.h" #include "llxmlnode.h" #include "llnotificationsutil.h" @@ -41,7 +42,7 @@ namespace static const char * const TEST_FILENAME("llviewernetwork_test.xml"); } -const std::string REMOTE_GRID = "http://login.yrgrid.com:8002/"; +const std::string REMOTE_GRID = "http://grid.example.com:8002/"; //---------------------------------------------------------------------------- // Mock objects for the dependencies of the code we're testing @@ -61,6 +62,7 @@ std::string gCmdLineGridChoice; std::string gCmdLineHelperURI; std::string gLoginPage; std::string gCurrentGrid; + std::string LLControlGroup::getString(const std::string& name) const { if (name == "CmdLineGridChoice") @@ -388,7 +390,7 @@ namespace tut LLGridManager::getInstance()->initialize(TEST_FILENAME); - LLGridManager::getInstance()->setGridChoice("util.agni.lindenlab.com"); + LLGridManager::getInstance()->setGridChoice(std::string("util.agni.lindenlab.com")); ensure_equals("getGridLabel", LLGridManager::getInstance()->getGridLabel(), std::string("Second Life")); @@ -416,7 +418,7 @@ namespace tut uris[0], std::string("https://login.agni.lindenlab.com/cgi-bin/login.cgi")); - LLGridManager::getInstance()->setGridChoice("altgrid.long.name"); + LLGridManager::getInstance()->setGridChoice(std::string("altgrid.long.name")); ensure_equals("getGridLabel", LLGridManager::getInstance()->getGridLabel(), std::string("Alternative Grid"));