diff options
| author | 2016-08-17 19:47:49 -0400 | |
|---|---|---|
| committer | 2016-08-17 19:59:22 -0400 | |
| commit | b79e1f031849a82dfaa69c10e01697b9a8f866bf (patch) | |
| tree | 4ba1243f9c7a1bcac214a6b46a267550bbb2a455 | |
| parent | OptionsWidget_dcc: add full stop at sentence end. (diff) | |
| download | KVIrc-b79e1f031849a82dfaa69c10e01697b9a8f866bf.tar.gz KVIrc-b79e1f031849a82dfaa69c10e01697b9a8f866bf.tar.bz2 KVIrc-b79e1f031849a82dfaa69c10e01697b9a8f866bf.zip | |
Goodbye XP, my old friend
| -rw-r--r-- | CMakeLists.txt | 3 | ||||
| -rw-r--r-- | data/resources_win32/kvirc.exe.manifest | 34 | ||||
| -rw-r--r-- | src/kvilib/net/KviNetUtils.cpp | 285 | ||||
| -rw-r--r-- | src/kvirc/CMakeLists.txt | 2 | ||||
| -rw-r--r-- | src/kvirc/kernel/KviIpcSentinel.cpp | 35 |
5 files changed, 58 insertions, 301 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index dcb91a88a..9377613c3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -996,7 +996,8 @@ endif() ############################################################################ if(WIN32) - add_definitions(-D_WIN32_WINNT=0x501 -DWINVER=0x501 -DWIN32_LEAN_AND_MEAN) + # 0x0600 = Windows Vista + add_definitions(-D_WIN32_WINNT=0x0600 -DWINVER=0x0600 -DWIN32_LEAN_AND_MEAN) endif() if(MINGW) diff --git a/data/resources_win32/kvirc.exe.manifest b/data/resources_win32/kvirc.exe.manifest new file mode 100644 index 000000000..2004bb214 --- /dev/null +++ b/data/resources_win32/kvirc.exe.manifest @@ -0,0 +1,34 @@ +<?xml version="1.0" encoding="UTF-8" standalone="yes"?> +<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3"> + <assemblyIdentity + type="win32" + name="KVIrc" + version="1.0.0.0" + processorArchitecture="*" + /> + <description>KVIrc - The K-Visual IRC client</description> + <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> + <security> + <requestedPrivileges> + <requestedExecutionLevel + level="asInvoker" + uiAccess="false" + /> + </requestedPrivileges> + </security> + </trustInfo> + <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> + <application> + <!-- Windows 10 --> + <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/> + <!-- Windows 8.1 --> + <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/> + <!-- Windows 8 --> + <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/> + <!-- Windows 7 --> + <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/> + <!-- Windows Vista --> + <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/> + </application> + </compatibility> +</assembly> diff --git a/src/kvilib/net/KviNetUtils.cpp b/src/kvilib/net/KviNetUtils.cpp index f48ccdcb9..9353601a3 100644 --- a/src/kvilib/net/KviNetUtils.cpp +++ b/src/kvilib/net/KviNetUtils.cpp @@ -228,291 +228,6 @@ bool kvi_isValidStringIp(const char * szIp) #ifdef COMPILE_IPV6_SUPPORT -#if defined(COMPILE_ON_WINDOWS) || defined(COMPILE_ON_MINGW) - -static unsigned int scan_ip6(const char * s, char ip[16]) -{ - unsigned int i; - unsigned int len = 0; - unsigned long u; - - char suffix[16]; - unsigned int prefixlen = 0; - unsigned int suffixlen = 0; - - for(i = 0; i < 16; i++) - ip[i] = 0; - - for(;;) - { - if(*s == ':') - { - len++; - if(s[1] == ':') - { /* Found "::", skip to part 2 */ - s += 2; - len++; - break; - } - s++; - } - - { - char * tmp; - u = strtoul(s, &tmp, 16); - i = tmp - s; - } - - if(!i) - return 0; - if(prefixlen == 12 && s[i] == '.') - { - /* the last 4 bytes may be written as IPv4 address */ - if(kvi_stringIpToBinaryIp(s, (struct in_addr *)(ip + 12))) - return i + len; - else - return 0; - } - - ip[prefixlen++] = (u >> 8); - ip[prefixlen++] = (u & 255); - - s += i; - len += i; - - if(prefixlen == 16) - return len; - } - - /* part 2, after "::" */ - - for(;;) - { - if(*s == ':') - { - if(suffixlen == 0) - break; - s++; - len++; - } - else if(suffixlen != 0) - break; - - { - char * tmp; - u = strtol(s, &tmp, 16); - i = tmp - s; - } - - if(!i) - { - if(*s) - len--; - break; - } - - if(suffixlen + prefixlen <= 12 && s[i] == '.') - { - - if(kvi_stringIpToBinaryIp(s, (struct in_addr *)(suffix + suffixlen))) - { - suffixlen += 4; - len += (unsigned int)strlen(s); - break; - } - else - prefixlen = 12 - suffixlen; /* make end-of-loop test true */ - } - - suffix[suffixlen++] = (u >> 8); - suffix[suffixlen++] = (u & 255); - s += i; - len += i; - if(prefixlen + suffixlen == 16) - break; - } - - for(i = 0; i < suffixlen; i++) - ip[16 - suffixlen + i] = suffix[i]; - - return len; -} - -extern int inet_pton(int AF, const char * CP, void * BUF) -{ - int len; - if(AF == AF_INET) - { - if(!kvi_stringIpToBinaryIp(CP, (struct in_addr *)BUF)) - return 0; - } - else if(AF == AF_INET6) - { - if(CP[len = scan_ip6(CP, (char *)BUF)]) - return 0; - } - else - { - errno = WSAEPFNOSUPPORT; - return -1; - } - return 1; -} - -static const unsigned char V4mappedprefix[12] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xff, 0xff }; - -static char tohex(char hexdigit) -{ - return hexdigit > 9 ? hexdigit + 'a' - 10 : hexdigit + '0'; -} - -static int fmt_xlong(char * s, unsigned int i) -{ - char * bak = s; - *s = tohex((i >> 12) & 0xf); - if(s != bak || *s != '0') - ++s; - *s = tohex((i >> 8) & 0xf); - if(s != bak || *s != '0') - ++s; - *s = tohex((i >> 4) & 0xf); - if(s != bak || *s != '0') - ++s; - *s = tohex(i & 0xf); - return s - bak + 1; -} - -static unsigned int i2a(char * dest, unsigned int x) -{ - unsigned int tmp = x; - unsigned int len = 0; - - if(x >= 100) - { - *dest++ = tmp / 100 + '0'; - tmp = tmp % 100; - ++len; - } - if(x >= 10) - { - *dest++ = tmp / 10 + '0'; - tmp = tmp % 10; - ++len; - } - *dest++ = tmp + '0'; - return len + 1; -} - -char * inet_ntoa_r(struct in_addr in, char * buf) -{ - unsigned int len; - unsigned char * ip = (unsigned char *)∈ - - len = i2a(buf, ip[0]); - buf[len] = '.'; - ++len; - len += i2a(buf + len, ip[1]); - buf[len] = '.'; - ++len; - len += i2a(buf + len, ip[2]); - buf[len] = '.'; - ++len; - len += i2a(buf + len, ip[3]); - buf[len] = 0; - return buf; -} - -unsigned int fmt_ip6(char * s, const char ip[16]) -{ - unsigned int len; - unsigned int i; - unsigned int temp; - unsigned int compressing; // 0 not compressing, 1 compressing now, 2 already compressed once - - len = 0; - compressing = 0; - - for(int j = 0; j < 16; j += 2) - { - if(j == 12 && !memcmp(ip, V4mappedprefix, 12)) - { - inet_ntoa_r(*(struct in_addr *)(ip + 12), s); - temp = (unsigned int)strlen(s); - return len + temp; - } - - temp = ((unsigned long)(unsigned char)ip[j] << 8) + (unsigned long)(unsigned char)ip[j + 1]; - - if(temp == 0 && compressing != 2) - { - if(compressing == 0) - { - compressing = 1; - if(j == 0) - { - *s++ = ':'; - ++len; - } - } - } - else - { - if(compressing == 1) - { - compressing = 2; // don't do it again - *s++ = ':'; - ++len; - } - - i = fmt_xlong(s, temp); - len += i; - s += i; - - if(j < 14) - { - *s++ = ':'; - ++len; - } - } - } - - if(compressing == 1) - { - *s++ = ':'; - ++len; - } - - *s = 0; - return len; -} - -const char * inet_ntop(int AF, const void * CP, char * BUF, size_t LEN) -{ - char buf[100]; - size_t len; - - if(AF == AF_INET) - { - inet_ntoa_r(*(struct in_addr *)CP, buf); - len = strlen(buf); - } - else if(AF == AF_INET6) - - { - len = fmt_ip6(buf, (char *)CP); - } - else - return 0; - - if(len < LEN) - { - strcpy(BUF, buf); - return BUF; - } - return 0; -} -#endif - bool kvi_binaryIpToStringIp_V6(struct in6_addr in, QString & szBuffer) { char buf[46]; diff --git a/src/kvirc/CMakeLists.txt b/src/kvirc/CMakeLists.txt index 149152729..52b0f5056 100644 --- a/src/kvirc/CMakeLists.txt +++ b/src/kvirc/CMakeLists.txt @@ -251,11 +251,13 @@ if(MINGW) set(CMAKE_RC_COMPILE_OBJECT "<CMAKE_RC_COMPILER> -O coff <DEFINES> -i <SOURCE> -o <OBJECT>") list(APPEND kvirc_SRCS ${CMAKE_SOURCE_DIR}/data/resources_win32/kvirc.rc) + list(APPEND kvirc_SRCS ${CMAKE_SOURCE_DIR}/data/resources_win32/kvirc.exe.manifest) endif() if(MSVC) list(APPEND LIBS shlwapi.lib) list(APPEND kvirc_SRCS ${CMAKE_SOURCE_DIR}/data/resources_win32/kvirc.rc) + list(APPEND kvirc_SRCS ${CMAKE_SOURCE_DIR}/data/resources_win32/kvirc.exe.manifest) endif() # Link libraries diff --git a/src/kvirc/kernel/KviIpcSentinel.cpp b/src/kvirc/kernel/KviIpcSentinel.cpp index 53948078a..3e6cd7dc9 100644 --- a/src/kvirc/kernel/KviIpcSentinel.cpp +++ b/src/kvirc/kernel/KviIpcSentinel.cpp @@ -33,15 +33,6 @@ #include "KviApplication.h" #include "KviQString.h" -#if defined(COMPILE_ON_WINDOWS) || defined(COMPILE_ON_MINGW) - -static HWND kvi_win_findIpcSentinel() -{ - return ::FindWindow("Qt5QWindowIcon", "kvirc4_ipc_sentinel"); -} - -#else - #if defined(COMPILE_X11_SUPPORT) && defined(COMPILE_QX11INFO_SUPPORT) #include <X11/Xatom.h> @@ -143,16 +134,14 @@ static Window kvi_x11_findIpcSentinel(Window win) } #endif //!COMPILE_NO_X -#endif #define KVI_WINDOWS_IPC_MESSAGE 0x2FACE5 bool kvi_sendIpcMessage(const char * message) { #if defined(COMPILE_ON_WINDOWS) || defined(COMPILE_ON_MINGW) - - HWND hSentinel = kvi_win_findIpcSentinel(); - if(hSentinel != NULL) + HWND hSentinel = ::FindWindow("Qt5QWindowIcon", "kvirc4_ipc_sentinel"); + if(hSentinel != nullptr) { COPYDATASTRUCT cpd; cpd.cbData = strlen(message) + 1; @@ -160,9 +149,25 @@ bool kvi_sendIpcMessage(const char * message) cpd.lpData = (void *)message; DWORD_PTR dwResult; - if(!::SendMessageTimeout(hSentinel, WM_COPYDATA, (WPARAM)NULL, (LPARAM)&cpd, SMTO_BLOCK, 1000, &dwResult)) + if(!::SendMessageTimeout(hSentinel, WM_COPYDATA, (WPARAM)nullptr, (LPARAM)&cpd, SMTO_BLOCK, 1000, &dwResult)) { - qDebug("Failed to send IPC message: error code 0x%x", ::GetLastError()); + DWORD errorMessageID = ::GetLastError(); + if (errorMessageID) + { + LPSTR messageBuffer = nullptr; + size_t size = FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, + nullptr, errorMessageID, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPSTR)&messageBuffer, 0, nullptr); + + std::string message(messageBuffer, size); + + //Free the buffer. + LocalFree(messageBuffer); + qDebug("Failed to send IPC message: %s", message.c_str()); + } + else + { + qDebug("Failed to send IPC message."); + } } return true; } |
