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

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

?? cli_webif.c

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

filename     : Cli_WebIf.c

description  : 命令行模塊提供給web網管的接口的源文件;

author       : Woodhead

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

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

#include "CLI_WebIf.inc"

#if ( CLI_WEB_SUPPORT == G_YES )

#undef __WNM_IF_LOGIN__


/*-----------------------------------------------------------------------------
 函數名稱    : CLI_WebTermAlloc();
 功能        : 申請web終端;
 輸入參數    : 無;
 輸出參數    : pulTermId,   返回的web終端ID
 返回值      : G_SUCCESS,   成功;
               G_FAILURE    失敗;
 函數調用說明:
 典型使用示例:
-----------------------------------------------------------------------------*/
_U32 CLI_WebTermAlloc( _U32 *pulTermID )
{
    _U32    i;

    if( G_NULL == pulTermID )
    {
        MT_ERRLOG(0);
        return G_FAILURE;
    }

    for( i = m_ulCliWebTermFirstIndex; i <= m_ulCliWebTermLastIndex; i ++ )
    {
        DBG_ASSERT( ( m_TDTable[i].pTermStruct->ulTermId - 1 ) == i );

        if( m_TDTable[i].pTermStruct->ucTermStatus == TERM_SLEEPING )
        {
            *pulTermID = i + 1;
            return G_SUCCESS;
        }
    }

    return G_FAILURE;
}


/*-----------------------------------------------------------------------------
 函數名稱    : CLI_WebLogin();
 功能        : Web網管用戶登錄;
 輸入參數    : ulLogIp,     登錄IP;
               username,    用戶名;
               password,    口令;
 輸出參數    : pulTermId,   返回終端ID;
 返回值      : G_SUCCESS,               成功;
               G_FAILURE                失敗;
               ERR_CLI_WEB_USER_ONLINE, 用戶在線;
 函數調用說明: cli用戶可以踢cli/web用戶; web用戶不能踢cli/web用戶;
 典型使用示例:
-----------------------------------------------------------------------------*/
_U32 CLI_WebLogin( _U32 ulLogIp, const _S8* username, const _S8* password,_U32* pulTermId )
{
    _S8                 szUsername[USERNAME_LEN] ;
    _S8                 szPassword[PASSWORD_LEN] ;
    _U32                ulRet;
    _U32                ulTermID;
    PTermUserItem       pTermUser;
    PTerm_Data_S        pstTerm;

    (_VOID)EOS_StrNCpy( szUsername, username, ( USERNAME_LEN - 1 ) );
    szUsername[USERNAME_LEN - 1] = '\0';

    (_VOID)EOS_StrNCpy( szPassword, password, ( PASSWORD_LEN - 1 ) );
    szPassword[PASSWORD_LEN - 1] = '\0';

    /* 用戶名不區分打小寫 */
    (_VOID)_AffirmStrBeLower( szUsername );

    ulRet = CLI_CheckUserPassword( szUsername, szPassword );
    if( G_SUCCESS != ulRet )
    {
        DBG_Out( PID_CLI, MT_DBGOUT_NOTE, G_STR_HEAD
                 "CLI_WebLogin(): USER <%s> 's PASSWORD <%s> is invalid !",
                 szUsername, szPassword
               );
        return G_FAILURE;
    }

    /* 申請終端控制塊 */
    ulRet = CLI_WebTermAlloc( &ulTermID );
    if( G_SUCCESS != ulRet )
    {
        DBG_Out( PID_CLI, MT_DBGOUT_NOTE, G_STR_HEAD
                 "CLI_WebLogin(): CLI_WebTermAlloc() fail !" );
        return G_FAILURE;
    }

    pstTerm = m_TDTable[ulTermID - 1].pTermStruct;

    DBG_ASSERT( ulTermID == pstTerm->ulTermId );

    /* 獲取用戶信息 */
    pTermUser = CLI_GetUserByName( szUsername );

    /* 如果該用戶對應的終端ID不為零,表示該用戶在另一個終端已經登錄 */
    if( pTermUser->ulTermId != 0 )
    {
        DBG_ASSERT( 0 == EOS_StriCmp(szUsername, m_TDTable[pTermUser->ulTermId - 1].pTermStruct->szCurUserName) );

        DBG_Out( PID_CLI, MT_DBGOUT_NOTE, G_STR_HEAD
                 "CLI_WebLogin(): USER <%s> has log on from term <%ld> !",
                 szUsername, pTermUser->ulTermId
               );

        (_VOID)WNM_SendErrString( CLI_USER_ONLINE );

        return ERR_CLI_WEB_USER_ONLINE;
    }

    /* 成功登錄后的一些用戶與終端數據初始化 */
    pTermUser->ucUserStatus     = TERM_LOGED;
    pTermUser->ucInvadedFlag    = EN_USER_NOT_INVADED;
    pTermUser->ulTermId         = pstTerm->ulTermId;

    pstTerm->ucTermStatus       = TERM_LOGED;
    pstTerm->iSocket            = SOCKET_FOR_WEB;
    pstTerm->ucUserLevel        = (_U8)pTermUser->ulLevel;
    pstTerm->ulClientIP         = ulLogIp;

    (_VOID)EOS_StrCpy( pstTerm->szCurUserName, szUsername );
    (_VOID)ML_SetLanguage( pstTerm->ulTermId, pTermUser->ucLanguage );


    /* 寫日志 */
    CLI_SaveUserLog(pstTerm->szCurUserName, LOG_MODE_WEB, ulLogIp, "logon[s]") ;

    DBG_Out( PID_CLI, MT_DBGOUT_NOTE, G_STR_HEAD
             "CLI_WebLogin(): USER <%s> log on web term <%d> ! CurTick = %ld",
             szUsername, pTermUser->ulTermId, EOS_GetCurTick() );

    *pulTermId = pstTerm->ulTermId;

    return G_SUCCESS;

}


/*-----------------------------------------------------------------------------
 函數名稱    : CLI_WebLogout();
 功能        : Web網管用戶退出;
 輸入參數    : ulLogIp,     登錄IP;
               ulTermId,    終端ID;
 輸出參數    : 無.
 返回值      : G_SUCCESS,   成功;
               其他,        失敗.
 函數調用說明:
 典型使用示例:
-----------------------------------------------------------------------------*/
_VOID CLI_WebLogout( _U32 ulLogIp, _U32 ulTermId )
{
    PTermUserItem       pTermUser;
    PTerm_Data_S        pstTerm;

    /* web終端ID的合法性檢查 */
    if( ! IS_WEB_TERMID(ulTermId) )
    {
        MT_ERRLOG(ulTermId);
        return;
    }

    pstTerm = m_TDTable[ulTermId - 1].pTermStruct;

    DBG_ASSERT( ulTermId == pstTerm->ulTermId );

    if( TERM_LOGED != pstTerm->ucTermStatus )
    {
        DBG_Out( PID_CLI, MT_DBGOUT_NOTE, G_STR_HEAD
                 "CLI_WebLogout() : try to log out unlogon term <%ld>. pstTerm->ucTermStatus = 0x%lx",
                 ulTermId, pstTerm->ucTermStatus );
        DBG_ErrLog( 0, EN_ERR_LEVEL_GENERAL, ulTermId, pstTerm->ucTermStatus );
        return;
    }

    /* 寫日志 */
    DBG_ASSERT( ulLogIp == pstTerm->ulClientIP );
    CLI_SaveUserLog(pstTerm->szCurUserName, LOG_MODE_WEB, ulLogIp, "logout[s]") ;

    pTermUser = CLI_GetUserByName( pstTerm->szCurUserName );

    /* 如果該終端已經注銷過,不能重復注銷   */
    if( ( G_NULL == pTermUser ) || ( 0 == pTermUser->ulTermId ) )
    {
        DBG_ErrLog( 0, EN_ERR_LEVEL_GENERAL, ulTermId, (_U32)pTermUser );
        return;
    }

    /* 考慮到可能在該終端注銷前另一個終端已經使用同名用戶登錄 ??? */
    if( pTermUser->ulTermId == ulTermId )
    {
        pTermUser->ulTermId     = 0;
        pTermUser->ucUserStatus = TERM_SLEEPING;
    }
    else
    {
        /* 如果是cli用戶踢web用戶, 是否會走到這里 ??? 應該不可能走到這里 */
        DBG_ErrLog( 0, EN_ERR_LEVEL_GENERAL, ulTermId, pTermUser->ulTermId );
    }

    CLI_TaskDataInit( pstTerm );

    DBG_Out( PID_CLI, MT_DBGOUT_NOTE, G_STR_HEAD
             "CLI_WebOut(): USER <%s> Log out from Web term <%d> ! CurTick = %ld",
             pTermUser->szUserName, ulTermId, EOS_GetCurTick() );

    return;

}

/*-----------------------------------------------------------------------------
函數名稱    : CLI_WebSendKickOffUserMsg();
功能        : 向web模塊發送踢用戶消息;
輸入參數    : ulTermId: 要踢掉的用戶的終端標識符
輸出參數    : 無
返回值      : G_SUCCESS,   成功;
              其他         失敗;
典型使用示例:
-----------------------------------------------------------------------------*/
_U32 CLI_WebSendKickOffUserMsg( _U32 ulTermId )
{
    static _U32                 s_ulSeqNo           = 0;
    _U32                        ulRet;
    _U16                        usPayLoadLen;
    ST_MSG*                     pstMsg;
    WNM_KICK_USER_MSG_DATA*     pstKickOffUser;

    /* 消息包凈荷的長度 */
    usPayLoadLen = sizeof(WNM_KICK_USER_MSG_DATA);

    /* 申請消息包 */
    pstMsg = (ST_MSG *)ROS_MsgAlloc( PUBLIC_LENS_TOTAL + usPayLoadLen,
                                     ROS_MSG_ALLOC_OPT_LEAK_CHECK );
    if( G_NULL == pstMsg )
    {
        MT_ERRLOG( usPayLoadLen );
        return G_FAILURE;
    }

    /* 設置消息包 */
    pstMsg->usSrcBid        = 0;
    pstMsg->usDstBid        = 0;
    pstMsg->usSrcPid        = PID_CLI;
    pstMsg->usDstPid        = PID_WNM;
    pstMsg->ulSendSeq       = s_ulSeqNo ++;

    pstMsg->usMsgCode       = MSG_CODE_WNM_KICK_USER;
    pstMsg->usDataOffset    = 0;
    pstMsg->usDataLens      = usPayLoadLen;

    pstKickOffUser = (WNM_KICK_USER_MSG_DATA *)( pstMsg->ucData );

    EOS_MemZero( pstKickOffUser, usPayLoadLen );
    pstKickOffUser->ulTermId = ulTermId;

    /* 發送消息包 */
    ulRet = BOARD_SEND_MSG( pstMsg );
    if( G_SUCCESS != ulRet )
    {
        /* 發送消息失敗,釋放消息包 */
        ROS_MsgFree( pstMsg );

        MT_ERRLOG(ulRet);
        return G_FAILURE;
    }

    // 操作成功
    return G_SUCCESS;

}




