⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 telnet.c

📁 一种操作系统源码核
💻 C
📖 第 1 页 / 共 2 页
字号:
#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 + -