📄 chpars.c
字号:
pELEMENTTYPE pChannel=NULL;
if (pDecStr!=NULL)
{
pChannel=pDecStr->pAppSpec;
/* Check type */
if ((pChannel!=NULL)&&(pChannel->iType==Ch_Type_channel))
{
/* Get copy of EventID */
pwchCopy=CreateStringCopy (
((CH_CHANNELELEMENT*)(pChannel))->pwchEventID);
/* return copy */
return pwchCopy;
}
}
return NULL;
}
/*========================================================================
Ch_Getchannelid
==========================================================================
Purpose: The function returns a copy of the channelid in the channel.
NULL is returned if no channelid is present. The string MUST be
deleted after it is used.
======================================================================== */
WCHAR* Ch_Getchannelid (pDECSTR pDecStr)
{
WCHAR *pwchCopy=NULL;
pELEMENTTYPE pChannel=NULL;
if (pDecStr!=NULL)
{
pChannel=pDecStr->pAppSpec;
/* Check type */
if ((pChannel!=NULL)&&(pChannel->iType==Ch_Type_channel))
{
/* Get copy of EventID */
pwchCopy=CreateStringCopy (
((CH_CHANNELELEMENT*)(pChannel))->pwchChannelID);
/* return copy */
return pwchCopy;
}
}
return NULL;
}
/*========================================================================
Ch_GetMaxSpace
==========================================================================*/
INT32 Ch_GetMaxSpace (pDECSTR pDecStr)
{
pELEMENTTYPE pChannel=NULL;
if (pDecStr!=NULL)
{
pChannel=pDecStr->pAppSpec;
/* Check type */
if ((pChannel!=NULL)&&(pChannel->iType==Ch_Type_channel))
{
/* return MaxSpace */
return (((CH_CHANNELELEMENT*)(pChannel))->iMaxSpace);
}
}
return 0;
}
/*========================================================================
Ch_CheckIfChExpired
==========================================================================
Purpose: Check if the content has expired.
returns: TRUE if content has expired or header corrupt. FALSE otherwise.
======================================================================== */
BOOL Ch_CheckIfChExpired (HEADERDEF* pContentHeader, UINT32 iTime)
{
/* Field_Expires */
pHEADERELEMENT pExpires=NULL;
BOOL fError=FALSE;
UINT32 iExpires=0;
if (pContentHeader!=NULL)
{
/* Find Expires header */
pExpires=WSP_GetHeaderWK (1, Field_Expires, pContentHeader->pHeadList);
if (pExpires!=NULL)
{
/* Get expires value */
iExpires=WSP_GetExpires (pExpires,&fError);
if (fError)
{
/* Expires value error -> expired */
return TRUE;
}
if (iTime>=iExpires)
{
/* Content expired */
return TRUE;
}
}
}
return FALSE;
}
/*========================================================================
Ch_GetNbrOfResources
==========================================================================*/
UINT32 Ch_GetNbrOfResources (pDECSTR pDecStr)
{
UINT32 iCount=0;
pELEMENTTYPE pContent=NULL;
pELEMENTTYPE pChannel=NULL;
if (pDecStr!=NULL)
{
pChannel=pDecStr->pAppSpec;
/* Check type */
if ((pChannel!=NULL)&&(pChannel->iType==Ch_Type_channel))
{
/* Get channel content */
pContent=Ch_GetContent (pChannel);
/* Count all resources */
while (pContent!=NULL)
{
if (pContent->iType==Ch_Type_resource)
{
iCount++;
}
/* Get next content */
pContent=pContent->pNextElement;
}
}
}
return iCount;
}
/*========================================================================
Ch_GetFirstResource
==========================================================================*/
pELEMENTTYPE Ch_GetFirstResource (pDECSTR pDecStr)
{
pELEMENTTYPE pChannel=NULL;
pELEMENTTYPE pContent=NULL;
if (pDecStr!=NULL)
{
pChannel=pDecStr->pAppSpec;
/* Check type */
if ((pChannel!=NULL)&&(pChannel->iType==Ch_Type_channel))
{
/* Get channel content */
pContent=Ch_GetContent (pChannel);
/* Find first resource */
while (pContent!=NULL)
{
if (pContent->iType==Ch_Type_resource)
{
return pContent;
}
/* Get next content */
pContent=pContent->pNextElement;
}
}
}
return NULL;
}
/*========================================================================
Ch_GetNextResource
==========================================================================*/
pELEMENTTYPE Ch_GetNextResource (pELEMENTTYPE pResource)
{
if (pResource!=NULL)
{
/* Check type */
if (pResource->iType==Ch_Type_resource)
{
/* Get next content */
pResource=pResource->pNextElement;
/* Find next resource */
while (pResource!=NULL)
{
if (pResource->iType==Ch_Type_resource)
{
return pResource;
}
/* Get next content */
pResource=pResource->pNextElement;
}
}
}
return NULL;
}
/*========================================================================
Ch_GetResourcehref
==========================================================================*/
BYTE* Ch_GetResourcehref (pELEMENTTYPE pResource)
{
BYTE *pbCopy=NULL;
if (pResource!=NULL)
{
/* Check type */
if (pResource->iType==Ch_Type_resource)
{
if (((CH_RESOURCEELEMENT*)(pResource))->pbHref!=NULL)
{
/* Get copy of resource url */
pbCopy=B_CopyByteString (
((CH_RESOURCEELEMENT*)(pResource))->pbHref,-1);
/* return copy */
return pbCopy;
}
}
}
return NULL;
}
/*========================================================================
Ch_GetResourceLastMod
==========================================================================
Purpose: Returns zero if no lastMod is specified.
======================================================================== */
UINT32 Ch_GetResourceLastMod (pELEMENTTYPE pResource)
{
if (pResource!=NULL)
{
/* Check type */
if (pResource->iType==Ch_Type_resource)
{
/* Get last mod */
return ((CH_RESOURCEELEMENT *)(pResource))->iLastMod;
}
}
return 0;
}
/*========================================================================
Ch_GetResourceMd5
==========================================================================*/
WCHAR* Ch_GetResourceMd5 (pELEMENTTYPE pResource)
{
WCHAR *pwchCopy=NULL;
if (pResource!=NULL)
{
/* Check type */
if (pResource->iType==Ch_Type_resource)
{
/* Get copy of EventID */
pwchCopy=CreateStringCopy (
((CH_RESOURCEELEMENT *)(pResource))->pwchMd5);
/* return copy */
return pwchCopy;
}
}
return NULL;
}
/*========================================================================
Ch_GetResourceEtag
==========================================================================*/
BYTE* Ch_GetResourceEtag (pELEMENTTYPE pResource)
{
BYTE *pbCopy=NULL;
if (pResource!=NULL)
{
/* Check type */
if (pResource->iType==Ch_Type_resource)
{
/* Get copy of Etag */
if (((CH_RESOURCEELEMENT *)(pResource))->pbEtag!=NULL)
{
pbCopy=B_CopyByteString (((CH_RESOURCEELEMENT *)(pResource))->pbEtag,-1);
}
}
}
/* return copy */
return pbCopy;
}
/*========================================================================
Ch_IsResourceFresh
======================================================================== */
BOOL Ch_IsResourceFresh (pHEADERELEMENT pHeaderList, UINT32 iTime,
BOOL* pfCheckDone)
{
pHEADERELEMENT pLastMod=NULL;
BOOL fError=FALSE;
UINT32 iLastMod=0;
*pfCheckDone=FALSE;
/* Find WSP-header */
pLastMod=WSP_GetHeaderWK (1, Field_Last_Modified, pHeaderList);
if (pLastMod!=NULL)
{
/* Get last mod value */
iLastMod=WSP_GetLastModified (pLastMod,&fError);
if (!fError)
{
*pfCheckDone=TRUE;
/* If the stored resource (pHeaderList) is older than the
resource to be fetched (iTime), the resource must be
updated. */
if ( iTime <= iLastMod )
{
/* Resource is OK to keep */
return TRUE;
}
}
}
/* The resource must be fetched again */
return FALSE;
}
/*========================================================================
Ch_CheckResourceEtag
======================================================================== */
BOOL Ch_CheckResourceEtag (pHEADERELEMENT pHeaderList, BYTE *pbEtag,
BOOL* pfCheckDone)
{
pHEADERELEMENT pEtag=NULL;
BYTE* pbHeadEtag=NULL;
*pfCheckDone=FALSE;
/* Find Etag header */
pEtag=WSP_GetHeaderWK (1, Field_Etag, pHeaderList);
if (pEtag!=NULL)
{
/* Get etag value */
pbHeadEtag=WSP_GetEtag (pEtag);
if ((pbHeadEtag!=NULL)&&(pbEtag!=NULL))
{
*pfCheckDone=TRUE;
/* Compare */
if (B_COMPARESTRING(pbEtag,pbHeadEtag)==0)
{
/* OK. return TRUE */
DEALLOC(&pbEtag);
return TRUE;
}
}
}
return FALSE;
}
/*========================================================================
Ch_CheckResourceMd5
======================================================================== */
BOOL Ch_CheckResourceMd5 (pHEADERELEMENT pHeaderList, WCHAR* pchMd5,
BOOL* pfCheckDone)
{
pHEADERELEMENT pMd5=NULL;
BYTE* pbHeadMd5=NULL;
BYTE* pbConvertedMd5=NULL;
BOOL fError=FALSE;
INT16 iNbrBytes=0;
*pfCheckDone=FALSE;
/* Find Md5 header */
pMd5=WSP_GetHeaderWK (1, Field_Content_MD5, pHeaderList);
if (pMd5!=NULL)
{
/* Get header md5-value */
pbHeadMd5 = WSP_GetMd5 ( pMd5, &fError );
if ( (pbHeadMd5!=NULL) && (pchMd5!=NULL) && (!fError) )
{
*pfCheckDone=TRUE;
/* Convert from base-64 to bytes */
pbConvertedMd5 = WSP_ConvertBase64ToByte (pchMd5,&iNbrBytes);
/* Compare */
if ( memcmp ( pbConvertedMd5 , pbHeadMd5, (16)*sizeof(BYTE) ) == 0 )
{
DEALLOC(&pbConvertedMd5);
return TRUE;
}
DEALLOC(&pbConvertedMd5);
}
}
return FALSE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -