📄 cli_interpret.c
字号:
else if ( EOS_StriCmp( szToken, "" ) != 0 )
{
EOS_Sprintf(szToken, "%d", uVal);
}
}
}
break;
/* Value of Hex Integer Type */
case CT_DATA_VHK :
case CT_DATA_VH :
bValueMatched = ((_U32)_isxdecstr(szToken) == G_SUCCESS) ;
if( G_TRUE == bValueMatched )
{
if(CT_VALUE_USER_CHECK(pexpP->pValue))
{
bValueMatched = (pexpP->pValue->pCheckFunc(szToken,G_NULL,pPointer->pWS) == G_SUCCESS);
}
else if((pexpP->pValue->valueType.ucAttrib & CT_VALPROP_CHECK))
{
if((_U32)_VerifyAndCvtDwordH(szToken,
(_U32)pexpP->pValue->s32IntFilter[0],
(_U32)pexpP->pValue->s32IntFilter[1],
&uVal) != G_SUCCESS)
{
/* Match failed */
bValueMatched = G_FALSE;
ulMlInfo = CLI_HEX_OVERFLOW;
}
}
}
break;
/* Value of String Type */
case CT_DATA_VS :
if(CT_VALUE_USER_CHECK(pexpP->pValue))
{
bValueMatched = (pexpP->pValue->pCheckFunc(szToken,G_NULL,pPointer->pWS) == G_SUCCESS);
}
else
{
if(EOS_StrLen(szToken) == 0)
break;
bValueMatched = G_TRUE;
if((pexpP->pValue->valueType.ucAttrib & CT_VALPROP_CHECK))
{
if( (pexpP->pValue->valueType.ucDataLen > 0)
&& (EOS_StrLen(szToken) > pexpP->pValue->valueType.ucDataLen) )
{
bValueMatched = G_FALSE;
ulMlInfo = CLI_STRING_TOO_LONG;
break;
}
for (i = 0; szToken[i] != '\0'; i++)
{
if ((szToken[i] == '&' )
|| (szToken[i] == '#' )
|| (szToken[i] == '`' ))
{
bValueMatched = G_FALSE;
ulMlInfo = CLI_STRING_INVALID;
break;
}
}
}
}
break;
/* Keyword Value Type */
case CT_DATA_K :
if(CT_VALUE_USER_CHECK(pexpP->pValue))
{
bValueMatched = (pexpP->pValue->pCheckFunc(szToken,G_NULL,pPointer->pWS) == G_SUCCESS);
}
else
{
bValueMatched = ((_U32)_isempty(szToken)!=G_SUCCESS) ;
if( G_TRUE == bValueMatched )
{
pKeyword = pexpP->pValue->keywords.pKeyword;
if(CI_MatchKeywords(szToken,pKeyword,pPointer) == G_SUCCESS)
{
if(pPointer->ucMatchFlag == CTMF_FULL)
break ;
}
else
{
bValueMatched = G_FALSE;
ulMlInfo = CLI_INVALID_KEY;
}
}
}
break;
/* Host IP Address Type */
case CT_DATA_IPK :
case CT_DATA_IP :
if(CT_VALUE_USER_CHECK(pexpP->pValue))
{
bValueMatched = (pexpP->pValue->pCheckFunc(szToken,G_NULL,pPointer->pWS) == G_SUCCESS);
}
else if((pexpP->pValue->valueType.ucAttrib & CT_VALPROP_CHECK))
{
if(_VerifyGeneralIPAddress(szToken) != G_SUCCESS)
{
/* Match failed */
bValueMatched = G_FALSE;
ulMlInfo = CLI_INVALID_IP;
}
else bValueMatched = G_TRUE;
}
break;
/* MAC Address Type */
case CT_DATA_MACK :
case CT_DATA_MAC :
if(CT_VALUE_USER_CHECK(pexpP->pValue))
{
bValueMatched = (pexpP->pValue->pCheckFunc(szToken,G_NULL,pPointer->pWS) == G_SUCCESS);
}
else if((pexpP->pValue->valueType.ucAttrib & CT_VALPROP_CHECK))
{
if(_VerifyMACAddress(szToken) != G_SUCCESS)
{
/* Match failed */
bValueMatched = G_FALSE;
ulMlInfo = CLI_INVALID_MAC;
}
else bValueMatched = G_TRUE;
}
break;
/* MASK Address Type */
case CT_DATA_MASK :
if(CT_VALUE_USER_CHECK(pexpP->pValue))
{
bValueMatched = (pexpP->pValue->pCheckFunc(szToken,G_NULL,pPointer->pWS) == G_SUCCESS);
}
else if((pexpP->pValue->valueType.ucAttrib & CT_VALPROP_CHECK))
{
if(_VerifyMASKAddress(szToken) != G_SUCCESS)
{
/* Match failed */
bValueMatched = G_FALSE;
ulMlInfo = CLI_INVALID_MASK;
}
else bValueMatched = G_TRUE;
}
break;
/* DATE Type */
case CT_DATA_DATE :
if(CT_VALUE_USER_CHECK(pexpP->pValue))
{
bValueMatched = (pexpP->pValue->pCheckFunc(szToken,G_NULL,pPointer->pWS) == G_SUCCESS);
}
else if((pexpP->pValue->valueType.ucAttrib & CT_VALPROP_CHECK))
{
if(_VerifyDate(szToken) != G_SUCCESS)
{
/* Match failed */
bValueMatched = G_FALSE;
ulMlInfo = CLI_INVALID_DATE;
}
else bValueMatched = G_TRUE;
}
break;
/* TIME Type */
case CT_DATA_TIME :
if(CT_VALUE_USER_CHECK(pexpP->pValue))
{
bValueMatched = (pexpP->pValue->pCheckFunc(szToken,G_NULL,pPointer->pWS) == G_SUCCESS);
}
else if((pexpP->pValue->valueType.ucAttrib & CT_VALPROP_CHECK))
{
if(_VerifyTime(szToken) != G_SUCCESS)
{
/* Match failed */
bValueMatched = G_FALSE;
ulMlInfo = CLI_INVALID_TIME;
}
else bValueMatched = G_TRUE;
}
break;
default :
if(CT_ValidateUserType(pexpP->pValue->valueType.ucDataType) == G_SUCCESS)
{
bValueMatched =
(CT_GetUserType(pexpP->pValue->valueType.ucDataType)->pCheckFunc(szToken,G_NULL,pPointer->pWS) == G_SUCCESS);
}
else
{
MT_ERRLOG(ucDataType);
IO_OutString(" [VALUE=^") ;
IO_OutString( szToken );
IO_OutString("]");
return G_FAILURE;
}
} /* end of switch block */
if (bValueMatched != G_TRUE
&& (ucDataType == CT_DATA_VIK || ucDataType == CT_DATA_VUK || ucDataType == CT_DATA_VHK
|| ucDataType == CT_DATA_IPK || ucDataType == CT_DATA_MACK))
{
bValueMatched = ((_U32)_isempty(szToken) != G_SUCCESS) ;
if( G_TRUE == bValueMatched )
{
pKeyword = pexpP->pValue->keywords.pKeyword;
if(CI_MatchKeywords(szToken,pKeyword,pPointer) != G_SUCCESS)
{
bValueMatched = G_FALSE;
}
}
}
if( bValueMatched == G_TRUE )
{
if( IS_VIRTUAL_P( *pulStatus ) )
{
CLR_VIRTUAL_P( *pulStatus );
}
COPY_POINTER_TO_CUR( pPointer );
if(CT_VALUE_IS_MUTEX(pexpP->pValue))
SET_MUTEXVALUE(*pulStatus);
if( (CI_SaveParameter( szToken, pexpP->pValue->szName,
ulIndex, pPointer->pWS ) != G_SUCCESS )
&& (!IS_ENV_SILENT(*pulStatus)))
{
IO_Print(CLI_PARAM_CANNOT_SAVE, szToken, ulIndex);
return G_FAILURE;
}
if (szTmpToken[0][0] != 0)
EOS_StrCpy(szToken, szTmpToken[0]) ;
}
else /* not matched */
{
if( !IS_INTERACTIVE(*pulStatus) )
{
if((!IS_ENV_SILENT(*pulStatus)))
{
if (ulMlInfo != CLI_ML_NULL)
IO_Print(ulMlInfo);
return G_FAILURE;
}
} /* if !IS_INTERACTIVE */
else
{
if (*szToken != 0)
{
if(!IS_ENV_SILENT(*pulStatus))
{
if (ulMlInfo != CLI_ML_NULL)
IO_Print(ulMlInfo);
}
return G_FAILURE;
}
if( (CT_VALUE_IS_OPTIONAL(pexpP->pValue)
|| IS_VIRTUAL_P(*pulStatus))||((CT_VALUE_IS_MUTEX(pexpP->pValue))
&& (pexpP->pValue->pNext != G_NULL)
&& CT_VALUE_IS_MUTEX(pexpP->pValue->pNext)))
{
SET_SKIP_FLAG(*pulStatus);
COPY_POINTER_TO_CUR( pPointer );
return G_SUCCESS;
}
else if(!IS_ENV_SILENT(*pulStatus))
{
if (ulMlInfo != CLI_ML_NULL)
IO_Print(ulMlInfo);
return G_FAILURE;
}
} /* else IS_INTERACTIVE */
return G_FAILURE;
} /* if-block for fValueMatched*/
SET_MATCHSUCC(*pulStatus);
return G_SUCCESS;
} /* End of Function CI_CheckElementValue() */
/*********************************************************************/
/* 函数名称 : CI_CheckElementParameter() */
/* 函数功能 : 检验命令字的合法性 */
/* 输入参数 : szToken 当前的命令字 */
/* pPointer 命令解释核心结构 */
/* pulStatus 命令解释状态 */
/* 输出参数 : pulStatus 命令解释状态 */
/* 返回 : 成功、失败 */
/* 上层函数 : CI_CheckElement */
/* 创建者 : */
/* 修改记录 : */
/*********************************************************************/
_U32 CI_CheckElement(_S8 *szToken, CI_POINTER_P pPointer, _U32 *pulStatus)
{
_U32 rc; /* return code */
_U32 ulSts;
CLR_SKIP_FLAG(*pulStatus);
ulSts = *pulStatus;
CLR_MATCHSUCC(*pulStatus);
if(IS_WAIT_NULL(ulSts))
{
IO_OutString("\r\n Command Interpreter status error(waiting null element)! (Program Error)") ;
MT_ERRLOG(*pulStatus);
rc = 1;
}
else if(IS_WAIT_OBJ(ulSts))
{
rc = CI_CheckElementObject(szToken, pPointer, pulStatus );
}
else if(IS_WAIT_PARAM(ulSts))
{
rc = CI_CheckElementParameter(szToken, pPointer, pulStatus );
}
else if(IS_WAIT_VALUE(ulSts))
{
rc = CI_CheckElementValue(szToken, pPointer, pulStatus );
}
else
{
MT_ERRLOG(*pulStatus);
return G_FAILURE;
}
return rc;
} /* End of Function CI_CheckElement() */
/*※※※※※※※※※※※※※※*/
/* 【3】命令的可执行性分析 */
/*※※※※※※※※※※※※※※*/
/*********************************************************************/
/* 函数名称 : CI_UserPermitted() */
/* 函数功能 : 检验执行该命令的用户权限 */
/* 输入参数 : ulLevel 用户级别 */
/* pObject 所检验的对象 */
/* ulStatus 命令解释的状态 */
/* 输出参数 : 无 */
/* 返回 : 成功、失败 */
/* 上层函数 : CI_IntpKernelProc */
/* 创建者 : */
/* 修改记录 : */
/*********************************************************************/
_U32 CI_User
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -