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

📄 telnet.c

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