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

📄 pushelm.c

📁 是一个手机功能的模拟程序
💻 C
📖 第 1 页 / 共 2 页
字号:
/*
 * Copyright (C) Ericsson Mobile Communications AB, 2000.
 * Licensed to AU-System AB.
 * All rights reserved.
 *
 * This software is covered by the license agreement between
 * the end user and AU-System AB, and may be used and copied
 * only in accordance with the terms of the said agreement.
 *
 * Neither Ericsson Mobile Communications AB nor AU-System AB
 * assumes any responsibility or liability for any errors or inaccuracies in
 * this software, or any consequential, incidental or indirect damage arising
 * out of the use of the Generic WAP Client software.
 */
/*========================================================================

	WAP PUSH Implementation Project

==========================================================================

	File: pushelm.c

	Description:

	Functions for handling the different elements in the PUSH speci-
	fications, i.e., Service Indication (SI), Service Loading (SL), and
	Cache Operation (CO)

	Author: Jens Pommer, AU-System Radio AB

	Revision history:
  	Date      Sign	Comment
  	991112    JPR   First version
	991116	  JPR	Attribute functions added

	000131	  JPR	Changes to support generic WBXML-decoder
	000207	  JPR	Corrections
	000208	  JPR	Function Si_DateTime2Int added
	000211	  JPR	Correction in functions Si_SetCreated and Si_SetExpires
	010119	  NKE	Added Si_ValidContent, Sl_ValidContent and Co_ValidContent
					for the new decoder in wbxmldec.c. Removed corresponding 
					AddContent.

==========================================================================*/

#include "pushelm.h"
#include "pushdef.h"
#include "xml_conv.h"

/*========================================================================

	Private functions 

=========================================================================*/

/*========================================================================
	SI_CreateSI
==========================================================================*/
pSI_SIELEMENT Si_CreateSI (void) 
{
	pSI_SIELEMENT pElement=NEWSTRUCT(SI_SIELEMENT);

	if (pElement!=NULL) 
	{
		pElement->iType=Si_Type_si;
		pElement->pNextElement=NULL;

		pElement->pContent=NULL;
	}
	return pElement;
}

/*========================================================================
	SI_CreateINDICATION
==========================================================================*/
pSI_INDICATIONELEMENT Si_CreateINDICATION (void) 
{
	pSI_INDICATIONELEMENT pElement=NEWSTRUCT(SI_INDICATIONELEMENT);

	if (pElement!=NULL) 
	{
		pElement->iType=Si_Type_indication;
		pElement->pNextElement=NULL;

		pElement->iAction=SI_SIGNAL_MEDIUM;
		pElement->iCreated=0;
		pElement->iExpires=0;
		pElement->pbHref=NULL;
		pElement->pContent=NULL;
		pElement->pwchSiId=NULL;
	}
	return pElement;
}

/*========================================================================
	SI_CreateINFO
==========================================================================*/
pSI_INFOELEMENT Si_CreateINFO (void) 
{
	pSI_INFOELEMENT pElement=NEWSTRUCT(SI_INFOELEMENT);

	if (pElement!=NULL) 
	{
		pElement->iType=Si_Type_info;
		pElement->pNextElement=NULL;

		pElement->pContent=NULL;
	}
	return pElement;
}

/*========================================================================
	SI_CreateITEM
==========================================================================*/
pSI_ITEMELEMENT Si_CreateITEM (void) 
{
	pSI_ITEMELEMENT pElement=NEWSTRUCT(SI_ITEMELEMENT);

	if (pElement!=NULL) 
	{
		pElement->iType=Si_Type_item;
		pElement->pNextElement=NULL;

		pElement->pContent=NULL;
		pElement->pwchClass=NULL;
	}
	return pElement;
}


/*========================================================================
	SL_CreateSL
==========================================================================*/
pSL_SLELEMENT Sl_CreateSL (void) 
{
	pSL_SLELEMENT pElement=NEWSTRUCT(SL_SLELEMENT);

	if (pElement!=NULL) 
	{
		pElement->iType=Sl_Type_sl;
		pElement->pNextElement=NULL;

		pElement->iAction=SL_EXECUTE_LOW;
		pElement->pbHref=NULL;
	}
	return pElement;
}


/*========================================================================
	Co_CreateCO
==========================================================================*/
pCO_COELEMENT Co_CreateCO (void) 
{
	pCO_COELEMENT pElement=NEWSTRUCT(CO_COELEMENT);

	if (pElement!=NULL) 
	{
		pElement->iType=Co_Type_co;
		pElement->pNextElement=NULL;

		pElement->pContent=NULL;
	}
	return pElement;
}


/*========================================================================
	Co_CreateINVOBJ
==========================================================================*/
pCO_INVOBJELEMENT Co_CreateINVOBJ (void) 
{
	pCO_INVOBJELEMENT pElement=NEWSTRUCT(CO_INVOBJELEMENT);

	if (pElement!=NULL) 
	{
		pElement->iType=Co_Type_invalidateobject;
		pElement->pNextElement=NULL;

		pElement->pbURI=NULL;
	}
	return pElement;
}


/*========================================================================
	Co_CreateINVSERV
==========================================================================*/
pCO_INVSERVELEMENT Co_CreateINVSERV (void) 
{
	pCO_INVSERVELEMENT pElement=NEWSTRUCT(CO_INVSERVELEMENT);

	if (pElement!=NULL) 
	{
		pElement->iType=Co_Type_invalidateservice;
		pElement->pNextElement=NULL;

		pElement->pbURI=NULL;
	}
	return pElement;
}





/*========================================================================

	Functions for handling the Service Indication (SI), Service Loading 
	(SL), and Cache Operation (CO) elements.

=========================================================================*/

