
------------------------------------------------------------------------
版本: 2.7.0.106

1）增加从 P2P 服务器下发新的 relay 地址时立即生效的机制。

2）增加在被访问端也上报 PG_TUNNEL_EVENT_PEER_INFO、PG_TUNNEL_EVENT_PEER_UP、
      PG_TUNNEL_EVENT_PEER_DOWN 和 PG_TUNNEL_EVENT_PEER_OFFLINE事件。

3）PG_TUNNEL_EVENT_PEER_INFO 事件，增加了 ipver 参数，指明连接使用 IPv4 还是 IPv6。

4）PG_TUNNEL_EVENT_PEER_UP、PG_TUNNEL_EVENT_PEER_DOWN 和 PG_TUNNEL_EVENT_PEER_OFFLINE 事件，
     增加了 count 事件，指明当前与本端连接的对端客户端数量。

5）增加 PG_TUNNEL_EVENT_SESSION_FAILED 事件接口

6）增加 pgTunnelPeerFwdCfg()  动态设置节点转发参数的 API 函数

7）解决在 Android 10 以上版本系统上，没有权限从 /proc/net/if_inet6 获取设备的 IPv6 地址的问题

8）增加远程获取 P2P LOG 日志信息的功能。

9）开发手册文档更新，详情参考文档的修改记录。


------------------------------------------------------------------------
版本: 2.5.2.103

1）优化 P2P 通道连接协商机制。
     （解决在中继转发方式且网络不稳定时，重连次数较多后，无法再建立连接问题）
     （解决网络存在多个外网IP地址且部分IP地址不能通信时，需要几次连接尝试后，连接才能稳定的问题）

2）修复问题：内部传输优先级调度不当，导致带宽受限时高优先级切换到低优先级无效的问题。

3）优化 P2P 通道的生命周期管理，及早回收不再使用的连接。


------------------------------------------------------------------------
版本: 2.5.0.103

1）修复：在延时很大(但不丢包)网络环境下，低概率出现客户端停止尝试重新登录的问题。

2）优化客户端与P2P服务器协商交互流程，减少某个环节请求P2P服务器的频率，降低P2P服务器的负担。

3）P2P隧道机制增加被访问端的TCP侦听端口过滤机制。

4）节点转发机制增加“消费者”的速度和流量统计信息上报接口。

5）开发说明文档更新，详情参考文档的修改记录


------------------------------------------------------------------------
版本: 2.3.0.102

1）增强遇到路由器NAT映射会话失效时的恢复协商机制。

2）修复在某些特殊网络条件下的P2P穿透协商问题。

3）增加节点转发的统计机制和上报统计信息接口

4）开发说明文档更新，详情参考文档的修改记录


------------------------------------------------------------------------
版本: 2.2.9.101

1）修复：设备的IP地址数量超过16个时，客户端不能正常初始化问题

2）完善IPV6地址的协商流程。

3）增强登录P2P服务器操作的可靠性。

4）优化P2P穿透机制，不再限制同时协商的路径数量。

5）修复：切换网络时，重新建立P2P传输通道时状态处理错误，导致不能建立成功问题。（低概率）

6）完善 ChannelMode 选项的功能

7）修复：一个连接状态检测逻辑错误导致P2P连接频繁被删除并重建的问题。


------------------------------------------------------------------------
版本: 2.2.6.100

1）修复：在某种网络条件下，客户端尝试同时从多条网络路径去连接登录P2P服务器，
      存在P2P服务器上登记的地址和客户端用来握手协商的地址不一致的情况，导致无法建立P2P连接。

2）实现整套SDK API的多线程访问安全保护机制。

3）增加 PG_TUNNEL_EVENT_CONNECT_USED 事件。

4）增加在登录重定向时切换服务器的时间间隙也可以调用添加、删除和查询隧道映射等API操作。

5）开发手册文档更新，请参考文档的修改记录。
     （重要：事件上报回调函数增加了注意事项说明）


------------------------------------------------------------------------
版本: 2.2.5.99

