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

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

?? messages.c

?? linux下的dvb收看解析軟件代碼; 帶參考程序
?? C
字號:
/*Copyright (C) 2006  Adam CharrettThis program is free software; you can redistribute it and/ormodify it under the terms of the GNU General Public Licenseas published by the Free Software Foundation; either version 2of 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 ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See theGNU General Public License for more details.You should have received a copy of the GNU General Public Licensealong with this program; if not, write to the Free SoftwareFoundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USAmessages.cBinary Communications protocol message manipulation functions.*/#include <stdlib.h>#include <string.h>#include <unistd.h>#include <stdarg.h>#include "logging.h"#include "types.h"#include "messages.h"#define MESSAGE_CHECKDATAAVAILABLE(_msg, _requiredlen) \    do{ \        if (((_msg)->currentpos + (_requiredlen)) > (_msg)->length) \        { \            return 1; \        } \    }while(0)#define MESSAGE_CHECKSPACEAVAILABLE(_msg, _requiredlen) \    do{ \        if (((_msg)->currentpos + (_requiredlen)) > MESSAGE_MAX_LENGTH) \        { \            return 1; \        } \    }while(0)#define MESSAGE_UPDATELENGTHPOS(_msg, _add) \    do{ \        if (((_msg)->currentpos + (_add)) > (_msg)->length) \        { \            (_msg)->length = (_msg)->currentpos + (_add); \        } \        (_msg)->currentpos += _add; \    }while(0)/******************************************************************************//* Message Send/Receive functions                                             *//******************************************************************************/int MessageRecv(Message_t *msg, int fromfd){    char header[4];    if (read(fromfd, header, sizeof(header)) != sizeof(header))    {        /* Socket must be dead exit this connection! */        return 1;    }    msg->code = (header[0] << 8) | (header[1] & 0xff);    msg->length = (header[2] << 8) | (header[3] & 0xff);    msg->currentpos = 0;    if (read(fromfd, msg->buffer, msg->length) != msg->length)    {        /* Socket must be dead exit this connection! */        return 1;    }    return 0;}int MessageSend(Message_t *msg, int tofd){    char header[4];    header[0] = (msg->code >> 8) & 0xff;    header[1] = (msg->code     ) & 0xff;    header[2] = (msg->length >> 8) & 0xff;    header[3] = (msg->length     ) & 0xff;    if (write(tofd, header, sizeof(header)) != sizeof(header))    {        /* Socket must be dead exit this connection! */        return 1;    }    if (write(tofd, msg->buffer, msg->length) != msg->length)    {        /* Socket must be dead exit this connection! */        return 1;    }    return 0;}/******************************************************************************//* High level message formating/parsing functions                             *//* printf/scanf-style message formating function, but without the % as there  *//* is no simple/obvious way of interpreting other characters meanings.        *//* s = string                                                                 *//* b = uint8                                                                  *//* d = uint16                                                                 *//* l = uint32                                                                 *//******************************************************************************/int MessageEncode(Message_t *msg, char *format, ...){    int paramsEncoded = 0;    int i;    va_list args;    va_start(args, format);    for (i = 0; format[i]; i ++)    {        bool failed = FALSE;        switch (format[i])        {            case 's':            case 'S':            {                char *string = va_arg(args, char *);                failed = MessageWriteString(msg, string);            }            break;            case 'b':            case 'B':            {                uint8_t byte = (uint8_t)va_arg(args, int);                failed = MessageWriteUint8(msg, byte);            }            break;            case 'd':            case 'D':            {                uint16_t uint16 = (uint16_t)va_arg(args, int);                failed = MessageWriteUint16(msg, uint16);            }            break;            case 'l':            case 'L':            {                uint32_t uint32 = va_arg(args, uint32_t);                failed = MessageWriteUint32(msg, uint32);            }            break;            default:            failed = TRUE;            break;        }        if (failed)        {            break;        }        paramsEncoded ++;    }    va_end(args);    return paramsEncoded;}int MessageDecode(Message_t *msg, char *format, ...){    int paramsDecoded = 0;    int i;    va_list args;    va_start(args, format);    for (i = 0; format[i]; i ++)    {        bool failed = FALSE;        switch (format[i])        {            case 's':            case 'S':            {                char **string = va_arg(args, char **);                failed = MessageReadString(msg, string);            }            break;            case 'b':            case 'B':            {                uint8_t *byte = va_arg(args, uint8_t *);                failed = MessageReadUint8(msg, byte);            }            break;            case 'd':            case 'D':            {                uint16_t *uint16 = va_arg(args, uint16_t *);                failed = MessageReadUint16(msg, uint16);            }            break;            case 'l':            case 'L':            {                uint32_t *uint32 = va_arg(args, uint32_t *);                failed = MessageReadUint32(msg, uint32);            }            break;            default:            failed = TRUE;            break;        }        if (failed)        {            break;        }        paramsDecoded ++;    }    va_end(args);    return paramsDecoded;}/******************************************************************************//* Low Level Message writing/reading functions                                *//* Return 0 if ok, 1 if reading/writing the field would overrun the message   *//* length.                                                                    *//******************************************************************************/int MessageReadString(Message_t *msg, char **result){    char *str = NULL;    int size = 0;    MESSAGE_CHECKDATAAVAILABLE(msg, 1);    size = msg->buffer[msg->currentpos];    msg->currentpos ++;    MESSAGE_CHECKDATAAVAILABLE(msg, size);    str = malloc(size + 1);    if (!str)    {        *result = NULL;        msg->currentpos += size;        return 0;    }    str[size] = 0;    memcpy(str, &msg->buffer[msg->currentpos], size);    msg->currentpos += size;    *result = str;    return 0;}int MessageReadUint8(Message_t *msg, uint8_t *result){    MESSAGE_CHECKDATAAVAILABLE(msg, 1);    *result = msg->buffer[msg->currentpos];    msg->currentpos ++;    return 0;}int MessageReadUint16(Message_t *msg, uint16_t *result){    MESSAGE_CHECKDATAAVAILABLE(msg, 2);    *result = ((msg->buffer[msg->currentpos    ] << 8) & 0xff00) |              ((msg->buffer[msg->currentpos + 1]     ) & 0x00ff) ;    msg->currentpos += 2;    return 0;}int MessageReadUint32(Message_t *msg, uint32_t *result){    MESSAGE_CHECKDATAAVAILABLE(msg, 4);    *result = ((msg->buffer[msg->currentpos    ] << 24) & 0xff000000) |              ((msg->buffer[msg->currentpos + 1] << 16) & 0x00ff0000) |              ((msg->buffer[msg->currentpos + 2] << 8 ) & 0x0000ff00) |              ((msg->buffer[msg->currentpos + 3]      ) & 0x000000ff);    msg->currentpos += 4;    return 0;}int MessageWriteString(Message_t *msg, char *towrite){    int len = 0;    if (towrite)    {        len = strlen(towrite) & 0xff;    }    MESSAGE_CHECKSPACEAVAILABLE(msg, 1 + len);    msg->buffer[msg->currentpos] = len;    if (towrite)    {        memcpy(&msg->buffer[msg->currentpos + 1], towrite, len);    }    MESSAGE_UPDATELENGTHPOS(msg, 1 + len);    return 0;}int MessageWriteUint8(Message_t *msg, uint8_t towrite){    MESSAGE_CHECKSPACEAVAILABLE(msg, 1);    msg->buffer[msg->currentpos] = towrite;    MESSAGE_UPDATELENGTHPOS(msg, 1);    return 0;}int MessageWriteUint16(Message_t *msg, uint16_t towrite){    MESSAGE_CHECKSPACEAVAILABLE(msg, 2);    msg->buffer[msg->currentpos    ] = (towrite >> 8);    msg->buffer[msg->currentpos + 1] = towrite & 0xff;    MESSAGE_UPDATELENGTHPOS(msg, 2);    return 0;}int MessageWriteUint32(Message_t *msg, uint32_t towrite){    MESSAGE_CHECKSPACEAVAILABLE(msg, 4);    msg->buffer[msg->currentpos    ] = (towrite >> 24);    msg->buffer[msg->currentpos + 1] = (towrite >> 16);    msg->buffer[msg->currentpos + 2] = (towrite >>  8);    msg->buffer[msg->currentpos + 3] = towrite & 0xff;    MESSAGE_UPDATELENGTHPOS(msg, 4);    return 0;}void MessageReset(Message_t *msg){    msg->length = 0;    msg->currentpos = 0;}void MessageSeek(Message_t *msg, int offset){    if (offset > msg->length)    {        msg->length = offset;    }    msg->currentpos = offset;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲第一狼人社区| 色菇凉天天综合网| 色综合天天综合色综合av| 91精品国产欧美日韩| 亚洲视频综合在线| 久久精品国内一区二区三区| 91丝袜高跟美女视频| 久久亚区不卡日本| 日韩国产欧美三级| 色婷婷久久99综合精品jk白丝| 精品成人私密视频| 五月天激情小说综合| 99国产欧美另类久久久精品| 欧美极品aⅴ影院| 看片的网站亚洲| 欧美日韩精品专区| 亚洲综合一区在线| 成人av网址在线| 国产亚洲va综合人人澡精品| 七七婷婷婷婷精品国产| 欧美亚洲丝袜传媒另类| 一区二区日韩av| 91丝袜呻吟高潮美腿白嫩在线观看| 久久久国际精品| 精品一区二区三区在线播放 | 7777精品伊人久久久大香线蕉经典版下载| 中文字幕精品一区二区精品绿巨人| 秋霞成人午夜伦在线观看| 欧美日韩国产精选| 亚洲6080在线| 这里是久久伊人| 日韩专区欧美专区| 制服丝袜亚洲播放| 日韩黄色免费网站| 欧美精品一二三四| 免费成人美女在线观看.| 欧美一区二区三区免费观看视频| 日韩精品免费专区| 久久综合久久鬼色| 麻豆精品国产传媒mv男同| 欧美一区二区三区视频免费播放| 丝袜美腿亚洲一区| 精品国产露脸精彩对白| 国产一区二区三区四区在线观看| 久久精品男人天堂av| 成人av在线一区二区| 一区二区三区四区在线免费观看| 欧美亚洲一区三区| 蜜臀精品久久久久久蜜臀| 精品少妇一区二区三区免费观看 | 精品午夜久久福利影院| 久久久亚洲高清| 粉嫩嫩av羞羞动漫久久久| 国产精品麻豆一区二区| 色婷婷久久一区二区三区麻豆| 亚洲福利一区二区| 欧美变态tickling挠脚心| 国产a久久麻豆| 亚洲精品久久7777| 欧美电影精品一区二区| av不卡免费电影| 性久久久久久久久久久久| 精品国产凹凸成av人导航| 成人福利视频网站| 午夜精品福利一区二区三区蜜桃| 精品久久人人做人人爰| 色综合久久久久综合| 日韩精品亚洲专区| 中文一区二区在线观看| 欧美男女性生活在线直播观看| 国产成人一区在线| 亚洲va欧美va国产va天堂影院| 精品国产伦一区二区三区观看方式 | 91黄色免费网站| 另类综合日韩欧美亚洲| 亚洲欧洲综合另类| 精品日产卡一卡二卡麻豆| 日本乱码高清不卡字幕| 国产精品一区二区在线播放| 亚洲精品乱码久久久久久黑人 | 日韩视频中午一区| aaa国产一区| 久久国内精品自在自线400部| 综合在线观看色| 欧美精品一区二区在线观看| 欧美中文一区二区三区| 成人激情小说网站| 日韩精品三区四区| 伊人开心综合网| 亚洲欧洲成人精品av97| 久久综合九色综合97婷婷女人 | 久久久久久**毛片大全| 欧美三级午夜理伦三级中视频| 国产成人亚洲综合a∨婷婷图片| 日本伊人午夜精品| 亚洲国产精品一区二区久久恐怖片| 国产精品久久久久影视| 久久婷婷综合激情| 日韩欧美一二三| 制服丝袜亚洲播放| 欧美日高清视频| 欧美亚洲愉拍一区二区| 色乱码一区二区三区88| av电影一区二区| 成人黄色在线视频| av在线不卡网| 成人亚洲一区二区一| 懂色中文一区二区在线播放| 国产主播一区二区三区| 理论电影国产精品| 精品一区二区免费视频| 久久99国产精品麻豆| 久久成人久久鬼色| 久久99国产精品免费| 国产真实乱偷精品视频免| 久久国产精品99久久久久久老狼 | 成人av片在线观看| 不卡的电视剧免费网站有什么| 成人一区二区三区中文字幕| 成人小视频免费在线观看| 成人综合婷婷国产精品久久 | 国产精品一区二区三区网站| 国产精品资源网站| 成人h版在线观看| 91在线免费视频观看| 91久久免费观看| 欧美日韩一区二区三区免费看| 欧美日韩一区二区在线观看视频 | 国产一区二区三区免费看 | 欧美经典一区二区| 18欧美亚洲精品| 亚洲午夜久久久| 免费成人av在线| 国产剧情一区二区| 99综合电影在线视频| 欧美亚洲自拍偷拍| 欧美videos大乳护士334| 日本一区二区三区四区在线视频| 国产精品国产精品国产专区不蜜 | 欧美日韩黄色影视| 欧美zozozo| 亚洲色图欧美激情| 婷婷六月综合网| 国产乱人伦精品一区二区在线观看| 成人永久aaa| 欧美日本韩国一区二区三区视频 | 国产精品电影院| 亚洲综合激情网| 久久99国产精品麻豆| 91蜜桃传媒精品久久久一区二区| 欧美视频你懂的| 久久久精品一品道一区| 樱花草国产18久久久久| 精品一区二区三区免费视频| 99久久er热在这里只有精品15| 欧美性生交片4| 久久精品亚洲国产奇米99| 亚洲一区在线观看免费 | 中文文精品字幕一区二区| 一区二区三区在线视频免费观看| 久热成人在线视频| 91丝袜美腿高跟国产极品老师| 日韩三级高清在线| 亚洲欧美日韩国产一区二区三区| 蜜桃久久久久久| 在线一区二区三区做爰视频网站| 欧美精品一区在线观看| 亚洲va国产天堂va久久en| 国产成人免费视频网站 | 国产精品天美传媒| 看电影不卡的网站| 欧美天堂一区二区三区| 亚洲欧美一区二区视频| 国产精品99久久久久久久vr| 制服丝袜激情欧洲亚洲| 亚洲综合色噜噜狠狠| 99久精品国产| 国产精品毛片久久久久久久| 极品少妇一区二区| 欧美一区二区三区思思人| 亚洲午夜精品久久久久久久久| 成人av综合在线| 中文字幕乱码久久午夜不卡| 激情综合色综合久久综合| 欧美日韩1区2区| 亚洲国产cao| 欧美探花视频资源| 夜夜精品视频一区二区| 97久久超碰精品国产| 国产精品国产自产拍高清av| 国产成人精品综合在线观看| 久久综合狠狠综合久久综合88 | 亚洲第一主播视频| 欧美性色黄大片| 亚洲成人激情av| 欧美日韩情趣电影| 午夜视频在线观看一区二区三区| 色综合色狠狠天天综合色| 亚洲日本va在线观看| 色素色在线综合|