正文

一种封装报文的方法2007-02-04 22:05:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/ljqy/23114.html

分享到:

 假设需要封装的报文为pucMBufMsg,该缓存前RESERVED_LEN个字节预留为(报文信息+MAC+UDP+IP),从第RESERVED_LEN +1个字节为数据。具体使用方法如下:      #define RESERVED_LEN 100  /*预留假设100个字节*/   ULONG *p =  (ULONG*)pucMBufMsg;  /*定义ULONG型指针指向报文*/      p[0] = ulIndex;   /*第一个4字节可以放置唯一标识,或用户标识,用于区别*/      p[1] = (ULONG)(pucMBufMsg + RESERVED_LEN);   /*指向数据取*/      p[2] = ulLen;     /*数据的有效长度*/   当我们需要再往缓存里追加数据时,比如希望进行IP封装时只需做如下操作     ULONG IPHeadLen = 20; /*20B*/      p[1]  -=  (ULONG*)(UCHAR*)p[1]- IPHeadLen );   /*指向新的数据区*/      p[2]  +=  IPHeadLen ;     /*数据的有效长度*/         memcpy((void*)p[1], pucIPHead,  IPHeadLen);      可以将以上的一些操作进行如下的封装:   /*从MBUF中取报文首指针*/ UCHAR * MBUF_MTOD(UCHAR *pMbuf) {     ULONG *pHead = (ULONG*)pMbuf;       return (UCHAR*)pHead[1]; }   /*报文头增加数据*/ UCHAR *MBUF_PREPEND_MEMORY_SPACE(UCHAR *pMbuf, ULONG uLen) {     ULONG pHead = (ULONG*)pMbuf;     pHead[1] -=  ulLen;  /*报文指针前移*/     pHead[2] +=  ulLen;  /*报文增加长度*/ }   /*获取整个数据长度*/ ULONG MBUF_GET_TOTAL_DATA_LENGTH(UCHAR *pMbuf) {     ULONG *pHead = (ULONG*)pMbuf;       return pHead[2]; }   /*拷贝数据到另一缓存中*/ ULONG MBUF_CopyDataFromMBufToBuffer(UCHAR *pMbuf, ULONG uLen, UCHAR *pPacket) {     if( (NULL == pMbuf) || (NULL == pPacket) )     {         return FAIL;     }       ULONG *pM = (ULONG*)pMbuf;     UCHAR *pData = (UCHAR*)pM[1];       memcpy(pPacket, pData, uLen);       return OK; }

阅读(2812) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册