diff options
Diffstat (limited to 'indra/llmessage')
| -rw-r--r-- | indra/llmessage/llassetstorage.cpp | 124 | ||||
| -rw-r--r-- | indra/llmessage/llassetstorage.h | 9 | ||||
| -rw-r--r-- | indra/llmessage/llhttpassetstorage.cpp | 8 | ||||
| -rw-r--r-- | indra/llmessage/llhttpassetstorage.h | 5 | 
4 files changed, 100 insertions, 46 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 83cfdf6110..e97b398ca7 100644 --- a/indra/llmessage/llassetstorage.h +++ b/indra/llmessage/llassetstorage.h @@ -218,6 +218,7 @@ class LLAssetStorage : public LLTempAssetStorage  public:  	// VFS member is public because static child methods need it :(  	LLVFS *mVFS; +	LLVFS *mStaticVFS;  	typedef void (*LLStoreAssetCallback)(const LLUUID &asset_id, void *user_data, S32 status, LLExtStat ext_status);  	enum ERequestType @@ -247,10 +248,10 @@ protected:  public:  	LLAssetStorage(LLMessageSystem *msg, LLXferManager *xfer, -				   LLVFS *vfs, const LLHost &upstream_host); +				   LLVFS *vfs, LLVFS *static_vfs, const LLHost &upstream_host);  	LLAssetStorage(LLMessageSystem *msg, LLXferManager *xfer, -				   LLVFS *vfs); +				   LLVFS *vfs, LLVFS *static_vfs);  	virtual ~LLAssetStorage();  	void setUpstream(const LLHost &upstream_host); @@ -315,6 +316,9 @@ public:  	void		markAssetToxic( const LLUUID& uuid );  protected: +	bool findInStaticVFSAndInvokeCallback(const LLUUID& uuid, LLAssetType::EType type, +										  LLGetAssetCallback callback, void *user_data); +  	virtual LLSD getPendingDetailsImpl(const request_list_t* requests,  	 				LLAssetType::EType asset_type,  	 				const std::string& detail_prefix) const; @@ -442,6 +446,7 @@ private:  	void _init(LLMessageSystem *msg,  			   LLXferManager *xfer,  			   LLVFS *vfs, +			   LLVFS *static_vfs,  			   const LLHost &upstream_host);  protected: diff --git a/indra/llmessage/llhttpassetstorage.cpp b/indra/llmessage/llhttpassetstorage.cpp index 1980735bbb..fc326790eb 100644 --- a/indra/llmessage/llhttpassetstorage.cpp +++ b/indra/llmessage/llhttpassetstorage.cpp @@ -401,21 +401,23 @@ size_t LLHTTPAssetRequest::curlCompressedUploadCallback(  LLHTTPAssetStorage::LLHTTPAssetStorage(LLMessageSystem *msg, LLXferManager *xfer, -									 LLVFS *vfs, const LLHost &upstream_host, +									 LLVFS *vfs, LLVFS *static_vfs,  +									 const LLHost &upstream_host,  									 const std::string& web_host,  									 const std::string& local_web_host,  									 const std::string& host_name) -	: LLAssetStorage(msg, xfer, vfs, upstream_host) +	: LLAssetStorage(msg, xfer, vfs, static_vfs, upstream_host)  {  	_init(web_host, local_web_host, host_name);  }  LLHTTPAssetStorage::LLHTTPAssetStorage(LLMessageSystem *msg, LLXferManager *xfer,  									   LLVFS *vfs, +									   LLVFS *static_vfs,  									   const std::string& web_host,  									   const std::string& local_web_host,  									   const std::string& host_name) -	: LLAssetStorage(msg, xfer, vfs) +	: LLAssetStorage(msg, xfer, vfs, static_vfs)  {  	_init(web_host, local_web_host, host_name);  } diff --git a/indra/llmessage/llhttpassetstorage.h b/indra/llmessage/llhttpassetstorage.h index 231437dad4..3e85e898e2 100644 --- a/indra/llmessage/llhttpassetstorage.h +++ b/indra/llmessage/llhttpassetstorage.h @@ -48,13 +48,14 @@ class LLHTTPAssetStorage : public LLAssetStorage  {  public:  	LLHTTPAssetStorage(LLMessageSystem *msg, LLXferManager *xfer, -					   LLVFS *vfs, const LLHost &upstream_host, +					   LLVFS *vfs, LLVFS *static_vfs, +					   const LLHost &upstream_host,  					   const std::string& web_host,  					   const std::string& local_web_host,  					   const std::string& host_name);  	LLHTTPAssetStorage(LLMessageSystem *msg, LLXferManager *xfer, -					   LLVFS *vfs, +					   LLVFS *vfs, LLVFS *static_vfs,  					   const std::string& web_host,  					   const std::string& local_web_host,  					   const std::string& host_name); | 
