📄 prov_dec.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 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 + -