#undef __WNM_IF_USER__
/*-----------------------------------------------------------------------------
 函數名稱    : CLI_WebGetUserInfoByIndex();
 功能        : 獲取用戶信息;
 輸入參數    : szOprName,   操作用戶名;
               ulIndex,     用戶索引;
 輸出參數    : szName,      用戶名;
               *pucLevel,   用戶權限級別;
               *pucLan,     用戶慣用語種(中文,英文);
               *pbIsLogin,  是否處于登錄狀態;
               *pulLogMode, 用戶登錄方式, 枚舉EN_USER_LOG_MODE.
                            注: ( *pbIsLogin == G_TRUE )才有效
               *pulLogIP,   用戶登錄的IP地址
                            注:    ( *pulLogMode == LOG_MODE_WEB )
                                或 ( *pulLogMode == LOG_MODE_TELNET ) 才有效
 返回值      : G_SUCCESS,   成功;
               其他,        失敗.
 函數調用說明:
 典型使用示例:
-----------------------------------------------------------------------------*/
_U32 CLI_WebGetUserInfoByIndex(
                            const _S8* szOprName, _U32 ulIndex,
                            _S8 *szName, _U8* pucLevel, _U8* pucLan,
                            _BOOL* pbIsLogin, _U32* pulLogMode, _U32* pulLogIP )
{
    PTermUserItem       pstOprUser, pstShowUser;

    /* 輸入索引的合法性檢查 */
    if( MAX_USER_NUM <= ulIndex )
    {
        MT_ERRLOG(0);
        return G_FAILURE;
    }

    /* 入口指針的合法性檢查 */
    if(    ( G_NULL == szName )
        || ( G_NULL == pucLevel )
        || ( G_NULL == pucLan )
        || ( G_NULL == pbIsLogin )
      )
    {
        MT_ERRLOG(0);
        return G_FAILURE;
    }

    /* 根據用戶名獲取用戶信息 */
    pstOprUser = CLI_GetUserByName( szOprName );
    if( pstOprUser == G_NULL )
    {
        DBG_Out( PID_CLI, CLI_DBGOUT_NOTE, G_STR_HEAD"CLI_WebGetUserInfoByIndex() :: "
                 "Operation user <%s> is not exist !", szOprName  );
        (_VOID)WNM_SendErrString( CLI_USER_NOT_EXISTED );
        return G_FAILURE;
    }

    pstShowUser = &m_sUserTable[ulIndex];

    /* 此用戶表項未使用 */
    if( pstShowUser->ucUserType == USER_NOT_USED)
    {
        return G_FAILURE;
    }

    /* 檢查當前用戶是否有查看的權限 */
    if( pstOprUser->ulLevel < pstShowUser->ulLevel )
    {
        return G_FAILURE;
    }

    /* 調試用戶不顯示 */
    if( CT_AL_DEBUG <= pstShowUser->ulLevel)
    {
        return G_FAILURE;
    }

    /* 獲取用戶的當前信息 */
    (_VOID)EOS_StrNCpy( szName, pstShowUser->szUserName, ( USERNAME_LEN - 1 ) );
    szName[USERNAME_LEN - 1] = '\0';

    *pucLevel   = (_U8)pstShowUser->ulLevel;
    *pucLan     = (_U8)pstShowUser->ucLanguage;
    *pbIsLogin  = ( TERM_LOGED == pstShowUser->ucUserStatus ) ? G_TRUE : G_FALSE;

    /* 如果已經登錄, 則獲取登錄方式 */
    if( G_TRUE == *pbIsLogin )
    {
        *pulLogMode = CLI_GetUserLogModeByTermID( pstShowUser->ulTermId );
    }
    else
    {
        return G_SUCCESS;
    }

    /* 如果是從telnet或web登錄, 則返回IP地址 */
    if(    ( *pulLogMode == LOG_MODE_WEB )
        || ( *pulLogMode == LOG_MODE_TELNET )
      )
    {
        *pulLogIP = m_TDTable[pstShowUser->ulTermId - 1].pTermStruct->ulClientIP;
    }

    return G_SUCCESS;

}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人一区二区三区在线观看 | 亚洲国产精品一区二区久久恐怖片 | 成人精品在线视频观看| 日韩女优av电影| 麻豆精品国产91久久久久久| 在线视频欧美区| 国产精品一区久久久久| 久久影音资源网| 国产在线精品免费| 国产三级精品三级| 97久久精品人人爽人人爽蜜臀| 伊人一区二区三区| 欧美日韩国产乱码电影| 亚洲狠狠爱一区二区三区| 在线播放中文字幕一区| 蜜桃视频一区二区| 一色桃子久久精品亚洲| 91黄视频在线观看| 久久成人久久爱| 中文字幕视频一区二区三区久| 91丨porny丨首页| 首页亚洲欧美制服丝腿| 国产网站一区二区| 91视频观看免费| 日韩精品乱码免费| 国产精品麻豆99久久久久久| 91福利视频久久久久| 经典三级一区二区| 亚洲精品视频免费看| 4438x成人网最大色成网站| 国产成人综合在线| 日日骚欧美日韩| 亚洲丝袜另类动漫二区| 精品视频全国免费看| 成人性生交大片免费看视频在线| 亚洲国产成人tv| **网站欧美大片在线观看| 日韩精品在线一区| 欧美日本在线看| 在线视频你懂得一区| av电影一区二区| 国产福利一区在线| 日本免费在线视频不卡一不卡二| 亚洲欧洲制服丝袜| 久久婷婷国产综合国色天香| 制服丝袜成人动漫| 欧美丰满美乳xxx高潮www| 色哦色哦哦色天天综合| 东方aⅴ免费观看久久av| 国产一二精品视频| 国产一区二区三区久久悠悠色av| 日韩av电影天堂| 蜜臀a∨国产成人精品| 视频在线观看一区| 日本美女一区二区三区| 日本欧美一区二区三区| 日本不卡视频一二三区| 久久99久久99小草精品免视看| 日本成人在线不卡视频| 蜜桃视频第一区免费观看| 久久99精品久久久久久动态图| 天堂va蜜桃一区二区三区| 免费观看一级特黄欧美大片| 美日韩黄色大片| www.亚洲在线| 欧美综合色免费| 欧美mv日韩mv国产| 欧美激情一区二区| 亚洲高清视频在线| 国内成人自拍视频| 在线影视一区二区三区| 日韩欧美中文字幕制服| 国产欧美日韩中文久久| 亚洲亚洲人成综合网络| 激情五月婷婷综合网| 91色乱码一区二区三区| 91精品国产全国免费观看 | 成人激情电影免费在线观看| 欧美综合天天夜夜久久| 国产欧美一区二区三区在线看蜜臀| 综合久久给合久久狠狠狠97色 | 日日摸夜夜添夜夜添精品视频| 国产一区二区在线观看免费| 在线免费观看日本欧美| 久久久一区二区三区捆绑**| 亚洲男人电影天堂| 国产精品自拍毛片| 欧美精品一区二区三区久久久| 亚洲图片欧美综合| 97久久精品人人爽人人爽蜜臀| 精品久久久久久综合日本欧美 | 久久精品亚洲精品国产欧美kt∨| 亚洲午夜精品在线| 色噜噜狠狠一区二区三区果冻| 久久综合九色综合97婷婷女人| 日韩高清不卡一区| 精品婷婷伊人一区三区三| 亚洲欧美经典视频| 99精品欧美一区二区三区小说| 国产日韩欧美制服另类| 国产精品综合视频| 国产精品久久久久四虎| 成人黄色综合网站| 日韩美女视频一区二区| 99热99精品| 亚洲一区av在线| 在线成人免费观看| 日韩精品乱码av一区二区| 日韩欧美国产一区在线观看| 精品一区二区三区视频| 国产欧美日韩在线视频| 99久久er热在这里只有精品66| 亚洲区小说区图片区qvod| 欧美体内she精高潮| 日韩影院精彩在线| 久久综合九色综合欧美亚洲| 成人av在线网站| 亚洲成av人片一区二区梦乃| 精品国产一区二区亚洲人成毛片| 国产成人小视频| 午夜精品aaa| 中文字幕第一区| 欧美精品亚洲二区| 丁香另类激情小说| 香蕉乱码成人久久天堂爱免费| 久久婷婷国产综合精品青草| 成人18精品视频| 免费观看一级欧美片| 亚洲免费av在线| 国产亚洲成aⅴ人片在线观看| 91丨国产丨九色丨pron| 国产精品一二三四区| 天天av天天翘天天综合网色鬼国产| 国产日韩欧美电影| 欧美日韩国产免费一区二区| 91在线看国产| 成人免费高清视频在线观看| 亚洲v日本v欧美v久久精品| 中文字幕一区二区在线观看| 欧美一区二区三区在线观看| 国产在线看一区| 天天射综合影视| 亚洲综合久久久| 日本一二三不卡| 日韩一级黄色片| 在线亚洲高清视频| av不卡在线播放| 国产一区二区久久| 日韩av午夜在线观看| 综合欧美亚洲日本| 国产精品麻豆一区二区| 久久婷婷色综合| 久久色在线观看| 精品国产99国产精品| 日韩精品一区二区三区中文精品| 欧美日韩久久久久久| 91丝袜呻吟高潮美腿白嫩在线观看| 国产一区二区三区在线观看免费视频 | 久久久综合视频| 久久九九99视频| 国产精品丝袜一区| 国产精品乱码久久久久久| 久久久久国产精品麻豆| 国产午夜精品美女毛片视频| 久久亚洲春色中文字幕久久久| 精品国产乱码久久久久久浪潮| 日韩三级伦理片妻子的秘密按摩| 欧美福利视频一区| 精品国产免费人成电影在线观看四季| 91一区一区三区| 欧美视频三区在线播放| 在线观看亚洲a| 精品国产一区二区三区不卡 | 国产精品系列在线播放| 成人黄页在线观看| 欧美精品免费视频| 欧美电影精品一区二区| 国产精品免费人成网站| 亚洲妇女屁股眼交7| 国产精品亚洲午夜一区二区三区| 粉嫩av亚洲一区二区图片| 色94色欧美sute亚洲线路二| 欧美一区二区三区视频免费播放| 久久久久一区二区三区四区| 亚洲精品成人天堂一二三| 久久国产福利国产秒拍| 91福利社在线观看| 91精品国产综合久久久蜜臀图片| 久久视频一区二区| 日韩 欧美一区二区三区| 不卡高清视频专区| 欧美日韩精品一区视频| 日本一区二区三区电影| 亚洲视频资源在线| 床上的激情91.| 精品精品国产高清a毛片牛牛| 亚洲人成小说网站色在线| 日本vs亚洲vs韩国一区三区二区| 色婷婷亚洲精品| 亚洲三级在线观看|