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

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

?? hdlc.c

?? dm642網絡傳輸程序
?? C
字號:
//--------------------------------------------------------------------------
// Ip Stack
//--------------------------------------------------------------------------
// HDLC.C
//
// Member functions for the HDLC CLIENT and SERVER
//
// Author: Michael A. Denio
// Copyright 2001, 2004 by Texas Instruments Inc.
//-------------------------------------------------------------------------
#include <stkmain.h>
#include "hdlcif.h"

//-----------------------------------------------
// Static Functions used in callbacks
static void hdlcInput( PBM_Handle hPkt );
static void hdlcTimer( HANDLE hHDLC );

//-----------------------------------------------
// Shared Functions
static void hdlcSI( HANDLE hSI, uint Msg, UINT32 Aux, PBM_Handle hPkt );

//-----------------------------------------------
// HDLC Object

//-----------------------------------------------
// Max count for service list and max name length
#define HDLC_NAMESIZE          32

// HDLC Instance Structure
typedef struct _hdlc_instance {
    uint         Type;                      // Instance TYPE
#define HDLC_INST_SERVER        0x2501
#define HDLC_INST_CLIENT        0x2502
    uint         DevSerial;                 // Serial Device Index
    HANDLE       hPPP;                      // PPP Interface
    uint         Status;                    // Call status
    uint         pppFlags;                  // PPP Flags
    UINT32       cmap_out;                  // Sending CMAP
    UINT32       cmap_in;                   // Desired Rx CMAP
    char         Username[HDLC_NAMESIZE];   // Specified Username (client)
    char         Password[HDLC_NAMESIZE];   // Specified Password (client)
    IPN          IPServer;                  // Our IP address     (server)
    IPN          IPMask;                    // Our IP mask        (server)
    IPN          IPClient;                  // Client IP address  (server)
    } HDLC_INSTANCE;

//----------------------------------------------------------------------
// USER FUNCTIONS
//
// The following functions must be callable from outside the kernel.
// They use llEnter()/llExit().
//----------------------------------------------------------------------

//--------------------------------------------------------------
// hdlcNew()   USER FUNCTION
//
// Open HDLC in Client mode
//--------------------------------------------------------------
HANDLE hdlcNew( uint DevSerial, uint pppFlags, UINT32 ourcmap,
                char *Username, char *Password )
{
    HDLC_INSTANCE *pi = 0;

    // Enter kernel mode
    llEnter();

    // Validate arguments
    if( !DevSerial || !Username || !Password )
        goto ExitNew;

    // If size of Username or Password > HDLC_NAMESIZE,
    // then abort
    if( strlen(Username) >= HDLC_NAMESIZE
                         || strlen(Password) >= HDLC_NAMESIZE )
        goto ExitNew;

    // Allocate space for instance
    if( !(pi = mmAlloc(sizeof(HDLC_INSTANCE))) )
    {
        _TaskFlagLowResource = 1;
        goto ExitNew;
    }

    // Initialize Instance
    mmZeroInit( pi, sizeof(HDLC_INSTANCE) );
    pi->Type            = HDLC_INST_CLIENT;
    pi->DevSerial       = DevSerial;
    pi->pppFlags        = pppFlags;
    pi->cmap_out        = 0xFFFFFFFF;
    pi->cmap_in         = ourcmap;
    strcpy( pi->Username, Username );
    strcpy( pi->Password, Password );

    // Report padding requirements (2:header + 2:protocol) & 2:checksum
    IFSetPad( 4, 2 );

    // Open the serial device
    if( !llSerialOpenHDLC( pi->DevSerial, (HANDLE)pi, hdlcTimer, hdlcInput ) )
        goto FatalError;

    // Make sure the character escape map is correct
    llSerialHDLCPeerMap( pi->DevSerial, pi->cmap_out );

    // Start the PPP session now
    pi->hPPP = pppNew( pi, pi->pppFlags, 1500, 0, 0, 0,
                       pi->Username, pi->Password, pi->cmap_in,
                       (void(*)(HANDLE,uint,UINT32,PBM_Pkt*))&hdlcSI );
    if( !pi->hPPP )
    {
        llSerialCloseHDLC( pi->DevSerial );
FatalError:
        pi->Type = 0;
        mmFree(pi);
        pi = 0;
    }

ExitNew:
    // Exit kernel mode
    llExit();

    return( (HANDLE)pi );
}

//--------------------------------------------------------------
// hdlcFree()  USER FUNCTIION
//
// Close HDLC Client
//--------------------------------------------------------------
void hdlcFree( HANDLE hHDLC )
{
    HDLC_INSTANCE *pi = (HDLC_INSTANCE *)hHDLC;

    // Enter kernel mode
    llEnter();

    if( pi && (pi->Type==HDLC_INST_CLIENT || pi->Type==HDLC_INST_SERVER)  )
    {
        // This message will close PPP
        hdlcSI( hHDLC, SI_MSG_CALLSTATUS, SI_CSTATUS_DISCONNECT, 0 );

        // Zap the type
        pi->Type = 0;

        // Close the serial driver
        llSerialCloseHDLC( pi->DevSerial );

        // Free the instance
        mmFree( pi );
    }

    // Exit kernel mode
    llExit();
}

//--------------------------------------------------------------
// hdlcGetStatus()     USER FUNCTION
//
// Get the status of the HDLC Client
//--------------------------------------------------------------
uint hdlcGetStatus( HANDLE hHDLC )
{
    HDLC_INSTANCE *pi = (HDLC_INSTANCE *)hHDLC;
    uint status       = 0;

    // Enter kernel mode
    llEnter();

    // Get Status
    if( pi && (pi->Type==HDLC_INST_CLIENT || pi->Type==HDLC_INST_SERVER)  )
        status = pi->Status;

    // Exit kernel mode
    llExit();

    return( status );
}

//--------------------------------------------------------------
// hdlcsNew()  USER FUNCTION
//
// Open HDLC Server
//--------------------------------------------------------------
HANDLE hdlcsNew( uint DevSerial, uint pppFlags, UINT32 ourcmap,
                 IPN IPServer, IPN IPMask, IPN IPClient )
{
    HDLC_INSTANCE *pi = 0;

    // Enter kernel mode
    llEnter();

    // Validate arguments
    if( !DevSerial || !IPClient || !IPServer || !IPMask )
        goto ExitSNew;

    // Allocate space for instance
    if( !(pi = mmAlloc(sizeof(HDLC_INSTANCE))) )
    {
        _TaskFlagLowResource = 1;
        goto ExitSNew;
    }

    // Initialize Instance
    mmZeroInit( pi, sizeof(HDLC_INSTANCE) );
    pi->Type            = HDLC_INST_SERVER;
    pi->DevSerial       = DevSerial;
    pi->pppFlags        = pppFlags;
    pi->cmap_out        = 0xFFFFFFFF;
    pi->cmap_in         = ourcmap;
    pi->IPServer        = IPServer;
    pi->IPMask          = IPMask;
    pi->IPClient        = IPClient;

    // Report padding requirements (2:header + 2:protocol) & 2:checksum
    IFSetPad( 4, 2 );

    // Open the serial device
    if( !llSerialOpenHDLC( pi->DevSerial, (HANDLE)pi, hdlcTimer, hdlcInput ) )
        goto FatalErrorS;

    // Make sure the character escape map is correct
    llSerialHDLCPeerMap( pi->DevSerial, pi->cmap_out );

    // Start the PPP session now
    pi->hPPP = pppNew( pi, pi->pppFlags, 1500,
                       pi->IPServer, pi->IPMask, pi->IPClient,
                       0, 0, pi->cmap_in,
                       (void(*)(HANDLE,uint,UINT32,PBM_Pkt*))&hdlcSI );

    if( !pi->hPPP )
    {
        llSerialCloseHDLC( pi->DevSerial );
FatalErrorS:
        pi->Type = 0;
        mmFree(pi);
        pi = 0;
    }

ExitSNew:
    // Exit kernel mode
    llExit();

    return( (HANDLE)pi );
}

