diff options
Diffstat (limited to 'indra/newview/llcommandhandler.h')
-rw-r--r-- | indra/newview/llcommandhandler.h | 85 |
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 |