📄 pushelm.c
字号:
/*
* 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 + -