📄 cli_telnet.c
字号:
else
{
strcat(szFSMInfoEn, "\r\n the RecvBinary option state : 0 ");
strcat(szFSMInfoCh, "\r\n 接收二进制选项状态: 0 ");
}
strcat(szFSMInfoEn, "\r\n the next state : TSDATA ");
strcat(szFSMInfoCh, "\r\n 下一状态 : TSDATA ");
if ( pTermStruct->TelnetParam.OptionCmd == TCWILL
&& ! pTermStruct->TelnetParam.RecvBinary )
{
strcat(szFSMInfoEn, "\r\n the action : send \"IAC DO TXBINARY\" ");
strcat(szFSMInfoCh, "\r\n 执行动作 : send \"IAC DO TXBINARY\" ");
strcat(szFSMInfoEn, "\r\n RecvBinary = 1\n\r ");
strcat(szFSMInfoCh, "\r\n RecvBinary = 1\n\r ");
}
else if ( pTermStruct->TelnetParam.OptionCmd == TCWONT
&& pTermStruct->TelnetParam.RecvBinary )
{
strcat(szFSMInfoEn, "\r\n the action : send \"IAC DONT TXBINARY\" ");
strcat(szFSMInfoCh, "\r\n 执行动作 : send \"IAC DONT TXBINARY\" ");
strcat(szFSMInfoEn, "\r\n RecvBinary = 0\n\r ");
strcat(szFSMInfoCh, "\r\n RecvBinary = 0\n\r ");
}
}
CLI_TelFSMDegOut(szFSMInfoEn, szFSMInfoCh);
}
/*--------------------------------------------------------------*/
/* 接收到"IAC WILL/WONT BINARY-TRANSMISSION" */
/* 根据当前recieve BINARY-TRANSMISSION选项状态值 */
/* 如果符合客户端的要求,则不动作 */
/* 否则设置recieve BINARY-TRANSMISSION 选项 */
/* 并应答客户端"IAC DO/DONT BINARY-TRANSMISSION" */
/*--------------------------------------------------------------*/
if ( pTermStruct->TelnetParam.RecvBinary )
{
if ( pTermStruct->TelnetParam.OptionCmd == TCWILL )
return 1 ;
}
else if ( pTermStruct->TelnetParam.OptionCmd == TCWONT )
return 1 ;
pTermStruct->TelnetParam.RecvBinary = ! ( pTermStruct->TelnetParam.RecvBinary ) ;
pTermStruct->szSendBuf[ pTermStruct->iSendLen++ ] = (_S8)TCIAC ;
if ( pTermStruct->TelnetParam.RecvBinary )
pTermStruct->szSendBuf[ pTermStruct->iSendLen++ ] = (_S8)TCDO ;
else
pTermStruct->szSendBuf[ pTermStruct->iSendLen++ ] = (_S8)TCDONT ;
pTermStruct->szSendBuf[ pTermStruct->iSendLen++ ] = (_S8)c ;
pTermStruct->szSendBuf[ pTermStruct->iSendLen ] = '\0' ;
CLI_SendToTerm ( pTermStruct ) ;
return 1 ;
}
/*==================================================================*/
/* 函数名 :CLI_WillTxBinary */
/* 函数功能 :处理telnet do/don't BINARY-TRANSMISSION选项 */
/* 输入参数 :PTerm_Data_S pTermStruct 任务数据 */
/* _U8 c 接收到的输入字符 */
/* 输出参数 :PTerm_Data_S pTermStruct 任务数据 */
/* 返回值 :_U32 1:成功 */
/* 调用函数 :CLI_DebugOutString ( ) */
/* 被调函数 : */
/*==================================================================*/
_U32 CLI_WillTxBinary ( PTerm_Data_S pTermStruct, _U8 c )
{
_S8 szFSMInfoEn[1024] = "";
_S8 szFSMInfoCh[1024] = "";
if(pTermStruct == G_NULL)
{
return 1;
}
if ( G_TRUE == m_bCliTelnetDebugOn )
{
if ( pTermStruct->iRecvLen == 1 )
{
strcat(szFSMInfoEn, "\r\n The telnet NVT FSM :");
strcat(szFSMInfoCh, "\r\n Telnet 网络虚拟终端状态机 :");
strcat(szFSMInfoEn, "\r\n the current state : TSDOPT");
strcat(szFSMInfoCh, "\r\n 当前状态 : TSDOPT");
strcat(szFSMInfoEn, "\r\n the input character : TXBINARY ( Transition Binary ) ");
strcat(szFSMInfoCh, "\r\n 输入字符 : TXBINARY ( Transition Binary ) ");
if ( pTermStruct->TelnetParam.OptionCmd == TCDO )
{
strcat(szFSMInfoEn, "\r\n the option negotiate command is : DO");
strcat(szFSMInfoCh, "\r\n 选项协商命令: DO");
}
else
{
strcat(szFSMInfoEn, "\r\n the option negotiate command is : DONT");
strcat(szFSMInfoCh, "\r\n 选项协商命令: DONT");
}
if ( pTermStruct->TelnetParam.SendBinary )
{
strcat(szFSMInfoEn, "\r\n the SendBinary option state : 1 ");
strcat(szFSMInfoCh, "\r\n 发送二进制选项状态: 1 ");
}
else
{
strcat(szFSMInfoEn, "\r\n the SendBinary option state : 0 ");
strcat(szFSMInfoCh, "\r\n 发送二进制选项状态: 0 ");
}
strcat(szFSMInfoEn, "\r\n the next state : TSDATA ");
strcat(szFSMInfoCh, "\r\n 下一状态 : TSDATA ");
if ( pTermStruct->TelnetParam.OptionCmd == TCDO
&& ! pTermStruct->TelnetParam.SendBinary )
{
strcat(szFSMInfoEn, "\r\n the action : send \"IAC WILL TXBINARY\" ");
strcat(szFSMInfoCh, "\r\n 执行动作 : send \"IAC WILL TXBINARY\" ");
strcat(szFSMInfoEn, "\r\n SendBinary = 1\n\r ");
strcat(szFSMInfoCh, "\r\n SendBinary = 1\n\r ");
}
else if ( pTermStruct->TelnetParam.OptionCmd == TCDONT
&& pTermStruct->TelnetParam.SendBinary )
{
strcat(szFSMInfoEn, "\r\n the action : send \"IAC WONT TXBINARY\" ");
strcat(szFSMInfoCh, "\r\n 执行动作 : send \"IAC WONT TXBINARY\" ");
strcat(szFSMInfoEn, "\r\n SendBinary = 0\n\r ");
strcat(szFSMInfoCh, "\r\n SendBinary = 0\n\r ");
}
}
CLI_TelFSMDegOut(szFSMInfoEn, szFSMInfoCh);
}
/*--------------------------------------------------------------*/
/* 接收到"IAC DO/DONT BINARY-TRANSMISSION" */
/* 根据当前的send BINARY-TRANSMISSION 选项状态 */
/* 如果和客户端要求相符,则不动作 */
/* 否则设置send BINARY-TRANSMISSION 选项 */
/* 应答客户端以"IAC WILL/WONT BINARY-TRANSMISSION" */
/*--------------------------------------------------------------*/
if ( pTermStruct->TelnetParam.SendBinary )
{
if ( pTermStruct->TelnetParam.OptionCmd == TCDO )
return 1 ;
}
else if ( pTermStruct->TelnetParam.OptionCmd == TCDONT )
return 1 ;
pTermStruct->TelnetParam.SendBinary = ! ( pTermStruct->TelnetParam.SendBinary ) ;
pTermStruct->szSendBuf[ pTermStruct->iSendLen++ ] = (_S8)TCIAC ;
if ( pTermStruct->TelnetParam.SendBinary )
pTermStruct->szSendBuf[ pTermStruct->iSendLen++ ] = (_S8)TCWILL ;
else
pTermStruct->szSendBuf[ pTermStruct->iSendLen++ ] = (_S8)TCWONT ;
pTermStruct->szSendBuf[ pTermStruct->iSendLen++ ] = (_S8)c ;
pTermStruct->szSendBuf[ pTermStruct->iSendLen ] = '\0' ;
CLI_SendToTerm ( pTermStruct ) ;
return 1 ;
}
/*==================================================================*/
/* 函数名 :CLI_DoTermType */
/* 函数功能 :处理telnet do/don't TERMINAL_TYPE选项 */
/* 输入参数 :PTerm_Data_S pTermStruct 任务数据 */
/* _U8 c 接收到的输入字符 */
/* 输出参数 :PTerm_Data_S pTermStruct 任务数据 */
/* 返回值 :_U32 1:成功 */
/* 调用函数 :CLI_DebugOutString ( ) */
/* 被调函数 : */
/*==================================================================*/
_U32 CLI_DoTermType ( PTerm_Data_S pTermStruct, _U8 c )
{
_S8 szFSMInfoEn[1024] = "";
_S8 szFSMInfoCh[1024] = "";
if(pTermStruct == G_NULL)
{
return 1;
}
if ( G_TRUE == m_bCliTelnetDebugOn )
{
if ( pTermStruct->iRecvLen == 1 )
{
strcat(szFSMInfoEn, "\r\n The telnet NVT FSM :");
strcat(szFSMInfoCh, "\r\n Telnet 网络虚拟终端状态机 :");
strcat(szFSMInfoEn, "\r\n the current state : TSWOPT");
strcat(szFSMInfoCh, "\r\n 当前状态 : TSWOPT");
strcat(szFSMInfoEn, "\r\n the input character : TERMTYPE");
strcat(szFSMInfoCh, "\r\n 输入字符 : TERMTYPE");
strcat(szFSMInfoEn, "\r\n the next state : TSDATA");
strcat(szFSMInfoCh, "\r\n 下一状态 : TSDATA");
if ( pTermStruct->TelnetParam.OptionCmd == TCWONT )
{
strcat(szFSMInfoEn, "\r\n the option negotiate command is : WONT");
strcat(szFSMInfoCh, "\r\n 选项协商命令: WONT");
strcat(szFSMInfoEn, "\r\n the action : send \"IAC DONT TERMTYPE\"\n\r");
strcat(szFSMInfoCh, "\r\n 执行动作 : send \"IAC DONT TERMTYPE\"\n\r");
}
else
{
strcat(szFSMInfoEn, "\r\n the option negotiate command is : WILL");
strcat(szFSMInfoCh, "\r\n 选项协商命令: WILL");
strcat(szFSMInfoEn, "\r\n the action : send \"IAC SB TERMTYPE SEND IAC SE\"\n\r");
strcat(szFSMInfoCh, "\r\n 执行动作 : send \"IAC SB TERMTYPE SEND IAC SE\"\n\r");
}
}
CLI_TelFSMDegOut(szFSMInfoEn, szFSMInfoCh);
}
/*--------------------------------------------------------------*/
/* 如果接收到"IAC WONT TERM-TYPE" */
/* 则发送 "IAC DONT TERM-TYPE" */
/*--------------------------------------------------------------*/
if ( pTermStruct->TelnetParam.OptionCmd == TCWONT )
{
pTermStruct->szSendBuf[ pTermStruct->iSendLen++ ] = (_S8)TCIAC ;
pTermStruct->szSendBuf[ pTermStruct->iSendLen++ ] = (_S8)TCDONT ;
pTermStruct->szSendBuf[ pTermStruct->iSendLen++ ] = (_S8)c ;
pTermStruct->szSendBuf[ pTermStruct->iSendLen ] = '\0' ;
CLI_SendToTerm ( pTermStruct ) ;
return 1 ;
}
/*--------------------------------------------------------------*/
/* 否则如果接收到 "IAC WILL TERM-TYPE" */
/* 则发送 "IAC SB TERMTYPE SEND IAC SE"开始子协商终端类型 */
/*--------------------------------------------------------------*/
else if ( pTermStruct->TelnetParam.OptionCmd == TCWILL )
{
pTermStruct->szSendBuf[ pTermStruct->iSendLen++ ] = (_S8)TCIAC ;
pTermStruct->szSendBuf[ pTermStruct->iSendLen++ ] = (_S8)TCSB ;
pTermStruct->szSendBuf[ pTermStruct->iSendLen++ ] = TOTERMTYPE ;
pTermStruct->szSendBuf[ pTermStruct->iSendLen++ ] = TT_SEND ;
pTermStruct->szSendBuf[ pTermStruct->iSendLen++ ] = (_S8)TCIAC ;
pTermStruct->szSendBuf[ pTermStruct->iSendLen++ ] = (_S8)TCSE ;
pTermStruct->szSendBuf[ pTermStruct->iSendLen ] = '\0' ;
CLI_SendToTerm ( pTermStruct ) ;
pTermStruct->TelnetParam.FirstTermType[0] = '\0' ;
pTermStruct->TelnetParam.TermType[0] = '\0' ;
return 1 ;
}
return 1 ;
}
/*==================================================================*/
/* 函数名 :CLI_SubTermType */
/* 函数功能 :进行终端类型选项子协商 */
/* 输入参数 :PTerm_Data_S pTermStruct 任务数据 */
/* _U8 c 接收到的输入字符 */
/* 输出参数 :PTerm_Data_S pTermStruct 任务数据 */
/* 返回值 :_U32 1:成功 */
/* 调用函数 :CLI_DebugOutString ( ) */
/* 被调函数 : */
/*==================================================================*/
_U32 CLI_SubTermType ( PTerm_Data_S pTermStruct, _U8 c )
{
_S8 szTmp[2] ;
_S8 szFSMInfoEn[1024] = "";
_S8 szFSMI
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -