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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? cli_termtelnet.c

?? 命令行在嵌入式系統(tǒng)的實現(xiàn)
?? C
?? 第 1 頁 / 共 2 頁
字號:
/************************************************************************
Copyright 200X - 200X+1.

filename     : CLI_Term.c

description  : 1、實現(xiàn)命令行操作終端的任務(wù)管理
               2、終端任務(wù)數(shù)據(jù)中的字符串編輯緩沖的處理

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 初始化標(biāo)志  只在本文件使用*/
static _U32 m_ulTelnetInitFlag = G_FALSE;


/*==================================================================*/
/*      函數(shù)名      :CLI_TelnetTasksCreat                           */
/*      函數(shù)功能    :創(chuàng)建與Telnet相關(guān)的任務(wù).                               */
/*      輸入?yún)?shù)    :無                                             */
/*      輸出參數(shù)    :無                                             */
/*      返回值      :_U32  0:   初始化成功  1:    初始化失敗        */
/*      被調(diào)函數(shù)    :                                               */
/*==================================================================*/
_U32 CLI_TelnetTasksCreat(_VOID)
{
    _U32 ulRet;
    _U32 ulArg[2] = {0, 0};
    _U32 ulTaskID;
    _U32 i;
    _S8  szTaskName[32];

    /* telnet服務(wù)器任務(wù)創(chuàng)建 */
    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: 第一個任務(wù)為命令透傳處理任務(wù)(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;

}


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

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

    /* 設(shè)置服務(wù)器端端口,并與套接字綁定 */
    memset ( ( _VOID * )&sServerAddr, 0, sizeof(sServerAddr) ) ;
    sServerAddr.sin_family = AF_INET ;          /* TCP - 數(shù)據(jù)流     */
    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狀態(tài)機 */
    if(m_ulTelnetInitFlag == G_FALSE)
    {
        CLI_FsmBuild ( ) ;
        m_ulTelnetInitFlag = G_TRUE;
    }

    return G_SUCCESS ;
}

/*********************************************************************/
/* 函數(shù)名稱 : CLI_TelnetInit()                                       */
/* 函數(shù)功能 : telnet任務(wù)初始化函數(shù)                                   */
/* 輸入?yún)?shù) : pTermStruct  telnet終端任務(wù)數(shù)據(jù)                        */
/* 輸出參數(shù) : pTermStruct  telnet終端任務(wù)數(shù)據(jù)                        */
/* 返回     : 成功/失敗                                              */
/* 上層函數(shù) :                                                        */
/* 創(chuàng)建者   :                                                        */
/* 修改記錄 :                                                        */
/*********************************************************************/
_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選項, 默認應(yīng)該關(guān)閉, 即 iOptVal = 0 */
    iOptVal = 0 ;
    iOptLen = sizeof ( iOptLen ) ;
    setsockopt ( pTermStruct->iSocket, IPPROTO_TCP, 0x01,  ( _S8 * ) & iOptVal, iOptLen ) ;

    CLI_NegotiateOption ( pTermStruct) ;

    return G_SUCCESS;
}
/*==================================================================*/
/*      函數(shù)名      :CLI_TelnetServer                               */
/*      函數(shù)功能    :Telnet Server任務(wù)函數(shù)體                        */
/*      輸入?yún)?shù)    :無                                             */
/*      輸出參數(shù)    :無                                             */
/*      返回值      :無                                             */
/*      被調(diào)函數(shù)    :                                               */
/*==================================================================*/
_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訪問允許列表內(nèi))*/
        #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 ;
        }

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

    }
}

/*==================================================================*/
/*      函數(shù)名      :CLI_ReceiveFromTelnet                          */
/*      函數(shù)功能    :從telnet客戶端接收數(shù)據(jù)                         */
/*      輸入?yún)?shù)    :pTermStruct 任務(wù)數(shù)據(jù)                           */
/*                   ulSecond 接收超時時間                          */
/*      輸出參數(shù)    :無                                             */
/*      返回值      :無                                             */
/*==================================================================*/
_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客戶端的數(shù)據(jù) */
        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 ;
}

