summaryrefslogtreecommitdiff
path: root/indra/newview/llfloaterperms.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview/llfloaterperms.cpp')
-rwxr-xr-xindra/newview/llfloaterperms.cpp160
1 files changed, 68 insertions, 92 deletions
diff --git a/indra/newview/llfloaterperms.cpp b/indra/newview/llfloaterperms.cpp
index 04a818c2c0..b0b2770c6e 100755
--- a/indra/newview/llfloaterperms.cpp
+++ b/indra/newview/llfloaterperms.cpp
@@ -37,6 +37,9 @@
#include "llnotificationsutil.h"
#include "llsdserialize.h"
#include "llvoavatar.h"
+#include "llcorehttputil.h"
+#include "lleventfilter.h"
+#include "lleventcoro.h"
LLFloaterPerms::LLFloaterPerms(const LLSD& seed)
: LLFloater(seed)
@@ -167,120 +170,93 @@ void LLFloaterPermsDefault::onCommitCopy(const LLSD& user_data)
}
const int MAX_HTTP_RETRIES = 5;
-LLFloaterPermsRequester* LLFloaterPermsRequester::sPermsRequester = NULL;
+const float RETRY_TIMEOUT = 5.0;
-LLFloaterPermsRequester::LLFloaterPermsRequester(const std::string url, const LLSD report,
- int maxRetries)
- : mRetriesCount(0), mMaxRetries(maxRetries), mUrl(url), mReport(report)
-{}
-
-//static
-void LLFloaterPermsRequester::init(const std::string url, const LLSD report, int maxRetries)
-{
- if (sPermsRequester == NULL) {
- sPermsRequester = new LLFloaterPermsRequester(url, report, maxRetries);
- }
-}
-
-//static
-void LLFloaterPermsRequester::finalize()
+void LLFloaterPermsDefault::sendInitialPerms()
{
- if (sPermsRequester != NULL)
+ if(!mCapSent)
{
- delete sPermsRequester;
- sPermsRequester = NULL;
+ updateCap();
+ setCapSent(true);
}
}
-//static
-LLFloaterPermsRequester* LLFloaterPermsRequester::instance()
+void LLFloaterPermsDefault::updateCap()
{
- return sPermsRequester;
-}
+ std::string object_url = gAgent.getRegion()->getCapability("AgentPreferences");
-void LLFloaterPermsRequester::start()
-{
- ++mRetriesCount;
- LLHTTPClient::post(mUrl, mReport, new LLFloaterPermsResponder());
-}
-
-bool LLFloaterPermsRequester::retry()
-{
- if (++mRetriesCount < mMaxRetries)
+ if(!object_url.empty())
{
- LLHTTPClient::post(mUrl, mReport, new LLFloaterPermsResponder());
- return true;
+ LLCoros::instance().launch("LLFloaterPermsDefault::updateCapCoro",
+ boost::bind(&LLFloaterPermsDefault::updateCapCoro, object_url));
}
- return false;
+ else
+ {
+ LL_DEBUGS("ObjectPermissionsFloater") << "AgentPreferences cap not available." << LL_ENDL;
+ }
}
-void LLFloaterPermsResponder::httpFailure()
+/*static*/
+void LLFloaterPermsDefault::updateCapCoro(std::string url)
{
- if (!LLFloaterPermsRequester::instance() || !LLFloaterPermsRequester::instance()->retry())
- {
- LLFloaterPermsRequester::finalize();
- const std::string& reason = getReason();
- // Do not display the same error more than once in a row
- if (reason != sPreviousReason)
- {
- sPreviousReason = reason;
- LLSD args;
- args["REASON"] = reason;
- LLNotificationsUtil::add("DefaultObjectPermissions", args);
- }
- }
-}
+ int retryCount = 0;
+ std::string previousReason;
+ 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);
-void LLFloaterPermsResponder::httpSuccess()
-{
- //const LLSD& content = getContent();
- //dump_sequential_xml("perms_responder_result.xml", content);
+ LLSD postData = LLSD::emptyMap();
+ postData["default_object_perm_masks"]["Group"] =
+ (LLSD::Integer)LLFloaterPerms::getGroupPerms(sCategoryNames[CAT_OBJECTS]);
+ postData["default_object_perm_masks"]["Everyone"] =
+ (LLSD::Integer)LLFloaterPerms::getEveryonePerms(sCategoryNames[CAT_OBJECTS]);
+ postData["default_object_perm_masks"]["NextOwner"] =
+ (LLSD::Integer)LLFloaterPerms::getNextOwnerPerms(sCategoryNames[CAT_OBJECTS]);
- // Since we have had a successful POST call be sure to display the next error message
- // even if it is the same as a previous one.
- sPreviousReason = "";
- LL_INFOS("ObjectPermissionsFloater") << "Default permissions successfully sent to simulator" << LL_ENDL;
-}
+ {
+ LL_DEBUGS("ObjectPermissionsFloater") << "Sending default permissions to '"
+ << url << "'\n";
+ std::ostringstream sent_perms_log;
+ LLSDSerialize::toPrettyXML(postData, sent_perms_log);
+ LL_CONT << sent_perms_log.str() << LL_ENDL;
+ }
-std::string LLFloaterPermsResponder::sPreviousReason;
+ while (true)
+ {
+ ++retryCount;
+ LLSD result = httpAdapter->postAndSuspend(httpRequest, url, postData);
-void LLFloaterPermsDefault::sendInitialPerms()
-{
- if(!mCapSent)
- {
- updateCap();
- setCapSent(true);
- }
-}
+ LLSD httpResults = result[LLCoreHttpUtil::HttpCoroutineAdapter::HTTP_RESULTS];
+ LLCore::HttpStatus status = LLCoreHttpUtil::HttpCoroutineAdapter::getStatusFromLLSD(httpResults);
-void LLFloaterPermsDefault::updateCap()
-{
- std::string object_url = gAgent.getRegion()->getCapability("AgentPreferences");
+ if (!status)
+ {
+ const std::string& reason = status.toString();
+ // Do not display the same error more than once in a row
+ if (reason != previousReason)
+ {
+ previousReason = reason;
+ LLSD args;
+ args["REASON"] = reason;
+ LLNotificationsUtil::add("DefaultObjectPermissions", args);
+ }
- if(!object_url.empty())
- {
- LLSD report = LLSD::emptyMap();
- report["default_object_perm_masks"]["Group"] =
- (LLSD::Integer)LLFloaterPerms::getGroupPerms(sCategoryNames[CAT_OBJECTS]);
- report["default_object_perm_masks"]["Everyone"] =
- (LLSD::Integer)LLFloaterPerms::getEveryonePerms(sCategoryNames[CAT_OBJECTS]);
- report["default_object_perm_masks"]["NextOwner"] =
- (LLSD::Integer)LLFloaterPerms::getNextOwnerPerms(sCategoryNames[CAT_OBJECTS]);
+ llcoro::suspendUntilTimeout(RETRY_TIMEOUT);
+ if (retryCount < MAX_HTTP_RETRIES)
+ continue;
- {
- LL_DEBUGS("ObjectPermissionsFloater") << "Sending default permissions to '"
- << object_url << "'\n";
- std::ostringstream sent_perms_log;
- LLSDSerialize::toPrettyXML(report, sent_perms_log);
- LL_CONT << sent_perms_log.str() << LL_ENDL;
+ LL_WARNS("ObjectPermissionsFloater") << "Unable to send default permissions. Giving up for now." << LL_ENDL;
+ return;
}
- LLFloaterPermsRequester::init(object_url, report, MAX_HTTP_RETRIES);
- LLFloaterPermsRequester::instance()->start();
- }
- else
- {
- LL_DEBUGS("ObjectPermissionsFloater") << "AgentPreferences cap not available." << LL_ENDL;
+ break;
}
+
+ // Since we have had a successful POST call be sure to display the next error message
+ // even if it is the same as a previous one.
+ previousReason.clear();
+ LLFloaterPermsDefault::setCapSent(true);
+ LL_INFOS("ObjectPermissionsFloater") << "Default permissions successfully sent to simulator" << LL_ENDL;
}
void LLFloaterPermsDefault::setCapSent(bool cap_sent)