亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? cli_termtelnet.c

?? 命令行在嵌入式系統的實現
?? C
?? 第 1 頁 / 共 2 頁
字號:
/************************************************************************
Copyright 200X - 200X+1.

filename     : CLI_Term.c

description  : 1、實現命令行操作終端的任務管理
               2、終端任務數據中的字符串編輯緩沖的處理

author       : Woodhead

modification : Woodhead    create              2004-12-07
************************************************************************/

#include "Ros.h"
#include "CLI_Private.inc"
#include "CLI_Io.h"
#include "CLI_User.inc"
#include "CLI_Intp.inc"
#include "CLI_Telnet.inc"
#include "ML.h"
#include "Sys_Ml.h"
#include "Cli_MlPriv.h"
#include "cm_sock.h"
#include "Board_Pub.h"
#include "Config\Cli_ConfigGlbVar.h"

extern _VOID CLI_MMLTaskInit(PTerm_Data_S pTermStruct);


#if CLI_TELNET_SUPPORT


/*telnet server 初始化標志  只在本文件使用*/
static _U32 m_ulTelnetInitFlag = G_FALSE;


/*==================================================================*/
/*      函數名      :CLI_TelnetTasksCreat                           */
/*      函數功能    :創建與Telnet相關的任務.                               */
/*      輸入參數    :無                                             */
/*      輸出參數    :無                                             */
/*      返回值      :_U32  0:   初始化成功  1:    初始化失敗        */
/*      被調函數    :                                               */
/*==================================================================*/
_U32 CLI_TelnetTasksCreat(_VOID)
{
    _U32 ulRet;
    _U32 ulArg[2] = {0, 0};
    _U32 ulTaskID;
    _U32 i;
    _S8  szTaskName[32];

    /* telnet服務器任務創建 */
    ulRet = ROS_SelfTaskCreate(PID_CLI,  "CLI_TASK_TELSERVER",
                    EN_ROS_TASK_PRIORITY_NORMAL,
                    ROS_TASK_STACK_SIZE_DEFAULT,
                    ulArg, CLI_TelnetServer, &ulTaskID);
    CLI_ASSURE_OR_FAIL(ulRet == G_SUCCESS);


    /* Note: 第一個任務為命令透傳處理任務(MML) */
    /* ??? LingJian_Tailor */
    #if 0
    ulArg[0] = 1;
    EOS_Sprintf(szTaskName, "CLI_TASK_TEL%d", i);
    ulRet = ROS_SelfTaskCreate(PID_CLI, szTaskName,
                    EN_ROS_TASK_PRIORITY_NORMAL,
                    ROS_TASK_STACK_SIZE_DEFAULT,
                    ulArg, CLI_TelnetTask, &ulTaskID );
    CLI_ASSURE_OR_FAIL(ulRet == G_SUCCESS);
    #endif

    for (i = FIRST_TELNET_DATA; i < m_ulCliMaxOnlineUser; i++)
    {
        ulArg[0] = i;
        EOS_Sprintf(szTaskName, "CLI_TASK_TEL%d", i);
        ulRet = ROS_SelfTaskCreate(PID_CLI, szTaskName,
                        EN_ROS_TASK_PRIORITY_NORMAL,
                        ROS_TASK_STACK_SIZE_DEFAULT,
                        ulArg, CLI_TelnetTask, &ulTaskID );
        CLI_ASSURE_OR_FAIL(ulRet == G_SUCCESS);
    }

    return G_SUCCESS;

}


