⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chpars.c

📁 是一个手机功能的模拟程序
💻 C
📖 第 1 页 / 共 2 页
字号:
	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 + -