TeamTalk IM_PDUBASE详解
1. 简介
用于TeamTalk通讯数据包的构造与解析
CImPdu结构为自定义头+protobuf序列化后的消息
该模块依赖于UtilPdu工具类,使用了protobuf第三方库
2. 常用接口说明
pdu header结构如下:
typedef struct {uint32_t length; // the whole pdu lengthuint16_t version; // pdu version numberuint16_t flag; // not useduint16_t service_id; //uint16_t command_id; //uint16_t seq_num; // 包序号uint16_t reversed; // 保留 } PduHeader_t;CSimpleBuffer m_buf; //pdu原始数据(header+protobuf序列化后的消息体) PduHeader_t m_pdu_header; //pdu消息头
bool IsPduAvailable(uchar_t* buf, uint32_t len, uint32_t& pdu_len)
对数据包头部4个字节即长度来校验buf是否完整void Write(uchar_t* buf, uint32_t len)
通过buf构造CImPdu内部成员CSimpleBuffer m_bufint ReadPduHeader(uchar_t* buf, uint32_t len)
从buf解析出包头数据,将buf字节数组转化成struct PduHeader_t,实际是构造CImPdu内部成员PduHeader_t m_pdu_headerCImPdu* ReadPdu(uchar_t *buf, uint32_t len)
读取pdu数据;
先校验pdu完整性(IsPduAvailable)再pPdu->Write(buf, pdu_len)保存完整pdu原始数据再ReadPduHeader解析出包头数据void WriteHeader()
通过m_pdu_header结构体信息构造m_buf字节数组头部信息void SetPBMsg(const google::protobuf::MessageLite* msg)
将msg序列化,内部使用了ProtoBufC数组的序列化APISerializeToArray;
SetPBMsg先m_buf.Read(NULL, m_buf.GetWriteOffset())清空m_buf再m_buf.Write(NULL, sizeof(PduHeader_t))预留出header空间,然后先设置包体(序列化后的msg),再设置Header。
3. Ubuntu 16.04 automake1.14编译安装指南
automake 1.15卸载解决方案
apt-get install autoconf
使用上述指令ubuntu 16.04会默认安装automake 1.15
可以用下面指令卸载
apt-get --purge remove autoconf通过源码包安装指南
依次下载
http://ftp.gnu.org/gnu/m4/m4-1.4.13.tar.gz
http://ftp.gnu.org/gnu/autoconf/autoconf-2.65.tar.gz
http://ftp.gnu.org/gnu/automake/automake-1.14.1.tar.gz
tar -zxvf xxx.tar.gz
cd xxx
./configure [–prefix]
make make install查看安装情况
which autoconf
which automake
4. protobuf库编译安装指南
3rdParty/package_protobuf存放了protobuf-2.6.1.tar.gz源码包
执行3rdParty/make_protobuf.sh即可
最后会将生成的头文件和库文件拷贝到3rdParty/pb供其他模块使用
注意点: protobuf-2.6.1需依赖automake 1.14,解决方案参考上文ubuntu 16.04 automake1.14编译安装指南
5. 生成.proto文件对应的c++代码
- 3rdParty/im_proto_files存放了TeamTalk所需.proto文件
- 执行3rdParty/im_proto_files/create.sh会在当前目录创建gen并生成相应c++代码
- 3rdParty/im_proto_files/sync.sh会将生成的c++代码复制到3rdParty/pb/protocol供其他模块使用
6. 源码
- 链接:TeamTalk_BlueBling/imPduBase
- 本项目主要为了学习teamtalk,尽量将每个细化模块独立出来并编写测试用例,方便移植。
- 测试demo: tests/test_impdubase.cpp
TeamTalk IM_PDUBASE详解相关推荐
- TeamTalk Netlib详解
1.简介 主要用于处理tcp连接,自己实现了一个网络库 2.类与接口 2.1 CBaseSocket:socket基础类,封装了常用网络api void CBaseSocket::_SetReuseA ...
- TeamTalk slog详解
1.简介 slog模块依赖于log4cxx,实际是对log4cxx的进一步封装. 2.主要类关系说明: CSLog teamtalk日志类,利用内部成员(CSLogObject* m_log)调用CS ...
- 【转】WebSocket详解(一):初步认识WebSocket技术
1.前言 HTML5规范在传统的web交互基础上为我们带来了众多的新特性,随着web技术被广泛用于web APP的开发,这些新特性得以推广和使用,而websocket作为一种新的web通信技术具有巨大 ...
- WebSocket详解(一):初步认识WebSocket技术
WebSocket详解(一):初步认识WebSocket技术 1.前言 HTML5规范在传统的web交互基础上为我们带来了众多的新特性,随着web技术被广泛用于web APP的开发,这些新特性得以推广 ...
- P2P技术详解(一):NAT详解——详细原理、P2P简介(转)
这是一篇介绍NAT技术要点的精华文章,来自华3通信官方资料库,文中对NAT技术原理的介绍很全面也很权威,对网络应用的应用层开发人员而言有很高的参考价值. <P2P技术详解>系列文章 ➊ 本 ...
- 015. P2P技术详解(一):NAT详解——详细原理、P2P简介
http://www.52im.net/thread-50-1-1.html 这是一篇介绍NAT技术要点的精华文章,来自华3通信官方资料库,文中对NAT技术原理的介绍很全面也很权威,对网络应用的应用层 ...
- (转)理论经典:TCP协议的3次握手与4次挥手过程详解
摘要: 本文将分别讲解经典的TCP协议建立连接(所谓的"3次握手")和断开连接(所谓的"4次挥手")的过程. 1.前言 尽管TCP和UDP都使用相同的网络层(I ...
- Web端即时通讯技术原理详解
Web端即时通讯技术原理详解 前言 在web端的IM即时通讯应用,由于浏览器的兼容性以及其固有的"客户端请求服务器处理并响应"的C/S通信模型,造成了要在浏览器中实现一个兼容性较好 ...
- 从命令行到IDE,版本管理工具Git详解(远程仓库创建+命令行讲解+IDEA集成使用)
首先,Git已经并不只是GitHub,而是所有基于Git的平台,只要在你的电脑上面下载了Git,你就可以通过Git去管理"基于Git的平台"上的代码,常用的平台有GitHub.Gi ...
- JVM年轻代,老年代,永久代详解
秉承不重复造轮子的原则,查看印象笔记分享连接↓↓↓↓ 传送门:JVM年轻代,老年代,永久代详解 速读摘要 最近被问到了这个问题,解释的不是很清晰,有一些概念略微模糊,在此进行整理和记录,分享给大家.在 ...
最新文章
- 【十九】require和include的区别
- 移植 stm32f7_移植zephyrOS到正点原子apollo STM32F767上
- [CQOI2015]选数(杜教筛)
- mysql 赋给用户权限 grant all privileges on
- linux开发板 杭州迈冲,杭州迈冲科技MC9G20-DK评估开发板
- 一步一步写算法(之 回数)
- Bailian4073 最长公共字符串后缀【文本处理】
- “七”待已久,“夕”望是你,“快”来学习,“乐”在其中!
- 计算机科学与技术是属于什么学科,计算机科学与技术专业属于什么大类 属于哪个学科...
- Google 抓取工具(Googlebot)汇总
- 最详细的世界集成电路发展历史足迹
- #include“stdafx.h”详解
- 百度首页制作 (仿百度首页)
- anconda各个版本下载
- 初学盲打,免费,免安装,高颜值的在线打字练习网站
- c++ linux utf-8 编码 中文汉字分割(超简单代码)
- 《电子元器件的可靠性》——2.3节可靠性基本术语和主要特征量
- 全网详细介绍nginx的反向代理、正向代理配置,location的指令说明,反向代理的两个示例代码以及全局块,events块和http快的说明。
- 在线项目管理软件的重要性
- Jetty的安装、配置和使用(三种使用方式)