本文整理汇总了C++中IStaticPortMappingCollection::Remove方法的典型用法代码示例。如果您正苦于以下问题:C++ IStaticPortMappingCollection::Remove方法的具体用法?C++ IStaticPortMappingCollection::Remove怎么用?C++ IStaticPortMappingCollection::Remove使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类IStaticPortMappingCollection
的用法示例。
在下文中一共展示了IStaticPortMappingCollection::Remove方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: ClosePort
void UPnP::ClosePort()
{
if(remote_port_ == 0)
return;
#ifdef _MSC_VER
HRESULT hr;
IUPnPNAT* upnpnat;
hr = CoCreateInstance (CLSID_UPnPNAT, NULL, CLSCTX_INPROC_SERVER, IID_IUPnPNAT, (void**)&upnpnat);
if(FAILED(hr) || !upnpnat)
return;
IStaticPortMappingCollection* upnpspmc = NULL;
hr = upnpnat->get_StaticPortMappingCollection(&upnpspmc);
if(FAILED(hr) || !upnpspmc)
return;
BSTR bstrProtocol = A2BSTR("TCP");
hr = upnpspmc->Remove(remote_port_, bstrProtocol);
if(FAILED(hr))
LOG.getlasterror("Automatisches Entfernen des Portforwardings mit UPnP fehlgeschlagen\nFehler");
SysFreeString(bstrProtocol);
if(FAILED(hr))
return;
#else
int hr;
UPNPDev* devicelist = NULL;
#ifdef UPNPDISCOVER_SUCCESS
int upnperror = 0;
devicelist = upnpDiscover(2000, NULL, NULL, 0, 0 /* ipv6 */, &upnperror);
#else
devicelist = upnpDiscover(2000, NULL, NULL, 0);
#endif
if(!devicelist)
return;
UPNPUrls urls;
IGDdatas data;
hr = UPNP_GetValidIGD(devicelist, &urls, &data, NULL, 0);
if(hr == 1 || hr == 2)
{
std::stringstream p;
p << remote_port_;
hr = UPNP_DeletePortMapping(urls.controlURL, data.first.servicetype, p.str().c_str(), "TCP", NULL);
}
freeUPNPDevlist(devicelist);
if(hr != 0)
return;
#endif
remote_port_ = 0;
}
示例2: Destroy
void UPnP::Destroy()
{
IUPnPNAT * Nat = NULL;
IStaticPortMappingCollection * PortMappingCollection = NULL;
HRESULT Result;
wchar_t Protocol[256];
WORD Port;
if(m_Port == 0) return;
Port = m_Port;
m_Port = 0;
#ifdef MFC
TRACE("UPnP: Removing Port\n");
#endif
wcscpy_s(Protocol, L"TCP");
// Create IUPnPNat
Result = CoCreateInstance(CLSID_UPnPNAT, NULL, CLSCTX_INPROC_SERVER, IID_IUPnPNAT, (void **)&Nat);
if(FAILED(Result))
{
#ifdef MFC
TRACE("UPnP: Unable to create UPnPNAT interface\n");
#endif
return;
}
Result = Nat->get_StaticPortMappingCollection(&PortMappingCollection);
if(!PortMappingCollection || FAILED(Result))
{
if(PortMappingCollection) PortMappingCollection->Release();
Nat->Release();
#ifdef MFC
TRACE("UPnP: Unable to acquire a static portmapping collection\n");
#endif
return;
}
Result = PortMappingCollection->Remove(Port, Protocol);
if(FAILED(Result))
{
PortMappingCollection->Release();
Nat->Release();
#ifdef MFC
TRACE("UPnP: Unable to remove port\n");
#endif
return;
}
}
示例3: remove
bool Mapper_WinUPnP::remove(const unsigned short port, const Protocol protocol) {
IStaticPortMappingCollection* pSPMC = getStaticPortMappingCollection();
if(!pSPMC)
return false;
/// @todo use a BSTR wrapper
BSTR protocol_ = SysAllocString(Text::toT(protocols[protocol]).c_str());
HRESULT hr = pSPMC->Remove(port, protocol_);
pSPMC->Release();
SysFreeString(protocol_);
bool ret = SUCCEEDED(hr);
if(ret && port == lastPort && protocol == lastProtocol) {
lastPort = 0;
}
return ret;
}
示例4: ClosePorts
// Closes the UPnP ports defined when the object was created
HRESULT UPnP::ClosePorts(bool log) {
// if(PortsAreOpen == false) {
// return S_OK;
// }
HRESULT hr = E_FAIL;
HRESULT hr2 = E_FAIL;
CoInitializeEx ( NULL ,COINIT_MULTITHREADED);
hr = CoCreateInstance (__uuidof(UPnPNAT),
NULL,
CLSCTX_INPROC_SERVER,
__uuidof(IUPnPNAT),
(void**)&pUN);
if(SUCCEEDED(hr)) {
if(bstrProtocol && bstrInternalClient && bstrDescription) {
IStaticPortMappingCollection * pSPMC = NULL;
hr2 = pUN->get_StaticPortMappingCollection (&pSPMC);
if(SUCCEEDED(hr2) && pSPMC) {
hr = pSPMC->Remove(PortNumber, bstrProtocol);
if(SUCCEEDED(hr)) if(log)debug("UPNP: closed port %i",PortNumber);
pSPMC->Release();
}
SysFreeString(bstrProtocol);
SysFreeString(bstrInternalClient);
SysFreeString(bstrDescription);
SysFreeString(bstrExternalIP);
}
pUN->Release();
pUN=NULL;
}
CoUninitialize();
return hr;
}
示例5: Win32UPnPAddPort
// Add a UPnP port
bool Win32UPnPAddPort(UINT outside_port, UINT inside_port, bool udp, char *local_ip, wchar_t *description, bool remove_before_add)
{
bool ret = false;
HRESULT hr;
IUPnPNAT *nat = NULL;
wchar_t ip_str[MAX_SIZE];
BSTR bstr_ip, bstr_description, bstr_protocol;
wchar_t *protocol_str = (udp ? L"UDP" : L"TCP");
// Validate arguments
if (outside_port == 0 || outside_port >= 65536 || inside_port == 0 || inside_port >= 65536 ||
IsEmptyStr(local_ip) || UniIsEmptyStr(description))
{
return false;
}
StrToUni(ip_str, sizeof(ip_str), local_ip);
bstr_ip = SysAllocString(ip_str);
bstr_description = SysAllocString(description);
bstr_protocol = SysAllocString(protocol_str);
hr = CoCreateInstance(CLSID_UPnPNAT, NULL, CLSCTX_INPROC_SERVER, IID_IUPnPNAT, (void **)&nat);
if (SUCCEEDED(hr))
{
if (nat != NULL)
{
IStaticPortMappingCollection *collection = NULL;
hr = nat->get_StaticPortMappingCollection(&collection);
if (SUCCEEDED(hr))
{
if (collection != NULL)
{
IStaticPortMapping *mapping = NULL;
if (remove_before_add)
{
hr = collection->Remove((long)outside_port, bstr_protocol);
}
hr = collection->Add((long)outside_port, bstr_protocol, (long)inside_port,
bstr_ip, VARIANT_TRUE, bstr_description, &mapping);
if (SUCCEEDED(hr))
{
ret = true;
if (mapping != NULL)
{
mapping->Release();
}
}
collection->Release();
}
else
{
WHERE;
}
}
else
{
WHERE;
}
nat->Release();
}
else
{
WHERE;
}
}
else
{
WHERE;
}
SysFreeString(bstr_ip);
SysFreeString(bstr_description);
SysFreeString(bstr_protocol);
return ret;
}