summaryrefslogtreecommitdiff
path: root/indra
diff options
context:
space:
mode:
authorLynx Linden <lynx@lindenlab.com>2010-02-25 09:53:38 +0000
committerLynx Linden <lynx@lindenlab.com>2010-02-25 09:53:38 +0000
commit0faa004aa11cca9b60dfe8c176a0f407e880d809 (patch)
tree0a152749ba45108a70414fdd20d80399773478dd /indra
parentf71098a4065896bd69fcfe55c83dd3a562a7ac64 (diff)
EXT-5480: Support secondlife:///app/region SLapps.
This is defined to work exactly like the classic secondlife://{REGION} Slurl. However, the later syntax cannot support spaces in the region name because spaces (and %20 chars) are illegal in the hostname of an http URL. Some browsers let you get away with this, but some do not (such as Qt's Webkit). Hence we have decided to introduce the newer secondlife:///app/region alternative.
Diffstat (limited to 'indra')
-rw-r--r--indra/newview/llviewerregion.cpp41
1 files changed, 41 insertions, 0 deletions
diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp
index 77d2d493bd..ce627494c8 100644
--- a/indra/newview/llviewerregion.cpp
+++ b/indra/newview/llviewerregion.cpp
@@ -49,6 +49,7 @@
#include "llagent.h"
#include "llcallingcard.h"
#include "llcaphttpsender.h"
+#include "llcommandhandler.h"
#include "lldir.h"
#include "lleventpoll.h"
#include "llfloatergodtools.h"
@@ -58,6 +59,7 @@
#include "llsdutil.h"
#include "llstartup.h"
#include "lltrans.h"
+#include "llurldispatcher.h"
#include "llviewerobjectlist.h"
#include "llviewerparceloverlay.h"
#include "llvlmanager.h"
@@ -82,6 +84,45 @@ extern BOOL gNoRender;
const F32 WATER_TEXTURE_SCALE = 8.f; // Number of times to repeat the water texture across a region
const S16 MAX_MAP_DIST = 10;
+// support for secondlife:///app/region/{REGION} SLapps
+// N.B. this is defined to work exactly like the classic secondlife://{REGION}
+// However, the later syntax cannot support spaces in the region name because
+// spaces (and %20 chars) are illegal in the hostname of an http URL. Some
+// browsers let you get away with this, but some do not (such as Qt's Webkit).
+// Hence we introduced the newer secondlife:///app/region alternative.
+class LLRegionHandler : public LLCommandHandler
+{
+public:
+ // requests will be throttled from a non-trusted browser
+ LLRegionHandler() : LLCommandHandler("region", UNTRUSTED_THROTTLE) {}
+
+ bool handle(const LLSD& params, const LLSD& query_map, LLMediaCtrl* web)
+ {
+ // make sure that we at least have a region name
+ int num_params = params.size();
+ if (num_params < 1)
+ {
+ return false;
+ }
+
+ // build a secondlife://{PLACE} SLurl from this SLapp
+ std::string url = "secondlife://";
+ for (int i = 0; i < num_params; i++)
+ {
+ if (i > 0)
+ {
+ url += "/";
+ }
+ url += params[i].asString();
+ }
+
+ // Process the SLapp as if it was a secondlife://{PLACE} SLurl
+ LLURLDispatcher::dispatch(url, web, true);
+ return true;
+ }
+};
+LLRegionHandler gRegionHandler;
+
class BaseCapabilitiesComplete : public LLHTTPClient::Responder
{
LOG_CLASS(BaseCapabilitiesComplete);