/*==================================================================*/
/*      函數名      :CLI_TelnetServerInit                           */
/*      函數功能    :初始化telnet連接                               */
/*      輸入參數    :無                                             */
/*      輸出參數    :無                                             */
/*      返回值      :_U32  0:   初始化成功  1:    初始化失敗        */
/*      被調函數    :                                               */
/*==================================================================*/
_U32 CLI_TelnetServerInit (_S32 *iSocketServer)
{
    struct sockaddr_in sServerAddr ;

    /* 創建一TCP socket連接 */
    if ( ( *iSocketServer = socket ( AF_INET, SOCK_STREAM, 0 ) ) < 0 )
    {
        MT_ERRLOG(0);
        return G_FAILURE ;
    }

    /* 設置服務器端端口,并與套接字綁定 */
    memset ( ( _VOID * )&sServerAddr, 0, sizeof(sServerAddr) ) ;
    sServerAddr.sin_family = AF_INET ;          /* TCP - 數據流     */
    sServerAddr.sin_port = (_U16)htons(TELNETPORT);   /* Telnet 端口號 23 */
    sServerAddr.sin_addr.s_addr = (_U32)htonl(INADDR_ANY) ; /* 任意客戶IP地址 */

    if ( bind ( *iSocketServer, ( struct sockaddr * )&sServerAddr,
                   sizeof( sServerAddr ) ) != 0 )
    {
        urp_close(*iSocketServer);
        MT_ERRLOG(0);
        return G_FAILURE ;
    }

    /* 偵聽TELNET CLIENT的連接請求 */
    if ( listen ( *iSocketServer, (int)g_ul_CFG_CLI_MAX_TELNET_CLIENT_NUM) != 0 )
    {
        urp_close(*iSocketServer);
        MT_ERRLOG(0);
        return G_FAILURE ;
    }

    /* 建立TELNET狀態機 */
    if(m_ulTelnetInitFlag == G_FALSE)
    {
        CLI_FsmBuild ( ) ;
        m_ulTelnetInitFlag = G_TRUE;
    }

    return G_SUCCESS ;
}

/*********************************************************************/
/* 函數名稱 : CLI_TelnetInit()                                       */
/* 函數功能 : telnet任務初始化函數                                   */
/* 輸入參數 : pTermStruct  telnet終端任務數據                        */
/* 輸出參數 : pTermStruct  telnet終端任務數據                        */
/* 返回     : 成功/失敗                                              */
/* 上層函數 :                                                        */
/* 創建者   :                                                        */
/* 修改記錄 :                                                        */
/*********************************************************************/
_U32 CLI_TelnetInit(PTerm_Data_S pTermStruct)
{
    _S32    iOptVal,iOptLen;

    iOptVal = 1 ;
    iOptLen = sizeof ( iOptLen ) ;
    setsockopt ( pTermStruct->iSocket, SOL_SOCKET,  SO_OOBINLINE, ( _S8 * ) & iOptVal,iOptLen ) ;

    /* telnet server的TCP_NODELAY選項, 默認應該關閉, 即 iOptVal = 0 */
    iOptVal = 0 ;
    iOptLen = sizeof ( iOptLen ) ;
    setsockopt ( pTermStruct->iSocket, IPPROTO_TCP, 0x01,  ( _S8 * ) & iOptVal, iOptLen ) ;

    CLI_NegotiateOption ( pTermStruct) ;

    return G_SUCCESS;
}
/*==================================================================*/
/*      函數名      :CLI_TelnetServer                               */
/*      函數功能    :Telnet Server任務函數體                        */
/*      輸入參數    :無                                             */
/*      輸出參數    :無                                             */
/*      返回值      :無                                             */
/*      被調函數    :                                               */
/*==================================================================*/
_VOID CLI_TelnetServer( _U32 ulArg1, _U32 ulArg2)
{
    struct sockaddr_in sClientAddr ;
    _S32 iSocket;
    _S32 iNameLen, iSocketServer;
    _U32 ulCount;
    _S8 szTelnetIp[20];

    (_VOID)ulArg1;
    (_VOID)ulArg2;

    /*--------------------------------------------------------------*/
    /* 初始化telnet sever                                           */
    /*--------------------------------------------------------------*/
    while ( CLI_TelnetServerInit(&iSocketServer) != G_SUCCESS )
    {
        DBG_Out(PID_CLI, CLI_DBGOUT_NOTE, "\r\n CLI: TelnetServer Initial failed!");
        CLI_DELAY(200);
    }

    iNameLen = sizeof( sClientAddr ) ;
    for ( ; ; )
    {
        /* 等待接收telnet client的連接                              */
        if( ( iSocket = accept( (int)iSocketServer, ( struct sockaddr * )&sClientAddr,
                    (int*)&iNameLen ) ) <= 0 )
        {
            CLI_DELAY(10);
            continue ;
        }

        _IPAddrToStr(sClientAddr.sin_addr.s_addr, &szTelnetIp[0]) ;
        DBG_Out(PID_CLI, MT_DBGOUT_NOTE,
                "\r\n CLI: 客戶端 %s 連接到本機.", szTelnetIp);

        /* 檢驗客戶端ip地址的合法性(是否在telnet訪問允許列表內)*/
        #if MULTI_DEVICE_SUPPORT
    if (m_CliIsMainDevice == G_TRUE)
        #endif
        if( CLI_AclCheck(sClientAddr.sin_addr.s_addr) != G_SUCCESS )
        {
            IO_SendToAllTerm(CLI_TELNET_CLIENT_REFUSED, szTelnetIp);
            CLI_DELAY(200);
            urp_close ( iSocket ) ;
            continue ;
        }

        for(ulCount = FIRST_TELNET_DATA; ulCount < m_ulCliMaxOnlineUser; ulCount++)
        {
            if (m_TDTable[ulCount].pTermStruct->ucTermStatus == TERM_SLEEPING
             && m_TDTable[ulCount].pTermStruct->iSocket == SOCKET_NOT_INITIAL)
                break;
        }

        if(ulCount == m_ulCliMaxOnlineUser)
        {
            send ( (int)iSocket, (char *)"\n\r  Too many telnet users!", 26, 0 ) ;
            CLI_DELAY(100);
            urp_close ( iSocket ) ;
            continue ;
        }

        /* 激活該任務的狀態 */
        m_TDTable[ulCount].pTermStruct->iSocket = iSocket;
        m_TDTable[ulCount].pTermStruct->ulClientIP = sClientAddr.sin_addr.s_addr;
        CLI_SetTermStatus(m_TDTable[ulCount].pTermStruct, TERM_ACTIVE);

    }
}

