diff options
Diffstat (limited to 'indra')
| -rw-r--r-- | indra/newview/app_settings/settings.xml | 24 | ||||
| -rw-r--r-- | indra/newview/lllogininstance.cpp | 3 | ||||
| -rw-r--r-- | indra/newview/tests/lllogininstance_test.cpp | 1 | ||||
| -rw-r--r-- | indra/viewer_components/login/lllogin.cpp | 29 | ||||
| -rw-r--r-- | indra/viewer_components/login/tests/lllogin_test.cpp | 37 | 
5 files changed, 88 insertions, 6 deletions
| diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 15c9499bbc..0f82165b6e 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -4259,7 +4259,29 @@        <key>Value</key>        <integer>0</integer>      </map> -    <key>LogMessages</key> +  <key>LoginSRVTimeout</key> +  <map> +    <key>Comment</key> +    <string>Duration in seconds of the login SRV request timeout</string> +    <key>Persist</key> +    <integer>0</integer> +    <key>Type</key> +    <string>F32</string> +    <key>Value</key> +    <real>10.0</real> +  </map> +  <key>LoginSRVPump</key> +  <map> +    <key>Comment</key> +    <string>Name of the message pump that handles SRV request</string> +    <key>Persist</key> +    <integer>0</integer> +    <key>Type</key> +    <string>String</string> +    <key>Value</key> +    <string>LLAres</string> +  </map> +  <key>LogMessages</key>      <map>        <key>Comment</key>        <string>Log network traffic</string> diff --git a/indra/newview/lllogininstance.cpp b/indra/newview/lllogininstance.cpp index 945294f3f2..a01426ea87 100644 --- a/indra/newview/lllogininstance.cpp +++ b/indra/newview/lllogininstance.cpp @@ -182,6 +182,9 @@ void LLLoginInstance::constructAuthParams(const LLSD& credentials)  	mRequestData["method"] = "login_to_simulator";  	mRequestData["params"] = request_params;  	mRequestData["options"] = requested_options; + +	mRequestData["cfg_srv_timeout"] = gSavedSettings.getF32("LoginSRVTimeout"); +	mRequestData["cfg_srv_pump"] = gSavedSettings.getString("LoginSRVPump");  }  bool LLLoginInstance::handleLoginEvent(const LLSD& event) diff --git a/indra/newview/tests/lllogininstance_test.cpp b/indra/newview/tests/lllogininstance_test.cpp index d31a81e128..7b28a3b72c 100644 --- a/indra/newview/tests/lllogininstance_test.cpp +++ b/indra/newview/tests/lllogininstance_test.cpp @@ -76,6 +76,7 @@ LLControlGroup::LLControlGroup(const std::string& name) :  LLControlGroup::~LLControlGroup() {}  void LLControlGroup::setBOOL(const std::string& name, BOOL val) {}  BOOL LLControlGroup::getBOOL(const std::string& name) { return FALSE; } +F32 LLControlGroup::getF32(const std::string& name) { return 0.0f; }  U32 LLControlGroup::saveToFile(const std::string& filename, BOOL nondefault_only) { return 1; }  void LLControlGroup::setString(const std::string& name, const std::string& val) {}  std::string LLControlGroup::getString(const std::string& name) { return "test_string"; } diff --git a/indra/viewer_components/login/lllogin.cpp b/indra/viewer_components/login/lllogin.cpp index 7a30315b9a..b14c59ab9a 100644 --- a/indra/viewer_components/login/lllogin.cpp +++ b/indra/viewer_components/login/lllogin.cpp @@ -70,7 +70,7 @@ public:  	LLEventPump& getEventPump() { return mPump; }  private: -	void sendProgressEvent(const std::string& state, const std::string& change, +	LLSD getProgressEventLLSD(const std::string& state, const std::string& change,  						   const LLSD& data = LLSD())  	{  		LLSD status_data; @@ -87,7 +87,13 @@ private:  		{  			status_data["data"] = data;  		} +		return status_data; +	} +	void sendProgressEvent(const std::string& state, const std::string& change, +						   const LLSD& data = LLSD()) +	{ +		LLSD status_data = getProgressEventLLSD(state, change, data);  		mPump.post(status_data);  	} @@ -140,15 +146,28 @@ void LLLogin::Impl::login_(LLCoros::self& self, std::string uri, LLSD credential          // Request SRV record.          LL_INFOS("LLLogin") << "Requesting SRV record from " << uri << LL_ENDL; -        // *NOTE:Mani - Completely arbitrary timeout value for SRV request. -        filter.errorAfter(5, "SRV Request timed out!"); +        // *NOTE:Mani - Completely arbitrary default timeout value for SRV request. +		F32 seconds_to_timeout = 5.0f; +		if(credentials.has("cfg_srv_timeout")) +		{ +			seconds_to_timeout = credentials["cfg_srv_timeout"].asReal(); +		} + +		filter.eventAfter(seconds_to_timeout,  +			getProgressEventLLSD("offline", "fail.login")); + +		std::string srv_pump_name = "LLAres"; +		if(credentials.has("cfg_srv_pump")) +		{ +			srv_pump_name = credentials["cfg_srv_pump"].asString(); +		} -        // Make request +		// Make request          LLSD request;          request["op"] = "rewriteURI";          request["uri"] = uri;          request["reply"] = replyPump.getName(); -        rewrittenURIs = postAndWait(self, request, "LLAres", filter); +        rewrittenURIs = postAndWait(self, request, srv_pump_name, filter);      } // we no longer need the filter      LLEventPump& xmlrpcPump(LLEventPumps::instance().obtain("LLXMLRPCTransaction")); diff --git a/indra/viewer_components/login/tests/lllogin_test.cpp b/indra/viewer_components/login/tests/lllogin_test.cpp index a8ae2883d5..56c21016bd 100644 --- a/indra/viewer_components/login/tests/lllogin_test.cpp +++ b/indra/viewer_components/login/tests/lllogin_test.cpp @@ -47,6 +47,7 @@ public:  	bool call(const LLSD& event)  	{  		mDebug(STRINGIZE("LoginListener called!: " << event)); +		  		mLastEvent = event;  		return false;  	} @@ -414,4 +415,40 @@ namespace tut  		ensure_equals("Failed to offline", listener.lastEvent()["state"].asString(), "offline");  	} + +    template<> template<> +    void llviewerlogin_object::test<5>() +    { +        DEBUG; +		// Test SRV request timeout. +		set_test_name("LLLogin SRV timeout testing"); + +		// Testing normal login procedure. +		LLEventStream llaresPump("LLAres"); // Dummy LLAres pump. + +		// LLAresListener dummyLLAres("dummy_llares"); +		// dummyLLAres.listenTo(llaresPump); + +		LLLogin login; +		LoginListener listener("test_ear"); +		listener.listenTo(login.getEventPump()); + +		LLSD credentials; +		credentials["first"] = "these"; +		credentials["last"] = "don't"; +		credentials["passwd"] = "matter"; +		credentials["cfg_srv_timeout"] = 0.0f; + +		login.connect("login.bar.com", credentials); + +		ensure_equals("SRV State", listener.lastEvent()["change"].asString(), "srvrequest");  + +		// Get the mainloop eventpump, which needs a pinging in order to drive the  +		// SRV timeout. +		LLEventPump& mainloop(LLEventPumps::instance().obtain("mainloop")); +		LLSD frame_event; +		mainloop.post(frame_event); + +		ensure_equals("SRV Failure", listener.lastEvent()["change"].asString(), "fail.login");  +	}  } | 
