📄 ipfilterdlg.cpp
字号:
m_ulFilteredIPs += pFilter->end - pFilter->start + 1;
}
SortIPFilterItems();
m_ipfilter.SetItemCount(m_uIPFilterItems);
SetDlgItemText(IDC_TOTAL_IPFILTER, GetFormatedUInt(m_uIPFilterItems));
SetDlgItemText(IDC_TOTAL_IPS, GetFormatedUInt(m_ulFilteredIPs));
}
void CIPFilterDlg::OnLvnGetdispinfoIpfilter(NMHDR *pNMHDR, LRESULT *pResult)
{
NMLVDISPINFO* pDispInfo = reinterpret_cast<NMLVDISPINFO*>(pNMHDR);
if (pDispInfo->item.mask & LVIF_TEXT) // *have* to check that flag!!
{
switch (pDispInfo->item.iSubItem)
{
case IPFILTER_COL_START:
if (pDispInfo->item.cchTextMax > 0){
_tcsncpy(pDispInfo->item.pszText, ipstr(htonl(m_ppIPFilterItems[pDispInfo->item.iItem]->start)), pDispInfo->item.cchTextMax);
pDispInfo->item.pszText[pDispInfo->item.cchTextMax - 1] = _T('\0');
}
break;
case IPFILTER_COL_END:
if (pDispInfo->item.cchTextMax > 0){
_tcsncpy(pDispInfo->item.pszText, ipstr(htonl(m_ppIPFilterItems[pDispInfo->item.iItem]->end)), pDispInfo->item.cchTextMax);
pDispInfo->item.pszText[pDispInfo->item.cchTextMax - 1] = _T('\0');
}
break;
case IPFILTER_COL_LEVEL:
if (pDispInfo->item.cchTextMax > 0){
_tcsncpy(pDispInfo->item.pszText, _itot(m_ppIPFilterItems[pDispInfo->item.iItem]->level, pDispInfo->item.pszText, 10), pDispInfo->item.cchTextMax);
pDispInfo->item.pszText[pDispInfo->item.cchTextMax - 1] = _T('\0');
}
break;
case IPFILTER_COL_HITS:
if (pDispInfo->item.cchTextMax > 0){
_tcsncpy(pDispInfo->item.pszText, _itot(m_ppIPFilterItems[pDispInfo->item.iItem]->hits, pDispInfo->item.pszText, 10), pDispInfo->item.cchTextMax);
pDispInfo->item.pszText[pDispInfo->item.cchTextMax - 1] = _T('\0');
}
break;
case IPFILTER_COL_DESC:
if (pDispInfo->item.cchTextMax > 0){
_tcsncpy(pDispInfo->item.pszText, m_ppIPFilterItems[pDispInfo->item.iItem]->desc, pDispInfo->item.cchTextMax);
pDispInfo->item.pszText[pDispInfo->item.cchTextMax - 1] = _T('\0');
}
break;
}
}
*pResult = 0;
}
void CIPFilterDlg::OnBnClickedCopy()
{
CWaitCursor curWait;
int iSelected = 0;
CString strData;
POSITION pos = m_ipfilter.GetFirstSelectedItemPosition();
while (pos)
{
int iItem = m_ipfilter.GetNextSelectedItem(pos);
if (!strData.IsEmpty())
strData += _T("\r\n");
strData.AppendFormat(_T("%-15s - %-15s Hits=%-5s %s"),
m_ipfilter.GetItemText(iItem, IPFILTER_COL_START),
m_ipfilter.GetItemText(iItem, IPFILTER_COL_END),
m_ipfilter.GetItemText(iItem, IPFILTER_COL_HITS),
m_ipfilter.GetItemText(iItem, IPFILTER_COL_DESC));
iSelected++;
}
if (!strData.IsEmpty())
{
if (iSelected > 1)
strData += _T("\r\n");
theApp.CopyTextToClipboard(strData);
}
}
void CIPFilterDlg::OnCopyIPFilter()
{
OnBnClickedCopy();
}
void CIPFilterDlg::OnSelectAllIPFilter()
{
m_ipfilter.SelectAllItems();
}
void CIPFilterDlg::OnBnClickedAppend()
{
CString strFilePath;
if (DialogBrowseFile(strFilePath, GetResString(IDS_IPFILTERFILES)))
{
CWaitCursor curWait;
CString strTempUnzipFilePath;
CZIPFile zip;
if (zip.Open(strFilePath))
{
CZIPFile::File* zfile = zip.GetFile(_T("guarding.p2p"));
if (zfile)
{
_tmakepath(strTempUnzipFilePath.GetBuffer(MAX_PATH), NULL, thePrefs.GetConfigDir(), DFLT_IPFILTER_FILENAME, _T(".unzip.tmp"));
strTempUnzipFilePath.ReleaseBuffer();
if (zfile->Extract(strTempUnzipFilePath))
strFilePath = strTempUnzipFilePath;
else
{
CString strError;
strError.Format(_T("Failed to extract IP filter file \"guarding.p2p\" from ZIP file \"%s\"."), strFilePath);
AfxMessageBox(strError);
}
}
else
{
CString strError;
strError.Format(_T("Failed to find IP filter file \"guarding.p2p\" in ZIP file \"%s\"."), strFilePath);
AfxMessageBox(strError);
}
zip.Close();
}
if (theApp.ipfilter->AddFromFile(strFilePath, true))
{
InitIPFilters();
m_ipfilter.Update(-1);
}
if (!strTempUnzipFilePath.IsEmpty())
_tremove(strTempUnzipFilePath);
}
}
void CIPFilterDlg::OnLvnDeleteitemIpfilter(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
ASSERT( m_uIPFilterItems > 0 );
if (m_uIPFilterItems > 0)
{
ASSERT( (UINT)pNMLV->iItem < m_uIPFilterItems );
if ((UINT)pNMLV->iItem < m_uIPFilterItems-1)
{
memmove(m_ppIPFilterItems + pNMLV->iItem, m_ppIPFilterItems + pNMLV->iItem + 1, (m_uIPFilterItems - (pNMLV->iItem + 1)) * sizeof(*m_ppIPFilterItems));
}
m_uIPFilterItems--;
m_ppIPFilterItems = (const SIPFilter**)realloc(m_ppIPFilterItems, sizeof(*m_ppIPFilterItems) * m_uIPFilterItems);
}
*pResult = 0;
}
void CIPFilterDlg::OnBnClickedDelete()
{
if (m_ipfilter.GetSelectedCount() == 0)
return;
if (AfxMessageBox(GetResString(IDS_DELETEIPFILTERS), MB_YESNOCANCEL) != IDYES)
return;
CWaitCursor curWait;
if (m_ipfilter.GetSelectedCount() == m_uIPFilterItems)
{
theApp.ipfilter->RemoveAllIPFilters();
m_uIPFilterItems = 0;
if (m_ppIPFilterItems)
{
free(m_ppIPFilterItems);
m_ppIPFilterItems = NULL;
}
m_ipfilter.SetItemCount(m_uIPFilterItems);
m_ulFilteredIPs = 0;
}
else
{
CUIntArray aItems;
POSITION pos = m_ipfilter.GetFirstSelectedItemPosition();
while (pos)
{
int iItem = m_ipfilter.GetNextSelectedItem(pos);
const SIPFilter* pFilter = m_ppIPFilterItems[iItem];
if (pFilter)
{
ULONG ulIPRange = pFilter->end - pFilter->start + 1;
if (theApp.ipfilter->RemoveIPFilter(pFilter))
{
aItems.Add(iItem);
m_ulFilteredIPs -= ulIPRange;
}
}
}
m_ipfilter.SetRedraw(FALSE);
for (int i = aItems.GetCount() - 1; i >= 0; i--)
m_ipfilter.DeleteItem(aItems[i]);
if (aItems.GetCount() > 0)
{
int iNextSelItem = aItems[0];
if (iNextSelItem >= m_ipfilter.GetItemCount())
iNextSelItem--;
if (iNextSelItem >= 0)
{
m_ipfilter.SetItemState(iNextSelItem, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED);
m_ipfilter.SetSelectionMark(iNextSelItem);
}
}
m_ipfilter.SetRedraw();
}
ASSERT( m_uIPFilterItems == m_ipfilter.GetItemCount() );
SetDlgItemText(IDC_TOTAL_IPFILTER, GetFormatedUInt(m_ipfilter.GetItemCount()));
SetDlgItemText(IDC_TOTAL_IPS, GetFormatedUInt(m_ulFilteredIPs));
}
void CIPFilterDlg::OnDeleteIPFilter()
{
OnBnClickedDelete();
}
void CIPFilterDlg::OnLvnKeyDownIPFilter(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMLVKEYDOWN pLVKeyDow = reinterpret_cast<LPNMLVKEYDOWN>(pNMHDR);
if (pLVKeyDow->wVKey == VK_DELETE)
OnDeleteIPFilter();
else if (pLVKeyDow->wVKey == 'C' && (GetKeyState(VK_CONTROL) & 0x8000))
OnCopyIPFilter();
*pResult = 0;
}
void CIPFilterDlg::OnDestroy()
{
m_ipfilter.WriteColumnStats(ARRSIZE(_aColumns), _aColumns);
CResizableDialog::OnDestroy();
}
void CIPFilterDlg::OnBnClickedSave()
{
CWaitCursor curWait;
try
{
theApp.ipfilter->SaveToDefaultFile();
}
catch(CString err)
{
AfxMessageBox(err);
}
}
void CIPFilterDlg::OnFind()
{
m_ipfilter.OnFindStart();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -