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

📄 prov_dec.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 Implementation Project

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

	File: prov_elm.c

	Description:

	Functions for handling the different elements in the Provisioning speci-
	fications, i.e., WAP-PROVISIONINGDOC, CHARACTERISTIC and PARM.

	Author: Kent Olsson, AU-System Radio AB

	Revision history:
  	Date      Sign	Comment
  	010221    KEOL   First version

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

#include "prov_dec.h"
#include "WBXMLElm.h"
#include "WBXMLDef.h"

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

	Private functions 

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

/*========================================================================
	Set_Char_RootAttribute
==========================================================================*/
BOOL Set_Char_RootAttribute(pDECSTR pDecStr,pELEMENTTYPE pElement,UINT16 iAttribute)
{
	if ( pDecStr->parentElement->iType == Prov_Type_WapProvisioningDoc)
	{
		((PROV_PROVELEMENT *)(pElement))->iAttribute=iAttribute;
		return TRUE;
	}
	else
		return FALSE;
}

/*========================================================================
	Set_Char_PxlogicAttribute
==========================================================================*/
BOOL Set_Char_PxlogicAttribute(pDECSTR pDecStr,pELEMENTTYPE pElement,UINT16 iAttribute)
{
	pPROV_PROVELEMENT pParentElm = (PROV_PROVELEMENT *) pDecStr->parentElement;
	
	if ( pParentElm->iType == Prov_Type_Characteristic && pParentElm->iAttribute == PRVNG_PXLOGICAL)
	{
		((PROV_PROVELEMENT *)(pElement))->iAttribute=iAttribute;
		return TRUE;
	}
	else
		return FALSE;
}

/*========================================================================
	Set_Char_NapdefAttribute
==========================================================================*/
BOOL Set_Char_NapdefAttribute(pDECSTR pDecStr,pELEMENTTYPE pElement,UINT16 iAttribute)
{
	pPROV_PROVELEMENT pParentElm = (PROV_PROVELEMENT *) pDecStr->parentElement;
	
	if ( pParentElm->iType == Prov_Type_Characteristic && pParentElm->iAttribute == PRVNG_NAPDEF)
	{
		((PROV_PROVELEMENT *)(pElement))->iAttribute=iAttribute;
		return TRUE;
	}
	else
		return FALSE;
}

/*========================================================================
	Set_Char_PxAttribute
==========================================================================*/
BOOL Set_Char_PxAttribute(pDECSTR pDecStr,pELEMENTTYPE pElement,UINT16 iAttribute)
{
	pPROV_PROVELEMENT pParentElm = (PROV_PROVELEMENT *) pDecStr->parentElement;
	
	if ( pParentElm->iType == Prov_Type_Characteristic && 
		(pParentElm->iAttribute == PRVNG_PXLOGICAL || PRVNG_PXPHYSICAL))
	{
		((PROV_PROVELEMENT *)(pElement))->iAttribute=iAttribute;
		return TRUE;
	}
	else
		return FALSE;
}

/*========================================================================
	Parm_Set_Token_Value
==========================================================================*/
BOOL Parm_Set_Token_Value (pELEMENTTYPE pElement, pELEMENTTYPE *ppAttrVal, UINT16 Lower_Limit, UINT16 Upper_Limit)
{
	UINT16 iToken;
	pELEMENTTYPE pElementTemp = *ppAttrVal;

	if (pElementTemp->iType == Type_Token_Value){
		iToken = ((TOKENELEMENT *)(pElementTemp))->iTokenData;
		if (Lower_Limit <= iToken && iToken <= Upper_Limit){
				((PROV_PARMELEMENT *)(pElement))->iValue = iToken;
				DEALLOC(ppAttrVal);
				return TRUE;
		}
		else
			return FALSE;
	}	
	else
	{
		((PROV_PARMELEMENT *)(pElement))->iValue = 0;
		return FALSE;
	}
}			

/*========================================================================
	Parm_Set_String_Value
==========================================================================*/
BOOL Parm_Set_String_Value (pDECSTR pDecStr, pELEMENTTYPE pElement, pELEMENTTYPE* ppAttrVal)
{
	pELEMENTTYPE pElementTemp = *ppAttrVal;

	if (pElementTemp != NULL)
	{
		if (pElementTemp->iType == Type_Inline_Text)
		{
			if (((PROV_PARMELEMENT *)(pElement))->pwchValue == NULL)	
			{
				WCHAR *pchTempText=XML_ConvertToString(ppAttrVal,pDecStr);
				((PROV_PARMELEMENT *)(pElement))->pwchValue = pchTempText;
				return TRUE;
			}
		}
		else if (pElementTemp->iType==Type_Table_Text)
		{
			/* Get string from string table */
			WCHAR* pwchTempText = CreateStringCopy(WBXML_GetStrTabVal 
							(pDecStr,((pT_TEXTELEMENT)pElementTemp)->iTableRef));
			
			if (pwchTempText!=NULL)
			{
				((PROV_PARMELEMENT *)(pElement))->pwchValue = pwchTempText;
				return TRUE;
			}
			DEALLOC(&pwchTempText);
		}
	}

	return FALSE;
}			

/*========================================================================
	Check_Parm_Name_Ok
==========================================================================*/
BOOL Check_Parm_Name_Ok(pDECSTR pDecStr, pELEMENTTYPE pElement, UINT16 iAttribute, pELEMENTTYPE* ppAttrVal)
{
	BOOL fResult=TRUE;
	BOOL e2eSecFlag = FALSE;
	pELEMENTTYPE pElementTemp = *ppAttrVal;
	pPROV_PROVELEMENT pParentElm = (PROV_PROVELEMENT *) pDecStr->parentElement;

	if (pDecStr->iContentLevel == 1)
		e2eSecFlag = TRUE;
	
	if (pParentElm->iAttribute == PRVNG_PXLOGICAL)
	{
		switch (iAttribute)
		{
			case PRVNG_Parm_NAME:
			case PRVNG_Parm_PROXY_ID:
			case PRVNG_Parm_PROXY_PROVIDER_ID:
			case PRVNG_Parm_DOMAIN:
			case PRVNG_Parm_MASTER:
			case PRVNG_Parm_STARTPAGE:
			case PRVNG_Parm_BASAUTH_ID:
			case PRVNG_Parm_BASAUTH_PW:
			case PRVNG_Parm_WSP_VERSION:
			case PRVNG_Parm_PUSHENABLED:
				((PROV_PARMELEMENT *)(pElement))->iName=iAttribute;
				break;
			/* E2E security (navigation-doc) must not contain the TRUST parm */
			case PRVNG_Parm_TRUST:
				if (e2eSecFlag)
					{
						fResult = FALSE;
						break;
					}
				((PROV_PARMELEMENT *)(pElement))->iName=iAttribute;;
				break;
			default:
				/* Not valid attribute start token. */
				fResult=FALSE;
				break;
		}
	}
		
	else if (pParentElm->iAttribute == PRVNG_PXPHYSICAL)
	{
		switch (iAttribute)
		{
			case PRVNG_Parm_PHYSICAL_PROXY_ID:
			case PRVNG_Parm_DOMAIN:
			case PRVNG_Parm_PXADDR:
			case PRVNG_Parm_PXADDRTYPE:
			case PRVNG_Parm_WSP_VERSION:
			case PRVNG_Parm_PUSHENABLED:
			case PRVNG_Parm_TO_NAPID:
				((PROV_PARMELEMENT *)(pElement))->iName=iAttribute;
				break;
			default:
				/* Not valid attribute start token. */
				fResult=FALSE;
				break;
		}
	}
		
	else if (pParentElm->iAttribute == PRVNG_PORT)
	{
		switch (iAttribute)
		{
			case PRVNG_Parm_PORTNBR:
			case PRVNG_Parm_SERVICE:
				((PROV_PARMELEMENT *)(pElement))->iName=iAttribute;
				break;
			default:
			/* Not valid attribute start token. */
				fResult=FALSE;
				break;
		}
	}
		
	else if (pParentElm->iAttribute == PRVNG_VALIDITY)
	{
		switch (iAttribute)
		{
			case PRVNG_Parm_COUNTRY:
			case PRVNG_Parm_NETWORK:
			case PRVNG_Parm_SID:
			case PRVNG_Parm_SOC:
			case PRVNG_Parm_VALIDUNTIL:
				((PROV_PARMELEMENT *)(pElement))->iName=iAttribute;
				break;
			default:
			/* Not valid attribute start token. */
				fResult=FALSE;
				break;
		}
	}
	
	else if (pParentElm->iAttribute == PRVNG_NAPDEF)
	{
		switch (iAttribute)
		{
			case PRVNG_Parm_NAPID:
			case PRVNG_Parm_BEARER:
			case PRVNG_Parm_NAME:
			case PRVNG_Parm_INTERNET:
			case PRVNG_Parm_NAP_ADDRESS:
			case PRVNG_Parm_NAP_ADDRTYPE:
			case PRVNG_Parm_CALLTYPE:
			case PRVNG_Parm_LOCAL_ADDR:
			case PRVNG_Parm_LOCAL_ADDRTYPE:
			case PRVNG_Parm_LINKSPEED:
			case PRVNG_Parm_DNLINKSPEED:
			case PRVNG_Parm_LINGER:
			case PRVNG_Parm_DELIVERY_ERR_SDU:
			case PRVNG_Parm_DELIVERY_ORDER:
			case PRVNG_Parm_TRAFFIC_CLASS:
			case PRVNG_Parm_MAX_SDU_SIZE:
			case PRVNG_Parm_MAX_BITRATE_UPLINK:
			case PRVNG_Parm_MAX_BITRATE_DNLINK:
			case PRVNG_Parm_RESIDUAL_BER:
			case PRVNG_Parm_SDU_ERROR_RATIO:
			case PRVNG_Parm_TRAFFIC_HANDL_PRIO:
			case PRVNG_Parm_TRANSFER_DELAY:
			case PRVNG_Parm_GUARANTEED_BITRATE_UPLINK:
			case PRVNG_Parm_GUARANTEED_BITRATE_DNLINK:
				((PROV_PARMELEMENT *)(pElement))->iName=iAttribute;
				break;
			default:
				/* Not valid attribute start token. */
				fResult=FALSE;
				break;
		}
	}

	else if (pParentElm->iAttribute == PRVNG_BOOTSTRAP)
	{
		switch (iAttribute)
		{
			case PRVNG_Parm_COUNTRY:
			case PRVNG_Parm_NETWORK:
			case PRVNG_Parm_NAME:
			case PRVNG_Parm_PROVURL:
			case PRVNG_Parm_PROXY_ID:
			case PRVNG_Parm_CONTEXT_ALLOW:
				((PROV_PARMELEMENT *)(pElement))->iName=iAttribute;
				break;
			default:
				/* Not valid attribute start token. */
				fResult=FALSE;
				break;
		}
	}

	else if (pParentElm->iAttribute == PRVNG_VENDOR_CONFIG)
	{
		switch (iAttribute)
		{
			case PRVNG_Parm_NAME:
				((PROV_PARMELEMENT *)(pElement))->iName=iAttribute;
				break;
			case PRVNG_Parm_LITERAL:
				if (pElementTemp->iType == Type_Inline_Text)
				{
					if (((PROV_PARMELEMENT *)(pElement))->pwchName == NULL)	
					{
						WCHAR *pchTempText=XML_ConvertToString(ppAttrVal,pDecStr);
						((PROV_PARMELEMENT *)(pElement))->pwchName = pchTempText;
						((PROV_PARMELEMENT *)(pElement))->iName = PRVNG_Parm_LITERAL;
					}
				}	
				else
					fResult = FALSE;
				break;
			default:
				/* Not valid attribute start token. */
				fResult=FALSE;
				break;
		}
	}

	else if (pParentElm->iAttribute == PRVNG_CLIENTIDENTITY)
	{
		switch (iAttribute)
		{
			case PRVNG_Parm_CLIENT_ID:
				((PROV_PARMELEMENT *)(pElement))->iName=iAttribute;
				break;
			default:
				/* Not valid attribute start token. */
				fResult=FALSE;
				break;
		}
	}

	else if (pParentElm->iAttribute == PRVNG_PXAUTHINFO)
	{
		switch (iAttribute)
		{
			case PRVNG_Parm_PXAUTH_TYPE:
			case PRVNG_Parm_PXAUTH_ID:
			case PRVNG_Parm_PXAUTH_PW:
				((PROV_PARMELEMENT *)(pElement))->iName=iAttribute;
				break;
			default:
				/* Not valid attribute start token. */
				fResult=FALSE;
				break;
		}
	}

	else if (pParentElm->iAttribute == PRVNG_NAPAUTHINFO)
	{
		switch (iAttribute)
		{
			case PRVNG_name_AUTHTYPE:
			case PRVNG_Parm_AUTHNAME:
			case PRVNG_Parm_AUTHSECRET:
				((PROV_PARMELEMENT *)(pElement))->iName=iAttribute;
				break;
			default:
				/* Not valid attribute start token. */
				fResult=FALSE;
				break;
		}
	}

	else
		fResult = FALSE;
	return fResult;
}


/*========================================================================
	Set_Parm_Value
==========================================================================*/
BOOL Set_Parm_Value (pDECSTR pDecStr, pELEMENTTYPE pElement, pELEMENTTYPE* ppAttrVal)
{
	BOOL fResult=TRUE;
	pPROV_PARMELEMENT pParmElm = (PROV_PARMELEMENT *) pElement;
	pELEMENTTYPE pElementTemp = *ppAttrVal;
	
	switch (pParmElm->iName)
	{
		/* The following shall have one of the predefined Values */
		case PRVNG_Parm_NAP_ADDRTYPE:
		case PRVNG_Parm_PXADDRTYPE:
		case PRVNG_Parm_LOCAL_ADDRTYPE:
			fResult = Parm_Set_Token_Value(pElement, ppAttrVal, PRVNG_IPV4, PRVNG_MAN);
			break;
		case PRVNG_Parm_CALLTYPE:
			fResult = Parm_Set_Token_Value(pElement, ppAttrVal, PRVNG_ANALOG_MODEM, PRVNG_DIRECT_ASCNCHRONOUS_DATA_SERVICE);
			break;
		case PRVNG_name_AUTHTYPE:
		case PRVNG_Parm_PXAUTH_TYPE:
			fResult = Parm_Set_Token_Value(pElement, ppAttrVal, PRVNG_PAP, PRVNG_WTLS_SS);
			break;
		case PRVNG_Parm_BEARER:
			fResult = Parm_Set_Token_Value(pElement, ppAttrVal, PRVNG_GSM_USSD, PRVNG_MOBITEX_MPAK);
			break;
		case PRVNG_Parm_LINKSPEED:
		case PRVNG_Parm_DNLINKSPEED:

⌨️ 快捷键说明

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