diff options
author | Janne Anttila <janne.anttila@digia.com> | 2012-03-08 14:43:11 +0200 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-09-10 14:09:45 +0200 |
commit | e9c9e8bfa93b467a06a6cd872712845cacc465c8 (patch) | |
tree | 404b151ba7999ca0779871ca4a85727d434b406b /src/plugins/bearer/generic/qgenericengine.cpp | |
parent | 318b1a1d94dd9293f1e9345e34b5d9b6c47ec581 (diff) |
Initial bearer plugin for WinCE and WEC7.
In WinCE and WEC7 the IOCTL_NDISUIO_QUERY_OID_VALUE DeviceIoControl
calls need to be used instead of OCTL_NDIS_QUERY_GLOBAL_STATS which
is not supported in WinCE / WEC7.
Task-number: QTBUG-24525
Change-Id: Ic091b5c38db95ffc657968b232ae0965ae6a4e81
Reviewed-by: Andreas Holzammer <andreas.holzammer@kdab.com>
Reviewed-by: Joerg Bornemann <joerg.bornemann@nokia.com>
Diffstat (limited to 'src/plugins/bearer/generic/qgenericengine.cpp')
-rw-r--r-- | src/plugins/bearer/generic/qgenericengine.cpp | 44 |
1 files changed, 39 insertions, 5 deletions
diff --git a/src/plugins/bearer/generic/qgenericengine.cpp b/src/plugins/bearer/generic/qgenericengine.cpp index 5682d113ef..9561597d6b 100644 --- a/src/plugins/bearer/generic/qgenericengine.cpp +++ b/src/plugins/bearer/generic/qgenericengine.cpp @@ -56,6 +56,11 @@ #include "../platformdefs_win.h" #endif +#ifdef Q_OS_WINCE +typedef ULONG NDIS_OID, *PNDIS_OID; +#include <nuiouser.h> +#endif + #ifdef Q_OS_LINUX #include <sys/socket.h> #include <sys/ioctl.h> @@ -71,31 +76,60 @@ QT_BEGIN_NAMESPACE #ifndef QT_NO_NETWORKINTERFACE static QNetworkConfiguration::BearerType qGetInterfaceType(const QString &interface) { -#ifdef Q_OS_WIN32 - unsigned long oid; +#if defined(Q_OS_WIN) DWORD bytesWritten; - NDIS_MEDIUM medium; NDIS_PHYSICAL_MEDIUM physicalMedium; +#ifdef Q_OS_WINCE + NDISUIO_QUERY_OID nicGetOid; + HANDLE handle = CreateFile((PTCHAR)NDISUIO_DEVICE_NAME, 0, + FILE_SHARE_READ, 0, OPEN_EXISTING, 0, 0); +#else + unsigned long oid; HANDLE handle = CreateFile((TCHAR *)QString::fromLatin1("\\\\.\\%1").arg(interface).utf16(), 0, FILE_SHARE_READ, 0, OPEN_EXISTING, 0, 0); +#endif if (handle == INVALID_HANDLE_VALUE) return QNetworkConfiguration::BearerUnknown; - oid = OID_GEN_MEDIA_SUPPORTED; bytesWritten = 0; + +#ifdef Q_OS_WINCE + ZeroMemory(&nicGetOid, sizeof(NDISUIO_QUERY_OID)); + nicGetOid.Oid = OID_GEN_MEDIA_SUPPORTED; + nicGetOid.ptcDeviceName = (PTCHAR)interface.utf16(); + bool result = DeviceIoControl(handle, IOCTL_NDISUIO_QUERY_OID_VALUE, &nicGetOid, sizeof(nicGetOid), + &nicGetOid, sizeof(nicGetOid), &bytesWritten, 0); +#else + oid = OID_GEN_MEDIA_SUPPORTED; bool result = DeviceIoControl(handle, IOCTL_NDIS_QUERY_GLOBAL_STATS, &oid, sizeof(oid), &medium, sizeof(medium), &bytesWritten, 0); +#endif if (!result) { CloseHandle(handle); return QNetworkConfiguration::BearerUnknown; } - oid = OID_GEN_PHYSICAL_MEDIUM; bytesWritten = 0; + +#ifdef Q_OS_WINCE + medium = NDIS_MEDIUM( *(LPDWORD)nicGetOid.Data ); + + ZeroMemory(&nicGetOid, sizeof(NDISUIO_QUERY_OID)); + nicGetOid.Oid = OID_GEN_PHYSICAL_MEDIUM; + nicGetOid.ptcDeviceName = (PTCHAR)interface.utf16(); + + result = DeviceIoControl(handle, IOCTL_NDISUIO_QUERY_OID_VALUE, &nicGetOid, sizeof(nicGetOid), + &nicGetOid, sizeof(nicGetOid), &bytesWritten, 0); + + physicalMedium = NDIS_PHYSICAL_MEDIUM( *(LPDWORD)nicGetOid.Data ); +#else + oid = OID_GEN_PHYSICAL_MEDIUM; result = DeviceIoControl(handle, IOCTL_NDIS_QUERY_GLOBAL_STATS, &oid, sizeof(oid), &physicalMedium, sizeof(physicalMedium), &bytesWritten, 0); +#endif + if (!result) { CloseHandle(handle); |