source: src-qt4/pc-pfmanager/pfmanagerdlg.cpp @ 0cfe72f

9.1-release9.2-releasereleng/10.0releng/10.0.1releng/10.0.2releng/10.0.3
Last change on this file since 0cfe72f was 0cfe72f, checked in by Kris Moore <kris@…>, 17 months ago

Add all the changes for related using of split pcbsd-utils libs

  • Property mode set to 100644
File size: 4.5 KB
Line 
1
2#include "pfmanagerdlg.hpp"
3#include "rule.hpp"
4#include "packetfilter.hpp"
5#include "interfaces.hpp"
6#include "pfaddlg.hpp"
7#include "taggedlistviewitem.hpp"
8#include <qcheckbox.h>
9#include <qmessagebox.h>
10#include <qpushbutton.h>
11#include <QTreeWidgetItem>
12#include <pcbsd-utils.h>
13
14PFManagerDlg::~PFManagerDlg(void)
15{
16
17}
18
19void PFManagerDlg::enableClicked ( void )
20{
21    bool checked = cbEnable->isChecked();
22
23    if (checked != _firewall.isEnabled())
24    {
25        // Just modify something, if our state has changed
26        if ( checked )
27        {
28            _firewall.enable();
29            pcbsd::Utils::setConfFileValue( "/etc/rc.conf", "pf_enable", "pf_enable=\"YES\"", -1);
30            system("/etc/rc.d/pf start");
31        }
32        else
33        { // disable firewall
34            // Ask again if he's really sure...
35            QString question = tr("This will turn off the firewall completely.\n" \
36                                  "Are you sure?");
37
38            if ( QMessageBox::question(this, tr("Question"), question,
39                                       QMessageBox::Yes, QMessageBox::No ) == QMessageBox::Yes )
40            {
41                system("/etc/rc.d/pf stop");
42                pcbsd::Utils::setConfFileValue( "/etc/rc.conf", "pf_enable", "pf_enable=\"NO\"", -1);
43            } else {
44                cbEnable->setChecked(true);
45            }
46        }
47    }
48}
49
50void PFManagerDlg::startClicked ( void )
51{
52    _firewall.start();
53    refreshStatus();
54}
55
56void PFManagerDlg::stopClicked ( void )
57{
58    _firewall.stop();
59    refreshStatus();
60}
61
62void PFManagerDlg::restartClicked ( void )
63{
64    _firewall.restart();
65    refreshStatus();
66    if (_firewall.isRunning())
67      QMessageBox::information(this, tr("Success"), tr("Restarted successfuly!"));
68    else
69      QMessageBox::warning(this, tr("Failure"), tr("Failed to restart!"));
70}
71
72// WARNING: Make sure you only store TaggedListViewItem
73//
74void PFManagerDlg::refreshList ( void )
75{
76    lvExceptions->clear();
77       
78    for ( size_t i = 0; i < _firewall.rules().size(); i++ )
79    {
80        TaggedListViewItem *item = 0;
81        const rule& srv = _firewall.rules()[i];
82       
83        item = new TaggedListViewItem(lvExceptions);
84       
85        item->setText(0, srv.name());
86        item->setText(1, srv.port());
87        item->setText(2, srv.policy());
88        item->setText(3, srv.device());
89        // Save the item we had, so we can savely
90        // return it later
91        item->tag(i);
92    }
93}
94
95void PFManagerDlg::addClicked ( void )
96{
97    PFAddDlg *dlg = new PFAddDlg();
98    dlg->init();
99   
100    if ( dlg->exec() == QDialog::Accepted )
101    {
102        _firewall.add_rule(* dlg->rules());
103        // Save content
104        _firewall.save();
105        // Refresh the list
106        refreshList();
107    }
108}
109
110void PFManagerDlg::editClicked ( void )
111{
112    QTreeWidgetItem *cur = 0;
113   
114    cur = lvExceptions->currentItem();
115    if (cur != 0)
116    {
117        PFAddDlg *dlg = new PFAddDlg();
118        dlg->init();
119        size_t tag = 0;
120        rule *rule = 0;
121       
122        // A little bit hackerish though
123        // But way more efficient than searching the list of the proper
124        // item.
125        tag = reinterpret_cast<TaggedListViewItem*>(cur)->tag();
126        rule = &_firewall.rules()[tag];
127        // Show
128        dlg->rules(rule);
129        if ( dlg->exec() == QDialog::Accepted )
130        { // Refresh the list
131            _firewall.save();
132            refreshList();
133        }
134    }
135}
136
137void PFManagerDlg::deleteClicked ( void )
138{
139    QTreeWidgetItem *cur = 0;
140   
141    cur = lvExceptions->currentItem();
142    if (cur != 0)
143    {
144        size_t tag = 0;
145       
146        tag = reinterpret_cast<TaggedListViewItem*>(cur)->tag();
147        // Delete this item
148        _firewall.rules().erase(_firewall.rules().begin()+tag);   
149        // And repaint the list
150        refreshList();
151        // Save the file
152        _firewall.save();
153    }
154}
155
156void PFManagerDlg::restoreClicked ( void )
157{
158    _firewall.restore();
159    QMessageBox::information(this, tr("Restored."), tr("Config file successfuly restored."));
160}
161
162void PFManagerDlg::save ( void )
163{
164}
165
166void PFManagerDlg::load ( void )
167{
168    // Make a backup
169    _firewall.backup();
170    (void)interfaces::getInstance();
171    // load config file
172    _firewall.init();
173    // Check if it is enabled
174    cbEnable->setChecked(_firewall.isEnabled());
175    // Fill list with services
176    refreshList();
177}           
178
179void PFManagerDlg::refreshStatus(void)
180{
181    if (_firewall.isRunning())
182    {
183        pbStart->setEnabled(false);
184        pbStop->setEnabled(true);
185        pbRestart->setEnabled(true);
186    }
187    else
188    {
189        pbStart->setEnabled(true);
190        pbStop->setEnabled(false);
191        pbRestart->setEnabled(false);
192    }
193}
Note: See TracBrowser for help on using the repository browser.