📄 cli_private.inc
字号:
/************************************************************************
Copyright 200X - 200X+1.
filename : CLI_User.inc
description : 命令行模块大部分子功能需要用到的定义与声明。私有,对其它模块不提供
author : Woodhead
modification : Woodhead create 2004-12-07
************************************************************************/
#ifndef _CLI_PRIVATE_INC_
#define _CLI_PRIVATE_INC_
#include "..\include\Cli_reg.h"
#include "Cli_Dbg.inc"
#include "CLI_PrvCfg.h"
#include "MT_Pub.h"
#include "MT_User.h"
#include "Agent_Pub.h"
#define CLI_ML_NULL ML_NULL_STRING_SID
#define CLI_PID_NULL 0xffff /*ddddd*/
/* 延时,单位为1/100秒 */
#define CLI_DELAY(s) EOS_TaskDelay(s*10)
#define HISTORY_SIZE 10 /* 历史命令个数 */
#define USERNAME_LEN MT_USERNAME_LEN /* 用户名最大长度 */
#define PASSWORD_LEN MT_PASSWORD_LEN /* 口令的最大长度 */
#define HOSTNAME_LENGTH MT_HOSTNAME_LENGTH /* 主机名最大长度 */
#define MAX_TOKEN_SIZE 80 /* 单个命令字最大长度*/
#define CT_MAX_CMDBUF 256 /* 命令缓冲最大长度 */
#define TERM_TIMEOUT 300 /* 接收的超时长度定义*/
#define FIRST_TELNET_DATA 2 /* 第一个telnet数据(终端)的位置*/
#define MAX_USER_NUM MT_MAX_USER_NUM /* 操作用户最大个数 */
#define TERM_IO_BUFFER 1024 /* 终端发送与接收缓冲大小 */
#define TERM_OUT_FOR_RESPONSE 24 /* 预留给从命令执行反馈的空间*/
#define CLI_INVALID (_U32)(-1)
/* 定义最大重试次数 */
#define MAX_FAILED_LOG_TIME 3
/* 超时开关定义 */
#define TIMEOUT_ON 0
#define TIMEOUT_OFF 1
/* 语言模式定义 */
#define ENGLISH_L 0
#define CHINESE_L 1
/* 帮助模式开关定义 */
#define CTHELPMODEON 0
#define CTHELPMODEOFF 1
/* 自动、手动分屏开关 */
#define SCROLL_MANUAL 1
#define SCROLL_AUTO 0
/* 交互允许开关定义 */
#define SMART_ON 0
#define SMART_OFF 1
/* telnet 端口号定义 */
#define TELNETPORT 23
/* 终端socket在非telnet状态下的属性 */
#define SOCKET_FOR_SERIAL -1
#define SOCKET_FOR_MML -2
#define SOCKET_FOR_WEB -3
#define SOCKET_NOT_INITIAL -4
/* Telnet登录通道定义*/
#define INBAND 0
#define OUTBAND 1
/* 终端任务的运行状态定义 */
enum Term_Status_E
{
TERM_SLEEPING = 0,
TERM_ACTIVE,
TERM_LOGED,
TERM_EXECCMD,
TERM_WAIT_RESPONSE,
TELNET_MAX_STATUS
} ;
/* -------------------------------- 宏操作定义 ------------------------------ */
/* 定义串口控制台端口号 */
#define SERIAL_PORT (DEV_SERIAL | 1)
/* 有界索引值加1、减1宏定义 */
#define CLI_INCCYCLE(idx, max) ( ((idx) >= ((max) - 1)) ? 0 : ((idx) + 1) )
#define CLI_DECCYCLE(idx, max) ( ((idx) == 0) ? (max - 1) : ((idx) - 1) )
/* 判断指定终端的状态是否正常 */
#define IS_TERM_NORMAL(lp) ((lp)->ucTermStatus >= TERM_ACTIVE && (lp)->ulTimeLeft != 0)
/* 终端信号量控制 */
#define TERM_SEM_P(lp) EOS_SemP(lp->ulSemID, 3000)
#define TERM_SEM_V(lp) EOS_SemV(lp->ulSemID)
/* 判断字符c是否为Tab键 */
#define ISTAB( c ) (( c == '\t' ) ? 1 : 0)
/* 判断字符c是否为CTL + 字符键 */
#define ISCTRLCHAR( c ) (( c >= 0 && c <= 32 ) ? ('@' + c) : 0)
/* 判断字符c是否为BackSpace键 */
#define ISBACKSPACE( c ) (( c == '\b' ) ? 1 : 0)
/* 判断字符c是否为Delete键 */
#define ISDELETE( c ) (( c == 127 ) ? 1 : 0)
/* 判断字符c是否为ESC键 */
#define ISESC( c ) (( c == '\x1b' ) ? 1 : 0)
/* 判断字符c是否为[键 */
#define ISESC2( c ) (( c == '[' ) ? 1 : 0 )
/* 判断字符c是否为o键 */
#define ISESC3( c ) (( c == 'O' ) ? 1 : 0 )
/* 判断字符c是否为方向键 */
#define ISARROW( c ) (( c >= 'A' && c <= 'D' ) ? (c - 'A' + 1) : 0 )
#define ISSPACEBAR(c) (((c) == ' ') ? 1 : 0)
#define CLI_ASSURE_OR_FAIL(exp) \
{ \
/*lint -e506 -e774 */ \
if (!(exp)) \
/*lint -restore */ \
{ \
DBG_Out(PID_CLI, CLI_DBGOUT_ERR, \
"\r\n CLI FATAL: filename:%s, line:%d", __FILE__, __LINE__); \
MT_ERRLOG(0); \
return G_FAILURE; \
} \
}
#define CLI_ASSURE_OR_NULL(exp) \
{ \
/*lint -e506 -e774 */ \
if (!(exp)) \
/*lint -restore */ \
{ \
DBG_Out(PID_CLI, CLI_DBGOUT_ERR, \
"\r\n CLI FATAL: filename:%s, line:%d", __FILE__, __LINE__); \
MT_ERRLOG(0); \
return G_NULL; \
} \
}
/* 用户终端任务数据结构定义开始 {
*/
/* telnet参数结构体 */
#define TERMLENGTH 41
struct Telnet_Param_S
{
_U32 TTState ; /* socket输入状态 */
_U32 SubState ; /* 选项子协商状态 */
_U8 OptionCmd ; /* 选项命令 */
_U8 Synching ; /* SYNCH信令标识 */
_U8 DoEcho ; /* ECHO 选项 */
_S8 TermType[TERMLENGTH]; /* 终端类型 */
_S8 FirstTermType[TERMLENGTH] ;/* 第一类终端类型 */
_U8 SendBinary ; /* 发送二进制选项 */
_U8 RecvBinary ; /* 接收二进制选项 */
_U8 Noga ; /* go head选项 */
} ;
typedef struct Term_Data_S * PTerm_Data_S ;
struct Term_Data_S
{
_U32 ulTermId; /* 终端ID */
_S32 iSocket ; /* socket连接标识 */
_S8 szCurUserName[USERNAME_LEN]; /* 当前用户名 */
_S8 szRecvBuf[TERM_IO_BUFFER] ; /* 接收缓冲区 */
_S32 iRecvLen ; /* 实际接收到的数据长度 */
_S8 szSendBuf[TERM_IO_BUFFER] ; /* 发送缓冲区 */
_S32 iSendLen ; /* 发送缓冲区的实际数据长度 */
_S8 szHistory[HISTORY_SIZE][CT_MAX_CMDBUF] ;/* 历史命令缓冲区 */
_S32 iHistoryPos ; /* 当前历史命令所在的位置 */
_S8 szEditBuf[CT_MAX_CMDBUF] ; /* 键盘编辑缓冲区 */
_S32 iCurrentPos ; /* 当前的光标位置 */
_S32 iPromptLen ; /* 当前命令的提示符长度 */
_S8 szCommandBuf[CT_MAX_CMDBUF] ; /* 命令缓冲区 */
_S8 szInputCmd[CT_MAX_CMDBUF] ; /* 已经输入的命令 */
_S32 iEditStatus ; /* 字符串的编辑状态 */
_S32 iMaxLen ; /* 当前命令行编辑的最大长度 */
_U32 ulTimeLeft; /* 终端剩余时间 */
struct Telnet_Param_S TelnetParam ; /* telnet 参数 */
_U32 ulClientIP ; /* IP地址 */
_U32 ulCommandExecOk ; /* 命令执行标志 */
_U32 ulRecurCmd; /* 重现命令行标志 */
_U32 ulDispLineCount; /* 已经显示的行数 */
_U32 ulSemID; /* 终端信号量 */
struct CT_WS_S *pWS; /* 状态结构变量 */
_U8 ucTimeOutFlag; /* 超时长短的设置 */
_U8 ucChannel; /* telnet 登录通道设置 */
_U8 ucTermStatus; /* 终端运行状态 */
_U8 ucScroll; /* 多行输出控制 */
_U8 ucUserLevel ; /* 当前用户的权级 */
_U8 ucHelpMode ; /* 当前命令行的帮助模式 */
_U8 ucAlarmLevel; /* 告警的输出控制标志 */
_U8 ucInputStatus; /* 字符串输入状态 */
} ;
/* 任务数据表 */
struct TD_S
{
_U32 lTaskid ; /* 任务ID号 */
PTerm_Data_S pTermStruct ; /* 任务数据 */
} ;
/* 用户终端任务数据结构定义结束 }
*/
/* IP访问控制表 */
#define ACL_USED_FLAG 0xAA
typedef struct tag_ST_ACL
{
_U8 ucValid;
_U8 ucReserve;
_U32 ulIpAddr ; /* Telnet的IP地址 */
_U32 ulIpMask ; /* Telnet的掩码 */
_U32 ulState ; /* 当前状态 如果是ACL_USED_FLAG, 则有效 */
}ST_ACL, *P_ST_ACL;
typedef struct CT_MODE_RECORD_S
{
_S8 szName[256] ;
_U32 ulCount ;
} CT_MODE_RECORD_T;
/* 命令行主从设备交互消息结构 */
typedef struct tag_ST_MS_CLIMSG
{
_U8 ucTermID; //对应的处理终端ID
_U8 ucMode; //对于透传命令而言,命令的执行模式
_U8 ucLan; //保留字
_U8 ucData[1]; //消息数据, 申请时多出这个作结束符使用
}ST_MSCLI_MSG, *PST_MSCLI_MSG;
extern struct TD_S *m_TDTable;
extern _U8 m_CliIsMainDevice;
extern _S8 m_szHostName[HOSTNAME_LENGTH];
extern _U32 m_ulCliMaxTermNum;
extern _U32 m_ulCliMaxOnlineUser;
#if CLI_DBASE_SUPPORT
extern _U32 m_ulCliUserHandle;
extern _U16 m_usHostNameTable;
extern _U16 m_usClientACLTable;
extern ST_ACL m_stCliAcl[MT_ACL_NUM];
#endif
/* 【1】Cli_init.c的函数声明 */
_U32 CLI_TDTableInit (_VOID);
PTerm_Data_S CLI_GetTaskDataByPid (_U32 ulPid);
PTerm_Data_S CLI_GetTaskDataByName (_S8 *szUsername);
PTerm_Data_S CLI_GetCurrentTaskData ( _VOID );
#if MULTI_DEVICE_SUPPORT
ST_MSG* CLI_MSMsgCreat(_U32 usDeviceID, _U32 ulTermID, _U16 usMSmsgType, _S8 *szSend);
#endif
_VOID CLI_TaskDataInit( PTerm_Data_S pTermStruct );
_U32 CLI_ResetEnviroment(CT_WS_P pWS);
/* 【2】Cli_Term.c的函数声明 */
_U32 CLI_SendToTerm( PTerm_Data_S pTermStruct );
_U32 CLI_ReceiveFromTerm(PTerm_Data_S pTermStruct , _U32 ulSecond);
_U32 CLI_SendToMML(PTerm_Data_S pTermStruct);
#if (EOS_OS_TYPE != EOS_WIN32)
_VOID CLI_SerialInit(_VOID);
_U32 CLI_SendToSerial ( PTerm_Data_S pTermStruct ) ;
_U32 CLI_ReceiveFromSerial ( PTerm_Data_S pTermStruct, _U32 ulSecond) ;
_U32 CLI_SerialSetBaudrate( _U32 ulBaudrate );
_U32 CLI_SerialGetChar( _U8 *pucChar );
#else
_VOID CLI_SerialInit( _VOID );
_U32 CLI_SendToSerial ( PTerm_Data_S pTermStruct ) ;
_U32 CLI_ReceiveFromSerial ( PTerm_Data_S pTermStruct, _U32 ulSecond) ;
_VOID CLI_WinMoveToCurrentPos ( _S32 iTmp, _S8 cFlag );
#endif
#if CLI_TELNET_SUPPORT
_U32 CLI_TelnetServerInit (_S32 *iSocketServer);
_VOID CLI_TelnetServer (_U32 ulArg1, _U32 ulArg2 );
_U32 CLI_AclAdd(_U32 ulIpaddr, _U32 ulIpMask);
_U32 CLI_AclDel(_U32 ulIpaddr, _U32 ulIpMask);
_U32 CLI_AclCheck(_U32 ulIpaddr);
_U32 CLI_AclDisplay(_VOID);
#endif
_VOID CLI_SerialTask( _U32 ulArg1, _U32 ulArg2);
_VOID CLI_MmlTask( _U32 ulArg1, _U32 ulArg2);
_VOID CLI_TelnetTask( _U32 ulArg1, _U32 ulArg2);
_VOID CLI_PeriodProc(_VOID);
_VOID CLI_TermTaskProc (PTerm_Data_S pTermStruct);
_VOID CLI_TermLogin (PTerm_Data_S pTermStruct);
_VOID CLI_TermLogout (PTerm_Data_S pTermStruct);
_U32 CLI_ReturnRootMode (PTerm_Data_S pTermStruct);
_U32 CLI_EditString ( PTerm_Data_S pTermStruct );
_U32 CLI_CharProcess ( PTerm_Data_S pTermStruct, _U8 ucTmp ) ;
_VOID CLI_CharInsert ( PTerm_Data_S pTermStruct, _S8 ch );
_VOID CLI_EditSpecialKey ( PTerm_Data_S pTermStruct, _S8 ch );
_VOID CLI_DealWithBackSpace ( PTerm_Data_S pTermStruct );
_VOID CLI_DealWithDelete ( PTerm_Data_S pTermStruct ) ;
_VOID CLI_PrevCmdDisp ( PTerm_Data_S pTermStruct );
_VOID CLI_NextCmdDisp ( PTerm_Data_S pTermStruct );
_VOID CLI_MoveToCurrentPos ( PTerm_Data_S pTermStruct, _U32 iPos );
_VOID CLI_SetTermStatus(PTerm_Data_S pTermStruct, _U8 ucTermStatus);
_VOID CLI_Bell ( PTerm_Data_S pTermStruct );
_U32 CLI_PatchCommand(PTerm_Data_S pTermStruct);
_U32 CLI_PatchCmdWord(PTerm_Data_S pTermStruct);
_U32 CLI_DealWitchCommand(PTerm_Data_S pTermStruct);
_U32 CLI_GetUserLogModeByTermID( _U32 ulTermID );
_U32 CLI_GetTermLevel( _U32 ulTermId );
_U32 CLI_WebTermAlloc( _U32 *pulTermID );
_U32 CLI_WebLogin( _U32 ulLogIp, const _S8* username, const _S8* password,_U32* pulTermId );
_VOID CLI_WebLogout( _U32 ulLogIp, _U32 ulTermId );
_U32 CLI_WebSendKickOffUserMsg( _U32 ulTermId );
/* 【3】Cli_lib.c的函数声明 */
_U32 _isfloatstr(_S8 * pStr);
_U32 _isintstr(_S8 * pStr);
_S8* _btrim (_S8 * pStr);
_S8* _ltrim(_S8 *pStr);
_S8* _rtrim(_S8 *pStr);
_VOID _TrimString( _S8* pDst, _S8 * pSrc );
_U32 strmatch(_S8 *s8Src, _S8 *s8Dest);
_U32 _isempty(_S8 * pStr);
_U32 _VerifyFixedString(_S8 *pStr, _U32 ulLen);
_U32 _VerifyAndCvtDwordI(_S8 * szNum, _S32 dwLow, _S32 dwHigh, _S32 * pdwValue);
_U32 _VerifyAndCvtDword (_S8 * szNum, _U32 dwLow, _U32 dwHigh, _U32 *
pdwValue);
_U32 _VerifyAndCvtDwordH (_S8 * szNum, _U32 dwLow, _U32 dwHigh, _U32 *
pdwValue);
_U32 _isdecstr (_S8 * pStr);
_U32 _isxdecstr (_S8 * pStr);
_U32 _DateOrTimeToUl(_S8 *szDate, _U32 *pulDate);
_U32 _VerifyDate (_S8 *szDate1);
_U32 _VerifyTime (_S8 *szTime1);
_U32 _VerifyHostIPAddress(_S8 *szIPAdd);
_U32 _VerifyGeneralIPAddress(_S8 *szIPAdd);
_U32 _VerifyMASKAddress(_S8 *szMaskAdd);
_U32 _VerifyMACAddress(_S8 *szMACAdd);
_U32 _AffirmStrBeLower(_S8 *szStr);
int _Split(_S8 **Sour,_S8 *Dest,_S8 flag,int Len);
_U32 _StrToIPAddr(_S8 *string, _U32 *ulRet);
_S8* _IPAddrToStr(_U32 ulIPAddr, _S8 *string);
int _atoulx(register _S8 *Sour,unsigned long * pTemp);
int _atoul(register _S8 *Sour,unsigned long * pTemp);
int _atol(_S8 *szSrc, _S32 *ulVal);
int _atou(_S8 *Sour,_U32 * pTemp);
_U32 _strtol(const _S8 *str, _U32 base);
int _atoux(register _S8 *Sour,unsigned short * pTemp);
_U32 _IsChar(_S8 c);
_U32 _IsCmdChar(_S8 c);
/* 【4】Cli_Io.c的部分私有函数声明 */
_U32 IO_InsertDispInfo(_U32 ulTermID, _S8 *szOutput);
_VOID IO_DispBaseInit(_VOID);
_U32 IO_OutToTerm(PTerm_Data_S pTermStruct, const _S8 *szOutString);
_U32 IO_PrintToAllTerm(_U32 ulInfoID, ...);
_U32 IO_Print(_U32 ulInfoID, ...);
_VOID IO_AsynDispTask(_U32 ulArg1, _U32 ulArg2);
/* 【5】其他文件的私有函数声明 */
_U32 CLI_EnterDiagMode(_U32 ulTermID);
#endif /*end of #ifndef _CLI_PRIVATE_INC_*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -