466 lines
10 KiB
C++
466 lines
10 KiB
C++
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
|
*
|
|
* The contents of this file are subject to the Netscape Public License
|
|
* Version 1.0 (the "NPL"); you may not use this file except in
|
|
* compliance with the NPL. You may obtain a copy of the NPL at
|
|
* http://www.mozilla.org/NPL/
|
|
*
|
|
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
|
* for the specific language governing rights and limitations under the
|
|
* NPL.
|
|
*
|
|
* The Initial Developer of this code under the NPL is Netscape
|
|
* Communications Corporation. Portions created by Netscape are
|
|
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
|
* Reserved.
|
|
*/
|
|
|
|
/* nsCacheObject is the class that holds the basic definition of the
|
|
* cache object. A lot of changes are likely to occur before this
|
|
* goes on stage.
|
|
*
|
|
* -Gagan Saksena 09/15/98
|
|
*/
|
|
#ifndef nsCacheObject_h__
|
|
#define nsCacheObject_h__
|
|
|
|
// #if 0
|
|
#include "nsISupports.h"
|
|
// #endif
|
|
#include "pratom.h"
|
|
#include "nscore.h"
|
|
#include "nsIFactory.h"
|
|
#include "nsRepository.h"
|
|
#include "nsIComponentManager.h"
|
|
#include "nsIServiceManager.h"
|
|
#include "nsStream.h"
|
|
#include "prtypes.h"
|
|
#include "prinrval.h"
|
|
#include "nsICacheObject.h"
|
|
|
|
static const PRUint32 kCACHE_VERSION = 5;
|
|
|
|
// class nsStream;
|
|
|
|
class nsCacheObject : public nsICacheObject
|
|
{
|
|
|
|
public:
|
|
|
|
enum state_flags
|
|
{
|
|
INIT=0,
|
|
PARTIAL=1,
|
|
COMPLETE=2,
|
|
ABORTED=3,
|
|
EXPIRED=4,
|
|
CORRUPT=5
|
|
};
|
|
|
|
nsCacheObject();
|
|
nsCacheObject(const nsCacheObject& another);
|
|
nsCacheObject(const char* i_url);
|
|
|
|
virtual ~nsCacheObject();
|
|
|
|
NS_DECL_ISUPPORTS
|
|
|
|
|
|
/* public interface */
|
|
|
|
// NS_IMETHOD Create(const char * i_url, void * aObj) = 0 ;
|
|
|
|
// NS_IMETHOD Destroy(void * pThis) = 0 ;
|
|
|
|
NS_IMETHOD GetAddress(char ** Addr) const ;
|
|
NS_IMETHOD SetAddress(const char* i_Address) ;
|
|
|
|
NS_IMETHOD GetCharset(char ** CSet) const ;
|
|
NS_IMETHOD SetCharset(const char* i_CharSet) ;
|
|
|
|
NS_IMETHOD GetContentEncoding(char ** Encoding) const ;
|
|
NS_IMETHOD SetContentEncoding(const char* i_Encoding) ;
|
|
|
|
NS_IMETHOD GetContentLength(PRUint32 * CLeng) const ;
|
|
NS_IMETHOD SetContentLength(PRUint32 i_Len) ;
|
|
|
|
NS_IMETHOD GetContentType(char ** CType) const ;
|
|
NS_IMETHOD SetContentType(const char* i_Type) ;
|
|
|
|
NS_IMETHOD GetEtag(char ** Etag) const ;
|
|
NS_IMETHOD SetEtag(const char* i_Etag) ;
|
|
|
|
NS_IMETHOD GetExpires(PRIntervalTime * iTime) const ;
|
|
NS_IMETHOD SetExpires(const PRIntervalTime i_Time) ;
|
|
|
|
NS_IMETHOD GetFilename(char ** Filename) const ;
|
|
NS_IMETHOD SetFilename(const char* i_Filename) ;
|
|
|
|
NS_IMETHOD GetIsCompleted(PRBool *bComplete) const ;
|
|
NS_IMETHOD SetIsCompleted(PRBool bComplete) ;
|
|
|
|
NS_IMETHOD GetLastAccessed(PRIntervalTime * iTime) const ;
|
|
|
|
NS_IMETHOD GetLastModified(PRIntervalTime * iTime) const ;
|
|
NS_IMETHOD SetLastModified(const PRIntervalTime i_Time) ;
|
|
|
|
NS_IMETHOD GetModuleIndex(PRInt16 * m_index) const ;
|
|
NS_IMETHOD SetModuleIndex(const PRUint16 m_index) ;
|
|
|
|
NS_IMETHOD GetPageServicesURL(char ** o_url) const ;
|
|
NS_IMETHOD SetPageServicesURL(const char* i_Url) ;
|
|
|
|
NS_IMETHOD GetPostData(char ** pData) const ;
|
|
NS_IMETHOD SetPostData(const char* i_PostData, const PRUint32 i_Len) ;
|
|
|
|
NS_IMETHOD GetPostDataLen(PRUint32 * dLeng) const ;
|
|
|
|
/* Accessor functions for the size of the cache object */
|
|
NS_IMETHOD GetSize(PRUint32 * pSize) const ;
|
|
NS_IMETHOD SetSize(const PRUint32 i_Size) ;
|
|
|
|
/* Accessor functions for the state of the cache object.
|
|
* Some states are changed internally.
|
|
*/
|
|
NS_IMETHOD GetState(PRUint32 * pState) const ;
|
|
NS_IMETHOD SetState(const PRUint32 i_State) ;
|
|
|
|
NS_IMETHOD GetStream(nsStream ** pStream) const ;
|
|
// NS_IMETHOD MakeStream(void) ;
|
|
|
|
NS_IMETHOD Hits(PRUint32 * pHits) const ;
|
|
|
|
NS_IMETHOD IsExpired(PRBool *bGet) const ;
|
|
|
|
NS_IMETHOD IsPartial(PRBool *bGet) const ;
|
|
|
|
NS_IMETHOD Read(char* o_Destination, PRUint32 i_Len,
|
|
PRUint32 * pLeng) ;
|
|
|
|
/* Reset the streams/state, read/write locks, etc. */
|
|
NS_IMETHOD Reset(void) ;
|
|
|
|
// NS_IMETHOD Synch(void) = 0 ;
|
|
|
|
NS_IMETHOD Write(const char* i_buffer, const PRUint32 i_length,
|
|
PRUint32 * oLeng) ;
|
|
|
|
// NS_IMETHOD InitUrl(const char* i_url) ;
|
|
|
|
/* Read and write info about this cache object */
|
|
NS_IMETHOD GetInfo(void** o_info) ;
|
|
NS_IMETHOD SetInfo(void* i_info /*, PRUint32 len */);
|
|
|
|
NS_IMETHOD GetInfoSize(PRUint32* o_size) ;
|
|
|
|
/* end public interface */
|
|
|
|
const char* Trace() const;
|
|
|
|
protected:
|
|
|
|
void Init();
|
|
|
|
char* m_Charset;
|
|
char* m_ContentEncoding;
|
|
PRUint32 m_ContentLength;
|
|
char* m_ContentType;
|
|
char* m_Etag;
|
|
PRIntervalTime m_Expires;
|
|
char* m_Filename;
|
|
PRUint32 m_State;
|
|
PRUint16 m_Hits;
|
|
PRUint32 m_info_size;
|
|
PRBool m_bIsCompleted; /* Marked when the stream complete is called */
|
|
PRIntervalTime m_LastAccessed, m_LastModified;
|
|
PRInt16 m_Module;
|
|
void* m_pInfo;
|
|
char* m_PageServicesURL;
|
|
char* m_PostData;
|
|
PRUint32 m_PostDataLen;
|
|
PRUint32 m_Size;
|
|
nsStream* m_pStream;
|
|
char* m_URL;
|
|
|
|
private:
|
|
nsCacheObject& operator=(const nsCacheObject& x);
|
|
};
|
|
|
|
inline NS_IMETHODIMP
|
|
nsCacheObject::GetAddress(char ** Addr) const
|
|
{
|
|
if (!Addr)
|
|
return NS_ERROR_NULL_POINTER;
|
|
|
|
*Addr = m_URL ;
|
|
return NS_OK ;
|
|
};
|
|
|
|
inline NS_IMETHODIMP
|
|
nsCacheObject::GetCharset(char ** CSet) const
|
|
{
|
|
if (!CSet)
|
|
return NS_ERROR_NULL_POINTER;
|
|
|
|
*CSet = m_Charset;
|
|
return NS_OK ;
|
|
}
|
|
|
|
inline NS_IMETHODIMP
|
|
nsCacheObject::GetContentEncoding(char ** Encoding) const
|
|
{
|
|
if (!Encoding)
|
|
return NS_ERROR_NULL_POINTER;
|
|
|
|
*Encoding=m_ContentEncoding;
|
|
return NS_OK ;
|
|
}
|
|
|
|
inline NS_IMETHODIMP
|
|
nsCacheObject::GetContentLength(PRUint32 * CLeng) const
|
|
{
|
|
if (!CLeng)
|
|
return NS_ERROR_NULL_POINTER;
|
|
|
|
*CLeng = m_ContentLength;
|
|
return NS_OK ;
|
|
};
|
|
|
|
inline NS_IMETHODIMP
|
|
nsCacheObject::SetContentLength(PRUint32 i_Size)
|
|
{
|
|
m_ContentLength = i_Size;
|
|
return NS_OK ;
|
|
};
|
|
|
|
inline NS_IMETHODIMP
|
|
nsCacheObject::GetContentType(char ** CType) const
|
|
{
|
|
if (!CType)
|
|
return NS_ERROR_NULL_POINTER;
|
|
|
|
*CType = m_ContentType;
|
|
return NS_OK ;
|
|
};
|
|
|
|
inline NS_IMETHODIMP
|
|
nsCacheObject::GetEtag(char ** Etag) const
|
|
{
|
|
if (!Etag)
|
|
return NS_ERROR_NULL_POINTER;
|
|
|
|
*Etag = m_Etag;
|
|
return NS_OK ;
|
|
};
|
|
|
|
inline NS_IMETHODIMP
|
|
nsCacheObject::GetExpires(PRIntervalTime * iTime) const
|
|
{
|
|
if (!iTime)
|
|
return NS_ERROR_NULL_POINTER;
|
|
|
|
*iTime = m_Expires;
|
|
return NS_OK ;
|
|
};
|
|
|
|
inline NS_IMETHODIMP
|
|
nsCacheObject::SetExpires(PRIntervalTime i_Expires)
|
|
{
|
|
m_Expires = i_Expires;
|
|
return NS_OK ;
|
|
};
|
|
|
|
inline NS_IMETHODIMP
|
|
nsCacheObject::GetFilename(char ** Filename) const
|
|
{
|
|
if (!Filename)
|
|
return NS_ERROR_NULL_POINTER;
|
|
|
|
*Filename = m_Filename;
|
|
return NS_OK ;
|
|
}
|
|
|
|
inline NS_IMETHODIMP
|
|
nsCacheObject::Hits(PRUint32 * pHits) const
|
|
{
|
|
*pHits = m_Hits;
|
|
return NS_OK ;
|
|
};
|
|
|
|
inline NS_IMETHODIMP
|
|
nsCacheObject::GetIsCompleted(PRBool *bComplete) const
|
|
{
|
|
if (m_bIsCompleted) {
|
|
*bComplete=PR_TRUE ;
|
|
}
|
|
else {
|
|
*bComplete=PR_FALSE ;
|
|
}
|
|
return NS_OK ;
|
|
}
|
|
|
|
inline NS_IMETHODIMP
|
|
nsCacheObject::SetIsCompleted(PRBool bComplete)
|
|
{
|
|
m_bIsCompleted = bComplete;
|
|
return NS_OK ;
|
|
}
|
|
|
|
inline NS_IMETHODIMP
|
|
nsCacheObject::IsExpired(PRBool *bExpired) const
|
|
{
|
|
if (nsCacheObject::EXPIRED==m_State)
|
|
*bExpired = PR_TRUE ;
|
|
|
|
if (m_Expires <= PR_IntervalNow()) {
|
|
((nsCacheObject*)this)->m_State = nsCacheObject::EXPIRED;
|
|
*bExpired = PR_TRUE ;
|
|
}
|
|
else
|
|
*bExpired = PR_FALSE ;
|
|
|
|
return NS_OK ;
|
|
|
|
};
|
|
|
|
inline NS_IMETHODIMP
|
|
nsCacheObject::IsPartial(PRBool *bPartial) const
|
|
{
|
|
if (m_ContentLength != m_Size)
|
|
*bPartial = PR_TRUE ;
|
|
else
|
|
*bPartial = PR_FALSE ;
|
|
|
|
return NS_OK ;
|
|
};
|
|
|
|
inline NS_IMETHODIMP
|
|
nsCacheObject::GetLastAccessed(PRIntervalTime * iTime) const
|
|
{
|
|
*iTime = m_LastAccessed;
|
|
return NS_OK ;
|
|
};
|
|
|
|
inline NS_IMETHODIMP
|
|
nsCacheObject::GetLastModified(PRIntervalTime * iTime) const
|
|
{
|
|
*iTime = m_LastModified;
|
|
return NS_OK ;
|
|
};
|
|
|
|
inline NS_IMETHODIMP
|
|
nsCacheObject::SetLastModified(const PRIntervalTime i_LastModified)
|
|
{
|
|
m_LastModified = i_LastModified;
|
|
return NS_OK ;
|
|
};
|
|
|
|
inline NS_IMETHODIMP
|
|
nsCacheObject::GetModuleIndex(PRInt16 * m_index) const
|
|
{
|
|
*m_index = m_Module;
|
|
return NS_OK ;
|
|
};
|
|
|
|
inline NS_IMETHODIMP
|
|
nsCacheObject::SetModuleIndex(PRUint16 m_index)
|
|
{
|
|
m_Module = m_index;
|
|
return NS_OK ;
|
|
};
|
|
|
|
inline NS_IMETHODIMP
|
|
nsCacheObject::GetPageServicesURL(char ** o_url) const
|
|
{
|
|
if (!o_url)
|
|
return NS_ERROR_NULL_POINTER;
|
|
|
|
*o_url = m_PageServicesURL;
|
|
return NS_OK ;
|
|
}
|
|
|
|
inline NS_IMETHODIMP
|
|
nsCacheObject::GetPostData(char ** pData) const
|
|
{
|
|
if (!pData)
|
|
return NS_ERROR_NULL_POINTER;
|
|
|
|
*pData = m_PostData;
|
|
return NS_OK ;
|
|
}
|
|
|
|
inline NS_IMETHODIMP
|
|
nsCacheObject::GetPostDataLen(PRUint32 * dLeng) const
|
|
{
|
|
if (!dLeng)
|
|
return NS_ERROR_NULL_POINTER;
|
|
|
|
*dLeng = m_PostDataLen;
|
|
return NS_OK ;
|
|
}
|
|
|
|
inline NS_IMETHODIMP
|
|
nsCacheObject::GetSize(PRUint32 * pSize) const
|
|
{
|
|
if (!pSize)
|
|
return NS_ERROR_NULL_POINTER;
|
|
|
|
*pSize = m_Size;
|
|
return NS_OK ;
|
|
};
|
|
|
|
inline NS_IMETHODIMP
|
|
nsCacheObject::SetSize(PRUint32 i_Size)
|
|
{
|
|
m_Size = i_Size;
|
|
return NS_OK ;
|
|
};
|
|
|
|
inline NS_IMETHODIMP
|
|
nsCacheObject::GetState(PRUint32 * pState) const
|
|
{
|
|
if (!pState)
|
|
return NS_ERROR_NULL_POINTER;
|
|
|
|
*pState = m_State;
|
|
return NS_OK ;
|
|
};
|
|
|
|
inline NS_IMETHODIMP
|
|
nsCacheObject::SetState(PRUint32 i_State)
|
|
{
|
|
m_State = i_State;
|
|
return NS_OK ;
|
|
};
|
|
|
|
inline NS_IMETHODIMP
|
|
nsCacheObject::GetStream(nsStream** pStream) const
|
|
{
|
|
if (!pStream)
|
|
return NS_ERROR_NULL_POINTER;
|
|
|
|
*pStream = m_pStream;
|
|
return NS_OK ;
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////
|
|
// nsCacheObjectFactory
|
|
|
|
class nsCacheObjectFactory : public nsIFactory {
|
|
public:
|
|
nsCacheObjectFactory();
|
|
virtual ~nsCacheObjectFactory();
|
|
|
|
NS_DECL_ISUPPORTS
|
|
|
|
NS_IMETHOD CreateInstance(nsISupports *aOuter,
|
|
const nsIID &aIID,
|
|
void **aResult);
|
|
|
|
NS_IMETHOD LockFactory(PRBool aLock);
|
|
|
|
} ;
|
|
|
|
#endif // nsCacheObject_h__
|