diff options
Diffstat (limited to 'indra/viewer_components')
| -rw-r--r-- | indra/viewer_components/login/lllogin.cpp | 30 | ||||
| -rw-r--r-- | indra/viewer_components/login/tests/lllogin_test.cpp | 29 | 
2 files changed, 51 insertions, 8 deletions
| diff --git a/indra/viewer_components/login/lllogin.cpp b/indra/viewer_components/login/lllogin.cpp index ea1e3ff3f9..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,20 +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; -		filter.actionAfter(seconds_to_timeout,  -			sendProgressEvent("offline", "fail.login", LLSD())); +		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          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..c3b1838422 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,32 @@ 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("Failed to offline", listener.lastEvent()["change"].asString(), "srvrequest");  +	}  } | 
