======Ethereum_Cpp项目结构_静态库_p2p====== =====概念===== * UPnP miniupnpc * [[以太坊p2p节点发现算法|以太坊p2p节点发现算法]] ====miniupnpc==== 开源的UPnP实现库,官网如下:http://miniupnp.free.fr/ ===miniupnpc库主要使用的头文件有=== #include "miniwget.h" #include "miniupnpc.h" #include "upnpcommands.h" #include "upnperrors.h" ====miniupnpc.h使用的函数有==== // 查询局域网内所有Upnp设备;按照链表的方式返回 UPNPDev* upnpDiscover() // 释放upnp设备链表 freeUPNPDevlist(UPNPDev*) // 从upnp设备表中查询有效地设备; // @UPNPDev : 设备列表 // @UPNPUrls : 如果返回值非0,UPNPUrls作为传出参数 // @IGDdatas : 如果返回值非0,IGDdatas作为传出参数 // @result : =0没有IGD设备;=1有一个连接;=2有设备但没有连接;=3有UPNP但不是ICG设备 UPNP_GetValidIGD(UPNPDev*, UPNPUrls*, IGDdatas*, ..) // Used when skipping the discovery process. UPNP_GetIGDFromUrl() GetUPNPUrls() // 判断url是否相连接 // @struct UPNPUrls: 指定的设备 // @struct IGDdatas: 设备的其他信息 // @result : =1连接正常;=0没有连接 UPNPIGD_IsConnected(UPNPUrls*, IGDdatas); // 释放url资源 FreeUPNPUrls(UPNPUrls*); // 封装了recv函数 ReceiveData() // 将内外IP,port在路由器上做一个映射 // @controlURL : IGD设备的路径 // @servicetype: IGD设备类型 // @extPort : 映射出的外网端口 // @inPort : 内网port端口 // @inClient : 内网IP地址 // @desc : 描述信息;通常设置为NULL // @proto : 该外网端口支持的类型TCP或UDP // @remoteHost : 该端口限制的IP地址、通常设置为NULL,表示所有IP都能访问 // @result : =0映射成功;非0失败 UPNP_AddPortMapping(char* controlURL, servicetype, extPort, inPort, inClient, desc, proto, remoteHost); // 删除指定设备、指定映射的端口 // @controlURL : 输入IGD设备的路径 // @servicetype: 输入IGD设备类型 // @extPort : 输入映射出的外网端口 // @proto : 输入该外网端口支持的类型TCP或UDP // @remoteHost : 输入该端口限制的IP地址、通常设置为NULL,表示所有IP都能访问 // @result : =0成功;非0失败 UPNP_DeletePortMapping(controlURL, servicetype, extPort, proto, remoteHost); ====对upnp常见的操作==== // 根据指定的设备、和指定外网端口和通讯类型,获得映射端口 // @controlURL : 输入IGD设备的路径 // @servicetype: 输入IGD设备类型 // @extPort : 输入映射出的外网端口 // @proto : 输入该外网端口支持的类型TCP或UDP // @inPort : 输出内网port端口 // @inClient : 输出内网IP地址 // @result : =0成功;非0失败 UPNP_GetSpecificPortMappingEntry(controlURL, servicetype, extPort, proto, inClient, inPort); // 根据指定的设备,获得所有的映射端口 // @controlURL : 输入IGD设备的路径 // @servicetype: 输入IGD设备类型 // @index : 输出映射端口的个数 // @result : =0成功;非0失败 UPNP_GetGenericPortMappingEntry(controlURL, servicetype, ....); // 根据指定的IGD设备和路径,查询出外网IP // @controlURL : 输入IGD设备的路径 // @servicetype: 输入IGD设备类型 // @expIp : 输出外网IP地址 // @result : =0成功;非0失败 UPNP_GetExternalIPAddress(controlURL, servicetype, extIp); // 获得指定设备的状态 // @controlURL : 输入IGD设备的路径 // @servicetype: 输入IGD设备类型 // @status : 输出状态信息 // @uptime : // @lastconnerr: 输出错误代码 // @result : =0成功;非0失败 UPNP_GetStatusInfo(controlURL, servicetype, status, uptime, lastconnerror); // 根据指定设备,获取连接类型 // @controlURL : 输入IGD设备的路径 // @servicetype: 输入IGD设备类型 // @connectType: 输出IGD设备的连接类型 // @result : =0成功;非0失败 UPNP_GetConnectionTypeInfo(controlURL, servicetype, connectionType); // 获得接收和发送的数据包总数、和字节总数 // @controlURL : 输入IGD设备的路径 // @servicetype: 输入IGD设备类型 UPNP_GetTotalBytesSent(controlURL, servicetype); UPNP_GetTotalBytesReceived(controlURL, servicetype); UPNP_GetTotalPacketsSent(controlURL, servicetype); UPNP_GetTotalPacketsReceived(controlURL, servicetype);