1）修复问题：在桌面Linux系统上，P2P隧道客户端作为被访问端时，连接目标 TCP 服务器侦听端口的并发速度慢。


------------------------------------------------------------------------
版本: 2.2.3.99

1）修复问题：在设备的网络可用性出现失效/恢复时，会触发SDK销毁所有当前的TCP连接会话并重建。
      此“销毁所有当前的TCP连接会话并重建”的操作存在多线程访问内存互斥量保护不完整的问题（低概率）。
      （在IOS操作系统上APP频繁后台放置再切换前台时，或者息屏再唤醒时，有低概率引发此问题。
        在其他操作系统上，如果有禁用/启用环回网络接口的切换操作，也有可能引发此问题）


------------------------------------------------------------------------
版本: 2.2.2.98

1）修复问题：1.x.x.x 版本的客户端连接 2.x.x.x 版本的客户端时，
      如果 2.x.x.x 版本的客户端没有协商地址列表中没有可用的地址时，会导致死循环错误。

2）优化 2.2.0.98 版本修改的TCP客户端读取数据慢时，反馈降低发送速度给对端的机制。


------------------------------------------------------------------------
版本: 2.2.0.98

1）ID登录冲突的KickOut操作，增加判断当前登录的地址是否为本端多条路径地址的操作，避免误KickOut。

2）PG_TUNNEL_EVENT_KICKOUT 事件的参数增加“addrnow”字段（当前相同ID的登录地址）。

3）销毁连接Session的DisconnectDelay机制，延时销毁策略改为该为：
      从该Session的tcp socket断开后且传输速度变为0时开始计时，速度持续为0超时，则销毁 Session。

4）修复：检测本端设备的路由变化的机制，对同时存在多条缺省路由时的误判。

5）修复：在某种网络条件下，客户端尝试同时从多条网络路径去连接登录P2P服务器，
      存在P2P服务器上登记的地址和客户端用来握手协商的地址不一致的情况，导致无法建立P2P连接。

6）修复：TCP客户端连接接收数据比P2P传输数据慢时，缓冲区满无法接收新数据，导致其他连接无法传输。

7）开发手册文档更新，请参考文档的修改记录

8）macOS系统的SDK增加 arm64 CPU架构的支持

9）macOS系统的SDK把最低支持的操作系统版本设置为10.12


------------------------------------------------------------------------
版本: 2.1.0.97

1）优化IPV6地址分类判别操作，严格遵循标准。

2）增加 PG_TUNNEL_EVENT_PEER_INFO 事件上报，在P2P连接通道参数变化时，上报事件。

3）开发手册文档更新，请参考文档的修改记录


------------------------------------------------------------------------
版本: 2.0.7.96

1）修复写LOG文件的一处空文件指针操作问题

2）生成随机P2P ID时，增强写ID文件操作的可靠性。


------------------------------------------------------------------------
版本: 2.0.6.95

1）修复一处Socket发送数据的错误码判断不合理导致客户端反复登录问题。

2）修复HTTP方式的RELAY转发功能因缓冲区长度不足导致请求发送失败问题。

3）Android系统平台的Socket信号操作由原来的select方式修改为使用 epoll方式
      避免app进程的 socket fd 和  file fd 总数量超过1024时导致select操作异常。

4）在移动端设备休眠唤醒后，系统socket资源失效时，增加强制回收正在使用连接会话资源。

5）JAVA/JNI接口的SDK库，增加工作线程Attach到JVM时的互斥量保护机制。


------------------------------------------------------------------------
版本: 2.0.5.93

1）修复一处在某个条件下重连尝试时间间隔太长的问题。

2）修复一处配置文件参数合法性检查不到位的问题。

3）优化穿透握手交互消息的频繁程度，稍微减轻P2P服务器的负担。


------------------------------------------------------------------------
版本: 2.0.3.92

1）修复域名解析返回地址重复问题

2）修复IOS系统的NAT64环境下集群跨服务器建立连接失败问题

3）开发手册文档更新，请参考文档的修改记录


------------------------------------------------------------------------
版本: 2.0.2.91

1）P2P通信核心技术升级到第二代。

2）增加目标TCP服务器的IP地址过滤功能

3）开发手册文档更新（详情参考文件修改记录）


------------------------------------------------------------------------
版本: 1.45.10.90

1）修改策略：当隧道客户端从服务器掉线后，延长两端之间继续传输数据的时间限制。


------------------------------------------------------------------------
版本: 1.45.5.90

1）优化在移动设备环境下，设备休眠唤醒后，网络socket恢复可用的策略和流程。
      （主要针对IOS设备）

2）修复一处因TCP连接请求重传逻辑错误导致已经建立的连接异常中断问题。

3）修复问题：本端与同一个对端之间添加多个隧道映射端口时，如果因为端口被占用而添加失败，
      则会错误地将之前添加成功的隧道端口上的连接也进行断开操作。


------------------------------------------------------------------------
版本: 1.45.3.89

1）优化在移动设备环境下，设备休眠唤醒后，网络socket恢复可用的策略和流程。
      （主要针对IOS设备）


------------------------------------------------------------------------
版本: 1.45.2.89

1）优化P2P穿透通信方式与转发通信方式的强制切换流程。

2）优化P2P穿透机制适应特殊路由策略的网络


------------------------------------------------------------------------
版本: 1.43.8.88

1）完善API接口传入的字符串型参数的非UTF8字符集的检测和转换。


------------------------------------------------------------------------
版本: 1.43.7.87

1）增加按需建立隧道连接的模式（通过配置文件配置参数开启）

2）增加上报服务器下发推送消息的回调事件 PG_TUNNEL_EVENT_SERVER_PUSH

3）修改策略：在服务器端禁用直接隧道模式时，客户端限制添加直接隧道映射。

4）修改在直接隧道模式时还可以接受服务器下发隧道连接数据的问题。

5）《P2P 隧道模块SDK编程手册 vx.x.doc》文件更新，请参考修改记录


------------------------------------------------------------------------
版本: 1.43.7.86

1）解决1.41.7.75版本引入的在特定条件下无法登录P2P服务器的问题。


------------------------------------------------------------------------
版本: 1.43.6.86

1）优化网络延时预测算法，提高在延时波动较大的网络上传输性能。

2）解决C语言API和HTTP API接口上字符串参数GBK和UTF8格式处理不正确的问题。


------------------------------------------------------------------------
版本: 1.43.3.85

1）增加事件上报的回调接口

2）修改查询和删除TCP类型的隧道映射时匹配clientaddr参数的策略。
      修改为：如果传入的clientaddr参数为非空时，则查找操作精准匹配clientaddr参数。
      应用的API函数：pgTunnelConnectQuery(), pgTunnelConnectDelete(), 
             pgTunnelConnectLocalQuery(), pgTunnelConnectLocalDelete()

3）《P2P 隧道模块SDK编程手册 x.doc》文档更新，详情参考文档的修改说明。


------------------------------------------------------------------------
版本: 1.43.1.81

1）修复1.43.0.79版本引入的一个问题：在SDK初始化后的第一次登录P2P服务器时，
      如果P2P服务器明确主动拒绝登录（例如，账号无效、密码错误）时，SDK将不再尝试重新登录。


------------------------------------------------------------------------
版本: 1.43.0.80

1）修复问题：通过API接口删除隧道端口时，没有清理队列中未完成的与隧道端口相关的消息。
                    （该问题可能导致应用程序连接隧道端口建立的TCP连接无法正常连接对端）


------------------------------------------------------------------------
版本: 1.43.0.79

1）修复问题：网络延时大、丢包率高时，传输延时大，且客户端与服务器之间建立连接时间间隔短时，
      会低概率引起交互的密钥对匹配错误，导致验证失败，客户端不能保持在线。

2）增加 P2P隧道SDK发送数据到Socket时遇到阻塞的超时时间机制。

3）修复 pgTunnelStart() 返回值的错误码为正数问题（应该为负数）。

4）pgLibTunnel.h 头文件补齐了所有错误码的常量定义。

5）修复HTTP接口的pgTunnel.js脚本不能并发多个HTTP请求问题。

