181 lines
5.8 KiB
C++
181 lines
5.8 KiB
C++
|
|
#include "pch.h"
|
|
#pragma hdrstop
|
|
#include "upnphost.h"
|
|
#include <stdio.h>
|
|
#include "resource.h"
|
|
#include "CInternetGatewayDevice.h"
|
|
#include "..\idl\obj\i386\InternetGatewayDevice_i.c"
|
|
|
|
#include "CWANDevice.h"
|
|
#include "CWANCommonDevice.h"
|
|
|
|
CComModule _Module;
|
|
|
|
|
|
BEGIN_OBJECT_MAP(ObjectMap)
|
|
END_OBJECT_MAP()
|
|
|
|
void Test()
|
|
{
|
|
HRESULT hr = S_OK;
|
|
|
|
IUPnPRegistrar* pRegistrar;
|
|
hr = CoCreateInstance(CLSID_UPnPRegistrar, NULL, CLSCTX_SERVER, IID_IUPnPRegistrar, reinterpret_cast<void**>(&pRegistrar));
|
|
if(SUCCEEDED(hr))
|
|
{
|
|
HRSRC hrsrc = FindResource(GetModuleHandle(NULL), MAKEINTRESOURCE(IDX_DESC_DOC), L"XML");
|
|
if(hrsrc)
|
|
{
|
|
HGLOBAL hGlobal = LoadResource(GetModuleHandle(NULL), hrsrc);
|
|
if(hGlobal)
|
|
{
|
|
void * pvData = LockResource(hGlobal);
|
|
BSTR bstrData = NULL;
|
|
if(pvData)
|
|
{
|
|
long nLength = SizeofResource(GetModuleHandle(NULL), hrsrc);
|
|
wchar_t * sz = new wchar_t[nLength + 1];
|
|
MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, reinterpret_cast<char*>(pvData), nLength, sz, nLength);
|
|
sz[nLength] = 0;
|
|
bstrData = SysAllocString(sz);
|
|
delete [] sz;
|
|
}
|
|
if(bstrData)
|
|
{
|
|
BSTR bstrId = NULL;
|
|
BSTR bstrInitString = SysAllocString(L"Init");
|
|
BSTR bstrPath = SysAllocString(L"C:\\upnp\\");
|
|
|
|
IUPnPDeviceControl* pDevice;
|
|
//hr = CoCreateInstance(CLSID_CInternetGatewayDevice, NULL, CLSCTX_INPROC, IID_IUPnPDeviceControl, reinterpret_cast<void**>(&pDevice));
|
|
|
|
CComObject<CInternetGatewayDevice>* pDevice2;
|
|
hr = CComObject<CInternetGatewayDevice>::CreateInstance(&pDevice2);
|
|
|
|
if(SUCCEEDED(hr))
|
|
{
|
|
pDevice = pDevice2;
|
|
pDevice->AddRef();
|
|
}
|
|
|
|
if(SUCCEEDED(hr))
|
|
{
|
|
wchar_t szFilename[1024];
|
|
GetModuleFileName(NULL, szFilename, 1024);
|
|
ITypeLib * pTlb = NULL;
|
|
hr = LoadTypeLib(L"beacon.exe", &pTlb);
|
|
pTlb->Release();
|
|
if(FAILED(hr))
|
|
{
|
|
printf("type lib failed\n");
|
|
}
|
|
}
|
|
if(SUCCEEDED(hr))
|
|
{
|
|
|
|
hr = pRegistrar->RegisterRunningDevice(
|
|
bstrData,
|
|
pDevice,
|
|
bstrInitString,
|
|
bstrPath,
|
|
10,
|
|
&bstrId);
|
|
if(FAILED(hr))
|
|
{
|
|
printf("rrd failed %x\n", hr);
|
|
|
|
IErrorInfo* pErrorInfo;
|
|
hr = GetErrorInfo(0, &pErrorInfo);
|
|
if(S_OK == hr)
|
|
{
|
|
BSTR pDesc;
|
|
hr = pErrorInfo->GetDescription(&pDesc);
|
|
if(SUCCEEDED(hr))
|
|
{
|
|
wprintf(L"error desc %s\n", pDesc);
|
|
SysFreeString(pDesc);
|
|
}
|
|
}
|
|
|
|
hr = E_FAIL;
|
|
}
|
|
|
|
printf("press q to exit, u to update connection status\n");
|
|
char buf[255];
|
|
|
|
while(gets(buf))
|
|
{
|
|
if('q' == *buf)
|
|
{
|
|
break;
|
|
}
|
|
else if('u' == *buf)
|
|
{
|
|
CComObject<CWANDevice>* pWANDevice = pDevice2->m_pWANDevice;
|
|
CComObject<CWANCommonDevice>* pWANCommonDevice = pWANDevice->m_pWANCommonDevice;
|
|
pWANCommonDevice->UpdateConnectionStatus();
|
|
}
|
|
}
|
|
|
|
if(SUCCEEDED(hr))
|
|
{
|
|
hr = pRegistrar->UnregisterDevice(bstrId, TRUE);
|
|
if(FAILED(hr))
|
|
{
|
|
printf("rrd failed\n");
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
SysFreeString(bstrInitString);
|
|
SysFreeString(bstrPath);
|
|
if(SUCCEEDED(hr))
|
|
{
|
|
SysFreeString(bstrId);
|
|
}
|
|
SysFreeString(bstrData);
|
|
}
|
|
FreeResource(hGlobal);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void TestDisconnect()
|
|
{
|
|
// CLanControl LanControl;
|
|
//
|
|
//
|
|
// LanControl.FinalConstruct();
|
|
// LanControl.Disconnect();
|
|
}
|
|
|
|
void TestConnect()
|
|
{
|
|
// CLanControl LanControl;
|
|
//
|
|
// LanControl.FinalConstruct();
|
|
// LanControl.Connect();
|
|
}
|
|
|
|
int __cdecl main(int argc, char* argv[])
|
|
{
|
|
|
|
CoInitializeEx(NULL, COINIT_MULTITHREADED);
|
|
_Module.Init(ObjectMap, GetModuleHandle(NULL), &LIBID_UPnPInternetGatewayDeviceLib);
|
|
Test();
|
|
// if(argc == 1)
|
|
// {
|
|
// TestConnect();
|
|
// }
|
|
// else
|
|
// {
|
|
// TestDisconnect();
|
|
// }
|
|
_Module.Term();
|
|
CoUninitialize();
|
|
return 0;
|
|
}
|