/*==================================================================*/
/*      函數名      :CLI_ReceiveFromTelnet                          */
/*      函數功能    :從telnet客戶端接收數據                         */
/*      輸入參數    :pTermStruct 任務數據                           */
/*                   ulSecond 接收超時時間                          */
/*      輸出參數    :無                                             */
/*      返回值      :無                                             */
/*==================================================================*/
_U32 CLI_ReceiveFromTelnet ( PTerm_Data_S pTermStruct, _U32 ulSecond)
{
    fd_set SocketSet ;
    struct timeval stWait ;
    _S32 lErr =0;

    if ( G_NULL == pTermStruct || ulSecond > DEADLINE_SHORT)
    {
        CLI_RECORD(CLI_STAT_RECEIVE_ERR);
        return G_FAILURE ;
    }

    stWait.tv_usec = 0 ;
    stWait.tv_sec  = (_S32)ulSecond;

    FD_ZERO ( &SocketSet ) ;
    FD_SET ( (_U32)pTermStruct->iSocket, &SocketSet ) ;

    CLI_RECORD(CLI_STAT_CLIENT_GOTO_SELECT);
    lErr = urp_select ( FD_SETSIZE, &SocketSet, ( fd_set * ) 0, ( fd_set * ) 0, &stWait );
    CLI_RECORD(CLI_STAT_CLIENT_OVER_SELECT);
    if ( lErr > 0 )
    {
        /* 接收來自telnet客戶端的數據 */
        FD_ZERO ( &SocketSet ) ;

        if (TERM_SEM_P(pTermStruct))
        {
            CLI_RECORD(CLI_STAT_SEM_P);
            return G_FAILURE;
        }

        CLI_RECORD(CLI_STAT_CLIENT_GOTO_RECV);
        pTermStruct->iRecvLen = recv ( pTermStruct->iSocket, pTermStruct->szRecvBuf,  TERM_IO_BUFFER, 0) ;
        CLI_RECORD(CLI_STAT_CLIENT_OVER_RECV);

        if(TERM_SEM_V(pTermStruct))
        {
            CLI_RECORD(CLI_STAT_SEM_V);
            DBG_Out(PID_CLI, CLI_DBGOUT_ERR, "\r\n Sem_P of Term %d Failed!", pTermStruct->ulTermId);
        }

        if (pTermStruct->iRecvLen> 0 )
        {
            return G_SUCCESS ;
        }
        DBG_Out(PID_CLI, CLI_DBGOUT_NOTE, "\r\n CLI_ReceiveFromeTelnet:: recv() Failed!");
    }
    else if(lErr == 0)
    {
        CLI_RECORD(CLI_STAT_CLIENT_RECV_TIMEOUT);
        return G_FAILURE;
    }

    CLI_SetTermStatus(pTermStruct, TERM_SLEEPING);
    CLI_RECORD(CLI_STAT_CLIENT_RECV_CLOSED);

    return G_FAILURE ;
}

