📄 telnet.c
字号:
#include "Page1.h"
#define MAX_USERNAME_LEN 8
#define MAX_PASSWORD_LEN 8
#define TELNET_SRAM_INDEX 0x05
#define TELNET_STATE_INIT 0
#define TELNET_STATE_USERNAME 1
#define TELNET_STATE_PASSWORD 2
#define TELNET_STATE_OK 3
#define MAX_RECV_LEN 48
#define MAX_PASSWORD_RETRY 3
#define CHAR_BACKSPACE 0x08
#define CHAR_SPACE 0x20
#define CHAR_STAR 0x2a
static XCHAR OPTIONS_VERSION_HI;
static XCHAR OPTIONS_VERSION_LO;
static PXCHAR OPTIONS_USERNAME;
static PXCHAR OPTIONS_PASSWORD;
static XCHAR _pTcbData[TCB_LENGTH];
static DCHAR _iCurMsgPos; //tcp data length
static XCHAR _iMsgFlag;
static XCHAR _pRecvPacket[MAX_RECV_LEN];
static DCHAR _iRecvLen;
static BOOLEAN _bDataAcked;
static XCHAR _iState;
static XCHAR _iRetry;
XCHAR Telnet_pUsername[MAX_USERNAME_LEN];
XCHAR Telnet_pPassword[MAX_PASSWORD_LEN];
//extern BOOLEAN Dhcp_bEnable;
//extern PXCHAR pTcpSendPacket;
//extern XCHAR Local_pMacAddress[HW_ALEN];
//extern XCHAR Local_pIPAddress[IP_ALEN];
//extern XCHAR Local_pSubnetMask[IP_ALEN];
//extern XCHAR Local_pRouteIP[IP_ALEN];
//extern BOOLEAN Udp_bOutputDebug;
//extern BOOLEAN Udp_bBroadcastDebug;
extern XCHAR Serial_Baud;
extern XCHAR Serial_Bits;
extern XCHAR Serial_Stops;
extern XCHAR Serial_Parity;
extern XCHAR SERIAL_SERVER_PORT_HIGH;
extern XCHAR SERIAL_SERVER_PORT_LOW;
extern XCHAR Remote_SERVER_PORT_HIGH;
extern XCHAR Remote_SERVER_PORT_LOW;
void _SendData();
void _SendEcho(UCHAR iLength, PXCHAR pData)
{
DCHAR i, iVal;
for (i = 0; i < iLength; i ++)
{
iVal = pData[i];
if (iVal == CHAR_BACKSPACE)
{
if (_iRecvLen > 0)
{
_iRecvLen --;
pTcpSendData[_iCurMsgPos] = CHAR_BACKSPACE; //p_SendData=6a42
pTcpSendData[_iCurMsgPos+1] = CHAR_SPACE;
pTcpSendData[_iCurMsgPos+2] = CHAR_BACKSPACE;
_iCurMsgPos += 3;
}
}
else // if (iVal >= 0x20 && iVal <= 0x7e)
{
if (_iState == TELNET_STATE_PASSWORD)
pTcpSendData[_iCurMsgPos] = CHAR_STAR;
else
pTcpSendData[_iCurMsgPos] = iVal;
_iCurMsgPos ++;
}
}
}
void _SendLine(char * pString)
{
DCHAR iLength;
iLength = p_strlen_c((PCCHAR)pString);
if (iLength)
{
p_strcpy_c2x((PXCHAR)(pTcpSendData+_iCurMsgPos), (PCCHAR)pString);
_iCurMsgPos += iLength;
}
}
void _SendNewLine(char * pString)
{
p_memcpy_c2x((PXCHAR)(pTcpSendData+_iCurMsgPos), (PCCHAR)"\r\n", 2);
_iCurMsgPos += 2;
_SendLine(pString);
}
void _SendString(PXCHAR pString)
{
DCHAR iLength;
iLength = p_strlen_x(pString);
if (iLength)
{
p_strcpy_x2x((PXCHAR)(pTcpSendData+_iCurMsgPos), pString);
_iCurMsgPos += iLength;
}
}
void _GetAll()
{
XCHAR pStr[30];
PXCHAR pStr1;
DCHAR i;
DCHAR iTemp;
iTemp = _iMsgFlag & 0x0f;
if (iTemp == 2)
{
_SendNewLine("version\t");//15
pStr[0] =OPTIONS_VERSION_HI + '0';
pStr[1] = '.';
pStr[2] = OPTIONS_VERSION_LO + '0';
pStr[3] = 0;
_SendString(pStr);
_SendNewLine("username\t"); //20
_SendString(OPTIONS_USERNAME);
_SendNewLine("password\t"); //20
_SendString(OPTIONS_PASSWORD);
_SendNewLine("mac address\t"); //31
for (i = 0; i < HW_ALEN; i ++)
{
p_itoa((PXCHAR)Local_pMacAddress, (PXCHAR)(pStr+i*2), 16);
}
for (i = 0; i < HW_ALEN*2; i ++)
{
if (pStr[i] == 0)
{
pStr[i] = pStr[i-1];
pStr[i-1] = ' ';
}
}
pStr[i] = 0;
_SendString(pStr);
_SendNewLine("local ip\t"); //28
IP2String((PXCHAR)(Local_pIPAddress), pStr); //Sdram_pDataCache save parameters pointer
_SendString(pStr);
_iMsgFlag--;
}
else if (iTemp == 1)
{
_SendNewLine("subnet mask\t");//31
IP2String((PXCHAR)(Local_pSubnetMask), pStr);
_SendString(pStr);
_SendNewLine("router ip\t");//29
IP2String((PXCHAR)(Local_pRouteIP), pStr);
_SendString(pStr);
_SendNewLine("SERIAL BAUD\t");//20
switch (Serial_Baud)
{
case '0':
pStr1="1200";
break;
case '1':
pStr1="2400";
break;
case '2':
pStr1="4800";
break;
case '3':
pStr1="9600";
break;
case '4':
pStr1="19200";
break;
}
_SendString(pStr1);
_SendNewLine("Parity\t"); //21
if (Serial_Parity==0)
pStr1="not Parity";
else if (Serial_Parity==1)
pStr1="odd Parity";
else if (Serial_Parity==2)
pStr1="even Parity";
_SendString(pStr1);
_iMsgFlag = 0x24;
}
}
void _SetIpAddress(UCHAR iLength, PXCHAR pData, PXCHAR pIpAddress)
{
XCHAR pIP[IP_ALEN];
if (String2IP(iLength, pData, pIP))
{
p_memcpy_x2x(pIpAddress, pIP, IP_ALEN);
}
else
{
_SendNewLine("invalid ip");
}
}
void _SetMacAddress(UCHAR iLength, PXCHAR pData)
{
XCHAR pMac[HW_ALEN];
if (String2MAC(iLength, pData, pMac))
{
p_memcpy_x2x(Local_pMacAddress, pMac, HW_ALEN);
}
else
{
_SendNewLine("invalid mac address");
}
}
void _Close()
{
TcpClose(_pTcbData);
_bDataAcked = TcpSend(_iCurMsgPos);
_iCurMsgPos = 0;
}
void _Exit()
{
_SendNewLine("exit without save");
_SendNewLine("goodbye");
_Close();
}
void _Write()
{
_SendNewLine("exit and save the configuration");
_SendNewLine("being root automatically");
_SendNewLine("goodbye");
_Close();
// Upgrade options here and restart
OnUpdateOptions();
}
void _SendPrompt()
{
DCHAR iTemp;
iTemp = _iMsgFlag & 0x0f;
if (iTemp == 4)
{
_SendNewLine("1. Show Configuration");
_SendNewLine("2. Mac Address Setup");
_SendNewLine("3.Ip Setup");
_SendNewLine("4.Subnet mask Setup");
_SendNewLine("5.Router Setup");
_SendNewLine("6.Remote IP");
_iMsgFlag--;
}
else if (iTemp == 3)
{
_SendNewLine("7.Peer Port");
_SendNewLine("8.Com Setup");
_SendNewLine("9.Debug Setup");
_SendNewLine(" ");
_SendNewLine("a. Change password");
_SendNewLine("b.Exit without Save");
_SendNewLine("c.Exit With Save");
_SendNewLine("Input Choise and Enter(0-9,a-c):");
}
else if(iTemp == 2)
{
_SendNewLine("0.Baud rate");
_SendNewLine("1.Parity");
_SendNewLine("2.Listen Port");
_SendNewLine(" ");
_SendNewLine("Input Choise and Enter(0-2):");
}
else if (iTemp == 1)
{
_SendNewLine("0. 1200");
_SendNewLine("1. 2400");
_SendNewLine("2. 4800");
_SendNewLine("3. 9600");
_SendNewLine("4. 19200");
_SendNewLine("5. 37500");
_SendNewLine(" ");
_SendNewLine("Input Choise and Enter(0-7):");
}
}
void _HandleCommand()
{
DCHAR iFirst;
DCHAR iTemp,i;
DSHORT iPort;
if (_iRecvLen == 0)
{
_iMsgFlag = 0x24;
_SendPrompt();
return;
}
iFirst = _pRecvPacket[0];
iTemp = _iMsgFlag & 0xf0;
if(iTemp==0x20)
{
iTemp = _iMsgFlag & 0x0f;
if (iTemp == 4 || iTemp == 3 ) //24,23
{
switch (iFirst)
{
case '0':
_iMsgFlag = 0x24;
_SendPrompt();
return;
case '1':
_iMsgFlag = 0x12;
_GetAll();
return;
// _GetVersion();
// _GetMacAddress();
case '2':
_SendNewLine("Please Input Local Mac Address:xx.xx.xx.xx.xx.xx");
_iMsgFlag=31;
return;
case '3':
_SendNewLine("Please Input Local Ip:xxx.xxx.xxx.xxx");
_iMsgFlag=32;
return;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -