mirror of
https://github.com/tomahawk-player/tomahawk.git
synced 2025-08-06 14:16:32 +02:00
ugly hacks to make liblastfm compile on windows
This commit is contained in:
3
thirdparty/liblastfm2/src/CMakeLists.txt
vendored
3
thirdparty/liblastfm2/src/CMakeLists.txt
vendored
@@ -78,7 +78,7 @@ if(UNIX)
|
|||||||
endif(APPLE)
|
endif(APPLE)
|
||||||
endif(UNIX)
|
endif(UNIX)
|
||||||
if(WIN32)
|
if(WIN32)
|
||||||
set(SOURCES ${SOURCES} ws/win/WNetworkConnectionMonitor_win.cpp)
|
set(SOURCES ${SOURCES} ws/win/WNetworkConnectionMonitor_win.cpp ws/win/Pac.cpp ws/win/NdisEvents.cpp )
|
||||||
set(MOC_HEADERS ${MOC_HEADERS} ws/win/WNetworkConnectionMonitor.h)
|
set(MOC_HEADERS ${MOC_HEADERS} ws/win/WNetworkConnectionMonitor.h)
|
||||||
endif(WIN32)
|
endif(WIN32)
|
||||||
|
|
||||||
@@ -100,6 +100,7 @@ ENDIF()
|
|||||||
target_link_libraries(tomahawk_lastfm2
|
target_link_libraries(tomahawk_lastfm2
|
||||||
${QT_LIBRARIES}
|
${QT_LIBRARIES}
|
||||||
${QT_QTDBUS_LIBRARY}
|
${QT_QTDBUS_LIBRARY}
|
||||||
|
|
||||||
)
|
)
|
||||||
|
|
||||||
set_target_properties(tomahawk_lastfm2 PROPERTIES COMPILE_FLAGS "-DLASTFM_OHAI_QMAKE" )
|
set_target_properties(tomahawk_lastfm2 PROPERTIES COMPILE_FLAGS "-DLASTFM_OHAI_QMAKE" )
|
||||||
|
@@ -50,7 +50,7 @@ static struct NetworkAccessManagerInit
|
|||||||
// at two seconds, so that hangs startup
|
// at two seconds, so that hangs startup
|
||||||
if (!s.fAutoDetect && s.lpszProxy)
|
if (!s.fAutoDetect && s.lpszProxy)
|
||||||
{
|
{
|
||||||
QUrl url( QString::fromUtf16(s.lpszProxy) );
|
QUrl url( QString::fromUtf16((const unsigned short*)s.lpszProxy) );
|
||||||
QNetworkProxy proxy( QNetworkProxy::HttpProxy );
|
QNetworkProxy proxy( QNetworkProxy::HttpProxy );
|
||||||
proxy.setHostName( url.host() );
|
proxy.setHostName( url.host() );
|
||||||
proxy.setPort( url.port() );
|
proxy.setPort( url.port() );
|
||||||
|
17
thirdparty/liblastfm2/src/ws/win/ComSetup.h
vendored
17
thirdparty/liblastfm2/src/ws/win/ComSetup.h
vendored
@@ -23,9 +23,10 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <objbase.h>
|
#include <objbase.h>
|
||||||
#include <atlbase.h>
|
//#include <boost/range/atl.hpp>
|
||||||
#include <atlcom.h>
|
//#include <atlbase.h>
|
||||||
|
//#include <atlcom.h>
|
||||||
|
#include <winable.h>
|
||||||
|
|
||||||
/** @brief WsConnectionMonitor needs Com to work as early as possible so we do this
|
/** @brief WsConnectionMonitor needs Com to work as early as possible so we do this
|
||||||
* @author <doug@last.fm>
|
* @author <doug@last.fm>
|
||||||
@@ -37,7 +38,7 @@ public:
|
|||||||
{
|
{
|
||||||
HRESULT hr = CoInitialize(0);
|
HRESULT hr = CoInitialize(0);
|
||||||
m_bComInitialised = SUCCEEDED(hr);
|
m_bComInitialised = SUCCEEDED(hr);
|
||||||
_ASSERT(m_bComInitialised);
|
//_ASSERT(m_bComInitialised);
|
||||||
if (m_bComInitialised) {
|
if (m_bComInitialised) {
|
||||||
setupSecurity();
|
setupSecurity();
|
||||||
}
|
}
|
||||||
@@ -45,10 +46,10 @@ public:
|
|||||||
|
|
||||||
void setupSecurity()
|
void setupSecurity()
|
||||||
{
|
{
|
||||||
CSecurityDescriptor sd;
|
//CSecurityDescriptor sd;
|
||||||
sd.InitializeFromThreadToken();
|
//sd.InitializeFromThreadToken();
|
||||||
HRESULT hr = CoInitializeSecurity(sd, -1, NULL, NULL, RPC_C_AUTHN_LEVEL_PKT, RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_NONE, NULL);
|
//HRESULT hr = CoInitializeSecurity(sd, -1, NULL, NULL, RPC_C_AUTHN_LEVEL_PKT, RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_NONE, NULL);
|
||||||
_ASSERT(SUCCEEDED(hr));
|
//_ASSERT(SUCCEEDED(hr));
|
||||||
}
|
}
|
||||||
|
|
||||||
~ComSetup()
|
~ComSetup()
|
||||||
|
@@ -26,6 +26,7 @@
|
|||||||
*/
|
*/
|
||||||
struct IeSettings : WINHTTP_CURRENT_USER_IE_PROXY_CONFIG
|
struct IeSettings : WINHTTP_CURRENT_USER_IE_PROXY_CONFIG
|
||||||
{
|
{
|
||||||
|
#ifndef WIN32
|
||||||
IeSettings()
|
IeSettings()
|
||||||
{
|
{
|
||||||
if (!WinHttpGetIEProxyConfigForCurrentUser(this)) {
|
if (!WinHttpGetIEProxyConfigForCurrentUser(this)) {
|
||||||
@@ -33,6 +34,7 @@ struct IeSettings : WINHTTP_CURRENT_USER_IE_PROXY_CONFIG
|
|||||||
lpszAutoConfigUrl = lpszProxy = lpszProxyBypass = 0;
|
lpszAutoConfigUrl = lpszProxy = lpszProxyBypass = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
~IeSettings()
|
~IeSettings()
|
||||||
{
|
{
|
||||||
|
20
thirdparty/liblastfm2/src/ws/win/NdisEvents.cpp
vendored
20
thirdparty/liblastfm2/src/ws/win/NdisEvents.cpp
vendored
@@ -32,22 +32,24 @@ NdisEvents::NdisEvents()
|
|||||||
|
|
||||||
NdisEvents::~NdisEvents()
|
NdisEvents::~NdisEvents()
|
||||||
{
|
{
|
||||||
|
#ifndef WIN32
|
||||||
if (m_pSink)
|
if (m_pSink)
|
||||||
m_pSink->disconnect();
|
m_pSink->disconnect();
|
||||||
if (m_pServices && m_pSink)
|
#endif
|
||||||
m_pServices->CancelAsyncCall(m_pSink);
|
//if (m_pServices && m_pSink)
|
||||||
|
//m_pServices->CancelAsyncCall(m_pSink);
|
||||||
// and reference counting will take care of the WmiSink object
|
// and reference counting will take care of the WmiSink object
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT
|
HRESULT
|
||||||
NdisEvents::registerForNdisEvents()
|
NdisEvents::registerForNdisEvents()
|
||||||
{
|
{
|
||||||
HRESULT hr = m_pLocator.CoCreateInstance(CLSID_WbemLocator);
|
HRESULT hr = 0; //m_pLocator.CoCreateInstance(CLSID_WbemLocator);
|
||||||
if (FAILED(hr))
|
if (FAILED(hr))
|
||||||
return hr;
|
return hr;
|
||||||
|
|
||||||
// Connect to the root\wmi namespace with the current user.
|
// Connect to the root\wmi namespace with the current user.
|
||||||
hr = m_pLocator->ConnectServer(CComBSTR("ROOT\\WMI"), // strNetworkResource
|
hr = 0; /*m_pLocator->ConnectServer(CComBSTR("ROOT\\WMI"), // strNetworkResource
|
||||||
NULL, // strUser
|
NULL, // strUser
|
||||||
NULL, // strPassword
|
NULL, // strPassword
|
||||||
NULL, // strLocale
|
NULL, // strLocale
|
||||||
@@ -55,12 +57,12 @@ NdisEvents::registerForNdisEvents()
|
|||||||
CComBSTR(""), // strAuthority
|
CComBSTR(""), // strAuthority
|
||||||
NULL, // pCtx
|
NULL, // pCtx
|
||||||
&m_pServices
|
&m_pServices
|
||||||
);
|
);*/
|
||||||
if (FAILED(hr))
|
if (FAILED(hr))
|
||||||
return hr;
|
return hr;
|
||||||
|
#ifndef WIN32
|
||||||
m_pSink = new WmiSink(this);
|
m_pSink = new WmiSink(this);
|
||||||
|
#endif
|
||||||
//////////////////////////
|
//////////////////////////
|
||||||
|
|
||||||
// other notifications we're not interested in right now include...
|
// other notifications we're not interested in right now include...
|
||||||
@@ -75,12 +77,12 @@ NdisEvents::registerForNdisEvents()
|
|||||||
// MSNdis_StatusProtocolUnbind
|
// MSNdis_StatusProtocolUnbind
|
||||||
// MSNdis_StatusMediaSpecificIndication
|
// MSNdis_StatusMediaSpecificIndication
|
||||||
|
|
||||||
CComBSTR wql("WQL");
|
/*CComBSTR wql("WQL");
|
||||||
CComBSTR query("SELECT * FROM MSNdis_StatusMediaDisconnect");
|
CComBSTR query("SELECT * FROM MSNdis_StatusMediaDisconnect");
|
||||||
hr = m_pServices->ExecNotificationQueryAsync(wql, query, 0, 0, m_pSink);
|
hr = m_pServices->ExecNotificationQueryAsync(wql, query, 0, 0, m_pSink);
|
||||||
|
|
||||||
query = "SELECT * FROM MSNdis_StatusMediaConnect";
|
query = "SELECT * FROM MSNdis_StatusMediaConnect";
|
||||||
hr = m_pServices->ExecNotificationQueryAsync(wql, query, 0, 0, m_pSink);
|
hr = m_pServices->ExecNotificationQueryAsync(wql, query, 0, 0, m_pSink);*/
|
||||||
|
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
@@ -21,8 +21,8 @@
|
|||||||
#define NDIS_EVENTS_H
|
#define NDIS_EVENTS_H
|
||||||
|
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#include <atlbase.h>
|
//#include <atlbase.h>
|
||||||
#include <WbemCli.h>
|
//#include <WbemCli.h>
|
||||||
|
|
||||||
class NdisEvents
|
class NdisEvents
|
||||||
{
|
{
|
||||||
@@ -35,8 +35,8 @@ public:
|
|||||||
virtual void onConnectionDown(BSTR name) = 0;
|
virtual void onConnectionDown(BSTR name) = 0;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
CComPtr<IWbemLocator> m_pLocator;
|
//CComPtr<IWbemLocator> m_pLocator;
|
||||||
CComPtr<IWbemServices> m_pServices;
|
//CComPtr<IWbemServices> m_pServices;
|
||||||
class WmiSink *m_pSink;
|
class WmiSink *m_pSink;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
30
thirdparty/liblastfm2/src/ws/win/Pac.cpp
vendored
30
thirdparty/liblastfm2/src/ws/win/Pac.cpp
vendored
@@ -21,8 +21,9 @@
|
|||||||
#include <QNetworkRequest>
|
#include <QNetworkRequest>
|
||||||
#include <QStringList>
|
#include <QStringList>
|
||||||
#include <QUrl>
|
#include <QUrl>
|
||||||
#include <atlbase.h>
|
//#include <atlbase.h>
|
||||||
#include <atlconv.h>
|
//#include <atlconv.h>
|
||||||
|
#include <winhttp.h>
|
||||||
|
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
@@ -73,8 +74,10 @@ lastfm::Pac::Pac()
|
|||||||
|
|
||||||
lastfm::Pac::~Pac()
|
lastfm::Pac::~Pac()
|
||||||
{
|
{
|
||||||
|
#ifndef WIN32
|
||||||
if (m_hSession)
|
if (m_hSession)
|
||||||
WinHttpCloseHandle(m_hSession);
|
WinHttpCloseHandle(m_hSession);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
QNetworkProxy
|
QNetworkProxy
|
||||||
@@ -86,7 +89,7 @@ lastfm::Pac::resolve(const QNetworkRequest &request, const wchar_t* pacUrl)
|
|||||||
if (!m_hSession)
|
if (!m_hSession)
|
||||||
{
|
{
|
||||||
QByteArray user_agent = request.rawHeader("user-agent");
|
QByteArray user_agent = request.rawHeader("user-agent");
|
||||||
m_hSession = WinHttpOpen(CA2W(user_agent), WINHTTP_ACCESS_TYPE_NO_PROXY, 0, 0, WINHTTP_FLAG_ASYNC);
|
//m_hSession = WinHttpOpen(CA2W(user_agent), WINHTTP_ACCESS_TYPE_NO_PROXY, 0, 0, WINHTTP_FLAG_ASYNC);
|
||||||
}
|
}
|
||||||
if (m_hSession)
|
if (m_hSession)
|
||||||
{
|
{
|
||||||
@@ -95,33 +98,36 @@ lastfm::Pac::resolve(const QNetworkRequest &request, const wchar_t* pacUrl)
|
|||||||
memset(&opts, 0, sizeof(opts));
|
memset(&opts, 0, sizeof(opts));
|
||||||
if (pacUrl)
|
if (pacUrl)
|
||||||
{
|
{
|
||||||
opts.dwFlags = WINHTTP_AUTOPROXY_CONFIG_URL;
|
//opts.dwFlags = WINHTTP_AUTOPROXY_CONFIG_URL;
|
||||||
opts.lpszAutoConfigUrl = pacUrl;
|
//opts.lpszAutoConfigUrl = pacUrl;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
opts.dwFlags = WINHTTP_AUTOPROXY_AUTO_DETECT;
|
//opts.dwFlags = WINHTTP_AUTOPROXY_AUTO_DETECT;
|
||||||
opts.dwAutoDetectFlags = WINHTTP_AUTO_DETECT_TYPE_DHCP | WINHTTP_AUTO_DETECT_TYPE_DNS_A;
|
//opts.dwAutoDetectFlags = WINHTTP_AUTO_DETECT_TYPE_DHCP | WINHTTP_AUTO_DETECT_TYPE_DNS_A;
|
||||||
}
|
}
|
||||||
opts.fAutoLogonIfChallenged = TRUE;
|
opts.fAutoLogonIfChallenged = TRUE;
|
||||||
|
#ifndef WIN32
|
||||||
if (WinHttpGetProxyForUrl(m_hSession, request.url().toString().utf16(), &opts, &info)) {
|
if (WinHttpGetProxyForUrl(m_hSession, (const WCHAR*)(request.url().toString().utf16()), &opts, &info)) {
|
||||||
if (info.lpszProxy)
|
if (info.lpszProxy)
|
||||||
{
|
{
|
||||||
QList<QNetworkProxy> proxies = parsePacResult(QString::fromUtf16(info.lpszProxy));
|
QList<QNetworkProxy> proxies = parsePacResult(QString::fromUtf16((const ushort*)info.lpszProxy));
|
||||||
if (!proxies.empty())
|
if (!proxies.empty())
|
||||||
{
|
{
|
||||||
out = proxies.at(0);
|
out = proxies.at(0);
|
||||||
}
|
}
|
||||||
GlobalFree(info.lpszProxy);
|
// pay attention! casting away constness
|
||||||
|
GlobalFree((void*)info.lpszProxy);
|
||||||
}
|
}
|
||||||
if (info.lpszProxyBypass)
|
if (info.lpszProxyBypass)
|
||||||
{
|
{
|
||||||
GlobalFree(info.lpszProxyBypass);
|
// pay attention! casting away constness
|
||||||
|
GlobalFree((void*)info.lpszProxyBypass);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
m_bFailed = true;
|
m_bFailed = true;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
return out;
|
return out;
|
||||||
|
2
thirdparty/liblastfm2/src/ws/win/WmiSink.h
vendored
2
thirdparty/liblastfm2/src/ws/win/WmiSink.h
vendored
@@ -20,7 +20,7 @@
|
|||||||
#ifndef WMISINK_WIN_H
|
#ifndef WMISINK_WIN_H
|
||||||
#define WMISINK_WIN_H
|
#define WMISINK_WIN_H
|
||||||
|
|
||||||
#include "WbemCli.h"
|
#include "wbemcli.h"
|
||||||
|
|
||||||
// Sink object for WMI NDIS notifications
|
// Sink object for WMI NDIS notifications
|
||||||
class WmiSink : public IWbemObjectSink
|
class WmiSink : public IWbemObjectSink
|
||||||
|
Reference in New Issue
Block a user