大螃嗨

好记性不如烂笔头

用户工具

站点工具


ethereum_cpp项目结构_p2p

Ethereum_Cpp项目结构_静态库_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);
ethereum_cpp项目结构_p2p.txt · 最后更改: 2018/01/09 03:13 由 螃蟹