6）修复HTTP API的tunnelset接口的请求action字符串和响应的action字符串不一致问题。

7）修复问题：添加直接隧道映射时，如果入口地址端口相同，但对端ID不同时，
             不会添加一个新的隧道，而只是修改入口地址端口所匹配的原有隧道的对端ID参数。

8）增加HTTP API的“客户端与P2P服务器之间的透传通信”接口的JSON转义版本。
     增加HTTP API的“接收服务器推送消息”接口的JSON转义版本。

9）《P2P 隧道模块SDK编程手册 x.doc》文档更新，详情参考文档的修改说明。


------------------------------------------------------------------------
版本: 1.41.7.75

1）增强 pgTunnelControl() 函数触发立即重新登录的能力
      (支持控制：取消登录超时退避、打断当前的登录应答等待、重新创建socket连接)

2）增加每次登录成功后尝试重新恢复已经添加的隧道映射的连接状态。

3）增加策略：从隧道服务器下发隧道信息给客户端时，
     如果隧道映射端口已经占用，则先删除原来的隧道映射，再添加新隧道映射。

4）配置文件的 DirectTunnelEnable 选项的默认值改为1
      配置文件的 TunnelIdlePort 选项删除作废。

5）示例程序  demoTunnel 更新，更新API示例和默认配置文件参数。


------------------------------------------------------------------------
版本: 1.41.6.72

1）增加 pgTunnelControl() 函数，该函数可根据选项控制隧道SDK的行为状态

2）增加 pgTunnelChannelSet() 函数，该函数动态切换隧道客户端之间的连接方式：
      (自动适应方式 或 强制转发方式）

3）开发手册文件更新，请参考修改记录。


------------------------------------------------------------------------
版本: 1.41.1.71

1）修复 1.41.0.71 版本引入的一个数组越界错误


------------------------------------------------------------------------
版本: 1.41.0.71

1）增加在4G网络时的对称性NAT路由器的P2P穿透能力。

2）增加P2P通道连接信息中途发生变化时，重新上报连接信息给P2P隧道服务器。


------------------------------------------------------------------------
版本: 1.40.5.70

1）在x86, x86_64的LINUX上改为使用epoll方式处理SOCKET的输入输出

2）修改问题：TCP类型的隧道，当服务器下发的隧道参数相同时，依然删除以存在的隧道再重新添加。

3）修改问题：服务器下发隧道时，如果打开隧道的端口失败，增加定时器重新尝试打开。


------------------------------------------------------------------------
版本: 1.40.3.69

1）修复在大端字节序的CPU上计算摘要错误问题


------------------------------------------------------------------------
版本: 1.40.2.69

1）优化传输功能的运行性能

2）增加支持同一个局域网有多个WAN口上行的网络场景的P2P穿透机制

3）修改隧道客户端登录时，P2P服务器返回PG_ERR_BadDomain时，没法正常切换到默认的用户域问题。


------------------------------------------------------------------------
版本: 1.40.1.69

1）修复 ConnectTimeout 配置大于255时不能生效问题

2）增加强制断开没有传输交互超过指定时长的连接的功能

3）配置文件增加 (Session){...} 配置参数，请参考《P2P 隧道模块SDK编程手册 xx.doc》

4）《P2P 隧道模块SDK编程手册 xx.doc》文档更新。


------------------------------------------------------------------------
版本: 1.40.0.68

1）解决在局域网扫描方式连接时，反复断开再连接，有时连接不上的问题。

2）修改TCP转发通道低概率出现指针异常的疑点。

3）减少登录尝试的超时时间，避免过长时间的等待

4）策略修改：配置文件的 DirectTunnelEnable 选项开启时，不再从隧道服务器获取服务端的隧道配置。

5）把SDK包的 Depend 目录的库文件与 Lib 目录下的库文件合并为一个库文件


------------------------------------------------------------------------
版本: 1.39.7.67

1）优化P2P中继转发通道与P2P穿透通道切换的策略

2）修复中继转发通道与P2P穿透通道切换时，很低概率出现异常的问题。

3）增强沙盒读写异常进行清除并尝试重写的操作


-----------------------------------------------------------
版本: 1.37.3.65

1）修复一处因线程同步错误引起的数组索引无效，导致很低概率线程死循环或数组越界异常。


-----------------------------------------------------------
版本: 1.37.1.65

1）优化在连续丢包的网络环境下的传输性能。

2）增加在PC系统环境下，用户域验证信息写文件的可靠性。


-----------------------------------------------------------
版本: 1.36.6.63

1）增加域名解析随机选取IP地址，以及指定使用IPV4,IPV6地址的选项：
      配置文件的Node配置项增加Node.DnsRandom、Node.DnsUseIPv4和Node.DnsUseIPv6参数

2）异步DNS解析线程的栈大小增加到128KB，避免栈太小在某些系统上产生栈溢出异常。

3）Windows系统的SDK库改为使用动态链接库(DLL)的方式发布。

4）文档更新，请参考修改记录。


-----------------------------------------------------------
版本: 1.35.8.61

1）在使用Utilize.DirectTunnelEnable选项时，增加被连接端判断两端用户ID的用户域是否匹配。
     如果两端用户ID的用户域不匹配，则拒绝连接。

2）增加Node.ClientOnly配置项，该配置项把本端设置为只允许主动连接对端（不能被对端连接）
     在手机APP使用SDK时，启用Node.ClientOnly配置项，符合手机APP的使用场景。

3）增加Base.LoginDelayInterval 和 Base.LoginDelayMax 配置选项
     Base.LoginDelayInterval 为设置登录超时退避的时间的增长步进
     Base.LoginDelayMax 为设置登录超时退避的时间的最大值

4）修改直接隧道模式中，P2P连接状态与隧道映射关联，导致隧道映射被删除时P2P连接状态丢失问题。

5）修复本地UDP端口随机分配后，在socket关闭时，端口变量没有清零。
     导致重新打开socket绑定端口时继续使用以前分配的端口，低概率发生与其他程序端口使用冲突问题。

6）文档更新，请参考修改记录


-----------------------------------------------------------
版本: 1.35.6.60

1）修改pgTunnelXXXX类型的API与内部定时器之间的互斥量耦合。

2）修改API参数表达：在P2P通道连接建立之前，调用pgTunnelPeerInfoGet()获取连接状态，
   输出的PG_TUNNEL_PEER_INFO_S结构体中的szTunnelLocal和szTunnelRemote为空字符串。

3）优化在运营商CGN组网环境下的P2P连接可靠性

4）文档更新，请参考文档的修改记录



-----------------------------------------------------------
版本: 1.32.12.58

1）解决低概率出现“SocketUDP4::SelectProc, Socket or Fd mask not match.”导致P2P隧道客户端不能使用问题。

2）解决网络异常或隧道入口端突然退出导致隧道出口端与TCP服务器之间的连接不会断开问题

3）配置文件增加 Log.Debug 配置参数来开启/关闭调试信息打印。

4）修改 pgTunnelPeerInfoGet() 的状态策略，改为在本端与对端没有建立连接时，也可以执行查询操作。

5）文档更新，请参考文档的修改记录



-----------------------------------------------------------
版本: 1.32.11.57

1）修改错误：P2P隧道退出实例时，没有清理局域网设备搜索缓存，
   导致P2P隧道重新初始化后需要等待较长时间才能重新发起域网设备搜索请求。

2）pgTunnelPeerInfoGet() API接口增加判断对端的连接状态，
   如果P2P连接没有建立，返回值返回PG_TUNNEL_ERROR_BADSTATUS错误码。



-----------------------------------------------------------
版本: 1.32.11.56

1）修改策略：原先通过局域网搜索方式连接时，如果删除隧道，P2P通道也会立即删除。
   这将会影响数据传输的完整性。此版本改为删除隧道时，P2P通道继续保持30秒。

2）通过客户端API添加隧道时，如果TCP端口打开失败，增加延时尝试机制。
   尝试打开超过1.5秒，仍然没有打开，则API返回失败。
   （避免在LINUX系统上删除隧道关闭TCP端口后，没有延时，又立即添加隧道打开相同的TCP端口会失败的问题。）

3）优化P2P穿透通道和中继转发通道之间切换的策略，增加从中继转发通道切换回P2P穿透通道的“积极性”。
   （因为P2P穿透通道短暂失效切换到中级转发时，要尽快检测P2P穿透的恢复状态，并切换回P2P穿透通道）



-----------------------------------------------------------
版本: 1.32.11.55

1）修改局域网搜索发现为同时使用广播和单播两种模式。

2）修改局域网，连接路由器模式、AP模式和连接外网之间的切换策略。

3）修改FTP上传文件接收不完整问题。



-----------------------------------------------------------
版本: 1.32.10.53

1）修改局域网搜索发现的单播模式策略。



-----------------------------------------------------------
版本: 1.32.10.52

1）增加客户端之间直接建立隧道的功能（以前版本需要经过P2P服务器交互才能建立隧道）

2）增加在同一个局域网网段内的客户端之间通过搜索发现对端并建立连接通信（在没有外网的情况下）。

3）配置文件增加 Utilize.DirectTunnelAccept 和 Utilize.DirectTunnelEnable 参数选项
   （启用客户端之间隧道功能）

4）文档更新，参考修改记录。



-----------------------------------------------------------
版本: 1.32.9.51

1）修复问题：域名解析失败时，重试的时间间隔由原来的10秒改为1秒。

2）修复错误：添加隧道请求的处理时间较长时，服务器会重发多次添加隧道通知，导致把已经添加好的隧道当做重复隧道删除。

3）配置文件增加 Utilize.TunnelIdlePort参数选项，允许用户关闭“隧道TCP端口被占用时自动分配空闲的TCP端口”功能。

4）文档更新，参考修改记录。



-----------------------------------------------------------
版本: 1.32.5.50

1）增加回收失效的出口端隧道资源的机制，
   可以回收因网络异常导致添加失败或删除失败的失效隧道资源。



-----------------------------------------------------------
版本: 1.32.3.49

1）优化P2P传输速度的平稳性。

2）优化多服务器集群情况下，缩短切换P2P服务器的尝试时间。



-----------------------------------------------------------
版本: 1.32.0.48

1）优化P2P传输速度的平稳性。

2）修复错误：pgTunnelConnectEnum()，pgTunnelConnectLocalDelete(),
       和 pgTunnelConnectLocalQuery() 的搜索配置隧道的逻辑有错误。



-----------------------------------------------------------
版本: 1.31.2.47

1）增强在某些类型的路由器时通过Relay连接的稳定性

2）优化pgTunnelStop()的退出速度

3）增加两个API函数:
       pgTunnelSelfGet(): 获取本端的用户ID。
       pgTunnelConnectEnum(): 根据索引逐条获取隧道连接的全部信息。

4）编程手册文档更新（请参考文档的修改记录）



------------------------------------------------------------------------
版本：1.30.2.46

1）优化定时器TICK的稳定度



-----------------------------------------------------------
版本: 1.29.5.46

1）优化在对称NAT组网下通过pgRelay连接的速度。

2）修改可疑错误：添加隧道操作内存可能存在的错误

3）修复错误：在不同线程中同时操作API接口时，
   如果一个线程操作API未完成，另一个线程pgTunnelStop()退出，会导致死锁。


-----------------------------------------------------------
版本: 1.29.3.45

1）增加pgTunnelSetCfgParam()函数，可以直接设置配置文件参数内容
   需要更新的库文件：
       Include\pgLibTunnel.h
       Lib\libtunnel_*.a

2）修复错误：当客户端TCP端口被占用的时候，错误地解析无效的域名导致程序阻塞数秒时间。
   需要更新的库文件：
       Lib\libtunnel_*.a



------------------------------------------------------------------------
版本：1.29.2.43

1）修复错误：事件上报队列的投递逻辑在多线程处理中存在错误。
   需要更新的库文件：
       Lib\libtunnel_*.a

