diff options
Diffstat (limited to 'indra/llmessage')
| -rw-r--r-- | indra/llmessage/llassetstorage.cpp | 124 | ||||
| -rw-r--r-- | indra/llmessage/llassetstorage.h | 36 | ||||
| -rw-r--r-- | indra/llmessage/llhttpassetstorage.cpp | 36 | ||||
| -rw-r--r-- | indra/llmessage/llhttpassetstorage.h | 36 | 
4 files changed, 148 insertions, 84 deletions
diff --git a/indra/llmessage/llassetstorage.cpp b/indra/llmessage/llassetstorage.cpp index 02523467e8..20d71c6903 100644 --- a/indra/llmessage/llassetstorage.cpp +++ b/indra/llmessage/llassetstorage.cpp @@ -283,28 +283,30 @@ LLEstateAssetRequest::~LLEstateAssetRequest()  // TODO: rework tempfile handling? -LLAssetStorage::LLAssetStorage(LLMessageSystem *msg, LLXferManager *xfer, LLVFS *vfs, const LLHost &upstream_host) +LLAssetStorage::LLAssetStorage(LLMessageSystem *msg, LLXferManager *xfer, LLVFS *vfs, LLVFS *static_vfs, const LLHost &upstream_host)  { -	_init(msg, xfer, vfs, upstream_host); +	_init(msg, xfer, vfs, static_vfs, upstream_host);  }  LLAssetStorage::LLAssetStorage(LLMessageSystem *msg, LLXferManager *xfer, -							   LLVFS *vfs) +							   LLVFS *vfs, LLVFS *static_vfs)  { -	_init(msg, xfer, vfs, LLHost::invalid); +	_init(msg, xfer, vfs, static_vfs, LLHost::invalid);  }  void LLAssetStorage::_init(LLMessageSystem *msg,  						   LLXferManager *xfer,  						   LLVFS *vfs, +						   LLVFS *static_vfs,  						   const LLHost &upstream_host)  {  	mShutDown = FALSE;  	mMessageSys = msg;  	mXferManager = xfer;  	mVFS = vfs; +	mStaticVFS = static_vfs;  	setUpstream(upstream_host);  	msg->setHandlerFuncFast(_PREHASH_AssetUploadComplete, processUploadComplete, (void **)this); @@ -396,7 +398,33 @@ void LLAssetStorage::_cleanupRequests(BOOL all, S32 error)  BOOL LLAssetStorage::hasLocalAsset(const LLUUID &uuid, const LLAssetType::EType type)  { -	return mVFS->getExists(uuid, type); +	return mStaticVFS->getExists(uuid, type) || mVFS->getExists(uuid, type); +} + +bool LLAssetStorage::findInStaticVFSAndInvokeCallback(const LLUUID& uuid, LLAssetType::EType type, +													  LLGetAssetCallback callback, void *user_data) +{ +	BOOL exists = mStaticVFS->getExists(uuid, type); +	if (exists) +	{ +		LLVFile file(mStaticVFS, uuid, type); +		U32 size = exists ? file.getSize() : 0; +		if (size>0) +		{ +			// we've already got the file +			if (callback) +			{ +				callback(mStaticVFS, uuid, type, user_data, LL_ERR_NOERR, LL_EXSTAT_VFS_CACHED); +			} +			return true; +		} +		else +		{ +			llwarns << "Asset vfile " << uuid << ":" << type +					<< " found in static cache with bad size " << file.getSize() << ", ignoring" << llendl; +		} +	} +	return false;  }  /////////////////////////////////////////////////////////////////////////// @@ -404,7 +432,7 @@ BOOL LLAssetStorage::hasLocalAsset(const LLUUID &uuid, const LLAssetType::EType  ///////////////////////////////////////////////////////////////////////////  // IW - uuid is passed by value to avoid side effects, please don't re-add &     -void LLAssetStorage::getAssetData(const LLUUID uuid, LLAssetType::EType type, void (*callback)(LLVFS *vfs, const LLUUID&, LLAssetType::EType, void *, S32, LLExtStat), void *user_data, BOOL is_priority) +void LLAssetStorage::getAssetData(const LLUUID uuid, LLAssetType::EType type, LLGetAssetCallback callback, void *user_data, BOOL is_priority)  {  	lldebugs << "LLAssetStorage::getAssetData() - " << uuid << "," << LLAssetType::lookup(type) << llendl; @@ -425,11 +453,27 @@ void LLAssetStorage::getAssetData(const LLUUID uuid, LLAssetType::EType type, vo  		return;  	} +	// Try static VFS first. +	if (findInStaticVFSAndInvokeCallback(uuid,type,callback,user_data)) +	{ +		return; +	} +  	BOOL exists = mVFS->getExists(uuid, type);  	LLVFile file(mVFS, uuid, type);  	U32 size = exists ? file.getSize() : 0; -	if (size < 1) +	if (size > 0) +	{ +		// we've already got the file +		// theoretically, partial files w/o a pending request shouldn't happen +		// unless there's a weird error +		if (callback) +		{ +			callback(mVFS, uuid, type, user_data, LL_ERR_NOERR, LL_EXSTAT_VFS_CACHED); +		} +	} +	else  	{  		if (exists)  		{ @@ -468,18 +512,8 @@ void LLAssetStorage::getAssetData(const LLUUID uuid, LLAssetType::EType type, vo  		// This can be overridden by subclasses  		_queueDataRequest(uuid, type, callback, user_data, duplicate, is_priority);	  	} -	else -	{ -		// we've already got the file -		// theoretically, partial files w/o a pending request shouldn't happen -		// unless there's a weird error  		llinfos << "ASSET_TRACE asset " << uuid << " found in VFS" << llendl; -		if (callback) -		{ -			callback(mVFS, uuid, type, user_data, LL_ERR_NOERR, LL_EXSTAT_VFS_CACHED); -		} -	}  }  void LLAssetStorage::_queueDataRequest(const LLUUID& uuid, LLAssetType::EType atype, @@ -622,11 +656,27 @@ void LLAssetStorage::getEstateAsset(const LLHost &object_sim, const LLUUID &agen  		return;  	} +	// Try static VFS first. +	if (findInStaticVFSAndInvokeCallback(asset_id,atype,callback,user_data)) +	{ +		return; +	} +	  	BOOL exists = mVFS->getExists(asset_id, atype);  	LLVFile file(mVFS, asset_id, atype);  	U32 size = exists ? file.getSize() : 0; -	if (size < 1) +	if (size > 0) +	{ +		// we've already got the file +		// theoretically, partial files w/o a pending request shouldn't happen +		// unless there's a weird error +		if (callback) +		{ +			callback(mVFS, asset_id, atype, user_data, LL_ERR_NOERR, LL_EXSTAT_VFS_CACHED); +		} +	} +	else  	{  		if (exists)  		{ @@ -677,16 +727,6 @@ void LLAssetStorage::getEstateAsset(const LLHost &object_sim, const LLUUID &agen  			}  		}  	} -	else -	{ -		// we've already got the file -		// theoretically, partial files w/o a pending request shouldn't happen -		// unless there's a weird error -		if (callback) -		{ -			callback(mVFS, asset_id, atype, user_data, LL_ERR_NOERR, LL_EXSTAT_VFS_CACHED); -		} -	}  }  void LLAssetStorage::downloadEstateAssetCompleteCallback( @@ -753,6 +793,12 @@ void LLAssetStorage::getInvItemAsset(const LLHost &object_sim, const LLUUID &age  	if(asset_id.notNull())  	{ +		// Try static VFS first. +		if (findInStaticVFSAndInvokeCallback( asset_id, atype, callback, user_data)) +		{ +			return; +		} +  		exists = mVFS->getExists(asset_id, atype);  		LLVFile file(mVFS, asset_id, atype);  		size = exists ? file.getSize() : 0; @@ -764,7 +810,17 @@ void LLAssetStorage::getInvItemAsset(const LLHost &object_sim, const LLUUID &age  	} -	if (size < 1) +	if (size > 0) +	{ +		// we've already got the file +		// theoretically, partial files w/o a pending request shouldn't happen +		// unless there's a weird error +		if (callback) +		{ +			callback(mVFS, asset_id, atype, user_data, LL_ERR_NOERR, LL_EXSTAT_VFS_CACHED); +		} +	} +	else  	{  		// See whether we should talk to the object's originating sim,  		// or the upstream provider. @@ -813,16 +869,6 @@ void LLAssetStorage::getInvItemAsset(const LLHost &object_sim, const LLUUID &age  			}  		}  	} -	else -	{ -		// we've already got the file -		// theoretically, partial files w/o a pending request shouldn't happen -		// unless there's a weird error -		if (callback) -		{ -			callback(mVFS, asset_id, atype, user_data, LL_ERR_NOERR, LL_EXSTAT_VFS_CACHED); -		} -	}  } diff --git a/indra/llmessage/llassetstorage.h b/indra/llmessage/llassetstorage.h index 563ff9e077..e97b398ca7 100644 --- a/indra/llmessage/llassetstorage.h +++ b/indra/llmessage/llassetstorage.h @@ -3,25 +3,31 @@   * @brief definition of LLAssetStorage class which allows simple   * up/downloads of uuid,type asets   * - * $LicenseInfo:firstyear=2001&license=viewerlgpl$ - * Second Life Viewer Source Code - * Copyright (C) 2010, Linden Research, Inc. + * $LicenseInfo:firstyear=2001&license=viewergpl$ + *  + * Copyright (c) 2001-2009, Linden Research, Inc.   *  - * 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. + * 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://secondlifegrid.net/programs/open_source/licensing/gplv2   *  - * 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. + * 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://secondlifegrid.net/programs/open_source/licensing/flossexception   *  - * 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 + * 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.   *  - * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE.   * $/LicenseInfo$   */ diff --git a/indra/llmessage/llhttpassetstorage.cpp b/indra/llmessage/llhttpassetstorage.cpp index 9ea2ff4153..fc326790eb 100644 --- a/indra/llmessage/llhttpassetstorage.cpp +++ b/indra/llmessage/llhttpassetstorage.cpp @@ -3,25 +3,31 @@   * @brief Subclass capable of loading asset data to/from an external   * source. Currently, a web server accessed via curl   * - * $LicenseInfo:firstyear=2003&license=viewerlgpl$ - * Second Life Viewer Source Code - * Copyright (C) 2010, Linden Research, Inc. + * $LicenseInfo:firstyear=2003&license=viewergpl$ + *  + * Copyright (c) 2003-2009, Linden Research, Inc.   *  - * 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. + * 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://secondlifegrid.net/programs/open_source/licensing/gplv2   *  - * 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. + * 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://secondlifegrid.net/programs/open_source/licensing/flossexception   *  - * 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 + * 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.   *  - * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE.   * $/LicenseInfo$   */ diff --git a/indra/llmessage/llhttpassetstorage.h b/indra/llmessage/llhttpassetstorage.h index f743ccf0ac..3e85e898e2 100644 --- a/indra/llmessage/llhttpassetstorage.h +++ b/indra/llmessage/llhttpassetstorage.h @@ -2,25 +2,31 @@   * @file llhttpassetstorage.h   * @brief Class for loading asset data to/from an external source over http.   * - * $LicenseInfo:firstyear=2003&license=viewerlgpl$ - * Second Life Viewer Source Code - * Copyright (C) 2010, Linden Research, Inc. + * $LicenseInfo:firstyear=2003&license=viewergpl$ + *  + * Copyright (c) 2003-2009, Linden Research, Inc.   *  - * 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. + * 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://secondlifegrid.net/programs/open_source/licensing/gplv2   *  - * 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. + * 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://secondlifegrid.net/programs/open_source/licensing/flossexception   *  - * 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 + * 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.   *  - * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE.   * $/LicenseInfo$   */  | 
