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

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

?? ecostestdownloadfilter.cpp

?? ecos實時嵌入式操作系統
?? CPP
字號:
//####COPYRIGHTBEGIN####//                                                                          // ----------------------------------------------------------------------------// Copyright (C) 1998, 1999, 2000 Red Hat, Inc.//// This program is part of the eCos host tools.//// This program is free software; you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by the Free // Software Foundation; either version 2 of the License, or (at your option) // any later version.// // This program is distributed in the hope that it will be useful, but WITHOUT // ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or // FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for // more details.// // You should have received a copy of the GNU General Public License along with// this program; if not, write to the Free Software Foundation, Inc., // 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.//// ----------------------------------------------------------------------------//                                                                          //####COPYRIGHTEND####//=================================================================////        eCosTestDownloadFilter.cpp////        Socket/serial download filter class////=================================================================//=================================================================//#####DESCRIPTIONBEGIN####//// Author(s):     jskov// Contributors:  jskov// Date:          1999-09-20// Description:   This filter sits between the (farm) host's socket and//                the serial connection to the target board. The//                filter listens for special download packets from the//                client using the board. The download packet allows//                the relative slow GDB download protocol to be restricted//                to the connection between the farm host and the board.//                This prevents slow downloads due to long round-trip times//                and TCP packets with only a few bytes in them.// To Do://  o Move parts shared between eCosTestDownloadFilter and eCosTestSerialFilter//    into a shared class.//####DESCRIPTIONEND#####include "eCosStd.h"#include "eCosTrace.h"#include "eCosTestDownloadFilter.h"CeCosTestDownloadFilter::CeCosTestDownloadFilter():    m_bNullFilter(false), m_bOptSerDebug(false), m_bOptFilterTrace(false),    m_nCmdIndex(0), m_bCmdFlag(false), m_bContinueSession(false){}CeCosTestDownloadFilter::~CeCosTestDownloadFilter(){}//------------------------// Output helpers.voidCeCosTestDownloadFilter::ConsoleWrite(const char* pszStr){    fputs(pszStr, stderr);    fflush(stderr);}voidCeCosTestDownloadFilter::Trace(const char* pszFormat, ...){  va_list marker;  va_start (marker, pszFormat);    for(int nLength=100;nLength;) {    char *buf=new char[1+nLength];    int n=vsnprintf(buf+4, nLength-4, pszFormat, marker );     if(-1==n){      nLength*=2;  // NT behavior    } else if (n<nLength){      memcpy(buf,"[d] ",4);      ConsoleWrite(buf);      nLength=0;   // trigger exit from loop    } else {      nLength=n+1; // UNIX behavior generally, or NT behavior when buffer size exactly matches required length    }    delete [] buf;  }    va_end (marker);}voidCeCosTestDownloadFilter::PrintHex(const unsigned char* d1, int len, data_origin_t origin/*=SF_TARGET*/){    int offset = 0;    int i;    char buf[128];    int width = 8;    while (len) {        int count = MIN(width, len);        char* p = buf;        switch (origin) {        case SF_TARGET:            p += sprintf(p, "T");            break;        case SF_FILTER:            p += sprintf(p, "F");            break;        }        p += sprintf(p, ":%04x ", offset);        // Print hex values.        for (i = 0; i < count; i++)            p += sprintf(p, "%02x ", d1[i]);        for (     ; i < width   ; i++)            p += sprintf(p, ".. ");        // Print ASCII string        p += sprintf(p, "'");        for (i = 0; i < count; i++) {            int c = d1[i];            if (' ' >= c || 'z' <= c)                c = '.';            p += sprintf(p, "%c", c);        }        sprintf(p, "'\n");        Trace("%s", buf);        len -= count;        offset += count;        d1 += count;    }}voidCeCosTestDownloadFilter::TargetWrite(CeCosSerial &pSer,                                     const unsigned char* buffer, int len){    unsigned int __written;    if (m_bOptSerDebug)        PrintHex(buffer, len, SF_FILTER);    do {        if (!(pSer.Write((void*) buffer, len, __written))) {            fprintf(stderr, "Writing %d bytes to serial failed\n", len);            fprintf(stderr, "%s", (LPCTSTR)pSer.ErrString());            throw _T("serial write failed");        }        buffer += __written;        len -= __written;    } while (len);}// Snuffed from gdb/remote.cintCeCosTestDownloadFilter::tohex (int nib){    if (nib < 10)        return '0'+nib;    else        return 'a'+nib-10;}intCeCosTestDownloadFilter::hexnumstr (unsigned char* buf, unsigned long num){  int i;  unsigned long num2 = num;  for (i = 0; num2 != 0; i++)    num2 >>= 4;  int len = MAX (i, 1);  buf[len] = '\0';  for (i = len - 1; i >= 0; i--)    {      buf[i] = "0123456789abcdef" [(num & 0xf)];      num >>= 4;    }  return len;}intCeCosTestDownloadFilter::hexnumlen (unsigned long num){  int i;  unsigned long num2 = num;  for (i = 0; num2 != 0; i++)    num2 >>= 4;  return MAX (i, 1);}// Based on routines in gdb/remote.cintCeCosTestDownloadFilter::put_binary (unsigned char* buf, int len,                                     unsigned long dl_address,                                     int packet_size,                                     CeCosSerial& serial){    int i;    unsigned char csum;    Buffer buf2(packet_size);    unsigned char ch;    int tcount = 0;    unsigned char *p, *p2, *plen;    while (len > 0) {        /* Subtract header overhead from MAX payload size:            $M<memaddr>,<len>:#nn */        int max_buf_size =             buf2.Size()             - ( 2 + hexnumlen(dl_address) + 1 + hexnumlen(buf2.Size()) + 4);        /* Copy the packet into buffer BUF2, encapsulating it           and giving it a checksum.  */        int todo = MIN (len, max_buf_size);        p = (unsigned char*) buf2.Data();        *p++ = '$';        // Add X header.        *p++ = 'X';        p += hexnumstr(p, dl_address);        *p++ = ',';        plen = p;			/* remember where len field goes */        p += hexnumstr(p, todo);        *p++ = ':';        int escaped = 0;        for (i = 0;             (i < todo) && (i + escaped) < (max_buf_size - 2);             i++)        {            switch (buf[i] & 0xff)            {            case '$':            case '#':            case 0x7d:                /* These must be escaped */                escaped++;                *p++ = 0x7d;                *p++ = (unsigned char) ((buf[i] & 0xff) ^ 0x20);                break;            default:                *p++ = (unsigned char) (buf[i] & 0xff);                break;            }        }        if (i < todo)        {            /* Escape chars have filled up the buffer prematurely,                and we have actually sent fewer bytes than planned.               Fix-up the length field of the packet.  */                    /* FIXME: will fail if new len is a shorter string than                old len.  */                        plen += hexnumstr (plen, i);            *plen++ = ':';        }        // Calculate checksum        p2 = (unsigned char*)buf2.Data();        p2++; // skip $        csum = 0;        while (p2 < p)            csum = (unsigned char)(csum + *p2++);        *p++ = '#';        *p++ = (unsigned char) tohex ((csum >> 4) & 0xf);        *p++ = (unsigned char) tohex (csum & 0xf);        /* Send it over and over until we get a positive ack.  */        int resend = 1;        const unsigned char* write_ptr = (const unsigned char*) buf2.Data();        int write_len = (int)p-(int)buf2.Data();        while (resend)        {            unsigned int __written;            Trace("Sending bytes for %p-%p\n", dl_address, dl_address+i);            TargetWrite(serial, write_ptr, write_len);            /* read until either a timeout occurs (-2) or '+' is read */            for(;;)            {                unsigned int __read;                serial.Read(&ch, 1, __read);                                if (0 == __read) {                    tcount ++;                    if (tcount > 3) {                        Trace("Timeout in putpkt_binary\n");                        return 0;                    }                    break;		/* Retransmit buffer */                }                                switch (ch)                {                case '+':                    // Now expect OK packet from target                    unsigned char ok_msg[6];// $OK#9a                    serial.Read(ok_msg, 6, __read);                                        // Reply with ACK                    serial.Write((void*)"+", 1, __written);                                        // And process next packet.                    resend = 0;                    break;                case '-':                    // Bad packet CRC. Retransmit.                    Trace ("Bad CRC\n");                    break;                                    default:                    Trace("Got junk..%02x\n", ch);                    continue;           // keep reading                }                break;		/* Here to retransmit */            }        }        len -= i;        dl_address += i;        buf += i;    }    return 1;}    bool CALLBACKDownloadFilterFunction(void*& pBuf,                       unsigned int& nRead,                       CeCosSerial& serial,                       CeCosSocket& socket,                       void* pParem){    CeCosTestDownloadFilter* p = (CeCosTestDownloadFilter*) pParem;    bool res = false;    try {        res = p->FilterFunctionProper(pBuf, nRead, serial, socket);    }     catch (LPCTSTR s) {        TRACE(_T("Download filter caught string: %s\n"), s);    }    catch (...) {        TRACE(_T("Download filter caught unknown exception\n"));    }    return res;}boolCeCosTestDownloadFilter::FilterFunctionProper(void*& pBuf,                                              unsigned int& nRead,                                              CeCosSerial& serial,                                              CeCosSocket& socket){    char* buffer = (char*) pBuf;    // Assume the worst - don't allow session to continue until a successful    // download.    m_bContinueSession = false;    // Output the serial data if option enabled    if (m_bOptSerDebug)        PrintHex((unsigned char*) buffer, nRead);    // Stop here if in NULL-filter mode    if (m_bNullFilter)        return true;    // Command handling.    // Be strict here; very first byte we see must be the start marker,    // else go into NULL-filter mode    unsigned int i = 0;    if (!m_bCmdFlag) {        if ('@' != buffer[i]) {            m_bNullFilter = true;            return true;        }        m_bCmdFlag = true;    }    // If reading a command, look for the end marker.    if (m_bCmdFlag) {        char c = 0;        while (i < nRead && m_nCmdIndex < MAX_CMD_LEN) {            c = buffer[i++];            m_aCmd[m_nCmdIndex++] = c;            if ('!' == c) {                if (i != nRead) {                    throw _T("Extra bytes after command packet!?!");                }            }        }        if (MAX_CMD_LEN == m_nCmdIndex) {            Trace("Received too long command. Ignoring it!\n");            m_nCmdIndex = 0;            m_bCmdFlag = false;        } else if ('!' == c) {            // Was the command completed?            m_aCmd[m_nCmdIndex - 1] = 0;// terminate cmd            m_nCmdIndex = 0;            m_bCmdFlag = false;            // command now in m_aCmd[]            Trace("Got command %s\n", m_aCmd);            // After this, never interfere.            m_bNullFilter = true;            // Get arguments: @<length>:<dl_address>:<start_address>!            int length, packet_size;            unsigned long dl_addr, start_addr;            INIT_VALUE(&m_aCmd[1]);            SET_VALUE(int, length);            SET_VALUE(unsigned long, dl_addr);            SET_VALUE(unsigned long, start_addr);            SET_VALUE(int, packet_size);            Trace("len %d, dl %08x, start %08x, packet_size %d\n",                   length, dl_addr, start_addr, packet_size);            // Reply so host will send file.            socket.send("@", 1);            // Read file from host            Buffer buf(length);            if (socket.recv(buf.Data(), length)) {                            // Remember old blocking state, and set serial to                // blocking reads.                bool __blocking = serial.GetBlockingReads();                serial.SetBlockingReads(true);                serial.Flush();                // Send + to target, acking whatever packet was pending                unsigned int __written = 0;                serial.Write((void*)"+", 1, __written);                                // Convert to packets and transfer to target.                if (put_binary((unsigned char*) buf.Data(),                                length, dl_addr, packet_size, serial)) {                    // Send detach signal to target                    unsigned char ch;                    unsigned int __read;                    serial.Write((void*)"$D#44", 5, __written);                    serial.Read(&ch, 1, __read);                                        // Reply to host marking end of download                    socket.send("+", 1);                    // Let server know it's OK to accept another connection                    // in this session.                    m_bContinueSession = true;                } else {                    // Reply to host marking failed download                    socket.send("-", 1);                }                // Reset previous blocking mode                serial.SetBlockingReads(__blocking);            } else {                // Reply to host marking failed file transfer                socket.send("?", 1);            }        }        nRead = 0;                      // Never leave anything for caller                                        // This is a violation of the intended                                        // filter function behavior.    }    return true;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩精品免费观看视频| 久久先锋影音av鲁色资源网| 日韩欧美亚洲另类制服综合在线| 精品久久久久久久久久久久久久久| 国产精品国产自产拍高清av| 美女www一区二区| 99久久99久久精品免费观看| 欧美成人精品福利| 亚洲成人你懂的| 成人精品免费看| 久久亚洲一级片| 日韩精品成人一区二区三区| 日韩色在线观看| 一区二区视频在线看| 国产精品亚洲视频| 欧美一区二区播放| 国精产品一区一区三区mba视频 | 国产精品自拍在线| 欧美日韩不卡在线| 亚洲一区二区中文在线| av激情亚洲男人天堂| 久久毛片高清国产| 国产尤物一区二区在线| 欧美一级在线免费| 日本成人中文字幕在线视频| 欧美三级三级三级| 亚洲成人综合在线| 欧美日韩色综合| 亚洲另类在线视频| 色94色欧美sute亚洲13| 日韩毛片在线免费观看| eeuss影院一区二区三区| 欧美韩国一区二区| 丁香网亚洲国际| 国产精品麻豆网站| av电影在线不卡| 亚洲区小说区图片区qvod| 不卡av在线免费观看| 国产精品麻豆欧美日韩ww| 成人av在线资源| 亚洲欧洲精品一区二区三区| 成人app网站| 国产精品热久久久久夜色精品三区 | 欧美一区国产二区| 免费视频最近日韩| 欧美精品一区二区三区在线 | 中文一区在线播放| 99久久免费国产| 亚洲综合一区二区| 欧美日本国产视频| 免费观看久久久4p| 国产欧美1区2区3区| 91日韩在线专区| 亚洲成人一区二区| 亚洲欧美乱综合| 欧美色涩在线第一页| 青青草原综合久久大伊人精品优势| 欧美一区二区三区免费在线看| 精品一区二区日韩| 国产精品精品国产色婷婷| 在线观看网站黄不卡| 免费在线观看精品| 亚洲欧洲性图库| 91精选在线观看| 国产成人日日夜夜| 亚洲成在线观看| 国产清纯美女被跳蛋高潮一区二区久久w| 成人免费av资源| 亚洲电影在线播放| 久久久精品影视| 色呦呦国产精品| 国模套图日韩精品一区二区| 日韩理论片一区二区| 日韩精品中文字幕在线一区| jizz一区二区| 麻豆精品在线视频| 亚洲最快最全在线视频| 精品国产青草久久久久福利| 色婷婷久久久亚洲一区二区三区| 亚洲h动漫在线| 欧美国产欧美综合| 日韩精品一区国产麻豆| 91在线高清观看| 国产真实乱对白精彩久久| 亚洲综合色自拍一区| 国产色综合一区| 在线成人午夜影院| 91香蕉视频在线| 国产精品一区二区不卡| 午夜欧美视频在线观看| 亚洲桃色在线一区| 久久久www成人免费毛片麻豆| 欧美日韩午夜在线视频| 色综合一个色综合| 国产精品黄色在线观看| 亚洲精品一区二区三区影院| 91成人网在线| 9人人澡人人爽人人精品| 国产在线乱码一区二区三区| 亚洲成人免费观看| 夜夜精品浪潮av一区二区三区| 欧美国产丝袜视频| 亚洲国产欧美在线人成| 国产精品国产三级国产有无不卡| 国产亚洲精品久| 欧美精品一区二区不卡| 日韩午夜电影av| 91精品国产综合久久国产大片| 91精彩视频在线观看| 99re热视频精品| 91在线视频18| 97久久超碰国产精品| 99国产一区二区三精品乱码| 成人晚上爱看视频| 成人福利在线看| 成人av在线资源| 99re这里只有精品6| 不卡的av中国片| 97久久超碰国产精品| 日本高清成人免费播放| 欧美四级电影在线观看| 欧美三级日韩三级| 欧美一区三区四区| 精品国产成人在线影院| 久久综合九色综合久久久精品综合| 2021中文字幕一区亚洲| 国产亚洲综合色| 亚洲欧洲日韩av| 亚洲一区二区三区三| 亚洲成人激情社区| 麻豆精品视频在线| 国产尤物一区二区在线| 成人动漫一区二区在线| 一道本成人在线| 欧美二区三区的天堂| 欧美成人综合网站| 国产精品久久777777| 亚洲一区二区三区四区五区黄 | 国产精品高潮呻吟久久| 一色屋精品亚洲香蕉网站| 一级精品视频在线观看宜春院 | 成人黄色大片在线观看| 91在线观看视频| 欧美日韩国产免费| 久久久www成人免费毛片麻豆 | 国产精品久久久久久妇女6080 | 秋霞av亚洲一区二区三| 国产综合色产在线精品| 菠萝蜜视频在线观看一区| 欧美日韩久久久| 久久久久亚洲蜜桃| 亚洲自拍另类综合| 国产乱码精品1区2区3区| 91丨porny丨中文| 日韩一区二区三| 亚洲欧洲精品成人久久奇米网| 视频一区中文字幕| 成人动漫在线一区| 日韩欧美激情在线| 亚洲欧美偷拍三级| 国内精品国产三级国产a久久| 日本乱码高清不卡字幕| 久久综合狠狠综合| 三级欧美在线一区| av资源站一区| ww久久中文字幕| 亚洲福利一区二区三区| 国产乱码字幕精品高清av| 欧美老女人第四色| 日韩毛片在线免费观看| 国产一区二区三区四区五区入口 | 国产美女在线观看一区| 欧美三级视频在线播放| 国产精品少妇自拍| 美女视频黄 久久| 欧美午夜理伦三级在线观看| 一区二区在线观看视频| 国产精华液一区二区三区| 538prom精品视频线放| 一区二区三区在线观看动漫| 高清不卡一区二区| xvideos.蜜桃一区二区| 日欧美一区二区| 欧美系列在线观看| 日韩美女啊v在线免费观看| 成人午夜视频在线观看| 久久综合av免费| 经典三级在线一区| 日韩欧美视频在线| 欧美aaaaaa午夜精品| 欧美精品电影在线播放| 一区二区三区电影在线播| 99v久久综合狠狠综合久久| 中文字幕不卡在线观看| 国产精品123区| 国产网站一区二区| 国产电影一区在线| 日本一区二区成人| 国产69精品一区二区亚洲孕妇| 久久精品免视看|