//----------------------------------------------------------------------
// STACK FUNCTIONS
//
// The following functions are Kernel Mode stack functions.
//----------------------------------------------------------------------

//--------------------------------------------------------------
// hdlcTimer()
//
// Dispatches timer ticks to the stack's PPP module
//--------------------------------------------------------------
static void hdlcTimer( HANDLE hHDLC )
{
    HDLC_INSTANCE *pi = (HDLC_INSTANCE *)hHDLC;

    if( pi && (pi->Type==HDLC_INST_CLIENT ||
        pi->Type==HDLC_INST_SERVER) && pi->hPPP )
        pppTimer( pi->hPPP );
}

//--------------------------------------------------------------
// hdlcInput()
//
// Dispatches packets to the stack's PPP module
//--------------------------------------------------------------
void hdlcInput( PBM_Handle hPkt )
{
    HDLC_INSTANCE *pi = 0;
    uint          Size;

    // If we were given a packet, our handle is the RX interface
    if( hPkt )
        pi = (HDLC_INSTANCE *)PBM_getIFRx(hPkt);

    // Verify what we were given
    if( !pi || (pi->Type!=HDLC_INST_CLIENT && pi->Type!=HDLC_INST_SERVER)  )
    {
        DbgPrintf(DBG_ERROR,"hdlcInput: Invalid Handle");
        goto ReturnPacket;
    }

    // Do a sanity check on the size
    Size = PBM_getValidLen(hPkt);
    if( Size < 7 )
    {
        DbgPrintf(DBG_ERROR,"hdlcInput: Bad Packet");
        goto ReturnPacket;
    }

    // Packet comes in as FF03(2), PROT(2), DATA(n), CHECKSUM(2)
    // We need to remove the FF03 and two byte checksum
    Size -= 4;
    PBM_setValidLen(hPkt,Size);
    PBM_setDataOffset(hPkt,PBM_getDataOffset(hPkt)+2);

/*
// Print out packet for debug
{
int i;
printf("rx: ");
for(i=0; i<Size; i++)
printf("%02x ",*(PBM_getDataBuffer(hPkt)+PBM_getDataOffset(hPkt)+i));
printf("\n");
}
*/

    // When closing, when can get here with a null PPP handle. (This
    // is because PPP must switch out of kernel mode to clean up any
    // installed routes.) Thus we make sure to only give the packet to
    // PPP when the PPP handle is valid.
    if( pi->hPPP )
    {
        pppInput( pi->hPPP, hPkt );
        return;
    }

ReturnPacket:
    if( hPkt )
         PBM_free(hPkt);
    return;
}

//--------------------------------------------------------------------
// SI Control Function
//--------------------------------------------------------------------
void hdlcSI( HANDLE hSI, uint Msg, UINT32 Aux, PBM_Handle hPkt )
{
    HDLC_INSTANCE       *pi = (HDLC_INSTANCE *)hSI;
    HANDLE              hTmp;
    uint                Offset,Size;
    UINT8               *pBuf;

    switch( Msg )
    {
    case SI_MSG_CALLSTATUS:
        // Update Connection Status
        pi->Status = (uint)Aux;
        if( Aux >= SI_CSTATUS_DISCONNECT )
        {
            // Close PPP - we clear the handle to make sure we
            // only call pppFree() once. (We may get multiple
            // disconnect messages - one from each protocol.)
            if( pi->hPPP )
            {
                hTmp = pi->hPPP;
                pi->hPPP = 0;
                pppFree( hTmp );
            }
        }
        break;

    case SI_MSG_PEERCMAP:
        // Update Out CMAP for Transmit
        pi->cmap_out = Aux;
        llSerialHDLCPeerMap( pi->DevSerial, Aux );
        break;

    case SI_MSG_SENDPACKET:
        if( !hPkt )
        {
            DbgPrintf(DBG_ERROR,"hdlcSI: No packet");
            break;
        }

        Offset = PBM_getDataOffset(hPkt);
        Size = PBM_getValidLen(hPkt);

        // Make sure packet is valid, room for protocol, room for checksum
        if( (Offset<4) || ((Offset+Size+2)>PBM_getBufferLen(hPkt)) )
        {
            DbgPrintf(DBG_ERROR,"hdlcSI: Bad packet");
            PBM_free( hPkt );
            break;
        }

/*
// Print out packet for debug
{
int i;
printf("tx: %02x %02x ",Aux/256,Aux%256);
for(i=0; i<Size; i++)
printf("%02x ",*(PBM_getDataBuffer(hPkt)+PBM_getDataOffset(hPkt)+i));
printf("\n");
}
*/

        // Add in 2 byte Protocol and 2 byte header. Also add in size for
        // 2 byte checksum. Note that the outgoing checksum is corrected
        // (calculated) by the serial driver.
        Offset -= 4;
        Size += 6;
        PBM_setDataOffset(hPkt, Offset );
        PBM_setValidLen(hPkt, Size );
        pBuf = PBM_getDataBuffer(hPkt)+Offset;
        *pBuf++ = 0xFF;
        *pBuf++ = 0x03;
        *pBuf++ = (UINT8)(Aux/256);
        *pBuf   = (UINT8)(Aux%256);

        // Send the buffer to the serial driver
        llSerialSendPkt( pi->DevSerial, hPkt );
        break;
    }
}



?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久男人中文字幕资源站| 一区二区三区av电影| 在线观看免费成人| 韩国精品免费视频| 日韩一区精品字幕| 亚洲人一二三区| 国产亚洲一区字幕| 精品久久一区二区三区| 在线视频一区二区三区| 成人成人成人在线视频| 久久精品国产一区二区三 | 亚洲一二三四区| 久久综合久久鬼色中文字| 欧美丰满少妇xxxbbb| 91亚洲精品久久久蜜桃网站| 高清国产一区二区| 国产一区二区主播在线| 日韩avvvv在线播放| 一区二区视频在线看| 亚洲欧洲日韩在线| 国产精品白丝在线| 国产日产亚洲精品系列| 精品88久久久久88久久久 | 日韩美女啊v在线免费观看| wwwwxxxxx欧美| 日韩精品中文字幕在线一区| 欧美三级电影网站| 在线观看日韩国产| 99精品视频中文字幕| 菠萝蜜视频在线观看一区| 国产麻豆精品95视频| 国产在线精品免费| 国产剧情一区在线| 国产呦萝稀缺另类资源| 另类人妖一区二区av| 麻豆精品蜜桃视频网站| 麻豆国产精品一区二区三区| 奇米精品一区二区三区在线观看一| 丝袜美腿亚洲一区| 日本不卡高清视频| 蜜桃视频第一区免费观看| 日韩黄色免费电影| 久99久精品视频免费观看| 久久精品噜噜噜成人88aⅴ| 国模套图日韩精品一区二区| 国产在线国偷精品产拍免费yy| 国产乱码精品一区二区三区忘忧草| 国产毛片精品国产一区二区三区| 国产在线看一区| 成人免费毛片嘿嘿连载视频| 99re66热这里只有精品3直播| 99久久国产综合精品麻豆| 欧日韩精品视频| 777精品伊人久久久久大香线蕉| 欧美一级日韩免费不卡| 久久亚洲捆绑美女| 国产精品国模大尺度视频| 1024成人网| 天使萌一区二区三区免费观看| 麻豆精品精品国产自在97香蕉| 国产激情一区二区三区四区| 91最新地址在线播放| 欧美美女黄视频| 久久久不卡网国产精品二区| 中文字幕欧美日韩一区| 亚洲一区中文在线| 久久电影网站中文字幕| 成人免费视频播放| 欧美女孩性生活视频| 久久久久久久久久久久久夜| 亚洲欧洲99久久| 奇米综合一区二区三区精品视频| 国产成人精品免费一区二区| 欧美性猛交xxxxxx富婆| 精品成人私密视频| 亚洲精品国产精品乱码不99| 蜜臀久久99精品久久久画质超高清| 粉嫩av一区二区三区| 欧美日韩国产大片| 中文字幕免费不卡| 日本伊人午夜精品| www.亚洲色图| 日韩欧美的一区| 亚洲精品写真福利| 国产在线视频一区二区三区| 色婷婷av一区二区三区之一色屋| 日韩一区二区三区四区| 亚洲日本在线视频观看| 国产在线视视频有精品| 欧美图片一区二区三区| 久久久www成人免费毛片麻豆 | 久久精品综合网| 亚洲综合男人的天堂| 国产大陆亚洲精品国产| 欧美精三区欧美精三区| 国产精品久久久久久久久晋中| 日韩精品三区四区| 在线视频中文字幕一区二区| 国产欧美日韩中文久久| 免费观看日韩av| 欧美少妇一区二区| 日韩码欧中文字| 国产高清精品网站| 日韩精品在线看片z| 亚洲成人自拍一区| a4yy欧美一区二区三区| 精品电影一区二区| 日韩**一区毛片| 欧美男生操女生| 亚洲一二三四在线观看| 91免费精品国自产拍在线不卡| 久久久久亚洲综合| 精一区二区三区| 欧美一区二区不卡视频| 亚洲午夜精品17c| 色欧美日韩亚洲| 国产精品久久久久久久久免费相片 | 91丨porny丨中文| 亚洲国产高清不卡| 国产91丝袜在线18| 国产日韩精品一区二区三区在线| 激情亚洲综合在线| 精品日韩一区二区| 久久er99热精品一区二区| 欧美日韩一区久久| 亚洲成人午夜影院| 在线精品视频一区二区三四| 自拍偷在线精品自拍偷无码专区| 国产精品中文字幕日韩精品| 精品久久久久久无| 国产一区二区免费在线| 久久网站最新地址| 国产精品一二一区| 久久精品人人爽人人爽| 高清shemale亚洲人妖| 欧美精品一区二区蜜臀亚洲| 久久国产三级精品| 久久综合色一综合色88| 国产精品99久久不卡二区| 久久久久青草大香线综合精品| 国产成人午夜高潮毛片| 国产精品久久久久久久蜜臀| 成人网在线免费视频| 中国av一区二区三区| 99久久er热在这里只有精品15| 亚洲视频在线观看三级| 色爱区综合激月婷婷| 亚洲国产成人va在线观看天堂| 91精品国产一区二区| 精品中文av资源站在线观看| 国产人伦精品一区二区| 99v久久综合狠狠综合久久| 亚洲在线免费播放| 91精品国产乱码久久蜜臀| 久久精品国产精品亚洲综合| 久久综合狠狠综合| 91视频在线观看| 午夜精品在线看| 久久综合狠狠综合| 色综合一区二区三区| 日韩精品久久理论片| 久久婷婷国产综合精品青草 | 91精品免费在线| 精品中文av资源站在线观看| 中文字幕成人av| 欧美午夜精品一区二区蜜桃| 麻豆成人av在线| 中文字幕成人av| 欧美蜜桃一区二区三区| 国产精一区二区三区| 亚洲老妇xxxxxx| 欧美哺乳videos| 91在线精品一区二区| 青青国产91久久久久久| 欧美国产乱子伦| 欧美电影在线免费观看| 国产福利精品导航| 图片区小说区国产精品视频| 精品1区2区在线观看| 一本高清dvd不卡在线观看| 天堂在线一区二区| 中文字幕久久午夜不卡| 69p69国产精品| 大白屁股一区二区视频| 午夜国产精品影院在线观看| 国产日韩亚洲欧美综合| 欧美日韩一区二区三区四区 | 性感美女久久精品| 国产欧美日韩在线观看| 欧美一区午夜视频在线观看| 成人性生交大合| 日本欧美一区二区三区乱码 | 亚洲第一成人在线| 国产性天天综合网| 日韩一区二区三区电影 | 欧美大片一区二区| 欧美午夜电影一区| 成人视屏免费看| 国产一区在线看| 蜜桃久久久久久久|