/*========================================================================
	Si_CreateElement
	Sl_CreateElement
	Co_CreateElement
==========================================================================*/
pELEMENTTYPE Si_CreateElement (pDECSTR pDecStr, UINT16 iType)
{
	void *pvNewElm=NULL;

	pDecStr=pDecStr;

	/* Create specific element */
	switch (iType)
	{
	case Si_Type_si:
		pvNewElm=Si_CreateSI();
		break;
	case Si_Type_indication:
		pvNewElm=Si_CreateINDICATION();
		break;
	case Si_Type_info:
		pvNewElm=Si_CreateINFO();
		break;
	case Si_Type_item:
		pvNewElm=Si_CreateITEM();
		break;
	}

	return pvNewElm;
}

pELEMENTTYPE Sl_CreateElement (pDECSTR pDecStr, UINT16 iType)
{
	void *pvNewElm=NULL;

	pDecStr=pDecStr;
	switch (iType) 
	{
	case Sl_Type_sl:
		pvNewElm=Sl_CreateSL();
		break;
	}

	return pvNewElm;
}

pELEMENTTYPE Co_CreateElement (pDECSTR pDecStr, UINT16 iType)
{
	void *pvNewElm=NULL;

	pDecStr=pDecStr;
	switch (iType) 
	{
	case Co_Type_co:
		pvNewElm=Co_CreateCO();
		break;
	case Co_Type_invalidateobject:
		pvNewElm=Co_CreateINVOBJ();
		break;
	case Co_Type_invalidateservice:
		pvNewElm=Co_CreateINVSERV();
		break;
	}

	return pvNewElm;
}


/*========================================================================
	Si_DeleteElement
	Sl_DeleteElement
	Co_DeleteElement
==========================================================================*/
void Si_DeleteElement (pDECSTR pDecStr, pELEMENTTYPE* ppElement)
{
	if (ppElement==NULL)
	{
		return;
	}

	if (*ppElement!=NULL) 
	{
		switch ((*ppElement)->iType) 
		{
		case Si_Type_si:
			XML_DeleteElementList(&(((SI_SIELEMENT*)(*ppElement))->pContent),pDecStr);
			break;
		case Si_Type_indication:
			DEALLOC(&(((SI_INDICATIONELEMENT*)(*ppElement))->pbHref));
			DEALLOC(&(((SI_INDICATIONELEMENT*)(*ppElement))->pwchSiId));
			XML_DeleteElementList(&(((SI_INDICATIONELEMENT*)(*ppElement))->pContent),pDecStr);
			break;
		case Si_Type_info:
			XML_DeleteElementList(&(((SI_INFOELEMENT *)(*ppElement))->pContent),pDecStr);
			break;
		case Si_Type_item:
			DEALLOC(&(((SI_ITEMELEMENT *)(*ppElement))->pwchClass));
			XML_DeleteElementList(&(((SI_ITEMELEMENT *)(*ppElement))->pContent),pDecStr);
			break;
		}

		/* Delete element */
		DEALLOC(ppElement);		
	}
}

void Sl_DeleteElement (pDECSTR pDecStr, pELEMENTTYPE* ppElement)
{
	pDecStr=pDecStr;
	if (ppElement==NULL)
	{
		return;
	}

	if (*ppElement!=NULL) 
	{
		switch ((*ppElement)->iType) 
		{
		case Sl_Type_sl:
			DEALLOC(&(((SL_SLELEMENT *)(*ppElement))->pbHref));
			break;
		}

		/* Delete element */
		DEALLOC(ppElement);		
	}
}
	
void Co_DeleteElement (pDECSTR pDecStr, pELEMENTTYPE* ppElement)
{
	if (ppElement==NULL)
	{
		return;
	}

	if (*ppElement!=NULL) 
	{
		switch ((*ppElement)->iType) 
		{
		case Co_Type_co:
			XML_DeleteElementList(&(((CO_COELEMENT *)(*ppElement))->pContent),pDecStr);
			break;
		case Co_Type_invalidateobject:
			DEALLOC(&(((CO_INVOBJELEMENT *)(*ppElement))->pbURI));
			break;
		case Co_Type_invalidateservice:
			DEALLOC(&(((CO_INVSERVELEMENT *)(*ppElement))->pbURI));
			break;
		}

		/* Delete element */
		DEALLOC(ppElement);		
	}
}


/*========================================================================
	Si_ValidContent
	Sl_ValidContent
	Co_ValidContent
==========================================================================*/
BOOL Si_ValidContent (pDECSTR pDecStr, pELEMENTTYPE pElement)
{
	pDecStr=pDecStr;

	if (pElement!=NULL) 
	{
		switch (pElement->iType) 
		{
		case Si_Type_si:
		case Si_Type_indication:
		case Si_Type_info:
		case Si_Type_item:

			return TRUE;
		}
	}

	return FALSE;
}


BOOL Sl_ValidContent (pDECSTR pDecStr, pELEMENTTYPE pElement)
{
	pDecStr=pDecStr;

	if (pElement!=NULL) 
	{
		switch (pElement->iType) 
		{
		case Sl_Type_sl:

			return TRUE;
		}
	}

	return FALSE;

}


BOOL Co_ValidContent (pDECSTR pDecStr, pELEMENTTYPE pElement)
{
	pDecStr=pDecStr;

	if (pElement!=NULL) 
	{
		switch (pElement->iType) 
		{
		case Co_Type_co:

			return TRUE;
		}
	}

	return FALSE;

}


/*========================================================================
	Si_GetContent
	Sl_GetContent
	Co_GetContent
==========================================================================*/
pELEMENTTYPE Si_GetContent (pELEMENTTYPE pElement)
{

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -