void UdpDebug::BroadcastFormat(const char * sFormatMsg, ...) const { if(m_pDbgItemList == NULL) { return; } va_list vlArgs; va_start(vlArgs, sFormatMsg); int iRet = vsnprintf(m_sDebugHead, 65535, sFormatMsg, vlArgs); va_end(vlArgs); if(iRet <= 0) { AppendDebugLogFormat("[ERR] vsnprintf wrong value %d in UdpDebug::Broadcast\n", iRet); return; } ((uint16_t *)m_sDebugBuffer)[1] = (uint16_t)iRet; size_t szLen = (m_sDebugHead-m_sDebugBuffer)+iRet; UdpDbgItem * pCur = NULL, * pNext = m_pDbgItemList; while(pNext != NULL && pNext->m_bAllData == true) { pCur = pNext; pNext = pCur->m_pNext; #ifdef _WIN32 sendto(pCur->m_Socket, m_sDebugBuffer, (int)szLen, 0, (struct sockaddr *)&pCur->m_sasTo, pCur->m_sasLen); #else sendto(pCur->m_Socket, m_sDebugBuffer, szLen, 0, (struct sockaddr *)&pCur->m_sasTo, pCur->m_sasLen); #endif ServerManager::m_ui64BytesSent += szLen; } }
ReservedNicksManager::ReservedNick * ReservedNicksManager::ReservedNick::CreateReservedNick(const char * sNewNick, const uint32_t ui32NickHash) { ReservedNick * pReservedNick = new (std::nothrow) ReservedNick(); if(pReservedNick == NULL) { AppendDebugLog("%s - [MEM] Cannot allocate new pReservedNick in ReservedNick::CreateReservedNick\n"); return NULL; } size_t szNickLen = strlen(sNewNick); #ifdef _WIN32 pReservedNick->m_sNick = (char *)HeapAlloc(ServerManager::m_hPtokaXHeap, HEAP_NO_SERIALIZE, szNickLen+1); #else pReservedNick->m_sNick = (char *)malloc(szNickLen+1); #endif if(pReservedNick->m_sNick == NULL) { AppendDebugLogFormat("[MEM] Cannot allocate %zu bytes in ReservedNick::CreateReservedNick\n", szNickLen+1); delete pReservedNick; return NULL; } memcpy(pReservedNick->m_sNick, sNewNick, szNickLen); pReservedNick->m_sNick[szNickLen] = '\0'; pReservedNick->m_ui32Hash = ui32NickHash; return pReservedNick; }
bool UdpDebug::New(User * pUser, const uint16_t ui16Port) { UdpDbgItem * pNewDbg = new (std::nothrow) UdpDbgItem(); if(pNewDbg == NULL) { AppendDebugLog("%s - [MEM] Cannot allocate pNewDbg in UdpDebug::New\n"); return false; } // initialize dbg item #ifdef _WIN32 pNewDbg->m_sNick = (char *)HeapAlloc(ServerManager::m_hPtokaXHeap, HEAP_NO_SERIALIZE, pUser->m_ui8NickLen+1); #else pNewDbg->m_sNick = (char *)malloc(pUser->m_ui8NickLen+1); #endif if(pNewDbg->m_sNick == NULL) { AppendDebugLogFormat("[MEM] Cannot allocate %" PRIu8 " bytes for sNick in UdpDebug::New\n", pUser->m_ui8NickLen+1); delete pNewDbg; return false; } memcpy(pNewDbg->m_sNick, pUser->m_sNick, pUser->m_ui8NickLen); pNewDbg->m_sNick[pUser->m_ui8NickLen] = '\0'; pNewDbg->m_ui32Hash = pUser->m_ui32NickHash; struct in6_addr i6addr; memcpy(&i6addr, &pUser->m_ui128IpHash, 16); bool bIPv6 = (IN6_IS_ADDR_V4MAPPED(&i6addr) == 0); if(bIPv6 == true) { ((struct sockaddr_in6 *)&pNewDbg->m_sasTo)->sin6_family = AF_INET6; ((struct sockaddr_in6 *)&pNewDbg->m_sasTo)->sin6_port = htons(ui16Port); memcpy(((struct sockaddr_in6 *)&pNewDbg->m_sasTo)->sin6_addr.s6_addr, pUser->m_ui128IpHash, 16); pNewDbg->m_sasLen = sizeof(struct sockaddr_in6); } else { ((struct sockaddr_in *)&pNewDbg->m_sasTo)->sin_family = AF_INET; ((struct sockaddr_in *)&pNewDbg->m_sasTo)->sin_port = htons(ui16Port); ((struct sockaddr_in *)&pNewDbg->m_sasTo)->sin_addr.s_addr = inet_addr(pUser->m_sIP); pNewDbg->m_sasLen = sizeof(struct sockaddr_in); } pNewDbg->m_Socket = socket((bIPv6 == true ? AF_INET6 : AF_INET), SOCK_DGRAM, IPPROTO_UDP); #ifdef _WIN32 if(pNewDbg->m_Socket == INVALID_SOCKET) { int iErr = WSAGetLastError(); #else if(pNewDbg->m_Socket == -1) { #endif pUser->SendFormat("UdpDebug::New1", true, "*** [ERR] %s: %s (%d).|", LanguageManager::m_Ptr->m_sTexts[LAN_UDP_SCK_CREATE_ERR], #ifdef _WIN32 WSErrorStr(iErr), iErr); #else ErrnoStr(errno), errno); #endif delete pNewDbg; return false; }
clsZlibUtility::clsZlibUtility() : pZbuffer(NULL), szZbufferSize(0) { // allocate buffer for zlib #ifdef _WIN32 pZbuffer = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE | HEAP_ZERO_MEMORY, ZBUFFERLEN); #else pZbuffer = (char *)calloc(ZBUFFERLEN, 1); #endif if(pZbuffer == NULL) { AppendDebugLogFormat("[MEM] Cannot allocate %u bytes for pZbuffer in clsZlibUtility::clsZlibUtility\n", ZBUFFERLEN); exit(EXIT_FAILURE); } memcpy(pZbuffer, "$ZOn|", 5); szZbufferSize = ZBUFFERLEN; }
void IpP2Country::LoadIPv4() { if(ServerManager::m_bUseIPv4 == false) { return; } #ifdef _WIN32 FILE * ip2country = fopen((ServerManager::m_sPath + "\\cfg\\IpToCountry.csv").c_str(), "r"); #else FILE * ip2country = fopen((ServerManager::m_sPath + "/cfg/IpToCountry.csv").c_str(), "r"); #endif if(ip2country == NULL) { return; } if(m_ui32Size == 0) { m_ui32Size = 131072; if(m_ui32RangeFrom == NULL) { #ifdef _WIN32 m_ui32RangeFrom = (uint32_t *)HeapAlloc(ServerManager::m_hPtokaXHeap, HEAP_NO_SERIALIZE | HEAP_ZERO_MEMORY, m_ui32Size * sizeof(uint32_t)); #else m_ui32RangeFrom = (uint32_t *)calloc(m_ui32Size, sizeof(uint32_t)); #endif if(m_ui32RangeFrom == NULL) { AppendDebugLog("%s - [MEM] Cannot create IpP2Country::m_ui32RangeFrom\n"); fclose(ip2country); m_ui32Size = 0; return; } } if(m_ui32RangeTo == NULL) { #ifdef _WIN32 m_ui32RangeTo = (uint32_t *)HeapAlloc(ServerManager::m_hPtokaXHeap, HEAP_NO_SERIALIZE | HEAP_ZERO_MEMORY, m_ui32Size * sizeof(uint32_t)); #else m_ui32RangeTo = (uint32_t *)calloc(m_ui32Size, sizeof(uint32_t)); #endif if(m_ui32RangeTo == NULL) { AppendDebugLog("%s - [MEM] Cannot create IpP2Country::m_ui32RangeTo\n"); fclose(ip2country); m_ui32Size = 0; return; } } if(m_ui8RangeCI == NULL) { #ifdef _WIN32 m_ui8RangeCI = (uint8_t *)HeapAlloc(ServerManager::m_hPtokaXHeap, HEAP_NO_SERIALIZE | HEAP_ZERO_MEMORY, m_ui32Size * sizeof(uint8_t)); #else m_ui8RangeCI = (uint8_t *)calloc(m_ui32Size, sizeof(uint8_t)); #endif if(m_ui8RangeCI == NULL) { AppendDebugLog("%s - [MEM] Cannot create IpP2Country::m_ui8RangeCI\n"); fclose(ip2country); m_ui32Size = 0; return; } } } char sLine[1024]; while(fgets(sLine, 1024, ip2country) != NULL) { if(sLine[0] != '\"') { continue; } if(m_ui32Count == m_ui32Size) { m_ui32Size += 512; void * oldbuf = m_ui32RangeFrom; #ifdef _WIN32 m_ui32RangeFrom = (uint32_t *)HeapReAlloc(ServerManager::m_hPtokaXHeap, HEAP_NO_SERIALIZE, (void *)oldbuf, m_ui32Size * sizeof(uint32_t)); #else m_ui32RangeFrom = (uint32_t *)realloc(oldbuf, m_ui32Size * sizeof(uint32_t)); #endif if(m_ui32RangeFrom == NULL) { AppendDebugLogFormat("[MEM] Cannot reallocate %u bytes in IpP2Country::IpP2Country for m_ui32RangeFrom\n", m_ui32Size); m_ui32RangeFrom = (uint32_t *)oldbuf; fclose(ip2country); return; } oldbuf = m_ui32RangeTo; #ifdef _WIN32 m_ui32RangeTo = (uint32_t *)HeapReAlloc(ServerManager::m_hPtokaXHeap, HEAP_NO_SERIALIZE, (void *)oldbuf, m_ui32Size * sizeof(uint32_t)); #else m_ui32RangeTo = (uint32_t *)realloc(oldbuf, m_ui32Size * sizeof(uint32_t)); #endif if(m_ui32RangeTo == NULL) { AppendDebugLogFormat("[MEM] Cannot reallocate %u bytes in IpP2Country::IpP2Country for m_ui32RangeTo\n", m_ui32Size); m_ui32RangeTo = (uint32_t *)oldbuf; fclose(ip2country); return; } oldbuf = m_ui8RangeCI; #ifdef _WIN32 m_ui8RangeCI = (uint8_t *)HeapReAlloc(ServerManager::m_hPtokaXHeap, HEAP_NO_SERIALIZE, (void *)oldbuf, m_ui32Size * sizeof(uint8_t)); #else m_ui8RangeCI = (uint8_t *)realloc(oldbuf, m_ui32Size * sizeof(uint8_t)); #endif if(m_ui8RangeCI == NULL) { AppendDebugLogFormat("[MEM] Cannot reallocate %u bytes in IpP2Country::IpP2Country for m_ui8RangeCI\n", m_ui32Size); m_ui8RangeCI = (uint8_t *)oldbuf; fclose(ip2country); return; } } char * sStart = sLine+1; uint8_t ui8d = 0; size_t szLineLen = strlen(sLine); for(size_t szi = 1; szi < szLineLen; szi++) { if(sLine[szi] == '\"') { sLine[szi] = '\0'; if(ui8d == 0) { m_ui32RangeFrom[m_ui32Count] = strtoul(sStart, NULL, 10); } else if(ui8d == 1) { m_ui32RangeTo[m_ui32Count] = strtoul(sStart, NULL, 10); } else if(ui8d == 4) { for(uint8_t ui8i = 0; ui8i < 252; ui8i++) { if(*((uint16_t *)CountryCodes[ui8i]) == *((uint16_t *)sStart)) { m_ui8RangeCI[m_ui32Count] = ui8i; m_ui32Count++; break; } } break; } ui8d++; szi += (uint16_t)2; sStart = sLine+szi+1; } } } fclose(ip2country); if(m_ui32Count < m_ui32Size) { m_ui32Size = m_ui32Count; void * oldbuf = m_ui32RangeFrom; #ifdef _WIN32 m_ui32RangeFrom = (uint32_t *)HeapReAlloc(ServerManager::m_hPtokaXHeap, HEAP_NO_SERIALIZE, (void *)oldbuf, m_ui32Size * sizeof(uint32_t)); #else m_ui32RangeFrom = (uint32_t *)realloc(oldbuf, m_ui32Size * sizeof(uint32_t)); #endif if(m_ui32RangeFrom == NULL) { AppendDebugLogFormat("[MEM] Cannot reallocate %u bytes in IpP2Country::IpP2Country for ui32RangeFrom\n", m_ui32Size); m_ui32RangeFrom = (uint32_t *)oldbuf; } oldbuf = m_ui32RangeTo; #ifdef _WIN32 m_ui32RangeTo = (uint32_t *)HeapReAlloc(ServerManager::m_hPtokaXHeap, HEAP_NO_SERIALIZE, (void *)oldbuf, m_ui32Size * sizeof(uint32_t)); #else m_ui32RangeTo = (uint32_t *)realloc(oldbuf, m_ui32Size * sizeof(uint32_t)); #endif if(m_ui32RangeTo == NULL) { AppendDebugLogFormat("[MEM] Cannot reallocate %u bytes in IpP2Country::IpP2Country for m_ui32RangeTo\n", m_ui32Size); m_ui32RangeTo = (uint32_t *)oldbuf; } oldbuf = m_ui8RangeCI; #ifdef _WIN32 m_ui8RangeCI = (uint8_t *)HeapReAlloc(ServerManager::m_hPtokaXHeap, HEAP_NO_SERIALIZE, (void *)oldbuf, m_ui32Size * sizeof(uint8_t)); #else m_ui8RangeCI = (uint8_t *)realloc(oldbuf, m_ui32Size * sizeof(uint8_t)); #endif if(m_ui8RangeCI == NULL) { AppendDebugLogFormat("[MEM] Cannot reallocate %u bytes in IpP2Country::IpP2Country for m_ui8RangeCI\n", m_ui32Size); m_ui8RangeCI = (uint8_t *)oldbuf; } } }
void IpP2Country::LoadIPv6() { if(ServerManager::m_bUseIPv6 == false) { return; } #ifdef _WIN32 FILE * ip2country = fopen((ServerManager::m_sPath + "\\cfg\\IpToCountry.6R.csv").c_str(), "r"); #else FILE * ip2country = fopen((ServerManager::m_sPath + "/cfg/IpToCountry.6R.csv").c_str(), "r"); #endif if(ip2country == NULL) { return; } if(m_ui32IPv6Size == 0) { m_ui32IPv6Size = 16384; if(m_ui128IPv6RangeFrom == NULL) { #ifdef _WIN32 m_ui128IPv6RangeFrom = (uint8_t *)HeapAlloc(ServerManager::m_hPtokaXHeap, HEAP_NO_SERIALIZE | HEAP_ZERO_MEMORY, m_ui32IPv6Size * (sizeof(uint8_t)*16)); #else m_ui128IPv6RangeFrom = (uint8_t *)calloc(m_ui32IPv6Size, sizeof(uint8_t) * 16); #endif if(m_ui128IPv6RangeFrom == NULL) { AppendDebugLog("%s - [MEM] Cannot create IpP2Country::m_ui128IPv6RangeFrom\n"); fclose(ip2country); m_ui32IPv6Size = 0; return; } } if(m_ui128IPv6RangeTo == NULL) { #ifdef _WIN32 m_ui128IPv6RangeTo = (uint8_t *)HeapAlloc(ServerManager::m_hPtokaXHeap, HEAP_NO_SERIALIZE | HEAP_ZERO_MEMORY, m_ui32IPv6Size * (sizeof(uint8_t)*16)); #else m_ui128IPv6RangeTo = (uint8_t *)calloc(m_ui32IPv6Size, sizeof(uint8_t) * 16); #endif if(m_ui128IPv6RangeTo == NULL) { AppendDebugLog("%s - [MEM] Cannot create IpP2Country::m_ui128IPv6RangeTo\n"); fclose(ip2country); m_ui32IPv6Size = 0; return; } } if(m_ui8IPv6RangeCI == NULL) { #ifdef _WIN32 m_ui8IPv6RangeCI = (uint8_t *)HeapAlloc(ServerManager::m_hPtokaXHeap, HEAP_NO_SERIALIZE | HEAP_ZERO_MEMORY, m_ui32IPv6Size * sizeof(uint8_t)); #else m_ui8IPv6RangeCI = (uint8_t *)calloc(m_ui32IPv6Size, sizeof(uint8_t)); #endif if(m_ui8IPv6RangeCI == NULL) { AppendDebugLog("%s - [MEM] Cannot create IpP2Country::m_ui8IPv6RangeCI\n"); fclose(ip2country); m_ui32IPv6Size = 0; return; } } } char sLine[1024]; while(fgets(sLine, 1024, ip2country) != NULL) { if(sLine[0] == '#' || sLine[0] < 32) { continue; } if(m_ui32IPv6Count == m_ui32IPv6Size) { m_ui32IPv6Size += 512; void * oldbuf = m_ui128IPv6RangeFrom; #ifdef _WIN32 m_ui128IPv6RangeFrom = (uint8_t *)HeapReAlloc(ServerManager::m_hPtokaXHeap, HEAP_NO_SERIALIZE, (void *)oldbuf, m_ui32IPv6Size * (sizeof(uint8_t)*16)); #else m_ui128IPv6RangeFrom = (uint8_t *)realloc(oldbuf, m_ui32IPv6Size * (sizeof(uint8_t)*16)); #endif if(m_ui128IPv6RangeFrom == NULL) { AppendDebugLogFormat("[MEM] Cannot reallocate %u bytes in IpP2Country::IpP2Country for m_ui128IPv6RangeFrom\n", m_ui32IPv6Size); m_ui128IPv6RangeFrom = (uint8_t *)oldbuf; fclose(ip2country); return; } oldbuf = m_ui128IPv6RangeTo; #ifdef _WIN32 m_ui128IPv6RangeTo = (uint8_t *)HeapReAlloc(ServerManager::m_hPtokaXHeap, HEAP_NO_SERIALIZE, (void *)oldbuf, m_ui32IPv6Size * (sizeof(uint8_t)*16)); #else m_ui128IPv6RangeTo = (uint8_t *)realloc(oldbuf, m_ui32IPv6Size * (sizeof(uint8_t)*16)); #endif if(m_ui128IPv6RangeTo == NULL) { AppendDebugLogFormat("[MEM] Cannot reallocate %u bytes in IpP2Country::IpP2Country for ui128IPv6RangeTo\n", m_ui32IPv6Size); m_ui128IPv6RangeTo = (uint8_t *)oldbuf; fclose(ip2country); return; } oldbuf = m_ui8IPv6RangeCI; #ifdef _WIN32 m_ui8IPv6RangeCI = (uint8_t *)HeapReAlloc(ServerManager::m_hPtokaXHeap, HEAP_NO_SERIALIZE, (void *)oldbuf, m_ui32IPv6Size * sizeof(uint8_t)); #else m_ui8IPv6RangeCI = (uint8_t *)realloc(oldbuf, m_ui32IPv6Size * sizeof(uint8_t)); #endif if(m_ui8IPv6RangeCI == NULL) { AppendDebugLogFormat("[MEM] Cannot reallocate %u bytes in IpP2Country::IpP2Country for ui8IPv6RangeCI\n", m_ui32IPv6Size); m_ui8IPv6RangeCI = (uint8_t *)oldbuf; fclose(ip2country); return; } } char * sStart = sLine; uint8_t ui8d = 0; size_t szLineLen = strlen(sLine); for(size_t szi = 0; szi < szLineLen; szi++) { if(ui8d == 0 && sLine[szi] == '-') { sLine[szi] = '\0'; #if defined(_WIN32) && !defined(_WIN64) && !defined(_WIN_IOT) win_inet_pton(sStart, m_ui128IPv6RangeFrom + (m_ui32IPv6Count*16)); #else inet_pton(AF_INET6, sStart, m_ui128IPv6RangeFrom + (m_ui32IPv6Count*16)); #endif } else if(sLine[szi] == ',') { sLine[szi] = '\0'; if(ui8d == 1) { #if defined(_WIN32) && !defined(_WIN64) && !defined(_WIN_IOT) win_inet_pton(sStart, m_ui128IPv6RangeTo + (m_ui32IPv6Count*16)); #else inet_pton(AF_INET6, sStart, m_ui128IPv6RangeTo + (m_ui32IPv6Count*16)); #endif } else { for(uint8_t ui8i = 0; ui8i < 252; ui8i++) { if(*((uint16_t *)CountryCodes[ui8i]) == *((uint16_t *)sStart)) { m_ui8IPv6RangeCI[m_ui32IPv6Count] = ui8i; m_ui32IPv6Count++; break; } } break; } } else { continue; } ui8d++; sStart = sLine+szi+1; } } fclose(ip2country); if(m_ui32IPv6Count < m_ui32IPv6Size) { m_ui32IPv6Size = m_ui32IPv6Count; void * oldbuf = m_ui128IPv6RangeFrom; #ifdef _WIN32 m_ui128IPv6RangeFrom = (uint8_t *)HeapReAlloc(ServerManager::m_hPtokaXHeap, HEAP_NO_SERIALIZE, (void *)oldbuf, m_ui32IPv6Size * (sizeof(uint8_t)*16)); #else m_ui128IPv6RangeFrom = (uint8_t *)realloc(oldbuf, m_ui32IPv6Size * (sizeof(uint8_t)*16)); #endif if(m_ui128IPv6RangeFrom == NULL) { AppendDebugLogFormat("[MEM] Cannot reallocate %u bytes in IpP2Country::IpP2Country for ui128IPv6RangeFrom\n", m_ui32IPv6Size); m_ui128IPv6RangeFrom = (uint8_t *)oldbuf; } oldbuf = m_ui128IPv6RangeTo; #ifdef _WIN32 m_ui128IPv6RangeTo = (uint8_t *)HeapReAlloc(ServerManager::m_hPtokaXHeap, HEAP_NO_SERIALIZE, (void *)oldbuf, m_ui32IPv6Size * (sizeof(uint8_t)*16)); #else m_ui128IPv6RangeTo = (uint8_t *)realloc(oldbuf, m_ui32IPv6Size * (sizeof(uint8_t)*16)); #endif if(m_ui128IPv6RangeTo == NULL) { AppendDebugLogFormat("[MEM] Cannot reallocate %u bytes in IpP2Country::IpP2Country for m_ui128IPv6RangeTo\n", m_ui32IPv6Size); m_ui128IPv6RangeTo = (uint8_t *)oldbuf; } oldbuf = m_ui8IPv6RangeCI; #ifdef _WIN32 m_ui8IPv6RangeCI = (uint8_t *)HeapReAlloc(ServerManager::m_hPtokaXHeap, HEAP_NO_SERIALIZE, (void *)oldbuf, m_ui32IPv6Size * sizeof(uint8_t)); #else m_ui8IPv6RangeCI = (uint8_t *)realloc(oldbuf, m_ui32IPv6Size * sizeof(uint8_t)); #endif if(m_ui8IPv6RangeCI == NULL) { AppendDebugLogFormat("[MEM] Cannot reallocate %u bytes in IpP2Country::IpP2Country for m_ui8IPv6RangeCI\n", m_ui32IPv6Size); m_ui8IPv6RangeCI = (uint8_t *)oldbuf; } } }
//------------------------------------------------------------------------------ bool SettingPageGeneral::CreateSettingPage(HWND hOwner) { CreateHWND(hOwner); if(bCreated == false) { return false; } RECT rcThis = { 0 }; ::GetWindowRect(m_hWnd, &rcThis); iFullGB = (rcThis.right - rcThis.left) - 5; iFullEDT = (rcThis.right - rcThis.left) - 21; iGBinGB = (rcThis.right - rcThis.left) - 15; iGBinGBEDT = (rcThis.right - rcThis.left) - 31; int iPosY = clsGuiSettingManager::iOneLineGB; int iHeight = iTwoChecksGB + clsGuiSettingManager::iGroupBoxMargin + (2 * clsGuiSettingManager::iCheckHeight) + 4 + clsGuiSettingManager::iOneLineGB + 5 + clsGuiSettingManager::iOneLineTwoChecksGB + clsGuiSettingManager::iGroupBoxMargin + clsGuiSettingManager::iCheckHeight + (2 * clsGuiSettingManager::iOneLineGB) + 6 + clsGuiSettingManager::iGroupBoxMargin + (3 * clsGuiSettingManager::iCheckHeight) + 14 + 3; iHeight = iHeight > ((3 * iOneLineTwoGroupGB) + clsGuiSettingManager::iOneLineGB + 3) ? iHeight : ((3 * iOneLineTwoGroupGB) + clsGuiSettingManager::iOneLineGB + 3); ::SetWindowPos(m_hWnd, NULL, 0, 0, rcThis.right, iHeight, SWP_NOMOVE | SWP_NOZORDER); hWndPageItems[GB_LANGUAGE] = ::CreateWindowEx(WS_EX_TRANSPARENT, WC_BUTTON, clsLanguageManager::mPtr->sTexts[LAN_LANGUAGE], WS_CHILD | WS_VISIBLE | BS_GROUPBOX, 0, 0, ScaleGui(297), clsGuiSettingManager::iOneLineGB, m_hWnd, NULL, clsServerManager::hInstance, NULL); hWndPageItems[CB_LANGUAGE] = ::CreateWindowEx(0, WC_COMBOBOX, "", WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_TABSTOP | CBS_DROPDOWNLIST, 8, clsGuiSettingManager::iGroupBoxMargin, ScaleGui(297) - 16, clsGuiSettingManager::iEditHeight, m_hWnd, NULL, clsServerManager::hInstance, NULL); hWndPageItems[GB_MAX_USERS] = ::CreateWindowEx(WS_EX_TRANSPARENT, WC_BUTTON, clsLanguageManager::mPtr->sTexts[LAN_MAX_USERS_LIMIT], WS_CHILD | WS_VISIBLE | BS_GROUPBOX, ScaleGui(297) + 5, 0, (rcThis.right - rcThis.left) - (ScaleGui(297) + 10), clsGuiSettingManager::iOneLineGB, m_hWnd, NULL, clsServerManager::hInstance, NULL); hWndPageItems[EDT_MAX_USERS] = ::CreateWindowEx(WS_EX_CLIENTEDGE, WC_EDIT, "", WS_CHILD | WS_VISIBLE | WS_TABSTOP | ES_NUMBER | ES_AUTOHSCROLL | ES_RIGHT, ScaleGui(297) + 13, clsGuiSettingManager::iGroupBoxMargin, (rcThis.right - rcThis.left) - (ScaleGui(297) + clsGuiSettingManager::iUpDownWidth + 26), clsGuiSettingManager::iEditHeight, m_hWnd, (HMENU)EDT_MAX_USERS, clsServerManager::hInstance, NULL); ::SendMessage(hWndPageItems[EDT_MAX_USERS], EM_SETLIMITTEXT, 5, 0); AddUpDown(hWndPageItems[UD_MAX_USERS], (rcThis.right - rcThis.left)-clsGuiSettingManager::iUpDownWidth-13, clsGuiSettingManager::iGroupBoxMargin, clsGuiSettingManager::iUpDownWidth, clsGuiSettingManager::iEditHeight, (LPARAM)MAKELONG(32767, 1), (WPARAM)hWndPageItems[EDT_MAX_USERS], (LPARAM)MAKELONG(clsSettingManager::mPtr->i16Shorts[SETSHORT_MAX_USERS], 0)); hWndPageItems[GB_HUB_NAME] = ::CreateWindowEx(WS_EX_TRANSPARENT, WC_BUTTON, clsLanguageManager::mPtr->sTexts[LAN_HUB_NAME], WS_CHILD | WS_VISIBLE | BS_GROUPBOX, 0, iPosY, iFullGB, clsGuiSettingManager::iOneLineGB, m_hWnd, NULL, clsServerManager::hInstance, NULL); hWndPageItems[EDT_HUB_NAME] = ::CreateWindowEx(WS_EX_CLIENTEDGE, WC_EDIT, clsSettingManager::mPtr->sTexts[SETTXT_HUB_NAME], WS_CHILD | WS_VISIBLE | WS_TABSTOP | ES_AUTOHSCROLL, 8, clsGuiSettingManager::iOneLineGB + clsGuiSettingManager::iGroupBoxMargin, iFullEDT, clsGuiSettingManager::iEditHeight, m_hWnd, (HMENU)EDT_HUB_NAME, clsServerManager::hInstance, NULL); ::SendMessage(hWndPageItems[EDT_HUB_NAME], EM_SETLIMITTEXT, 256, 0); iPosY += clsGuiSettingManager::iOneLineGB; hWndPageItems[GB_HUB_TOPIC] = ::CreateWindowEx(WS_EX_TRANSPARENT, WC_BUTTON, clsLanguageManager::mPtr->sTexts[LAN_HUB_TOPIC], WS_CHILD | WS_VISIBLE | BS_GROUPBOX, 0, iPosY, iFullGB, clsGuiSettingManager::iOneLineGB, m_hWnd, NULL, clsServerManager::hInstance, NULL); hWndPageItems[EDT_HUB_TOPIC] = ::CreateWindowEx(WS_EX_CLIENTEDGE, WC_EDIT, clsSettingManager::mPtr->sTexts[SETTXT_HUB_TOPIC], WS_CHILD | WS_VISIBLE | WS_TABSTOP | ES_AUTOHSCROLL, 8, iPosY + clsGuiSettingManager::iGroupBoxMargin, iFullEDT, clsGuiSettingManager::iEditHeight, m_hWnd, (HMENU)EDT_HUB_TOPIC, clsServerManager::hInstance, NULL); ::SendMessage(hWndPageItems[EDT_HUB_TOPIC], EM_SETLIMITTEXT, 256, 0); iPosY += clsGuiSettingManager::iOneLineGB; hWndPageItems[GB_HUB_DESCRIPTION] = ::CreateWindowEx(WS_EX_TRANSPARENT, WC_BUTTON, clsLanguageManager::mPtr->sTexts[LAN_HUB_DESCRIPTION], WS_CHILD | WS_VISIBLE | BS_GROUPBOX, 0, iPosY, iFullGB, clsGuiSettingManager::iOneLineOneChecksGB, m_hWnd, NULL, clsServerManager::hInstance, NULL); hWndPageItems[EDT_HUB_DESCRIPTION] = ::CreateWindowEx(WS_EX_CLIENTEDGE, WC_EDIT, clsSettingManager::mPtr->sTexts[SETTXT_HUB_DESCRIPTION], WS_CHILD | WS_VISIBLE | WS_TABSTOP | ES_AUTOHSCROLL, 8, iPosY + clsGuiSettingManager::iGroupBoxMargin, iFullEDT, clsGuiSettingManager::iEditHeight, m_hWnd, (HMENU)EDT_HUB_DESCRIPTION, clsServerManager::hInstance, NULL); ::SendMessage(hWndPageItems[EDT_HUB_DESCRIPTION], EM_SETLIMITTEXT, 256, 0); hWndPageItems[BTN_ANTI_MOGLO] = ::CreateWindowEx(0, WC_BUTTON, clsLanguageManager::mPtr->sTexts[LAN_ANTI_MOGLO], WS_CHILD | WS_VISIBLE | WS_TABSTOP | BS_AUTOCHECKBOX, 8, iPosY + clsGuiSettingManager::iGroupBoxMargin + clsGuiSettingManager::iEditHeight + 4, iFullEDT, clsGuiSettingManager::iCheckHeight, m_hWnd, NULL, clsServerManager::hInstance, NULL); ::SendMessage(hWndPageItems[BTN_ANTI_MOGLO], BM_SETCHECK, (clsSettingManager::mPtr->bBools[SETBOOL_ANTI_MOGLO] == true ? BST_CHECKED : BST_UNCHECKED), 0); iPosY += clsGuiSettingManager::iOneLineOneChecksGB; hWndPageItems[GB_HUB_ADDRESS] = ::CreateWindowEx(WS_EX_TRANSPARENT, WC_BUTTON, clsLanguageManager::mPtr->sTexts[LAN_HUB_ADDRESS], WS_CHILD | WS_VISIBLE | BS_GROUPBOX, 0, iPosY, iFullGB, clsGuiSettingManager::iOneLineTwoChecksGB + clsGuiSettingManager::iOneLineGB + 3, m_hWnd, NULL, clsServerManager::hInstance, NULL); hWndPageItems[EDT_HUB_ADDRESS] = ::CreateWindowEx(WS_EX_CLIENTEDGE, WC_EDIT, clsSettingManager::mPtr->sTexts[SETTXT_HUB_ADDRESS], WS_CHILD | WS_VISIBLE | WS_TABSTOP | ES_AUTOHSCROLL, 8, iPosY + clsGuiSettingManager::iGroupBoxMargin, iFullEDT, clsGuiSettingManager::iEditHeight, m_hWnd, (HMENU)EDT_HUB_ADDRESS, clsServerManager::hInstance, NULL); ::SendMessage(hWndPageItems[EDT_HUB_ADDRESS], EM_SETLIMITTEXT, 256, 0); hWndPageItems[BTN_RESOLVE_ADDRESS] = ::CreateWindowEx(0, WC_BUTTON, clsLanguageManager::mPtr->sTexts[LAN_RESOLVE_HOSTNAME], WS_CHILD | WS_VISIBLE | WS_TABSTOP | BS_AUTOCHECKBOX, 8, iPosY + clsGuiSettingManager::iGroupBoxMargin + clsGuiSettingManager::iEditHeight + 4, iFullEDT, clsGuiSettingManager::iCheckHeight, m_hWnd, (HMENU)BTN_RESOLVE_ADDRESS, clsServerManager::hInstance, NULL); ::SendMessage(hWndPageItems[BTN_RESOLVE_ADDRESS], BM_SETCHECK, (clsSettingManager::mPtr->bBools[SETBOOL_RESOLVE_TO_IP] == true ? BST_CHECKED : BST_UNCHECKED), 0); int iFourtyPercent = (int)(iGBinGB * 0.4); hWndPageItems[GB_IPV4_ADDRESS] = ::CreateWindowEx(WS_EX_TRANSPARENT, WC_BUTTON, clsLanguageManager::mPtr->sTexts[LAN_IPV4_ADDRESS], WS_CHILD | WS_VISIBLE | BS_GROUPBOX, 5, iPosY + clsGuiSettingManager::iGroupBoxMargin + clsGuiSettingManager::iEditHeight + clsGuiSettingManager::iCheckHeight + 5, iFourtyPercent - 3, clsGuiSettingManager::iOneLineGB, m_hWnd, NULL, clsServerManager::hInstance, NULL); hWndPageItems[EDT_IPV4_ADDRESS] = ::CreateWindowEx(WS_EX_CLIENTEDGE, WC_EDIT, clsSettingManager::mPtr->bBools[SETBOOL_RESOLVE_TO_IP] == true ? clsServerManager::sHubIP : (clsSettingManager::mPtr->sTexts[SETTXT_IPV4_ADDRESS] != NULL ? clsSettingManager::mPtr->sTexts[SETTXT_IPV4_ADDRESS] : ""), WS_CHILD | WS_VISIBLE | WS_TABSTOP | ES_AUTOHSCROLL, 13, iPosY + clsGuiSettingManager::iGroupBoxMargin + clsGuiSettingManager::iEditHeight + clsGuiSettingManager::iCheckHeight + 5 + clsGuiSettingManager::iGroupBoxMargin, iFourtyPercent - 19, clsGuiSettingManager::iEditHeight, m_hWnd, NULL, clsServerManager::hInstance, NULL); ::SendMessage(hWndPageItems[EDT_IPV4_ADDRESS], EM_SETLIMITTEXT, 15, 0); hWndPageItems[GB_IPV6_ADDRESS] = ::CreateWindowEx(WS_EX_TRANSPARENT, WC_BUTTON, clsLanguageManager::mPtr->sTexts[LAN_IPV6_ADDRESS], WS_CHILD | WS_VISIBLE | BS_GROUPBOX, 10 + (iFourtyPercent - 3), iPosY + clsGuiSettingManager::iGroupBoxMargin + clsGuiSettingManager::iEditHeight + clsGuiSettingManager::iCheckHeight + 5, (iGBinGB - (iFourtyPercent - 3)) - 5, clsGuiSettingManager::iOneLineGB, m_hWnd, NULL, clsServerManager::hInstance, NULL); hWndPageItems[EDT_IPV6_ADDRESS] = ::CreateWindowEx(WS_EX_CLIENTEDGE, WC_EDIT, clsSettingManager::mPtr->bBools[SETBOOL_RESOLVE_TO_IP] == true ? clsServerManager::sHubIP6 : (clsSettingManager::mPtr->sTexts[SETTXT_IPV6_ADDRESS] != NULL ? clsSettingManager::mPtr->sTexts[SETTXT_IPV6_ADDRESS] : ""), WS_CHILD | WS_VISIBLE | WS_TABSTOP | ES_AUTOHSCROLL, 18 + (iFourtyPercent - 3), iPosY + clsGuiSettingManager::iGroupBoxMargin + clsGuiSettingManager::iEditHeight + clsGuiSettingManager::iCheckHeight + 5 + clsGuiSettingManager::iGroupBoxMargin, (iGBinGB - (iFourtyPercent - 3)) - 21, clsGuiSettingManager::iEditHeight, m_hWnd, NULL, clsServerManager::hInstance, NULL); ::SendMessage(hWndPageItems[EDT_IPV6_ADDRESS], EM_SETLIMITTEXT, 39, 0); hWndPageItems[BTN_BIND_ADDRESS] = ::CreateWindowEx(0, WC_BUTTON, clsLanguageManager::mPtr->sTexts[LAN_BIND_ONLY_ADDRS], WS_CHILD | WS_VISIBLE | WS_TABSTOP | BS_AUTOCHECKBOX, 8, iPosY + clsGuiSettingManager::iGroupBoxMargin + clsGuiSettingManager::iEditHeight + clsGuiSettingManager::iCheckHeight + clsGuiSettingManager::iOneLineGB + 10, iFullEDT, clsGuiSettingManager::iCheckHeight, m_hWnd, NULL, clsServerManager::hInstance, NULL); ::SendMessage(hWndPageItems[BTN_BIND_ADDRESS], BM_SETCHECK, (clsSettingManager::mPtr->bBools[SETBOOL_BIND_ONLY_SINGLE_IP] == true ? BST_CHECKED : BST_UNCHECKED), 0); iPosY += clsGuiSettingManager::iOneLineTwoChecksGB + clsGuiSettingManager::iOneLineGB + 3; hWndPageItems[GB_TCP_PORTS] = ::CreateWindowEx(WS_EX_TRANSPARENT, WC_BUTTON, clsLanguageManager::mPtr->sTexts[LAN_TCP_PORTS], WS_CHILD | WS_VISIBLE | BS_GROUPBOX, 0, iPosY, ScaleGui(362), clsGuiSettingManager::iOneLineGB, m_hWnd, NULL, clsServerManager::hInstance, NULL); hWndPageItems[EDT_TCP_PORTS] = ::CreateWindowEx(WS_EX_CLIENTEDGE, WC_EDIT, clsSettingManager::mPtr->sTexts[SETTXT_TCP_PORTS], WS_CHILD | WS_VISIBLE | WS_TABSTOP | ES_AUTOHSCROLL, 8, iPosY + clsGuiSettingManager::iGroupBoxMargin, ScaleGui(362) - 16, clsGuiSettingManager::iEditHeight, m_hWnd, (HMENU)EDT_TCP_PORTS, clsServerManager::hInstance, NULL); ::SendMessage(hWndPageItems[EDT_TCP_PORTS], EM_SETLIMITTEXT, 64, 0); AddToolTip(hWndPageItems[EDT_TCP_PORTS], clsLanguageManager::mPtr->sTexts[LAN_TCP_PORTS_HINT]); hWndPageItems[GB_UDP_PORT] = ::CreateWindowEx(WS_EX_TRANSPARENT, WC_BUTTON, clsLanguageManager::mPtr->sTexts[LAN_UDP_PORT], WS_CHILD | WS_VISIBLE | BS_GROUPBOX, ScaleGui(362) + 5, iPosY, (rcThis.right - rcThis.left) - (ScaleGui(362) + 10), clsGuiSettingManager::iOneLineGB, m_hWnd, NULL, clsServerManager::hInstance, NULL); hWndPageItems[EDT_UDP_PORT] = ::CreateWindowEx(WS_EX_CLIENTEDGE, WC_EDIT, clsSettingManager::mPtr->sTexts[SETTXT_UDP_PORT], WS_CHILD | WS_VISIBLE | WS_TABSTOP | ES_NUMBER | ES_AUTOHSCROLL, ScaleGui(362) + 13, iPosY + clsGuiSettingManager::iGroupBoxMargin, (rcThis.right - rcThis.left) - (ScaleGui(362) + 26), clsGuiSettingManager::iEditHeight, m_hWnd, (HMENU)EDT_UDP_PORT, clsServerManager::hInstance, NULL); ::SendMessage(hWndPageItems[EDT_UDP_PORT], EM_SETLIMITTEXT, 5, 0); AddToolTip(hWndPageItems[EDT_UDP_PORT], clsLanguageManager::mPtr->sTexts[LAN_ZERO_DISABLED]); iPosY += clsGuiSettingManager::iOneLineGB; hWndPageItems[GB_HUB_LISTS] = ::CreateWindowEx(WS_EX_TRANSPARENT, WC_BUTTON, clsLanguageManager::mPtr->sTexts[LAN_HUB_REG_ADRS], WS_CHILD | WS_VISIBLE | BS_GROUPBOX, 0, iPosY, iFullGB, clsGuiSettingManager::iOneLineOneChecksGB, m_hWnd, NULL, clsServerManager::hInstance, NULL); hWndPageItems[EDT_HUB_LISTS] = ::CreateWindowEx(WS_EX_CLIENTEDGE, WC_EDIT, clsSettingManager::mPtr->sTexts[SETTXT_REGISTER_SERVERS], WS_CHILD | WS_VISIBLE | WS_TABSTOP | ES_AUTOHSCROLL, 8, iPosY + clsGuiSettingManager::iGroupBoxMargin, iFullEDT, clsGuiSettingManager::iEditHeight, m_hWnd, NULL, clsServerManager::hInstance, NULL); ::SendMessage(hWndPageItems[EDT_HUB_LISTS], EM_SETLIMITTEXT, 1024, 0); AddToolTip(hWndPageItems[EDT_HUB_LISTS], clsLanguageManager::mPtr->sTexts[LAN_HUB_LIST_REGS_HINT]); hWndPageItems[BTN_HUBLIST_AUTO_REG] = ::CreateWindowEx(0, WC_BUTTON, clsLanguageManager::mPtr->sTexts[LAN_AUTO_REG], WS_CHILD | WS_VISIBLE | WS_TABSTOP | BS_AUTOCHECKBOX, 8, iPosY + clsGuiSettingManager::iGroupBoxMargin + clsGuiSettingManager::iEditHeight + 4, iFullEDT, clsGuiSettingManager::iCheckHeight, m_hWnd, NULL, clsServerManager::hInstance, NULL); ::SendMessage(hWndPageItems[BTN_HUBLIST_AUTO_REG], BM_SETCHECK, (clsSettingManager::mPtr->bBools[SETBOOL_AUTO_REG] == true ? BST_CHECKED : BST_UNCHECKED), 0); for(uint8_t ui8i = 0; ui8i < (sizeof(hWndPageItems) / sizeof(hWndPageItems[0])); ui8i++) { if(hWndPageItems[ui8i] == NULL) { return false; } ::SendMessage(hWndPageItems[ui8i], WM_SETFONT, (WPARAM)clsGuiSettingManager::hFont, MAKELPARAM(TRUE, 0)); } // add default language and select it ::SendMessage(hWndPageItems[CB_LANGUAGE], CB_ADDSTRING, 0, (LPARAM)"Default English"); ::SendMessage(hWndPageItems[CB_LANGUAGE], CB_SETCURSEL, 0, 0); // add all languages found in language dir struct _finddata_t langfile; intptr_t hFile = _findfirst((clsServerManager::sPath+"\\language\\"+"*.xml").c_str(), &langfile); if(hFile != -1) { do { if(((langfile.attrib & _A_SUBDIR) == _A_SUBDIR) == true || stricmp(langfile.name+(strlen(langfile.name)-4), ".xml") != NULL) { continue; } ::SendMessage(hWndPageItems[CB_LANGUAGE], CB_ADDSTRING, 0, (LPARAM)string(langfile.name, strlen(langfile.name)-4).c_str()); } while(_findnext(hFile, &langfile) == 0); _findclose(hFile); } // Select actual language in combobox if(clsSettingManager::mPtr->sTexts[SETTXT_LANGUAGE] != NULL) { uint32_t ui32Count = (uint32_t)::SendMessage(hWndPageItems[CB_LANGUAGE], CB_GETCOUNT, 0, 0); for(uint32_t ui32i = 1; ui32i < ui32Count; ui32i++) { uint32_t ui32Len = (uint32_t)::SendMessage(hWndPageItems[CB_LANGUAGE], CB_GETLBTEXTLEN, ui32i, 0); if(ui32Len == (int32_t)clsSettingManager::mPtr->ui16TextsLens[SETTXT_LANGUAGE]) { char * buf = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, ui32Len+1); if(buf == NULL) { AppendDebugLogFormat("[MEM] Cannot allocate %u bytes for buf in SettingPageGeneral::CreateSettingPage\n", ui32Len+1); return false; } ::SendMessage(hWndPageItems[CB_LANGUAGE], CB_GETLBTEXT, ui32i, (LPARAM)buf); if(stricmp(buf, clsSettingManager::mPtr->sTexts[SETTXT_LANGUAGE]) == NULL) { ::SendMessage(hWndPageItems[CB_LANGUAGE], CB_SETCURSEL, ui32i, 0); if(HeapFree(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, (void *)buf) == 0) { AppendDebugLog("%s - [MEM] Cannot deallocate buf in SettingPageGeneral::CreateSettingPage\n"); } break; } if(HeapFree(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, (void *)buf) == 0) { AppendDebugLog("%s - [MEM] Cannot deallocate buf in SettingPageGeneral::CreateSettingPage\n"); } } } } if(clsSettingManager::mPtr->bBools[SETBOOL_RESOLVE_TO_IP] == true) { ::EnableWindow(hWndPageItems[EDT_IPV4_ADDRESS], FALSE); ::EnableWindow(hWndPageItems[EDT_IPV6_ADDRESS], FALSE); } clsGuiSettingManager::wpOldButtonProc = (WNDPROC)::SetWindowLongPtr(hWndPageItems[BTN_HUBLIST_AUTO_REG], GWLP_WNDPROC, (LONG_PTR)ButtonProc); return true; }
void SettingPageGeneral::Save() { if(bCreated == false) { return; } char sBuf[1025]; int iLen = ::GetWindowText(hWndPageItems[EDT_HUB_NAME], sBuf, 1025); if(strcmp(sBuf, clsSettingManager::mPtr->sTexts[SETTXT_HUB_NAME]) != NULL) { bUpdateHubNameWelcome = true; bUpdateHubName = true; } clsSettingManager::mPtr->SetText(SETTXT_HUB_NAME, sBuf, iLen); iLen = ::GetWindowText(hWndPageItems[EDT_HUB_TOPIC], sBuf, 1025); if(bUpdateHubName == false && ((clsSettingManager::mPtr->sTexts[SETTXT_HUB_TOPIC] == NULL && iLen != 0) || (clsSettingManager::mPtr->sTexts[SETTXT_HUB_TOPIC] != NULL && strcmp(sBuf, clsSettingManager::mPtr->sTexts[SETTXT_HUB_TOPIC]) != NULL))) { bUpdateHubNameWelcome = true; bUpdateHubName = true; } clsSettingManager::mPtr->SetText(SETTXT_HUB_TOPIC, sBuf, iLen); iLen = ::GetWindowText(hWndPageItems[EDT_HUB_DESCRIPTION], sBuf, 1025); clsSettingManager::mPtr->SetText(SETTXT_HUB_DESCRIPTION, sBuf, iLen); clsSettingManager::mPtr->SetBool(SETBOOL_ANTI_MOGLO, ::SendMessage(hWndPageItems[BTN_ANTI_MOGLO], BM_GETCHECK, 0, 0) == BST_CHECKED ? true : false); bool bResolveHubAddress = false; iLen = ::GetWindowText(hWndPageItems[EDT_HUB_ADDRESS], sBuf, 1025); if(strcmp(sBuf, clsSettingManager::mPtr->sTexts[SETTXT_HUB_ADDRESS]) != NULL) { bResolveHubAddress = true; } clsSettingManager::mPtr->SetText(SETTXT_HUB_ADDRESS, sBuf, iLen); bool bOldResolve = clsSettingManager::mPtr->bBools[SETBOOL_RESOLVE_TO_IP]; clsSettingManager::mPtr->SetBool(SETBOOL_RESOLVE_TO_IP, ::SendMessage(hWndPageItems[BTN_RESOLVE_ADDRESS], BM_GETCHECK, 0, 0) == BST_CHECKED ? true : false); if(bOldResolve != clsSettingManager::mPtr->bBools[SETBOOL_RESOLVE_TO_IP]) { bResolveHubAddress = true; } if(clsSettingManager::mPtr->bBools[SETBOOL_RESOLVE_TO_IP] == false) { iLen = ::GetWindowText(hWndPageItems[EDT_IPV4_ADDRESS], sBuf, 1025); clsSettingManager::mPtr->SetText(SETTXT_IPV4_ADDRESS, sBuf, iLen); iLen = ::GetWindowText(hWndPageItems[EDT_IPV6_ADDRESS], sBuf, 1025); clsSettingManager::mPtr->SetText(SETTXT_IPV6_ADDRESS, sBuf, iLen); } clsSettingManager::mPtr->SetBool(SETBOOL_BIND_ONLY_SINGLE_IP, ::SendMessage(hWndPageItems[BTN_BIND_ADDRESS], BM_GETCHECK, 0, 0) == BST_CHECKED ? true : false); iLen = ::GetWindowText(hWndPageItems[EDT_TCP_PORTS], sBuf, 1025); if(strcmp(sBuf, clsSettingManager::mPtr->sTexts[SETTXT_TCP_PORTS]) != NULL) { bUpdateTCPPorts = true; } clsSettingManager::mPtr->SetText(SETTXT_TCP_PORTS, sBuf, iLen); iLen = ::GetWindowText(hWndPageItems[EDT_UDP_PORT], sBuf, 1025); if(strcmp(sBuf, clsSettingManager::mPtr->sTexts[SETTXT_UDP_PORT]) != NULL) { bUpdateUDPPort = true; } clsSettingManager::mPtr->SetText(SETTXT_UDP_PORT, sBuf, iLen); iLen = ::GetWindowText(hWndPageItems[EDT_HUB_LISTS], sBuf, 1025); clsSettingManager::mPtr->SetText(SETTXT_REGISTER_SERVERS, sBuf, iLen); if((::SendMessage(hWndPageItems[BTN_HUBLIST_AUTO_REG], BM_GETCHECK, 0, 0) == BST_CHECKED ? true : false) != clsSettingManager::mPtr->bBools[SETBOOL_AUTO_REG]) { bUpdateAutoReg = true; } clsSettingManager::mPtr->SetBool(SETBOOL_AUTO_REG, ::SendMessage(hWndPageItems[BTN_HUBLIST_AUTO_REG], BM_GETCHECK, 0, 0) == BST_CHECKED ? true : false); if(bResolveHubAddress == true) { clsServerManager::ResolveHubAddress(true); } uint32_t ui32CurSel = (uint32_t)::SendMessage(hWndPageItems[CB_LANGUAGE], CB_GETCURSEL, 0, 0); if(ui32CurSel == 0) { if((clsSettingManager::mPtr->sTexts[SETTXT_LANGUAGE] == NULL && ui32CurSel != 0) || (clsSettingManager::mPtr->sTexts[SETTXT_LANGUAGE] != NULL && (ui32CurSel == 0 || strcmp(sBuf, clsSettingManager::mPtr->sTexts[SETTXT_LANGUAGE]) != NULL))) { bUpdateLanguage = true; bUpdateHubNameWelcome = true; } clsSettingManager::mPtr->SetText(SETTXT_LANGUAGE, "", 0); } else { uint32_t ui32Len = (uint32_t)::SendMessage(hWndPageItems[CB_LANGUAGE], CB_GETLBTEXTLEN, ui32CurSel, 0); char * sTempBuf = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, ui32Len+1); if(sTempBuf == NULL) { AppendDebugLogFormat("[MEM] Cannot allocate %u bytes for sTempBuf in SettingPageGeneral::Save\n", ui32Len+1); return; } if((clsSettingManager::mPtr->sTexts[SETTXT_LANGUAGE] == NULL && ui32CurSel != 0) || (clsSettingManager::mPtr->sTexts[SETTXT_LANGUAGE] != NULL && (ui32CurSel == 0 || strcmp(sTempBuf, clsSettingManager::mPtr->sTexts[SETTXT_LANGUAGE]) != NULL))) { bUpdateLanguage = true; bUpdateHubNameWelcome = true; } ::SendMessage(hWndPageItems[CB_LANGUAGE], CB_GETLBTEXT, ui32CurSel, (LPARAM)sTempBuf); clsSettingManager::mPtr->SetText(SETTXT_LANGUAGE, sTempBuf, ui32Len); if(HeapFree(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, (void *)sTempBuf) == 0) { AppendDebugLog("%s - [MEM] Cannot deallocate sTempBuf in SettingPageGeneral::Save\n"); } } LRESULT lResult = ::SendMessage(hWndPageItems[UD_MAX_USERS], UDM_GETPOS, 0, 0); if(HIWORD(lResult) == 0) { clsSettingManager::mPtr->SetShort(SETSHORT_MAX_USERS, LOWORD(lResult)); } }
char * clsZlibUtility::CreateZPipe(const char *sInData, const size_t &szInDataSize, uint32_t &ui32OutDataLen) { // prepare Zbuffer if(szZbufferSize < szInDataSize + 128) { size_t szOldZbufferSize = szZbufferSize; szZbufferSize = Allign128K(szInDataSize + 128); char * pOldBuf = pZbuffer; #ifdef _WIN32 pZbuffer = (char *)HeapReAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, (void *)pOldBuf, szZbufferSize); #else pZbuffer = (char *)realloc(pOldBuf, szZbufferSize); #endif if(pZbuffer == NULL) { pZbuffer = pOldBuf; szZbufferSize = szOldZbufferSize; ui32OutDataLen = 0; AppendDebugLogFormat("[MEM] Cannot reallocate %" PRIu64 " bytes for pZbuffer in clsZlibUtility::CreateZPipe\n", (uint64_t)szZbufferSize); return pZbuffer; } } z_stream stream; // init zlib struct memset(&stream, 0 , sizeof(stream)); stream.zalloc = Z_NULL; stream.zfree = Z_NULL; stream.data_type = Z_TEXT; deflateInit(&stream, Z_BEST_COMPRESSION); stream.next_in = (Bytef*)sInData; stream.avail_in = (uInt)szInDataSize; stream.next_out = (Bytef*)pZbuffer+5; stream.avail_out = (uInt)(szZbufferSize-5); // compress if(deflate(&stream, Z_FINISH) != Z_STREAM_END) { deflateEnd(&stream); AppendDebugLog("%s - [ERR] deflate error\n"); ui32OutDataLen = 0; return pZbuffer; } ui32OutDataLen = stream.total_out+5; // cleanup zlib deflateEnd(&stream); if(ui32OutDataLen >= szInDataSize) { ui32OutDataLen = 0; return pZbuffer; } return pZbuffer; }
bool clsTextFilesManager::ProcessTextFilesCmd(User * u, char * cmd, bool fromPM/* = false*/) const { TextFile * cur = NULL, * next = pTextFiles; while(next != NULL) { cur = next; next = cur->pNext; if(strcasecmp(cur->sCommand, cmd) == 0) { bool bInPM = (clsSettingManager::mPtr->bBools[SETBOOL_SEND_TEXT_FILES_AS_PM] == true || fromPM); size_t szHubSecLen = (size_t)clsSettingManager::mPtr->ui16PreTextsLens[clsSettingManager::SETPRETXT_HUB_SEC]; size_t szChatLen = 0; // PPK ... to chat or to PM ??? if(bInPM == true) { szChatLen = 18+u->ui8NickLen+(2*szHubSecLen)+strlen(cur->sText); } else { szChatLen = 4+szHubSecLen+strlen(cur->sText); } #ifdef _WIN32 char * sMSG = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, szChatLen); #else char * sMSG = (char *)malloc(szChatLen); #endif if(sMSG == NULL) { AppendDebugLogFormat("[MEM] Cannot allocate %" PRIu64 " bytes for sMsg in clsTextFilesManager::ProcessTextFilesCmd\n", (uint64_t)szChatLen); return true; } if(bInPM == true) { int iret = sprintf(sMSG, "$To: %s From: %s $<%s> %s", u->sNick, clsSettingManager::mPtr->sPreTexts[clsSettingManager::SETPRETXT_HUB_SEC], clsSettingManager::mPtr->sPreTexts[clsSettingManager::SETPRETXT_HUB_SEC], cur->sText); if(CheckSprintf(iret, szChatLen, "clsTextFilesManager::ProcessTextFilesCmd1") == false) { free(sMSG); return true; } } else { int iret = sprintf(sMSG,"<%s> %s", clsSettingManager::mPtr->sPreTexts[clsSettingManager::SETPRETXT_HUB_SEC], cur->sText); if(CheckSprintf(iret, szChatLen, "clsTextFilesManager::ProcessTextFilesCmd2") == false) { free(sMSG); return true; } } u->SendCharDelayed(sMSG, szChatLen-1); #ifdef _WIN32 if(HeapFree(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, (void *)sMSG) == 0) { AppendDebugLog("%s - [MEM] Cannot deallocate sMSG in clsTextFilesManager::ProcessTextFilesCmd\n"); } #else free(sMSG); #endif return true; } } return false; }
void clsTextFilesManager::RefreshTextFiles() { if(clsSettingManager::mPtr->bBools[SETBOOL_ENABLE_TEXT_FILES] == false) return; TextFile * cur = NULL, * next = pTextFiles; while(next != NULL) { cur = next; next = cur->pNext; delete cur; } pTextFiles = NULL; #ifdef _WIN32 struct _finddata_t textfile; intptr_t hFile = _findfirst((clsServerManager::sPath+"\\texts\\*.txt").c_str(), &textfile); if(hFile != -1) { do { if((textfile.attrib & _A_SUBDIR) != 0 || stricmp(textfile.name+(strlen(textfile.name)-4), ".txt") != 0) { continue; } FILE *f = fopen((clsServerManager::sPath+"\\texts\\"+textfile.name).c_str(), "rb"); if(f != NULL) { if(textfile.size != 0) { TextFile * pNewTxtFile = new (std::nothrow) TextFile(); if(pNewTxtFile == NULL) { AppendDebugLog("%s - [MEM] Cannot allocate pNewTxtFile in clsTextFilesManager::RefreshTextFiles\n"); fclose(f); _findclose(hFile); return; } pNewTxtFile->sText = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, textfile.size+2); if(pNewTxtFile->sText == NULL) { AppendDebugLogFormat("[MEM] Cannot allocate %" PRIu64 " bytes for sText in clsTextFilesManager::RefreshTextFiles\n", (uint64_t)(textfile.size+2)); fclose(f); _findclose(hFile); delete pNewTxtFile; return; } size_t size = fread(pNewTxtFile->sText, 1, textfile.size, f); pNewTxtFile->sText[size] = '|'; pNewTxtFile->sText[size+1] = '\0'; pNewTxtFile->sCommand = (char *)HeapAlloc(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, strlen(textfile.name)-3); if(pNewTxtFile->sCommand == NULL) { AppendDebugLogFormat("[MEM] Cannot allocate %" PRIu64 " bytes for sCommand in clsTextFilesManager::RefreshTextFiles\n", (uint64_t)(strlen(textfile.name)-3)); fclose(f); _findclose(hFile); delete pNewTxtFile; return; } memcpy(pNewTxtFile->sCommand, textfile.name, strlen(textfile.name)-4); pNewTxtFile->sCommand[strlen(textfile.name)-4] = '\0'; pNewTxtFile->pPrev = NULL; if(pTextFiles == NULL) { pNewTxtFile->pNext = NULL; } else { pTextFiles->pPrev = pNewTxtFile; pNewTxtFile->pNext = pTextFiles; } pTextFiles = pNewTxtFile; } fclose(f); } } while(_findnext(hFile, &textfile) == 0); _findclose(hFile); } #else string txtdir = clsServerManager::sPath + "/texts/"; DIR * p_txtdir = opendir(txtdir.c_str()); if(p_txtdir == NULL) { return; } struct dirent * p_dirent; struct stat s_buf; while((p_dirent = readdir(p_txtdir)) != NULL) { string txtfile = txtdir + p_dirent->d_name; if(stat(txtfile.c_str(), &s_buf) != 0 || (s_buf.st_mode & S_IFDIR) != 0 || strcasecmp(p_dirent->d_name + (strlen(p_dirent->d_name)-4), ".txt") != 0) { continue; } FILE *f = fopen(txtfile.c_str(), "rb"); if(f != NULL) { if(s_buf.st_size != 0) { TextFile * pNewTxtFile = new (std::nothrow) TextFile(); if(pNewTxtFile == NULL) { AppendDebugLog("%s - [MEM] Cannot allocate pNewTxtFile in clsTextFilesManager::RefreshTextFiles1\n"); fclose(f); closedir(p_txtdir); return; } pNewTxtFile->sText = (char *)malloc(s_buf.st_size+2); if(pNewTxtFile->sText == NULL) { AppendDebugLogFormat("[MEM] Cannot allocate %" PRIu64 " bytes for sText in clsTextFilesManager::RefreshTextFiles\n", (uint64_t)(s_buf.st_size+2)); fclose(f); closedir(p_txtdir); delete pNewTxtFile; return; } size_t size = fread(pNewTxtFile->sText, 1, s_buf.st_size, f); pNewTxtFile->sText[size] = '|'; pNewTxtFile->sText[size+1] = '\0'; pNewTxtFile->sCommand = (char *)malloc(strlen(p_dirent->d_name)-3); if(pNewTxtFile->sCommand == NULL) { AppendDebugLogFormat("[MEM] Cannot allocate %" PRIu64 " bytes for sCommand in clsTextFilesManager::RefreshTextFiles\n", (uint64_t)(strlen(p_dirent->d_name)-3)); fclose(f); closedir(p_txtdir); delete pNewTxtFile; return; } memcpy(pNewTxtFile->sCommand, p_dirent->d_name, strlen(p_dirent->d_name)-4); pNewTxtFile->sCommand[strlen(p_dirent->d_name)-4] = '\0'; pNewTxtFile->pPrev = NULL; if(pTextFiles == NULL) { pNewTxtFile->pNext = NULL; } else { pTextFiles->pPrev = pNewTxtFile; pNewTxtFile->pNext = pTextFiles; } pTextFiles = pNewTxtFile; } fclose(f); } } closedir(p_txtdir); #endif }