From 38d6d37f2d982fa959e9e8a4a3f7e1ccfad7b5d4 Mon Sep 17 00:00:00 2001
From: Jacek Antonelli
Date: Fri, 15 Aug 2008 23:44:46 -0500
Subject: Second Life viewer sources 1.13.2.12

---
 linden/indra/newview/llurlwhitelist.cpp | 222 ++++++++++++++++++++++++++++++++
 1 file changed, 222 insertions(+)
 create mode 100644 linden/indra/newview/llurlwhitelist.cpp

(limited to 'linden/indra/newview/llurlwhitelist.cpp')

diff --git a/linden/indra/newview/llurlwhitelist.cpp b/linden/indra/newview/llurlwhitelist.cpp
new file mode 100644
index 0000000..8992146
--- /dev/null
+++ b/linden/indra/newview/llurlwhitelist.cpp
@@ -0,0 +1,222 @@
+/** 
+ * @file llurlwhitelist.cpp
+ * @author Callum Prentice
+ * @brief maintains a "white list" of acceptable URLS that are stored on disk
+ *
+ * Copyright (c) 2005-2007, Linden Research, Inc.
+ * 
+ * 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
+ * 
+ * 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
+ * 
+ * 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.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ */
+
+#include "llviewerprecompiledheaders.h"
+#include "llurlwhitelist.h"
+
+#include <iostream>
+#include <fstream>
+
+LLUrlWhiteList* LLUrlWhiteList::sInstance = 0;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+LLUrlWhiteList::LLUrlWhiteList () :
+	mLoaded ( false ),
+	mFilename ( "url_whitelist.ini" ),
+	mUrlList ( 0 ),
+	mUrlListIter ( 0 )
+{
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+LLUrlWhiteList::~LLUrlWhiteList ()
+{
+}
+
+///////////////////////////////////////////////////////////////////////////////
+
+//static
+void LLUrlWhiteList::initClass ()
+{
+    if ( ! sInstance )
+	{
+        sInstance = new LLUrlWhiteList ();
+	}
+}
+
+//static
+void LLUrlWhiteList::cleanupClass ()
+{
+	delete sInstance;
+	sInstance = NULL;
+}
+
+LLUrlWhiteList* LLUrlWhiteList::getInstance ()
+{
+	return sInstance;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+bool LLUrlWhiteList::load ()
+{
+	// don't load if we're already loaded
+	if ( mLoaded )
+		return ( true );
+
+	// remove current entries before we load over them
+	clear ();
+
+	// build filename for each user
+	LLString resolvedFilename = gDirUtilp->getExpandedFilename ( LL_PATH_PER_SL_ACCOUNT, mFilename.c_str () );
+
+	// open a file for reading
+	llifstream file ( resolvedFilename.c_str () );
+	if ( file.is_open () )
+	{
+		// add each line in the file to the list
+		std::string line;
+		while ( std::getline ( file, line ) )
+		{
+			addItem ( line, false );
+		};
+
+		file.close ();
+
+		// flag as loaded
+		mLoaded = true;
+
+		return true;
+	};
+
+	return false;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+bool LLUrlWhiteList::save ()
+{
+	// build filename for each user
+	LLString resolvedFilename = gDirUtilp->getExpandedFilename ( LL_PATH_PER_SL_ACCOUNT, mFilename.c_str () );
+
+	// open a file for writing
+	llofstream file ( resolvedFilename.c_str () );
+	if ( file.is_open () )
+	{
+		// for each entry we have
+		for ( LLStringListIter iter = mUrlList.begin (); iter != mUrlList.end (); ++iter )
+		{
+			file << ( *iter ) << std::endl;
+		};
+
+		file.close ();
+
+		return true;
+	};
+
+	return false;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+bool LLUrlWhiteList::clear ()
+{
+	mUrlList.clear ();
+
+	// invalidate iterator since we changed the contents 
+	mUrlListIter = mUrlList.end ();
+
+	return true;
+}
+
+LLString url_cleanup(LLString pattern)
+{
+	LLString::trim(pattern);
+	S32 length = pattern.length();
+	S32 position = 0;
+	std::string::reverse_iterator it = pattern.rbegin();
+	++it;	// skip last char, might be '/'
+	++position;
+	for (; it < pattern.rend(); ++it)
+	{
+		char c = *it;
+		if (c == '/')
+		{
+			// found second to last '/'
+			S32 desired_length = length - position;
+			LLString::truncate(pattern, desired_length);
+			break;
+		}
+		++position;
+	}
+	return pattern;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+bool LLUrlWhiteList::addItem ( const LLString& itemIn, bool saveAfterAdd )
+{
+	LLString item = url_cleanup(itemIn);
+	
+	mUrlList.insert ( mUrlList.end (), item );
+
+	// use this when all you want to do is call addItem ( ... ) where necessary
+	if ( saveAfterAdd )
+		save ();
+
+	return true;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+bool LLUrlWhiteList::getFirst ( LLString& valueOut )
+{
+	if ( mUrlList.size () == 0 )
+		return false;
+
+	mUrlListIter = mUrlList.begin ();
+
+	valueOut = * ( mUrlListIter );
+
+	++mUrlListIter;
+
+	return true;	
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+bool LLUrlWhiteList::getNext ( LLString& valueOut )
+{
+	if ( mUrlListIter == mUrlList.end () )
+		return false;
+
+	valueOut = * ( mUrlListIter );
+
+	++mUrlListIter;
+
+	return true;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+bool LLUrlWhiteList::containsMatch ( const LLString& patternIn )
+{
+	return false;
+}
-- 
cgit v1.1