diff options
| author | Rider Linden <rider@lindenlab.com> | 2015-06-03 11:57:58 -0700 | 
|---|---|---|
| committer | Rider Linden <rider@lindenlab.com> | 2015-06-03 11:57:58 -0700 | 
| commit | dcd364022435ed7dc7458b83a4d3b42a0b777b11 (patch) | |
| tree | b8c032dc135c4c6c05632302d3b227349678b03d | |
| parent | bd3dc9cfe24ffc433783201e854f00bbd07aed54 (diff) | |
TOS retrieval to coroutine
| -rwxr-xr-x | indra/newview/llfloatertos.cpp | 84 | ||||
| -rwxr-xr-x | indra/newview/llfloatertos.h | 5 | 
2 files changed, 32 insertions, 57 deletions
diff --git a/indra/newview/llfloatertos.cpp b/indra/newview/llfloatertos.cpp index c1c21c593e..f8195de155 100755 --- a/indra/newview/llfloatertos.cpp +++ b/indra/newview/llfloatertos.cpp @@ -45,7 +45,7 @@  #include "llvfile.h"  #include "message.h"  #include "llstartup.h"              // login_alert_done - +#include "llcorehttputil.h"  LLFloaterTOS::LLFloaterTOS(const LLSD& data)  :	LLModalDialog( data["message"].asString() ), @@ -57,57 +57,6 @@ LLFloaterTOS::LLFloaterTOS(const LLSD& data)  {  } -// helper class that trys to download a URL from a web site and calls a method  -// on parent class indicating if the web server is working or not -class LLIamHere : public LLHTTPClient::Responder -{ -	LOG_CLASS(LLIamHere); -private: -	LLIamHere( LLFloaterTOS* parent ) : -	   mParent( parent ) -	{} - -	LLFloaterTOS* mParent; - -public: -	static LLIamHere* build( LLFloaterTOS* parent ) -	{ -		return new LLIamHere( parent ); -	} -	 -	virtual void  setParent( LLFloaterTOS* parentIn ) -	{ -		mParent = parentIn; -	} -	 -protected: -	virtual void httpSuccess() -	{ -		if ( mParent ) -		{ -			mParent->setSiteIsAlive( true ); -		} -	} - -	virtual void httpFailure() -	{ -		LL_DEBUGS("LLIamHere") << dumpResponse() << LL_ENDL; -		if ( mParent ) -		{ -			// *HACK: For purposes of this alive check, 302 Found -			// (aka Moved Temporarily) is considered alive.  The web site -			// redirects this link to a "cache busting" temporary URL. JC -			bool alive = (getStatus() == HTTP_FOUND); -			mParent->setSiteIsAlive( alive ); -		} -	} -}; - -// this is global and not a class member to keep crud out of the header file -namespace { -	LLPointer< LLIamHere > gResponsePtr = 0; -}; -  BOOL LLFloaterTOS::postBuild()  {	  	childSetAction("Continue", onContinue, this); @@ -180,9 +129,6 @@ void LLFloaterTOS::setSiteIsAlive( bool alive )  LLFloaterTOS::~LLFloaterTOS()  { -	// tell the responder we're not here anymore -	if ( gResponsePtr ) -		gResponsePtr->setParent( 0 );  }  // virtual @@ -243,9 +189,10 @@ void LLFloaterTOS::handleMediaEvent(LLPluginClassMedia* /*self*/, EMediaEvent ev  		if(!mLoadingScreenLoaded)  		{  			mLoadingScreenLoaded = true; +            std::string url(getString("real_url")); -			gResponsePtr = LLIamHere::build( this ); -			LLHTTPClient::get( getString( "real_url" ), gResponsePtr ); +            LLCoros::instance().launch("LLFloaterTOS::testSiteIsAliveCoro", +                boost::bind(&LLFloaterTOS::testSiteIsAliveCoro, this, _1, url));  		}  		else if(mRealNavigateBegun)  		{ @@ -257,3 +204,26 @@ void LLFloaterTOS::handleMediaEvent(LLPluginClassMedia* /*self*/, EMediaEvent ev  	}  } +void LLFloaterTOS::testSiteIsAliveCoro(LLCoros::self& self, std::string url) +{ +    LLCore::HttpRequest::policy_t httpPolicy(LLCore::HttpRequest::DEFAULT_POLICY_ID); +    LLCoreHttpUtil::HttpCoroutineAdapter::ptr_t +        httpAdapter(new LLCoreHttpUtil::HttpCoroutineAdapter("genericPostCoro", httpPolicy)); +    LLCore::HttpRequest::ptr_t httpRequest(new LLCore::HttpRequest); +    LLCore::HttpOptions::ptr_t httpOpts = LLCore::HttpOptions::ptr_t(new LLCore::HttpOptions); + +    httpOpts->setWantHeaders(true); + +    LL_INFOS("HttpCoroutineAdapter", "genericPostCoro") << "Generic POST for " << url << LL_ENDL; + +    LLSD result = httpAdapter->getAndYield(self, httpRequest, url); + +    LLSD httpResults = result[LLCoreHttpUtil::HttpCoroutineAdapter::HTTP_RESULTS]; +    LLCore::HttpStatus status = LLCoreHttpUtil::HttpCoroutineAdapter::getStatusFromLLSD(httpResults); + +    // double not.   +    // First ! returns a boolean error status, second ! is true if success result. +    setSiteIsAlive(!!status);  +} + + diff --git a/indra/newview/llfloatertos.h b/indra/newview/llfloatertos.h index 47126d06a6..90bea2fe83 100755 --- a/indra/newview/llfloatertos.h +++ b/indra/newview/llfloatertos.h @@ -31,6 +31,8 @@  #include "llassetstorage.h"  #include "llmediactrl.h"  #include <boost/function.hpp> +#include "lleventcoro.h" +#include "llcoros.h"  class LLButton;  class LLRadioGroup; @@ -60,12 +62,15 @@ public:  	/*virtual*/ void handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event);  private: +    void testSiteIsAliveCoro(LLCoros::self& self, std::string url);  	std::string		mMessage;  	bool			mLoadingScreenLoaded;  	bool			mSiteAlive;  	bool			mRealNavigateBegun;  	std::string		mReplyPumpName; + +  };  #endif // LL_LLFLOATERTOS_H  | 
