Protocol.h
上传用户:liguizhu
上传日期:2015-11-01
资源大小:2422k
文件大小:7k
源码类别:

P2P编程

开发平台:

Visual C++

  1. /*
  2.  *  Openmysee
  3.  *
  4.  *  This program is free software; you can redistribute it and/or modify
  5.  *  it under the terms of the GNU General Public License as published by
  6.  *  the Free Software Foundation; either version 2 of the License, or
  7.  *  (at your option) any later version.
  8.  *
  9.  *  This program is distributed in the hope that it will be useful,
  10.  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  11.  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12.  *  GNU General Public License for more details.
  13.  *
  14.  *  You should have received a copy of the GNU General Public License
  15.  *  along with this program; if not, write to the Free Software
  16.  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  17.  *
  18.  */
  19. // 协议的说明和定义
  20. #ifndef __PROTOCOL_DEFINE_H__
  21. #define __PROTOCOL_DEFINE_H__
  22. // Capture Server = CS; Super Peer = SP; Cache Peer = CP; 
  23. // Tracker Server = TS; Normal Peer = NP;
  24. // 所有不传输Block的连接都基于UDP
  25. // CP<------UDP------>TS
  26. // NP<------UDP------>TS
  27. // 所有传输Block的连接都基于TCP
  28. // CS<------TCP------>SP
  29. // SP<------TCP------>CP
  30. // CP<------TCP------>NP
  31. // NP<------TCP------>NP
  32. // 协议格式,新的协议的目标是更加精炼,更加安全
  33. // |msg size(UINT32)|msg type(BYTE)|msg content(...)|
  34. // |<-----------msg size是全部数据的长度----------->|
  35. // 注意小写的bool值,大小是一个字节
  36. // ****************************************************************************
  37. // ****************************************************************************
  38. enum CSandSP {
  39. // |size of channel name(UINT8)|channel name(...)|
  40. // |userid(UINT32)|md5 password(MD5_LEN)|
  41. // |max blocksize(UINT32)|channel bitRate(float)|
  42. // |size of CHANNEL DATA(UINT16)|CHANNEL DATA(...)|
  43. CS2SP_REGISTER    = 0, // 注册到SP
  44. // |channel bitRate(float)|
  45. CS2SP_UPDATE      = 1, // 发送更新给SP
  46. // |block id(UINT32)|block size(UINT32)|
  47. // |block data(...)|
  48. CS2SP_BLOCK       = 2, // 发送一个block到SP
  49. // |media data length(UINT32)媒体数据长度|media data媒体数据(...)|
  50. CS2SP_MEDIA_TYPE  = 3, // 发送新的编码类型
  51. // |start block ID(UINT32)|
  52. SP2CS_WELCOME     = 100, // 让CS从某个块开始发送,因为可能是续传
  53. // |err msg type(UINT16)|should quit(bool)|
  54. SP2CS_MSG         = 101, // 发送(错误)消息
  55. };
  56. // ****************************************************************************
  57. // ****************************************************************************
  58. enum CPandTS {
  59. // |userID(UINT32)|md5 password(MD5_LEN)|port for NP(USHORT)|
  60. // |type(UINT8)|type param(...)| // see CP_TYPE
  61. CP2TS_REGISTER    = 0, // 注册到TS
  62. // |---CHECK DIGITS(7 BYTEs)---|
  63. // |resource number(UINT32)|connection number(UINT16)|bandwidth usage(float)|
  64. // |exceed max connection(bool)|
  65. CP2TS_UPDATE      = 1, // 统计信息
  66. // |---CHECK DIGITS(7 BYTEs)---|RESOURCE MD5(MD5_LEN)|
  67. CP2TS_NEED_PEERS  = 2, // ECP发送。请求GCP和一些接近GCP的Peer地址
  68. // |---CHECK DIGITS(7 BYTEs)---|
  69. CP2TS_LOGOUT      = 3, // 退出登录
  70. // |---CHECK DIGITS(7 BYTEs)---|
  71. TS2CP_WELCOME     = 100, // 返回校验码
  72. // |RESOURCE MD5(32)|CP list size(UINT8)|first CP addr(NormalAddress)|
  73. // |peer list size(UINT8)|peer1(PeerInfoWithAddr)|...|
  74. TS2CP_PEERS       = 101, // 返回GCP和一些接近GCP的Peer地址给ECP
  75. // |err msg type(UINT16)|should quit(bool)|
  76. TS2CP_MSG         = 102, // 发送(错误)消息
  77. };
  78. // ****************************************************************************
  79. // ****************************************************************************
  80. enum NPandTS {
  81. // |login id(UINT32)|md5 password(MD5_LEN)|
  82. // |version of client(float)|listening port(USHORT)|
  83. // |size of local ip list(UINT8)|first ip addr(in_addr)|...|
  84. NP2TS_LOGIN       = 0, // 登录,提交本机全部IP,让TS判断
  85. // |---CHECK DIGITS(7 BYTEs)---|
  86. // |resource list size(UINT8)|
  87. // |RESOURCE MD5(MD5_LEN)|Interval count(UINT8)|first BlockInterval|...|
  88. NP2TS_RES_LIST    = 1, // NP上所有资源的列表
  89. // |---CHECK DIGITS(7 BYTEs)---|
  90. // |RESOURCE MD5(MD5_LEN)|Interval count(UINT8)|first BlockInterval|...|
  91. // |current block(UINT32)|need CP(bool)|
  92. NP2TS_REQ_RES     = 2, // 加入一个资源
  93. // |---CHECK DIGITS(7 BYTEs)---|RESOURCE MD5(MD5_LEN)|
  94. NP2TS_DEL_RES     = 3, // 删除一个资源
  95. // |---CHECK DIGITS(7 BYTEs)---|
  96. // |info of peer(CorePeerInfo)|refresh(bool)|
  97. // |Interval count(UINT8)|first BlockInterval|...|
  98. // |Transfer Info(TransferInfo)|
  99. NP2TS_REPORT      = 4, // 报告自身状况
  100. // |---CHECK DIGITS(7 BYTEs)---|need CP(bool)|
  101. // |current block(UINT32)|layer(UINT8)|
  102. NP2TS_NEED_PEERS  = 5, // 需要其他NP的地址
  103. // |---CHECK DIGITS(7 BYTEs)---|res count(UINT8)|RESOURCE MD5(MD5_LEN)|...|
  104. NP2TS_QUERY_RES   = 6, // 查询资源的信息
  105. // |---CHECK DIGITS(7 BYTEs)---|
  106. NP2TS_LOGOUT      = 7, // 退出登录
  107. // |---CHECK DIGITS(7 BYTEs)---|
  108. // |playing block(UINT32)|Current Buffering Time(UINT16)|Buffered Count(UINT16)|Buffered Time(UINT16)|
  109. // |Connect Fail Count(UINT16)|Incoming Connection Count(UINT16)|Outgoing Connection Count(UINT16)|
  110. // |Avg Incoming Connection Elapsed Time(UINT16)|Avg OutgoingConnection Elapsed Time(UINT16)|
  111. // |Message Percent(float)|Transfer Info(TransferInfo)|
  112. NP2TS_REPORT2     = 8, // NP更多的状态信息
  113. // |---CHECK DIGITS(7 BYTEs)---|ip of peer(P2PAddress)|
  114. TS2NP_WELCOME     = 100, // 返回NP的地址
  115. // |CP list size(UINT8)|first CP addr(NormalAddress)|..|
  116. // |peer list size(UINT8)|peer1(PeerInfoWithAddr)|...|
  117. TS2NP_PEERS       = 101, // 返回NP需要的地址列表
  118. // |target addr(P2PAddress)|connect for free?(bool)|
  119. TS2NP_CONNECT_TO  = 102, // 让NP去连接其他NP
  120. // |res count(UINT8)|RESOURCE MD5(MD5_LEN)|NP count(UINT16)|...|
  121. TS2NP_RESINFO     = 103, // 某个资源的信息
  122. // |err msg type(UINT16)|should quit(bool)|
  123. TS2NP_MSG         = 104, // 发送(错误)消息
  124. };
  125. // ****************************************************************************
  126. // ****************************************************************************
  127. enum NPandNP {
  128. // |NP version(float)|
  129. // |RESOURCE MD5(MD5_LEN)|Passive Connection(bool)|
  130. // |info of peer(PeerInfoWithAddr)|
  131. // if NP2CP, add |(SPlist size(UINT8)|NormalAddress|...|)|
  132. P2P_HELLO         = 0, // 相互通报请求的资源
  133. // if SP2CP, add |RESOURCE MD5(MD5_LEN)|
  134. // |SP update info(SPUpdate)|
  135. // if NP2NP, |SP Update sum(BYTE)|
  136. P2P_SPUPDATE      = 1, // SP更新
  137. // |info of peer(CorePeerInfo)|refresh(bool)|
  138. // |Interval count(UINT8)|first BlockInterval|...|
  139. P2P_REPORT        = 2, // Peer更新
  140. // |peer list size(UINT8)|first peer(PeerInfoWithAddr)|...|
  141. P2P_NEAR_PEERS    = 3, // 发送对方可能需要的Peer信息
  142. // if CP2SP, add |RESOURCE MD5(MD5_LEN)|
  143. // |refresh(bool)|block count(UINT8)|first blockid(UINT32)|...|
  144. P2P_PUSHLIST      = 4, // 发送PushList
  145. // if SP2CP, add |RESOURCE MD5(MD5_LEN)|
  146. // |block ID(UINT32))|block size(UINT32)|block data(...)|
  147. P2P_RESPONSE      = 5, // 发送Block
  148. // |err msg type(UINT16)|should quit(bool)|
  149. P2P_MSG           = 6, // 发送(错误)消息
  150. // |block ID(UINT32)|
  151. P2P_REQMEDIA      = 7, // 请求blockID对应的media数据
  152. // if SP2CP, add |RESOURCE MD5(MD5_LEN)|
  153. // |startid(UINT32)|length(UINT32)|media data length(UINT32)媒体数据长度|media data媒体数据(...)|
  154. // |program name size(UINT8)|program name(...)|program time in seconds(UINT32)|channel name size(UINT8)|channel name(...)|
  155. P2P_MEDIATYPE     = 8, // 返回blockID所在区间对应的media数据
  156. };
  157. // ****************************************************************************
  158. // ****************************************************************************
  159. #endif