/*==================================================================*/
/*      函數(shù)名      :CLI_SendToTelnet                               */
/*      函數(shù)功能    :向telnet客戶端發(fā)送數(shù)據(jù)                         */
/*      輸入?yún)?shù)    :PTerm_Data_S pTermStruct 任務(wù)數(shù)據(jù)              */
/*                   PTerm_Data_S pTermStruct 任務(wù)數(shù)據(jù)              */
/*      輸出參數(shù)    :無                                             */
/*      返回值      :_U32   0:  發(fā)送成功   1:   發(fā)送失敗            */
/*      被調(diào)函數(shù)    :                                               */
/*==================================================================*/
_U32 CLI_SendToTelnet ( PTerm_Data_S pTermStruct )
{

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一级理论片| 亚洲欧美另类小说| 日韩美女精品在线| 麻豆91免费观看| 色综合视频在线观看| 欧美变态口味重另类| 一个色综合av| 91在线观看高清| 精品福利视频一区二区三区| 一区二区三区中文字幕精品精品 | 日韩西西人体444www| 成人欧美一区二区三区小说| 国产一区二区三区免费| 欧美午夜在线观看| 国产精品理伦片| 国产成人精品免费网站| 日韩欧美国产系列| 亚洲a一区二区| 欧美中文字幕不卡| 亚洲精品高清在线| 91免费国产在线观看| 欧美国产欧美综合| 国产剧情一区二区| 久久伊人中文字幕| 精品一区中文字幕| 精品国产污污免费网站入口| 日韩黄色一级片| 欧美二区三区91| 亚洲高清在线精品| 欧美色爱综合网| 亚洲一区二区三区视频在线| 色www精品视频在线观看| 国产精品久久久久精k8 | 国产日韩欧美制服另类| 男男成人高潮片免费网站| 欧美丰满少妇xxxxx高潮对白| 亚洲成人综合网站| 91精品国产综合久久久久久漫画 | 丝袜诱惑亚洲看片| 337p亚洲精品色噜噜噜| 日本美女视频一区二区| 欧美卡1卡2卡| 热久久一区二区| 精品国产91九色蝌蚪| 国产一区二区三区| 国产精品乱人伦中文| 97se亚洲国产综合在线| 亚洲专区一二三| 日韩一区二区三区电影在线观看 | 国产日韩欧美综合在线| 成人小视频免费观看| 亚洲天堂中文字幕| 欧美欧美欧美欧美| 精品影视av免费| 一区在线观看视频| 欧美色国产精品| 国产在线精品国自产拍免费| 国产亚洲一二三区| 在线观看91精品国产入口| 亚洲成人av一区| 久久久久国色av免费看影院| 成人18精品视频| 亚洲第一二三四区| 久久久久成人黄色影片| 欧洲国内综合视频| 狠狠狠色丁香婷婷综合激情| 国产精品欧美一区喷水| 欧美日韩精品一区二区在线播放 | 亚洲妇女屁股眼交7| 日韩欧美中文字幕一区| 成人av动漫网站| 午夜精品福利一区二区蜜股av| 久久久国产一区二区三区四区小说 | 亚洲欧美一区二区视频| 欧美疯狂做受xxxx富婆| 99re亚洲国产精品| 国产真实精品久久二三区| 亚洲精品少妇30p| 国产色91在线| 日韩欧美一区二区三区在线| 一本色道a无线码一区v| 国产精品一区专区| 亚洲123区在线观看| 综合久久一区二区三区| 日韩精品一区二区三区四区| 日本韩国一区二区三区| 国产成人免费在线观看不卡| 亚洲成a人片综合在线| 国产精品成人午夜| 久久影视一区二区| 欧美大片一区二区| 欧美日韩国产系列| 色婷婷综合中文久久一本| 国产精品自拍av| 另类小说欧美激情| 五月婷婷色综合| 一区二区三区中文字幕在线观看| 欧美极品少妇xxxxⅹ高跟鞋| 日韩视频一区二区三区在线播放 | 欧美成人艳星乳罩| 在线播放中文一区| 欧美日韩一区二区不卡| 91福利视频网站| 91一区二区在线观看| av电影天堂一区二区在线观看| 国产在线精品免费| 国产自产视频一区二区三区| 男男成人高潮片免费网站| 日韩1区2区3区| 午夜电影一区二区三区| 五月激情六月综合| 亚洲成av人影院在线观看网| 一级中文字幕一区二区| 亚洲午夜精品17c| 一区二区三区资源| 亚洲成人av一区二区三区| 亚洲成人福利片| 亚洲国产美女搞黄色| 亚洲国产一区二区在线播放| 亚洲国产成人精品视频| 亚洲大片在线观看| 麻豆91精品91久久久的内涵| 激情图片小说一区| 国产麻豆91精品| 波多野结衣精品在线| 色悠悠久久综合| 欧美日韩成人一区二区| 在线播放欧美女士性生活| 日韩限制级电影在线观看| 精品国产三级电影在线观看| 久久久久综合网| 最新国产精品久久精品| 亚洲成人免费在线观看| 美女国产一区二区三区| 粉嫩在线一区二区三区视频| 91亚洲大成网污www| 欧美日韩和欧美的一区二区| 91精品国产aⅴ一区二区| 久久亚洲精品小早川怜子| 最好看的中文字幕久久| 亚洲成a人片在线观看中文| 国精产品一区一区三区mba视频| 成人中文字幕合集| 在线精品视频小说1| 日韩欧美电影一二三| 中文字幕第一区二区| 亚洲国产一区二区a毛片| 国产在线精品一区在线观看麻豆| a美女胸又www黄视频久久| 8x8x8国产精品| 欧美韩国日本不卡| 日产精品久久久久久久性色| 国产精品一区二区久久不卡| 色婷婷综合久色| 欧美成人性福生活免费看| 最近日韩中文字幕| 极品少妇xxxx精品少妇偷拍| 91免费版在线看| 欧美成人精品二区三区99精品| 亚洲视频一区二区在线观看| 免费观看一级欧美片| 91在线播放网址| 欧美精品一区二区三区蜜桃视频| 中文字幕一区视频| 精品在线观看免费| 欧美日韩一区不卡| 亚洲视频资源在线| 国产传媒一区在线| 欧美videossexotv100| 亚洲一区二区三区四区在线观看| 国产乱码字幕精品高清av| 91精品欧美综合在线观看最新| 中文字幕亚洲在| 国产成人精品三级| 欧美成人video| 偷拍与自拍一区| 91网站最新网址| 中文子幕无线码一区tr| 国产在线精品免费| 精品日韩成人av| 日韩国产精品大片| 欧美性大战久久久| 亚洲一区二区三区国产| 91豆麻精品91久久久久久| 欧美国产日产图区| 国产不卡视频在线播放| 精品国产乱码久久久久久久| 日韩中文字幕av电影| 欧美性色aⅴ视频一区日韩精品| 成人欧美一区二区三区在线播放| 成人污污视频在线观看| 久久综合999| 国产毛片精品视频| 久久久久久麻豆| 懂色av一区二区三区蜜臀| 久久久99久久| 成人av电影免费观看| 亚洲欧洲色图综合| 91无套直看片红桃| 樱桃视频在线观看一区|