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

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. // 系统通用的数据结构以及部分常量的定义, 最近修改时间为2004.10.09 23:34
  21. #ifndef __STRUCT_DEFINE_H__
  22. #define __STRUCT_DEFINE_H__
  23. enum {
  24.     SP4CS_PORT = 20, 
  25.     CM4SP_PORT = 24168, 
  26. };
  27. enum {
  28.     MD5_LEN = 32,          // MD5值的长度
  29. };
  30. // 普通网络的IP地址信息,精简版,大小8字节
  31. // 不能直接当做sockaddr使用,只能赋值给一个sockaddr
  32. struct NormalAddress {
  33.     short sin_family;
  34.     unsigned short sin_port;
  35.     struct  in_addr sin_addr;
  36. };
  37. // P2P网络的Peer地址信息, 精简版,大小16字节
  38. struct P2PAddress {
  39.     // 外网用户的本机IP和发送段口,内网用户的出口网关IP和发送段口
  40.     struct NormalAddress    outerIP;
  41.     // 外网用户为"255.255.255.255"和监听段口,内网用户的内网IP和监听端口
  42.     struct NormalAddress    subnetIP;
  43. };
  44. // NP的统计信息
  45. struct StatInfo {
  46.     unsigned int playingBlock; // 当前播放的文件块编号
  47.     unsigned short currBufferTime; // 当前累计缓冲时间(秒)
  48.     unsigned short bufferCount; // 累计缓冲次数
  49.     unsigned short bufferTime; // 累计缓冲时间(秒),不包括当前正在缓冲的时间
  50.     unsigned short connFailCount; // 累计连接失败次数
  51.     unsigned short inConnections; // 累计连入连接数
  52.     unsigned short  outConnections; // 累计连出连接数
  53.     unsigned short avgInConnTime; // 累计连入时间
  54.     unsigned short avgOutConnTime; // 累计连出时间
  55.     float messagePercent; // 控制信息流比例
  56. };
  57. // 数据传输的相关信息,目前大小32字节
  58. struct TransferInfo {
  59.     long long totalDownBytes;  // 总共下载字节
  60.     long long totalUpBytes;    // 总共上传字节
  61.     float    currDownSpeed;    // 当前下载速度
  62.     float    currUpSpeed;      // 当前上传速度
  63.     float    avgDownSpeed;     // 平均下载速度
  64.     float    avgUpSpeed;       // 平均上传速度
  65. };
  66. // 这是P2P网络中最需要交流的信息,将来还可能进行扩充,目前大小12字节
  67. struct CorePeerInfo {
  68. //    unsigned int     minBlockID;    // 拥有块的最小编号
  69.  //   unsigned int     maxBlockID;    // 拥有块的最大编号
  70.     unsigned layer:8;       // 在P2P网络中位于第几层(最大256)
  71.     unsigned int isMaxIn:1;         // 是否达到最大连入的连接数
  72.     unsigned int isMaxOut:1;        // 是否达到最大连出的连接数
  73.     unsigned int isMaxFreeIn:1;     // 是否达到最大连入的连接数(作贡献)
  74.     unsigned int isMaxFreeOut:1;    // 是否达到最大连出的连接数(作贡献)
  75.     unsigned int isCachePeer:1;     // 是CachePeer还是NormalPeer
  76.     unsigned int padding:19;           // 空位域,留作以后使用
  77. };
  78. // 加上Peer地址的PeerInfo, 目前大小28字节
  79. struct PeerInfoWithAddr
  80. {
  81. struct CorePeerInfo a;
  82. struct P2PAddress b;
  83. };
  84. enum CP_TYPE {
  85.     CT_GENERAL=0, // no param
  86.     CT_EDGE=1,  // number of IP heads, first IP Head.....
  87.     CT_SPECIFIED_RES=2, // resource name(md5, MD5_LEN bytes)
  88. };
  89. #endif