📄 otherfunctions.cpp
字号:
//this file is part of eMule
//Copyright (C)2002 Merkur ( merkur-@users.sourceforge.net / http://www.emule-project.net )
//
//This program is free software; you can redistribute it and/or
//modify it under the terms of the GNU General Public License
//as published by the Free Software Foundation; either
//version 2 of the License, or (at your option) any later version.
//
//This program is distributed in the hope that it will be useful,
//but WITHOUT ANY WARRANTY; without even the implied warranty of
//MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
//GNU General Public License for more details.
//
//You should have received a copy of the GNU General Public License
//along with this program; if not, write to the Free Software
//Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#include "stdafx.h"
#include "otherfunctions.h"
bool IsGoodIP(uint32 nIP)
{
// always filter following IP's
// -------------------------------------------
// 0.0.0.0
// 127.*.*.* localhost
if (nIP==0 || (uint8)nIP==127)
return false;
// if (!theApp.glob_prefs->FilterBadIPs())
// return true;
// filter LAN IP's
// -------------------------------------------
// 0.*
// 10.0.0.0 - 10.255.255.255 class A
// 172.16.0.0 - 172.31.255.255 class B
// 192.168.0.0 - 192.168.255.255 class C
uint8 nFirst = (uint8)nIP;
uint8 nSecond = (uint8)(nIP >> 8);
#ifndef DEBUG
if (nFirst==192 && nSecond==168) // check this 1st, because those LANs IPs are mostly spreaded
return false;
#endif
if (nFirst==172 && nSecond>=16 && nSecond<=31)
return false;
if (nFirst==0 || nFirst==10)
return false;
return true;
}
bool IsGoodIPPort(uint32 nIP, uint16 nPort)
{
return IsGoodIP(nIP) && nPort!=0;
}
int GetSystemErrorString(DWORD dwError, CString &rstrError)
{
// FormatMessage language flags:
//
// - MFC uses: MAKELANGID(LANG_NEUTRAL, SUBLANG_SYS_DEFAULT)
// SUBLANG_SYS_DEFAULT = 0x02 (system default)
//
// - SDK uses: MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT)
// SUBLANG_DEFAULT = 0x01 (user default)
//
//
// Found in "winnt.h"
// ------------------
// Language IDs.
//
// The following two combinations of primary language ID and
// sublanguage ID have special semantics:
//
// Primary Language ID Sublanguage ID Result
// ------------------- --------------- ------------------------
// LANG_NEUTRAL SUBLANG_NEUTRAL Language neutral
// LANG_NEUTRAL SUBLANG_DEFAULT User default language
// LANG_NEUTRAL SUBLANG_SYS_DEFAULT System default language
//
// *** SDK notes also:
// If you pass in zero, 'FormatMessage' looks for a message for LANGIDs in
// the following order:
//
// 1) Language neutral
// 2) Thread LANGID, based on the thread's locale value
// 3) User default LANGID, based on the user's default locale value
// 4) System default LANGID, based on the system default locale value
// 5) US English
LPTSTR pszSysMsg = NULL;
DWORD dwLength = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_IGNORE_INSERTS,
NULL, dwError, MAKELANGID(LANG_NEUTRAL, SUBLANG_SYS_DEFAULT),
(LPTSTR)&pszSysMsg, 0, NULL);
if (pszSysMsg != NULL && dwLength != 0)
{
if (dwLength >= 2 && pszSysMsg[dwLength - 2] == _T('\r'))
pszSysMsg[dwLength - 2] = _T('\0');
rstrError = pszSysMsg;
rstrError.Replace(_T("\r\n"), _T(" ")); // some messages contain CRLF within the message!?
}
else {
rstrError.Empty();
}
if (pszSysMsg)
LocalFree(pszSysMsg);
return rstrError.GetLength();
}
int GetModuleErrorString(DWORD dwError, CString &rstrError, LPCTSTR pszModule)
{
LPTSTR pszSysMsg = NULL;
DWORD dwLength = FormatMessage(FORMAT_MESSAGE_FROM_HMODULE | FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_IGNORE_INSERTS,
GetModuleHandle(pszModule), dwError, MAKELANGID(LANG_NEUTRAL, SUBLANG_SYS_DEFAULT),
(LPTSTR)&pszSysMsg, 0, NULL);
if (pszSysMsg != NULL && dwLength != 0)
{
if (dwLength >= 2 && pszSysMsg[dwLength - 2] == _T('\r'))
pszSysMsg[dwLength - 2] = _T('\0');
rstrError = pszSysMsg;
rstrError.Replace(_T("\r\n"), _T(" ")); // some messages contain CRLF within the message!?
}
else {
rstrError.Empty();
}
if (pszSysMsg)
LocalFree(pszSysMsg);
return rstrError.GetLength();
}
int GetErrorMessage(DWORD dwError, CString &rstrErrorMsg, DWORD dwFlags)
{
int iMsgLen = GetSystemErrorString(dwError, rstrErrorMsg);
if (iMsgLen == 0)
{
if ((long)dwError >= 0)
rstrErrorMsg.Format(_T("Error %u"), dwError);
else
rstrErrorMsg.Format(_T("Error 0x%08x"), dwError);
}
else if (dwFlags & 1)
{
CString strFullErrorMsg;
if ((long)dwError >= 0)
strFullErrorMsg.Format(_T("Error %u: %s"), dwError, rstrErrorMsg);
else
strFullErrorMsg.Format(_T("Error 0x%08x: %s"), dwError, rstrErrorMsg);
rstrErrorMsg = strFullErrorMsg;
}
return rstrErrorMsg.GetLength();
}
CString GetErrorMessage(DWORD dwError, DWORD dwFlags)
{
CString strError;
GetErrorMessage(dwError, strError, dwFlags);
return strError;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -