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

📄 pushelm.c

📁 是一个手机功能的模拟程序
💻 C
📖 第 1 页 / 共 2 页
字号:
	if (pElement!=NULL) 
	{
		switch (pElement->iType) 
		{
		case Si_Type_si:
		case Si_Type_indication:
		case Si_Type_info:
		case Si_Type_item:

			/* Return content using generic function */
			return (XML_GetContent(pElement));
		}
	}
	return NULL;
}

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

			/* Return content using generic function */
			return (XML_GetContent(pElement));
		}
	}
	return NULL;
}

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

			/* Return content using generic function */
			return (XML_GetContent(pElement));
		}
	}
	return NULL;
}

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

	Push specific convertion functions for the attributes.

==========================================================================*/
BOOL PUSH_ConvertSiAction (WCHAR** ppwchAction, UINT8* piResult)
{
	WCHAR pwchPushAction_none[]={'s','i','g','n','a','l','-','n','o','n','e',0};
	WCHAR pwchPushAction_low[]={'s','i','g','n','a','l','-','l','o','w',0};
	WCHAR pwchPushAction_medium[]={'s','i','g','n','a','l','-','m','e','d','i','u','m',0};
	WCHAR pwchPushAction_high[]={'s','i','g','n','a','l','-','h','i','g','h',0};
	WCHAR pwchPushAction_delete[]={'d','e','l','e','t','e',0};
	BOOL fResult=FALSE;

	/* ASSERT: ppwchAction!=NULL
	*/

	if (*ppwchAction!=NULL)
	{
		if (COMPARESTRING(*ppwchAction,pwchPushAction_none)==0) 
		{
			*piResult=SI_SIGNAL_NONE;
			fResult=TRUE;
		} 
		else if (COMPARESTRING(*ppwchAction,pwchPushAction_low)==0) 
		{
			*piResult=SI_SIGNAL_LOW;
			fResult=TRUE;
		} 
		else if (COMPARESTRING(*ppwchAction,pwchPushAction_medium)==0) 
		{
			*piResult=SI_SIGNAL_MEDIUM;
			fResult=TRUE;
		} 
		else if (COMPARESTRING(*ppwchAction,pwchPushAction_high)==0) 
		{
			*piResult=SI_SIGNAL_HIGH;
			fResult=TRUE;
		} 
		else if (COMPARESTRING(*ppwchAction,pwchPushAction_delete)==0) 
		{
			*piResult=SI_DELETE;
			fResult=TRUE;
		}
	}

	DEALLOC(ppwchAction);
	return fResult;
}


BOOL PUSH_ConvertSlAction (WCHAR** ppwchAction, UINT8* piResult)
{
	WCHAR pwchPushAction_low[]={'e','x','e','c','u','t','e','-','l','o','w',0};
	WCHAR pwchPushAction_high[]={'e','x','e','c','u','t','e','-','h','i','g','h',0};
	WCHAR pwchPushAction_cache[]={'c','a','c','h','e',0};
	BOOL fResult=FALSE;

	/* ASSERT: ppwchAction!=NULL
	*/

	if (*ppwchAction!=NULL)
	{
		if (COMPARESTRING(*ppwchAction,pwchPushAction_low)==0) 
		{
			*piResult=SL_EXECUTE_LOW;
			fResult=TRUE;
		} 
		else if (COMPARESTRING(*ppwchAction,pwchPushAction_high)==0) 
		{
			*piResult=SL_EXECUTE_HIGH;
			fResult=TRUE;
		} 
		else if (COMPARESTRING(*ppwchAction,pwchPushAction_cache)==0) 
		{
			*piResult=SL_CACHE;
			fResult=TRUE;
		} 
	}

	DEALLOC(ppwchAction);
	return fResult;
}

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

	Attribute handling functions for the PUSH elements.

==========================================================================*/
static const UINT16 monthdays[12] = {
  0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334};

/*========================================================================
	Si_DateTime2Int
==========================================================================
Purpose: Convert from Date Time format to an UINT32.
Params:  pbDateTime, iDateTimeLen
Return:  UINT32 in seconds counting from 1/1 1970.
=========================================================================*/
UINT32
Si_DateTime2Int (BYTE *buf, UINT32 buflen)
{
  UINT16 century = 0;
  UINT16 year = 0;
  UINT16 month = 0;
  UINT16 day = 0;
  UINT16 hour = 0;
  UINT16 min = 0;
  UINT16 sec = 0;
  UINT8  leapyears;

  switch (buflen) {
  default:
    sec = (buf[6] >> 4) * 10 + (buf[6] & 0x0f);
  case 6:
    min = (buf[5] >> 4) * 10 + (buf[5] & 0x0f);
  case 5:
    hour = (buf[4] >> 4) * 10 + (buf[4] & 0x0f);
  case 4:
    day = (buf[3] >> 4) * 10 + (buf[3] & 0x0f);
  case 3:
    month = (buf[2] >> 4) * 10 + (buf[2] & 0x0f);
  case 2:    
    year = (buf[1] >> 4) * 10 + (buf[1] & 0x0f);
  case 1:
    century = (buf[0] >> 4) * 10 + (buf[0] & 0x0f);
    break;

  case 0:
    return 0;
  }

  year = century * 100 + year - 1970;

  leapyears = (year + 2) >> 2;
  if (((year & 0x03) == 0x02) && (month <= 2))
    leapyears--;

  return year * 31536000 +
    (leapyears + monthdays[month - 1] + day - 1) * 86400 +
    hour * 3600 + min * 60 + sec;
}

/*========================================================================
	Setting push attributes (attribute name)
==========================================================================
	The following functions sets the attribute values in the elements. If
	the attribute field and the attribute value is valid for the element 
	it is and stored and TRUE is returned. Otherwise, FALSE is returned. 

	NOTE! It is the callers responsibility to deallocate all parts NOT 
	used by the functions. For example, if ppAction is not used in the 
	function Si_SetAction, this memory must be deallocated.
	
	Input: Element (NOT NULL) and attribute value.						
	Output: BOOL
==========================================================================*/

/*========================================================================
	Service Indication Attribute Functions
==========================================================================*/
BOOL Si_SetAction (pDECSTR pDecStr, pELEMENTTYPE pElementObj, pELEMENTTYPE* ppAction, UINT8 iAction)
{
	if (pElementObj->iType==Si_Type_indication)
	{
		if (*ppAction!=NULL)
		{
			UINT8 iTempAction;

			/* Convert to string */
			WCHAR* pwchTemp=XML_ConvertToString(ppAction,pDecStr);

			/* Convert string to action */
			if (PUSH_ConvertSiAction (&pwchTemp,&iTempAction))
			{
				iAction=iTempAction;
			}
			else
			{
				/* Error in convertion */
				return FALSE;
			}
		}

		((SI_INDICATIONELEMENT *)(pElementObj))->iAction=iAction;
		return TRUE;
	}
	return FALSE;
}

BOOL Si_SetCreated (pDECSTR pDecStr, pELEMENTTYPE pElementObj, pELEMENTTYPE* ppCreated)
{
	/* %Datetime (OPAQUE data) */
	if ((*ppCreated!=NULL)&&(*ppCreated)->iType==Type_Opaque)
	{
		/* Convert to UINT32 */
		UINT32 iCreated=Si_DateTime2Int (((pXMLOPAQUE)
				(*ppCreated))->pbData,((pXMLOPAQUE)(*ppCreated))->iLength);

		/* Delete attribute */
		XML_DeleteElementList (ppCreated,pDecStr);

		if (pElementObj->iType==Si_Type_indication) 
		{
			((SI_INDICATIONELEMENT *)(pElementObj))->iCreated=iCreated;
			return TRUE;
		}
	}

	return FALSE;
}

BOOL Si_SetHref (pDECSTR pDecStr, pELEMENTTYPE pElementObj, pELEMENTTYPE* ppHref)
{
	if (pElementObj->iType==Si_Type_indication) 
	{
		if (((SI_INDICATIONELEMENT *)(pElementObj))->pbHref==NULL) 
		{
			BOOL fOverflow=FALSE;
			WCHAR *pchTempText=XML_ConvertToString(ppHref,pDecStr);

			if (pchTempText!=NULL)
			{
				/* Convert WCHAR to BYTE */
				((SI_INDICATIONELEMENT *)(pElementObj))->pbHref=
								(wip_wchar2byte(pchTempText,&fOverflow));

				DEALLOC(&pchTempText);

				return (!fOverflow);
			}
		}
	}
	return FALSE;
}

BOOL Si_SetExpires (pDECSTR pDecStr, pELEMENTTYPE pElementObj, pELEMENTTYPE* ppExpires)
{
	/* %Datetime (OPAQUE data) */
	if ((*ppExpires!=NULL)&&(*ppExpires)->iType==Type_Opaque)
	{
		/* Convert to UINT32 */
		UINT32 iExpires=Si_DateTime2Int (((pXMLOPAQUE)
				(*ppExpires))->pbData,((pXMLOPAQUE)(*ppExpires))->iLength);

		/* Delete attribute */
		XML_DeleteElementList (ppExpires,pDecStr);

		if (pElementObj->iType==Si_Type_indication) 
		{
			((SI_INDICATIONELEMENT *)(pElementObj))->iExpires=iExpires;
			return TRUE;
		}
	}

	return FALSE;
}

BOOL Si_SetSiId (pDECSTR pDecStr, pELEMENTTYPE pElementObj, pELEMENTTYPE* ppSiId)
{
	if (pElementObj->iType==Si_Type_indication) 
	{
		if (((SI_INDICATIONELEMENT *)(pElementObj))->pwchSiId==NULL) 
		{
			/* Get Text in WCHAR */
			((SI_INDICATIONELEMENT *)(pElementObj))
						->pwchSiId=XML_ConvertToString(ppSiId,pDecStr);
			return TRUE;
		}
	}

	return FALSE;
}

BOOL Si_SetClass (pDECSTR pDecStr, pELEMENTTYPE pElementObj, pELEMENTTYPE* ppClass)
{
	if (pElementObj->iType==Si_Type_item) 
	{
		if (((SI_ITEMELEMENT *)(pElementObj))->pwchClass==NULL) 
		{
			/* Get Text in WCHAR */
			((SI_ITEMELEMENT *)(pElementObj))
						->pwchClass=XML_ConvertToString(ppClass,pDecStr);
			return TRUE;
		}
	}

	return FALSE;
}



/*========================================================================
	Service Loading Attribute Functions
==========================================================================*/

BOOL Sl_SetAction (pDECSTR pDecStr, pELEMENTTYPE pElementObj, pELEMENTTYPE* ppAction, UINT8 iAction)
{
	if (pElementObj->iType==Sl_Type_sl)
	{
		if (*ppAction!=NULL)
		{
			UINT8 iTempAction;

			/* Convert to string */
			WCHAR* pwchTemp=XML_ConvertToString(ppAction,pDecStr);

			/* Convert string to action */
			if (PUSH_ConvertSlAction (&pwchTemp,&iTempAction))
			{
				iAction=iTempAction;
			}
			else
			{
				/* Error in convertion */
				return FALSE;
			}
		}

		((SL_SLELEMENT*)(pElementObj))->iAction=iAction;
		return TRUE;
	}
	return FALSE;
}

BOOL Sl_SetHref	(pDECSTR pDecStr, pELEMENTTYPE pElementObj, pELEMENTTYPE* ppHref)
{
	if (pElementObj->iType==Sl_Type_sl) 
	{
		if (((SL_SLELEMENT*)(pElementObj))->pbHref==NULL) 
		{
			BOOL fOverflow=FALSE;
			WCHAR *pchTempText=XML_ConvertToString(ppHref,pDecStr);

			if (pchTempText!=NULL)
			{
				/* Convert WCHAR to BYTE */
				((SL_SLELEMENT*)(pElementObj))->pbHref=
								(wip_wchar2byte(pchTempText,&fOverflow));

				DEALLOC(&pchTempText);

				return (!fOverflow);
			}
		}
	}
	return FALSE;
}



/*========================================================================
	Cache Operation Attribute Functions
==========================================================================*/

BOOL Co_SetURI (pDECSTR pDecStr, pELEMENTTYPE pElementObj, pELEMENTTYPE* ppURI)
{
	BOOL fOverflow=FALSE;
	BYTE* pbTemp=NULL;
	WCHAR *pchTempText=XML_ConvertToString(ppURI,pDecStr);

	if (pchTempText!=NULL)
	{
		/* Convert WCHAR to BYTE */
		pbTemp=wip_wchar2byte(pchTempText,&fOverflow);
		DEALLOC(&pchTempText);

		if ((pbTemp!=NULL)&&(!fOverflow))
		{
			/* Store in element */
			if (pElementObj->iType==Co_Type_invalidateobject) 
			{
				if (((CO_INVOBJELEMENT *)(pElementObj))->pbURI==NULL) 
				{
					((CO_INVOBJELEMENT *)(pElementObj))->pbURI=pbTemp;
					return TRUE;
				}
			}
			else if (pElementObj->iType==Co_Type_invalidateservice) 
			{
				if (((CO_INVSERVELEMENT *)(pElementObj))->pbURI==NULL) 
				{
					((CO_INVSERVELEMENT *)(pElementObj))->pbURI=pbTemp;
					return TRUE;
				}
			}

			DEALLOC(&pbTemp);
		}
	}
	return FALSE;
}

⌨️ 快捷键说明

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