📄 prov_dec.c
字号:
if (pElementTemp->iType == Type_Token_Value)
fResult = Parm_Set_Token_Value(pElement, ppAttrVal, PRVNG_AUTOBAUDING, PRVNG_AUTOBAUDING);
else if (pElementTemp->iType == Type_Inline_Text)
fResult = Parm_Set_String_Value (pDecStr, pElement, ppAttrVal);
break;
case PRVNG_Parm_SERVICE:
fResult = Parm_Set_Token_Value(pElement, ppAttrVal, PRVNG_CL_WSP, PRVNG_CO_SEC_WTA);
break;
/* The following shall have a string value */
case PRVNG_Parm_LITERAL:
case PRVNG_Parm_NAME:
case PRVNG_Parm_NAP_ADDRESS:
case PRVNG_Parm_VALIDUNTIL:
case PRVNG_Parm_AUTHNAME:
case PRVNG_Parm_AUTHSECRET:
case PRVNG_Parm_LINGER:
case PRVNG_Parm_NAPID:
case PRVNG_Parm_COUNTRY:
case PRVNG_Parm_NETWORK:
case PRVNG_Parm_INTERNET:
case PRVNG_Parm_PROXY_ID:
case PRVNG_Parm_PROXY_PROVIDER_ID:
case PRVNG_Parm_DOMAIN:
case PRVNG_Parm_PROVURL:
case PRVNG_Parm_PXAUTH_ID:
case PRVNG_Parm_PXAUTH_PW:
case PRVNG_Parm_STARTPAGE:
case PRVNG_Parm_BASAUTH_ID:
case PRVNG_Parm_BASAUTH_PW:
case PRVNG_Parm_PUSHENABLED:
case PRVNG_Parm_PXADDR:
case PRVNG_Parm_TO_NAPID:
case PRVNG_Parm_PORTNBR:
case PRVNG_Parm_LOCAL_ADDR:
case PRVNG_Parm_CONTEXT_ALLOW:
case PRVNG_Parm_TRUST:
case PRVNG_Parm_MASTER:
case PRVNG_Parm_SID:
case PRVNG_Parm_SOC:
case PRVNG_Parm_WSP_VERSION:
case PRVNG_Parm_PHYSICAL_PROXY_ID:
case PRVNG_Parm_CLIENT_ID:
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:
fResult = Parm_Set_String_Value (pDecStr, pElement, ppAttrVal);
break;
default:
/* Not valid attribute start token. */
fResult=FALSE;
break;
}
return fResult;
}
/*========================================================================
Prov_CreatePROVELM
==========================================================================*/
pPROV_PROVELEMENT Prov_CreatePROVELM (UINT16 iType)
{
pPROV_PROVELEMENT pElement=NEWSTRUCT(PROV_PROVELEMENT);
if (pElement!=NULL)
{
pElement->iType=iType;
pElement->pNextElement=NULL;
pElement->pContent=NULL;
pElement->iAttribute = 0;
}
return pElement;
}
/*========================================================================
Prov_CreatePARM
==========================================================================*/
pPROV_PARMELEMENT Prov_CreatePARM (void)
{
pPROV_PARMELEMENT pElement=NEWSTRUCT(PROV_PARMELEMENT);
if (pElement!=NULL)
{
pElement->iType=Prov_Type_Parm;
pElement->pNextElement=NULL;
pElement->iName = 0;
pElement->pwchName = NULL;
pElement->iValue = 0;
pElement->pwchValue = NULL;
}
return pElement;
}
/*========================================================================
DTD functions and other external functions needed for handling
the WAP-PROVISIONINGDOC, CHARACTERISTIC and PARM elements.
=========================================================================*/
/*========================================================================
Prov_CreateElement
==========================================================================*/
pELEMENTTYPE Prov_CreateElement (pDECSTR pDecStr, UINT16 iType)
{
void *pvNewElm=NULL;
pDecStr=pDecStr;
/* Create specific element */
switch (iType)
{
case Prov_Type_WapProvisioningDoc:
pvNewElm=Prov_CreatePROVELM(iType);
break;
case Prov_Type_Characteristic:
pvNewElm=Prov_CreatePROVELM(iType);
break;
case Prov_Type_Parm:
pvNewElm=Prov_CreatePARM();
break;
}
return (ELEMENTTYPE*)pvNewElm;
}
/*========================================================================
Prov_ValidContent
==========================================================================*/
BOOL Prov_ValidContent (pDECSTR pDecStr, pELEMENTTYPE pElement)
{
pDecStr=pDecStr;
if (pElement!=NULL)
{
switch (pElement->iType)
{
case Prov_Type_WapProvisioningDoc:
case Prov_Type_Characteristic:
case Prov_Type_Parm:
return TRUE;
}
}
return FALSE;
}
/*========================================================================
Prov_GetContent
==========================================================================*/
pELEMENTTYPE Prov_GetContent (pELEMENTTYPE pElement)
{
if (pElement!=NULL)
{
switch (pElement->iType)
{
case Prov_Type_WapProvisioningDoc:
case Prov_Type_Characteristic:
/* Return content using generic function */
return (XML_GetContent(pElement));
}
}
return NULL;
}
/*========================================================================
Prov_AppSpecParseMod
==========================================================================*/
void Prov_AppSpecParseMod (pDECSTR pDecStr)
{
/* This function is not used in Provisioning */
pDecStr=pDecStr;
}
/*========================================================================
Prov_LiteralAttributeToToken
==========================================================================*/
UINT16 Prov_LiteralAttributeToToken (WCHAR* pwchToken)
{
/* Dummy */
UINT16 iToken=Type_Literal;
pwchToken = NULL;
return iToken;
}
/*========================================================================
Prov_LiteralTagToToken
==========================================================================*/
UINT16 Prov_LiteralTagToToken (WCHAR* pwchToken)
{
/* Dummy */
UINT16 iToken=Type_Literal;
pwchToken = NULL;
return iToken;
}
/*========================================================================
Prov_DeleteElement
==========================================================================*/
void Prov_DeleteElement (pDECSTR pDecStr, pELEMENTTYPE* ppElement)
{
if (ppElement==NULL)
{
return;
}
if (*ppElement!=NULL)
{
switch ((*ppElement)->iType)
{
case Prov_Type_WapProvisioningDoc:
XML_DeleteElementList(&(((PROV_PROVELEMENT*)(*ppElement))->pContent),pDecStr);
break;
case Prov_Type_Characteristic:
XML_DeleteElementList(&(((PROV_PROVELEMENT*)(*ppElement))->pContent),pDecStr);
break;
case Prov_Type_Parm:
if (((PROV_PARMELEMENT*)(*ppElement))->pwchValue != NULL)
DEALLOC(&(((PROV_PARMELEMENT*)(*ppElement))->pwchValue));
break;
}
/* Delete element */
DEALLOC(ppElement);
}
}
/*========================================================================
Prov_StoreAttributeValue
==========================================================================*/
BOOL Prov_StoreAttributeValue (pDECSTR pDecStr, pELEMENTTYPE pElement,
UINT16 iAttribute, pELEMENTTYPE* ppAttrVal)
{
BOOL fResult=TRUE;
BOOL e2eSecFlag = FALSE;
if (pDecStr->iContentLevel == 1)
e2eSecFlag = TRUE;
if (pElement!=NULL)
{
if (pElement->iType == Prov_Type_WapProvisioningDoc)
{
if (pDecStr->parentElement == NULL)
{
if (iAttribute == ATTRST_version_1_0)
((PROV_PROVELEMENT *)(pElement))->iAttribute=iAttribute;
}
else
return FALSE;
}
else if (pElement->iType == Prov_Type_Characteristic)
{
switch (iAttribute)
{
/* These five may only occur at the root of a connectivity document*/
case PRVNG_PXLOGICAL:
case PRVNG_NAPDEF:
case PRVNG_VENDOR_CONFIG:
fResult = Set_Char_RootAttribute(pDecStr,pElement,iAttribute);
break;
/* E2E security (navigation-doc) must not contain the following two characteristics */
case PRVNG_BOOTSTRAP:
case PRVNG_CLIENTIDENTITY:
if (e2eSecFlag)
{
fResult = FALSE;
break;
}
fResult = Set_Char_RootAttribute(pDecStr,pElement,iAttribute);
break;
/* These two may only occur inside a PXLOGICAL characteristic */
case PRVNG_PXAUTHINFO:
case PRVNG_PXPHYSICAL:
fResult = Set_Char_PxlogicAttribute(pDecStr,pElement,iAttribute);
break;
/* These two may only occur at the root of a NAPDEF characteristic */
case PRVNG_NAPAUTHINFO:
case PRVNG_VALIDITY:
fResult = Set_Char_NapdefAttribute(pDecStr,pElement,iAttribute);
break;
/* May only occur in PXLOGICAL and PXPHYSICAL */
case PRVNG_PORT:
fResult = Set_Char_PxAttribute(pDecStr,pElement,iAttribute);
break;
/* case PRVNG_type_LITERAL:
fResult = Set_Char_StringName(......) om vi till錿er string som type
break; */
default:
/* Not valid attribute start token. */
fResult=FALSE;
break;
}
}
else if (pElement->iType == Prov_Type_Parm)
{
if (iAttribute == PRVNG_Parm_VALUE)
fResult = Set_Parm_Value(pDecStr, pElement, ppAttrVal);
else
fResult = Check_Parm_Name_Ok(pDecStr, pElement, iAttribute, ppAttrVal);
}
}
/* Check if all elements in the attribute value were used in the
store function. If not all elements used, return FALSE.
This will result in a warning. Also, delete the unused element
to avoid memory leak. */
/* if (*ppAttrVal!=NULL)
{
fResult=FALSE;
XML_DeleteElementList(ppAttrVal,pDecStr);
}*/
return fResult;
}
/*========================================================================
Prov_GetAttributeValue
==========================================================================*/
WCHAR* Prov_GetAttributeValue (UINT16 iToken)
{
/* Dummy Function: Never used for connectivity doc, since Token values are ok */
iToken = 0;
return NULL;
}
/*========================================================================
PROV_CheckPublicID
==========================================================================*/
BOOL PROV_CheckPublicID (pDECSTR pDecStr, WCHAR* pwchPId, UINT8* piPId)
{
/* ASSERT: pDecStr!=NULL
*/
/* Use string */
if (pwchPId!=NULL)
{
UINT32 iLength=0;
/* PROV 1.0 */
WCHAR pwchPublic_ID_1_0[]={'-','/','/','W','A','P','F','O','R','U','M',
'/','/','D','T','D',' ','P','R','O','V',' ','1',
'.','0','/','/','E','N',0};
/* Get length of pwchPId string */
iLength=(UINT32) (w_strlen(pwchPId));
if (CompareWideStringNoCase (pwchPId,pwchPublic_ID_1_0,iLength))
{
/* Prov 1.0 - OK */
*piPId=PROV_VERSION_1_0;
return TRUE;
}
else
return FALSE;
/* Check content-type and level (0x36 is application/vnd.wap.connectivity-wbxml) */
/* if (pDecStr->bContentType=='\x36')
{
*piPId=PROV_VERSION_1_0;
return TRUE;
}*/
}
/* Use integer */
else
{
/* Public ID (Prov 1.0) is 0x0B */
switch (*piPId)
{
/* Unknown */
case '\x01':
/* Check content-type and level (0x36 is application/vnd.wap.connectivity-wbxml)*/
if (pDecStr->bContentType=='\x36')
{
*piPId=PROV_VERSION_1_0;
return TRUE;
}
return FALSE;
/* Prov 1.0 */
case '\x0B':
*piPId=PROV_VERSION_1_0;
return TRUE;
}
}
/* Other - not supported */
return FALSE;
}
/*========================================================================
Prov_CreateTokenValueElem (Not a DTD function)
==========================================================================*/
pELEMENTTYPE Prov_CreateTokenValueElem(UINT16 iAttrVal)
{
pTOKENELEMENT pElement=NEWSTRUCT(TOKENELEMENT);
/* Store attributes */
pElement->iType=Type_Token_Value;
pElement->pNextElement=NULL;
pElement->iTokenData = iAttrVal;
/* Cast to super type and return */
return (pELEMENTTYPE) pElement;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -