OpenRTMFP/Cumulus性能优化(4) RTMFP协议详解(1)
2013-03-12 17:03
369 查看
一.在握手创建session阶段,接收到的packet包的id都为0,该阶段的主要过程为client端发送hello数据块至server端,然后,server端也会创建rhello数据块响应client端,rhello包含server端创建的cookie以及认证证书certificate,具体流程如下:
二.对接收到的packet进行处理如下:
接收到的packet结构如下,(该图为网友提供):
![](http://img.my.csdn.net/uploads/201303/12/1363079197_4556.JPG)
1.UInt8 marker = packet.read8();//读取Marker
UInt16 time = packet.read16();//读取TimeSent
UInt8 id = packet.read8();//读取TypeID
UInt16 size = packet.read16();//读取Size
说明:(a)在client发送的hello数据块里,读取到的marker的值为marker==0x0b,写成二进制形式为marker==00001011,
最后两位的值确定了该packet的类型,如下:
0:表示禁止值
1:表示发送者标志
2:表示响应者标志
3:创建Session启动类型
所以,由上面的marker可知,该packet类型为创建Session启动类型.
(b).这里读取到的id值为0x30,表示为hello数据块
2.继续读取packet数据,如下:
request.read8(); //跳过Unknown
UInt8 epdLen = request.read8()-1;//读取EPD Length
UInt8 type = request.read8();//读取type
string epd;
request.readRaw(epdLen,epd);//读取EPD
string tag;
request.readRaw(16,tag);//读取tag
response.writeString8(tag);//把tag写入response,协议要求的
其中hello数据块的结构如下:
![](http://img.my.csdn.net/uploads/201303/12/1363079346_3327.JPG)
三.response的处理,如下:
response的结构图如下:
![](http://img.my.csdn.net/uploads/201303/12/1363079421_4092.JPG)
1.如上所述,已经把tag写入response.
2.接着创建cookie并写入response,如下:
Cookie* pCookie = attempt.pCookie;
writer.write8(COOKIE_SIZE);
writer.writeRaw(pCookie->value,COOKIE_SIZE);
3.把认证证书写入response,如下:
memcpy(_certificat,"\x01\x0A\x41\x0E",4);
RandomInputStream().read((char*)&_certificat[4],64);
memcpy(&_certificat[68],"\x02\x15\x02\x02\x15\x05\x02\x15\x0E",9);
response.writeRaw(_certificat,sizeof(_certificat));
4.把TypeID写入response,如下
response.write8(0x70);
5.把Size写入response,如下:
response.write16(response.length()-response.position()-2);
最后发送给client端,第一趟握手结束.
其中rhello数据块的结构图如下:
![](http://img.my.csdn.net/uploads/201303/12/1363079458_7813.JPG)
未完待续~~
转载请注明出处:山水间博客,/article/2317674.html
二.对接收到的packet进行处理如下:
接收到的packet结构如下,(该图为网友提供):
1.UInt8 marker = packet.read8();//读取Marker
UInt16 time = packet.read16();//读取TimeSent
UInt8 id = packet.read8();//读取TypeID
UInt16 size = packet.read16();//读取Size
说明:(a)在client发送的hello数据块里,读取到的marker的值为marker==0x0b,写成二进制形式为marker==00001011,
最后两位的值确定了该packet的类型,如下:
0:表示禁止值
1:表示发送者标志
2:表示响应者标志
3:创建Session启动类型
所以,由上面的marker可知,该packet类型为创建Session启动类型.
(b).这里读取到的id值为0x30,表示为hello数据块
2.继续读取packet数据,如下:
request.read8(); //跳过Unknown
UInt8 epdLen = request.read8()-1;//读取EPD Length
UInt8 type = request.read8();//读取type
string epd;
request.readRaw(epdLen,epd);//读取EPD
string tag;
request.readRaw(16,tag);//读取tag
response.writeString8(tag);//把tag写入response,协议要求的
其中hello数据块的结构如下:
三.response的处理,如下:
response的结构图如下:
1.如上所述,已经把tag写入response.
2.接着创建cookie并写入response,如下:
Cookie* pCookie = attempt.pCookie;
writer.write8(COOKIE_SIZE);
writer.writeRaw(pCookie->value,COOKIE_SIZE);
3.把认证证书写入response,如下:
memcpy(_certificat,"\x01\x0A\x41\x0E",4);
RandomInputStream().read((char*)&_certificat[4],64);
memcpy(&_certificat[68],"\x02\x15\x02\x02\x15\x05\x02\x15\x0E",9);
response.writeRaw(_certificat,sizeof(_certificat));
4.把TypeID写入response,如下
response.write8(0x70);
5.把Size写入response,如下:
response.write16(response.length()-response.position()-2);
最后发送给client端,第一趟握手结束.
其中rhello数据块的结构图如下:
未完待续~~
转载请注明出处:山水间博客,/article/2317674.html
相关文章推荐
- OpenRTMFP/Cumulus性能优化(5) RTMFP协议详解(2)
- rtmfp协议分析详解代码实现(二)
- OpenRTMFP/Cumulus性能优化(6) RTMFP协议详解(3)
- HTTP协议的头信息详解
- RTMP协议详解(一)
- HTTP协议详解篇(待续)
- GPS NMEA-0183协议详解
- 浏览器 HTTP 协议缓存机制详解
- NGN网络核心协议—SIP协议详解
- TCP,IP详解,卷一:协议学习笔记之第三章IP:网际协议
- 转 I2C总线协议详解
- Https协议详解
- Memcache的使用和协议分析详解
- HTTP协议详解
- 【JSP开发】IE浏览器发送给服务器的HTTP协议详解
- 《TCP-IP详解卷1:协议》读书笔记四 ARP地址解析协议
- HTTP协议响应头之Transfer-Encoding:分块传输详解
- HTTP协议详解
- HTTP协议详解
- rtp协议详解/rtcp协议详解