/*==================================================================*/
/*      函數名      :CLI_SendToTelnet                               */
/*      函數功能    :向telnet客戶端發送數據                         */
/*      輸入參數    :PTerm_Data_S pTermStruct 任務數據              */
/*                   PTerm_Data_S pTermStruct 任務數據              */
/*      輸出參數    :無                                             */
/*      返回值      :_U32   0:  發送成功   1:   發送失敗            */
/*      被調函數    :                                               */
/*==================================================================*/
_U32 CLI_SendToTelnet ( PTerm_Data_S pTermStruct )
{

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人高清免费观看| 欧美一区二区三区爱爱| 色狠狠色狠狠综合| 欧美一卡二卡在线| 国产日产欧美一区| 亚洲一区二区三区四区不卡| 日本亚洲最大的色成网站www| 国产伦精一区二区三区| 色老头久久综合| 精品999在线播放| 亚洲综合成人在线视频| 久久超级碰视频| 欧美性做爰猛烈叫床潮| 国产视频一区不卡| 亚洲成人免费在线| 成人av综合在线| 日韩亚洲欧美高清| 亚洲精品老司机| 成人av在线电影| 精品国免费一区二区三区| 亚洲一区二区美女| av色综合久久天堂av综合| 久久久99精品免费观看不卡| 婷婷久久综合九色综合绿巨人| 成人高清视频在线| 久久久.com| 九九**精品视频免费播放| 欧美日韩国产一区| 一区二区三区成人在线视频| 99国内精品久久| 中文字幕国产精品一区二区| 国产精品亚洲一区二区三区在线| 日韩精品一区二区三区四区视频| 午夜a成v人精品| 91福利资源站| 一区二区三区在线观看国产| 91亚洲永久精品| 国产精品第五页| av一本久道久久综合久久鬼色| 中文字幕成人网| 成人高清视频在线| 综合亚洲深深色噜噜狠狠网站| 成人国产一区二区三区精品| 国产精品天干天干在线综合| 成人少妇影院yyyy| 亚洲国产激情av| 97精品国产97久久久久久久久久久久| 亚洲欧洲99久久| eeuss鲁一区二区三区| 国产精品视频看| 97精品久久久午夜一区二区三区 | 亚洲三级免费电影| 丁香激情综合国产| 中国av一区二区三区| av中文字幕一区| 亚洲精品ww久久久久久p站| 97久久精品人人做人人爽50路| 日韩毛片精品高清免费| 99re8在线精品视频免费播放| 一区二区三区 在线观看视频| 欧美午夜电影一区| 狠狠狠色丁香婷婷综合激情| 久久久午夜电影| 国v精品久久久网| 亚洲黄色尤物视频| 91麻豆精品国产91久久久更新时间| 日本亚洲天堂网| 26uuu国产在线精品一区二区| 丁香网亚洲国际| 亚洲天堂a在线| 欧美日韩成人高清| 久久不见久久见免费视频7| 日本一区免费视频| 色天使久久综合网天天| 日韩vs国产vs欧美| 久久久91精品国产一区二区三区| 色系网站成人免费| 日本免费在线视频不卡一不卡二| 亚洲国产精华液网站w| 欧美日韩一区精品| 国产伦理精品不卡| 亚洲午夜视频在线观看| 欧美精品一区二区三区蜜臀| 成人高清视频免费观看| 午夜不卡av免费| 欧美精品一区二区三区四区| 色网站国产精品| 国内外成人在线视频| 亚洲精品水蜜桃| 2017欧美狠狠色| 欧美综合视频在线观看| 黑人巨大精品欧美黑白配亚洲 | 精品人在线二区三区| www.久久久久久久久| 美国av一区二区| 有码一区二区三区| 欧美一级黄色录像| 欧美在线不卡一区| 粉嫩久久99精品久久久久久夜| 日本欧美肥老太交大片| 亚洲精品成a人| 国产亚洲成aⅴ人片在线观看 | 亚洲综合色区另类av| 久久这里都是精品| 欧美一区二区三区婷婷月色| 成人久久视频在线观看| 国产最新精品精品你懂的| 午夜影视日本亚洲欧洲精品| 亚洲欧美一区二区不卡| 欧美激情在线一区二区三区| 精品99999| 日韩欧美一区电影| 91精品国产综合久久久久| 在线观看亚洲一区| 色婷婷综合中文久久一本| 成人高清视频免费观看| 懂色av噜噜一区二区三区av| 国产综合成人久久大片91| 日韩电影在线观看网站| 亚洲成av人片在www色猫咪| 亚洲一区二区三区四区在线| 亚洲无人区一区| 午夜日韩在线观看| 亚洲国产精品天堂| 日韩激情一二三区| 麻豆精品一二三| 老司机午夜精品| 久久爱www久久做| 国产在线精品国自产拍免费| 国产大陆a不卡| 成人精品视频一区二区三区尤物| 成人免费高清在线观看| 91在线小视频| 色琪琪一区二区三区亚洲区| 欧洲一区二区三区免费视频| 欧美自拍偷拍午夜视频| 欧美日韩国产综合一区二区三区| 在线不卡一区二区| 日韩欧美一级精品久久| 久久网站热最新地址| 国产欧美一区二区三区在线老狼| 国产精品久久久久久久蜜臀 | 成人国产精品视频| 91美女在线观看| 欧美日韩一区二区三区免费看| 欧美日韩国产小视频在线观看| 日韩欧美www| 国产精品久久久久久久久快鸭| 一区二区三区四区蜜桃| 热久久一区二区| 国产精品77777竹菊影视小说| 91在线视频在线| 欧美日韩国产免费| 久久久久久毛片| 一区二区三区在线高清| 狠狠色丁香久久婷婷综合_中 | 激情综合一区二区三区| 风间由美性色一区二区三区| 在线免费一区三区| 精品国产3级a| 玉足女爽爽91| 国产麻豆精品在线观看| 色综合咪咪久久| 精品久久99ma| 亚洲一级电影视频| 粉嫩av一区二区三区| 欧美高清性hdvideosex| 欧美国产精品一区| 天天操天天综合网| av电影在线观看完整版一区二区| 欧美精品乱码久久久久久按摩| 国产精品美日韩| 美女国产一区二区| 在线欧美日韩精品| 国产精品久久看| 国产最新精品免费| 51午夜精品国产| 亚洲欧美日韩国产一区二区三区| 毛片av一区二区| 91国偷自产一区二区三区观看 | av电影天堂一区二区在线观看| 3atv一区二区三区| 综合激情成人伊人| 国产精品一区在线观看乱码| 欧美在线一区二区| 亚洲日穴在线视频| 国产69精品一区二区亚洲孕妇| 欧美一区中文字幕| 亚洲国产日产av| 91女神在线视频| 久久精品视频一区二区三区| 天堂蜜桃91精品| 91国模大尺度私拍在线视频| 中文字幕永久在线不卡| 懂色av中文字幕一区二区三区| 欧美va亚洲va| 麻豆91精品91久久久的内涵| 欧美久久一二三四区| 午夜久久久久久电影| 91免费观看视频在线|