📄 telnet.c
字号:
case '4':
_SendNewLine("Please Input New Subnet mask:xxx.xxx.xxx.xxx");
_iMsgFlag=33;
return;
case '5':
_SendNewLine("Please Input New Router Ip:xxx.xxx.xxx.xxx");
_iMsgFlag=34;
return;
case '6':
_SendNewLine("Please Input Remote Ip:xxx.xxx.xxx.xxx");
_iMsgFlag=35;
return;
case '7':
_SendNewLine("Please Input Remote Peer Port:xxxx");
_iMsgFlag=36;
return;
case '8':
_iMsgFlag=22;
return;
case '9':
_SendNewLine("Please Set Debug Enable/Diaable :y/n");
_iMsgFlag=39;
return;
case 'a':
_SendNewLine("Please Input New password:xxxxxx");
_iMsgFlag=30;
return;
case 'b':
_Exit();
return;
case 'c':
_Write();//write into rom
return;
default:
_SendNewLine("bad command");
break;
}
}
else if (iTemp == 2)
{
switch (iFirst)
{
case '0':
_iMsgFlag=21;
return;
case '1':
_SendNewLine("Please Set Parity and Enter:0=null,1=odd,2=even");
_iMsgFlag=37;
return;
case '2':
_SendNewLine("Please Set Com Listen Port number and Enter:xxxx");
_iMsgFlag=38;
return;
default:
_SendNewLine("bad command");
break;
}
}
else if (iTemp == 1)
{
if (iFirst<'8'&& iFirst>='0')
{
Serial_Baud=iFirst;
ChangeSerialConfig();
_iMsgFlag = 0x24;
_SendPrompt();
}
else
_SendNewLine("invalid Baud rate");
}
}
else if (iTemp == 0x30)
{
iTemp = _iMsgFlag & 0x0f;
switch (iTemp)
{
case 0:
p_strcpy_x2x(OPTIONS_PASSWORD, (PXCHAR)(_pRecvPacket + 13));
break;
case 1:
_SetMacAddress(_iRecvLen, (PXCHAR)_pRecvPacket);
break;
case 2:
_SetIpAddress(_iRecvLen , (PXCHAR)_pRecvPacket , (PXCHAR)Local_pIPAddress);
break;
case 3:
_SetIpAddress(_iRecvLen , (PXCHAR)_pRecvPacket , (PXCHAR)Local_pSubnetMask);
break;
case 4:
_SetIpAddress(_iRecvLen, (PXCHAR)_pRecvPacket, (PXCHAR)Local_pRouteIP);
break;
case 5:
_SetIpAddress(_iRecvLen, (PXCHAR)_pRecvPacket, (PXCHAR)Remote_pIPAddress);
break;
case 6:
iPort=Dec_atol(_pRecvPacket);
if (iPort>9999||iPort<1)
_SendNewLine("input Port Number invalid");
else
{
Remote_SERVER_PORT_HIGH=P_HIBYTE(iPort);
Remote_SERVER_PORT_LOW=P_LOBYTE(iPort);
}
break;
case 7:
i = _pRecvPacket[0] - '0';
if (_pRecvPacket[0] < '0' ||_pRecvPacket[0] > '9')
break;
if (i!= 1 || i!=2 )
i=0;
Serial_Parity=i;
ChangeSerialConfig();
break;
case 8:
iPort=Dec_atol(_pRecvPacket);
if (iPort>9999||iPort<1)
_SendNewLine("input Port Number invalid");
else
{
SERIAL_SERVER_PORT_HIGH=P_HIBYTE(iPort);
SERIAL_SERVER_PORT_LOW=P_LOBYTE(iPort);
}
break;
case 9:
if (iFirst=='y')
{
Udp_bOutputDebug=1;
Udp_bBroadcastDebug=1;
}
else if (iFirst=='n')
{
Udp_bOutputDebug=0;
Udp_bBroadcastDebug=0;
}
break;
}
_iMsgFlag = 0x24;
_SendPrompt();
}
}
void _StartTelnet()
{
_iState = TELNET_STATE_USERNAME;
_SendLine("Serial TcpLink settings");
_SendNewLine("username:");
}
void _RunTelnet()
{
DCHAR iIndex;
PXCHAR pData;
pData=Adapter_pReceiveTcpData;//point receive tcp packet
iIndex = 0;
while (iIndex < Adapter_iReceiveLen)
{
if ((pData[iIndex] == 0x0d && pData[iIndex+1] == 0x0a) ||
(pData[iIndex] == 0x0a && pData[iIndex+1] == 0x0d))
{
_pRecvPacket[_iRecvLen+iIndex] = 0; //pRecvPacket=0x6371
if (_iState == TELNET_STATE_USERNAME)
{
if (_iRecvLen < MAX_USERNAME_LEN)
{
p_strcpy_x2x(Telnet_pUsername, _pRecvPacket);
}
else
{
Telnet_pUsername[0] = 0;
}
_SendNewLine("password:");
_iState = TELNET_STATE_PASSWORD;
}
else if (_iState == TELNET_STATE_PASSWORD)
{
if (_iRecvLen < MAX_PASSWORD_LEN)
{
p_strcpy_x2x(Telnet_pPassword, _pRecvPacket);
}
else
{
Telnet_pPassword[0] = 0;
}
// SdramReadOptions();
if (p_strcmp_x2x(Telnet_pUsername, OPTIONS_USERNAME) != 0 ||
p_strcmp_x2x(Telnet_pPassword, OPTIONS_PASSWORD) != 0)
{
_iRetry ++;
if (_iRetry >= MAX_PASSWORD_RETRY)
{
_Close();
}
else
{
_SendNewLine("login error!");
_SendNewLine("username:");
_iState = TELNET_STATE_USERNAME;
}
}
else
{
_iMsgFlag =24;
_SendPrompt();
_iRetry = 0;
_iState = TELNET_STATE_OK;
}
}
if (_iState == TELNET_STATE_OK)
_HandleCommand();
_iRecvLen = 0;
return;
}
else
{
if (pData[iIndex] != CHAR_BACKSPACE)
{
if ((_iRecvLen + iIndex) < MAX_RECV_LEN)
{
_pRecvPacket[_iRecvLen] = pData[iIndex]; //receive packet to pRecvPacket
_iRecvLen ++;
}
}
iIndex ++;
}
}
_SendEcho(Adapter_iReceiveLen, pData);
}
void TelnetInitialize()
{
// Tcp init
_bDataAcked = TcbInit(_pTcbData, TELNET_SERVER_PORT_HIGH, TELNET_SERVER_PORT_LOW);
OPTIONS_USERNAME="swgs" ;
OPTIONS_PASSWORD="1111";
_iCurMsgPos = 0;
_iMsgFlag = 0;
_iRecvLen = 0;
_iState=TELNET_STATE_INIT;
}
BOOLEAN TelnetRun()
{
if (!TcbCheckData(_pTcbData))//0x6352 _pTcbData enscap Tcb connect info
return FALSE;
SramRead(pTcpSendPacket,TELNET_SRAM_INDEX,1,0);//restore telnet tcp data
TcbRun(_pTcbData);
// if (Tcp_bAcceptEvent)
// {
// TcpPrepareData(Sdram_pDataCache2);
// Tcp_bAcceptEvent = FALSE;
// }
if (Tcp_bConnectEvent)
{
_StartTelnet();
Tcp_bConnectEvent = FALSE;
}
if (Tcp_bDataEvent)
{
// Handle h.245 messages here
_RunTelnet();
Tcp_bDataEvent = FALSE;
}
// if (Tcp_bCloseEvent)
// {
// TcpClose(_pTcbData); // Just call TcpClose to ensure, it is ok to call it repeatly
// Tcp_bCloseEvent = FALSE;
// }
_bDataAcked = TcpSend(_iCurMsgPos);//
_iCurMsgPos = 0;
if (_bDataAcked)
{
Ne2000WaitPacket();
_SendData();
}
SramWrite(pTcpSendPacket,TELNET_SRAM_INDEX);
if (Tcp_bCloseEvent)
{
Tcp_bCloseEvent = FALSE;
TelnetInitialize();
}
return TRUE;
}
void TelnetHandleTimer()
{
if (_bDataAcked) return; //send success
SramRead(pTcpSendPacket,TELNET_SRAM_INDEX,1,0);
if (TcbHandleTimer(_pTcbData))
{
return;
}
// Handle time out failure
//DebugVal(0x1058)
_Close();
TelnetInitialize(); // re-initialize
}
void _SendData()
{
DCHAR iTemp;
if ((_iMsgFlag & 0x0f) != 0)
{
iTemp = _iMsgFlag & 0xf0;
if (iTemp == 0x10)
_GetAll();
else if (iTemp == 0x20)
_SendPrompt();
else
_iMsgFlag = 0;
}
_bDataAcked = TcpSend(_iCurMsgPos);
_iCurMsgPos = 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -