31
33
#include <KFileDialog>
34
/*#include <ksocketaddress.h>
35
#include <kfiledialog.h>
37
#include <kmessagebox.h>*/
36
#include "ipfilterlist.h"
39
38
#define MAX_RANGES 500
41
40
using namespace bt;
43
IPFilterWidget::IPFilterWidget ( QWidget* parent, Qt::WFlags fl )
44
:QDialog ( parent, fl )
47
btnAdd->setGuiItem(KStandardGuiItem::add());
48
btnOk->setGuiItem(KStandardGuiItem::ok());
49
btnApply->setGuiItem(KStandardGuiItem::apply());
50
btnClear->setGuiItem(KStandardGuiItem::clear());
51
btnSave->setGuiItem(KStandardGuiItem::saveAs());
52
btnOpen->setGuiItem(KStandardGuiItem::open());
53
btnRemove->setGuiItem(KStandardGuiItem::remove());
54
btnCancel->setGuiItem(KStandardGuiItem::close());
56
IPBlocklist& ipfilter = IPBlocklist::instance();
57
QStringList* blocklist = ipfilter.getBlocklist();
59
for ( QStringList::Iterator it = blocklist->begin(); it != blocklist->end(); ++it )
61
( new QListWidgetItem ( lstPeers ) )->setText ( *it );
69
void IPFilterWidget::setupConnections()
71
connect(btnAdd, SIGNAL(clicked()), this, SLOT(btnAdd_clicked()));
72
connect(btnClear, SIGNAL(clicked()), this, SLOT(btnClear_clicked()));
73
connect(btnApply, SIGNAL(clicked()), this, SLOT(btnApply_clicked()));
74
connect(btnOk, SIGNAL(clicked()), this, SLOT(btnOk_clicked()));
75
connect(btnSave, SIGNAL(clicked()), this, SLOT(btnSave_clicked()));
76
connect(btnOpen, SIGNAL(clicked()), this, SLOT(btnOpen_clicked()));
77
connect(btnRemove, SIGNAL(clicked()), this, SLOT(btnRemove_clicked()));
78
connect(btnCancel, SIGNAL(clicked()), this, SLOT(reject()));
81
void IPFilterWidget::btnAdd_clicked()
85
QRegExp rx ( "([*]|[0-9]{1,3}).([*]|[0-9]{1,3}).([*]|[0-9]{1,3}).([*]|[0-9]{1,3})" );
86
QRegExpValidator v ( rx,0 );
88
QString ip = peerIP->text();
90
if ( v.validate ( ip, var ) == QValidator::Acceptable )
92
if ( lstPeers->findItems ( ip, 0 ).empty() )
93
( new QListWidgetItem ( lstPeers ) )->setText ( ip );
96
KMessageBox::sorry ( 0, i18n ( "You must enter IP in format 'XXX.XXX.XXX.XXX'. You can also use wildcards for ranges like '127.0.0.*'." ) );
99
void IPFilterWidget::btnRemove_clicked()
101
if ( lstPeers->currentItem() )
102
delete lstPeers->currentItem();
105
void IPFilterWidget::btnClear_clicked()
110
void IPFilterWidget::btnOpen_clicked()
112
QString lf = KFileDialog::getOpenFileName ( KUrl("kfiledialog:///openTorrent"), "*.txt|",this,i18n ( "Choose a file" ) );
122
void IPFilterWidget::btnSave_clicked()
124
QString sf = KFileDialog::getSaveFileName ( KUrl("kfiledialog:///openTorrent"),"*.txt|",this,i18n ( "Choose a filename to save under" ) );
132
void IPFilterWidget::btnOk_clicked()
138
void IPFilterWidget::btnApply_clicked()
140
IPBlocklist& ipfilter = IPBlocklist::instance();
142
QStringList* peers = new QStringList();
144
for ( int i=0; i<lstPeers->count(); ++i )
146
*peers << lstPeers->item ( i )->text();
149
ipfilter.setBlocklist ( peers );
153
Out ( SYS_IPF|LOG_NOTICE ) << "Loaded " << lstPeers->count() << " blocked IP ranges." << endl;
156
void IPFilterWidget::saveFilter ( QString& fn )
160
if ( !fptr.open ( QIODevice::WriteOnly ) )
162
Out ( SYS_GEN|LOG_NOTICE ) << QString ( "Could not open file %1 for writing." ).arg ( fn ) << endl;
166
QTextStream out ( &fptr );
168
for ( int i=0; i<lstPeers->count(); ++i )
170
out << lstPeers->item ( i )->text() << ::endl;
176
void IPFilterWidget::loadFilter ( QString& fn )
179
dat.open ( QIODevice::ReadOnly );
181
QTextStream stream ( &dat );
184
QRegExp rx ( "([*]|[0-9]{1,3}).([*]|[0-9]{1,3}).([*]|[0-9]{1,3}).([*]|[0-9]{1,3})" );
185
QRegExpValidator v ( rx,0 );
192
while ( !stream.atEnd() && i < MAX_RANGES )
194
line = stream.readLine();
195
if ( v.validate ( line, var ) != QValidator::Acceptable )
201
( new QListWidgetItem ( lstPeers ) )->setText ( line );
206
Out ( SYS_IPF|LOG_NOTICE ) << "Some lines could not be loaded. Check your filter file..." << endl;
45
IPFilterList* IPFilterWidget::filter_list = 0;
48
IPFilterWidget::IPFilterWidget(QWidget* parent)
51
setupUi(mainWidget());
52
setButtons(KDialog::None);
53
setCaption(i18n("IP Filter List"));
55
m_add->setGuiItem(KStandardGuiItem::add());
56
m_clear->setGuiItem(KStandardGuiItem::clear());
57
m_save_as->setGuiItem(KStandardGuiItem::saveAs());
58
m_open->setGuiItem(KStandardGuiItem::open());
59
m_remove->setGuiItem(KStandardGuiItem::remove());
60
m_close->setGuiItem(KStandardGuiItem::close());
64
filter_list = new IPFilterList();
65
AccessManager::instance().addBlockList(filter_list);
66
loadFilter(kt::DataDir() + "ip_filter");
69
m_ip_list->setModel(filter_list);
70
m_ip_list->setSelectionMode(QAbstractItemView::ContiguousSelection);
75
IPFilterWidget::~IPFilterWidget()
79
void IPFilterWidget::setupConnections()
81
connect(m_add, SIGNAL(clicked()), this, SLOT(add()));
82
connect(m_close, SIGNAL(clicked()), this, SLOT(accept()));
83
connect(m_clear, SIGNAL(clicked()), this, SLOT(clear()));
84
connect(m_save_as, SIGNAL(clicked()), this, SLOT(save()));
85
connect(m_open, SIGNAL(clicked()), this, SLOT(open()));
86
connect(m_remove, SIGNAL(clicked()), this, SLOT(remove()));
87
connect(this, SIGNAL(closeClicked()), this, SLOT(reject()));
90
void IPFilterWidget::add()
94
QRegExp rx ( "([*]|[0-9]{1,3}).([*]|[0-9]{1,3}).([*]|[0-9]{1,3}).([*]|[0-9]{1,3})" );
95
QRegExpValidator v ( rx,0 );
97
QString ip = m_ip_to_add->text();
99
if (v.validate(ip, var) != QValidator::Acceptable)
101
KMessageBox::sorry(this, i18n ("Invalid IP address %1. You must enter an IP address in the format 'XXX.XXX.XXX.XXX'."
102
" You can also use wildcards for ranges like '127.0.0.*'.",ip ) );
108
filter_list->add(ip);
110
catch (bt::Error & err)
112
KMessageBox::sorry(this,err.toString());
116
void IPFilterWidget::remove()
118
QModelIndexList idx = m_ip_list->selectionModel()->selectedRows();
119
if (idx.count() == 0)
122
filter_list->remove(idx.at(0).row(),idx.count());
125
void IPFilterWidget::clear()
127
filter_list->clear();
130
void IPFilterWidget::open()
132
QString lf = KFileDialog::getOpenFileName ( KUrl("kfiledialog:///openTorrent"), "*.txt|",this,i18n ( "Choose a file" ) );
142
void IPFilterWidget::save()
144
QString sf = KFileDialog::getSaveFileName ( KUrl("kfiledialog:///openTorrent"),"*.txt|",this,i18n ( "Choose a filename to save under" ) );
152
void IPFilterWidget::accept()
154
saveFilter(kt::DataDir() + "ip_filter");
158
void IPFilterWidget::saveFilter(const QString & fn)
162
if ( !fptr.open ( QIODevice::WriteOnly ) )
164
Out ( SYS_GEN|LOG_NOTICE ) << QString ( "Could not open file %1 for writing." ).arg ( fn ) << endl;
168
QTextStream out(&fptr);
170
for (int i = 0; i < filter_list->rowCount(); ++i)
172
out << filter_list->data(filter_list->index(i,0),Qt::DisplayRole).toString() << ::endl;
178
void IPFilterWidget::loadFilter(const QString & fn)
181
dat.open(QIODevice::ReadOnly);
183
QTextStream stream(&dat);
186
QRegExp rx("([*]|[0-9]{1,3}).([*]|[0-9]{1,3}).([*]|[0-9]{1,3}).([*]|[0-9]{1,3})");
187
QRegExpValidator v(rx,0);
192
while (!stream.atEnd())
194
line = stream.readLine();
195
if (v.validate(line,pos) != QValidator::Acceptable)
203
filter_list->add(line);
213
Out(SYS_IPF|LOG_NOTICE) << "Some lines could not be loaded. Check your filter file..." << endl;
211
218
#include "ipfilterwidget.moc"