summaryrefslogtreecommitdiff
path: root/indra/newview/llcommandhandler.h
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview/llcommandhandler.h')
-rw-r--r--indra/newview/llcommandhandler.h85
1 files changed, 50 insertions, 35 deletions
diff --git a/indra/newview/llcommandhandler.h b/indra/newview/llcommandhandler.h
index 8fe40a9a02..1e65b6de23 100644
--- a/indra/newview/llcommandhandler.h
+++ b/indra/newview/llcommandhandler.h
@@ -4,74 +4,85 @@
* which manipulate user interface. For example, the command
* "agent (uuid) about" will open the UI for an avatar's profile.
*
- * $LicenseInfo:firstyear=2007&license=viewergpl$
- *
- * Copyright (c) 2007, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2007&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. Terms of
- * the GPL can be found in doc/GPL-license.txt in this distribution, or
- * online at http://secondlife.com/developers/opensource/gplv2
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * There are special exceptions to the terms and conditions of the GPL as
- * it is applied to this Source Code. View the full text of the exception
- * in the file doc/FLOSS-exception.txt in this software distribution, or
- * online at http://secondlife.com/developers/opensource/flossexception
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * By copying, modifying or distributing this software, you acknowledge
- * that you have read and understood your obligations described above,
- * and agree to abide by those obligations.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
#ifndef LLCOMMANDHANDLER_H
#define LLCOMMANDHANDLER_H
-/* To implement a command "foo" that takes one parameter,
- a UUID, do this:
+#include "llsd.h"
+
+/* Example: secondlife:///app/foo/<uuid>
+ Command "foo" that takes one parameter, a UUID.
class LLFooHandler : public LLCommandHandler
{
public:
// Inform the system you handle commands starting
- // with "foo" and they are not allowed from external web
- // browser links.
- LLFooHandler() : LLCommandHandler("foo", false) { }
+ // with "foo" and they are only allowed from
+ // "trusted" (pointed at Linden content) browsers
+ LLFooHandler() : LLCommandHandler("foo", UNTRUSTED_BLOCK) { }
// Your code here
- bool handle(const LLSD& tokens, const LLSD& queryMap)
+ bool handle(const LLSD& tokens, const LLSD& query_map,
+ LLMediaCtrl* web)
{
if (tokens.size() < 1) return false;
LLUUID id( tokens[0] );
- return doFoo(id);
+ return do_foo(id);
}
};
-// Creating the object registers with the dispatcher.
+// *NOTE: Creating the object registers with the dispatcher.
LLFooHandler gFooHandler;
+
*/
+class LLMediaCtrl;
+
class LLCommandHandler
{
public:
- LLCommandHandler(const char* command, bool allow_from_external_browser);
+ enum EUntrustedAccess
+ {
+ UNTRUSTED_ALLOW, // allow commands from untrusted browsers
+ UNTRUSTED_BLOCK, // ignore commands from untrusted browsers
+ UNTRUSTED_THROTTLE // allow untrusted, but only a few per min.
+ };
+
+ LLCommandHandler(const char* command, EUntrustedAccess untrusted_access);
// Automatically registers object to get called when
// command is executed. All commands can be processed
- // in links from LLWebBrowserCtrl, but some (like teleport)
+ // in links from LLMediaCtrl, but some (like teleport)
// should not be allowed from outside the app.
virtual ~LLCommandHandler();
virtual bool handle(const LLSD& params,
- const LLSD& queryMap) = 0;
- // Execute the command with a provided (possibly empty)
- // list of parameters.
+ const LLSD& query_map,
+ LLMediaCtrl* web) = 0;
+ // For URL secondlife:///app/foo/bar/baz?cat=1&dog=2
+ // @params - array of "bar", "baz", possibly empty
+ // @query_map - map of "cat" -> 1, "dog" -> 2, possibly empty
+ // @web - pointer to web browser control, possibly NULL
// Return true if you did something, false if the parameters
// are invalid or on error.
};
@@ -81,12 +92,16 @@ class LLCommandDispatcher
{
public:
static bool dispatch(const std::string& cmd,
- bool from_external_browser,
const LLSD& params,
- const LLSD& queryMap);
+ const LLSD& query_map,
+ LLMediaCtrl* web,
+ bool trusted_browser);
// Execute a command registered via the above mechanism,
// passing string parameters.
// Returns true if command was found and executed correctly.
+ /// Return an LLSD::Map of registered LLCommandHandlers and associated
+ /// info (e.g. EUntrustedAccess).
+ static LLSD enumerate();
};
#endif