summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/applets/zkbapplet/zkbapplet.control2
-rw-r--r--noncore/apps/confedit/opie-confeditor.control2
-rw-r--r--noncore/apps/dagger/opie-dagger.control2
-rw-r--r--noncore/apps/opie-bartender/opie-bartender.control2
-rw-r--r--noncore/apps/opie-console/opie-console-embedix.control2
-rw-r--r--noncore/apps/opie-console/opie-console.control2
-rw-r--r--noncore/apps/opie-gutenbrowser/opie-gutenbrowser.control2
-rw-r--r--noncore/games/bounce/opie-bounce.control2
-rw-r--r--noncore/games/buzzword/opie-buzzword.control2
-rw-r--r--noncore/games/kbill/opie-kbill.control2
-rw-r--r--noncore/games/kcheckers/opie-kcheckers.control2
-rw-r--r--noncore/games/kpacman/opie-kpacman.control2
-rw-r--r--noncore/games/tetrix/ohighscoredlg.cpp81
-rw-r--r--noncore/games/tetrix/ohighscoredlg.h13
-rw-r--r--noncore/games/tetrix/tetrix.pro2
-rw-r--r--noncore/multimedia/camera/opie-camera.control2
-rw-r--r--noncore/multimedia/opieplayer2/opie-mediaplayer2-codecs.control2
-rw-r--r--noncore/multimedia/opieplayer2/opie-mediaplayer2.control2
-rw-r--r--noncore/multimedia/powerchord/opie-powerchord.control2
-rw-r--r--noncore/net/mail/libetpanstuff/libetpan.control2
-rw-r--r--noncore/net/mail/libmailwrapper/libmailwrapper.control2
-rw-r--r--noncore/net/mail/opie-mail.control2
-rw-r--r--noncore/net/mail/taskbarapplet/opie-mailapplet.control2
-rw-r--r--noncore/net/opieirc/opie-irc.control2
-rw-r--r--noncore/net/opierdesktop/opie-rdesktop.control2
-rw-r--r--noncore/net/opietooth/blue-pin/main.cc1
-rw-r--r--noncore/net/opietooth/blue-pin/opie-bluepin.control2
-rw-r--r--noncore/net/opietooth/blue-pin/pindlgbase.ui32
-rw-r--r--noncore/net/opietooth/lib/libopietooth1.control2
-rw-r--r--noncore/net/opietooth/manager/opie-bluetoothmanager.control2
-rw-r--r--noncore/net/wellenreiter/opie-wellenreiter.control4
-rw-r--r--noncore/securityplugins/blueping/bluepingplugin.control2
-rw-r--r--noncore/securityplugins/dummy/dummyplugin.control2
-rw-r--r--noncore/securityplugins/notice/notice.control2
-rw-r--r--noncore/securityplugins/pin/pin.control2
-rw-r--r--noncore/settings/networksettings2/activatevpn.cpp6
-rw-r--r--noncore/settings/networksettings2/bluetooth/bluetooth.pro14
-rw-r--r--noncore/settings/networksettings2/bluetooth/bluetoothBNEP_NNI.cpp2
-rw-r--r--noncore/settings/networksettings2/bluetooth/bluetoothBNEPdata.h7
-rw-r--r--noncore/settings/networksettings2/bluetooth/bluetoothBNEPrun.cpp354
-rw-r--r--noncore/settings/networksettings2/bluetooth/bluetoothBNEPrun.h35
-rw-r--r--noncore/settings/networksettings2/bluetooth/bluetoothRFCOMMGUI.ui256
-rw-r--r--noncore/settings/networksettings2/bluetooth/bluetoothRFCOMM_NNI.cpp31
-rw-r--r--noncore/settings/networksettings2/bluetooth/bluetoothRFCOMMdata.h24
-rw-r--r--noncore/settings/networksettings2/bluetooth/bluetoothRFCOMMedit.cpp144
-rw-r--r--noncore/settings/networksettings2/bluetooth/bluetoothRFCOMMedit.h14
-rw-r--r--noncore/settings/networksettings2/bluetooth/bluetoothRFCOMMrun.h33
-rw-r--r--noncore/settings/networksettings2/bluetooth/bluetooth_NN.cpp9
-rw-r--r--noncore/settings/networksettings2/bluetooth/bluetooth_NN.h2
-rw-r--r--noncore/settings/networksettings2/bluetooth/config.in2
-rw-r--r--noncore/settings/networksettings2/bluetooth/opie-networksettings2plugin-bluetooth.control4
-rw-r--r--noncore/settings/networksettings2/cable/cable_NN.cpp9
-rw-r--r--noncore/settings/networksettings2/cable/cable_NN.h2
-rw-r--r--noncore/settings/networksettings2/cable/cable_NNI.cpp14
-rw-r--r--noncore/settings/networksettings2/cable/cable_NNI.h6
-rw-r--r--noncore/settings/networksettings2/cable/cabledata.h7
-rw-r--r--noncore/settings/networksettings2/cable/cableedit.cpp4
-rw-r--r--noncore/settings/networksettings2/cable/cableedit.h4
-rw-r--r--noncore/settings/networksettings2/cable/cablerun.cpp18
-rw-r--r--noncore/settings/networksettings2/cable/cablerun.h18
-rw-r--r--noncore/settings/networksettings2/cable/opie-networksettings2plugin-cable.control2
-rw-r--r--noncore/settings/networksettings2/config.in5
-rw-r--r--noncore/settings/networksettings2/editconnection.cpp188
-rw-r--r--noncore/settings/networksettings2/irda/irda_NN.cpp9
-rw-r--r--noncore/settings/networksettings2/irda/irda_NN.h2
-rw-r--r--noncore/settings/networksettings2/irda/irdadata.h5
-rw-r--r--noncore/settings/networksettings2/irda/irdarun.h23
-rw-r--r--noncore/settings/networksettings2/irda/opie-networksettings2plugin-irda.control2
-rw-r--r--noncore/settings/networksettings2/lancard/lancard_NN.cpp12
-rw-r--r--noncore/settings/networksettings2/lancard/lancard_NN.h2
-rw-r--r--noncore/settings/networksettings2/lancard/lancarddata.h5
-rw-r--r--noncore/settings/networksettings2/lancard/lancardrun.cpp110
-rw-r--r--noncore/settings/networksettings2/lancard/lancardrun.h28
-rw-r--r--noncore/settings/networksettings2/lancard/opie-networksettings2plugin-lancard.control2
-rw-r--r--noncore/settings/networksettings2/main.cpp46
-rw-r--r--noncore/settings/networksettings2/modem/modem_NN.cpp11
-rw-r--r--noncore/settings/networksettings2/modem/modem_NN.h2
-rw-r--r--noncore/settings/networksettings2/modem/modemdata.h5
-rw-r--r--noncore/settings/networksettings2/modem/modemedit.cpp4
-rw-r--r--noncore/settings/networksettings2/modem/modemedit.h4
-rw-r--r--noncore/settings/networksettings2/modem/modemrun.h23
-rw-r--r--noncore/settings/networksettings2/modem/opie-networksettings2plugin-modem.control2
-rw-r--r--noncore/settings/networksettings2/network/network_NN.cpp40
-rw-r--r--noncore/settings/networksettings2/network/network_NN.h8
-rw-r--r--noncore/settings/networksettings2/network/network_NNI.cpp50
-rw-r--r--noncore/settings/networksettings2/network/network_NNI.h10
-rw-r--r--noncore/settings/networksettings2/network/networkdata.h5
-rw-r--r--noncore/settings/networksettings2/network/networkedit.cpp4
-rw-r--r--noncore/settings/networksettings2/network/networkedit.h4
-rw-r--r--noncore/settings/networksettings2/network/networkrun.cpp91
-rw-r--r--noncore/settings/networksettings2/network/networkrun.h19
-rw-r--r--noncore/settings/networksettings2/network/opie-networksettings2plugin-network.control2
-rw-r--r--noncore/settings/networksettings2/networksettings.cpp277
-rw-r--r--noncore/settings/networksettings2/networksettings.h26
-rw-r--r--noncore/settings/networksettings2/networksettings.pro6
-rw-r--r--noncore/settings/networksettings2/networksettings2/GUIUtils.h9
-rw-r--r--noncore/settings/networksettings2/networksettings2/Utils.h2
-rw-r--r--noncore/settings/networksettings2/networksettings2/netnode.cpp224
-rw-r--r--noncore/settings/networksettings2/networksettings2/netnode.h266
-rw-r--r--noncore/settings/networksettings2/networksettings2/networksettings2.pro6
-rw-r--r--noncore/settings/networksettings2/networksettings2/resources.cpp70
-rw-r--r--noncore/settings/networksettings2/networksettings2/resources.h6
-rw-r--r--noncore/settings/networksettings2/networksettings2/system.cpp298
-rw-r--r--noncore/settings/networksettings2/networksettings2/system.h63
-rw-r--r--noncore/settings/networksettings2/networksettings2/systemfile.cpp70
-rw-r--r--noncore/settings/networksettings2/networksettings2/systemfile.h11
-rw-r--r--noncore/settings/networksettings2/networksettingsGUI.ui118
-rw-r--r--noncore/settings/networksettings2/nsdata.cpp252
-rw-r--r--noncore/settings/networksettings2/nsdata.h13
-rw-r--r--noncore/settings/networksettings2/ppp/PPPAuthedit.cpp4
-rw-r--r--noncore/settings/networksettings2/ppp/PPPAuthedit.h4
-rw-r--r--noncore/settings/networksettings2/ppp/PPPDNSedit.cpp4
-rw-r--r--noncore/settings/networksettings2/ppp/PPPDNSedit.h4
-rw-r--r--noncore/settings/networksettings2/ppp/PPPGUI.ui20
-rw-r--r--noncore/settings/networksettings2/ppp/PPPIPGUI.ui255
-rw-r--r--noncore/settings/networksettings2/ppp/PPPIPedit.cpp37
-rw-r--r--noncore/settings/networksettings2/ppp/PPPIPedit.h4
-rw-r--r--noncore/settings/networksettings2/ppp/PPPedit.cpp11
-rw-r--r--noncore/settings/networksettings2/ppp/PPPedit.h14
-rw-r--r--noncore/settings/networksettings2/ppp/opie-networksettings2plugin-ppp.control2
-rw-r--r--noncore/settings/networksettings2/ppp/ppp.pro11
-rw-r--r--noncore/settings/networksettings2/ppp/ppp_NN.cpp36
-rw-r--r--noncore/settings/networksettings2/ppp/ppp_NN.h6
-rw-r--r--noncore/settings/networksettings2/ppp/ppp_NNI.cpp154
-rw-r--r--noncore/settings/networksettings2/ppp/ppp_NNI.h12
-rw-r--r--noncore/settings/networksettings2/ppp/pppdata.h22
-rw-r--r--noncore/settings/networksettings2/ppp/ppprun.cpp56
-rw-r--r--noncore/settings/networksettings2/ppp/ppprun.h34
-rw-r--r--noncore/settings/networksettings2/profile/opie-networksettings2plugin-bluetooth.control4
-rw-r--r--noncore/settings/networksettings2/profile/profile_NN.cpp13
-rw-r--r--noncore/settings/networksettings2/profile/profile_NN.h2
-rw-r--r--noncore/settings/networksettings2/profile/profile_NNI.cpp13
-rw-r--r--noncore/settings/networksettings2/profile/profile_NNI.h4
-rw-r--r--noncore/settings/networksettings2/profile/profiledata.h5
-rw-r--r--noncore/settings/networksettings2/profile/profileedit.cpp10
-rw-r--r--noncore/settings/networksettings2/profile/profileedit.h8
-rw-r--r--noncore/settings/networksettings2/profile/profilerun.cpp72
-rw-r--r--noncore/settings/networksettings2/profile/profilerun.h24
-rw-r--r--noncore/settings/networksettings2/usb/opie-networksettings2plugin-usb.control2
-rw-r--r--noncore/settings/networksettings2/usb/usb_NN.cpp12
-rw-r--r--noncore/settings/networksettings2/usb/usb_NN.h2
-rw-r--r--noncore/settings/networksettings2/usb/usb_NNI.cpp12
-rw-r--r--noncore/settings/networksettings2/usb/usb_NNI.h4
-rw-r--r--noncore/settings/networksettings2/usb/usbdata.h5
-rw-r--r--noncore/settings/networksettings2/usb/usbedit.cpp4
-rw-r--r--noncore/settings/networksettings2/usb/usbedit.h4
-rw-r--r--noncore/settings/networksettings2/usb/usbrun.cpp102
-rw-r--r--noncore/settings/networksettings2/usb/usbrun.h27
-rw-r--r--noncore/settings/networksettings2/vpn/opie-networksettings2plugin-vpn.control2
-rw-r--r--noncore/settings/networksettings2/vpn/vpn_NN.cpp8
-rw-r--r--noncore/settings/networksettings2/vpn/vpn_NN.h2
-rw-r--r--noncore/settings/networksettings2/vpn/vpndata.h5
-rw-r--r--noncore/settings/networksettings2/vpn/vpnedit.cpp4
-rw-r--r--noncore/settings/networksettings2/vpn/vpnedit.h4
-rw-r--r--noncore/settings/networksettings2/vpn/vpnrun.cpp5
-rw-r--r--noncore/settings/networksettings2/vpn/vpnrun.h25
-rw-r--r--noncore/settings/networksettings2/wlan/opie-networksettings2plugin-wlan.control2
-rw-r--r--noncore/settings/networksettings2/wlan/wlan_NN.cpp12
-rw-r--r--noncore/settings/networksettings2/wlan/wlan_NN.h2
-rw-r--r--noncore/settings/networksettings2/wlan/wlan_NNI.cpp22
-rw-r--r--noncore/settings/networksettings2/wlan/wlan_NNI.h4
-rw-r--r--noncore/settings/networksettings2/wlan/wlandata.h5
-rw-r--r--noncore/settings/networksettings2/wlan/wlanedit.cpp6
-rw-r--r--noncore/settings/networksettings2/wlan/wlanedit.h8
-rw-r--r--noncore/settings/networksettings2/wlan/wlanrun.cpp91
-rw-r--r--noncore/settings/networksettings2/wlan/wlanrun.h27
-rw-r--r--noncore/settings/packagemanager/oconfitem.h7
-rw-r--r--noncore/settings/packagemanager/oipkg.cpp7
-rw-r--r--noncore/settings/packagemanager/opie-packagemanager.control4
-rw-r--r--noncore/tools/opie-sh/opie-sh.control2
-rw-r--r--noncore/tools/opie-sh/scripts/opie-sh-wavelanchooser.control2
-rw-r--r--noncore/unsupported/filebrowser/opie-filebrowser.control2
-rw-r--r--noncore/unsupported/gsmtool/opie-gsmtool.control2
-rw-r--r--noncore/unsupported/oipkg/opie-oipkg.control2
-rw-r--r--noncore/unsupported/ubrowser/opie-ubrowser.control2
175 files changed, 2876 insertions, 2059 deletions
diff --git a/noncore/applets/zkbapplet/zkbapplet.control b/noncore/applets/zkbapplet/zkbapplet.control
index 4e03c26..08b540f 100644
--- a/noncore/applets/zkbapplet/zkbapplet.control
+++ b/noncore/applets/zkbapplet/zkbapplet.control
@@ -1,10 +1,10 @@
1Package: zkbapplet 1Package: zkbapplet
2Files: plugins/applets/libzkbapplet.so* pics/zkb-disabled.png share/zkb/*.xml bin/keyz-cfg apps/Settings/keyz-cfg.desktop pics/keyz-cfg.png share/zkb/zkb.xml.sample 2Files: plugins/applets/libzkbapplet.so* pics/zkb-disabled.png share/zkb/*.xml bin/keyz-cfg apps/Settings/keyz-cfg.desktop pics/keyz-cfg.png share/zkb/zkb.xml.sample
3Priority: optional 3Priority: optional
4Section: opie/applets 4Section: opie/applets
5Maintainer: Rajko Albrecht <alwin@handhelds.org> 5Maintainer: Rajko Albrecht <alwin@handhelds.org>
6Architecture: arm 6Architecture: arm
7Depends: task-opie-minimal 7Depends: task-opie-minimal
8Description: ZKB Applet and configuration program 8Description: ZKB Applet and configuration program
9Obsoletes: keyz-cfg 9Obsoletes: keyz-cfg
10Version: 0.6.0$EXTRAVERSION 10Version: $QPE_VERSION$EXTRAVERSION
diff --git a/noncore/apps/confedit/opie-confeditor.control b/noncore/apps/confedit/opie-confeditor.control
index 00a05da..b49aad3 100644
--- a/noncore/apps/confedit/opie-confeditor.control
+++ b/noncore/apps/confedit/opie-confeditor.control
@@ -1,9 +1,9 @@
1Package: opie-confeditor 1Package: opie-confeditor
2Files: bin/confedit apps/Settings/confedit.desktop pics/confedit/confedit.png plugins/application/libconfedit.so* 2Files: bin/confedit apps/Settings/confedit.desktop pics/confedit/confedit.png plugins/application/libconfedit.so*
3Priority: optional 3Priority: optional
4Section: opie/settings 4Section: opie/settings
5Maintainer: Patrick S. Vogt <tille@handhelds.org> 5Maintainer: Patrick S. Vogt <tille@handhelds.org>
6Architecture: arm 6Architecture: arm
7Version: $QPE_VERSION-$SUB_VERSION 7Version: $QPE_VERSION$EXTRAVERSION
8Depends: task-opie-minimal, libopiecore2 8Depends: task-opie-minimal, libopiecore2
9Description: An enditor for the ~/Settings/*.conf files 9Description: An enditor for the ~/Settings/*.conf files
diff --git a/noncore/apps/dagger/opie-dagger.control b/noncore/apps/dagger/opie-dagger.control
index 4ded1f2..cfb45be 100644
--- a/noncore/apps/dagger/opie-dagger.control
+++ b/noncore/apps/dagger/opie-dagger.control
@@ -1,9 +1,9 @@
1Package: opie-dagger 1Package: opie-dagger
2Files: plugins/application/libdagger.so* bin/dagger pics/dagger apps/Applications/dagger.desktop 2Files: plugins/application/libdagger.so* bin/dagger pics/dagger apps/Applications/dagger.desktop
3Priority: optional 3Priority: optional
4Section: opie/applications 4Section: opie/applications
5Depends: task-opie-minimal, libopiecore2, libopieui2 5Depends: task-opie-minimal, libopiecore2, libopieui2
6Architecture: arm 6Architecture: arm
7Maintainer: Dan Williams (drw@handhelds.org) 7Maintainer: Dan Williams (drw@handhelds.org)
8Description: A Bible study program utilizing the Sword library. 8Description: A Bible study program utilizing the Sword library.
9Version: 0.9.1$EXTRAVERSION 9Version: $QPE_VERSION$EXTRAVERSION
diff --git a/noncore/apps/opie-bartender/opie-bartender.control b/noncore/apps/opie-bartender/opie-bartender.control
index 045c68e..29ad0ba 100644
--- a/noncore/apps/opie-bartender/opie-bartender.control
+++ b/noncore/apps/opie-bartender/opie-bartender.control
@@ -1,10 +1,10 @@
1Files: plugins/applications/libbartender.so* bin/bartender apps/Applications/bartender.desktop etc/bartender/drinkdb.txt 1Files: plugins/applications/libbartender.so* bin/bartender apps/Applications/bartender.desktop etc/bartender/drinkdb.txt
2Priority: optional 2Priority: optional
3Package: opie-bartender 3Package: opie-bartender
4Section: opie/applications 4Section: opie/applications
5Maintainer: L.J. Potter <lpotter@trolltech.com> 5Maintainer: L.J. Potter <lpotter@trolltech.com>
6Architecture: arm 6Architecture: arm
7Version: $QPE_VERSION-$SUB_VERSION 7Version: $QPE_VERSION$EXTRAVERSION
8Depends: task-opie-minimal 8Depends: task-opie-minimal
9Description: Bartender drink receipe database lookup, and 9Description: Bartender drink receipe database lookup, and
10 blood alcohol estimator. 10 blood alcohol estimator.
diff --git a/noncore/apps/opie-console/opie-console-embedix.control b/noncore/apps/opie-console/opie-console-embedix.control
index cf27554..e902d0e 100644
--- a/noncore/apps/opie-console/opie-console-embedix.control
+++ b/noncore/apps/opie-console/opie-console-embedix.control
@@ -1,10 +1,10 @@
1Package: opie-console 1Package: opie-console
2Files: bin/opie-console apps/Applications/opie-console.desktop pics/console/* share/opie-console/* 2Files: bin/opie-console apps/Applications/opie-console.desktop pics/console/* share/opie-console/*
3Priority: optional 3Priority: optional
4Section: opie/applications 4Section: opie/applications
5Maintainer: Opie Team <opie@handhelds.org> 5Maintainer: Opie Team <opie@handhelds.org>
6Architecture: arm 6Architecture: arm
7Version: 0.6-$SUB_VERSION 7Version: $QPE_VERSION$EXTRAVERSION
8Depends: qpe-base, libopiecore2, libopieui2, opie-console-help-en, lrzsz, opie-keytabs 8Depends: qpe-base, libopiecore2, libopieui2, opie-console-help-en, lrzsz, opie-keytabs
9License: GPL 9License: GPL
10Description: Opie terminal app 10Description: Opie terminal app
diff --git a/noncore/apps/opie-console/opie-console.control b/noncore/apps/opie-console/opie-console.control
index e924b79..b64898b 100644
--- a/noncore/apps/opie-console/opie-console.control
+++ b/noncore/apps/opie-console/opie-console.control
@@ -1,10 +1,10 @@
1Package: opie-console 1Package: opie-console
2Files: bin/opie-console apps/Applications/opie-console.desktop pics/console/* 2Files: bin/opie-console apps/Applications/opie-console.desktop pics/console/*
3Priority: optional 3Priority: optional
4Section: opie/applications 4Section: opie/applications
5Maintainer: Opie Team <opie@handhelds.org> 5Maintainer: Opie Team <opie@handhelds.org>
6Architecture: arm 6Architecture: arm
7Version: 0.6-$SUB_VERSION 7Version: $QPE_VERSION$EXTRAVERSION
8Depends: qpe-base, libopiecore2, libopieui2, opie-console-help-en, lrzsz, opie-keytabs 8Depends: qpe-base, libopiecore2, libopieui2, opie-console-help-en, lrzsz, opie-keytabs
9License: GPL 9License: GPL
10Description: Opie terminal app 10Description: Opie terminal app
diff --git a/noncore/apps/opie-gutenbrowser/opie-gutenbrowser.control b/noncore/apps/opie-gutenbrowser/opie-gutenbrowser.control
index 47fbcdf..bc0283e 100644
--- a/noncore/apps/opie-gutenbrowser/opie-gutenbrowser.control
+++ b/noncore/apps/opie-gutenbrowser/opie-gutenbrowser.control
@@ -1,11 +1,11 @@
1Package: opie-gutenbrowser 1Package: opie-gutenbrowser
2Files: bin/gutenbrowser apps/Applications/gutenbrowser.desktop etc/gutenbrowser/* pics/gutenbrowser/* plugins/application/libgutenbrowser.so* 2Files: bin/gutenbrowser apps/Applications/gutenbrowser.desktop etc/gutenbrowser/* pics/gutenbrowser/* plugins/application/libgutenbrowser.so*
3Priority: optional 3Priority: optional
4Section: opie 4Section: opie
5Maintainer: ljp <lpotter@trolltech.com> 5Maintainer: ljp <lpotter@trolltech.com>
6Source: opie.handhelds.org 6Source: opie.handhelds.org
7Architecture: arm 7Architecture: arm
8Version: $QPE_VERSION-$SUB_VERSION 8Version: $QPE_VERSION$EXTRAVERSION
9Depends: ftplib, libopiecore2, libopieui2 9Depends: ftplib, libopiecore2, libopieui2
10Description: Etext read for the Project Gutenberg. 10Description: Etext read for the Project Gutenberg.
11 11
diff --git a/noncore/games/bounce/opie-bounce.control b/noncore/games/bounce/opie-bounce.control
index dfd1bf0..0513958 100644
--- a/noncore/games/bounce/opie-bounce.control
+++ b/noncore/games/bounce/opie-bounce.control
@@ -1,11 +1,11 @@
1Package: opie-bounce 1Package: opie-bounce
2Files: plugins/application/libbounce.so* bin/bounce apps/Games/bounce.desktop pics/bounce/*.png 2Files: plugins/application/libbounce.so* bin/bounce apps/Games/bounce.desktop pics/bounce/*.png
3Version: 0.6-$SUB_VERSION 3Version: $QPE_VERSION$EXTRAVERSION
4Depends: task-opie-minimal, libopiecore2 4Depends: task-opie-minimal, libopiecore2
5Priority: optional 5Priority: optional
6Section: opie/games 6Section: opie/games
7Maintainer: Martin Imobersteg <imm@gmx.ch> 7Maintainer: Martin Imobersteg <imm@gmx.ch>
8Architecture: arm 8Architecture: arm
9License: GPL 9License: GPL
10Description: bounce 10Description: bounce
11 A JezzGame like game for Qtopia. 11 A JezzGame like game for Qtopia.
diff --git a/noncore/games/buzzword/opie-buzzword.control b/noncore/games/buzzword/opie-buzzword.control
index 3316445..f76a2c2 100644
--- a/noncore/games/buzzword/opie-buzzword.control
+++ b/noncore/games/buzzword/opie-buzzword.control
@@ -1,11 +1,11 @@
1Package: opie-buzzword 1Package: opie-buzzword
2Files: plugins/application/libbuzzword.so* bin/buzzword apps/Games/buzzword.desktop pics/buzzword/buzzword.png share/buzzword/buzzwords 2Files: plugins/application/libbuzzword.so* bin/buzzword apps/Games/buzzword.desktop pics/buzzword/buzzword.png share/buzzword/buzzwords
3Version: 1.1-$SUB_VERSION 3Version: $QPE_VERSION$EXTRAVERSION
4Depends: task-opie-minimal,libopiecore2 4Depends: task-opie-minimal,libopiecore2
5Priority: optional 5Priority: optional
6Section: opie/games 6Section: opie/games
7Maintainer: Martin Imobersteg <imm@gmx.ch> 7Maintainer: Martin Imobersteg <imm@gmx.ch>
8Architecture: arm 8Architecture: arm
9License: GPL 9License: GPL
10Description: BuzzWord 10Description: BuzzWord
11 A BuzzWord Bingo for the Opie environment. 11 A BuzzWord Bingo for the Opie environment.
diff --git a/noncore/games/kbill/opie-kbill.control b/noncore/games/kbill/opie-kbill.control
index 3299b93..cf12bca 100644
--- a/noncore/games/kbill/opie-kbill.control
+++ b/noncore/games/kbill/opie-kbill.control
@@ -1,13 +1,13 @@
1Package: opie-kbill 1Package: opie-kbill
2Files: bin/kbill apps/Games/kbill.desktop pics/kbill/* 2Files: bin/kbill apps/Games/kbill.desktop pics/kbill/*
3Priority: optional 3Priority: optional
4Section: opie/games 4Section: opie/games
5Maintainer: Mark Westcott <mark@houseoffish.org> 5Maintainer: Mark Westcott <mark@houseoffish.org>
6Architecture: arm 6Architecture: arm
7Version: 0.8-$SUB_VERSION 7Version: $QPE_VERSION$EXTRAVERSION
8Depends: task-opie-minimal 8Depends: task-opie-minimal
9License: GPL 9License: GPL
10Description: The famous hit Bill game 10Description: The famous hit Bill game
11 Hit Bill as hard as you can before he 11 Hit Bill as hard as you can before he
12 infects your network with a wannabe 12 infects your network with a wannabe
13 OS. 13 OS.
diff --git a/noncore/games/kcheckers/opie-kcheckers.control b/noncore/games/kcheckers/opie-kcheckers.control
index 5bd03ae..e7c20d3 100644
--- a/noncore/games/kcheckers/opie-kcheckers.control
+++ b/noncore/games/kcheckers/opie-kcheckers.control
@@ -1,10 +1,10 @@
1Package: opie-kcheckers 1Package: opie-kcheckers
2Files: plugins/application/libkcheckers.so* bin/kcheckers apps/Games/kcheckers.desktop pics/kcheckers 2Files: plugins/application/libkcheckers.so* bin/kcheckers apps/Games/kcheckers.desktop pics/kcheckers
3Priority: optional 3Priority: optional
4Section: opie/games 4Section: opie/games
5Maintainer: leseb <prudhomme@laposte.net> 5Maintainer: leseb <prudhomme@laposte.net>
6Architecture: arm 6Architecture: arm
7Version: 0.3-$SUB_VERSION 7Version: $QPE_VERSION$EXTRAVERSION
8Depends: task-opie-minimal, libopiecore2 8Depends: task-opie-minimal, libopiecore2
9Description: The game of Checkers 9Description: The game of Checkers
10 A game for the Opie environment. 10 A game for the Opie environment.
diff --git a/noncore/games/kpacman/opie-kpacman.control b/noncore/games/kpacman/opie-kpacman.control
index 68487ec..97120aa 100644
--- a/noncore/games/kpacman/opie-kpacman.control
+++ b/noncore/games/kpacman/opie-kpacman.control
@@ -1,11 +1,11 @@
1Package: opie-kpacman 1Package: opie-kpacman
2Files: plugins/applications/libkpacman.so* bin/kpacman apps/Games/kpacman.desktop pics/kpacman/kpacman.png share/kpacman 2Files: plugins/applications/libkpacman.so* bin/kpacman apps/Games/kpacman.desktop pics/kpacman/kpacman.png share/kpacman
3Version: 0.3.1-$SUB_VERSION 3Version: $QPE_VERSION$EXTRAVERSION
4Depends: task-opie-minimal 4Depends: task-opie-minimal
5Priority: optional 5Priority: optional
6Section: opie/games 6Section: opie/games
7Maintainer: Catalin Climov <catalin@climov.com> 7Maintainer: Catalin Climov <catalin@climov.com>
8Architecture: arm 8Architecture: arm
9License: GPL 9License: GPL
10Description: Kpacman 10Description: Kpacman
11 A Pacman clone for Qtopia. 11 A Pacman clone for Qtopia.
diff --git a/noncore/games/tetrix/ohighscoredlg.cpp b/noncore/games/tetrix/ohighscoredlg.cpp
index 8d8079e..66f4917 100644
--- a/noncore/games/tetrix/ohighscoredlg.cpp
+++ b/noncore/games/tetrix/ohighscoredlg.cpp
@@ -6,148 +6,145 @@
6 6
7/*************************************************************************** 7/***************************************************************************
8 * * 8 * *
9 * This program is free software; you can redistribute it and/or modify * 9 * This program is free software; you can redistribute it and/or modify *
10 * it under the terms of the GNU General Public License as published by * 10 * it under the terms of the GNU General Public License as published by *
11 * the Free Software Foundation; either version 2 of the License, or * 11 * the Free Software Foundation; either version 2 of the License, or *
12 * ( at your option ) any later version. * 12 * ( at your option ) any later version. *
13 * * 13 * *
14 **************************************************************************/ 14 **************************************************************************/
15 15
16#include <qdialog.h> 16#include <qdialog.h>
17#include <qlayout.h> 17#include <qlayout.h>
18#include <qpe/qpeapplication.h> 18#include <qpe/qpeapplication.h>
19#include <qpe/config.h> 19#include <qpe/config.h>
20 20
21#include <qstring.h> 21#include <qstring.h>
22#include <qlist.h>
22#include <qhbox.h> 23#include <qhbox.h>
23#include <qvbox.h> 24#include <qvbox.h>
24#include <qlabel.h> 25#include <qlabel.h>
25#include <qlistview.h> 26#include <qlistview.h>
26#include <qlineedit.h> 27#include <qlineedit.h>
27 28
28#include "ohighscoredlg.h" 29#include "ohighscoredlg.h"
29 30
30OHighscore::OHighscore( int score , int playerLevel ) 31OHighscore::OHighscore( int score , int playerLevel ) : playerData()
31{ 32{
32 pLevel = playerLevel; 33 pLevel = playerLevel;
33 getList(); 34 getList();
34 checkIfItIsANewhighscore( score ); 35 checkIfItIsANewhighscore( score );
36 playerData.setAutoDelete( TRUE );
35} 37}
36 38
37OHighscore::~OHighscore() 39OHighscore::~OHighscore()
38{ 40{
39 std::list<t_playerData*>::iterator deleteIterator = playerData.begin();
40 for ( ; deleteIterator != playerData.end() ; deleteIterator++ )
41 {
42 delete ( *deleteIterator );
43 }
44} 41}
45 42
46void OHighscore::getList() 43void OHighscore::getList()
47{ 44{
48 Config cfg ( "tetrix" ); 45 Config cfg ( "tetrix" );
49 cfg.setGroup( QString::number( 1 ) ); 46 cfg.setGroup( QString::number( 1 ) );
50 lowest = cfg.readNumEntry( "Points" ); 47 lowest = cfg.readNumEntry( "Points" );
51 playerData.clear(); 48 playerData.clear();
52 49
53 int rest = 1;//for the filling up later 50 int rest = 1;//for the filling up later
54 51
55 for ( int i = 1 ; i < 11 ; i++ ) 52 for ( int i = 1 ; i < 11 ; i++ )
56 { 53 {
57 if ( cfg.hasGroup( QString::number( i ) ) ) 54 if ( cfg.hasGroup( QString::number( i ) ) )
58 { 55 {
59 cfg.setGroup( QString::number( i ) ); 56 cfg.setGroup( QString::number( i ) );
60 int temp = cfg.readNumEntry( "Points" ); 57 int temp = cfg.readNumEntry( "Points" );
61 58
62 t_playerData *pPlayerData = new t_playerData; 59 t_playerData *pPlayerData = new t_playerData;
63 pPlayerData->sName = cfg.readEntry( "Name" ); 60 pPlayerData->sName = cfg.readEntry( "Name" );
64 pPlayerData->points = temp; 61 pPlayerData->points = temp;
65 pPlayerData->level = cfg.readNumEntry( "Level" ); 62 pPlayerData->level = cfg.readNumEntry( "Level" );
66 63
67 playerData.push_back( pPlayerData ); 64 playerData.append( pPlayerData );
68 65
69 if ( (temp < lowest) ) lowest = temp; 66 if ( (temp < lowest) ) lowest = temp;
70 rest++; 67 rest++;
71 } 68 }
72 } 69 }
73 70
74 //now I fill up the rest of the list 71 //now I fill up the rest of the list
75 if ( rest < 11 ) //only go in this loop if there are less than 72 if ( rest < 11 ) //only go in this loop if there are less than
76 //10 highscoreentries 73 //10 highscoreentries
77 { 74 {
78 lowest = 0; 75 lowest = 0;
79 for ( ; rest < 11 ; rest++ ) 76 for ( ; rest < 11 ; rest++ )
80 { 77 {
81 t_playerData *pPlayerData = new t_playerData; 78 t_playerData *pPlayerData = new t_playerData;
82 pPlayerData->sName = tr( "empty"); 79 pPlayerData->sName = tr( "empty");
83 pPlayerData->points = 0; 80 pPlayerData->points = 0;
84 pPlayerData->level = 0; 81 pPlayerData->level = 0;
85 82
86 playerData.push_back( pPlayerData ); 83 playerData.append( pPlayerData );
87 } 84 }
88 } 85 }
89 86
90} 87}
91 88
92void OHighscore::checkIfItIsANewhighscore( int points) 89void OHighscore::checkIfItIsANewhighscore( int points)
93{ 90{
94 if ( points > lowest ) 91 if ( points > lowest )
95 isNewhighscore = true; 92 isNewhighscore = true;
96 else 93 else
97 isNewhighscore = false; 94 isNewhighscore = false;
98} 95}
99 96
100void OHighscore::insertData( QString name , int punkte , int playerLevel ) 97void OHighscore::insertData( QString name , int punkte , int playerLevel )
101{ 98{
102 Config cfg ( "tetrix" ); 99 Config cfg ( "tetrix" );
100 t_playerData * Run;
101 int index = 0;
103 int entryNumber = 1; 102 int entryNumber = 1;
104 std::list<t_playerData*>::iterator insertIterator = playerData.begin(); 103
105 while ( insertIterator != playerData.end() ) 104 for ( Run=playerData.first();
106 { 105 Run != 0;
107 if ( punkte > ( *insertIterator )->points ) 106 index ++, Run=playerData.next() ) {
107
108 if ( punkte > Run->points )
108 { 109 {
109 t_playerData* temp = new t_playerData; 110 t_playerData* temp = new t_playerData;
110 temp->sName = name; 111 temp->sName = name;
111 temp->points = punkte; 112 temp->points = punkte;
112 temp->level = playerLevel; 113 temp->level = playerLevel;
113 playerData.insert( insertIterator , temp ); 114
115 playerData.insert( index, temp );
114 116
115 //now we have to delete the last entry 117 //now we have to delete the last entry
116 insertIterator = playerData.end(); 118 playerData.remove( playerData.count() );
117 insertIterator--;
118 //X delete *insertIterator; //memleak?
119 playerData.erase( insertIterator );
120 119
121 ///////////////////////////////////////// 120 /////////////////////////////////////////
122 //this block just rewrites the highscore 121 //this block just rewrites the highscore
123 insertIterator = playerData.begin(); 122 for ( t_playerData * Run2=playerData.first();
124 while ( insertIterator != playerData.end() ) 123 Run2 != 0;
125 { 124 Run2=playerData.next() ) {
126 cfg.setGroup( QString::number( entryNumber ) ); 125 cfg.setGroup( QString::number( entryNumber ) );
127 cfg.writeEntry( "Name" , ( *insertIterator )->sName ); 126 cfg.writeEntry( "Name" , Run2->sName );
128 cfg.writeEntry( "Points" , ( *insertIterator )->points ); 127 cfg.writeEntry( "Points" , Run2->points );
129 cfg.writeEntry( "Level" , ( *insertIterator )->level ); 128 cfg.writeEntry( "Level" , Run2->level );
130 entryNumber++; 129 entryNumber++;
131 insertIterator++;
132 } 130 }
133 //////////////////////////////////////// 131 ////////////////////////////////////////
134 132
135 return; 133 return;
136 } 134 }
137 insertIterator++;
138 } 135 }
139} 136}
140 137
141QString OHighscore::getName() 138QString OHighscore::getName()
142{ 139{
143 QString name; 140 QString name;
144 QDialog *d = new QDialog ( this, 0, true ); 141 QDialog *d = new QDialog ( this, 0, true );
145 d->setCaption( tr( "Enter your name!" )); 142 d->setCaption( tr( "Enter your name!" ));
146 QLineEdit *ed = new QLineEdit ( d ); 143 QLineEdit *ed = new QLineEdit ( d );
147 ( new QVBoxLayout ( d, 3, 3 ))->addWidget ( ed ); 144 ( new QVBoxLayout ( d, 3, 3 ))->addWidget ( ed );
148 ed->setFocus ( ); 145 ed->setFocus ( );
149 146
150 if ( d->exec() == QDialog::Accepted ) { 147 if ( d->exec() == QDialog::Accepted ) {
151 name = ed->text(); 148 name = ed->text();
152 } 149 }
153 //delete d; 150 //delete d;
@@ -164,36 +161,46 @@ OHighscoreDialog::OHighscoreDialog(OHighscore *highscore, QWidget *parent, const
164 list->addColumn( tr( "#" )); 161 list->addColumn( tr( "#" ));
165 list->addColumn( tr( "Name" )); 162 list->addColumn( tr( "Name" ));
166 list->addColumn( tr( "Points" )); 163 list->addColumn( tr( "Points" ));
167 list->addColumn( tr( "Level" )); 164 list->addColumn( tr( "Level" ));
168 165
169 createHighscoreListView(); 166 createHighscoreListView();
170 167
171 vbox_layout->addWidget( list ); 168 vbox_layout->addWidget( list );
172 QPEApplication::showDialog( this ); 169 QPEApplication::showDialog( this );
173} 170}
174 171
175void OHighscoreDialog::createHighscoreListView() 172void OHighscoreDialog::createHighscoreListView()
176{ 173{
177 int pos = 10; 174 int pos = 10;
178 int points_ = 0; 175 int points_ = 0;
179 int level_ = 0; 176 int level_ = 0;
180 177 QListViewItem * Prev = 0;
181 std::list<t_playerData*>::reverse_iterator iListe = hs_->playerData.rbegin(); 178
182 179 for ( t_playerData * Run = hs_->playerData.first();
183 for ( ; iListe != hs_->playerData.rend() ; ++iListe ) 180 Run != 0;
184 { 181 Run=hs_->playerData.next() )
185 QListViewItem *item = new QListViewItem( list ); 182 {
183 QListViewItem *item;
184
185 if( Prev ) {
186 // after previous
187 item = new QListViewItem( list, Prev );
188 Prev = item;
189 } else {
190 item = new QListViewItem( list );
191
192 }
186 item->setText( 0 , QString::number( pos ) ); //number 193 item->setText( 0 , QString::number( pos ) ); //number
187 item->setText( 1 , ( *iListe )->sName ); //name 194 item->setText( 1 , Run->sName ); //name
188 if ( ( *iListe )->points == -1 ) 195 if ( Run->points == -1 )
189 points_ = 0; 196 points_ = 0;
190 else points_ = ( *iListe )->points; 197 else points_ = Run->points;
191 if ( ( *iListe )->level == -1 ) 198 if ( Run->level == -1 )
192 level_ = 0; 199 level_ = 0;
193 else level_ = ( *iListe )->level; 200 else level_ = Run->level;
194 item->setText( 2 , QString::number( points_ ) ); //points 201 item->setText( 2 , QString::number( points_ ) ); //points
195 item->setText( 3 , QString::number( level_ ) ); //level 202 item->setText( 3 , QString::number( level_ ) ); //level
196 pos--; 203 pos--;
197 } 204 }
198} 205}
199 206
diff --git a/noncore/games/tetrix/ohighscoredlg.h b/noncore/games/tetrix/ohighscoredlg.h
index fdbe623..845e639 100644
--- a/noncore/games/tetrix/ohighscoredlg.h
+++ b/noncore/games/tetrix/ohighscoredlg.h
@@ -1,73 +1,72 @@
1/*************************************************************************** 1/***************************************************************************
2 * * 2 * *
3 * This program is free software; you can redistribute it and/or modify * 3 * This program is free software; you can redistribute it and/or modify *
4 * it under the terms of the GNU General Public License as published by * 4 * it under the terms of the GNU General Public License as published by *
5 * the Free Software Foundation; either version 2 of the License, or * 5 * the Free Software Foundation; either version 2 of the License, or *
6 * ( at your option ) any later version. * 6 * ( at your option ) any later version. *
7 * * 7 * *
8 **************************************************************************/ 8 **************************************************************************/
9 9
10class QWidget; 10class QWidget;
11class QVBoxLayout; 11class QVBoxLayout;
12class QListView; 12class QListView;
13 13
14#include <qdialog.h> 14#include <qdialog.h>
15#include <list> 15#include <qlist.h>
16 16
17using namespace std; 17class t_playerData
18
19struct t_playerData
20{ 18{
19
20public :
21
21 QString sName; 22 QString sName;
22 int points; 23 int points;
23 int level; 24 int level;
24}; 25};
25 26
26class OHighscore : public QWidget 27class OHighscore : public QWidget
27{ 28{
28 Q_OBJECT 29 Q_OBJECT
29 30
30 public: 31 public:
31 /* 32 /*
32 *An OHighscore-Object contains all Points, level and playernames sorted in a stl::vector 33 *An OHighscore-Object contains all Points, level and playernames sorted in a stl::vector
33 */ 34 */
34 OHighscore( int , int ); 35 OHighscore( int , int );
35 36
36 ~OHighscore(); 37 ~OHighscore();
37 38
38 /* 39 /*
39 * is true if the player did a new highscore 40 * is true if the player did a new highscore
40 */ 41 */
41 bool isNewhighscore; 42 bool isNewhighscore;
42 43
43 /* 44 /*
44 * this inserts the new entry at the correct position 45 * this inserts the new entry at the correct position
45 */ 46 */
46 void insertData( QString , int , int ); 47 void insertData( QString , int , int );
47 48
48 list<t_playerData*> playerData; 49 QList<t_playerData> playerData;
49 50
50 /* 51 /*
51 * As Qt/e does not support QInputDialog I did that code myself 52 * As Qt/e does not support QInputDialog I did that code myself
52 */ 53 */
53 QString getName(); 54 QString getName();
54 private: 55 private:
55 56
56 list<t_playerData*>::iterator iPlayerData;
57
58 /* 57 /*
59 * the lowest score in the highscorelist 58 * the lowest score in the highscorelist
60 */ 59 */
61 int lowest; 60 int lowest;
62 61
63 /* 62 /*
64 * the level of the highscore 63 * the level of the highscore
65 */ 64 */
66 int pLevel; 65 int pLevel;
67 66
68 /* 67 /*
69 * get all scores in a vector and give "lowest" a value 68 * get all scores in a vector and give "lowest" a value
70 */ 69 */
71 void getList(); 70 void getList();
72 71
73 /* 72 /*
diff --git a/noncore/games/tetrix/tetrix.pro b/noncore/games/tetrix/tetrix.pro
index 580a542..96f452f 100644
--- a/noncore/games/tetrix/tetrix.pro
+++ b/noncore/games/tetrix/tetrix.pro
@@ -1,22 +1,22 @@
1 CONFIG = qt warn_on quick-app 1 CONFIG = qt warn_on quick-app
2 HEADERS = gtetrix.h \ 2 HEADERS = gtetrix.h \
3 qtetrix.h \ 3 qtetrix.h \
4 qtetrixb.h \ 4 qtetrixb.h \
5 tpiece.h \ 5 tpiece.h \
6 ohighscoredlg.h 6 ohighscoredlg.h
7 SOURCES = main.cpp \ 7 SOURCES = main.cpp \
8 gtetrix.cpp \ 8 gtetrix.cpp \
9 qtetrix.cpp \ 9 qtetrix.cpp \
10 qtetrixb.cpp \ 10 qtetrixb.cpp \
11 tpiece.cpp \ 11 tpiece.cpp \
12 ohighscoredlg.cpp 12 ohighscoredlg.cpp
13INCLUDEPATH += $(OPIEDIR)/include 13INCLUDEPATH += $(OPIEDIR)/include
14 DEPENDPATH+= $(OPIEDIR)/include 14 DEPENDPATH+= $(OPIEDIR)/include
15LIBS += -lqpe -lopiecore2 -lstdc++ 15LIBS += -lqpe -lopiecore2
16 INTERFACES= 16 INTERFACES=
17 TARGET = tetrix 17 TARGET = tetrix
18 18
19 19
20 20
21 21
22include( $(OPIEDIR)/include.pro ) 22include( $(OPIEDIR)/include.pro )
diff --git a/noncore/multimedia/camera/opie-camera.control b/noncore/multimedia/camera/opie-camera.control
index d9eaab8..5171050 100644
--- a/noncore/multimedia/camera/opie-camera.control
+++ b/noncore/multimedia/camera/opie-camera.control
@@ -1,10 +1,10 @@
1Package: opie-camera 1Package: opie-camera
2Files: lib/libcamera.* bin/camera bin/capture pics/camera apps/Applications/camera.desktop 2Files: lib/libcamera.* bin/camera bin/capture pics/camera apps/Applications/camera.desktop
3Priority: optional 3Priority: optional
4Section: opie/multimedia 4Section: opie/multimedia
5Maintainer: Michael 'Mickey' Lauer <mickeyl@Vanille.de> 5Maintainer: Michael 'Mickey' Lauer <mickeyl@Vanille.de>
6Architecture: arm 6Architecture: arm
7Version: 1.0.1 7Version: $QPE_VERSION$EXTRAVERSION
8Depends: libqpe1, libopiecore2, libopieui2 8Depends: libqpe1, libopiecore2, libopieui2
9Description: A Camera Application 9Description: A Camera Application
10 A Camera Application to use with the Sharp CE-AG06. 10 A Camera Application to use with the Sharp CE-AG06.
diff --git a/noncore/multimedia/opieplayer2/opie-mediaplayer2-codecs.control b/noncore/multimedia/opieplayer2/opie-mediaplayer2-codecs.control
index 1d0fbfb..f4cbc41 100644
--- a/noncore/multimedia/opieplayer2/opie-mediaplayer2-codecs.control
+++ b/noncore/multimedia/opieplayer2/opie-mediaplayer2-codecs.control
@@ -1,10 +1,10 @@
1Package: opie-mediaplayer2-codecs 1Package: opie-mediaplayer2-codecs
2Files: root/usr/lib/libao.so* root/usr/lib/libogg* root/usr/lib/libvorbisidec.so* root/usr/lib/libxine.so* root/usr/lib/xine/* 2Files: root/usr/lib/libao.so* root/usr/lib/libogg* root/usr/lib/libvorbisidec.so* root/usr/lib/libxine.so* root/usr/lib/xine/*
3Section: ;ibs 3Section: ;ibs
4Essential: no 4Essential: no
5Priority: optional 5Priority: optional
6Version: 0.7-$SUB_VERSION.3 6Version: $QPE_VERSION$EXTRAVERSION
7Architecture: arm 7Architecture: arm
8Maintainer: Maximilian Reiss <harlekin@handhelds.org> 8Maintainer: Maximilian Reiss <harlekin@handhelds.org>
9Depends: libc6 (>= 2.1), opie-mediaplayer2 9Depends: libc6 (>= 2.1), opie-mediaplayer2
10Description: Codecs for opieplayer 2 10Description: Codecs for opieplayer 2
diff --git a/noncore/multimedia/opieplayer2/opie-mediaplayer2.control b/noncore/multimedia/opieplayer2/opie-mediaplayer2.control
index af6bb01..78cfa8b 100644
--- a/noncore/multimedia/opieplayer2/opie-mediaplayer2.control
+++ b/noncore/multimedia/opieplayer2/opie-mediaplayer2.control
@@ -1,11 +1,11 @@
1Package: opie-mediaplayer2 1Package: opie-mediaplayer2
2Files: plugins/application/libopieplayer2.so* bin/opieplayer2 apps/Applications/opieplayer2.desktop pics/opieplayer2/add_to_playlist.png pics/opieplayer2/cut.png pics/opieplayer2/delete.png pics/opieplayer2/down.png pics/opieplayer2/loop.png pics/opieplayer2/MPEGPlayer.png pics/opieplayer2/musicfile.png pics/opieplayer2/playlist2.png pics/opieplayer2/play.png pics/opieplayer2/remove_from_playlist.png pics/opieplayer2/shuffle.png pics/opieplayer2/up.png pics/opieplayer2/videofile.png 2Files: plugins/application/libopieplayer2.so* bin/opieplayer2 apps/Applications/opieplayer2.desktop pics/opieplayer2/add_to_playlist.png pics/opieplayer2/cut.png pics/opieplayer2/delete.png pics/opieplayer2/down.png pics/opieplayer2/loop.png pics/opieplayer2/MPEGPlayer.png pics/opieplayer2/musicfile.png pics/opieplayer2/playlist2.png pics/opieplayer2/play.png pics/opieplayer2/remove_from_playlist.png pics/opieplayer2/shuffle.png pics/opieplayer2/up.png pics/opieplayer2/videofile.png
3Priority: optional 3Priority: optional
4Section: opie/multimedia 4Section: opie/multimedia
5Maintainer: L.J.Potter <ljp@llornkcor.com>, Maximilian Reiss <harlekin@handhelds.org> 5Maintainer: L.J.Potter <ljp@llornkcor.com>, Maximilian Reiss <harlekin@handhelds.org>
6Architecture: arm 6Architecture: arm
7Depends: task-opie-minimal, libopie1, zlib1g, opie-mediaplayer2-skin-default | opie-mediaplayer2-skin-default-landscape , libxine1 | opie-mediaplayer2-codecs 7Depends: task-opie-minimal, libopiecore2, libopieui2, libqtaux2, libz1, opie-mediaplayer2-skin-default | opie-mediaplayer2-skin-default-landscape , libxine1 | opie-mediaplayer2-codecs
8Description: The Opie media player 8Description: The Opie media player
9 The mediaplayer for Opie. It plays mp3, mpeg, wav, ogg, quicktime, divx and 9 The mediaplayer for Opie. It plays mp3, mpeg, wav, ogg, quicktime, divx and
10 more. Also it is streaming capable. 10 more. Also it is streaming capable.
11Version: $QPE_VERSION$EXTRAVERSION 11Version: $QPE_VERSION$EXTRAVERSION
diff --git a/noncore/multimedia/powerchord/opie-powerchord.control b/noncore/multimedia/powerchord/opie-powerchord.control
index 39d926b..4b5bc88 100644
--- a/noncore/multimedia/powerchord/opie-powerchord.control
+++ b/noncore/multimedia/powerchord/opie-powerchord.control
@@ -1,10 +1,10 @@
1Files: plugins/applications/libpowerchord.so* bin/powerchord apps/Applications/powerchord.desktop pics/powerchord share/powerchord 1Files: plugins/applications/libpowerchord.so* bin/powerchord apps/Applications/powerchord.desktop pics/powerchord share/powerchord
2Priority: optional 2Priority: optional
3Section: opie/multimedia 3Section: opie/multimedia
4Maintainer: Camilo Mesias <camilo@mesias.co.uk>, ljp <lpotter@trolltech.com> 4Maintainer: Camilo Mesias <camilo@mesias.co.uk>, ljp <lpotter@trolltech.com>
5Architecture: arm 5Architecture: arm
6Version: 0.0.8 6Version: $QPE_VERSION$EXTRAVERSION
7Depends: task-opie-minimal 7Depends: task-opie-minimal
8Description: Guitar Chord generator application 8Description: Guitar Chord generator application
9 Allows naming of chords using base note and key. Fretboard diagrams are 9 Allows naming of chords using base note and key. Fretboard diagrams are
10 produced illustrating ways to play the chord. 10 produced illustrating ways to play the chord.
diff --git a/noncore/net/mail/libetpanstuff/libetpan.control b/noncore/net/mail/libetpanstuff/libetpan.control
index 2b5b354..b664157 100644
--- a/noncore/net/mail/libetpanstuff/libetpan.control
+++ b/noncore/net/mail/libetpanstuff/libetpan.control
@@ -1,10 +1,10 @@
1Package: libetpan 1Package: libetpan
2Files: usr/lib/libetpan* 2Files: usr/lib/libetpan*
3Priority: optional 3Priority: optional
4Section: system 4Section: system
5Maintainer: Rajko Albrecht <alwin@handhelds.org> 5Maintainer: Rajko Albrecht <alwin@handhelds.org>
6Architecture: arm 6Architecture: arm
7Version: 0.33pre-$SUB_VERSION 7Version: $QPE_VERSION$EXTRAVERSION
8Depends: libssl0.9.7 8Depends: libssl0.9.7
9Description: libetpan mail/news library - A version of libetpan patched for Opies mailing app 9Description: libetpan mail/news library - A version of libetpan patched for Opies mailing app
10License: LGPL 10License: LGPL
diff --git a/noncore/net/mail/libmailwrapper/libmailwrapper.control b/noncore/net/mail/libmailwrapper/libmailwrapper.control
index ec55bb3..3491d67 100644
--- a/noncore/net/mail/libmailwrapper/libmailwrapper.control
+++ b/noncore/net/mail/libmailwrapper/libmailwrapper.control
@@ -1,10 +1,10 @@
1Package: libmailwrapper 1Package: libmailwrapper
2Files: lib/libmailwrapper.so* 2Files: lib/libmailwrapper.so*
3Priority: optional 3Priority: optional
4Section: libs 4Section: libs
5Maintainer: Rajko Albrecht <alwin@handhelds.org>, Juergen Graf <jgf@handhelds.org>, Maximilian Reiß <harlekin@handhelds.org> 5Maintainer: Rajko Albrecht <alwin@handhelds.org>, Juergen Graf <jgf@handhelds.org>, Maximilian Reiß <harlekin@handhelds.org>
6Architecture: arm 6Architecture: arm
7Version: 0.6-$SUB_VERSION 7Version: $QPE_VERSION$EXTRAVERSION
8Depends: task-opie-minimal, libopiecore2, libopieui2, libetpan (>= 0.33pre) 8Depends: task-opie-minimal, libopiecore2, libopieui2, libetpan (>= 0.33pre)
9Description: wrapper lib needed by Opie's mailer 9Description: wrapper lib needed by Opie's mailer
10License: LGPL 10License: LGPL
diff --git a/noncore/net/mail/opie-mail.control b/noncore/net/mail/opie-mail.control
index 698aaa7..e3b18b3 100644
--- a/noncore/net/mail/opie-mail.control
+++ b/noncore/net/mail/opie-mail.control
@@ -1,10 +1,10 @@
1Package: opie-mail 1Package: opie-mail
2Files: plugins/application/libopiemail.so* bin/opiemail apps/1Pim/opiemail.desktop pics/mail/*.png 2Files: plugins/application/libopiemail.so* bin/opiemail apps/1Pim/opiemail.desktop pics/mail/*.png
3Priority: optional 3Priority: optional
4Section: opie/pim 4Section: opie/pim
5Maintainer: Rajko Albrecht <alwin@handhelds.org>, Juergen Graf <jgf@handhelds.org>, Maximilian Reiß <harlekin@handhelds.org> 5Maintainer: Rajko Albrecht <alwin@handhelds.org>, Juergen Graf <jgf@handhelds.org>, Maximilian Reiß <harlekin@handhelds.org>
6Architecture: arm 6Architecture: arm
7Version: 0.6-$SUB_VERSION 7Version: $QPE_VERSION$EXTRAVERSION
8Depends: task-opie-minimal, libopiecore2, libopieui2, libopiemm2, libopiedb2, libmailwrapper (>= 0.6), libssl 8Depends: task-opie-minimal, libopiecore2, libopieui2, libopiemm2, libopiedb2, libmailwrapper (>= 0.6), libssl
9Description: Opie's mail and news client (POP3, IMAP and NNTP) 9Description: Opie's mail and news client (POP3, IMAP and NNTP)
10License: LGPL 10License: LGPL
diff --git a/noncore/net/mail/taskbarapplet/opie-mailapplet.control b/noncore/net/mail/taskbarapplet/opie-mailapplet.control
index f9822a5..c838e0b 100644
--- a/noncore/net/mail/taskbarapplet/opie-mailapplet.control
+++ b/noncore/net/mail/taskbarapplet/opie-mailapplet.control
@@ -1,10 +1,10 @@
1Package: opie-mailapplet 1Package: opie-mailapplet
2Files: plugins/applets/libmailapplet.so* 2Files: plugins/applets/libmailapplet.so*
3Priority: optional 3Priority: optional
4Section: opie/applets 4Section: opie/applets
5Maintainer: Rajko Albrecht <alwin@handhelds.org>, Juergen Graf <jgf@handhelds.org>, Maximilian Reiß <harlekin@handhelds.org> 5Maintainer: Rajko Albrecht <alwin@handhelds.org>, Juergen Graf <jgf@handhelds.org>, Maximilian Reiß <harlekin@handhelds.org>
6Architecture: arm 6Architecture: arm
7Version: 0.5-$SUB_VERSION 7Version: $QPE_VERSION$EXTRAVERSION
8Depends: task-opie-minimal, libopiecore2, opie-mail 8Depends: task-opie-minimal, libopiecore2, opie-mail
9Description: A Biff-like mailchecker 9Description: A Biff-like mailchecker
10License: LGPL 10License: LGPL
diff --git a/noncore/net/opieirc/opie-irc.control b/noncore/net/opieirc/opie-irc.control
index b9f20f0..195b5ff 100644
--- a/noncore/net/opieirc/opie-irc.control
+++ b/noncore/net/opieirc/opie-irc.control
@@ -1,9 +1,9 @@
1Package: opie-irc 1Package: opie-irc
2Files: plugins/application/libopieirc.so* bin/opieirc pics/opieirc apps/Applications/opieirc.desktop help/en/html/opieirc.html help/en/html/opieirc 2Files: plugins/application/libopieirc.so* bin/opieirc pics/opieirc apps/Applications/opieirc.desktop help/en/html/opieirc.html help/en/html/opieirc
3Priority: optional 3Priority: optional
4Section: opie/applications 4Section: opie/applications
5Maintainer: Wenzel Jakob <root@wazlaf.de> 5Maintainer: Wenzel Jakob <root@wazlaf.de>
6Architecture: arm 6Architecture: arm
7Depends: task-opie-minimal, libopie1 7Depends: task-opie-minimal, libopiecore2, libopieui2, libqtaux2
8Description: The Opie IRC client lets you chat on your favorite IRC server using your handheld computer 8Description: The Opie IRC client lets you chat on your favorite IRC server using your handheld computer
9Version: $QPE_VERSION$EXTRAVERSION 9Version: $QPE_VERSION$EXTRAVERSION
diff --git a/noncore/net/opierdesktop/opie-rdesktop.control b/noncore/net/opierdesktop/opie-rdesktop.control
index a8726e0..2a9d415 100644
--- a/noncore/net/opierdesktop/opie-rdesktop.control
+++ b/noncore/net/opierdesktop/opie-rdesktop.control
@@ -1,9 +1,9 @@
1Package: opie-rdesktop 1Package: opie-rdesktop
2Files: bin/ordesktop pics/opierdesktop apps/Applications/ordesktop.desktop 2Files: bin/ordesktop pics/opierdesktop apps/Applications/ordesktop.desktop
3Priority: optional 3Priority: optional
4Section: opie/applications 4Section: opie/applications
5Maintainer: Michael 'Mickey' Lauer <mickeyl@handhelds.org> 5Maintainer: Michael 'Mickey' Lauer <mickeyl@handhelds.org>
6Architecture: arm 6Architecture: arm
7Version: 1.2.0-$SUB_VERSION 7Version: $QPE_VERSION$EXTRAVERSION
8Depends: task-opie-minimal 8Depends: task-opie-minimal
9Description: Remote Desktop Protocol (RDP) Client 9Description: Remote Desktop Protocol (RDP) Client
diff --git a/noncore/net/opietooth/blue-pin/main.cc b/noncore/net/opietooth/blue-pin/main.cc
index 1ab1f2e..dbe5b41 100644
--- a/noncore/net/opietooth/blue-pin/main.cc
+++ b/noncore/net/opietooth/blue-pin/main.cc
@@ -1,12 +1,11 @@
1#include <stdio.h> 1#include <stdio.h>
2#include <stdlib.h> 2#include <stdlib.h>
3 3
4 4
5#include <qpe/qpeapplication.h> 5#include <qpe/qpeapplication.h>
6#include <opie2/oapplicationfactory.h> 6#include <opie2/oapplicationfactory.h>
7 7
8#include "pindlg.h" 8#include "pindlg.h"
9 9
10using namespace Opie::Core; 10using namespace Opie::Core;
11OPIE_EXPORT_APP( OApplicationFactory<OpieTooth::PinDlg> ) 11OPIE_EXPORT_APP( OApplicationFactory<OpieTooth::PinDlg> )
12
diff --git a/noncore/net/opietooth/blue-pin/opie-bluepin.control b/noncore/net/opietooth/blue-pin/opie-bluepin.control
index 7147975..e9aa683 100644
--- a/noncore/net/opietooth/blue-pin/opie-bluepin.control
+++ b/noncore/net/opietooth/blue-pin/opie-bluepin.control
@@ -1,10 +1,10 @@
1Package: opie-bluepin 1Package: opie-bluepin
2Files: plugins/application/libbluepin.so* bin/bluepin 2Files: plugins/application/libbluepin.so* bin/bluepin
3Priority: optional 3Priority: optional
4Section: opie/applications 4Section: opie/applications
5Maintainer: Holger Freyther <zecke@handhelds.org> 5Maintainer: Holger Freyther <zecke@handhelds.org>
6Architecture: arm 6Architecture: arm
7Version: 0.3.4-$SUB_VERSION 7Version: $QPE_VERSION$EXTRAVERSION
8Depends: task-opie-minimal 8Depends: task-opie-minimal
9License: GPL 9License: GPL
10Description: Bluetooth pin application 10Description: Bluetooth pin application
diff --git a/noncore/net/opietooth/blue-pin/pindlgbase.ui b/noncore/net/opietooth/blue-pin/pindlgbase.ui
index 889a25e..6784de7 100644
--- a/noncore/net/opietooth/blue-pin/pindlgbase.ui
+++ b/noncore/net/opietooth/blue-pin/pindlgbase.ui
@@ -1,84 +1,84 @@
1<!DOCTYPE UI><UI> 1<!DOCTYPE UI><UI>
2<class>PinDlgBase</class> 2<class>PinDlgBase</class>
3<author>zecke</author> 3<author>zecke</author>
4<widget> 4<widget>
5 <class>QDialog</class> 5 <class>QDialog</class>
6 <property stdset="1"> 6 <property stdset="1">
7 <name>name</name> 7 <name>name</name>
8 <cstring>Form1</cstring> 8 <cstring>Form1</cstring>
9 </property> 9 </property>
10 <property stdset="1"> 10 <property stdset="1">
11 <name>geometry</name> 11 <name>geometry</name>
12 <rect> 12 <rect>
13 <x>0</x> 13 <x>0</x>
14 <y>0</y> 14 <y>0</y>
15 <width>258</width> 15 <width>254</width>
16 <height>245</height> 16 <height>245</height>
17 </rect> 17 </rect>
18 </property> 18 </property>
19 <property stdset="1"> 19 <property stdset="1">
20 <name>caption</name> 20 <name>caption</name>
21 <string>Please enter pin</string> 21 <string>Please enter pin</string>
22 </property> 22 </property>
23 <vbox> 23 <vbox>
24 <property stdset="1"> 24 <property stdset="1">
25 <name>margin</name> 25 <name>margin</name>
26 <number>11</number> 26 <number>11</number>
27 </property> 27 </property>
28 <property stdset="1"> 28 <property stdset="1">
29 <name>spacing</name> 29 <name>spacing</name>
30 <number>6</number> 30 <number>6</number>
31 </property> 31 </property>
32 <widget>
33 <class>QLabel</class>
34 <property stdset="1">
35 <name>name</name>
36 <cstring>txtStatus</cstring>
37 </property>
38 <property stdset="1">
39 <name>text</name>
40 <string></string>
41 </property>
42 <property stdset="1">
43 <name>textFormat</name>
44 <enum>RichText</enum>
45 </property>
46 </widget>
47 <spacer> 32 <spacer>
48 <property> 33 <property>
49 <name>name</name> 34 <name>name</name>
50 <cstring>Spacer4_2</cstring> 35 <cstring>Spacer4_2</cstring>
51 </property> 36 </property>
52 <property stdset="1"> 37 <property stdset="1">
53 <name>orientation</name> 38 <name>orientation</name>
54 <enum>Vertical</enum> 39 <enum>Vertical</enum>
55 </property> 40 </property>
56 <property stdset="1"> 41 <property stdset="1">
57 <name>sizeType</name> 42 <name>sizeType</name>
58 <enum>Expanding</enum> 43 <enum>Expanding</enum>
59 </property> 44 </property>
60 <property> 45 <property>
61 <name>sizeHint</name> 46 <name>sizeHint</name>
62 <size> 47 <size>
63 <width>20</width> 48 <width>20</width>
64 <height>20</height> 49 <height>20</height>
65 </size> 50 </size>
66 </property> 51 </property>
67 </spacer> 52 </spacer>
68 <widget> 53 <widget>
54 <class>QLabel</class>
55 <property stdset="1">
56 <name>name</name>
57 <cstring>txtStatus</cstring>
58 </property>
59 <property stdset="1">
60 <name>text</name>
61 <string></string>
62 </property>
63 <property stdset="1">
64 <name>textFormat</name>
65 <enum>RichText</enum>
66 </property>
67 </widget>
68 <widget>
69 <class>QLayoutWidget</class> 69 <class>QLayoutWidget</class>
70 <property stdset="1"> 70 <property stdset="1">
71 <name>name</name> 71 <name>name</name>
72 <cstring>Layout6</cstring> 72 <cstring>Layout6</cstring>
73 </property> 73 </property>
74 <vbox> 74 <vbox>
75 <property stdset="1"> 75 <property stdset="1">
76 <name>margin</name> 76 <name>margin</name>
77 <number>0</number> 77 <number>0</number>
78 </property> 78 </property>
79 <property stdset="1"> 79 <property stdset="1">
80 <name>spacing</name> 80 <name>spacing</name>
81 <number>6</number> 81 <number>6</number>
82 </property> 82 </property>
83 <widget> 83 <widget>
84 <class>QLabel</class> 84 <class>QLabel</class>
diff --git a/noncore/net/opietooth/lib/libopietooth1.control b/noncore/net/opietooth/lib/libopietooth1.control
index 20e4b76..9bc9572 100644
--- a/noncore/net/opietooth/lib/libopietooth1.control
+++ b/noncore/net/opietooth/lib/libopietooth1.control
@@ -1,10 +1,10 @@
1Package: libopietooth1 1Package: libopietooth1
2Files: lib/libopietooth1.so* 2Files: lib/libopietooth1.so*
3Priority: optional 3Priority: optional
4Section: libs 4Section: libs
5Maintainer: Maximilian Reiß <max.reiss@gmx.de> 5Maintainer: Maximilian Reiß <max.reiss@gmx.de>
6Architecture: arm 6Architecture: arm
7Replaces: libopietooth 7Replaces: libopietooth
8Depends: libqte2 (>=2.3.4), libopie1, task-bluez 8Depends: libqte2 (>=2.3.4), libopiecore2, task-bluez
9Description: Opie bluetooth library 9Description: Opie bluetooth library
10Version: $QPE_VERSION$EXTRAVERSION 10Version: $QPE_VERSION$EXTRAVERSION
diff --git a/noncore/net/opietooth/manager/opie-bluetoothmanager.control b/noncore/net/opietooth/manager/opie-bluetoothmanager.control
index 4fe1e06..89ab698 100644
--- a/noncore/net/opietooth/manager/opie-bluetoothmanager.control
+++ b/noncore/net/opietooth/manager/opie-bluetoothmanager.control
@@ -1,10 +1,10 @@
1Package: opie-bluetoothmanager 1Package: opie-bluetoothmanager
2Files: plugins/application/libbluetooth-manager.so* bin/bluetooth-manager apps/Settings/bluetooth-manager.desktop pics/opietooth/* 2Files: plugins/application/libbluetooth-manager.so* bin/bluetooth-manager apps/Settings/bluetooth-manager.desktop pics/opietooth/*
3Priority: optional 3Priority: optional
4Section: opie/settings 4Section: opie/settings
5Maintainer: Maximilian Reiß <max.reiss@gmx.de> 5Maintainer: Maximilian Reiß <max.reiss@gmx.de>
6Architecture: arm 6Architecture: arm
7Version: 0.5.4-$SUB_VERSION 7Version: $QPE_VERSION$EXTRAVERSION
8Depends: task-opie-minimal, libopietooth1, opie-bluepin 8Depends: task-opie-minimal, libopietooth1, opie-bluepin
9License: GPL 9License: GPL
10Description: Bluetooth Manager application 10Description: Bluetooth Manager application
diff --git a/noncore/net/wellenreiter/opie-wellenreiter.control b/noncore/net/wellenreiter/opie-wellenreiter.control
index e7bc25d..7dc9c22 100644
--- a/noncore/net/wellenreiter/opie-wellenreiter.control
+++ b/noncore/net/wellenreiter/opie-wellenreiter.control
@@ -1,10 +1,10 @@
1Package: opie-wellenreiter 1Package: opie-wellenreiter
2Files: bin/wellenreiter pics/wellenreiter apps/Applications/wellenreiter.desktop 2Files: bin/wellenreiter pics/wellenreiter apps/Applications/wellenreiter.desktop
3Priority: optional 3Priority: optional
4Section: opie/applications 4Section: opie/applications
5Maintainer: Michael 'Mickey' Lauer <mickeyl@handhelds.org> 5Maintainer: Michael 'Mickey' Lauer <mickeyl@handhelds.org>
6Architecture: arm 6Architecture: arm
7Version: 1.0.3-cvs 7Version: $QPE_VERSION$EXTRAVERSION
8Depends: libqpe1, libpcap0 (>=0.7.2), libopiecore2, libopienet2, libopieui2 8Depends: libqpe1, libpcap0.8 (>=0.7.2), libopiecore2, libopienet2, libopieui2
9Description: A WaveLAN Network Monitor 9Description: A WaveLAN Network Monitor
10 A WaveLAN Network Monitor/Sniffer for the Opie Environment. 10 A WaveLAN Network Monitor/Sniffer for the Opie Environment.
diff --git a/noncore/securityplugins/blueping/bluepingplugin.control b/noncore/securityplugins/blueping/bluepingplugin.control
index 0339996..62562f7 100644
--- a/noncore/securityplugins/blueping/bluepingplugin.control
+++ b/noncore/securityplugins/blueping/bluepingplugin.control
@@ -1,11 +1,11 @@
1Package: opie-multiauth-bluepingplugin 1Package: opie-multiauth-bluepingplugin
2Files: plugins/security/libmultiauthbluepingplugin.so* pics/security/bluepingplugin.png root/etc/suspend-scripts/S50bluetooth 2Files: plugins/security/libmultiauthbluepingplugin.so* pics/security/bluepingplugin.png root/etc/suspend-scripts/S50bluetooth
3Priority: optional 3Priority: optional
4Section: opie/settings 4Section: opie/settings
5Maintainer: Clement Seveillac <clement@nist.gov> 5Maintainer: Clement Seveillac <clement@nist.gov>
6Architecture: arm 6Architecture: arm
7Version: 0.0.2.7 7Version: $QPE_VERSION$EXTRAVERSION
8Depends: libopiecore2, opie-security, bluez-utils (<= 2.3rel-hh5) 8Depends: libopiecore2, opie-security, bluez-utils (<= 2.3rel-hh5)
9Description: Blueping plugin for opie-security authentication. 9Description: Blueping plugin for opie-security authentication.
10 This is a bluetooth-based authentication plugin (you need 10 This is a bluetooth-based authentication plugin (you need
11 to have another Bluetooth device around to use it). 11 to have another Bluetooth device around to use it).
diff --git a/noncore/securityplugins/dummy/dummyplugin.control b/noncore/securityplugins/dummy/dummyplugin.control
index 0ab2491..b4cc5e2 100644
--- a/noncore/securityplugins/dummy/dummyplugin.control
+++ b/noncore/securityplugins/dummy/dummyplugin.control
@@ -1,11 +1,11 @@
1Package: opie-multiauth-dummyplugin 1Package: opie-multiauth-dummyplugin
2Files: plugins/security/libmultiauthdummyplugin.so* pics/security/dummyplugin.png 2Files: plugins/security/libmultiauthdummyplugin.so* pics/security/dummyplugin.png
3Priority: optional 3Priority: optional
4Section: opie/settings 4Section: opie/settings
5Maintainer: Clement Seveillac <clement@nist.gov> 5Maintainer: Clement Seveillac <clement@nist.gov>
6Architecture: arm 6Architecture: arm
7Version: 0.0.2.3 7Version: $QPE_VERSION$EXTRAVERSION
8Depends: libopiecore2, opie-security 8Depends: libopiecore2, opie-security
9Description: Dummy plugin for opie-security authentication. 9Description: Dummy plugin for opie-security authentication.
10 This is a very simple authentication plugin (you just have 10 This is a very simple authentication plugin (you just have
11 to press a button basically), for demonstration purpose. 11 to press a button basically), for demonstration purpose.
diff --git a/noncore/securityplugins/notice/notice.control b/noncore/securityplugins/notice/notice.control
index 8b8c7cd..091ce74 100644
--- a/noncore/securityplugins/notice/notice.control
+++ b/noncore/securityplugins/notice/notice.control
@@ -1,11 +1,11 @@
1Package: opie-multiauth-noticeplugin 1Package: opie-multiauth-noticeplugin
2Files: plugins/security/libmultiauthnoticeplugin.so* pics/security/noticeplugin.png pics/security/noticeplugin_small.png 2Files: plugins/security/libmultiauthnoticeplugin.so* pics/security/noticeplugin.png pics/security/noticeplugin_small.png
3Priority: optional 3Priority: optional
4Section: opie/settings 4Section: opie/settings
5Maintainer: Clement Seveillac <clement@nist.gov> 5Maintainer: Clement Seveillac <clement@nist.gov>
6Architecture: arm 6Architecture: arm
7Version: 0.0.1.6 7Version: $QPE_VERSION$EXTRAVERSION
8Depends: libopiecore2, opie-security 8Depends: libopiecore2, opie-security
9Description: Notice plugin for opie-security authentication. 9Description: Notice plugin for opie-security authentication.
10 It allows you to display e.g. a notice from your legal departement. 10 It allows you to display e.g. a notice from your legal departement.
11 11
diff --git a/noncore/securityplugins/pin/pin.control b/noncore/securityplugins/pin/pin.control
index 3709d08..51c3f08 100644
--- a/noncore/securityplugins/pin/pin.control
+++ b/noncore/securityplugins/pin/pin.control
@@ -1,11 +1,11 @@
1Package: opie-multiauth-pinplugin 1Package: opie-multiauth-pinplugin
2Files: plugins/security/libmultiauthpinplugin.so* pics/security/pinplugin.png 2Files: plugins/security/libmultiauthpinplugin.so* pics/security/pinplugin.png
3Priority: optional 3Priority: optional
4Section: opie/settings 4Section: opie/settings
5Maintainer: Clement Seveillac <clement@nist.gov> 5Maintainer: Clement Seveillac <clement@nist.gov>
6Architecture: arm 6Architecture: arm
7Version: 0.0.2.6 7Version: $QPE_VERSION$EXTRAVERSION
8Depends: libopiecore2, opie-security 8Depends: libopiecore2, opie-security
9Description: PIN plugin for opie-security authentication. 9Description: PIN plugin for opie-security authentication.
10 Simple PIN-based authentication plugin (replicate the functionality 10 Simple PIN-based authentication plugin (replicate the functionality
11 Qtopia has, or Opie used to have, without plugins). 11 Qtopia has, or Opie used to have, without plugins).
diff --git a/noncore/settings/networksettings2/activatevpn.cpp b/noncore/settings/networksettings2/activatevpn.cpp
index 2bdef0a..b75e623 100644
--- a/noncore/settings/networksettings2/activatevpn.cpp
+++ b/noncore/settings/networksettings2/activatevpn.cpp
@@ -9,45 +9,39 @@ public :
9 9
10 MyCheckListItem( NodeCollection * N, QListView * V ); 10 MyCheckListItem( NodeCollection * N, QListView * V );
11 11
12 NodeCollection * NC; 12 NodeCollection * NC;
13 13
14}; 14};
15 15
16MyCheckListItem::MyCheckListItem( NodeCollection * N, QListView * V ): 16MyCheckListItem::MyCheckListItem( NodeCollection * N, QListView * V ):
17 QCheckListItem( V, N->name() ) { 17 QCheckListItem( V, N->name() ) {
18 NC = N; 18 NC = N;
19} 19}
20 20
21ActivateVPN::ActivateVPN( void ) : 21ActivateVPN::ActivateVPN( void ) :
22 ActivateVPNGUI( 0, 0, TRUE ), NSD() { 22 ActivateVPNGUI( 0, 0, TRUE ), NSD() {
23 23
24 QCheckListItem * CI; 24 QCheckListItem * CI;
25 printf( "%d\n", __LINE__ );
26 VPN_LV->clear(); 25 VPN_LV->clear();
27 VPN_LV->header()->hide(); 26 VPN_LV->header()->hide();
28 printf( "%d\n", __LINE__ );
29 27
30 for( QDictIterator<NodeCollection> it(NSResources->connections()); 28 for( QDictIterator<NodeCollection> it(NSResources->connections());
31 it.current(); 29 it.current();
32 ++it ) { 30 ++it ) {
33 printf( "%d\n", __LINE__ );
34 if( it.current()->triggeredBy( "vpn" ) ) { 31 if( it.current()->triggeredBy( "vpn" ) ) {
35 printf( "%d\n", __LINE__ );
36 CI = new MyCheckListItem( it.current(), VPN_LV ); 32 CI = new MyCheckListItem( it.current(), VPN_LV );
37 printf( "%d\n", __LINE__ );
38 } 33 }
39 printf( "%d\n", __LINE__ );
40 } 34 }
41} 35}
42 36
43ActivateVPN::~ActivateVPN( void ) { 37ActivateVPN::~ActivateVPN( void ) {
44} 38}
45 39
46void ActivateVPN::SLOT_ChangedVPNSetting( QListViewItem * I ) { 40void ActivateVPN::SLOT_ChangedVPNSetting( QListViewItem * I ) {
47 41
48 MyCheckListItem * MI = (MyCheckListItem *)I; 42 MyCheckListItem * MI = (MyCheckListItem *)I;
49 43
50 printf( "%s : %d\n", 44 printf( "%s : %d\n",
51 MI->text(0).latin1(), 45 MI->text(0).latin1(),
52 MI->isOn() ); 46 MI->isOn() );
53} 47}
diff --git a/noncore/settings/networksettings2/bluetooth/bluetooth.pro b/noncore/settings/networksettings2/bluetooth/bluetooth.pro
index 8170d46..2e3b5bb 100644
--- a/noncore/settings/networksettings2/bluetooth/bluetooth.pro
+++ b/noncore/settings/networksettings2/bluetooth/bluetooth.pro
@@ -1,22 +1,26 @@
1TEMPLATE = lib 1TEMPLATE = lib
2CONFIG += qt warn_on release 2CONFIG += qt warn_on release
3DESTDIR = $(OPIEDIR)/plugins/networksettings2 3DESTDIR = $(OPIEDIR)/plugins/networksettings2
4 HEADERS = bluetooth_NN.h \ 4 HEADERS = bluetoothBNEP_NN.h \
5 bluetoothBNEP_NNI.h \ 5 bluetoothBNEP_NNI.h \
6 bluetoothRFCOMM_NN.h \
6 bluetoothRFCOMM_NNI.h \ 7 bluetoothRFCOMM_NNI.h \
7 bluetoothBNEPedit.h \ 8 bluetoothBNEPedit.h \
9 bluetoothRFCOMMrun.h \
8 bluetoothRFCOMMedit.h 10 bluetoothRFCOMMedit.h
9 SOURCES = bluetooth_NN.cpp \ 11 SOURCES = bluetoothBNEP_NN.cpp \
10 bluetoothBNEP_NNI.cpp \ 12 bluetoothBNEP_NNI.cpp \
13 bluetoothRFCOMM_NN.cpp \
11 bluetoothRFCOMM_NNI.cpp \ 14 bluetoothRFCOMM_NNI.cpp \
12 bluetoothBNEPedit.cpp \ 15 bluetoothBNEPedit.cpp \
13 bluetoothBNEPrun.cpp \ 16 bluetoothBNEPrun.cpp \
17 bluetoothRFCOMMrun.cpp \
14 bluetoothRFCOMMedit.cpp 18 bluetoothRFCOMMedit.cpp
15 INCLUDEPATH+= $(OPIEDIR)/include ../ ../networksettings2 19 INCLUDEPATH+= $(OPIEDIR)/include ../ ../networksettings2 ../opietooth2
16 DEPENDPATH+= $(OPIEDIR)/include ../ ../networksettings2 20 DEPENDPATH+= $(OPIEDIR)/include ../ ../networksettings2 ../opietooth2
17LIBS += -lqpe 21LIBS += -lqpe -lopietooth2
18 INTERFACES= bluetoothBNEPGUI.ui bluetoothRFCOMMGUI.ui 22 INTERFACES= bluetoothBNEPGUI.ui bluetoothRFCOMMGUI.ui
19 TARGET = bluetooth 23 TARGET = bluetooth
20 VERSION = 1.0.0 24 VERSION = 1.0.0
21 25
22include( $(OPIEDIR)/include.pro ) 26include( $(OPIEDIR)/include.pro )
diff --git a/noncore/settings/networksettings2/bluetooth/bluetoothBNEP_NNI.cpp b/noncore/settings/networksettings2/bluetooth/bluetoothBNEP_NNI.cpp
index 398dcdc..42b2515 100644
--- a/noncore/settings/networksettings2/bluetooth/bluetoothBNEP_NNI.cpp
+++ b/noncore/settings/networksettings2/bluetooth/bluetoothBNEP_NNI.cpp
@@ -1,19 +1,19 @@
1#include "bluetoothBNEPedit.h" 1#include "bluetoothBNEPedit.h"
2#include "bluetoothBNEP_NNI.h" 2#include "bluetoothBNEP_NNI.h"
3#include "bluetooth_NN.h" 3#include "bluetoothBNEP_NN.h"
4 4
5ABluetoothBNEP::ABluetoothBNEP( BluetoothBNEPNetNode * PNN ) : 5ABluetoothBNEP::ABluetoothBNEP( BluetoothBNEPNetNode * PNN ) :
6 ANetNodeInstance( PNN ), Data() { 6 ANetNodeInstance( PNN ), Data() {
7 GUI = 0; 7 GUI = 0;
8 RT = 0; 8 RT = 0;
9 Data.AllowAll = 1; 9 Data.AllowAll = 1;
10} 10}
11 11
12void ABluetoothBNEP::setSpecificAttribute( QString & S, QString & A ) { 12void ABluetoothBNEP::setSpecificAttribute( QString & S, QString & A ) {
13 if( S == "bdaddress" ) { 13 if( S == "bdaddress" ) {
14 Data.BDAddress << A; 14 Data.BDAddress << A;
15 } else if ( S == "allowall" ) { 15 } else if ( S == "allowall" ) {
16 Data.AllowAll = 1; 16 Data.AllowAll = 1;
17 } 17 }
18} 18}
19 19
diff --git a/noncore/settings/networksettings2/bluetooth/bluetoothBNEPdata.h b/noncore/settings/networksettings2/bluetooth/bluetoothBNEPdata.h
index 03c6903..f52a2c5 100644
--- a/noncore/settings/networksettings2/bluetooth/bluetoothBNEPdata.h
+++ b/noncore/settings/networksettings2/bluetooth/bluetoothBNEPdata.h
@@ -1,11 +1,14 @@
1#ifndef BLUETOOTHBNEP_DATA_H 1#ifndef BLUETOOTHBNEP_DATA_H
2#define BLUETOOTHBNEP_DATA_H 2#define BLUETOOTHBNEP_DATA_H
3 3
4#include <qstringlist.h> 4#include <qstringlist.h>
5 5
6typedef struct BluetoothBNEPData { 6class BluetoothBNEPData {
7
8public :
9
7 bool AllowAll; 10 bool AllowAll;
8 QStringList BDAddress; 11 QStringList BDAddress;
9} BluetoothBNEPData_t; 12};
10 13
11#endif 14#endif
diff --git a/noncore/settings/networksettings2/bluetooth/bluetoothBNEPrun.cpp b/noncore/settings/networksettings2/bluetooth/bluetoothBNEPrun.cpp
index 24e4b7b..9d4ae97 100644
--- a/noncore/settings/networksettings2/bluetooth/bluetoothBNEPrun.cpp
+++ b/noncore/settings/networksettings2/bluetooth/bluetoothBNEPrun.cpp
@@ -1,249 +1,161 @@
1#include <qfile.h> 1#include <qfile.h>
2#include <qfileinfo.h> 2#include <qfileinfo.h>
3#include <qtextstream.h> 3#include <qtextstream.h>
4#include <resources.h> 4#include <resources.h>
5#include "bluetoothBNEPrun.h" 5#include "bluetoothBNEPrun.h"
6 6
7QDict<QString> * BluetoothBNEPRun::PANConnections = 0; 7BluetoothBNEPRun::BluetoothBNEPRun( ANetNodeInstance * NNI,
8 BluetoothBNEPData & D ) :
9 RuntimeInfo( NNI ),
10 Data( D),
11 Pat( "bnep[0-6]" ) {
12 OT = 0;
13}
8 14
9void BluetoothBNEPRun::detectState( NodeCollection * NC ) { 15BluetoothBNEPRun::~BluetoothBNEPRun( void ) {
10 // unavailable : no card found 16 if( OT ) {
11 // available : card found and assigned to us or free 17 OTGateway::releaseOTGateway();
12 // up : card found and assigned to us and up 18 }
13 QString S = QString( "/tmp/profile-%1.up" ).arg(NC->number()); 19}
14 System & Sys = NSResources->system();
15 InterfaceInfo * Run;
16 QFile F( S );
17
18 Log(("Detecting for %s\n", NC->name().latin1() ));
19
20 if( F.open( IO_ReadOnly ) ) {
21 // could open file -> read interface and assign
22 QString X;
23 bool accepted = 0;
24 QTextStream TS(&F);
25 X = TS.readLine();
26 Log(("%s exists : %s\n", S.latin1(), X.latin1() ));
27 // find interface
28 if( handlesInterface( X ) ) {
29
30 Log(("Handles interface %s, PANC %p\n", X.latin1(), PANConnections ));
31 if( PANConnections == 0 ) {
32 // load connections that are active
33 // format : bnep0 00:60:57:02:71:A2 PANU
34 FILE * OutputOfCmd = popen( "pand --show", "r" ) ;
35
36 PANConnections = new QDict<QString>;
37
38 if( OutputOfCmd ) {
39 char ch;
40 // could fork
41 // read all data
42 QString Line = "";
43 while( 1 ) {
44 if( fread( &ch, 1, 1, OutputOfCmd ) < 1 ) {
45 // eof
46 break;
47 }
48 if( ch == '\n' || ch == '\r' ) {
49 if( ! Line.isEmpty() ) {
50 if( Line.startsWith( "bnep" ) ) {
51 QStringList SL = QStringList::split( " ", Line );
52 Log(("Detected PAN %s %s\n",
53 SL[0].latin1(), SL[1].latin1() ));
54 PANConnections->insert( SL[0], new QString(SL[1]));
55 }
56 Line="";
57 }
58 } else {
59 Line += ch;
60 }
61 }
62 }
63 20
64 pclose( OutputOfCmd ); 21State_t BluetoothBNEPRun::detectState( void ) {
65 }
66 22
67 // check if this runtime allows connection to node 23 /*
68 if( ! Data.AllowAll ) {
69 // has addresses
70 for ( QStringList::Iterator it = Data.BDAddress.begin();
71 ! accepted && it != Data.BDAddress.end();
72 ++ it ) {
73 for( QDictIterator<QString> it2( *(PANConnections) );
74 it2.current();
75 ++ it2 ) {
76 if( X == it2.currentKey() &&
77 (*it) == *(it2.current())
78 ) {
79 // found
80 Log(("%s accepts connections to %s\n",
81 NC->name().latin1(),
82 it2.current()->latin1() ));
83 accepted = 1;
84 break;
85 }
86 }
87 }
88 } else {
89 Log(("%s accepts any connection\n", NC->name().latin1() ));
90 // accept any
91 accepted = 1;
92 }
93 24
94 if( accepted ) { 25 need to detect
95 // matches and is allowed for this node 26
96 for( QDictIterator<InterfaceInfo> It(Sys.interfaces()); 27 1. for any PAN connection that is found if that
97 It.current(); 28 PAN is connected.
98 ++It ) { 29
99 Run = It.current(); 30 if it is connected it is not available (since we do
100 if( X == Run->Name ) { 31 not manage IP settings and we are called to detect
101 Log(("%s Assigned %p\n", NC->name().latin1(), Run )); 32 the state we knwo that we do not have an UP connection)
102 Run->assignNode( netNode() ); 33
103 assignInterface( Run ); 34 2. if it not connected and we allow any connection we
104 NC->setCurrentState( IsUp ); 35 are available or if that PAN connection is to a device
105 return; 36 with a correct address
106 } 37
107 } 38 3. if it is not connected and the address do not match or
108 } 39 we do not accept any address, we are Unavailable but
109 } 40 not DOWN. I.e a new connection could perhaps be created
110 } 41
111 42 */
112 Log(("Assigned %p\n", assignedInterface() )); 43
113 if( ( Run = assignedInterface() ) ) { 44 if( ! OT ) {
114 // we already have an interface assigned -> still present ? 45 OT = OTGateway::getOTGateway();
115 if( ! Run->IsUp ) {
116 // usb is still free -> keep assignment
117 NC->setCurrentState( Available );
118 return;
119 } // else interface is up but NOT us -> some other profile
120 } 46 }
121 47
122 // nothing (valid) assigned to us 48 if( ! OT->isEnabled() ) {
123 assignInterface( 0 ); 49 return Unavailable;
124
125 // find possible interface
126 for( QDictIterator<InterfaceInfo> It(Sys.interfaces());
127 It.current();
128 ++It ) {
129 Run = It.current();
130
131 Log(("%s %d %d=%d %d\n",
132 Run->Name.latin1(),
133 handlesInterface( Run->Name ),
134 Run->CardType, ARPHRD_ETHER,
135 ! Run->IsUp ));
136
137 if( handlesInterface( Run->Name ) &&
138 Run->CardType == ARPHRD_ETHER &&
139 ! Run->IsUp
140 ) {
141 Log(("Released(OFF)\n" ));
142 // proper type, and Not UP -> free
143 NC->setCurrentState( Off );
144 return;
145 }
146 } 50 }
147 // no free found
148 Log(("None available\n" ));
149 51
150 NC->setCurrentState( Unavailable ); 52 // if there is a PAN connection that is UP but not
53 // yet configured (no ifup) the we are available
54 return ( hasFreePANConnection() ) ? Available : Unknown;
151} 55}
152 56
153bool BluetoothBNEPRun::setState( NodeCollection * NC, Action_t A, bool ) { 57QString BluetoothBNEPRun::setMyState( NodeCollection * NC, Action_t A, bool ) {
154 58
155 // we only handle activate and deactivate 59 if( A == Activate ) {
156 switch( A ) { 60 if( hasFreePANConnection( 1 ) ) {
157 case Activate : 61 // we have now an assignedinterface
158 { 62 } else {
159 if( NC->currentState() != Off ) { 63 return QString("TODO : Start PAND");
160 return 0; 64 }
161 } 65
162 InterfaceInfo * N = getInterface(); 66 Log(( "Assigned interface" ));
163 if( ! N ) { 67 NC->setCurrentState( Available );
164 // no interface available 68
165 NC->setCurrentState( Unavailable ); 69 return QString();
166 return 0;
167 }
168 // because we were OFF the interface
169 // we get back is NOT assigned
170 N->assignNode( netNode() );
171 assignInterface( N );
172 Log(("Assing %p\n", N ));
173 NC->setCurrentState( Available );
174 return 1;
175 }
176 case Deactivate :
177 if( NC->currentState() == IsUp ) {
178 // bring down first
179 if( ! connection()->setState( Down ) )
180 // could not ...
181 return 0;
182 } else if( NC->currentState() != Available ) {
183 return 1;
184 }
185 assignedInterface()->assignNode( 0 ); // release
186 assignInterface( 0 );
187 NC->setCurrentState( Off );
188 return 1;
189 default :
190 // FT
191 break;
192 } 70 }
193 return 0; 71
72 if( A == Deactivate ) {
73 // nothing to do
74 NC->setCurrentState( Off );
75 return QString();
76 }
77 return QString();
194} 78}
195 79
196bool BluetoothBNEPRun::canSetState( State_t Curr , Action_t A ) { 80bool BluetoothBNEPRun::handlesInterface( const QString & S ) {
197 // we only handle up down activate and deactivate 81 return Pat.match( S ) >= 0;
198 switch( A ) { 82}
199 case Activate : 83
200 { // at least available 84bool BluetoothBNEPRun::handlesInterface( InterfaceInfo * I ) {
201 if( Curr == Available ) { 85 return handlesInterface( I->Name );
202 return 1; 86}
203 } 87
204 // or we can make one available 88bool BluetoothBNEPRun::hasFreePANConnection( bool Grab ) {
205 InterfaceInfo * N = getInterface(); 89
206 if( ! N || N->assignedNode() != 0 ) { 90 if( ! OT ) {
207 // non available or assigned 91 OT = OTGateway::getOTGateway();
208 return 0; 92 }
93
94 // load PAN connections
95 OTPANConnection * C;
96 InterfaceInfo * Run;
97 InterfaceInfo * Candidate = 0; // reuse this interface
98 PANConnectionVector Conns = OT->getPANConnections();
99 System & Sys = NSResources->system();
100 bool IsValid;
101
102 for( unsigned int i = 0;
103 i < Conns.count();
104 i ++ ) {
105 C = Conns[i];
106
107 if( Data.AllowAll ) {
108 // we allow all
109 IsValid = 1;
110 } else {
111 // is this PAN connection connecting to a Peer
112 // we allow ?
113 IsValid = 0;
114 for ( QStringList::Iterator it = Data.BDAddress.begin();
115 it != Data.BDAddress.end();
116 ++ it ) {
117 if( C->ConnectedTo == (*it) ) {
118 // this is a connection we could accept
119 IsValid = 1;
120 break;
209 } 121 }
210 return 1;
211 } 122 }
212 case Deactivate : 123 }
213 return ( Curr >= Available ); 124
214 default : 125 if( ! IsValid ) {
215 // FT 126 Log(("%s to %s not acceptable\n",
216 break; 127 C->Device.latin1(),
128 C->ConnectedTo.latin1() ));
129 // don't bother checking this address
130 // it is not acceptable
131 continue;
132 }
133
134 // is this PAN connection available to us ?
135 Run = Sys.findInterface( C->Device );
136
137 if( Run && Run->IsUp ) {
138 // this PAN connection is up
139 Log(("%s acceptable but unavailable\n",
140 C->Device.latin1() ));
141 // find others
142 continue;
143 }
144
145 // we at least have a possible interface
146 if( ! Candidate ) {
147 Candidate = Run;
148 }
217 } 149 }
218 return 0;
219}
220 150
221// get interface that is free or assigned to us 151 if( Candidate ) {
222InterfaceInfo * BluetoothBNEPRun::getInterface( void ) { 152 if ( Grab ) {
223 153 netNode()->connection()->assignInterface( Candidate );
224 System & S = NSResources->system();
225 InterfaceInfo * best = 0, * Run;
226
227 for( QDictIterator<InterfaceInfo> It(S.interfaces());
228 It.current();
229 ++It ) {
230 Run = It.current();
231 if( handlesInterface( Run->Name ) &&
232 Run->CardType == ARPHRD_ETHER
233 ) {
234 // this is a bluetooth card
235 if( Run->assignedNode() == netNode() ) {
236 // assigned to us
237 return Run;
238 } else if( Run->assignedNode() == 0 ) {
239 // free
240 best = Run;
241 }
242 } 154 }
155 return 1;
243 } 156 }
244 return best; // can be 0
245}
246 157
247bool BluetoothBNEPRun::handlesInterface( const QString & S ) { 158 // no free PAN
248 return Pat.match( S ) >= 0; 159 return 0;
249} 160}
161
diff --git a/noncore/settings/networksettings2/bluetooth/bluetoothBNEPrun.h b/noncore/settings/networksettings2/bluetooth/bluetoothBNEPrun.h
index ce03cbb..a05a7a2 100644
--- a/noncore/settings/networksettings2/bluetooth/bluetoothBNEPrun.h
+++ b/noncore/settings/networksettings2/bluetooth/bluetoothBNEPrun.h
@@ -1,34 +1,35 @@
1#include <asdevice.h> 1#include <netnode.h>
2#include "bluetoothBNEPdata.h" 2#include "bluetoothBNEPdata.h"
3 3
4class BluetoothBNEPRun : public AsDevice { 4#include <OTGateway.h>
5using namespace Opietooth2;
6
7class BluetoothBNEPRun : public RuntimeInfo {
5 8
6public : 9public :
7 10
8 BluetoothBNEPRun( ANetNodeInstance * NNI, 11 BluetoothBNEPRun( ANetNodeInstance * NNI,
9 BluetoothBNEPData & D ) : 12 BluetoothBNEPData & D );
10 AsDevice( NNI ), 13 virtual ~BluetoothBNEPRun( void );
11 Data( D), 14
12 Pat( "bnep[0-6]" ) 15 // i am a device
13 { } 16 virtual RuntimeInfo * device( void )
17 { return this; }
14 18
15 virtual AsDevice * asDevice( void ) 19 bool handlesInterface( const QString & );
16 { return (AsDevice *)this; } 20 bool handlesInterface( InterfaceInfo * );
17 21
18 virtual AsDevice * device( void ) 22 State_t detectState( void );
19 { return asDevice(); }
20 23
21protected : 24protected :
22 25
23 void detectState( NodeCollection * ); 26 QString setMyState( NodeCollection * , Action_t, bool );
24 bool setState( NodeCollection * , Action_t, bool );
25 bool canSetState( State_t , Action_t );
26 bool handlesInterface( const QString & );
27 27
28private : 28private :
29 29
30 InterfaceInfo * getInterface( void ); 30 bool hasFreePANConnection( bool Grab = 0 );
31
31 BluetoothBNEPData & Data; 32 BluetoothBNEPData & Data;
32 static QDict<QString> * PANConnections; 33 OTGateway * OT;
33 QRegExp Pat; 34 QRegExp Pat;
34}; 35};
diff --git a/noncore/settings/networksettings2/bluetooth/bluetoothRFCOMMGUI.ui b/noncore/settings/networksettings2/bluetooth/bluetoothRFCOMMGUI.ui
index 2754a70..7f6565a 100644
--- a/noncore/settings/networksettings2/bluetooth/bluetoothRFCOMMGUI.ui
+++ b/noncore/settings/networksettings2/bluetooth/bluetoothRFCOMMGUI.ui
@@ -1,131 +1,331 @@
1<!DOCTYPE UI><UI> 1<!DOCTYPE UI><UI>
2<class>BluetoothRFCOMMGUI</class> 2<class>BluetoothRFCOMMGUI</class>
3<widget> 3<widget>
4 <class>QWidget</class> 4 <class>QWidget</class>
5 <property stdset="1"> 5 <property stdset="1">
6 <name>name</name> 6 <name>name</name>
7 <cstring>BluetoothRFCOMM_FRM</cstring> 7 <cstring>BluetoothRFCOMM_FRM</cstring>
8 </property> 8 </property>
9 <property stdset="1"> 9 <property stdset="1">
10 <name>geometry</name> 10 <name>geometry</name>
11 <rect> 11 <rect>
12 <x>0</x> 12 <x>0</x>
13 <y>0</y> 13 <y>0</y>
14 <width>283</width> 14 <width>488</width>
15 <height>199</height> 15 <height>604</height>
16 </rect> 16 </rect>
17 </property> 17 </property>
18 <property stdset="1"> 18 <property stdset="1">
19 <name>caption</name> 19 <name>caption</name>
20 <string>Bluetooth-rfcomm</string> 20 <string>Bluetooth-rfcomm</string>
21 </property> 21 </property>
22 <property> 22 <property>
23 <name>layoutMargin</name> 23 <name>layoutMargin</name>
24 </property> 24 </property>
25 <property> 25 <property>
26 <name>layoutSpacing</name> 26 <name>layoutSpacing</name>
27 </property> 27 </property>
28 <vbox> 28 <vbox>
29 <property stdset="1"> 29 <property stdset="1">
30 <name>margin</name> 30 <name>margin</name>
31 <number>2</number> 31 <number>0</number>
32 </property> 32 </property>
33 <property stdset="1"> 33 <property stdset="1">
34 <name>spacing</name> 34 <name>spacing</name>
35 <number>2</number> 35 <number>3</number>
36 </property> 36 </property>
37 <widget> 37 <widget>
38 <class>QLabel</class>
39 <property stdset="1">
40 <name>name</name>
41 <cstring>TextLabel5_2</cstring>
42 </property>
43 <property stdset="1">
44 <name>text</name>
45 <string>Selected devices with gprs capability</string>
46 </property>
47 <property stdset="1">
48 <name>alignment</name>
49 <set>WordBreak|AlignVCenter|AlignLeft</set>
50 </property>
51 <property>
52 <name>wordwrap</name>
53 </property>
54 </widget>
55 <widget>
38 <class>QLayoutWidget</class> 56 <class>QLayoutWidget</class>
39 <property stdset="1"> 57 <property stdset="1">
40 <name>name</name> 58 <name>name</name>
41 <cstring>Layout4</cstring> 59 <cstring>Layout8</cstring>
60 </property>
61 <property>
62 <name>layoutSpacing</name>
42 </property> 63 </property>
43 <hbox> 64 <hbox>
44 <property stdset="1"> 65 <property stdset="1">
45 <name>margin</name> 66 <name>margin</name>
46 <number>0</number> 67 <number>0</number>
47 </property> 68 </property>
48 <property stdset="1"> 69 <property stdset="1">
49 <name>spacing</name> 70 <name>spacing</name>
50 <number>6</number> 71 <number>3</number>
51 </property> 72 </property>
52 <widget> 73 <widget>
53 <class>QLabel</class> 74 <class>QLabel</class>
54 <property stdset="1"> 75 <property stdset="1">
55 <name>name</name> 76 <name>name</name>
56 <cstring>TextLabel4</cstring> 77 <cstring>TextLabel5</cstring>
57 </property> 78 </property>
58 <property stdset="1"> 79 <property stdset="1">
59 <name>text</name> 80 <name>text</name>
60 <string>Name</string> 81 <string>Address</string>
61 </property> 82 </property>
62 </widget> 83 </widget>
63 <widget> 84 <widget>
64 <class>QLineEdit</class> 85 <class>QLineEdit</class>
65 <property stdset="1"> 86 <property stdset="1">
66 <name>name</name> 87 <name>name</name>
67 <cstring>Name_LE</cstring> 88 <cstring>Address_LE</cstring>
89 </property>
90 </widget>
91 <widget>
92 <class>QToolButton</class>
93 <property stdset="1">
94 <name>name</name>
95 <cstring>FindDevice_TB</cstring>
96 </property>
97 <property stdset="1">
98 <name>text</name>
99 <string>...</string>
68 </property> 100 </property>
69 </widget> 101 </widget>
70 </hbox> 102 </hbox>
71 </widget> 103 </widget>
72 <widget> 104 <widget>
73 <class>QLabel</class> 105 <class>QLayoutWidget</class>
74 <property stdset="1"> 106 <property stdset="1">
75 <name>name</name> 107 <name>name</name>
76 <cstring>TextLabel3</cstring> 108 <cstring>Layout7</cstring>
77 </property> 109 </property>
78 <property stdset="1"> 110 <property>
79 <name>text</name> 111 <name>layoutSpacing</name>
80 <string>Description</string>
81 </property>
82 </widget>
83 <widget>
84 <class>QMultiLineEdit</class>
85 <property stdset="1">
86 <name>name</name>
87 <cstring>Description_LE</cstring>
88 </property> 112 </property>
113 <hbox>
114 <property stdset="1">
115 <name>margin</name>
116 <number>0</number>
117 </property>
118 <property stdset="1">
119 <name>spacing</name>
120 <number>3</number>
121 </property>
122 <widget>
123 <class>QLabel</class>
124 <property stdset="1">
125 <name>name</name>
126 <cstring>TextLabel2</cstring>
127 </property>
128 <property stdset="1">
129 <name>text</name>
130 <string>Channel</string>
131 </property>
132 </widget>
133 <widget>
134 <class>QSpinBox</class>
135 <property stdset="1">
136 <name>name</name>
137 <cstring>Channel_SB</cstring>
138 </property>
139 <property stdset="1">
140 <name>sizePolicy</name>
141 <sizepolicy>
142 <hsizetype>0</hsizetype>
143 <vsizetype>0</vsizetype>
144 </sizepolicy>
145 </property>
146 <property stdset="1">
147 <name>minValue</name>
148 <number>1</number>
149 </property>
150 </widget>
151 <widget>
152 <class>QLabel</class>
153 <property stdset="1">
154 <name>name</name>
155 <cstring>TextLabel2_2</cstring>
156 </property>
157 <property stdset="1">
158 <name>text</name>
159 <string>Name</string>
160 </property>
161 </widget>
162 <widget>
163 <class>QLabel</class>
164 <property stdset="1">
165 <name>name</name>
166 <cstring>Name_LBL</cstring>
167 </property>
168 <property stdset="1">
169 <name>sizePolicy</name>
170 <sizepolicy>
171 <hsizetype>7</hsizetype>
172 <vsizetype>1</vsizetype>
173 </sizepolicy>
174 </property>
175 <property stdset="1">
176 <name>frameShape</name>
177 <enum>Box</enum>
178 </property>
179 <property stdset="1">
180 <name>indent</name>
181 <number>0</number>
182 </property>
183 </widget>
184 </hbox>
89 </widget> 185 </widget>
90 <widget> 186 <widget>
91 <class>QLayoutWidget</class> 187 <class>QLayoutWidget</class>
92 <property stdset="1"> 188 <property stdset="1">
93 <name>name</name> 189 <name>name</name>
94 <cstring>Layout5</cstring> 190 <cstring>Layout5</cstring>
95 </property> 191 </property>
192 <property>
193 <name>layoutSpacing</name>
194 </property>
96 <hbox> 195 <hbox>
97 <property stdset="1"> 196 <property stdset="1">
98 <name>margin</name> 197 <name>margin</name>
99 <number>0</number> 198 <number>0</number>
100 </property> 199 </property>
101 <property stdset="1"> 200 <property stdset="1">
102 <name>spacing</name> 201 <name>spacing</name>
103 <number>6</number> 202 <number>3</number>
104 </property> 203 </property>
105 <widget> 204 <widget>
106 <class>QCheckBox</class> 205 <class>QLabel</class>
107 <property stdset="1"> 206 <property stdset="1">
108 <name>name</name> 207 <name>name</name>
109 <cstring>Automatic_CB</cstring> 208 <cstring>TextLabel7</cstring>
209 </property>
210 <property stdset="1">
211 <name>sizePolicy</name>
212 <sizepolicy>
213 <hsizetype>7</hsizetype>
214 <vsizetype>1</vsizetype>
215 </sizepolicy>
110 </property> 216 </property>
111 <property stdset="1"> 217 <property stdset="1">
112 <name>text</name> 218 <name>text</name>
113 <string>Start automatically</string> 219 <string>Addresses</string>
220 </property>
221 <property stdset="1">
222 <name>alignment</name>
223 <set>AlignVCenter|AlignLeft</set>
224 </property>
225 <property>
226 <name>vAlign</name>
227 </property>
228 </widget>
229 <widget>
230 <class>QToolButton</class>
231 <property stdset="1">
232 <name>name</name>
233 <cstring>Add_TB</cstring>
234 </property>
235 <property stdset="1">
236 <name>text</name>
237 <string>...</string>
114 </property> 238 </property>
115 </widget> 239 </widget>
116 <widget> 240 <widget>
117 <class>QCheckBox</class> 241 <class>QToolButton</class>
118 <property stdset="1"> 242 <property stdset="1">
119 <name>name</name> 243 <name>name</name>
120 <cstring>Confirm_CB</cstring> 244 <cstring>Remove_TB</cstring>
121 </property> 245 </property>
122 <property stdset="1"> 246 <property stdset="1">
123 <name>text</name> 247 <name>text</name>
124 <string>Confirm before start</string> 248 <string>...</string>
125 </property> 249 </property>
126 </widget> 250 </widget>
127 </hbox> 251 </hbox>
128 </widget> 252 </widget>
253 <widget>
254 <class>QListView</class>
255 <column>
256 <property>
257 <name>text</name>
258 <string>Name</string>
259 </property>
260 <property>
261 <name>clickable</name>
262 <bool>true</bool>
263 </property>
264 <property>
265 <name>resizeable</name>
266 <bool>true</bool>
267 </property>
268 </column>
269 <column>
270 <property>
271 <name>text</name>
272 <string>Channel</string>
273 </property>
274 <property>
275 <name>clickable</name>
276 <bool>true</bool>
277 </property>
278 <property>
279 <name>resizeable</name>
280 <bool>true</bool>
281 </property>
282 </column>
283 <column>
284 <property>
285 <name>text</name>
286 <string>Address</string>
287 </property>
288 <property>
289 <name>clickable</name>
290 <bool>true</bool>
291 </property>
292 <property>
293 <name>resizeable</name>
294 <bool>true</bool>
295 </property>
296 </column>
297 <property stdset="1">
298 <name>name</name>
299 <cstring>Addresses_LV</cstring>
300 </property>
301 <property stdset="1">
302 <name>allColumnsShowFocus</name>
303 <bool>true</bool>
304 </property>
305 </widget>
129 </vbox> 306 </vbox>
130</widget> 307</widget>
308<connections>
309 <connection>
310 <sender>Add_TB</sender>
311 <signal>clicked()</signal>
312 <receiver>BluetoothRFCOMM_FRM</receiver>
313 <slot>SLOT_AddServer()</slot>
314 </connection>
315 <connection>
316 <sender>Remove_TB</sender>
317 <signal>clicked()</signal>
318 <receiver>BluetoothRFCOMM_FRM</receiver>
319 <slot>SLOT_RemoveServer()</slot>
320 </connection>
321 <connection>
322 <sender>FindDevice_TB</sender>
323 <signal>clicked()</signal>
324 <receiver>BluetoothRFCOMM_FRM</receiver>
325 <slot>SLOT_FindDevice()</slot>
326 </connection>
327 <slot access="public">SLOT_AddServer()</slot>
328 <slot access="public">SLOT_RemoveServer()</slot>
329 <slot access="public">SLOT_FindDevice()</slot>
330</connections>
131</UI> 331</UI>
diff --git a/noncore/settings/networksettings2/bluetooth/bluetoothRFCOMM_NNI.cpp b/noncore/settings/networksettings2/bluetooth/bluetoothRFCOMM_NNI.cpp
index 7ec8288..d19386e 100644
--- a/noncore/settings/networksettings2/bluetooth/bluetoothRFCOMM_NNI.cpp
+++ b/noncore/settings/networksettings2/bluetooth/bluetoothRFCOMM_NNI.cpp
@@ -1,29 +1,48 @@
1#include "bluetoothRFCOMMedit.h" 1#include "bluetoothRFCOMMedit.h"
2#include "bluetoothRFCOMM_NNI.h" 2#include "bluetoothRFCOMM_NNI.h"
3#include "bluetooth_NN.h" 3#include "bluetoothRFCOMM_NN.h"
4 4
5ABluetoothRFCOMM::ABluetoothRFCOMM( BluetoothRFCOMMNetNode * PNN ) : ANetNodeInstance( PNN ) { 5ABluetoothRFCOMM::ABluetoothRFCOMM( BluetoothRFCOMMNetNode * PNN ) :
6 GUI = 0; 6 ANetNodeInstance( PNN ), Data() {
7 RT = 0; 7 Data.Devices.setAutoDelete( TRUE );
8 GUI = 0;
9 RT = 0;
8} 10}
9 11
10void ABluetoothRFCOMM::setSpecificAttribute( QString & , QString & ) { 12void ABluetoothRFCOMM::setSpecificAttribute( QString & A, QString & V) {
13
14 if( A == "bdaddress" ) {
15 Data.Devices.resize( Data.Devices.size() + 1 );
16 Data.Devices.insert( Data.Devices.size() - 1, new RFCOMMChannel);
17 Data.Devices[ Data.Devices.size() - 1 ]->BDAddress = V;
18 } else if ( A == "channel" ) {
19 Data.Devices[ Data.Devices.size() - 1 ]->Channel = V.toLong();
20 } else if ( A == "name" ) {
21 Data.Devices[ Data.Devices.size() - 1 ]->Name = V;
22 }
11} 23}
12 24
13void ABluetoothRFCOMM::saveSpecificAttribute( QTextStream & ) { 25void ABluetoothRFCOMM::saveSpecificAttribute( QTextStream & TS ) {
26 for( unsigned int i = 0 ;
27 i < Data.Devices.count();
28 i ++ ) {
29 TS << "bdaddress=" << Data.Devices[i]->BDAddress << endl;
30 TS << "name=" << quote( Data.Devices[i]->Name ) << endl;
31 TS << "channel=" << Data.Devices[i]->Channel << endl;
32 }
14} 33}
15 34
16 35
17QWidget * ABluetoothRFCOMM::edit( QWidget * parent ) { 36QWidget * ABluetoothRFCOMM::edit( QWidget * parent ) {
18 GUI = new BluetoothRFCOMMEdit( parent ); 37 GUI = new BluetoothRFCOMMEdit( parent );
19 GUI->showData( Data ); 38 GUI->showData( Data );
20 return GUI; 39 return GUI;
21} 40}
22 41
23QString ABluetoothRFCOMM::acceptable( void ) { 42QString ABluetoothRFCOMM::acceptable( void ) {
24 return ( GUI ) ? GUI->acceptable( ) : QString(); 43 return ( GUI ) ? GUI->acceptable( ) : QString();
25} 44}
26 45
27void ABluetoothRFCOMM::commit( void ) { 46void ABluetoothRFCOMM::commit( void ) {
28 if( GUI->commit( Data ) ) 47 if( GUI->commit( Data ) )
29 setModified( 1 ); 48 setModified( 1 );
diff --git a/noncore/settings/networksettings2/bluetooth/bluetoothRFCOMMdata.h b/noncore/settings/networksettings2/bluetooth/bluetoothRFCOMMdata.h
index 18f0d38..14cfeb0 100644
--- a/noncore/settings/networksettings2/bluetooth/bluetoothRFCOMMdata.h
+++ b/noncore/settings/networksettings2/bluetooth/bluetoothRFCOMMdata.h
@@ -1,18 +1,22 @@
1#ifndef BLUETOOTHRFCOMM_DATA_H 1#ifndef BLUETOOTHRFCOMM_DATA_H
2#define BLUETOOTHRFCOMM_DATA_H 2#define BLUETOOTHRFCOMM_DATA_H
3 3
4#include <qstring.h> 4#include <qstring.h>
5#include <qvector.h>
5 6
6typedef struct BluetoothRFCOMMData { 7class RFCOMMChannel {
7 QString Device;
8 QString LockFile;
9 long Speed;
10 short Parity;
11 short DataBits;
12 short StopBits;
13 bool HardwareControl;
14 bool SoftwareControl;
15 8
16} BluetoothRFCOMMData_t; 9public :
10 QString BDAddress;
11 QString Name;
12 int Channel;
13};
14
15class BluetoothRFCOMMData {
16
17public :
18
19 QVector<RFCOMMChannel> Devices;
20};
17 21
18#endif 22#endif
diff --git a/noncore/settings/networksettings2/bluetooth/bluetoothRFCOMMedit.cpp b/noncore/settings/networksettings2/bluetooth/bluetoothRFCOMMedit.cpp
index d3ddab4..7cac13f 100644
--- a/noncore/settings/networksettings2/bluetooth/bluetoothRFCOMMedit.cpp
+++ b/noncore/settings/networksettings2/bluetooth/bluetoothRFCOMMedit.cpp
@@ -1,18 +1,156 @@
1#include <qlistview.h>
2#include <qdialog.h>
3#include <qlabel.h>
4#include <qlineedit.h>
5#include <qtoolbutton.h>
6#include <qcheckbox.h>
7#include <qspinbox.h>
8#include <OTPeer.h>
9#include <OTGateway.h>
10#include <Opietooth.h>
11#include <resources.h>
1#include <GUIUtils.h> 12#include <GUIUtils.h>
2#include "bluetoothRFCOMMedit.h" 13#include "bluetoothRFCOMMedit.h"
3 14
15using namespace Opietooth2;
16
17class PeerLBI : public QListViewItem {
18
19public :
20
21 PeerLBI( OTPeer * P, int Ch, QListView * LV ) : QListViewItem( LV ) {
22 Peer = P;
23 Channel = Ch;
24
25 setText( 0, (P->name().isEmpty()) ?
26 P->address().toString() :
27 P->name() );
28 QString S;
29 S.setNum( Ch );
30 setText( 1, S );
31 setText( 2, P->address().toString() );
32 }
33 ~PeerLBI( ) {
34 }
35
36 inline int channel( void ) const
37 { return Channel; }
38 inline OTPeer * peer( void ) const
39 { return Peer; }
40
41 int Channel;
42 OTPeer * Peer;
43};
44
4BluetoothRFCOMMEdit::BluetoothRFCOMMEdit( QWidget * Parent ) : 45BluetoothRFCOMMEdit::BluetoothRFCOMMEdit( QWidget * Parent ) :
5 BluetoothRFCOMMGUI( Parent ){ 46 BluetoothRFCOMMGUI( Parent ){
47 Modified = 0;
48 OT = OTGateway::getOTGateway();
49
50 Add_TB->setPixmap( NSResources->getPixmap( "add" ) );
51 Remove_TB->setPixmap( NSResources->getPixmap( "remove" ) );
52 FindDevice_TB->setPixmap( NSResources->getPixmap( "Devices/bluetooth" ) );
53 Addresses_LV->setColumnAlignment( 1, Qt::AlignRight );
54}
6 55
56BluetoothRFCOMMEdit::~BluetoothRFCOMMEdit( void ) {
57 OTGateway::releaseOTGateway();
7} 58}
8 59
9QString BluetoothRFCOMMEdit::acceptable( void ) { 60QString BluetoothRFCOMMEdit::acceptable( void ) {
10 return QString(); 61 return QString();
62}
63
64bool BluetoothRFCOMMEdit::commit( BluetoothRFCOMMData & Data ) {
65 int ct = 0;
66 PeerLBI * I;
67
68 if( Modified ) {
69 QListViewItem * it = Addresses_LV->firstChild();
70
71 Data.Devices.resize( 0 );
72 while( it ) {
73
74 ct ++;
75 Data.Devices.resize( ct );
76 I = (PeerLBI * )it;
77
78 Data.Devices.insert( ct-1, new RFCOMMChannel );
79
80 Data.Devices[ct-1]->BDAddress = I->peer()->address().toString();
81 Data.Devices[ct-1]->Name = I->peer()->name();
82 Data.Devices[ct-1]->Channel = I->channel();
83
84 it = it->nextSibling();
85 }
86 }
87
88 return Modified;
11} 89}
12 90
13void BluetoothRFCOMMEdit::showData( BluetoothRFCOMMData & Data ) { 91void BluetoothRFCOMMEdit::showData( BluetoothRFCOMMData & Data ) {
92
93 OTPeer * P;
94
95 for( unsigned int i = 0;
96 i < Data.Devices.count();
97 i ++ ) {
98 P = new OTPeer( OT );
99 P->setAddress( OTDeviceAddress( Data.Devices[i]->BDAddress ) );
100 P->setName( Data.Devices[i]->Name );
101
102 new PeerLBI( P, Data.Devices[i]->Channel, Addresses_LV );
103 }
104 Modified = 0;
14} 105}
15 106
16bool BluetoothRFCOMMEdit::commit( BluetoothRFCOMMData & Data ) { 107void BluetoothRFCOMMEdit::SLOT_AddServer( void ) {
17 return 0; 108 QListViewItem * it = Addresses_LV->firstChild();
109
110 while( it ) {
111 // check address
112 if( it->text(2) == Address_LE->text() ) {
113 // already in table
114 return;
115 }
116 it = it->nextSibling();
117 }
118
119 // new server
120 Modified = 1;
121 OTPeer * P = new OTPeer( OT );
122 P->setAddress( OTDeviceAddress( Address_LE->text() ) );
123 P->setName( Name_LBL->text() );
124 new PeerLBI( P, Channel_SB->value(), Addresses_LV );
125
126 Address_LE->setText("");
127 Name_LBL->setText("");
128 Channel_SB->setValue(1);
129}
130
131void BluetoothRFCOMMEdit::SLOT_RemoveServer( void ) {
132
133 QListViewItem * it = Addresses_LV->firstChild();
134
135 while( it ) {
136 // check address
137 if( it->isSelected() ) {
138 delete it;
139 Modified = 1;
140 return;
141 }
142 it = it->nextSibling();
143 }
144}
145
146void BluetoothRFCOMMEdit::SLOT_FindDevice( void ) {
147 OTPeer * Peer;
148 int Channel;
149
150 // find device in Opietooth
151 if( OTScan::getDevice( Peer, Channel, OT ) == QDialog::Accepted ) {
152 Address_LE->setText( Peer->address().toString() );
153 Name_LBL->setText( Peer->name() );
154 Channel_SB->setValue( Channel );
155 }
18} 156}
diff --git a/noncore/settings/networksettings2/bluetooth/bluetoothRFCOMMedit.h b/noncore/settings/networksettings2/bluetooth/bluetoothRFCOMMedit.h
index 14a6d64..9ad8f2a 100644
--- a/noncore/settings/networksettings2/bluetooth/bluetoothRFCOMMedit.h
+++ b/noncore/settings/networksettings2/bluetooth/bluetoothRFCOMMedit.h
@@ -1,13 +1,27 @@
1#include "bluetoothRFCOMMdata.h" 1#include "bluetoothRFCOMMdata.h"
2#include "bluetoothRFCOMMGUI.h" 2#include "bluetoothRFCOMMGUI.h"
3 3
4#include <Opietooth.h>
5using namespace Opietooth2;
6
4class BluetoothRFCOMMEdit : public BluetoothRFCOMMGUI { 7class BluetoothRFCOMMEdit : public BluetoothRFCOMMGUI {
5 8
6public : 9public :
7 10
8 BluetoothRFCOMMEdit( QWidget * parent ); 11 BluetoothRFCOMMEdit( QWidget * parent );
12 virtual ~BluetoothRFCOMMEdit( void );
9 13
10 QString acceptable( void ); 14 QString acceptable( void );
11 void showData( BluetoothRFCOMMData & Data ); 15 void showData( BluetoothRFCOMMData & Data );
12 bool commit( BluetoothRFCOMMData & Data ); 16 bool commit( BluetoothRFCOMMData & Data );
17
18 bool Modified;
19 OTGateway * OT;
20
21public slots :
22
23 void SLOT_AddServer( void );
24 void SLOT_RemoveServer( void );
25 void SLOT_FindDevice( void );
26
13}; 27};
diff --git a/noncore/settings/networksettings2/bluetooth/bluetoothRFCOMMrun.h b/noncore/settings/networksettings2/bluetooth/bluetoothRFCOMMrun.h
index 65fd686..24e3dae 100644
--- a/noncore/settings/networksettings2/bluetooth/bluetoothRFCOMMrun.h
+++ b/noncore/settings/networksettings2/bluetooth/bluetoothRFCOMMrun.h
@@ -1,28 +1,33 @@
1#include <asline.h> 1#include <netnode.h>
2#include "bluetoothRFCOMMdata.h" 2#include "bluetoothRFCOMMdata.h"
3 3
4class BluetoothRFCOMMRun : public AsLine { 4#include <OTGateway.h>
5using namespace Opietooth2;
6
7class BluetoothRFCOMMRun : public RuntimeInfo {
5 8
6public : 9public :
7 10
8 BluetoothRFCOMMRun( ANetNodeInstance * NNI, 11 BluetoothRFCOMMRun( ANetNodeInstance * NNI,
9 BluetoothRFCOMMData & Data ) : AsLine( NNI ) 12 BluetoothRFCOMMData & D ) : RuntimeInfo( NNI )
10 { } 13 { DeviceNr = -1; Data = &D; OT = 0; }
14 virtual ~BluetoothRFCOMMRun( void );
11 15
12 virtual AsLine * asLine( void ) 16 virtual RuntimeInfo * line( void )
13 { return (AsLine *)this; } 17 { return this; }
18 virtual QString deviceFile( void );
14 19
15 virtual QString deviceFile( void ) 20 State_t detectState( void );
16 { return QString( "/dev/rfcomm..." ); }
17 21
18protected : 22protected :
19 23
20 void detectState( NodeCollection * ) 24 QString setMyState( NodeCollection * , Action_t, bool );
21 { }
22 25
23 bool setState( NodeCollection * , Action_t, bool ) 26private :
24 { return 0; }
25 27
26 bool canSetState( State_t , Action_t ) 28 int deviceNrOfConnection( void );
27 { return 0; } 29 RFCOMMChannel * getChannel( void );
30 BluetoothRFCOMMData * Data;
31 Opietooth2::OTGateway * OT;
32 int DeviceNr; // cached from detection
28}; 33};
diff --git a/noncore/settings/networksettings2/bluetooth/bluetooth_NN.cpp b/noncore/settings/networksettings2/bluetooth/bluetooth_NN.cpp
index 443a627..9be6b16 100644
--- a/noncore/settings/networksettings2/bluetooth/bluetooth_NN.cpp
+++ b/noncore/settings/networksettings2/bluetooth/bluetooth_NN.cpp
@@ -1,62 +1,67 @@
1#include "bluetooth_NN.h" 1#include "bluetooth_NN.h"
2#include "bluetoothBNEP_NNI.h" 2#include "bluetoothBNEP_NNI.h"
3#include "bluetoothRFCOMM_NNI.h" 3#include "bluetoothRFCOMM_NNI.h"
4 4
5// 5//
6// 6//
7// BLUETOOTH PAN/NAP node 7// BLUETOOTH PAN/NAP node
8// 8//
9// 9//
10 10
11static const char * BluetoothBNEPNeeds[] = 11static const char * BluetoothBNEPNeeds[] =
12 { 0 12 { 0
13 }; 13 };
14 14
15static const char * BluetoothBNEPProvides[] =
16 { "device",
17 0
18 };
19
15/** 20/**
16 * Constructor, find all of the possible interfaces 21 * Constructor, find all of the possible interfaces
17 */ 22 */
18BluetoothBNEPNetNode::BluetoothBNEPNetNode() : 23BluetoothBNEPNetNode::BluetoothBNEPNetNode() :
19 ANetNode(tr("Bluetooth PAN/NAP")) { 24 ANetNode(tr("Bluetooth PAN/NAP")) {
20 InstanceCount = 7; // default 25 InstanceCount = 7; // default
21} 26}
22 27
23/** 28/**
24 * Delete any interfaces that we own. 29 * Delete any interfaces that we own.
25 */ 30 */
26BluetoothBNEPNetNode::~BluetoothBNEPNetNode(){ 31BluetoothBNEPNetNode::~BluetoothBNEPNetNode(){
27} 32}
28 33
29const QString BluetoothBNEPNetNode::nodeDescription(){ 34const QString BluetoothBNEPNetNode::nodeDescription(){
30 return tr("\ 35 return tr("\
31<p>Sets up a bluetooth link using the bluetooth Network profile.</p>\ 36<p>Sets up a bluetooth link using the bluetooth Network profile.</p>\
32<p>Use this to connect two computing devices.</p>\ 37<p>Use this to connect two computing devices.</p>\
33" 38"
34); 39);
35} 40}
36 41
37ANetNodeInstance * BluetoothBNEPNetNode::createInstance( void ) { 42ANetNodeInstance * BluetoothBNEPNetNode::createInstance( void ) {
38 return new ABluetoothBNEP( this ); 43 return new ABluetoothBNEP( this );
39} 44}
40 45
41const char ** BluetoothBNEPNetNode::needs( void ) { 46const char ** BluetoothBNEPNetNode::needs( void ) {
42 return BluetoothBNEPNeeds; 47 return BluetoothBNEPNeeds;
43} 48}
44 49
45const char * BluetoothBNEPNetNode::provides( void ) { 50const char ** BluetoothBNEPNetNode::provides( void ) {
46 return "device"; 51 return BluetoothBNEPProvides;
47} 52}
48 53
49QString BluetoothBNEPNetNode::genNic( long nr ) { 54QString BluetoothBNEPNetNode::genNic( long nr ) {
50 QString S; 55 QString S;
51 return S.sprintf( "bnep%ld", nr ); 56 return S.sprintf( "bnep%ld", nr );
52} 57}
53 58
54 59
55void BluetoothBNEPNetNode::setSpecificAttribute( QString & A, QString & V ) { 60void BluetoothBNEPNetNode::setSpecificAttribute( QString & A, QString & V ) {
56 if( A == "interfacecount" ) { 61 if( A == "interfacecount" ) {
57 InstanceCount = V.toLong(); 62 InstanceCount = V.toLong();
58 } 63 }
59} 64}
60 65
61void BluetoothBNEPNetNode::saveSpecificAttribute( QTextStream & TS) { 66void BluetoothBNEPNetNode::saveSpecificAttribute( QTextStream & TS) {
62 TS << "interfacecount=" 67 TS << "interfacecount="
diff --git a/noncore/settings/networksettings2/bluetooth/bluetooth_NN.h b/noncore/settings/networksettings2/bluetooth/bluetooth_NN.h
index 4d6a3c1..b93342e 100644
--- a/noncore/settings/networksettings2/bluetooth/bluetooth_NN.h
+++ b/noncore/settings/networksettings2/bluetooth/bluetooth_NN.h
@@ -9,33 +9,33 @@ class BluetoothBNEPNetNode : public ANetNode {
9 9
10 Q_OBJECT 10 Q_OBJECT
11 11
12public: 12public:
13 13
14 BluetoothBNEPNetNode(); 14 BluetoothBNEPNetNode();
15 virtual ~BluetoothBNEPNetNode(); 15 virtual ~BluetoothBNEPNetNode();
16 16
17 virtual QString genNic( long ); 17 virtual QString genNic( long );
18 virtual long instanceCount( void ) 18 virtual long instanceCount( void )
19 { return InstanceCount; } 19 { return InstanceCount; }
20 virtual const QString pixmapName() 20 virtual const QString pixmapName()
21 { return "Devices/bluetooth"; } 21 { return "Devices/bluetooth"; }
22 22
23 virtual const QString nodeDescription() ; 23 virtual const QString nodeDescription() ;
24 virtual ANetNodeInstance * createInstance( void ); 24 virtual ANetNodeInstance * createInstance( void );
25 virtual const char * provides( void ); 25 virtual const char ** provides( void );
26 virtual const char ** needs( void ); 26 virtual const char ** needs( void );
27 27
28private: 28private:
29 29
30 virtual void setSpecificAttribute( QString & Attr, QString & Value ); 30 virtual void setSpecificAttribute( QString & Attr, QString & Value );
31 virtual void saveSpecificAttribute( QTextStream & TS ); 31 virtual void saveSpecificAttribute( QTextStream & TS );
32 32
33 // number of interfaces for this device 33 // number of interfaces for this device
34 long InstanceCount; 34 long InstanceCount;
35 35
36}; 36};
37 37
38class BluetoothRFCOMMNetNode : public ANetNode { 38class BluetoothRFCOMMNetNode : public ANetNode {
39 39
40 Q_OBJECT 40 Q_OBJECT
41 41
diff --git a/noncore/settings/networksettings2/bluetooth/config.in b/noncore/settings/networksettings2/bluetooth/config.in
index 6968ac8..398cff1 100644
--- a/noncore/settings/networksettings2/bluetooth/config.in
+++ b/noncore/settings/networksettings2/bluetooth/config.in
@@ -1,4 +1,4 @@
1 config NS2BT 1 config NS2BT
2 boolean "opie-networksettings2plugin-bluetooth (set up BLUETOOTH)" 2 boolean "opie-networksettings2plugin-bluetooth (set up BLUETOOTH)"
3 default "n" if NS2 3 default "n" if NS2
4 depends ( LIBQPE || LIBQPE-X11 ) && LIBOPIE2CORE && NS2CORE 4 depends ( LIBQPE || LIBQPE-X11 ) && LIBOPIE2CORE && NS2CORE && NS2OPIETOOTH
diff --git a/noncore/settings/networksettings2/bluetooth/opie-networksettings2plugin-bluetooth.control b/noncore/settings/networksettings2/bluetooth/opie-networksettings2plugin-bluetooth.control
index ea77bd7..c4d29f2 100644
--- a/noncore/settings/networksettings2/bluetooth/opie-networksettings2plugin-bluetooth.control
+++ b/noncore/settings/networksettings2/bluetooth/opie-networksettings2plugin-bluetooth.control
@@ -1,9 +1,9 @@
1Package: opie-networksettingsplugin2-bluetooth 1Package: opie-networksettings2plugin-bluetooth
2Files: plugins/networksettings2/libbluetooth.so* 2Files: plugins/networksettings2/libbluetooth.so*
3Priority: optional 3Priority: optional
4Section: opie/settings 4Section: opie/settings
5Maintainer: Wim Delvaux <wimpie@handhelds.org> 5Maintainer: Wim Delvaux <wimpie@handhelds.org>
6Architecture: arm 6Architecture: arm
7Depends: opie-networksettings2, libopiecore2, libopienet2 7Depends: opie-networksettings2, libopietooth2, libopiecore2, libopienet2
8Description: Network settings bluetooth plugin. 8Description: Network settings bluetooth plugin.
9Version: $QPE_VERSION$EXTRAVERSION 9Version: $QPE_VERSION$EXTRAVERSION
diff --git a/noncore/settings/networksettings2/cable/cable_NN.cpp b/noncore/settings/networksettings2/cable/cable_NN.cpp
index 38568df..dc4205c 100644
--- a/noncore/settings/networksettings2/cable/cable_NN.cpp
+++ b/noncore/settings/networksettings2/cable/cable_NN.cpp
@@ -1,49 +1,54 @@
1#include "cable_NN.h" 1#include "cable_NN.h"
2#include "cable_NNI.h" 2#include "cable_NNI.h"
3 3
4static const char * CableNeeds[] = 4static const char * CableNeeds[] =
5 { 0 5 { 0
6 }; 6 };
7 7
8static const char * CableProvides[] =
9 { "line",
10 0
11 };
12
8/** 13/**
9 * Constructor, find all of the possible interfaces 14 * Constructor, find all of the possible interfaces
10 */ 15 */
11CableNetNode::CableNetNode() : ANetNode(tr("Cable Connection")) { 16CableNetNode::CableNetNode() : ANetNode(tr("Cable Connection")) {
12} 17}
13 18
14/** 19/**
15 * Delete any interfaces that we own. 20 * Delete any interfaces that we own.
16 */ 21 */
17CableNetNode::~CableNetNode(){ 22CableNetNode::~CableNetNode(){
18} 23}
19 24
20const QString CableNetNode::nodeDescription(){ 25const QString CableNetNode::nodeDescription(){
21 return tr("\ 26 return tr("\
22<p>Sets up a wired serial or parallel.</p>\ 27<p>Sets up a wired serial or parallel.</p>\
23" 28"
24); 29);
25} 30}
26 31
27ANetNodeInstance * CableNetNode::createInstance( void ) { 32ANetNodeInstance * CableNetNode::createInstance( void ) {
28 return new ACable( this ); 33 return new ACable( this );
29} 34}
30 35
31const char ** CableNetNode::needs( void ) { 36const char ** CableNetNode::needs( void ) {
32 return CableNeeds; 37 return CableNeeds;
33} 38}
34 39
35const char * CableNetNode::provides( void ) { 40const char ** CableNetNode::provides( void ) {
36 return "line"; 41 return CableProvides;
37} 42}
38 43
39void CableNetNode::setSpecificAttribute( QString & , QString & ) { 44void CableNetNode::setSpecificAttribute( QString & , QString & ) {
40} 45}
41 46
42void CableNetNode::saveSpecificAttribute( QTextStream & ) { 47void CableNetNode::saveSpecificAttribute( QTextStream & ) {
43} 48}
44 49
45extern "C" { 50extern "C" {
46void create_plugin( QList<ANetNode> & PNN ) { 51void create_plugin( QList<ANetNode> & PNN ) {
47 PNN.append( new CableNetNode() ); 52 PNN.append( new CableNetNode() );
48} 53}
49} 54}
diff --git a/noncore/settings/networksettings2/cable/cable_NN.h b/noncore/settings/networksettings2/cable/cable_NN.h
index 5cc2b2d..8d649cc 100644
--- a/noncore/settings/networksettings2/cable/cable_NN.h
+++ b/noncore/settings/networksettings2/cable/cable_NN.h
@@ -7,30 +7,30 @@ class ACable;
7 7
8class CableNetNode : public ANetNode { 8class CableNetNode : public ANetNode {
9 9
10 Q_OBJECT 10 Q_OBJECT
11 11
12public: 12public:
13 13
14 CableNetNode(); 14 CableNetNode();
15 virtual ~CableNetNode(); 15 virtual ~CableNetNode();
16 16
17 virtual const QString pixmapName() 17 virtual const QString pixmapName()
18 { return "Devices/cable"; } 18 { return "Devices/cable"; }
19 19
20 virtual const QString nodeDescription() ; 20 virtual const QString nodeDescription() ;
21 virtual ANetNodeInstance * createInstance( void ); 21 virtual ANetNodeInstance * createInstance( void );
22 virtual const char ** needs( void ); 22 virtual const char ** needs( void );
23 virtual const char * provides( void ); 23 virtual const char ** provides( void );
24 24
25private: 25private:
26 26
27 virtual void setSpecificAttribute( QString & Attr, QString & Value ); 27 virtual void setSpecificAttribute( QString & Attr, QString & Value );
28 virtual void saveSpecificAttribute( QTextStream & TS ); 28 virtual void saveSpecificAttribute( QTextStream & TS );
29}; 29};
30 30
31extern "C" 31extern "C"
32{ 32{
33 void create_plugin( QList<ANetNode> & PNN ); 33 void create_plugin( QList<ANetNode> & PNN );
34}; 34};
35 35
36#endif 36#endif
diff --git a/noncore/settings/networksettings2/cable/cable_NNI.cpp b/noncore/settings/networksettings2/cable/cable_NNI.cpp
index 4bd9421..12a00a2 100644
--- a/noncore/settings/networksettings2/cable/cable_NNI.cpp
+++ b/noncore/settings/networksettings2/cable/cable_NNI.cpp
@@ -36,51 +36,49 @@ void ACable::setSpecificAttribute( QString & A, QString & V) {
36 } 36 }
37} 37}
38 38
39void ACable::saveSpecificAttribute( QTextStream & TS ) { 39void ACable::saveSpecificAttribute( QTextStream & TS ) {
40 TS << "device=" << quote( Data.Device ) << endl; 40 TS << "device=" << quote( Data.Device ) << endl;
41 TS << "lockfile=" << quote( Data.LockFile ) << endl; 41 TS << "lockfile=" << quote( Data.LockFile ) << endl;
42 TS << "speed=" << Data.Speed << endl; 42 TS << "speed=" << Data.Speed << endl;
43 TS << "parity=" << Data.Parity << endl; 43 TS << "parity=" << Data.Parity << endl;
44 TS << "databits=" << Data.DataBits << endl; 44 TS << "databits=" << Data.DataBits << endl;
45 TS << "stopbits=" << Data.StopBits << endl; 45 TS << "stopbits=" << Data.StopBits << endl;
46 TS << "hardwarecontrol=" << 46 TS << "hardwarecontrol=" <<
47 ((Data.HardwareControl) ? "yes" : "no") << endl; 47 ((Data.HardwareControl) ? "yes" : "no") << endl;
48 TS << "softwarecontrol=" << 48 TS << "softwarecontrol=" <<
49 ((Data.SoftwareControl) ? "yes" : "no") << endl; 49 ((Data.SoftwareControl) ? "yes" : "no") << endl;
50} 50}
51 51
52short ACable::generateFileEmbedded( const QString & ID, 52short ACable::generateFileEmbedded( SystemFile & SF,
53 const QString & Path,
54 QTextStream & TS,
55 long DevNr ) { 53 long DevNr ) {
56 short rvl, rvd; 54 short rvl, rvd;
57 55
58 rvl = 1; 56 rvl = 1;
59 if( ID == "peers" ) { 57 if( SF.name() == "peers" ) {
60 TS << Data.Device 58 SF << Data.Device
61 << endl; 59 << endl;
62 TS << Data.Speed 60 SF << Data.Speed
63 << endl; 61 << endl;
64 TS << "lock " 62 SF << "lock "
65 << Data.LockFile 63 << Data.LockFile
66 << endl; 64 << endl;
67 rvl = 0; 65 rvl = 0;
68 } 66 }
69 67
70 rvd = ANetNodeInstance::generateFileEmbedded( ID, Path, TS, DevNr ); 68 rvd = ANetNodeInstance::generateFileEmbedded( SF, DevNr );
71 return (rvd == 2 || rvl == 2 ) ? 2 : 69 return (rvd == 2 || rvl == 2 ) ? 2 :
72 (rvd == 0 || rvl == 0 ) ? 0 : 1; 70 (rvd == 0 || rvl == 0 ) ? 0 : 1;
73} 71}
74 72
75QWidget * ACable::edit( QWidget * parent ) { 73QWidget * ACable::edit( QWidget * parent ) {
76 GUI = new CableEdit( parent ); 74 GUI = new CableEdit( parent );
77 GUI->showData( Data ); 75 GUI->showData( Data );
78 return GUI; 76 return GUI;
79} 77}
80 78
81QString ACable::acceptable( void ) { 79QString ACable::acceptable( void ) {
82 return ( GUI ) ? GUI->acceptable( ) : QString(); 80 return ( GUI ) ? GUI->acceptable( ) : QString();
83} 81}
84 82
85void ACable::commit( void ) { 83void ACable::commit( void ) {
86 if( GUI && GUI->commit( Data ) ) { 84 if( GUI && GUI->commit( Data ) ) {
diff --git a/noncore/settings/networksettings2/cable/cable_NNI.h b/noncore/settings/networksettings2/cable/cable_NNI.h
index d06cbbe..18a52de 100644
--- a/noncore/settings/networksettings2/cable/cable_NNI.h
+++ b/noncore/settings/networksettings2/cable/cable_NNI.h
@@ -13,34 +13,32 @@ class ACable : public ANetNodeInstance {
13public : 13public :
14 14
15 ACable( CableNetNode * PNN ); 15 ACable( CableNetNode * PNN );
16 16
17 RuntimeInfo * runtime( void ) 17 RuntimeInfo * runtime( void )
18 { return 18 { return
19 ( RT ) ? RT : ( RT = new CableRun( this, Data ) ); 19 ( RT ) ? RT : ( RT = new CableRun( this, Data ) );
20 } 20 }
21 21
22 QWidget * edit( QWidget * parent ); 22 QWidget * edit( QWidget * parent );
23 QString acceptable( void ); 23 QString acceptable( void );
24 void commit( void ); 24 void commit( void );
25 25
26 virtual void * data( void ) 26 virtual void * data( void )
27 { return (void *)&Data; } 27 { return (void *)&Data; }
28 28
29 short generateFileEmbedded( const QString & ID, 29 short generateFileEmbedded( SystemFile & Sf,
30 const QString & Path,
31 QTextStream & TS,
32 long DevNr ); 30 long DevNr );
33protected : 31protected :
34 32
35 virtual void setSpecificAttribute( QString & Attr, QString & Value ); 33 virtual void setSpecificAttribute( QString & Attr, QString & Value );
36 virtual void saveSpecificAttribute( QTextStream & TS ); 34 virtual void saveSpecificAttribute( QTextStream & TS );
37 35
38private : 36private :
39 37
40 CableEdit * GUI; 38 CableEdit * GUI;
41 CableData_t Data; 39 CableData Data;
42 CableRun * RT; 40 CableRun * RT;
43 41
44}; 42};
45 43
46#endif 44#endif
diff --git a/noncore/settings/networksettings2/cable/cabledata.h b/noncore/settings/networksettings2/cable/cabledata.h
index c449d96..ea81f8d 100644
--- a/noncore/settings/networksettings2/cable/cabledata.h
+++ b/noncore/settings/networksettings2/cable/cabledata.h
@@ -1,18 +1,21 @@
1#ifndef CABLE_DATA_H 1#ifndef CABLE_DATA_H
2#define CABLE_DATA_H 2#define CABLE_DATA_H
3 3
4#include <qstring.h> 4#include <qstring.h>
5 5
6typedef struct CableData { 6class CableData {
7
8public :
9
7 QString Device; 10 QString Device;
8 QString LockFile; 11 QString LockFile;
9 long Speed; 12 long Speed;
10 short Parity; 13 short Parity;
11 short DataBits; 14 short DataBits;
12 short StopBits; 15 short StopBits;
13 bool HardwareControl; 16 bool HardwareControl;
14 bool SoftwareControl; 17 bool SoftwareControl;
15 18
16} CableData_t; 19};
17 20
18#endif 21#endif
diff --git a/noncore/settings/networksettings2/cable/cableedit.cpp b/noncore/settings/networksettings2/cable/cableedit.cpp
index 6e1a13b..4e57845 100644
--- a/noncore/settings/networksettings2/cable/cableedit.cpp
+++ b/noncore/settings/networksettings2/cable/cableedit.cpp
@@ -4,56 +4,56 @@
4#include <qcombobox.h> 4#include <qcombobox.h>
5#include <qspinbox.h> 5#include <qspinbox.h>
6#include <qcheckbox.h> 6#include <qcheckbox.h>
7#include "cabledata.h" 7#include "cabledata.h"
8#include "cableedit.h" 8#include "cableedit.h"
9 9
10static long SpeedTable[] = { 10static long SpeedTable[] = {
11 2400, 9600, 19200, 38400, 57600, 115200, 11 2400, 9600, 19200, 38400, 57600, 115200,
12 230400, 460800, 500000, 921600, 1000000, 12 230400, 460800, 500000, 921600, 1000000,
13 1152000, 1500000, 2000000, 2500000, 3000000, 13 1152000, 1500000, 2000000, 2500000, 3000000,
14 3500000, 4000000, -1 14 3500000, 4000000, -1
15}; 15};
16 16
17CableEdit::CableEdit( QWidget * Parent ) : CableGUI( Parent ) { 17CableEdit::CableEdit( QWidget * Parent ) : CableGUI( Parent ) {
18} 18}
19 19
20void CableEdit::showData( CableData_t & D ) { 20void CableEdit::showData( CableData & D ) {
21 DeviceFile_LE->setText( D.Device ); 21 DeviceFile_LE->setText( D.Device );
22 LockFile_LE->setText( D.LockFile ); 22 LockFile_LE->setText( D.LockFile );
23 for( long * Run = SpeedTable; *Run != -1; *Run ++ ) { 23 for( long * Run = SpeedTable; *Run != -1; *Run ++ ) {
24 if( *Run == D.Speed ) { 24 if( *Run == D.Speed ) {
25 Speed_CB->setCurrentItem( 25 Speed_CB->setCurrentItem(
26 ((long)(Run)-(long)(SpeedTable))/sizeof(long) ); 26 ((long)(Run)-(long)(SpeedTable))/sizeof(long) );
27 break; 27 break;
28 } 28 }
29 } 29 }
30 Parity_CB->setCurrentItem( D.Parity ); 30 Parity_CB->setCurrentItem( D.Parity );
31 DataBits_SB->setValue( D.DataBits ); 31 DataBits_SB->setValue( D.DataBits );
32 StopBits_CB->setCurrentItem( D.StopBits ); 32 StopBits_CB->setCurrentItem( D.StopBits );
33 HardwareFC_CB->setChecked( D.HardwareControl ); 33 HardwareFC_CB->setChecked( D.HardwareControl );
34 SoftwareFC_CB->setChecked( D.SoftwareControl ); 34 SoftwareFC_CB->setChecked( D.SoftwareControl );
35} 35}
36 36
37QString CableEdit::acceptable( void ) { 37QString CableEdit::acceptable( void ) {
38 if( DeviceFile_LE->text().isEmpty() ) 38 if( DeviceFile_LE->text().isEmpty() )
39 return tr("Device filename needed"); 39 return tr("Device filename needed");
40 return QString(); 40 return QString();
41} 41}
42 42
43bool CableEdit::commit( CableData_t & D ) { 43bool CableEdit::commit( CableData & D ) {
44 bool SM = 0; 44 bool SM = 0;
45 45
46 TXTM( D.Device, DeviceFile_LE, SM ); 46 TXTM( D.Device, DeviceFile_LE, SM );
47 TXTM( D.LockFile, LockFile_LE, SM ); 47 TXTM( D.LockFile, LockFile_LE, SM );
48 48
49 for( long * Run = SpeedTable; *Run != -1; *Run ++ ) { 49 for( long * Run = SpeedTable; *Run != -1; *Run ++ ) {
50 if( *Run == D.Speed ) { 50 if( *Run == D.Speed ) {
51 if( D.Speed != Speed_CB->currentText().toLong() ) { 51 if( D.Speed != Speed_CB->currentText().toLong() ) {
52 SM = 1; 52 SM = 1;
53 D.Speed = Speed_CB->currentText().toLong(); 53 D.Speed = Speed_CB->currentText().toLong();
54 } 54 }
55 break; 55 break;
56 } 56 }
57 } 57 }
58 58
59 CIM(D.Parity, Parity_CB, SM ); 59 CIM(D.Parity, Parity_CB, SM );
diff --git a/noncore/settings/networksettings2/cable/cableedit.h b/noncore/settings/networksettings2/cable/cableedit.h
index ffacc61..ad1e832 100644
--- a/noncore/settings/networksettings2/cable/cableedit.h
+++ b/noncore/settings/networksettings2/cable/cableedit.h
@@ -1,12 +1,12 @@
1#include "cabledata.h" 1#include "cabledata.h"
2#include "cableGUI.h" 2#include "cableGUI.h"
3 3
4class CableEdit : public CableGUI { 4class CableEdit : public CableGUI {
5 5
6public : 6public :
7 7
8 CableEdit( QWidget * parent ); 8 CableEdit( QWidget * parent );
9 QString acceptable( void ); 9 QString acceptable( void );
10 bool commit( CableData_t & D ); 10 bool commit( CableData & D );
11 void showData( CableData_t & D ); 11 void showData( CableData & D );
12}; 12};
diff --git a/noncore/settings/networksettings2/cable/cablerun.cpp b/noncore/settings/networksettings2/cable/cablerun.cpp
index 85660f6..7a8deb9 100644
--- a/noncore/settings/networksettings2/cable/cablerun.cpp
+++ b/noncore/settings/networksettings2/cable/cablerun.cpp
@@ -1,30 +1,22 @@
1#include <fcntl.h> 1#include <fcntl.h>
2#include <unistd.h> 2#include <unistd.h>
3#include "cablerun.h" 3#include "cablerun.h"
4 4
5void CableRun::detectState( NodeCollection * NC ) { 5State_t CableRun::detectState( void ) {
6 6
7 int fd = open( Data->Device.latin1(), O_RDWR ); 7 int fd = open( Data->Device.latin1(), O_RDWR );
8 8
9 if( fd < 0 ) { 9 if( fd < 0 ) {
10 NC->setCurrentState( Unavailable ); 10 return Unavailable;
11 } 11 }
12 close( fd ); 12 close( fd );
13 NC->setCurrentState( Available ); 13 return Available;
14} 14}
15 15
16bool CableRun::setState( NodeCollection * NC, Action_t A, bool ) { 16QString CableRun::setMyState( NodeCollection *, Action_t , bool ) {
17 if( A == Activate ) { 17 return QString();
18 detectState(NC);
19 return (NC->currentState() == Available);
20 }
21 return 1;
22}
23
24bool CableRun::canSetState( State_t , Action_t ) {
25 return 1;
26} 18}
27 19
28QString CableRun::deviceFile( void ) { 20QString CableRun::deviceFile( void ) {
29 return Data->Device; 21 return Data->Device;
30} 22}
diff --git a/noncore/settings/networksettings2/cable/cablerun.h b/noncore/settings/networksettings2/cable/cablerun.h
index 20608f6..41aea01 100644
--- a/noncore/settings/networksettings2/cable/cablerun.h
+++ b/noncore/settings/networksettings2/cable/cablerun.h
@@ -1,26 +1,26 @@
1#include <asline.h> 1#include <netnode.h>
2#include "cabledata.h" 2#include "cabledata.h"
3 3
4class CableRun : public AsLine { 4class CableRun : public RuntimeInfo {
5 5
6public : 6public :
7 7
8 CableRun( ANetNodeInstance * NNI, 8 CableRun( ANetNodeInstance * NNI,
9 CableData_t & D ) : AsLine( NNI ) 9 CableData & D ) : RuntimeInfo( NNI )
10 { Data = &D; } 10 { Data = &D; }
11 11
12 virtual AsLine * asLine( void ) 12 virtual RuntimeInfo * line( void )
13 { return (AsLine *)this; } 13 { return this; }
14 14
15 virtual QString deviceFile( void ); 15 virtual QString deviceFile( void );
16 16
17 State_t detectState( void );
18
17protected : 19protected :
18 20
19 void detectState( NodeCollection * NC ); 21 QString setMyState( NodeCollection * , Action_t, bool );
20 bool setState( NodeCollection * NC, Action_t A, bool Force );
21 bool canSetState( State_t Curr, Action_t A );
22 22
23private : 23private :
24 24
25 CableData_t * Data; 25 CableData * Data;
26}; 26};
diff --git a/noncore/settings/networksettings2/cable/opie-networksettings2plugin-cable.control b/noncore/settings/networksettings2/cable/opie-networksettings2plugin-cable.control
index 79520e2..dd08279 100644
--- a/noncore/settings/networksettings2/cable/opie-networksettings2plugin-cable.control
+++ b/noncore/settings/networksettings2/cable/opie-networksettings2plugin-cable.control
@@ -1,9 +1,9 @@
1Package: opie-networksettingsplugin2-bluetooth 1Package: opie-networksettings2plugin-cable
2Files: plugins/networksettings2/libcable.so* 2Files: plugins/networksettings2/libcable.so*
3Priority: optional 3Priority: optional
4Section: opie/settings 4Section: opie/settings
5Maintainer: Wim Delvaux <wimpie@handhelds.org> 5Maintainer: Wim Delvaux <wimpie@handhelds.org>
6Architecture: arm 6Architecture: arm
7Depends: opie-networksettings2, libopiecore2, libopienet2 7Depends: opie-networksettings2, libopiecore2, libopienet2
8Description: Network settings cable plugin. 8Description: Network settings cable plugin.
9Version: $QPE_VERSION$EXTRAVERSION 9Version: $QPE_VERSION$EXTRAVERSION
diff --git a/noncore/settings/networksettings2/config.in b/noncore/settings/networksettings2/config.in
index d0e5a32..d2b5f26 100644
--- a/noncore/settings/networksettings2/config.in
+++ b/noncore/settings/networksettings2/config.in
@@ -1,18 +1,21 @@
1 source noncore/settings/networksettings2/networksettings2/config.in 1 source noncore/settings/networksettings2/networksettings2/config.in
2 source noncore/settings/networksettings2/opietooth2/config.in
3 source noncore/settings/networksettings2/opietooth2_applet/config.in
2 4
3config NS2 5config NS2
4 boolean 6 boolean
5 default "y" 7 default "y"
6 depends ( LIBQPE || LIBQPE-X11 ) && LIBOPIE2CORE && NS2CORE 8 depends ( LIBQPE || LIBQPE-X11 ) && LIBOPIE2CORE && NS2CORE && NS2OPIETOOTH
7 9
8 source noncore/settings/networksettings2/profile/config.in 10 source noncore/settings/networksettings2/profile/config.in
9 source noncore/settings/networksettings2/network/config.in 11 source noncore/settings/networksettings2/network/config.in
10 source noncore/settings/networksettings2/lancard/config.in 12 source noncore/settings/networksettings2/lancard/config.in
11 source noncore/settings/networksettings2/ppp/config.in 13 source noncore/settings/networksettings2/ppp/config.in
12 source noncore/settings/networksettings2/wlan/config.in 14 source noncore/settings/networksettings2/wlan/config.in
13 source noncore/settings/networksettings2/usb/config.in 15 source noncore/settings/networksettings2/usb/config.in
14 source noncore/settings/networksettings2/irda/config.in 16 source noncore/settings/networksettings2/irda/config.in
15 source noncore/settings/networksettings2/vpn/config.in 17 source noncore/settings/networksettings2/vpn/config.in
16 source noncore/settings/networksettings2/bluetooth/config.in 18 source noncore/settings/networksettings2/bluetooth/config.in
17 source noncore/settings/networksettings2/cable/config.in 19 source noncore/settings/networksettings2/cable/config.in
18 source noncore/settings/networksettings2/modem/config.in 20 source noncore/settings/networksettings2/modem/config.in
21 source noncore/settings/networksettings2/gprs/config.in
diff --git a/noncore/settings/networksettings2/editconnection.cpp b/noncore/settings/networksettings2/editconnection.cpp
index 77826d1..3f8a53f 100644
--- a/noncore/settings/networksettings2/editconnection.cpp
+++ b/noncore/settings/networksettings2/editconnection.cpp
@@ -1,16 +1,17 @@
1#include <opie2/odebug.h>
1#include <qlistview.h> 2#include <qlistview.h>
2#include <qwidgetstack.h> 3#include <qwidgetstack.h>
3#include <qframe.h> 4#include <qframe.h>
4#include <qcombobox.h> 5#include <qcombobox.h>
5#include <qtabwidget.h> 6#include <qtabwidget.h>
6#include <qmessagebox.h> 7#include <qmessagebox.h>
7#include <qpushbutton.h> 8#include <qpushbutton.h>
8#include <qlineedit.h> 9#include <qlineedit.h>
9#include <qheader.h> 10#include <qheader.h>
10#include <qpainter.h> 11#include <qpainter.h>
11#include <qcheckbox.h> 12#include <qcheckbox.h>
12#include <qlabel.h> 13#include <qlabel.h>
13 14
14#include "editconnection.h" 15#include "editconnection.h"
15#include "resources.h" 16#include "resources.h"
16#include "netnode.h" 17#include "netnode.h"
@@ -18,32 +19,39 @@
18// 19//
19// 20//
20// THESE TO GIVE BETTER FEEDBACK ABOUT DISABLED ITEMS 21// THESE TO GIVE BETTER FEEDBACK ABOUT DISABLED ITEMS
21// 22//
22// 23//
23 24
24class MyQCheckListItem : public QCheckListItem 25class MyQCheckListItem : public QCheckListItem
25{ 26{
26public: 27public:
27 MyQCheckListItem( QListView *parent, const QString & S, Type T ) : 28 MyQCheckListItem( QListView *parent, const QString & S, Type T ) :
28 QCheckListItem( parent, S, T ) { } 29 QCheckListItem( parent, S, T ) { }
29 MyQCheckListItem( QCheckListItem *parent, const QString & S, Type T ) : 30 MyQCheckListItem( QCheckListItem *parent, const QString & S, Type T ) :
30 QCheckListItem( parent, S, T ) { } 31 QCheckListItem( parent, S, T ) { }
31 MyQCheckListItem( QListViewItem *parent, const QString & S, Type T ) : 32 MyQCheckListItem( QListViewItem *parent, const QString & S, Type T ) :
32 QCheckListItem( parent, S, T ) { } 33 QCheckListItem( parent, S, T ) { }
33 34
35 MyQCheckListItem( QListView *parent, const QString & S ) :
36 QCheckListItem( parent, S, QCheckListItem::Controller ) { }
37 MyQCheckListItem( QCheckListItem *parent, const QString & S ) :
38 QCheckListItem( parent, S, QCheckListItem::Controller ) { }
39 MyQCheckListItem( QListViewItem *parent, const QString & S ) :
40 QCheckListItem( parent, S, QCheckListItem::Controller ) { }
41
34 virtual void paintCell( QPainter *p, const QColorGroup &cg, 42 virtual void paintCell( QPainter *p, const QColorGroup &cg,
35 int column, int width, int alignment ); 43 int column, int width, int alignment );
36 44
37}; 45};
38 46
39void MyQCheckListItem::paintCell( QPainter *p, const QColorGroup &cg, 47void MyQCheckListItem::paintCell( QPainter *p, const QColorGroup &cg,
40 int column, int width, int alignment ) 48 int column, int width, int alignment )
41{ 49{
42 QColorGroup _cg( cg ); 50 QColorGroup _cg( cg );
43 QColor c = _cg.text(); 51 QColor c = _cg.text();
44 if ( ! isSelectable() ) 52 if ( ! isSelectable() )
45 _cg.setColor( QColorGroup::Text, Qt::lightGray ); 53 _cg.setColor( QColorGroup::Text, Qt::lightGray );
46 QCheckListItem::paintCell( p, _cg, column, width, alignment ); 54 QCheckListItem::paintCell( p, _cg, column, width, alignment );
47 _cg.setColor( QColorGroup::Text, c ); 55 _cg.setColor( QColorGroup::Text, c );
48} 56}
49 57
@@ -103,137 +111,179 @@ NodeCollection * EditConnection::getTmpCollection( void ) {
103 // content is stil OK 111 // content is stil OK
104 return &(TmpCollection); 112 return &(TmpCollection);
105 113
106 // reset collection -> delete all NEW NetNodes 114 // reset collection -> delete all NEW NetNodes
107 for( QListIterator<ANetNodeInstance> it(TmpCollection); 115 for( QListIterator<ANetNodeInstance> it(TmpCollection);
108 it.current(); 116 it.current();
109 ++it ) { 117 ++it ) {
110 if( it.current()->isNew() ) { 118 if( it.current()->isNew() ) {
111 delete it.current(); 119 delete it.current();
112 } 120 }
113 } 121 }
114 TmpCollection.clear(); 122 TmpCollection.clear();
115 123
116 // update content 124 // update content
117 QListViewItem * it = Nodes_LV->firstChild(); 125 QListViewItem * it = Nodes_LV->firstChild();
118 ANetNode * NN; 126 ANetNode * NN;
119 // start iter 127
128 // start iter (if there is a collection)
129 /*
130
131 a node collection is sorted from the toplevel
132 node to the deepest node
133
134 */
120 ANetNodeInstance * NNI = 135 ANetNodeInstance * NNI =
121 (SelectedNodes) ? SelectedNodes->first() : 0 ; 136 (SelectedNodes) ? SelectedNodes->first() : 0 ;
122 137
123 TmpCollection.setModified( 0 ); 138 TmpCollection.setModified( 0 );
124 139
140 // the listview always starts with the toplevel
141 // hierarchy. This is always a controller item
125 while ( it ) { 142 while ( it ) {
126 NN = (*Mapping)[it]; 143 NN = (*Mapping)[it];
127 if( NN == 0 ) { 144 if( NN == 0 ) {
128 // child is controller -> has sub radio 145 // this item is a controller ->
129 // check if one radio is selected 146 // has radio items as children ->
147 // find selected one
130 it = it->firstChild(); 148 it = it->firstChild();
131 while( it ) { 149 while( it ) {
132 if( ((QCheckListItem *)it)->isOn() ) { 150 if( ((QCheckListItem *)it)->isOn() ) {
133 // this radio is selected -> go deeper 151 // this radio is selected -> go deeper
134 if( SelectedNodes == 0 ||
135 NNI == 0 ||
136 it->text(0) != NNI->nodeClass()->name() ) {
137 // new item not in previous collection
138 ANetNodeInstance * NNI = (*Mapping)[it]->createInstance();
139 NNI->initialize();
140 // this node type not in collection
141 TmpCollection.append( NNI );
142 // master collection changed because new item in it
143 TmpCollection.setModified( 1 );
144 // no more valid items in old list
145 NNI = 0;
146 } else {
147 // already in list -> copy pointer
148 TmpCollection.append( NNI );
149 NNI = SelectedNodes->next();
150 }
151 it = it->firstChild();
152 // do not bother to check other items
153 break; 152 break;
154 } 153 }
155 it = it->nextSibling(); 154 it = it->nextSibling();
156 } 155 }
156
157 if( ! it ) {
158 owarn << "Radio not selected" << oendl;
159 TmpIsValid = 0;
160 return 0;
161 }
162
163 // it now contains selected radio
164 NN = (*Mapping)[it];
165 }
166
167 // NN here contains the netnode of the
168 // current item -> this node needs to
169 // be stored in the collection
170 if( NNI == 0 ||
171 it->text(0) != NNI->nodeClass()->name() ) {
172 // new item not in previous collection
173 ANetNodeInstance * NNI = NN->createInstance();
174 NNI->initialize();
175 // this node type not in collection
176 TmpCollection.append( NNI );
177 // master collection changed because new item in it
178 TmpCollection.setModified( 1 );
179 // no more valid items in old list
180 NNI = 0;
157 } else { 181 } else {
158 // check children 182 // already in list -> copy pointer
159 it = it->firstChild(); 183 TmpCollection.append( NNI );
184 NNI = SelectedNodes->next();
160 } 185 }
186
187 // go deeper to next level
188 // this level is can be a new controller
189 // or an item
190 it = it->firstChild();
161 } 191 }
162 192
163 TmpIsValid = 1; 193 TmpIsValid = 1;
164 return &(TmpCollection); 194 return &(TmpCollection);
165} 195}
166 196
167// pass a connection NodeCollection to be edited 197// pass a connection NodeCollection to be edited
168void EditConnection::setConnection( NodeCollection * NC ) { 198void EditConnection::setConnection( NodeCollection * NC ) {
169 ANetNodeInstance * NNI; 199 ANetNodeInstance * NNI;
170 ANetNode * NN; 200 ANetNode * NN;
171 201
172 SelectedNodes = NC; 202 SelectedNodes = NC;
173 Name_LE->setText( NC->name() ); 203 Name_LE->setText( NC->name() );
174 NNI = NC->first(); 204 NNI = NC->first();
175 205
176 // show configure tabl 206 // show configure tabl
177 Tab_TB->setCurrentPage( 1 ); 207 Tab_TB->setCurrentPage( 1 );
178 208
179 // valid colledction 209 // valid colledction
180 Tab_TB->setTabEnabled( Setup_FRM, FALSE ); 210 Tab_TB->setTabEnabled( Setup_FRM, FALSE );
181 Setup_FRM->setEnabled( FALSE ); 211 Setup_FRM->setEnabled( FALSE );
182 212
183 // select items in collection 213 // select items in collection
184 QListViewItem * it = Nodes_LV->firstChild(); 214 QListViewItem * it = Nodes_LV->firstChild();
185 bool Found; 215 bool Found;
186 216
187 TmpIsValid = 0; 217 TmpIsValid = 0;
188 218
189 while ( it ) { 219 while ( it ) {
190 // listitem corresponds to netnode
191 NN = (*Mapping)[it]; 220 NN = (*Mapping)[it];
192 if( NN == 0 ) { 221 if( NN == 0 ) {
193 // child is controller -> has sub radio 222 // this item is a controller ->
194 QString Ctr = it->text(0); 223 // has radio items as children ->
195 // check if one radio is selected 224 // find selected one
196 it = it->firstChild(); 225 it = it->firstChild();
197 Found = 0; 226 Found = 0;
198 while( it ) { 227 while( it ) {
199 if( NNI && it->text(0) == NNI->nodeClass()->name() ) { 228 if( NNI && it->text(0) == NNI->nodeClass()->name() ) {
200 // this radio is part of the collection 229 // this radio is part of the collection
201 ((QCheckListItem *)it)->setOn( 1 ); 230 ((QCheckListItem *)it)->setOn( 1 );
202 updateGUI( it, NNI->nodeClass() ); 231 updateGUI( it, NNI->nodeClass() );
203 // check its children 232 // check its children
204 Found = 1; 233 Found = 1;
205 it = it->firstChild(); 234 it = it->firstChild();
206 NNI = SelectedNodes->next(); 235 NNI = SelectedNodes->next();
207 // do not bother to check other items 236 // do not bother to check other items
208 break; 237 break;
209 } 238 }
210 it = it->nextSibling(); 239 it = it->nextSibling();
211 } 240 }
241
212 if( ! Found ) { 242 if( ! Found ) {
213 // this means that this level is NOT present in collection 243 // this means that this level is NOT present in collection
214 // probably INCOMPATIBEL collection OR Missing plugin 244 // probably INCOMPATIBEL collection OR Missing plugin
215 QMessageBox::warning( 245 QMessageBox::warning(
216 0, 246 0,
217 tr( "Error presentig Connection" ), 247 tr( "Error presentig Connection" ),
218 tr( "<p>Old connection or missing plugin \"<i>%1</i>\"</p>" ). 248 tr( "<p>Old connection or missing plugin \"<i>%1</i>\"</p>" ).
219 arg(Ctr) ); 249 arg(NNI->nodeClass()->name()) );
220 return; 250 return;
221 } 251 }
252
253 // it now contains selected radio
254 NN = (*Mapping)[it];
222 } else { 255 } else {
223 // automatic item -> check children 256 // automatic selection
257 if( NNI == 0 || it->text(0) != NNI->nodeClass()->name() ) {
258 // should exist and be the same
259 if( NNI ) {
260 QMessageBox::warning(
261 0,
262 tr( "Error presentig Connection" ),
263 tr( "<p>Old connection or missing plugin \"<i>%1</i>\"</p>" ).
264 arg(NNI->nodeClass()->name()) );
265 } else {
266 QMessageBox::warning(
267 0,
268 tr( "Error presentig Connection" ),
269 tr( "<p>Missing connection\"<i>%1</i>\"</p>" ).
270 arg(it->text(0)) );
271 }
272 return;
273 }
224 it = it->firstChild(); 274 it = it->firstChild();
225 } 275 }
226 } 276 }
227} 277}
228 278
229// get result of editing (either new OR updated collection 279// get result of editing (either new OR updated collection
230NodeCollection * EditConnection::connection( void ) { 280NodeCollection * EditConnection::connection( void ) {
231 281
232 if( SelectedNodes == 0 ) { 282 if( SelectedNodes == 0 ) {
233 // new collection 283 // new collection
234 SelectedNodes = new NodeCollection; 284 SelectedNodes = new NodeCollection;
235 } 285 }
236 286
237 // clean out old entries 287 // clean out old entries
238 SelectedNodes->clear(); 288 SelectedNodes->clear();
239 289
@@ -256,63 +306,65 @@ NodeCollection * EditConnection::connection( void ) {
256} 306}
257 307
258// Build device tree -> start 308// Build device tree -> start
259void EditConnection::buildFullTree( void ) { 309void EditConnection::buildFullTree( void ) {
260 ANetNode * NN; 310 ANetNode * NN;
261 311
262 // toplevel item 312 // toplevel item
263 MyQCheckListItem * TheTop = new MyQCheckListItem( 313 MyQCheckListItem * TheTop = new MyQCheckListItem(
264 Nodes_LV, 314 Nodes_LV,
265 NSResources->netNode2Name("fullsetup"), 315 NSResources->netNode2Name("fullsetup"),
266 QCheckListItem::Controller ); 316 QCheckListItem::Controller );
267 TheTop->setOpen( TRUE ); 317 TheTop->setOpen( TRUE );
268 Description_LBL->setText( 318 Description_LBL->setText(
269 NSResources->netNode2Description( "fullsetup" ) ); 319 NSResources->netNode2Description( "fullsetup" ) );
270 Nodes_LV->setSelected( TheTop, TRUE ); 320 Nodes_LV->setSelected( TheTop, TRUE );
271 321
272 // find all Nodes that care toplevel nodes -> ie provide 322 // find all Nodes that are toplevel nodes -> ie provide
273 // TCP/IP Connection 323 // TCP/IP Connection
274 for( QDictIterator<NetNode_t> Iter(NSResources->netNodes()); 324 for( QDictIterator<NetNode_t> Iter(NSResources->netNodes());
275 Iter.current(); 325 Iter.current();
276 ++Iter ) { 326 ++Iter ) {
277 327
278 NN = Iter.current()->NetNode; 328 NN = Iter.current()->NetNode;
279 329
280 if( ! NN->isToplevel() ) { 330 if( ! NN->isToplevel() ) {
281 continue; 331 continue;
282 } 332 }
283 333
284 MyQCheckListItem * it = new MyQCheckListItem( TheTop, 334 MyQCheckListItem * it = new MyQCheckListItem( TheTop,
285 NN->name(), 335 NN->name(),
286 QCheckListItem::RadioButton ); 336 QCheckListItem::RadioButton );
287 it->setPixmap( 0, NSResources->getPixmap( "Devices/commprofile" ) ); 337 it->setPixmap( 0,
338 NSResources->getPixmap( NN->pixmapName() )
339 );
288 // remember that this node maps to this listitem 340 // remember that this node maps to this listitem
289 Mapping->insert( it, NN ); 341 Mapping->insert( it, NN );
290 buildSubTree( it, NN ); 342 buildSubTree( it, NN );
291 } 343 }
292} 344}
293 345
294// Build device tree -> help function 346// Build device tree -> help function
295void EditConnection::buildSubTree( QListViewItem * it, ANetNode *NN ) { 347void EditConnection::buildSubTree( QListViewItem * it, ANetNode *NN ) {
296 ANetNode::NetNodeList & NNL = NN->alternatives(); 348 ANetNode::NetNodeList & NNL = NN->alternatives();
297 349
298 if( NNL.size() > 1 ) { 350 if( NNL.size() > 1 ) {
299 // this node has alternatives -> needs radio buttons 351 // this node has alternatives -> needs radio buttons
300 it = new MyQCheckListItem( 352 it = new MyQCheckListItem(
301 it, 353 it,
302 NSResources->netNode2Name(NNL[0]->provides()), 354 NSResources->netNode2Name(NN->needs()[0]),
303 QCheckListItem::Controller ); 355 QCheckListItem::Controller );
304 it->setSelectable( FALSE ); 356 it->setSelectable( FALSE );
305 } 357 }
306 358
307 for ( unsigned int i=0; i < NNL.size(); i++ ) { 359 for ( unsigned int i=0; i < NNL.size(); i++ ) {
308 QListViewItem * CI; 360 QListViewItem * CI;
309 if( NNL.size() > 1 ) { 361 if( NNL.size() > 1 ) {
310 // generate radio buttons 362 // generate radio buttons
311 CI = new MyQCheckListItem( 363 CI = new MyQCheckListItem(
312 (QCheckListItem *)it, 364 (QCheckListItem *)it,
313 NNL[i]->name(), QCheckListItem::RadioButton ); 365 NNL[i]->name(), QCheckListItem::RadioButton );
314 // remember that this node maps to this listitem 366 // remember that this node maps to this listitem
315 CI->setPixmap( 0, NSResources->getPixmap( NNL[i]->pixmapName() ) ); 367 CI->setPixmap( 0, NSResources->getPixmap( NNL[i]->pixmapName() ) );
316 Mapping->insert( CI, NNL[i] ); 368 Mapping->insert( CI, NNL[i] );
317 CI->setSelectable( FALSE ); 369 CI->setSelectable( FALSE );
318 } else { 370 } else {
@@ -374,36 +426,37 @@ void EditConnection::SLOT_AutoCollapse( bool b ) {
374 426
375// clicked on node in tree -> update GUI 427// clicked on node in tree -> update GUI
376void EditConnection::SLOT_SelectNode( QListViewItem * it ) { 428void EditConnection::SLOT_SelectNode( QListViewItem * it ) {
377 ANetNode * NN; 429 ANetNode * NN;
378 if( it == 0 || it->depth() == 0 ) { 430 if( it == 0 || it->depth() == 0 ) {
379 Description_LBL->setText( 431 Description_LBL->setText(
380 NSResources->netNode2Description( "fullsetup" ) ); 432 NSResources->netNode2Description( "fullsetup" ) );
381 // topevel or no selection 433 // topevel or no selection
382 return; 434 return;
383 } 435 }
384 436
385 // store conversion from lvitem to node 437 // store conversion from lvitem to node
386 NN = (*Mapping)[ it ]; 438 NN = (*Mapping)[ it ];
387 439
388 if( ! NN ) { 440 if( ! NN ) {
389 // intermediate node 441 // intermediate node
390 NN = (*Mapping)[ it->firstChild() ]; 442 NN = (*Mapping)[ it->parent() ];
391 if( NN ) { 443 if( NN ) {
392 // figure out type of this node -> produce mesage 444 // figure out type of this node -> produce mesage
393 Description_LBL->setText( NSResources->netNode2Description(NN->provides()) ); 445 Description_LBL->setText( NSResources->netNode2Description(
446 NN->needs()[0]) );
394 } else { 447 } else {
395 Description_LBL->setText( "" ); 448 Description_LBL->setText( "" );
396 } 449 }
397 return; 450 return;
398 } 451 }
399 452
400 Description_LBL->setText( NN->nodeDescription() ); 453 Description_LBL->setText( NN->nodeDescription() );
401 454
402 if( ! it->isSelectable() ) { 455 if( ! it->isSelectable() ) {
403 return; 456 return;
404 } 457 }
405 458
406 if( ! ((QCheckListItem *)it)->isOn() ) { 459 if( ! ((QCheckListItem *)it)->isOn() ) {
407 // clicked on line but NOT on Check or Radio item 460 // clicked on line but NOT on Check or Radio item
408 return; 461 return;
409 } 462 }
@@ -526,52 +579,53 @@ void EditConnection::enablePath( QListViewItem * it, bool pha ) {
526 it->setOpen( TRUE ); 579 it->setOpen( TRUE );
527 enablePath( it->firstChild(), 580 enablePath( it->firstChild(),
528 NN->alternatives().size() > 1); 581 NN->alternatives().size() > 1);
529 } 582 }
530 } else { 583 } else {
531 // controller node 584 // controller node
532 it->setSelectable( TRUE ); 585 it->setSelectable( TRUE );
533 it->setOpen( TRUE ); 586 it->setOpen( TRUE );
534 enablePath( it->firstChild(), pha ); 587 enablePath( it->firstChild(), pha );
535 } 588 }
536 it = it->nextSibling(); 589 it = it->nextSibling();
537 } 590 }
538} 591}
539 592
540// do we have a complete configuration (all needs are provided for ?) 593// do we have a complete configuration (all needs are provided for ?)
541bool EditConnection::haveCompleteConfig( QListViewItem * it ) { 594bool EditConnection::haveCompleteConfig( QListViewItem * it ) {
542 if( it == 0 || ((QCheckListItem *)it)->isOn() ) { 595
543 // check children 596 // check if all below this level is selected
544 it = (it) ? it->firstChild() : Nodes_LV->firstChild() ; 597 it = ( it ) ?it : Nodes_LV->firstChild();
545 while ( it ) { 598 ANetNode *NN;
546 if( ((QCheckListItem *)it)->type() == 599 bool Found;
547 QCheckListItem::Controller ) { 600
548 // child is controller -> has sub radio 601 while ( it ) {
549 // check if one radio is selected 602 NN = (*Mapping)[it];
550 it = it->firstChild(); 603 if( NN == 0 ) {
551 while( it ) { 604 // this item is a controller ->
552 if( ((QCheckListItem *)it)->isOn() ) { 605 // has radio items as children ->
553 // this radio is selected -> go deeper 606 // find selected one
554 it = it->firstChild(); 607 it = it->firstChild();
555 if( ! it ) { 608 Found = 0;
556 // was deepest level 609 while( it ) {
557 return 1; 610 if( ((QCheckListItem *)it)->isOn() ) {
558 } 611 Found = 1;
559 // do not bother to check other items 612 // go deeper
560 break; 613 it = it->firstChild();
561 } 614 break;
562 it = it->nextSibling();
563 }
564 if( ! it ) {
565 // no radio selected
566 return 0;
567 } 615 }
568 } else { 616 it = it->nextSibling();
569 // check children
570 it = it->firstChild();
571 } 617 }
618
619 if( ! Found ) {
620 return 0; // no not complete -> a radio should have been chkd
621 }
622
623 // it now contains selected radio
624 NN = (*Mapping)[it];
625 } else {
626 // automatic selection
627 it = it->firstChild();
572 } 628 }
573 // deepest level -> all is still OK 629 }
574 return 1; 630 return 1;
575 } // was not ON
576 return 0;
577} 631}
diff --git a/noncore/settings/networksettings2/irda/irda_NN.cpp b/noncore/settings/networksettings2/irda/irda_NN.cpp
index 9483e22..485cad3 100644
--- a/noncore/settings/networksettings2/irda/irda_NN.cpp
+++ b/noncore/settings/networksettings2/irda/irda_NN.cpp
@@ -1,49 +1,54 @@
1#include "irda_NN.h" 1#include "irda_NN.h"
2#include "irda_NNI.h" 2#include "irda_NNI.h"
3 3
4static const char * IRDANeeds[] = 4static const char * IRDANeeds[] =
5 { 0 5 { 0
6 }; 6 };
7 7
8static const char * IRDAProvides[] =
9 { "line",
10 0
11 };
12
8/** 13/**
9 * Constructor, find all of the possible interfaces 14 * Constructor, find all of the possible interfaces
10 */ 15 */
11IRDANetNode::IRDANetNode() : ANetNode(tr("Infrared link")) { 16IRDANetNode::IRDANetNode() : ANetNode(tr("Infrared link")) {
12} 17}
13 18
14/** 19/**
15 * Delete any interfaces that we own. 20 * Delete any interfaces that we own.
16 */ 21 */
17IRDANetNode::~IRDANetNode(){ 22IRDANetNode::~IRDANetNode(){
18} 23}
19 24
20const QString IRDANetNode::nodeDescription(){ 25const QString IRDANetNode::nodeDescription(){
21 return tr("\ 26 return tr("\
22<p>Sets up a infra red serial link.</p>\ 27<p>Sets up a infra red serial link.</p>\
23" 28"
24); 29);
25} 30}
26 31
27ANetNodeInstance * IRDANetNode::createInstance( void ) { 32ANetNodeInstance * IRDANetNode::createInstance( void ) {
28 return new AIRDA( this ); 33 return new AIRDA( this );
29} 34}
30 35
31const char ** IRDANetNode::needs( void ) { 36const char ** IRDANetNode::needs( void ) {
32 return IRDANeeds; 37 return IRDANeeds;
33} 38}
34 39
35const char * IRDANetNode::provides( void ) { 40const char ** IRDANetNode::provides( void ) {
36 return "line"; 41 return IRDAProvides;
37} 42}
38 43
39void IRDANetNode::setSpecificAttribute( QString & , QString & ) { 44void IRDANetNode::setSpecificAttribute( QString & , QString & ) {
40} 45}
41 46
42void IRDANetNode::saveSpecificAttribute( QTextStream & ) { 47void IRDANetNode::saveSpecificAttribute( QTextStream & ) {
43} 48}
44 49
45extern "C" { 50extern "C" {
46void create_plugin( QList<ANetNode> & PNN ) { 51void create_plugin( QList<ANetNode> & PNN ) {
47 PNN.append( new IRDANetNode() ); 52 PNN.append( new IRDANetNode() );
48} 53}
49} 54}
diff --git a/noncore/settings/networksettings2/irda/irda_NN.h b/noncore/settings/networksettings2/irda/irda_NN.h
index 900bbc6..9e5c5e6 100644
--- a/noncore/settings/networksettings2/irda/irda_NN.h
+++ b/noncore/settings/networksettings2/irda/irda_NN.h
@@ -7,30 +7,30 @@ class AIRDA;
7 7
8class IRDANetNode : public ANetNode { 8class IRDANetNode : public ANetNode {
9 9
10 Q_OBJECT 10 Q_OBJECT
11 11
12public: 12public:
13 13
14 IRDANetNode(); 14 IRDANetNode();
15 virtual ~IRDANetNode(); 15 virtual ~IRDANetNode();
16 16
17 virtual const QString pixmapName() 17 virtual const QString pixmapName()
18 { return "Devices/irda"; } 18 { return "Devices/irda"; }
19 19
20 virtual const QString nodeDescription() ; 20 virtual const QString nodeDescription() ;
21 virtual ANetNodeInstance * createInstance( void ); 21 virtual ANetNodeInstance * createInstance( void );
22 virtual const char ** needs( void ); 22 virtual const char ** needs( void );
23 virtual const char * provides( void ); 23 virtual const char ** provides( void );
24 24
25private: 25private:
26 26
27 virtual void setSpecificAttribute( QString & Attr, QString & Value ); 27 virtual void setSpecificAttribute( QString & Attr, QString & Value );
28 virtual void saveSpecificAttribute( QTextStream & TS ); 28 virtual void saveSpecificAttribute( QTextStream & TS );
29}; 29};
30 30
31extern "C" 31extern "C"
32{ 32{
33 void create_plugin( QList<ANetNode> & PNN ); 33 void create_plugin( QList<ANetNode> & PNN );
34}; 34};
35 35
36#endif 36#endif
diff --git a/noncore/settings/networksettings2/irda/irdadata.h b/noncore/settings/networksettings2/irda/irdadata.h
index c3c683e..568f796 100644
--- a/noncore/settings/networksettings2/irda/irdadata.h
+++ b/noncore/settings/networksettings2/irda/irdadata.h
@@ -1,18 +1,19 @@
1#ifndef IRDA_DATA_H 1#ifndef IRDA_DATA_H
2#define IRDA_DATA_H 2#define IRDA_DATA_H
3 3
4#include <qstring.h> 4#include <qstring.h>
5 5
6typedef struct IRDAData { 6class IRDAData {
7public :
7 QString Device; 8 QString Device;
8 QString LockFile; 9 QString LockFile;
9 long Speed; 10 long Speed;
10 short Parity; 11 short Parity;
11 short DataBits; 12 short DataBits;
12 short StopBits; 13 short StopBits;
13 bool HardwareControl; 14 bool HardwareControl;
14 bool SoftwareControl; 15 bool SoftwareControl;
15 16
16} IRDAData_t; 17} ;
17 18
18#endif 19#endif
diff --git a/noncore/settings/networksettings2/irda/irdarun.h b/noncore/settings/networksettings2/irda/irdarun.h
index 4258aff..d3b714b 100644
--- a/noncore/settings/networksettings2/irda/irdarun.h
+++ b/noncore/settings/networksettings2/irda/irdarun.h
@@ -1,28 +1,25 @@
1#include <asline.h> 1#include <netnode.h>
2#include "irdadata.h" 2#include "irdadata.h"
3 3
4class IRDARun : public AsLine { 4class IRDARun : public RuntimeInfo {
5 5
6public : 6public :
7 7
8 IRDARun( ANetNodeInstance * NNI, 8 IRDARun( ANetNodeInstance * NNI,
9 IRDAData & Data ) : AsLine( NNI ) 9 IRDAData & Data ) : RuntimeInfo( NNI )
10 { } 10 { }
11 11
12 virtual AsLine * asLine( void ) 12 virtual RuntimeInfo * line( void )
13 { return (AsLine *)this; } 13 { return this; }
14 14
15 virtual QString deviceFile( void ) 15 virtual QString deviceFile( void )
16 { return QString( "/dev/irda" ); } 16 { return QString( "/dev/irda" ); }
17 17
18protected : 18 State_t detectState( void )
19 19 { return Unknown; }
20 void detectState( NodeCollection * )
21 { }
22 20
23 bool setState( NodeCollection * , Action_t, bool ) 21protected :
24 { return 0; }
25 22
26 bool canSetState( State_t , Action_t ) 23 QString setMyState( NodeCollection * , Action_t, bool )
27 { return 0; } 24 { return QString(); }
28}; 25};
diff --git a/noncore/settings/networksettings2/irda/opie-networksettings2plugin-irda.control b/noncore/settings/networksettings2/irda/opie-networksettings2plugin-irda.control
index 938bee5..4afbbcf 100644
--- a/noncore/settings/networksettings2/irda/opie-networksettings2plugin-irda.control
+++ b/noncore/settings/networksettings2/irda/opie-networksettings2plugin-irda.control
@@ -1,9 +1,9 @@
1Package: opie-networksettingsplugin2-irda 1Package: opie-networksettings2plugin-irda
2Files: plugins/networksettings2/libirda.so* 2Files: plugins/networksettings2/libirda.so*
3Priority: optional 3Priority: optional
4Section: opie/settings 4Section: opie/settings
5Maintainer: Wim Delvaux <wimpie@handhelds.org> 5Maintainer: Wim Delvaux <wimpie@handhelds.org>
6Architecture: arm 6Architecture: arm
7Depends: opie-networksettings2, libopiecore2, libopienet2 7Depends: opie-networksettings2, libopiecore2, libopienet2
8Description: Network settings irda plugin. 8Description: Network settings irda plugin.
9Version: $QPE_VERSION$EXTRAVERSION 9Version: $QPE_VERSION$EXTRAVERSION
diff --git a/noncore/settings/networksettings2/lancard/lancard_NN.cpp b/noncore/settings/networksettings2/lancard/lancard_NN.cpp
index 20ae7f6..e36f757 100644
--- a/noncore/settings/networksettings2/lancard/lancard_NN.cpp
+++ b/noncore/settings/networksettings2/lancard/lancard_NN.cpp
@@ -1,54 +1,60 @@
1#include "lancard_NN.h" 1#include "lancard_NN.h"
2#include "lancard_NNI.h" 2#include "lancard_NNI.h"
3 3
4static const char * LanCardNeeds[] = 4static const char * LanCardNeeds[] =
5 { 0 }; 5 { 0
6 };
7
8static const char * LanCardProvides[] =
9 { "device",
10 0
11 };
6 12
7/** 13/**
8 * Constructor, find all of the possible interfaces 14 * Constructor, find all of the possible interfaces
9 */ 15 */
10LanCardNetNode::LanCardNetNode() : ANetNode(tr("LAN card")), NICMACAddresses() { 16LanCardNetNode::LanCardNetNode() : ANetNode(tr("LAN card")), NICMACAddresses() {
11 InstanceCount = 2; 17 InstanceCount = 2;
12} 18}
13 19
14/** 20/**
15 * Delete any interfaces that we own. 21 * Delete any interfaces that we own.
16 */ 22 */
17LanCardNetNode::~LanCardNetNode(){ 23LanCardNetNode::~LanCardNetNode(){
18} 24}
19 25
20const QString LanCardNetNode::nodeDescription(){ 26const QString LanCardNetNode::nodeDescription(){
21 return tr("\ 27 return tr("\
22<p>Sets up a wired regular LAN card.</p>\ 28<p>Sets up a wired regular LAN card.</p>\
23<p>Use this to set up 10/100/1000 MBit LAN cards.</p>\ 29<p>Use this to set up 10/100/1000 MBit LAN cards.</p>\
24" 30"
25); 31);
26} 32}
27 33
28ANetNodeInstance * LanCardNetNode::createInstance( void ) { 34ANetNodeInstance * LanCardNetNode::createInstance( void ) {
29 return new ALanCard( this ); 35 return new ALanCard( this );
30} 36}
31 37
32 38
33const char ** LanCardNetNode::needs( void ) { 39const char ** LanCardNetNode::needs( void ) {
34 return LanCardNeeds; 40 return LanCardNeeds;
35} 41}
36 42
37const char * LanCardNetNode::provides( void ) { 43const char ** LanCardNetNode::provides( void ) {
38 return "device"; 44 return LanCardProvides;
39} 45}
40 46
41QString LanCardNetNode::genNic( long nr ) { 47QString LanCardNetNode::genNic( long nr ) {
42 QString S; 48 QString S;
43 return S.sprintf( "eth%ld", nr ); 49 return S.sprintf( "eth%ld", nr );
44} 50}
45 51
46void LanCardNetNode::setSpecificAttribute( QString & A, QString & V ) { 52void LanCardNetNode::setSpecificAttribute( QString & A, QString & V ) {
47 if( A == "interfacecount" ) { 53 if( A == "interfacecount" ) {
48 InstanceCount = V.toLong(); 54 InstanceCount = V.toLong();
49 } else if ( A == "macaddress" ) { 55 } else if ( A == "macaddress" ) {
50 NICMACAddresses.append( V ); 56 NICMACAddresses.append( V );
51 } 57 }
52} 58}
53 59
54void LanCardNetNode::saveSpecificAttribute( QTextStream & TS) { 60void LanCardNetNode::saveSpecificAttribute( QTextStream & TS) {
diff --git a/noncore/settings/networksettings2/lancard/lancard_NN.h b/noncore/settings/networksettings2/lancard/lancard_NN.h
index 6882af7..dc7566a 100644
--- a/noncore/settings/networksettings2/lancard/lancard_NN.h
+++ b/noncore/settings/networksettings2/lancard/lancard_NN.h
@@ -12,33 +12,33 @@ class LanCardNetNode : public ANetNode{
12 12
13public: 13public:
14 14
15 LanCardNetNode(); 15 LanCardNetNode();
16 virtual ~LanCardNetNode(); 16 virtual ~LanCardNetNode();
17 17
18 virtual const QString pixmapName() 18 virtual const QString pixmapName()
19 { return "Devices/card"; } 19 { return "Devices/card"; }
20 20
21 virtual QString genNic( long ); 21 virtual QString genNic( long );
22 virtual long instanceCount( void ) 22 virtual long instanceCount( void )
23 { return InstanceCount; } 23 { return InstanceCount; }
24 24
25 virtual const QString nodeDescription() ; 25 virtual const QString nodeDescription() ;
26 virtual ANetNodeInstance * createInstance( void ); 26 virtual ANetNodeInstance * createInstance( void );
27 virtual const char ** needs( void ); 27 virtual const char ** needs( void );
28 virtual const char * provides( void ); 28 virtual const char ** provides( void );
29 29
30 QStringList & addressesOfNIC( void ) 30 QStringList & addressesOfNIC( void )
31 { return NICMACAddresses; } 31 { return NICMACAddresses; }
32 32
33private: 33private:
34 34
35 virtual void setSpecificAttribute( QString & Attr, QString & Value ); 35 virtual void setSpecificAttribute( QString & Attr, QString & Value );
36 virtual void saveSpecificAttribute( QTextStream & TS ); 36 virtual void saveSpecificAttribute( QTextStream & TS );
37 37
38 // number of interfaces for this device 38 // number of interfaces for this device
39 long InstanceCount; 39 long InstanceCount;
40 40
41 QStringList NICMACAddresses; 41 QStringList NICMACAddresses;
42 42
43}; 43};
44 44
diff --git a/noncore/settings/networksettings2/lancard/lancarddata.h b/noncore/settings/networksettings2/lancard/lancarddata.h
index c76767f..8f5e2b5 100644
--- a/noncore/settings/networksettings2/lancard/lancarddata.h
+++ b/noncore/settings/networksettings2/lancard/lancarddata.h
@@ -1,13 +1,14 @@
1#ifndef LANCARD_DATA_H 1#ifndef LANCARD_DATA_H
2#define LANCARD_DATA_H 2#define LANCARD_DATA_H
3 3
4#include <qstringlist.h> 4#include <qstringlist.h>
5#include <qstring.h> 5#include <qstring.h>
6 6
7typedef struct LanCardData { 7class LanCardData {
8public :
8 bool AnyLanCard; 9 bool AnyLanCard;
9 QStringList HWAddresses; 10 QStringList HWAddresses;
10 11
11} LanCardData_t; 12} ;
12 13
13#endif 14#endif
diff --git a/noncore/settings/networksettings2/lancard/lancardrun.cpp b/noncore/settings/networksettings2/lancard/lancardrun.cpp
index 1544ddc..470b797 100644
--- a/noncore/settings/networksettings2/lancard/lancardrun.cpp
+++ b/noncore/settings/networksettings2/lancard/lancardrun.cpp
@@ -1,180 +1,136 @@
1#include <qfile.h> 1#include <qfile.h>
2#include <qtextstream.h> 2#include <qtextstream.h>
3#include <qstringlist.h> 3#include <qstringlist.h>
4#include <resources.h> 4#include <resources.h>
5#include "lancardrun.h" 5#include "lancardrun.h"
6 6
7void LanCardRun::detectState( NodeCollection * NC ) { 7State_t LanCardRun::detectState( void ) {
8 8
9 // unavailable : no card found 9 // unavailable : no card found
10 // available : card found and assigned to us or free 10 // available : card found and assigned to us or free
11 // up : card found and assigned to us and up 11 // up : card found and assigned to us and up
12 12
13 QString S = QString( "/tmp/profile-%1.up" ).arg(NC->number()); 13 NodeCollection * NC = nodeCollection();
14 QString S = QString( "/tmp/profile-%1.up" ).
15 arg( NC->number());
14 System & Sys = NSResources->system(); 16 System & Sys = NSResources->system();
15 InterfaceInfo * Run; 17 InterfaceInfo * Run;
16 18
17 QFile F( S ); 19 QFile F( S );
18 20
19 if( F.open( IO_ReadOnly ) ) { 21 if( F.open( IO_ReadOnly ) ) {
20 // could open file -> read interface and assign 22 // could open file -> read interface and assign
21 QString X; 23 QString X;
22 QTextStream TS(&F); 24 QTextStream TS(&F);
23 X = TS.readLine(); 25 X = TS.readLine();
24 // find interface 26 // find interface
25 if( handlesInterface( X ) ) { 27 if( handlesInterface( X ) ) {
26 for( QDictIterator<InterfaceInfo> It(Sys.interfaces()); 28 for( QDictIterator<InterfaceInfo> It(Sys.interfaces());
27 It.current(); 29 It.current();
28 ++It ) { 30 ++It ) {
29 Run = It.current(); 31 Run = It.current();
30 if( X == Run->Name ) { 32 if( X == Run->Name ) {
31 Run->assignNode( netNode() ); 33 NC->assignInterface( Run );
32 assignInterface( Run ); 34 return IsUp;
33 NC->setCurrentState( IsUp );
34 return;
35 } 35 }
36 } 36 }
37 } 37 }
38 } 38 }
39 39
40 if( ( Run = assignedInterface() ) ) { 40 if( ( Run = NC->assignedInterface() ) ) {
41 // we already have an interface assigned -> still present ? 41 // we already have an interface assigned -> still present ?
42 if( ! Run->IsUp ) { 42 if( ! Run->IsUp ) {
43 // usb is still free -> keep assignment 43 // usb is still free -> keep assignment
44 NC->setCurrentState( Available ); 44 return Available;
45 return;
46 } // else interface is up but NOT us -> some other profile 45 } // else interface is up but NOT us -> some other profile
47 } 46 }
48 47
49 // nothing (valid) assigned to us 48 // nothing (valid) assigned to us
50 assignInterface( 0 ); 49 NC->assignInterface( 0 );
51 50
52 // find possible interface 51 // find possible interface
53 for( QDictIterator<InterfaceInfo> It(Sys.interfaces()); 52 for( QDictIterator<InterfaceInfo> It(Sys.interfaces());
54 It.current(); 53 It.current();
55 ++It ) { 54 ++It ) {
56 Run = It.current(); 55 Run = It.current();
57 if( handlesInterface( *Run ) && 56 if( handlesInterface( *Run ) &&
58 ( Run->CardType == ARPHRD_ETHER 57 ( Run->CardType == ARPHRD_ETHER
59#ifdef ARPHRD_IEEE1394 58#ifdef ARPHRD_IEEE1394
60 || Run->CardType == ARPHRD_IEEE1394 59 || Run->CardType == ARPHRD_IEEE1394
61#endif 60#endif
62 ) && 61 ) &&
63 ! Run->IsUp 62 ! Run->IsUp
64 ) { 63 ) {
65 // proper type, and Not UP -> free 64 // proper type, and Not UP -> free
66 NC->setCurrentState( Off ); 65 return Off;
67 return;
68 } 66 }
69 } 67 }
70 // no free found 68 // no free found
71 69
72 NC->setCurrentState( Unavailable ); 70 return Unavailable;
73
74} 71}
75 72
76bool LanCardRun::setState( NodeCollection * NC, Action_t A, bool ) { 73QString LanCardRun::setMyState( NodeCollection * NC, Action_t A, bool ) {
77 74
78 // we only handle activate and deactivate 75 if( A == Activate ) {
79 switch( A ) { 76 InterfaceInfo * N = getInterface();
80 case Activate : 77
81 { 78 if( ! N ) {
82 if( NC->currentState() != Off ) { 79 // no interface available
83 return 0; 80 NC->setCurrentState( Unavailable );
84 } 81 return tr("No interface found");
85 InterfaceInfo * N = getInterface(); 82 }
86 if( ! N ) { 83
87 // no interface available 84 // because we were OFF the interface
88 NC->setCurrentState( Unavailable ); 85 // we get back is NOT assigned
89 return 0; 86 NC->assignInterface( N );
90 } 87 NC->setCurrentState( Available );
91 // because we were OFF the interface 88 return QString();
92 // we get back is NOT assigned
93 N->assignNode( netNode() );
94 assignInterface( N );
95 NC->setCurrentState( Available );
96 return 1;
97 }
98 case Deactivate :
99 if( NC->currentState() == IsUp ) {
100 // bring down first
101 if( ! connection()->setState( Down ) )
102 // could not ...
103 return 0;
104 } else if( NC->currentState() != Available ) {
105 return 1;
106 }
107 assignedInterface()->assignNode( 0 ); // release
108 assignInterface( 0 );
109 NC->setCurrentState( Off );
110 return 1;
111 default :
112 // FT
113 break;
114 } 89 }
115 return 0;
116}
117 90
118bool LanCardRun::canSetState( State_t Curr, Action_t A ) { 91 if( A == Deactivate ) {
119 // we only handle up down activate and deactivate 92 NC->assignInterface( 0 );
120 switch( A ) { 93 NC->setCurrentState( Off );
121 case Activate :
122 { // at least available
123 if( Curr == Available ) {
124 return 1;
125 }
126 // or we can make one available
127 InterfaceInfo * N = getInterface();
128 if( ! N || N->assignedNode() != 0 ) {
129 // non available or assigned
130 return 0;
131 }
132 return 1;
133 }
134 case Deactivate :
135 return ( Curr >= Available );
136 default :
137 // FT
138 break;
139 } 94 }
140 return 0; 95
96 return QString();
141} 97}
142 98
143// get interface that is free or assigned to us 99// get interface that is free or assigned to us
144InterfaceInfo * LanCardRun::getInterface( void ) { 100InterfaceInfo * LanCardRun::getInterface( void ) {
145 101
146 System & S = NSResources->system(); 102 System & S = NSResources->system();
147 InterfaceInfo * best = 0, * Run; 103 InterfaceInfo * best = 0, * Run;
148 104
149 for( QDictIterator<InterfaceInfo> It(S.interfaces()); 105 for( QDictIterator<InterfaceInfo> It(S.interfaces());
150 It.current(); 106 It.current();
151 ++It ) { 107 ++It ) {
152 Run = It.current(); 108 Run = It.current();
153 if( handlesInterface( *Run ) && 109 if( handlesInterface( *Run ) &&
154 ( Run->CardType == ARPHRD_ETHER 110 ( Run->CardType == ARPHRD_ETHER
155#ifdef ARPHRD_IEEE1394 111#ifdef ARPHRD_IEEE1394
156 || Run->CardType == ARPHRD_IEEE1394 112 || Run->CardType == ARPHRD_IEEE1394
157#endif 113#endif
158 ) 114 )
159 ) { 115 ) {
160 // this is a LAN card 116 // this is a LAN card
161 if( Run->assignedNode() == netNode() ) { 117 if( Run->assignedConnection() == netNode()->connection() ) {
162 // assigned to us 118 // assigned to us
163 return Run; 119 return Run;
164 } else if( Run->assignedNode() == 0 ) { 120 } else if( Run->assignedConnection() == 0 ) {
165 // free 121 // free
166 best = Run; 122 best = Run;
167 } 123 }
168 } 124 }
169 } 125 }
170 return best; // can be 0 126 return best; // can be 0
171} 127}
172 128
173bool LanCardRun::handlesInterface( const QString & S ) { 129bool LanCardRun::handlesInterface( const QString & S ) {
174 InterfaceInfo * II; 130 InterfaceInfo * II;
175 II = NSResources->system().interface( S ); 131 II = NSResources->system().interface( S );
176 if( ( II = NSResources->system().interface( S ) ) ) { 132 if( ( II = NSResources->system().interface( S ) ) ) {
177 return handlesInterface( *II ); 133 return handlesInterface( *II );
178 } 134 }
179 return Pat.match( S ) >= 0; 135 return Pat.match( S ) >= 0;
180} 136}
diff --git a/noncore/settings/networksettings2/lancard/lancardrun.h b/noncore/settings/networksettings2/lancard/lancardrun.h
index b28dda7..57ef3fb 100644
--- a/noncore/settings/networksettings2/lancard/lancardrun.h
+++ b/noncore/settings/networksettings2/lancard/lancardrun.h
@@ -1,39 +1,37 @@
1#ifndef LANCARDRUN_H 1#ifndef LANCARDRUN_H
2#define LANCARDRUN_H 2#define LANCARDRUN_H
3 3
4#include <asdevice.h> 4#include <netnode.h>
5#include <qregexp.h> 5#include <qregexp.h>
6#include "lancarddata.h" 6#include "lancarddata.h"
7 7
8class LanCardRun : public AsDevice { 8class LanCardRun : public RuntimeInfo {
9 9
10public : 10public :
11 11
12 LanCardRun( ANetNodeInstance * NNI, 12 LanCardRun( ANetNodeInstance * NNI,
13 LanCardData & D ) : AsDevice( NNI ), 13 LanCardData & D ) : RuntimeInfo( NNI ),
14 Pat( "eth[0-9]" ) 14 Pat( "eth[0-9]" ) {
15 { Data = &D; } 15 Data = &D;
16 }
16 17
17 virtual AsDevice * device( void ) 18 virtual RuntimeInfo * device( void )
18 { return (AsDevice *)this; } 19 { return this; }
19 20
20 virtual AsDevice * asDevice( void ) 21 bool handlesInterface( const QString & I );
21 { return (AsDevice *)this; } 22 bool handlesInterface( const InterfaceInfo & II );
22 23
23protected : 24 State_t detectState( void );
24 25
25 void detectState( NodeCollection * NC ); 26protected :
26 bool setState( NodeCollection * NC, Action_t A, bool Force );
27 bool canSetState( State_t Curr, Action_t A );
28 27
29 bool handlesInterface( const QString & I ); 28 QString setMyState( NodeCollection * , Action_t, bool );
30 bool handlesInterface( const InterfaceInfo & II );
31 29
32private : 30private :
33 31
34 InterfaceInfo * getInterface( void ); 32 InterfaceInfo * getInterface( void );
35 QRegExp Pat; 33 QRegExp Pat;
36 LanCardData * Data; 34 LanCardData * Data;
37 35
38}; 36};
39#endif 37#endif
diff --git a/noncore/settings/networksettings2/lancard/opie-networksettings2plugin-lancard.control b/noncore/settings/networksettings2/lancard/opie-networksettings2plugin-lancard.control
index d5aca66..4f87d04 100644
--- a/noncore/settings/networksettings2/lancard/opie-networksettings2plugin-lancard.control
+++ b/noncore/settings/networksettings2/lancard/opie-networksettings2plugin-lancard.control
@@ -1,9 +1,9 @@
1Package: opie-networksettingsplugin2-lancard 1Package: opie-networksettings2plugin-lancard
2Files: plugins/networksettings2/liblancard.so* 2Files: plugins/networksettings2/liblancard.so*
3Priority: optional 3Priority: optional
4Section: opie/settings 4Section: opie/settings
5Maintainer: Wim Delvaux <wimpie@handhelds.org> 5Maintainer: Wim Delvaux <wimpie@handhelds.org>
6Architecture: arm 6Architecture: arm
7Depends: opie-networksettings2, libopiecore2, libopienet2 7Depends: opie-networksettings2, libopiecore2, libopienet2
8Description: Network settings lancard plugin. 8Description: Network settings lancard plugin.
9Version: $QPE_VERSION$EXTRAVERSION 9Version: $QPE_VERSION$EXTRAVERSION
diff --git a/noncore/settings/networksettings2/main.cpp b/noncore/settings/networksettings2/main.cpp
index 18bf652..8487e3e 100644
--- a/noncore/settings/networksettings2/main.cpp
+++ b/noncore/settings/networksettings2/main.cpp
@@ -1,151 +1,175 @@
1#include "nsdata.h" 1#include "nsdata.h"
2#include "activateprofile.h" 2#include "activateprofile.h"
3#include "activatevpn.h" 3#include "activatevpn.h"
4#include "networksettings.h" 4#include "networksettings.h"
5 5
6#include <opie2/odebug.h>
6#include <qpe/qpeapplication.h> 7#include <qpe/qpeapplication.h>
7 8
8#include <opie2/oapplicationfactory.h> 9#include <opie2/oapplicationfactory.h>
9using namespace Opie::Core; 10using namespace Opie::Core;
10 11
11#ifdef GONE 12#ifdef GONE
12 13
13OPIE_EXPORT_APP( OApplicationFactory<NetworkSettings> ) 14OPIE_EXPORT_APP( OApplicationFactory<NetworkSettings> )
14 15
15#else 16#else
16 17
17// just standard GUI 18// just standard GUI
18#define ACT_GUI 0 19#define ACT_GUI 0
19// used by interfaces to request for allow of up/down 20// used by interfaces to request for allow of up/down
20#define ACT_REQUEST 1 21#define ACT_REQUEST 1
21// regenerate config files 22// regenerate config files
22#define ACT_REGEN 2 23#define ACT_REGEN 2
23// used by interfaces to request user prompt 24// used by interfaces to request user prompt
24#define ACT_PROMPT 3 25#define ACT_PROMPT 3
25// used by interfaces to trigger VPN 26// used by interfaces to trigger VPN
26#define ACT_VPN 4 27#define ACT_VPN 4
28// activate opietooth
29#define ACT_OT 5
30
31// include Opietooth GUI
32#include <opietooth2/Opietooth.h>
33using namespace Opietooth2;
34
35#include <qpushbutton.h>
36#include <qlayout.h>
37#include <qframe.h>
38#include <qlabel.h>
27 39
28int main( int argc, char * argv[] ) { 40int main( int argc, char * argv[] ) {
29 int rv = 0; 41 int rv = 0;
30 int Action = ACT_GUI; 42 int Action = ACT_GUI;
31 // could be overruled by -qws 43 // could be overruled by -qws
32 QApplication::Type GuiType = QApplication::GuiClient; 44 QApplication::Type GuiType = QApplication::GuiClient;
33 45
34#ifdef _WS_QWS_ 46#ifdef _WS_QWS_
35 QPEApplication * TheApp; 47 QPEApplication * TheApp;
36#else 48#else
37 QApplication * TheApp; 49 QApplication * TheApp;
38#endif 50#endif
39 51
40 for ( int i = 1; i < argc; i ++ ) { 52 for ( int i = 1; i < argc; i ++ ) {
41 int rmv; 53 int rmv;
42 rmv = 0; 54 rmv = 0;
43 if( strcmp( argv[i], "--regen" ) == 0 ) { 55 if( strcmp( argv[i], "--regen" ) == 0 ) {
44 Action = ACT_REGEN; 56 Action = ACT_REGEN;
45 GuiType = QApplication::Tty; 57 GuiType = QApplication::Tty;
46 rmv = 1; 58 rmv = 1;
47 } else if( strcmp( argv[i], "--prompt" ) == 0 ) { 59 } else if( strcmp( argv[i], "--prompt" ) == 0 ) {
48 Action = ACT_PROMPT; 60 Action = ACT_PROMPT;
49 rmv = 1; 61 rmv = 1;
50 } else if( strcmp( argv[i], "--triggervpn" ) == 0 ) { 62 } else if( strcmp( argv[i], "--triggervpn" ) == 0 ) {
51 Action = ACT_VPN; 63 Action = ACT_VPN;
52 rmv = 1; 64 rmv = 1;
65 } else if( strcmp( argv[i], "--opietooth" ) == 0 ) {
66 Action = ACT_OT;
67 rmv = 1;
53 } 68 }
54 if( rmv ) { 69 if( rmv ) {
55 memmove( argv+i, argv+i+rmv, 70 memmove( argv+i, argv+i+rmv,
56 sizeof( char * ) * (argc-i-rmv) ); 71 sizeof( char * ) * (argc-i-rmv) );
57 i --; 72 i --;
58 argc -= rmv; 73 argc -= rmv;
59 } 74 }
60 } 75 }
61 76
62 if( strstr( argv[0], "-request" ) ) { 77 if( strstr( argv[0], "-request" ) ) {
63 // called from system to request something 78 // called from system to request something
64 GuiType = QApplication::Tty; 79 GuiType = QApplication::Tty;
65 Action = ACT_REQUEST; 80 Action = ACT_REQUEST;
66 Log(("Request : %s\n", argv[1] )); 81 Log(("Request : %s\n", argv[1] ));
82 } else if( strstr( argv[0], "-opietooth" ) ) {
83 Action = ACT_OT;
67 } 84 }
68 85
69 // Start Qt 86 // Start Qt
70#ifdef _WS_QWS_ 87#ifdef _WS_QWS_
71 // because QPEApplication does not handle GuiType well 88 // because QPEApplication does not handle GuiType well
72 if( GuiType == QApplication::Tty ) { 89 if( GuiType == QApplication::Tty ) {
73 // this cast is NOT correct but we do not use 90 // this cast is NOT correct but we do not use
74 // TheApp anymore ... 91 // TheApp anymore ...
75 TheApp = (QPEApplication *)new QApplication( argc, argv, GuiType ); 92 TheApp = (QPEApplication *)new QApplication( argc, argv, GuiType );
76 } else { 93 } else {
77 TheApp = new QPEApplication( argc, argv, GuiType ); 94 TheApp = new QPEApplication( argc, argv, GuiType );
78 } 95 }
79#else 96#else
80 TheApp = new QApplication( argc, argv, GuiType ); 97 TheApp = new QApplication( argc, argv, GuiType );
81#endif 98#endif
82 99
83 // init qt with app widget 100 // init qt with app widget
84 101
85 switch( Action ) { 102 switch( Action ) {
86 case ACT_REQUEST : 103 case ACT_REQUEST :
87 { NetworkSettingsData NS; 104 { NetworkSettingsData NS;
88 if( NS.canStart( argv[1] ) ) { 105 if( NS.canStart( argv[1] ) ) {
89 QString S; 106 QStringList S;
90 S.sprintf( QPEApplication::qpeDir()+ 107 S << QPEApplication::qpeDir() + "/bin/networksettings2";
91 "bin/networksettings2" ); 108 S << "networksettings2";
92 char * MyArgv[4]; 109 S << "--prompt";
93 MyArgv[0] = "networksettings2"; 110 S << argv[1];
94 MyArgv[1] = "--prompt"; 111 NSResources->system().execAsUser( S );
95 MyArgv[2] = argv[1];
96 MyArgv[3] = NULL;
97 NSResources->system().execAsUser( S, MyArgv );
98 Log(("FAILED %s-cNN-allowed\n", argv[1] )); 112 Log(("FAILED %s-cNN-allowed\n", argv[1] ));
99 // if we come here , failed 113 // if we come here , failed
100 printf( "%s-cNN-disallowed", argv[1] ); 114 printf( "%s-cNN-disallowed", argv[1] );
101 } 115 }
102 } 116 }
103 break; 117 break;
104 case ACT_REGEN : 118 case ACT_REGEN :
105 { NetworkSettingsData NS; 119 { NetworkSettingsData NS;
120 QString S= NS.generateSettings();
106 // regen returns 0 if OK 121 // regen returns 0 if OK
107 rv = (NS.regenerate()) ? 1 : 0; 122 rv = ( S.isEmpty() ) ? 0 : 1;
108 } 123 }
109 break; 124 break;
110 case ACT_PROMPT : 125 case ACT_PROMPT :
111 { ActivateProfile AP(argv[1]); 126 { ActivateProfile AP(argv[1]);
112 if( AP.exec() == QDialog::Accepted ) { 127 if( AP.exec() == QDialog::Accepted ) {
113 Log(("%s-c%ld-allowed\n", 128 Log(("%s-c%ld-allowed\n",
114 argv[1], AP.selectedProfile() )); 129 argv[1], AP.selectedProfile() ));
115 printf( "%s-c%ld-allowed", argv[1], AP.selectedProfile() ); 130 printf( "%s-c%ld-allowed", argv[1], AP.selectedProfile() );
116 } else { 131 } else {
117 Log(("%s-c%NN-disallowed\n", argv[1] )); 132 Log(("%s-c%NN-disallowed\n", argv[1] ));
118 printf( "%s-cNN-disallowed", argv[1] ); 133 printf( "%s-cNN-disallowed", argv[1] );
119 } 134 }
120 } 135 }
121 break; 136 break;
122 case ACT_VPN : 137 case ACT_VPN :
123 { ActivateVPN AVPN; 138 { ActivateVPN AVPN;
124 AVPN.exec(); 139 AVPN.exec();
125 } 140 }
126 break; 141 break;
127 case ACT_GUI : 142 case ACT_GUI :
128 { QWidget * W = new NetworkSettings(0); 143 case ACT_OT :
144 { QWidget * W;
145
146 if( Action == ACT_OT ) {
147 W = new OTMain( 0 );
148 } else {
149 W = new NetworkSettings(0);
150 }
129 TheApp->setMainWidget( W ); 151 TheApp->setMainWidget( W );
152
130 W->show(); 153 W->show();
131#ifdef _WS_QWS_ 154#ifdef _WS_QWS_
132 W->showMaximized(); 155 W->showMaximized();
133#else 156#else
134 W->resize( W->sizeHint() ); 157 W->resize( W->sizeHint() );
135#endif 158#endif
136 rv = TheApp->exec(); 159 rv = TheApp->exec();
160
137 delete W; 161 delete W;
138 } 162 }
139 break; 163 break;
140 } 164 }
141 165
142 LogClose(); 166 LogClose();
143 167
144 return rv; 168 return rv;
145} 169}
146 170
147#endif 171#endif
148 172
149 173
150// main.cpp 174// main.cpp
151 175
diff --git a/noncore/settings/networksettings2/modem/modem_NN.cpp b/noncore/settings/networksettings2/modem/modem_NN.cpp
index ee61b10..06f417c 100644
--- a/noncore/settings/networksettings2/modem/modem_NN.cpp
+++ b/noncore/settings/networksettings2/modem/modem_NN.cpp
@@ -1,50 +1,55 @@
1#include "modem_NN.h" 1#include "modem_NN.h"
2#include "modem_NNI.h" 2#include "modem_NNI.h"
3 3
4static const char * ModemNeeds[] = 4static const char * ModemNeeds[] =
5 { "line" 5 { "line",
6 0
7 };
8static const char * ModemProvides[] =
9 { "modem",
10 0
6 }; 11 };
7 12
8/** 13/**
9 * Constructor, find all of the possible interfaces 14 * Constructor, find all of the possible interfaces
10 */ 15 */
11ModemNetNode::ModemNetNode() : ANetNode(tr("Dialup modem")) { 16ModemNetNode::ModemNetNode() : ANetNode(tr("Dialup modem")) {
12} 17}
13 18
14/** 19/**
15 * Delete any interfaces that we own. 20 * Delete any interfaces that we own.
16 */ 21 */
17ModemNetNode::~ModemNetNode(){ 22ModemNetNode::~ModemNetNode(){
18} 23}
19 24
20const QString ModemNetNode::nodeDescription(){ 25const QString ModemNetNode::nodeDescription(){
21 return tr("\ 26 return tr("\
22<p>Sets up a dialing procedures.</p>\ 27<p>Sets up a dialing procedures.</p>\
23<p>Use this to dial up over modems, ISDN, GSM, ...</p>\ 28<p>Use this to dial up over modems, ISDN, GSM, ...</p>\
24" 29"
25); 30);
26} 31}
27 32
28ANetNodeInstance * ModemNetNode::createInstance( void ) { 33ANetNodeInstance * ModemNetNode::createInstance( void ) {
29 return new AModem( this ); 34 return new AModem( this );
30} 35}
31 36
32const char ** ModemNetNode::needs( void ) { 37const char ** ModemNetNode::needs( void ) {
33 return ModemNeeds; 38 return ModemNeeds;
34} 39}
35 40
36const char * ModemNetNode::provides( void ) { 41const char ** ModemNetNode::provides( void ) {
37 return "line"; 42 return ModemProvides;
38} 43}
39 44
40void ModemNetNode::setSpecificAttribute( QString & , QString & ) { 45void ModemNetNode::setSpecificAttribute( QString & , QString & ) {
41} 46}
42 47
43void ModemNetNode::saveSpecificAttribute( QTextStream & ) { 48void ModemNetNode::saveSpecificAttribute( QTextStream & ) {
44} 49}
45 50
46extern "C" { 51extern "C" {
47void create_plugin( QList<ANetNode> & PNN ) { 52void create_plugin( QList<ANetNode> & PNN ) {
48 PNN.append( new ModemNetNode() ); 53 PNN.append( new ModemNetNode() );
49} 54}
50} 55}
diff --git a/noncore/settings/networksettings2/modem/modem_NN.h b/noncore/settings/networksettings2/modem/modem_NN.h
index a76525f..5b3b573 100644
--- a/noncore/settings/networksettings2/modem/modem_NN.h
+++ b/noncore/settings/networksettings2/modem/modem_NN.h
@@ -7,30 +7,30 @@ class AModem;
7 7
8class ModemNetNode : public ANetNode{ 8class ModemNetNode : public ANetNode{
9 9
10 Q_OBJECT 10 Q_OBJECT
11 11
12public: 12public:
13 13
14 ModemNetNode(); 14 ModemNetNode();
15 virtual ~ModemNetNode(); 15 virtual ~ModemNetNode();
16 16
17 virtual const QString pixmapName() 17 virtual const QString pixmapName()
18 { return "Devices/modem"; } 18 { return "Devices/modem"; }
19 19
20 virtual const QString nodeDescription() ; 20 virtual const QString nodeDescription() ;
21 virtual ANetNodeInstance * createInstance( void ); 21 virtual ANetNodeInstance * createInstance( void );
22 virtual const char ** needs( void ); 22 virtual const char ** needs( void );
23 virtual const char * provides( void ); 23 virtual const char ** provides( void );
24 24
25private: 25private:
26 26
27 virtual void setSpecificAttribute( QString & Attr, QString & Value ); 27 virtual void setSpecificAttribute( QString & Attr, QString & Value );
28 virtual void saveSpecificAttribute( QTextStream & TS ); 28 virtual void saveSpecificAttribute( QTextStream & TS );
29}; 29};
30 30
31extern "C" 31extern "C"
32{ 32{
33 void create_plugin( QList<ANetNode> & PNN ); 33 void create_plugin( QList<ANetNode> & PNN );
34}; 34};
35 35
36#endif 36#endif
diff --git a/noncore/settings/networksettings2/modem/modemdata.h b/noncore/settings/networksettings2/modem/modemdata.h
index 773cb77..89656ed 100644
--- a/noncore/settings/networksettings2/modem/modemdata.h
+++ b/noncore/settings/networksettings2/modem/modemdata.h
@@ -1,17 +1,18 @@
1#ifndef MODEM_DATA_H 1#ifndef MODEM_DATA_H
2#define MODEM_DATA_H 2#define MODEM_DATA_H
3 3
4#include <qstring.h> 4#include <qstring.h>
5typedef struct ModemData { 5class ModemData {
6public :
6 QString Device; 7 QString Device;
7 QString LockFile; 8 QString LockFile;
8 long Speed; 9 long Speed;
9 short Parity; 10 short Parity;
10 short DataBits; 11 short DataBits;
11 short StopBits; 12 short StopBits;
12 bool HardwareControl; 13 bool HardwareControl;
13 bool SoftwareControl; 14 bool SoftwareControl;
14 15
15} ModemData_t; 16} ;
16 17
17#endif 18#endif
diff --git a/noncore/settings/networksettings2/modem/modemedit.cpp b/noncore/settings/networksettings2/modem/modemedit.cpp
index fd3d694..d97d895 100644
--- a/noncore/settings/networksettings2/modem/modemedit.cpp
+++ b/noncore/settings/networksettings2/modem/modemedit.cpp
@@ -1,18 +1,18 @@
1#include <GUIUtils.h> 1#include <GUIUtils.h>
2#include "modemedit.h" 2#include "modemedit.h"
3 3
4ModemEdit::ModemEdit( QWidget * Parent ) : ModemGUI( Parent ){ 4ModemEdit::ModemEdit( QWidget * Parent ) : ModemGUI( Parent ){
5 5
6} 6}
7 7
8QString ModemEdit::acceptable( void ) { 8QString ModemEdit::acceptable( void ) {
9 return QString(); 9 return QString();
10} 10}
11 11
12bool ModemEdit::commit( ModemData_t & Data ) { 12bool ModemEdit::commit( ModemData & Data ) {
13 return 0; 13 return 0;
14} 14}
15 15
16void ModemEdit::showData( ModemData_t & Data ) { 16void ModemEdit::showData( ModemData & Data ) {
17} 17}
18 18
diff --git a/noncore/settings/networksettings2/modem/modemedit.h b/noncore/settings/networksettings2/modem/modemedit.h
index 56e2a82..ed9cfc0 100644
--- a/noncore/settings/networksettings2/modem/modemedit.h
+++ b/noncore/settings/networksettings2/modem/modemedit.h
@@ -1,12 +1,12 @@
1#include "modemdata.h" 1#include "modemdata.h"
2#include "modemGUI.h" 2#include "modemGUI.h"
3 3
4class ModemEdit : public ModemGUI { 4class ModemEdit : public ModemGUI {
5 5
6public : 6public :
7 7
8 ModemEdit( QWidget * parent ); 8 ModemEdit( QWidget * parent );
9 QString acceptable( void ); 9 QString acceptable( void );
10 bool commit( ModemData_t & Data ); 10 bool commit( ModemData & Data );
11 void showData( ModemData_t & Data ); 11 void showData( ModemData & Data );
12}; 12};
diff --git a/noncore/settings/networksettings2/modem/modemrun.h b/noncore/settings/networksettings2/modem/modemrun.h
index 491a677..eb3a193 100644
--- a/noncore/settings/networksettings2/modem/modemrun.h
+++ b/noncore/settings/networksettings2/modem/modemrun.h
@@ -1,28 +1,25 @@
1#include <asline.h> 1#include <netnode.h>
2#include "modemdata.h" 2#include "modemdata.h"
3 3
4class ModemRun : public AsLine { 4class ModemRun : public RuntimeInfo {
5 5
6public : 6public :
7 7
8 ModemRun( ANetNodeInstance * NNI, 8 ModemRun( ANetNodeInstance * NNI,
9 ModemData & Data ) : AsLine ( NNI ) 9 ModemData & Data ) : RuntimeInfo ( NNI )
10 { } 10 { }
11 11
12 virtual AsLine * asLine( void ) 12 virtual RuntimeInfo * line( void )
13 { return (AsLine *)this; } 13 { return this; }
14 14
15 virtual QString deviceFile( void ) 15 virtual QString deviceFile( void )
16 { return QString("/dev/modem"); } 16 { return QString("/dev/modem"); }
17 17
18protected : 18 State_t detectState( void )
19 19 { return Unknown;}
20 void detectState( NodeCollection * )
21 { }
22 20
23 bool setState( NodeCollection *, Action_t, bool ) 21protected :
24 { return 0; }
25 22
26 bool canSetState( State_t, Action_t ) 23 QString setMyState( NodeCollection * , Action_t, bool )
27 { return 0; } 24 { return QString(); }
28}; 25};
diff --git a/noncore/settings/networksettings2/modem/opie-networksettings2plugin-modem.control b/noncore/settings/networksettings2/modem/opie-networksettings2plugin-modem.control
index eaa6ab0..a73249a 100644
--- a/noncore/settings/networksettings2/modem/opie-networksettings2plugin-modem.control
+++ b/noncore/settings/networksettings2/modem/opie-networksettings2plugin-modem.control
@@ -1,9 +1,9 @@
1Package: opie-networksettingsplugin2-modem 1Package: opie-networksettings2plugin-modem
2Files: plugins/networksettings2/libmodem.so* 2Files: plugins/networksettings2/libmodem.so*
3Priority: optional 3Priority: optional
4Section: opie/settings 4Section: opie/settings
5Maintainer: Wim Delvaux <wimpie@handhelds.org> 5Maintainer: Wim Delvaux <wimpie@handhelds.org>
6Architecture: arm 6Architecture: arm
7Depends: opie-networksettings2, libopiecore2, libopienet2 7Depends: opie-networksettings2, libopiecore2, libopienet2
8Description: Network settings modem plugin. 8Description: Network settings modem plugin.
9Version: $QPE_VERSION$EXTRAVERSION 9Version: $QPE_VERSION$EXTRAVERSION
diff --git a/noncore/settings/networksettings2/network/network_NN.cpp b/noncore/settings/networksettings2/network/network_NN.cpp
index b5c41bf..23b3d44 100644
--- a/noncore/settings/networksettings2/network/network_NN.cpp
+++ b/noncore/settings/networksettings2/network/network_NN.cpp
@@ -1,85 +1,97 @@
1#include <qpe/qpeapplication.h> 1#include <qpe/qpeapplication.h>
2#include <asdevice.h> 2#include <resources.h>
3#include <netnode.h>
3#include "network_NN.h" 4#include "network_NN.h"
4#include "network_NNI.h" 5#include "network_NNI.h"
5 6
6static const char * NetworkNeeds[] = 7static const char * NetworkNeeds[] =
7 { "device", 8 { "device",
8 0 9 0
9 }; 10 };
10 11
12static const char * NetworkProvides[] =
13 { "connection",
14 0
15 };
16
11/** 17/**
12 * Constructor, find all of the possible interfaces 18 * Constructor, find all of the possible interfaces
13 */ 19 */
14NetworkNetNode::NetworkNetNode() : ANetNode(tr("IP Configuration")) { 20NetworkNetNode::NetworkNetNode() : ANetNode(tr("IP Configuration")) {
21
22 NSResources->addSystemFile(
23 "interfaces", "/etc/network/interfaces", 1 );
15} 24}
16 25
17/** 26/**
18 * Delete any interfaces that we own. 27 * Delete any interfaces that we own.
19 */ 28 */
20NetworkNetNode::~NetworkNetNode(){ 29NetworkNetNode::~NetworkNetNode(){
21} 30}
22 31
23const QString NetworkNetNode::nodeDescription(){ 32const QString NetworkNetNode::nodeDescription(){
24 return tr("\ 33 return tr("\
25<p>Sets up TCP/IP options.</p>\ 34<p>Sets up TCP/IP options.</p>\
26<p>Use this to configure the TCP/IP protocol</p>\ 35<p>Use this to configure the TCP/IP protocol</p>\
27" 36"
28); 37);
29} 38}
30 39
31ANetNodeInstance * NetworkNetNode::createInstance( void ) { 40ANetNodeInstance * NetworkNetNode::createInstance( void ) {
32 return new ANetwork( this ); 41 return new ANetwork( this );
33} 42}
34 43
35bool NetworkNetNode::hasDataForFile( const QString & S ) { 44bool NetworkNetNode::hasDataForFile( SystemFile & S ) {
36 return S == "interfaces"; 45 return S.name() == "interfaces";
37} 46}
38 47
39short NetworkNetNode::generateFile( const QString & ID, 48short NetworkNetNode::generateFile( SystemFile & SF,
40 const QString & ,
41 QTextStream & TS,
42 ANetNodeInstance * NNI, 49 ANetNodeInstance * NNI,
43 long DevNr ) { 50 long DevNr ) {
44 51
52 if( DevNr < 0 ) {
53 // generate device specific but common part
54 return 1;
55 }
56
45 QString NIC = NNI->runtime()->device()->netNode()->nodeClass()->genNic( DevNr ); 57 QString NIC = NNI->runtime()->device()->netNode()->nodeClass()->genNic( DevNr );
46 58
47 if( ID == "interfaces" ) { 59 if( SF.name() == "interfaces" ) {
48 Log(("Generate entry for %s in %s\n", NIC.latin1(), ID.latin1() )); 60 Log(("Generate entry for %s in %s\n", NIC.latin1(), SF.name().latin1() ));
49 // generate mapping stanza for this interface 61 // generate mapping stanza for this interface
50 TS << "# check if " 62 SF << "# check if "
51 << NIC 63 << NIC
52 << " can be brought UP" 64 << " can be brought UP"
53 << endl; 65 << endl;
54 TS << "mapping " 66 SF << "mapping "
55 << NIC 67 << NIC
56 << endl; 68 << endl;
57 TS << " script " 69 SF << " script "
58 << QPEApplication::qpeDir() 70 << QPEApplication::qpeDir()
59 << "/bin/networksettings2-request" 71 << "bin/networksettings2-request"
60 << endl 72 << endl
61 << endl; 73 << endl;
62 return 0; 74 return 0;
63 } 75 }
64 return 1; 76 return 1;
65} 77}
66 78
67const char ** NetworkNetNode::needs( void ) { 79const char ** NetworkNetNode::needs( void ) {
68 return NetworkNeeds; 80 return NetworkNeeds;
69} 81}
70 82
71const char * NetworkNetNode::provides( void ) { 83const char ** NetworkNetNode::provides( void ) {
72 return "connection"; 84 return NetworkProvides;
73} 85}
74 86
75void NetworkNetNode::setSpecificAttribute( QString & , QString & ) { 87void NetworkNetNode::setSpecificAttribute( QString & , QString & ) {
76} 88}
77 89
78void NetworkNetNode::saveSpecificAttribute( QTextStream & ) { 90void NetworkNetNode::saveSpecificAttribute( QTextStream & ) {
79} 91}
80 92
81extern "C" { 93extern "C" {
82void create_plugin( QList<ANetNode> & PNN ) { 94void create_plugin( QList<ANetNode> & PNN ) {
83 PNN.append( new NetworkNetNode() ); 95 PNN.append( new NetworkNetNode() );
84} 96}
85} 97}
diff --git a/noncore/settings/networksettings2/network/network_NN.h b/noncore/settings/networksettings2/network/network_NN.h
index 745d1a7..b063d4c 100644
--- a/noncore/settings/networksettings2/network/network_NN.h
+++ b/noncore/settings/networksettings2/network/network_NN.h
@@ -1,43 +1,41 @@
1#ifndef NETWORK_NETNODE_H 1#ifndef NETWORK_NETNODE_H
2#define NETWORK_NETNODE_H 2#define NETWORK_NETNODE_H
3 3
4#include "netnode.h" 4#include "netnode.h"
5 5
6class ANetwork; 6class ANetwork;
7 7
8class NetworkNetNode : public ANetNode{ 8class NetworkNetNode : public ANetNode{
9 9
10 Q_OBJECT 10 Q_OBJECT
11 11
12public: 12public:
13 13
14 NetworkNetNode(); 14 NetworkNetNode();
15 virtual ~NetworkNetNode(); 15 virtual ~NetworkNetNode();
16 16
17 virtual bool hasDataForFile( const QString & S ); 17 virtual bool hasDataForFile( SystemFile & S );
18 18
19 virtual short generateFile( const QString & ID, 19 virtual short generateFile( SystemFile & TS,
20 const QString & Path,
21 QTextStream & TS,
22 ANetNodeInstance * NNI, 20 ANetNodeInstance * NNI,
23 long DevNr ); 21 long DevNr );
24 virtual const QString pixmapName() 22 virtual const QString pixmapName()
25 { return "Devices/tcpip"; } 23 { return "Devices/tcpip"; }
26 24
27 virtual const QString nodeDescription() ; 25 virtual const QString nodeDescription() ;
28 virtual ANetNodeInstance * createInstance( void ); 26 virtual ANetNodeInstance * createInstance( void );
29 virtual const char ** needs( void ); 27 virtual const char ** needs( void );
30 virtual const char * provides( void ); 28 virtual const char ** provides( void );
31 29
32private: 30private:
33 31
34 virtual void setSpecificAttribute( QString & Attr, QString & Value ); 32 virtual void setSpecificAttribute( QString & Attr, QString & Value );
35 virtual void saveSpecificAttribute( QTextStream & TS ); 33 virtual void saveSpecificAttribute( QTextStream & TS );
36}; 34};
37 35
38extern "C" 36extern "C"
39{ 37{
40 void create_plugin( QList<ANetNode> & PNN ); 38 void create_plugin( QList<ANetNode> & PNN );
41}; 39};
42 40
43#endif 41#endif
diff --git a/noncore/settings/networksettings2/network/network_NNI.cpp b/noncore/settings/networksettings2/network/network_NNI.cpp
index 324c6e2..78e6545 100644
--- a/noncore/settings/networksettings2/network/network_NNI.cpp
+++ b/noncore/settings/networksettings2/network/network_NNI.cpp
@@ -1,18 +1,18 @@
1#include <system.h> 1#include <system.h>
2#include <asdevice.h> 2#include <netnode.h>
3#include "networkedit.h" 3#include "networkedit.h"
4#include "network_NNI.h" 4#include "network_NNI.h"
5#include "network_NN.h" 5#include "network_NN.h"
6 6
7ANetwork::ANetwork( NetworkNetNode * PNN ) : ANetNodeInstance( PNN ) { 7ANetwork::ANetwork( NetworkNetNode * PNN ) : ANetNodeInstance( PNN ) {
8 Data.UseDHCP = 1; 8 Data.UseDHCP = 1;
9 Data.IPAddress = ""; 9 Data.IPAddress = "";
10 Data.NetMask = ""; 10 Data.NetMask = "";
11 Data.Broadcast = ""; 11 Data.Broadcast = "";
12 Data.Gateway = ""; 12 Data.Gateway = "";
13 Data.DNS1 = ""; 13 Data.DNS1 = "";
14 Data.DNS2 = ""; 14 Data.DNS2 = "";
15 Data.SendHostname = 0; 15 Data.SendHostname = 0;
16 Data.Hostname = ""; 16 Data.Hostname = "";
17 Data.PreUp_SL.clear(); 17 Data.PreUp_SL.clear();
18 Data.PreDown_SL.clear(); 18 Data.PreDown_SL.clear();
@@ -86,134 +86,132 @@ void ANetwork::saveSpecificAttribute( QTextStream & TS ) {
86 86
87QWidget * ANetwork::edit( QWidget * parent ) { 87QWidget * ANetwork::edit( QWidget * parent ) {
88 GUI = new NetworkEdit( parent ); 88 GUI = new NetworkEdit( parent );
89 GUI->showData( Data ); 89 GUI->showData( Data );
90 return GUI; 90 return GUI;
91} 91}
92 92
93QString ANetwork::acceptable( void ) { 93QString ANetwork::acceptable( void ) {
94 return ( GUI ) ? GUI->acceptable( ) : QString(); 94 return ( GUI ) ? GUI->acceptable( ) : QString();
95} 95}
96 96
97void ANetwork::commit( void ) { 97void ANetwork::commit( void ) {
98 if( GUI && GUI->commit( Data ) ) 98 if( GUI && GUI->commit( Data ) )
99 setModified( 1 ); 99 setModified( 1 );
100} 100}
101 101
102bool ANetwork::hasDataForFile( const QString & S ) { 102bool ANetwork::hasDataForFile( SystemFile & S ) {
103 return S == "interfaces"; 103 return S.name() == "interfaces";
104} 104}
105 105
106short ANetwork::generateFile( const QString & ID, 106short ANetwork::generateFile( SystemFile &SF,
107 const QString & Path, 107 long DevNr
108 QTextStream &TS, 108 ) {
109 long DevNr
110 ) {
111 109
112 short rvl, rvd ; 110 short rvl, rvd ;
113 QString NIC = runtime()->device()->netNode()->nodeClass()->genNic( DevNr ); 111 QString NIC = runtime()->device()->netNode()->nodeClass()->genNic( DevNr );
114 112
115 rvl = 1; 113 rvl = 1;
116 if( ID == "interfaces" ) { 114 if( SF.name() == "interfaces" ) {
117 Log(("Generate Network for %s\n", ID.latin1() )); 115 Log(("Generate Network for %s\n", SF.name().latin1() ));
118 // we can safely call from here since device item is deeper 116 // we can safely call from here since device item is deeper
119 if( Data.UseDHCP ) { 117 if( Data.UseDHCP ) {
120 TS << "iface " 118 SF << "iface "
121 << NIC 119 << NIC
122 << "-c" 120 << "-c"
123 << connection()->number() 121 << connection()->number()
124 << "-allowed inet dhcp" 122 << "-allowed inet dhcp"
125 << endl; 123 << endl;
126 TS << " up echo \"" 124 SF << " up echo \""
127 << NIC 125 << NIC
128 << "\" > /tmp/profile-" 126 << "\" > /tmp/profile-"
129 << connection()->number() 127 << connection()->number()
130 << ".up" 128 << ".up"
131 << endl; 129 << endl;
132 if( Data.SendHostname ) { 130 if( Data.SendHostname ) {
133 TS << " hostname " 131 SF << " hostname "
134 << Data.Hostname 132 << Data.Hostname
135 << endl; 133 << endl;
136 } 134 }
137 135
138 TS << " down rm -f /tmp/profile-" 136 SF << " down rm -f /tmp/profile-"
139 << connection()->number() 137 << connection()->number()
140 << ".up" 138 << ".up"
141 << endl; 139 << endl;
142 } else { 140 } else {
143 TS << "iface " 141 SF << "iface "
144 << NIC << "-c" 142 << NIC << "-c"
145 << connection()->number() 143 << connection()->number()
146 << "-allowed inet static" 144 << "-allowed inet static"
147 << endl; 145 << endl;
148 TS << " up echo \"" 146 SF << " up echo \""
149 << NIC 147 << NIC
150 << "\" > /tmp/profile-" 148 << "\" > /tmp/profile-"
151 << connection()->number() 149 << connection()->number()
152 << ".up" 150 << ".up"
153 << endl; 151 << endl;
154 TS << " down rm -f /tmp/profile-" 152 SF << " down rm -f /tmp/profile-"
155 << connection()->number() 153 << connection()->number()
156 << ".up" 154 << ".up"
157 << endl; 155 << endl;
158 TS << " address " 156 SF << " address "
159 << Data.IPAddress 157 << Data.IPAddress
160 << endl; 158 << endl;
161 TS << " broadcast " 159 SF << " broadcast "
162 << Data.Broadcast 160 << Data.Broadcast
163 << endl; 161 << endl;
164 TS << " netmask " 162 SF << " netmask "
165 << Data.NetMask 163 << Data.NetMask
166 << endl; 164 << endl;
167 165
168 // derive network address = IPAddress & netmask 166 // derive network address = IPAddress & netmask
169 { QString NW; 167 { QString NW;
170 QStringList ipal = QStringList::split( '.', Data.IPAddress ); 168 QStringList ipal = QStringList::split( '.', Data.IPAddress );
171 QStringList nmal = QStringList::split( '.', Data.NetMask ); 169 QStringList nmal = QStringList::split( '.', Data.NetMask );
172 170
173 NW = QString( "%1.%2.%3.%4" ). 171 NW = QString( "%1.%2.%3.%4" ).
174 arg( ipal[0].toShort() & nmal[0].toShort() ). 172 arg( ipal[0].toShort() & nmal[0].toShort() ).
175 arg( ipal[1].toShort() & nmal[1].toShort() ). 173 arg( ipal[1].toShort() & nmal[1].toShort() ).
176 arg( ipal[2].toShort() & nmal[2].toShort() ). 174 arg( ipal[2].toShort() & nmal[2].toShort() ).
177 arg( ipal[3].toShort() & nmal[3].toShort() ); 175 arg( ipal[3].toShort() & nmal[3].toShort() );
178 TS << " network " 176 SF << " network "
179 << NW 177 << NW
180 << endl; 178 << endl;
181 } 179 }
182 } 180 }
183 for ( QStringList::Iterator it = Data.PreUp_SL.begin(); 181 for ( QStringList::Iterator it = Data.PreUp_SL.begin();
184 it != Data.PreUp_SL.end(); 182 it != Data.PreUp_SL.end();
185 ++it ) { 183 ++it ) {
186 TS << " pre-up " 184 SF << " pre-up "
187 << (*it) 185 << (*it)
188 << endl; 186 << endl;
189 } 187 }
190 for ( QStringList::Iterator it = Data.PostUp_SL.begin(); 188 for ( QStringList::Iterator it = Data.PostUp_SL.begin();
191 it != Data.PostUp_SL.end(); 189 it != Data.PostUp_SL.end();
192 ++it ) { 190 ++it ) {
193 TS << " up " 191 SF << " up "
194 << (*it) 192 << (*it)
195 << endl; 193 << endl;
196 } 194 }
197 for ( QStringList::Iterator it = Data.PreDown_SL.begin(); 195 for ( QStringList::Iterator it = Data.PreDown_SL.begin();
198 it != Data.PreDown_SL.end(); 196 it != Data.PreDown_SL.end();
199 ++it ) { 197 ++it ) {
200 TS << " down " 198 SF << " down "
201 << (*it) 199 << (*it)
202 << endl; 200 << endl;
203 } 201 }
204 for ( QStringList::Iterator it = Data.PostDown_SL.begin(); 202 for ( QStringList::Iterator it = Data.PostDown_SL.begin();
205 it != Data.PostDown_SL.end(); 203 it != Data.PostDown_SL.end();
206 ++it ) { 204 ++it ) {
207 TS << " post-down " 205 SF << " post-down "
208 << (*it) 206 << (*it)
209 << endl; 207 << endl;
210 } 208 }
211 rvl = 0; 209 rvl = 0;
212 } 210 }
213 211
214 // embed other info in it 212 // embed other info in it
215 rvd = connection()->getToplevel()->generateFileEmbedded( ID, Path, TS, DevNr ); 213 rvd = connection()->getToplevel()->generateFileEmbedded( SF, DevNr );
216 214
217 return (rvd == 2 || rvl == 2 ) ? 2 : 215 return (rvd == 2 || rvl == 2 ) ? 2 :
218 (rvd == 0 || rvl == 0 ) ? 0 : 1; 216 (rvd == 0 || rvl == 0 ) ? 0 : 1;
219} 217}
diff --git a/noncore/settings/networksettings2/network/network_NNI.h b/noncore/settings/networksettings2/network/network_NNI.h
index 5e42503..71c276a 100644
--- a/noncore/settings/networksettings2/network/network_NNI.h
+++ b/noncore/settings/networksettings2/network/network_NNI.h
@@ -14,35 +14,33 @@ class ANetwork : public ANetNodeInstance{
14public : 14public :
15 15
16 ANetwork( NetworkNetNode * PNN ); 16 ANetwork( NetworkNetNode * PNN );
17 17
18 RuntimeInfo * runtime( void ) 18 RuntimeInfo * runtime( void )
19 { return 19 { return
20 ( RT ) ? RT : ( RT = new NetworkRun( this, Data ) ); 20 ( RT ) ? RT : ( RT = new NetworkRun( this, Data ) );
21 } 21 }
22 22
23 QWidget * edit( QWidget * parent ); 23 QWidget * edit( QWidget * parent );
24 QString acceptable( void ); 24 QString acceptable( void );
25 void commit( void ); 25 void commit( void );
26 26
27 virtual void * data( void ) 27 virtual void * data( void )
28 { return (void *)&Data; } 28 { return (void *)&Data; }
29 29
30 virtual bool hasDataForFile( const QString & S ); 30 virtual bool hasDataForFile( SystemFile & SF );
31 virtual short generateFile( const QString & ID, 31 virtual short generateFile( SystemFile &TS,
32 const QString & Path, 32 long DevNr );
33 QTextStream &TS,
34 long DevNr );
35 33
36protected : 34protected :
37 35
38 virtual void setSpecificAttribute( QString & Attr, QString & Value ); 36 virtual void setSpecificAttribute( QString & Attr, QString & Value );
39 virtual void saveSpecificAttribute( QTextStream & TS ); 37 virtual void saveSpecificAttribute( QTextStream & TS );
40 38
41private : 39private :
42 40
43 NetworkEdit * GUI; 41 NetworkEdit * GUI;
44 NetworkData_t Data; 42 NetworkData Data;
45 NetworkRun * RT; 43 NetworkRun * RT;
46}; 44};
47 45
48#endif 46#endif
diff --git a/noncore/settings/networksettings2/network/networkdata.h b/noncore/settings/networksettings2/network/networkdata.h
index 2c5da37..1df9dc4 100644
--- a/noncore/settings/networksettings2/network/networkdata.h
+++ b/noncore/settings/networksettings2/network/networkdata.h
@@ -1,22 +1,23 @@
1#ifndef NETWORK_DATA_H 1#ifndef NETWORK_DATA_H
2#define NETWORK_DATA_H 2#define NETWORK_DATA_H
3 3
4#include <qstring.h> 4#include <qstring.h>
5#include <qstringlist.h> 5#include <qstringlist.h>
6typedef struct NetworkData { 6class NetworkData {
7public :
7 bool UseDHCP; 8 bool UseDHCP;
8 QString Hostname; 9 QString Hostname;
9 bool SendHostname; 10 bool SendHostname;
10 QString IPAddress; 11 QString IPAddress;
11 QString NetMask; 12 QString NetMask;
12 QString Gateway; 13 QString Gateway;
13 QString Broadcast; 14 QString Broadcast;
14 QString DNS1; 15 QString DNS1;
15 QString DNS2; 16 QString DNS2;
16 QStringList PreUp_SL; 17 QStringList PreUp_SL;
17 QStringList PostUp_SL; 18 QStringList PostUp_SL;
18 QStringList PreDown_SL; 19 QStringList PreDown_SL;
19 QStringList PostDown_SL; 20 QStringList PostDown_SL;
20} NetworkData_t; 21} ;
21 22
22#endif 23#endif
diff --git a/noncore/settings/networksettings2/network/networkedit.cpp b/noncore/settings/networksettings2/network/networkedit.cpp
index 05110d9..d13cb66 100644
--- a/noncore/settings/networksettings2/network/networkedit.cpp
+++ b/noncore/settings/networksettings2/network/networkedit.cpp
@@ -52,53 +52,53 @@ QString NetworkEdit::acceptable( void ) {
52 if( ! validIP( SubnetMask_LE->text() ) ) 52 if( ! validIP( SubnetMask_LE->text() ) )
53 return tr("Subnet mask not valid"); 53 return tr("Subnet mask not valid");
54 if( ! validIP( Broadcast_LE->text() ) ) 54 if( ! validIP( Broadcast_LE->text() ) )
55 return tr("Broadcast address not valid"); 55 return tr("Broadcast address not valid");
56 if( Gateway_LE->text().isEmpty() || 56 if( Gateway_LE->text().isEmpty() ||
57 ! validIP( Gateway_LE->text() ) ) 57 ! validIP( Gateway_LE->text() ) )
58 return tr("Gateway address not valid"); 58 return tr("Gateway address not valid");
59 if( ! DNS1_LE->text().isEmpty() && 59 if( ! DNS1_LE->text().isEmpty() &&
60 ! validIP( DNS1_LE->text() ) ) 60 ! validIP( DNS1_LE->text() ) )
61 return tr("DNS1 address not valid"); 61 return tr("DNS1 address not valid");
62 if( ! DNS2_LE->text().isEmpty() && 62 if( ! DNS2_LE->text().isEmpty() &&
63 ! validIP( DNS2_LE->text() ) ) 63 ! validIP( DNS2_LE->text() ) )
64 return tr("DNS2 address not valid"); 64 return tr("DNS2 address not valid");
65 return QString(); 65 return QString();
66} 66}
67 67
68bool NetworkEdit::commit( NetworkData_t & Data ) { 68bool NetworkEdit::commit( NetworkData & Data ) {
69 bool SM = 0; 69 bool SM = 0;
70 CBM( Data.UseDHCP, DHCP_CB, SM ); 70 CBM( Data.UseDHCP, DHCP_CB, SM );
71 TXTM( Data.IPAddress, IPAddress_LE, SM ); 71 TXTM( Data.IPAddress, IPAddress_LE, SM );
72 CBM( Data.SendHostname, SendHostname_CB, SM ); 72 CBM( Data.SendHostname, SendHostname_CB, SM );
73 TXTM( Data.Hostname, Hostname_LE, SM ); 73 TXTM( Data.Hostname, Hostname_LE, SM );
74 TXTM( Data.Gateway, Gateway_LE, SM ); 74 TXTM( Data.Gateway, Gateway_LE, SM );
75 TXTM( Data.Broadcast, Broadcast_LE, SM ); 75 TXTM( Data.Broadcast, Broadcast_LE, SM );
76 TXTM( Data.NetMask, SubnetMask_LE, SM ); 76 TXTM( Data.NetMask, SubnetMask_LE, SM );
77 TXTM( Data.DNS1, DNS1_LE, SM ); 77 TXTM( Data.DNS1, DNS1_LE, SM );
78 TXTM( Data.DNS2, DNS2_LE, SM ); 78 TXTM( Data.DNS2, DNS2_LE, SM );
79 79
80 SM |= updateList( Data.PreUp_SL, PreUp_LB ); 80 SM |= updateList( Data.PreUp_SL, PreUp_LB );
81 SM |= updateList( Data.PostUp_SL, PostUp_LB ); 81 SM |= updateList( Data.PostUp_SL, PostUp_LB );
82 SM |= updateList( Data.PreDown_SL, PreDown_LB ); 82 SM |= updateList( Data.PreDown_SL, PreDown_LB );
83 SM |= updateList( Data.PostDown_SL, PostDown_LB ); 83 SM |= updateList( Data.PostDown_SL, PostDown_LB );
84 84
85 return SM; 85 return SM;
86} 86}
87 87
88void NetworkEdit::showData( NetworkData_t & Data ) { 88void NetworkEdit::showData( NetworkData & Data ) {
89 DHCP_CB->setChecked( Data.UseDHCP ); 89 DHCP_CB->setChecked( Data.UseDHCP );
90 SendHostname_CB->setChecked( Data.SendHostname ); 90 SendHostname_CB->setChecked( Data.SendHostname );
91 Hostname_LE->setText( Data.Hostname ); 91 Hostname_LE->setText( Data.Hostname );
92 IPAddress_LE->setText( Data.IPAddress ); 92 IPAddress_LE->setText( Data.IPAddress );
93 Gateway_LE->setText( Data.Gateway ); 93 Gateway_LE->setText( Data.Gateway );
94 SubnetMask_LE->setText( Data.NetMask ); 94 SubnetMask_LE->setText( Data.NetMask );
95 Broadcast_LE->setText( Data.Broadcast ); 95 Broadcast_LE->setText( Data.Broadcast );
96 DNS1_LE->setText( Data.DNS1 ); 96 DNS1_LE->setText( Data.DNS1 );
97 DNS2_LE->setText( Data.DNS2 ); 97 DNS2_LE->setText( Data.DNS2 );
98 98
99 populateList( Data.PreUp_SL, PreUp_LB ); 99 populateList( Data.PreUp_SL, PreUp_LB );
100 populateList( Data.PostUp_SL, PostUp_LB ); 100 populateList( Data.PostUp_SL, PostUp_LB );
101 populateList( Data.PreDown_SL, PreDown_LB ); 101 populateList( Data.PreDown_SL, PreDown_LB );
102 populateList( Data.PostDown_SL, PostDown_LB ); 102 populateList( Data.PostDown_SL, PostDown_LB );
103} 103}
104 104
diff --git a/noncore/settings/networksettings2/network/networkedit.h b/noncore/settings/networksettings2/network/networkedit.h
index adc20e0..45635c8 100644
--- a/noncore/settings/networksettings2/network/networkedit.h
+++ b/noncore/settings/networksettings2/network/networkedit.h
@@ -1,29 +1,29 @@
1#include "networkdata.h" 1#include "networkdata.h"
2#include "networkGUI.h" 2#include "networkGUI.h"
3 3
4class QListBox; 4class QListBox;
5 5
6class NetworkEdit : public NetworkGUI { 6class NetworkEdit : public NetworkGUI {
7 7
8public : 8public :
9 9
10 NetworkEdit( QWidget * parent ); 10 NetworkEdit( QWidget * parent );
11 QString acceptable( void ); 11 QString acceptable( void );
12 bool commit( NetworkData_t & Data ); 12 bool commit( NetworkData & Data );
13 void showData( NetworkData_t & Data ); 13 void showData( NetworkData & Data );
14 14
15public slots : 15public slots :
16 16
17 void SLOT_NetmaskModified( const QString & S ); 17 void SLOT_NetmaskModified( const QString & S );
18 void SLOT_ShowCommand( QListBoxItem * LBI ); 18 void SLOT_ShowCommand( QListBoxItem * LBI );
19 void SLOT_Add( void ); 19 void SLOT_Add( void );
20 void SLOT_Remove( void ); 20 void SLOT_Remove( void );
21 void SLOT_Up( void ); 21 void SLOT_Up( void );
22 void SLOT_Down( void ); 22 void SLOT_Down( void );
23 23
24private : 24private :
25 25
26 QListBox * getActiveLB( void ); 26 QListBox * getActiveLB( void );
27 bool updateList( QStringList &SL, QListBox * LB ); 27 bool updateList( QStringList &SL, QListBox * LB );
28 void populateList( QStringList &SL, QListBox * LB ); 28 void populateList( QStringList &SL, QListBox * LB );
29}; 29};
diff --git a/noncore/settings/networksettings2/network/networkrun.cpp b/noncore/settings/networksettings2/network/networkrun.cpp
index 3e24c5f..c17aa7f 100644
--- a/noncore/settings/networksettings2/network/networkrun.cpp
+++ b/noncore/settings/networksettings2/network/networkrun.cpp
@@ -1,78 +1,51 @@
1#include <system.h> 1#include <system.h>
2#include <asdevice.h> 2#include <netnode.h>
3#include <resources.h>
3#include "networkrun.h" 4#include "networkrun.h"
4 5
5void NetworkRun::detectState( NodeCollection * NC ) { 6State_t NetworkRun::detectState( void ) {
6 RuntimeInfo * RI = netNode()->nextNode()->runtime(); 7 InterfaceInfo * II = nodeCollection()->assignedInterface();
7 AsDevice * Next = RI->asDevice();
8 InterfaceInfo * II = Next->assignedInterface();
9 8
10 if( II ) { 9 Log(( "Interface %p : %d\n", II, (II) ? II->IsUp : 0 ));
10 if( II && II->IsUp ) {
11 // device has assigned interface 11 // device has assigned interface
12 NC->setCurrentState( (( II->IsUp ) ? IsUp : Available) ); 12 return IsUp;
13 return;
14 } 13 }
15 14
16 Log(( "%s not ! UP or ava\n", NC->name().latin1() )); 15 // had no interface or interface is no longer up -> release
17 // has no interface -> delegate 16 nodeCollection()->assignInterface( 0 );
18 RI->detectState( NC ); 17
18 return Unknown;
19} 19}
20 20
21bool NetworkRun::setState( NodeCollection * NC, Action_t A, bool Force ) { 21QString NetworkRun::setMyState( NodeCollection * NC, Action_t A, bool ) {
22 // we handle UP and DOWN 22 // we handle UP and DOWN
23 RuntimeInfo * RI = netNode()->nextNode()->runtime(); 23 InterfaceInfo * II = NC->assignedInterface();
24 AsDevice * Next = RI->asDevice();
25 InterfaceInfo * II = Next->assignedInterface();
26 24
27 if( A == Up ) { 25 if( A == Up ) {
28 // we can bring UP if lower level is available 26 // we can bring UP if lower level is available
29 if( NC->currentState() == Available || Force ) { 27 QStringList SL;
30 QString S; 28 SL << "ifup"
31 S.sprintf( "ifup %s=%s-c%d-allowed", 29 << QString().sprintf( "%s=%s-c%d-allowed",
32 II->Name.latin1(), II->Name.latin1(), 30 II->Name.latin1(), II->Name.latin1(),
33 connection()->number() ); 31 nodeCollection()->number() );
34 NSResources->system().runAsRoot( S ); 32 if( ! NSResources->system().runAsRoot( SL ) ) {
33 return QString("Cannot call %1").arg(SL.join(" "));
35 } 34 }
36 return 1; 35 return QString();
37 } else if( A == Down ) { 36 }
38 QString S; 37
39 if( Force ) { 38 if( A == Down ) {
40 Log(("Force mode %d\n", Force )); 39 QStringList SL;
41 for( int i = 0; 40 if( II ) {
42 i < RI->netNode()->nodeClass()->instanceCount(); 41 SL << "ifdown"
43 i ++ ) { 42 << II->Name.latin1();
44 S.sprintf( "ifdown %s", 43 if( ! NSResources->system().runAsRoot( SL ) ) {
45 RI->netNode()->nodeClass()->genNic( i ).latin1() ); 44 return QString( "Cannot call %1" ).arg( SL.join( " " ));
46 NSResources->system().runAsRoot( S );
47 } 45 }
48 } else { 46 } else {
49 if( NC->currentState() == IsUp ) { 47 Log(( "no interface assigned." ));
50 S.sprintf( "ifdown %s=%s-c%d-allowed",
51 II->Name.latin1(), II->Name.latin1(),
52 connection()->number() );
53 NSResources->system().runAsRoot( S );
54 }
55 } 48 }
56 return 1;
57 }
58 // delegate
59 return RI->setState( NC, A, Force );
60}
61
62bool NetworkRun::canSetState( State_t Curr, Action_t A ) {
63 // we handle UP and DOWN
64 RuntimeInfo * RI = netNode()->nextNode()->runtime();
65
66 if( A == Up ) {
67 return ( Curr == Available );
68 } else if( A == Down ) {
69 return ( Curr == IsUp );
70 } 49 }
71 // delegate 50 return QString();
72 return RI->canSetState( Curr, A );
73}
74
75bool NetworkRun::handlesInterface( const QString & S ) {
76 // donno -> pass deeper
77 return netNode()->nextNode()->runtime()->handlesInterface(S);
78} 51}
diff --git a/noncore/settings/networksettings2/network/networkrun.h b/noncore/settings/networksettings2/network/networkrun.h
index 522a912..78a1694 100644
--- a/noncore/settings/networksettings2/network/networkrun.h
+++ b/noncore/settings/networksettings2/network/networkrun.h
@@ -1,23 +1,20 @@
1#include <asconnection.h> 1#include <netnode.h>
2#include "networkdata.h" 2#include "networkdata.h"
3 3
4class NetworkRun : public AsConnection { 4class NetworkRun : public RuntimeInfo {
5 5
6public : 6public :
7 7
8 NetworkRun( ANetNodeInstance * NNI, 8 NetworkRun( ANetNodeInstance * NNI,
9 NetworkData & Data ) : AsConnection( NNI ) 9 NetworkData & Data ) : RuntimeInfo( NNI )
10 { } 10 { }
11 11
12 virtual AsConnection * asConnection( void ) 12 virtual RuntimeInfo * connection( void )
13 { return (AsConnection *)this; } 13 { return this; }
14 14
15protected : 15 State_t detectState( void );
16
17 void detectState( NodeCollection * );
18 bool setState( NodeCollection * ,Action_t A, bool );
19 bool canSetState( State_t , Action_t A );
20 16
21 bool handlesInterface( const QString & I ); 17protected :
22 18
19 QString setMyState( NodeCollection * , Action_t, bool );
23}; 20};
diff --git a/noncore/settings/networksettings2/network/opie-networksettings2plugin-network.control b/noncore/settings/networksettings2/network/opie-networksettings2plugin-network.control
index 3dbb808..7b1056b 100644
--- a/noncore/settings/networksettings2/network/opie-networksettings2plugin-network.control
+++ b/noncore/settings/networksettings2/network/opie-networksettings2plugin-network.control
@@ -1,9 +1,9 @@
1Package: opie-networksettingsplugin2-network 1Package: opie-networksettings2plugin-network
2Files: plugins/networksettings2/libnetwork.so* 2Files: plugins/networksettings2/libnetwork.so*
3Priority: optional 3Priority: optional
4Section: opie/settings 4Section: opie/settings
5Maintainer: Wim Delvaux <wimpie@handhelds.org> 5Maintainer: Wim Delvaux <wimpie@handhelds.org>
6Architecture: arm 6Architecture: arm
7Depends: opie-networksettings2, libopiecore2, libopienet2 7Depends: opie-networksettings2, libopiecore2, libopienet2
8Description: Generate TCPIP Network settings plugin 8Description: Generate TCPIP Network settings plugin
9Version: $QPE_VERSION$EXTRAVERSION 9Version: $QPE_VERSION$EXTRAVERSION
diff --git a/noncore/settings/networksettings2/networksettings.cpp b/noncore/settings/networksettings2/networksettings.cpp
index ce0eabc..a0d4c7c 100644
--- a/noncore/settings/networksettings2/networksettings.cpp
+++ b/noncore/settings/networksettings2/networksettings.cpp
@@ -1,56 +1,70 @@
1#include <stdio.h> 1#include <stdio.h>
2#include <unistd.h> 2#include <unistd.h>
3#include <errno.h> 3#include <errno.h>
4 4
5#include <opie2/odebug.h>
6#include <opie2/oledbox.h>
7
5#include <qpe/qpeapplication.h> 8#include <qpe/qpeapplication.h>
6#include <qlistbox.h> 9#include <qlistbox.h>
10#include <qlayout.h>
7#include <qgroupbox.h> 11#include <qgroupbox.h>
8#include <qtimer.h> 12#include <qtimer.h>
9#include <qlistbox.h> 13#include <qlistbox.h>
10#include <qmessagebox.h> 14#include <qmessagebox.h>
11#include <qlabel.h> 15#include <qlabel.h>
12#include <qiconview.h> 16#include <qiconview.h>
13#include <qtimer.h> 17#include <qtimer.h>
14#include <qpe/qpeapplication.h> 18#include <qpe/qpeapplication.h>
15#include <qtoolbutton.h> 19#include <qtoolbutton.h>
16#include <qevent.h> 20#include <qevent.h>
17 21
18#include <asdevice.h>
19#include "networksettings.h" 22#include "networksettings.h"
20#include "netnode.h" 23#include "netnode.h"
21#include "editconnection.h" 24#include "editconnection.h"
22 25
23NetworkSettings::NetworkSettings( QWidget *parent, 26NetworkSettings::NetworkSettings( QWidget *parent,
24 const char *name, 27 const char *name,
25 WFlags fl ) : NetworkSettingsGUI(parent,name,fl), 28 WFlags fl ) : NetworkSettingsGUI(parent,name,fl),
26 NSD() { 29 NSD() {
27 30
28 UpdateTimer = new QTimer( this ); 31 UpdateTimer = new QTimer( this );
29 32
30 // set pixmaps 33 // set pixmaps
31 Add_TB->setPixmap( NSResources->getPixmap( "add" ) ); 34 Add_TB->setPixmap( NSResources->getPixmap( "add" ) );
32 Delete_TB->setPixmap( NSResources->getPixmap( "remove" ) ); 35 Delete_TB->setPixmap( NSResources->getPixmap( "remove" ) );
33 CheckState_TB->setPixmap( NSResources->getPixmap( "check" ) ); 36 CheckState_TB->setPixmap( NSResources->getPixmap( "check" ) );
34 Enable_TB->setPixmap( NSResources->getPixmap( "disabled" ) );
35 GenConfig_TB->setPixmap( NSResources->getPixmap( "configure" ) ); 37 GenConfig_TB->setPixmap( NSResources->getPixmap( "configure" ) );
36 38
37 Connect_TB->setPixmap( NSResources->getPixmap( "connected" ) ); 39 Disable_TB->setPixmap( NSResources->getPixmap( "disabled" ) );
38 Disconnect_TB->setPixmap( NSResources->getPixmap( "disconnected" ) ); 40 Up_TB->setPixmap( NSResources->getPixmap( "more" ) );
41 Down_TB->setPixmap( NSResources->getPixmap( "less" ) );
42
43 QVBoxLayout* V = new QVBoxLayout( LED_Frm );
44 QHBoxLayout * H = new QHBoxLayout( 0 );
45 V->addStretch(1);
46 V->addLayout( H );
47 Leds[0] = new OLedBox( red, LED_Frm );
48 H->addWidget( Leds[0], 0, Qt::AlignVCenter );
49 Leds[1] = new OLedBox( red, LED_Frm );
50 H->addWidget( Leds[1], 0, Qt::AlignVCenter );
51 Leds[2] = new OLedBox( red, LED_Frm );
52 H->addWidget( Leds[2], 0, Qt::AlignVCenter );
53 V->addStretch(1);
39 54
40 On_TB->setPixmap( NSResources->getPixmap( "off" ) );
41 55
42 SLOT_ToProfile(); 56 SLOT_ToProfile();
43 57
44 // populate main Listbox 58 // populate main Listbox
45 Profiles_LB->clear(); 59 Profiles_LB->clear();
46 QPEApplication::setStylusOperation( 60 QPEApplication::setStylusOperation(
47 Profiles_LB->viewport(), QPEApplication::RightOnHold ); 61 Profiles_LB->viewport(), QPEApplication::RightOnHold );
48 62
49 connect( Profiles_LB, 63 connect( Profiles_LB,
50 SIGNAL(rightButtonPressed(QListBoxItem*,const QPoint&)), 64 SIGNAL(rightButtonPressed(QListBoxItem*,const QPoint&)),
51 this, SLOT(SLOT_EditNode(QListBoxItem*)) ); 65 this, SLOT(SLOT_EditNode(QListBoxItem*)) );
52 66
53 { Name2Connection_t & M = NSResources->connections(); 67 { Name2Connection_t & M = NSResources->connections();
54 NodeCollection * NC; 68 NodeCollection * NC;
55 // for all connections 69 // for all connections
56 for( QDictIterator<NodeCollection> it(M); 70 for( QDictIterator<NodeCollection> it(M);
@@ -59,57 +73,70 @@ NetworkSettings::NetworkSettings( QWidget *parent,
59 NC = it.current(); 73 NC = it.current();
60 Profiles_LB->insertItem( NC->devicePixmap(), 74 Profiles_LB->insertItem( NC->devicePixmap(),
61 NC->name() ); 75 NC->name() );
62 } 76 }
63 } 77 }
64 78
65 if( Profiles_LB->count() ) { 79 if( Profiles_LB->count() ) {
66 Profiles_LB->setSelected( 0, TRUE ); 80 Profiles_LB->setSelected( 0, TRUE );
67 } 81 }
68 82
69 // if no profiles -> auto popup editing 83 // if no profiles -> auto popup editing
70 if( NSResources->connections().count() == 0 ) { 84 if( NSResources->connections().count() == 0 ) {
71 QTimer::singleShot( 100, this, SLOT(SLOT_AddNode() ) ); 85 QTimer::singleShot( 100, this, SLOT(SLOT_AddNode() ) );
72 } 86 }
73 87
74 connect( &(NSResources->system()), 88 connect( &(NSResources->system()),
75 SIGNAL( lineFromCommand(const QString &) ), 89 SIGNAL( stdoutLine(const QString &) ),
90 this, SLOT( SLOT_CmdMessage(const QString &) ) );
91
92 connect( &(NSResources->system()),
93 SIGNAL( stderrLine(const QString &) ),
94 this, SLOT( SLOT_CmdMessage(const QString &) ) );
95
96 connect( &(NSResources->system()),
97 SIGNAL( processEvent(const QString &) ),
76 this, SLOT( SLOT_CmdMessage(const QString &) ) ); 98 this, SLOT( SLOT_CmdMessage(const QString &) ) );
77 99
78 UpdateTimer->start( 5000 ); 100 UpdateTimer->start( 5000 );
79 connect( UpdateTimer, SIGNAL( timeout() ), 101 connect( UpdateTimer, SIGNAL( timeout() ),
80 this, SLOT( SLOT_RefreshStates() ) ); 102 this, SLOT( SLOT_RefreshStates() ) );
81 103
82 /* Add QCopChannel */ 104 /* Add QCopChannel */
83 connect( qApp, SIGNAL(appMessage(const QCString&,const QByteArray&)), 105 connect( qApp, SIGNAL(appMessage(const QCString&,const QByteArray&)),
84 this, SLOT(SLOT_QCopMessage(const QCString&,const QByteArray&)) ); 106 this, SLOT(SLOT_QCopMessage(const QCString&,const QByteArray&)) );
85} 107}
86 108
87NetworkSettings::~NetworkSettings() { 109NetworkSettings::~NetworkSettings() {
88 QString S; 110 QString S;
89 111
90 if( isModified() ) { 112 owarn << "Dispose NS" << oendl;
113 if( NSD.isModified() ) {
114 owarn << "Modified" << oendl;
91 S = NSD.saveSettings(); 115 S = NSD.saveSettings();
92 if( ! S.isEmpty() ) { 116 if( ! S.isEmpty() ) {
117 S.insert( 0, "<p>" );
118 S.append( "</p>" );
93 // problem saving 119 // problem saving
94 QMessageBox::warning( 120 QMessageBox::warning(
95 0, 121 0,
96 tr( "Saving setup" ), S ); 122 tr( "Saving setup" ), S );
97 } 123 }
98 124
99 SLOT_GenerateConfig(); 125 SLOT_GenerateConfig();
126 NSD.setModified( 0 );
100 } 127 }
101 128
102} 129}
103 130
104void NetworkSettings::SLOT_CmdMessage( const QString & S ) { 131void NetworkSettings::SLOT_CmdMessage( const QString & S ) {
105 Messages_LB->insertItem( S ); 132 Messages_LB->insertItem( S );
106 Messages_LB->setCurrentItem( Messages_LB->count()-1 ); 133 Messages_LB->setCurrentItem( Messages_LB->count()-1 );
107 Messages_LB->ensureCurrentVisible(); 134 Messages_LB->ensureCurrentVisible();
108} 135}
109 136
110void NetworkSettings::SLOT_RefreshStates( void ) { 137void NetworkSettings::SLOT_RefreshStates( void ) {
111 QListBoxItem * LBI = Profiles_LB->item( Profiles_LB->currentItem() ); // remember 138 QListBoxItem * LBI = Profiles_LB->item( Profiles_LB->currentItem() ); // remember
112 139
113 if( LBI ) { 140 if( LBI ) {
114 NodeCollection * NC; 141 NodeCollection * NC;
115 NSResources->system().probeInterfaces(); 142 NSResources->system().probeInterfaces();
@@ -154,62 +181,60 @@ void NetworkSettings::SLOT_AddNode( void ) {
154 SLOT_EditNode( 0 ); 181 SLOT_EditNode( 0 );
155} 182}
156 183
157void NetworkSettings::SLOT_DeleteNode( void ) { 184void NetworkSettings::SLOT_DeleteNode( void ) {
158 QListBoxItem * LBI = Profiles_LB->item( Profiles_LB->currentItem() ); 185 QListBoxItem * LBI = Profiles_LB->item( Profiles_LB->currentItem() );
159 186
160 if ( ! LBI ) 187 if ( ! LBI )
161 return; 188 return;
162 189
163 if( QMessageBox::warning( 190 if( QMessageBox::warning(
164 0, 191 0,
165 tr( "Removing profile" ), 192 tr( "Removing profile" ),
166 tr( "Remove selected profile ?" ), 193 tr( "Remove selected profile ?" ),
167 1, 0 ) == 1 ) { 194 1, 0 ) == 1 ) {
168 NSResources->removeConnection( LBI->text() ); 195 NSResources->removeConnection( LBI->text() );
169 delete LBI; 196 delete LBI;
170 setModified( 1 ); 197 NSD.setModified( 1 );
171 } 198 }
172} 199}
173 200
174void NetworkSettings::SLOT_EditNode( QListBoxItem * LBI ) { 201void NetworkSettings::SLOT_EditNode( QListBoxItem * LBI ) {
175 QString OldName = ""; 202 QString OldName = "";
176 203
177 printf( "------------------ Edit NOde\n" );
178 EditConnection EC( this ); 204 EditConnection EC( this );
179 205
180 if( LBI ) { 206 if( LBI ) {
181 NodeCollection * NC = NSResources->findConnection( LBI->text() ); 207 NodeCollection * NC = NSResources->findConnection( LBI->text() );
182 if( ! NC ) { 208 if( ! NC ) {
183 return; 209 return;
184 } 210 }
185 OldName = NC->name(); 211 OldName = NC->name();
186 EC.setConnection( NC ); 212 EC.setConnection( NC );
187 } 213 }
188 214
189 EC.showMaximized(); 215 EC.showMaximized();
190 // disable refresh timer 216 // disable refresh timer
191 UpdateTimer->stop(); 217 UpdateTimer->stop();
192 218
193 // we need to retry 219 // we need to retry
194 while( 1 ) { 220 while( 1 ) {
195 if( EC.exec() == QDialog::Accepted ) { 221 if( EC.exec() == QDialog::Accepted ) {
196 // toplevel item -> store 222 // toplevel item -> store
197 NodeCollection * NC = EC.connection(); 223 NodeCollection * NC = EC.connection();
198 if( NC->isModified() ) { 224 if( NC->isModified() ) {
199 setModified( 1 );
200 if( LBI ) { 225 if( LBI ) {
201 if( NC->name() != OldName ) { 226 if( NC->name() != OldName ) {
202 // find if new name is free 227 // find if new name is free
203 NodeCollection * LCN = NSResources->findConnection( 228 NodeCollection * LCN = NSResources->findConnection(
204 NC->name() ); 229 NC->name() );
205 if( LCN ) { 230 if( LCN ) {
206 QMessageBox::warning( 231 QMessageBox::warning(
207 0, 232 0,
208 tr( "In System Config" ), 233 tr( "In System Config" ),
209 tr( "Name %1 already exists" ).arg(NC->name()) 234 tr( "Name %1 already exists" ).arg(NC->name())
210 ); 235 );
211 continue; // restart exec 236 continue; // restart exec
212 } // else new name 237 } // else new name
213 // new name -> remove item 238 // new name -> remove item
214 NSResources->removeConnection( OldName ); 239 NSResources->removeConnection( OldName );
215 NSResources->addConnection( NC ); 240 NSResources->addConnection( NC );
@@ -236,234 +261,254 @@ void NetworkSettings::SLOT_EditNode( QListBoxItem * LBI ) {
236 NodeCollection * NC = NSResources->findConnection( LBI->text() ); 261 NodeCollection * NC = NSResources->findConnection( LBI->text() );
237 NC->reassign(); 262 NC->reassign();
238 } 263 }
239 } 264 }
240 break; 265 break;
241 } 266 }
242 // reenable 267 // reenable
243 UpdateTimer->start( 5000 ); 268 UpdateTimer->start( 5000 );
244} 269}
245 270
246void NetworkSettings::SLOT_ShowNode( QListBoxItem * LBI ) { 271void NetworkSettings::SLOT_ShowNode( QListBoxItem * LBI ) {
247 if( LBI == 0 ) 272 if( LBI == 0 )
248 return; 273 return;
249 274
250 NodeCollection * NC = NSResources->findConnection( LBI->text() ); 275 NodeCollection * NC = NSResources->findConnection( LBI->text() );
251 276
252 // is button possible 277 if( NC->description().isEmpty() ) {
253 bool EnabledPossible, OnPossible, ConnectPossible; 278 Description_LBL->setText( tr( "<<No description>>" ) );
254 // is button On or Off 279 } else {
255 bool DisabledOn, OnOn, ConnectOn; 280 Description_LBL->setText( NC->description() );
281 }
282
283 Profile_GB->setTitle( LBI->text() + " : " + NC->stateName() );
256 284
257 EnabledPossible = OnPossible = ConnectPossible = 1; 285 bool FrmActive = 1;
258 DisabledOn = 1; 286 bool IsEnabled = 1;
259 OnOn = ConnectOn = 0; 287 int leds = 0;
260 288
289 owarn << "State " << NC->state() << oendl;
261 switch( NC->state() ) { 290 switch( NC->state() ) {
262 case Unknown : 291 case Disabled : // no further work
263 // cannot occur here 292 IsEnabled = 0;
293 FrmActive = 0;
294 owarn << "LEds " << leds << oendl;
264 break; 295 break;
296 case Unknown :
265 case Unchecked : 297 case Unchecked :
266 case Unavailable : 298 case Unavailable :
267 // cannot do anything but recheck 299 FrmActive = 0;
268 EnabledPossible = OnPossible = ConnectPossible = 0;
269 break;
270 case Disabled :
271 OnPossible = ConnectPossible = 0;
272 break; 300 break;
273 case Off : 301 case Off :
274 DisabledOn = 0; 302 leds = 1;
275 break; 303 break;
276 case Available : 304 case Available :
277 OnOn = 1; 305 leds = 2;
278 Connect_TB->setPixmap( NSResources->getPixmap( "disconnected" ) );
279 DisabledOn = 0;
280 break; 306 break;
281 case IsUp : 307 case IsUp :
282 OnOn = ConnectOn = 1; 308 leds = 3;
283 Connect_TB->setPixmap( NSResources->getPixmap( "connected" ) );
284 DisabledOn = 0;
285 break; 309 break;
286 } 310 }
287 311
288 if( ! OnOn ) { 312 Disable_TB->setOn( ! IsEnabled );
289 Connect_TB->setPixmap( NSResources->getPixmap( "disconnected" ) ); 313 LED_Frm->setEnabled( FrmActive );
290 }
291
292 // set button state
293 Enable_TB->setEnabled( EnabledPossible );
294 On_TB->setEnabled( OnPossible );
295 Connect_TB->setEnabled( ConnectPossible );
296
297 Enable_TB->setOn( DisabledOn );
298 On_TB->setOn( OnOn );
299 Connect_TB->setOn( ConnectOn );
300 314
301 if( NC->description().isEmpty() ) { 315 for( int i = 0 ; i < leds; i ++ ) {
302 Description_LBL->setText( tr( "<<No description>>" ) ); 316 Leds[i]->setColor( red );
303 } else { 317 Leds[i]->setOn( true );
304 Description_LBL->setText( NC->description() ); 318 }
319 for( int i = leds ; i < 3; i ++ ) {
320 Leds[i]->setColor( red );
321 Leds[i]->setOn( false );
305 } 322 }
306 323
307 Profile_GB->setTitle( LBI->text() + " : " + NC->stateName() ); 324 Up_TB->setEnabled( leds < 3 && leds != 0 );
325 Down_TB->setEnabled( leds > 0 );
308} 326}
309 327
310void NetworkSettings::SLOT_CheckState( void ) { 328void NetworkSettings::SLOT_CheckState( void ) {
311 QListBoxItem * LBI = Profiles_LB->item( Profiles_LB->currentItem() ); 329 QListBoxItem * LBI = Profiles_LB->item( Profiles_LB->currentItem() );
312 if ( ! LBI ) 330 if ( ! LBI )
313 return; 331 return;
314 updateProfileState( LBI ); 332 updateProfileState( LBI );
315} 333}
316 334
317void NetworkSettings::updateProfileState( QListBoxItem * LBI ) { 335void NetworkSettings::updateProfileState( QListBoxItem * LBI ) {
318 if( LBI == Profiles_LB->item( Profiles_LB->currentItem() ) ) { 336 if( LBI == Profiles_LB->item( Profiles_LB->currentItem() ) ) {
319 SLOT_ShowNode( LBI ); 337 SLOT_ShowNode( LBI );
320 } 338 }
321} 339}
322 340
323void NetworkSettings::SLOT_GenerateConfig( void ) { 341void NetworkSettings::SLOT_GenerateConfig( void ) {
324 NSD.regenerate(); 342 QString S = NSD.generateSettings();
343 if( ! S.isEmpty() ) {
344 S.insert( 0, "<p>" );
345 S.append( "</p>" );
346 QMessageBox::warning(
347 0,
348 tr( "Generate config" ),
349 S);
350 }
325} 351}
326 352
327void NetworkSettings::SLOT_Enable( void ) { 353void NetworkSettings::SLOT_Disable( bool T ) {
328 QListBoxItem * LBI = Profiles_LB->item( Profiles_LB->currentItem() ); 354 QListBoxItem * LBI = Profiles_LB->item( Profiles_LB->currentItem() );
329 QString Msg; 355 QString Msg;
356
330 if ( ! LBI ) 357 if ( ! LBI )
331 return; 358 return;
332 359
333 NodeCollection * NC = 360 NodeCollection * NC = NSResources->findConnection( LBI->text() );
334 NSResources->findConnection( LBI->text() );
335
336 bool rv;
337 switch( NC->state() ) {
338 case Disabled :
339 Msg = tr( "Cannot enable profile" );
340 rv = NC->setState( Enable );
341 break;
342 default :
343 Msg = tr( "Cannot disable profile" );
344 rv = NC->setState( Disable );
345 break;
346 }
347 361
348 if( ! rv ) { 362 owarn << "Prepare to disable" << oendl;
363 Msg = NC->setState( (T) ? Disable : Enable );
364 if( ! Msg.isEmpty() ) {
365 Msg.insert( 0, "<p>" );
366 Msg.append( "</p>" );
349 QMessageBox::warning( 367 QMessageBox::warning(
350 0, 368 0,
351 tr( "Activating profile" ), 369 tr( "Activating profile" ),
352 Msg ); 370 Msg );
353 return; 371 return;
354 } 372 }
373
374 // reload new state
375 NC->state( true );
355 updateProfileState( LBI ); 376 updateProfileState( LBI );
356} 377}
357 378
358void NetworkSettings::SLOT_On( void ) { 379void NetworkSettings::SLOT_Up( void ) {
380 // bring more up
381
359 QListBoxItem * LBI = Profiles_LB->item( Profiles_LB->currentItem() ); 382 QListBoxItem * LBI = Profiles_LB->item( Profiles_LB->currentItem() );
383 QString Msg;
384 int led = -1;
360 385
361 if ( ! LBI ) 386 if ( ! LBI )
362 return; 387 return;
363 388
364 NodeCollection * NC = 389 NodeCollection * NC =
365 NSResources->findConnection( LBI->text() ); 390 NSResources->findConnection( LBI->text() );
366 391
367 bool rv;
368 switch( NC->state() ) { 392 switch( NC->state() ) {
369 case Off : 393 case Disabled : // cannot modify this state
370 // activate interface 394 case Unknown : // cannot modify this state
371 rv = NC->setState( Activate ); 395 case Unchecked : // cannot modify this state
396 case Unavailable : // cannot modify this state
397 case IsUp : // highest UP state
398 return;
399 case Off : // -> activate
400 led = 1;
401 Down_TB->setEnabled( true );
402 Log(( "Activate interface %s\n", NC->name().latin1() ));
403 Msg = NC->setState( Activate );
372 break; 404 break;
373 case Available : // deactivate 405 case Available : // -> up
374 case IsUp : // deactivate (will also bring down if needed) 406 led = 2;
375 rv = NC->setState( Deactivate ); 407 Log(( "Bring up interface %s\n", NC->name().latin1() ));
408 Msg = NC->setState( Up );
409 if( Msg.isEmpty() ) {
410 Up_TB->setEnabled( false );
411 }
376 break; 412 break;
377 default : 413 }
378 // others no change
379 return;
380 }
381 414
382 if( ! rv ) { 415 if( ! Msg.isEmpty() ) {
416 Msg.insert( 0, "<p>" );
417 Msg.append( "</p>" );
383 QMessageBox::warning( 418 QMessageBox::warning(
384 0, 419 0,
385 tr( "Activating profile" ), 420 tr( "Increase availability" ),
386 tr( "Cannot enable profile" ) ); 421 Msg );
387 return; 422 return;
388 } 423 }
424
389 updateProfileState( LBI ); 425 updateProfileState( LBI );
426
427 // set color of led we should change
428 if( led > 0 ) {
429 Leds[led]->setColor( blue );
430 Leds[led]->setOn( true );
431 }
432
390} 433}
391 434
392void NetworkSettings::SLOT_Connect( void ) { 435void NetworkSettings::SLOT_Down( void ) {
436 // bring more down
437
393 QListBoxItem * LBI = Profiles_LB->item( Profiles_LB->currentItem() ); 438 QListBoxItem * LBI = Profiles_LB->item( Profiles_LB->currentItem() );
439 int led = -1;
440 QString Msg;
394 441
395 if ( ! LBI ) 442 if ( ! LBI )
396 return; 443 return;
397 444
398 NodeCollection * NC = 445 NodeCollection * NC =
399 NSResources->findConnection( LBI->text() ); 446 NSResources->findConnection( LBI->text() );
400 447
401 bool rv = 1 ;
402 switch( NC->state() ) { 448 switch( NC->state() ) {
403 case IsUp : 449 case Disabled : // cannot modify this state
404 // down interface 450 case Unknown : // cannot modify this state
405 rv = NC->setState( Down ); 451 case Unchecked : // cannot modify this state
406 break; 452 case Unavailable : // cannot modify this state
407 case Available : 453 case Off : // highest DOWN state
408 // up interface
409 rv = NC->setState( Up );
410 break; 454 break;
411 case Off : 455 case Available : // -> down
412 // activate and bring up 456 led = 0;
413 rv = ( NC->setState( Activate ) && 457 Log(( "Deactivate interface %s\n", NC->name().latin1() ));
414 NC->setState( Up ) ); 458 Msg = NC->setState( Deactivate );
459 Down_TB->setEnabled( false );
415 break; 460 break;
416 default : 461 case IsUp : // highest UP state
417 // others no change 462 led = 1;
463 Up_TB->setEnabled( true );
464 Log(( "Bring down interface %s\n", NC->name().latin1() ));
465 Msg = NC->setState( Down, 1 );
466 if( Msg.isEmpty() ) {
467 // remove 'up' file to make sure
468 unlink ( QString().sprintf( "/tmp/Profile-%d.up", NC->number() ).latin1() );;
469 }
418 break; 470 break;
419 } 471 }
420 472
421 if( ! rv ) { 473 if( ! Msg.isEmpty() ) {
474 Msg.insert( 0, "<p>" );
475 Msg.append( "</p>" );
422 QMessageBox::warning( 476 QMessageBox::warning(
423 0, 477 0,
424 tr( "Activating profile" ), 478 tr( "Decrease availability" ),
425 tr( "Cannot enable profile" ) ); 479 Msg );
426 }
427
428 // we do not update the GUI but wait for the REAL upping of the device
429}
430
431void NetworkSettings::SLOT_Disconnect( void ) {
432 QString S;
433 QListBoxItem * LBI = Profiles_LB->item( Profiles_LB->currentItem() );
434
435 if ( ! LBI )
436 return; 480 return;
481 }
437 482
438 NodeCollection * NC = 483 updateProfileState( LBI );
439 NSResources->findConnection( LBI->text() );
440 484
441 Log(( "Force interface %s down\n", NC->name().latin1() )); 485 // set color of led we should change
442 NC->setState( Down, 1 ); 486 if( led >= 0 ) {
443 // remove 'up' file to make sure 487 Leds[led]->setColor( blue );
444 S.sprintf( "/tmp/Profile-%d.up", NC->number() ); 488 }
445 unlink( S.latin1() );
446} 489}
447 490
448void NetworkSettings::SLOT_ToMessages( void ) { 491void NetworkSettings::SLOT_ToMessages( void ) {
492 Profiles_LB->hide();
449 Profile_GB->hide(); 493 Profile_GB->hide();
450 Messages_GB->show(); 494 Messages_GB->show();
451} 495}
452 496
453void NetworkSettings::SLOT_ToProfile( void ) { 497void NetworkSettings::SLOT_ToProfile( void ) {
498 Profiles_LB->show();
454 Profile_GB->show(); 499 Profile_GB->show();
455 Messages_GB->hide(); 500 Messages_GB->hide();
456} 501}
457 502
458void NetworkSettings::SLOT_QCopMessage(const QCString &msg, const QByteArray &data) { 503void NetworkSettings::SLOT_QCopMessage(const QCString &msg, const QByteArray &data) {
459 QDataStream stream( data, IO_ReadOnly ); 504 QDataStream stream( data, IO_ReadOnly );
460 505
461 if( msg == "raise" ) { 506 if( msg == "raise" ) {
462 raise(); 507 raise();
463 return; 508 return;
464 } /* if ( msg == "someMessage(int,int,int)" ) { 509 } /* if ( msg == "someMessage(int,int,int)" ) {
465 int a,b,c; 510 int a,b,c;
466 stream >> a >> b >> c; 511 stream >> a >> b >> c;
467 ... 512 ...
468 } */ 513 } */
469} 514}
diff --git a/noncore/settings/networksettings2/networksettings.h b/noncore/settings/networksettings2/networksettings.h
index 8ec5d08..987e311 100644
--- a/noncore/settings/networksettings2/networksettings.h
+++ b/noncore/settings/networksettings2/networksettings.h
@@ -1,53 +1,59 @@
1#include "nsdata.h" 1#include "nsdata.h"
2#include "networksettingsGUI.h" 2#include "networksettingsGUI.h"
3#include "resources.h" 3#include "resources.h"
4 4
5class ANetNode; 5class ANetNode;
6class ANetNodeInstance; 6class ANetNodeInstance;
7class QTimer; 7class QTimer;
8class QListBoxItem; 8class QListBoxItem;
9class QEvent; 9class QEvent;
10class OLedBox;
10 11
11class NetworkSettings : public NetworkSettingsGUI { 12class NetworkSettings : public NetworkSettingsGUI {
12 13
13 Q_OBJECT 14 Q_OBJECT
14 15
15public : 16public :
16 17
17 NetworkSettings( QWidget *parent=0, 18 NetworkSettings( QWidget *parent=0,
18 const char *name=0, 19 const char *name=0,
19 WFlags fl = 0 ); 20 WFlags fl = 0 );
20 ~NetworkSettings( void ); 21 virtual ~NetworkSettings( void );
21 22
22 static QString appName( void ) 23 static QString appName( void )
23 { return QString::fromLatin1("networksettings"); } 24 { return QString::fromLatin1("networksettings"); }
24 25
25 bool isModified( void )
26 { return NSD.isModified(); }
27 void setModified( bool m )
28 { NSD.setModified( m ); }
29
30public slots : 26public slots :
31 27
32 void SLOT_AddNode( void ); 28 void SLOT_AddNode( void );
33 void SLOT_DeleteNode( void ); 29 void SLOT_DeleteNode( void );
34 void SLOT_ShowNode( QListBoxItem * ); 30 void SLOT_ShowNode( QListBoxItem * );
35 void SLOT_EditNode( QListBoxItem * ); 31 void SLOT_EditNode( QListBoxItem * );
36 void SLOT_CheckState( void ); 32 void SLOT_CheckState( void );
37 void SLOT_Enable( void ); 33
38 void SLOT_On( void ); 34 void SLOT_Up( void );
39 void SLOT_Connect( void ); 35 void SLOT_Down( void );
40 void SLOT_Disconnect( void ); 36 void SLOT_Disable( bool );
37
41 void SLOT_GenerateConfig( void ); 38 void SLOT_GenerateConfig( void );
42 void SLOT_RefreshStates( void ); 39 void SLOT_RefreshStates( void );
43 void SLOT_QCopMessage( const QCString&,const QByteArray& ); 40 void SLOT_QCopMessage( const QCString&,const QByteArray& );
44 void SLOT_ToProfile( void ); 41 void SLOT_ToProfile( void );
45 void SLOT_ToMessages( void ); 42 void SLOT_ToMessages( void );
46 void SLOT_CmdMessage( const QString & S ); 43 void SLOT_CmdMessage( const QString & S );
47 44
48private : 45private :
49 46
50 void updateProfileState( QListBoxItem * it ); 47 void updateProfileState( QListBoxItem * it );
51 QTimer * UpdateTimer; 48 QTimer * UpdateTimer;
52 NetworkSettingsData NSD; 49 NetworkSettingsData NSD;
50 /*
51
52 no leds : not present, unknown, unchecked or disabled
53 (1) down : hardware present but inactive
54 (2) available : hardware present and active
55 (3) up : present active and connected
56
57 */
58 OLedBox * Leds[3];
53}; 59};
diff --git a/noncore/settings/networksettings2/networksettings.pro b/noncore/settings/networksettings2/networksettings.pro
index 5d9efbb..d201db1 100644
--- a/noncore/settings/networksettings2/networksettings.pro
+++ b/noncore/settings/networksettings2/networksettings.pro
@@ -1,24 +1,24 @@
1# 1#
2CONFIG = qt warn_on debug 2CONFIG = qt warn_on debug
3#CONFIG = qt warn_on release 3#CONFIG = qt warn_on release
4HEADERS = networksettings.h \ 4HEADERS = networksettings.h \
5 activateprofile.h \ 5 activateprofile.h \
6 activatevpn.h \ 6 activatevpn.h \
7 editconnection.h 7 editconnection.h
8SOURCES = main.cpp \ 8SOURCES = main.cpp \
9 networksettings.cpp \ 9 networksettings.cpp \
10 nsdata.cpp \ 10 nsdata.cpp \
11 activateprofile.cpp \ 11 activateprofile.cpp \
12 activatevpn.cpp \ 12 activatevpn.cpp \
13 editconnection.cpp 13 editconnection.cpp
14INCLUDEPATH += $(OPIEDIR)/include networksettings2/ 14INCLUDEPATH += $(OPIEDIR)/include networksettings2/ opietooth2/
15DEPENDPATH += $(OPIEDIR)/include networksettings2/ 15DEPENDPATH += $(OPIEDIR)/include networksettings2/ opietooth2/
16LIBS += -lqpe -L$(OPIEDIR)/plugins/networksettings2 -lnetworksettings2 -lopiecore2 16LIBS += -lqpe -L$(OPIEDIR)/plugins/networksettings2 -lnetworksettings2 -lopietooth2 -lopiecore2
17INTERFACES = networksettingsGUI.ui \ 17INTERFACES = networksettingsGUI.ui \
18 editconnectionGUI.ui \ 18 editconnectionGUI.ui \
19 activatevpnGUI.ui \ 19 activatevpnGUI.ui \
20 activateprofileGUI.ui 20 activateprofileGUI.ui
21TARGET = $(OPIEDIR)/bin/networksettings2 21TARGET = $(OPIEDIR)/bin/networksettings2
22 22
23 23
24include( $(OPIEDIR)/include.pro ) 24include( $(OPIEDIR)/include.pro )
diff --git a/noncore/settings/networksettings2/networksettings2/GUIUtils.h b/noncore/settings/networksettings2/networksettings2/GUIUtils.h
index 23290a9..baf6f0c 100644
--- a/noncore/settings/networksettings2/networksettings2/GUIUtils.h
+++ b/noncore/settings/networksettings2/networksettings2/GUIUtils.h
@@ -18,19 +18,28 @@
18 } 18 }
19 19
20// if Value capable widget has changed 20// if Value capable widget has changed
21#define SBM(Data,Wdg,FL) \ 21#define SBM(Data,Wdg,FL) \
22 if( Wdg->value() != Data) { \ 22 if( Wdg->value() != Data) { \
23 FL = 1; \ 23 FL = 1; \
24 Data = Wdg->value(); \ 24 Data = Wdg->value(); \
25 } 25 }
26 26
27// if currentItem capable widget has changed 27// if currentItem capable widget has changed
28#define CIM(Data,Wdg,FL) \ 28#define CIM(Data,Wdg,FL) \
29 if( Wdg->currentItem() != Data) { \ 29 if( Wdg->currentItem() != Data) { \
30 FL = 1; \ 30 FL = 1; \
31 Data = Wdg->currentItem(); \ 31 Data = Wdg->currentItem(); \
32 } 32 }
33 33
34#define STXT(a, b) \
35 b->setText( a );
36
37#define SCB(a, b) \
38 b->setChecked( a );
39
40#define SSB( Data,Wdg) \
41 Wdg->setValue( Data )
42
34extern bool validIP( const QString & S ); 43extern bool validIP( const QString & S );
35 44
36#endif 45#endif
diff --git a/noncore/settings/networksettings2/networksettings2/Utils.h b/noncore/settings/networksettings2/networksettings2/Utils.h
index 739476e..301aac1 100644
--- a/noncore/settings/networksettings2/networksettings2/Utils.h
+++ b/noncore/settings/networksettings2/networksettings2/Utils.h
@@ -1,9 +1,11 @@
1#ifndef __UTILS_H 1#ifndef __UTILS_H
2#define __UTILS_H 2#define __UTILS_H
3 3
4#include <opie2/odebug.h>
5
4#define Log(x) VLog x 6#define Log(x) VLog x
5extern void VLog( char * Format, ... ); 7extern void VLog( char * Format, ... );
6extern void LogClose( void ); 8extern void LogClose( void );
7extern QString removeSpaces( const QString & X ); 9extern QString removeSpaces( const QString & X );
8 10
9#endif 11#endif
diff --git a/noncore/settings/networksettings2/networksettings2/netnode.cpp b/noncore/settings/networksettings2/networksettings2/netnode.cpp
index 110786a..17653bd 100644
--- a/noncore/settings/networksettings2/networksettings2/netnode.cpp
+++ b/noncore/settings/networksettings2/networksettings2/netnode.cpp
@@ -1,33 +1,46 @@
1#include <time.h> 1#include <time.h>
2#include <qpe/qpeapplication.h> 2#include <qpe/qpeapplication.h>
3#include <qpe/resource.h> 3#include <qpe/resource.h>
4 4
5
6#include <qpainter.h> 5#include <qpainter.h>
7#include <qbitmap.h> 6#include <qbitmap.h>
8#include <qtextstream.h> 7#include <qtextstream.h>
9#include <qpixmap.h> 8#include <qpixmap.h>
10 9
11#include "resources.h" 10#include "resources.h"
12#include "netnode.h" 11#include "netnode.h"
13 12
14#include "asdevice.h" 13static char * ActionName[] = {
15#include "asline.h" 14 "Disable",
16#include "asconnection.h" 15 "Enable",
17#include "asfullsetup.h" 16 "Activate",
17 "Deactivate",
18 "Up",
19 "Down"
20};
21
22static char * StateName[] = {
23 "Unchecked",
24 "Unknown",
25 "Unavailable",
26 "Disabled",
27 "Off",
28 "Available",
29 "IsUp"
30};
18 31
19QString & deQuote( QString & X ) { 32QString & deQuote( QString & X ) {
20 if( X[0] == '"' ) { 33 if( X[0] == '"' ) {
21 // remove end and trailing "" and \x -> x 34 // remove end and trailing "" and \x -> x
22 QChar R; 35 QChar R;
23 long idx; 36 long idx;
24 idx = X.length()-1; 37 idx = X.length()-1;
25 X = X.mid( 1, idx ); 38 X = X.mid( 1, idx );
26 39
27 idx = 0; 40 idx = 0;
28 while( ( idx = X.find( '\\', idx ) ) >= 0 ) { 41 while( ( idx = X.find( '\\', idx ) ) >= 0 ) {
29 R = X.at( idx + 1 ); 42 R = X.at( idx + 1 );
30 X.replace( idx, 2, &R, 1 ); 43 X.replace( idx, 2, &R, 1 );
31 } 44 }
32 X = X.left( X.length()-1 ); 45 X = X.left( X.length()-1 );
33 } 46 }
@@ -52,135 +65,154 @@ QString quote( QString X ) {
52 65
53 66
54// 67//
55// 68//
56// ANETNODE 69// ANETNODE
57// 70//
58// 71//
59 72
60void ANetNode::saveAttributes( QTextStream & TS ) { 73void ANetNode::saveAttributes( QTextStream & TS ) {
61 saveSpecificAttribute( TS ); 74 saveSpecificAttribute( TS );
62} 75}
63 76
64void ANetNode::setAttribute( QString & Attr, QString & Value ){ 77void ANetNode::setAttribute( QString & Attr, QString & Value ){
65 setSpecificAttribute( Attr, Value ); 78 setSpecificAttribute( Attr, Value );
66} 79}
67 80
81bool ANetNode::isToplevel( void ) {
82 const char ** P = provides();
83 while( *P ) {
84 if( strcmp( *P, "fullsetup") == 0 )
85 return 1;
86 P ++;
87 }
88 return 0;
89}
90
91bool ANetNode::openFile( SystemFile & SF,
92 ANetNodeInstance * NNI ) {
93 return (NNI ) ? NNI->openFile( SF ) : 0 ;
94}
95
68// 96//
69// 97//
70// ANETNODEINSTANCE 98// ANETNODEINSTANCE
71// 99//
72// 100//
73 101
74long ANetNodeInstance::InstanceCounter = -1; 102long ANetNodeInstance::InstanceCounter = -1;
75 103
76void ANetNodeInstance::initialize( void ) { 104void ANetNodeInstance::initialize( void ) {
77 if( InstanceCounter == -1 ) 105 if( InstanceCounter == -1 )
78 InstanceCounter = time(0); 106 InstanceCounter = time(0);
79 // set name 107 // set name
80 QString N; 108 QString N;
81 N.sprintf( "-%ld", InstanceCounter++ ); 109 N.sprintf( "-%ld", InstanceCounter++ );
82 N.prepend( NodeType->name() ); 110 N.prepend( NodeType->name() );
83 setName( N.latin1() ); 111 setName( N.latin1() );
84} 112}
85 113
86void ANetNodeInstance::setAttribute( QString & Attr, QString & Value ){ 114void ANetNodeInstance::setAttribute( QString & Attr, QString & Value ){
87 if( Attr == "name" ) { 115 if( Attr == "__name" ) {
88 setName( Value.latin1() ); 116 setName( Value.latin1() );
89 } else { 117 } else {
90 setSpecificAttribute( Attr, Value ); 118 setSpecificAttribute( Attr, Value );
91 } 119 }
92} 120}
93 121
94void ANetNodeInstance::saveAttributes( QTextStream & TS ) { 122void ANetNodeInstance::saveAttributes( QTextStream & TS ) {
95 TS << "name=" << name() << endl; 123 TS << "__name=" << name() << endl;
96 saveSpecificAttribute( TS ); 124 saveSpecificAttribute( TS );
97} 125}
98 126
99ANetNodeInstance * ANetNodeInstance::nextNode( void ) { 127ANetNodeInstance * ANetNodeInstance::nextNode( void ) {
100 return connection()->findNext( this ); 128 return connection()->findNext( this );
101} 129}
102 130
103// 131//
104// 132//
105// NODECOLLECTION 133// NODECOLLECTION
106// 134//
107// 135//
108 136
109NodeCollection::NodeCollection( void ) : QList<ANetNodeInstance>() { 137NodeCollection::NodeCollection( void ) : QList<ANetNodeInstance>() {
110 IsModified = 0; 138 IsModified = 0;
111 Index = -1; 139 Index = -1;
112 Name=""; 140 Name="";
113 IsNew = 1; 141 IsNew = 1;
114 CurrentState = Unchecked; 142 CurrentState = Unchecked;
143 AssignedInterface = 0;
115} 144}
116 145
117NodeCollection::NodeCollection( QTextStream & TS ) : 146NodeCollection::NodeCollection( QTextStream & TS ) :
118 QList<ANetNodeInstance>() { 147 QList<ANetNodeInstance>() {
119 long idx; 148 long idx;
120 bool InError = 0; 149 bool InError = 0;
121 QString S, A, N; 150 QString S, A, N;
122 IsModified = 0; 151 IsModified = 0;
123 Index = -1; 152 Index = -1;
124 Name=""; 153 Name="";
125 IsNew = 0; 154 IsNew = 0;
155 AssignedInterface = 0;
126 CurrentState = Unchecked; 156 CurrentState = Unchecked;
127 157
128 do { 158 do {
129 S = TS.readLine(); 159 S = TS.readLine();
130 if( S.isEmpty() ) { 160 if( S.isEmpty() ) {
131 if( InError ) { 161 if( InError ) {
132 // remove all nodes 162 // remove all nodes
133 clear(); 163 clear();
134 } 164 }
135 // empty line 165 // empty line
136 break; 166 break;
137 } 167 }
138 168
139 idx = S.find('='); 169 idx = S.find('=');
140 S.stripWhiteSpace(); 170 S.stripWhiteSpace();
141 A = S.left( idx ); 171 A = S.left( idx );
142 A.lower(); 172 A.lower();
143 N = S.mid( idx+1, S.length() ); 173 N = S.mid( idx+1, S.length() );
144 N.stripWhiteSpace(); 174 N.stripWhiteSpace();
145 N = deQuote( N ); 175 N = deQuote( N );
146 176
147 if( A == "name" ) { 177 if( A == "name" ) {
148 Name = N; 178 Name = N;
149 } else if( A == "number" ) { 179 } else if( A == "number" ) {
150 Log(( "Profile number %s\n", N.latin1() ));
151 setNumber( N.toLong() ); 180 setNumber( N.toLong() );
152 } else if( A == "node" ) { 181 } else if( A == "node" ) {
153 ANetNodeInstance * NNI = NSResources->findNodeInstance( N ); 182 ANetNodeInstance * NNI = NSResources->findNodeInstance( N );
154 if( NNI && ! InError ) { 183 if( NNI && ! InError ) {
155 append( NSResources->findNodeInstance( N ) ); 184 append( NSResources->findNodeInstance( N ) );
156 } else { 185 } else {
157 // could not find a node type -> collection invalid 186 // could not find a node type -> collection invalid
158 InError = 1; 187 InError = 1;
159 } 188 }
160 } 189 }
161 } while( 1 ); 190 } while( 1 );
191
192 Log(( "Profile number %s : %d nodes\n",
193 N.latin1(), count() ));
162} 194}
163 195
164 196
165NodeCollection::~NodeCollection( void ) { 197NodeCollection::~NodeCollection( void ) {
166} 198}
167 199
168const QString & NodeCollection::description( void ) { 200const QString & NodeCollection::description( void ) {
169 ANetNodeInstance * NNI = getToplevel(); 201 ANetNodeInstance * NNI = getToplevel();
170 return (NNI) ? NNI->runtime()->asFullSetup()->description() : Name; 202 return (NNI) ? NNI->runtime()->description() : Name;
171} 203}
172 204
173void NodeCollection::append( ANetNodeInstance * NNI ) { 205void NodeCollection::append( ANetNodeInstance * NNI ) {
174 NNI->setConnection( this ); 206 NNI->setConnection( this );
175 QList<ANetNodeInstance>::append( NNI ); 207 QList<ANetNodeInstance>::append( NNI );
176} 208}
177 209
178void NodeCollection::save( QTextStream & TS ) { 210void NodeCollection::save( QTextStream & TS ) {
179 211
180 TS << "name=" << quote( Name ) << endl; 212 TS << "name=" << quote( Name ) << endl;
181 TS << "number=" << number() << endl; 213 TS << "number=" << number() << endl;
182 ANetNodeInstance * NNI; 214 ANetNodeInstance * NNI;
183 for( QListIterator<ANetNodeInstance> it(*this); 215 for( QListIterator<ANetNodeInstance> it(*this);
184 it.current(); 216 it.current();
185 ++it ) { 217 ++it ) {
186 NNI = it.current(); 218 NNI = it.current();
@@ -241,97 +273,239 @@ int NodeCollection::compareItems( QCollection::Item I1,
241} 273}
242 274
243static char * State2PixmapTbl[] = { 275static char * State2PixmapTbl[] = {
244 "NULL", // Unchecked : no pixmap 276 "NULL", // Unchecked : no pixmap
245 "check", // Unknown 277 "check", // Unknown
246 "delete", // unavailable 278 "delete", // unavailable
247 "disabled", // disabled 279 "disabled", // disabled
248 "off", // off 280 "off", // off
249 "disconnected", // available 281 "disconnected", // available
250 "connected" // up 282 "connected" // up
251}; 283};
252 284
253QPixmap NodeCollection::devicePixmap( void ) { 285QPixmap NodeCollection::devicePixmap( void ) {
254 QPixmap pm = NSResources->getPixmap( 286 QPixmap pm = NSResources->getPixmap(
255 getToplevel()->nextNode()->pixmapName()+"-large"); 287 getToplevel()->nextNode()->pixmapName()+"-large");
256 288
257 QPixmap Mini = NSResources->getPixmap( device()->netNode()->pixmapName() ); 289 QPixmap Mini = NSResources->getPixmap(
290 device()->netNode()->pixmapName() );
258 291
259 if( pm.isNull() || Mini.isNull() ) 292 if( pm.isNull() || Mini.isNull() )
260 return Resource::loadPixmap("Unknown"); 293 return Resource::loadPixmap("Unknown");
261 294
262 QPainter painter( &pm ); 295 QPainter painter( &pm );
263 painter.drawPixmap( pm.width()-Mini.width(), 296 painter.drawPixmap( pm.width()-Mini.width(),
264 pm.height()-Mini.height(), 297 pm.height()-Mini.height(),
265 Mini ); 298 Mini );
266 pm.setMask( pm.createHeuristicMask( TRUE ) ); 299 pm.setMask( pm.createHeuristicMask( TRUE ) );
267 return pm; 300 return pm;
268} 301}
269 302
270QPixmap NodeCollection::statePixmap( State_t S) { 303QPixmap NodeCollection::statePixmap( State_t S) {
271 return NSResources->getPixmap( State2PixmapTbl[S] ); 304 return NSResources->getPixmap( State2PixmapTbl[S] );
272} 305}
273 306
274QString NodeCollection::stateName( State_t S) { 307QString NodeCollection::stateName( State_t S) {
275 switch( S ) { 308 switch( S ) {
276 case Unknown : 309 case Unknown :
277 return qApp->translate( "networksettings2", "Unknown"); 310 return qApp->translate( "networksettings2", "Unknown");
278 case Unavailable : 311 case Unavailable :
279 return qApp->translate( "networksettings2", "Unavailable"); 312 return qApp->translate( "networksettings2", "Unavailable");
280 case Disabled : 313 case Disabled :
281 return qApp->translate( "networksettings2", "Disabled"); 314 return qApp->translate( "networksettings2", "Disabled");
282 case Off : 315 case Off :
283 return qApp->translate( "networksettings2", "Off"); 316 return qApp->translate( "networksettings2", "Inactive");
284 case Available : 317 case Available :
285 return qApp->translate( "networksettings2", "Available"); 318 return qApp->translate( "networksettings2", "Available");
286 case IsUp : 319 case IsUp :
287 return qApp->translate( "networksettings2", "IsUp"); 320 return qApp->translate( "networksettings2", "Up");
288 case Unchecked : /* FT */ 321 case Unchecked : /* FT */
289 default : 322 default :
290 break; 323 break;
291 } 324 }
292 return QString(""); 325 return QString("");
293} 326}
294 327
295void NodeCollection::reassign( void ) { 328void NodeCollection::reassign( void ) {
296 for( QListIterator<ANetNodeInstance> it(*this); 329 for( QListIterator<ANetNodeInstance> it(*this);
297 it.current(); 330 it.current();
298 ++it ) { 331 ++it ) {
299 it.current()->setConnection( this ); 332 it.current()->setConnection( this );
300 } 333 }
301} 334}
302 335
303bool NodeCollection::triggersVPN() { 336const QStringList & NodeCollection::triggers() {
304 return getToplevel()->runtime()->asFullSetup()->triggersVPN(); 337 return getToplevel()->runtime()->triggers();
305} 338}
306 339
307bool NodeCollection::hasDataForFile( const QString & S ) { 340bool NodeCollection::hasDataForFile( SystemFile & S ) {
308 return ( firstWithDataForFile( S ) != 0 ); 341 return ( firstWithDataForFile( S ) != 0 );
309} 342}
310 343
311ANetNodeInstance * NodeCollection::firstWithDataForFile( const QString & S ) { 344ANetNodeInstance * NodeCollection::firstWithDataForFile( SystemFile & S ) {
312 for( QListIterator<ANetNodeInstance> it(*this); 345 for( QListIterator<ANetNodeInstance> it(*this);
313 it.current(); 346 it.current();
314 ++it ) { 347 ++it ) {
315 if( it.current()->hasDataForFile( S ) ) { 348 if( it.current()->hasDataForFile( S ) ) {
316 Log(( "Node %s has data for %s\n",
317 it.current()->nodeClass()->name(),
318 S.latin1() ));
319 return it.current(); 349 return it.current();
320 } 350 }
321 } 351 }
322 return 0; 352 return 0;
323} 353}
324 354
355State_t NodeCollection::state( bool Update ) {
356 State_t NodeState;
357
358 if( CurrentState == Unchecked || Update ) {
359 // collect states of all nodes until with get the 'higest'
360 // state possible
361
362 Log(( "Connection %s state %s\n",
363 Name.latin1(), StateName[CurrentState] ));
364
365 CurrentState = Unknown;
366 for( QListIterator<ANetNodeInstance> it(*this);
367 it.current();
368 ++it ) {
369 Log(( "-> Detect %s\n", it.current()->name() ));
370 NodeState = it.current()->runtime()->detectState();
371 Log(( " state %s\n", StateName[NodeState] ));
372
373 if( NodeState == Disabled ||
374 NodeState == IsUp ) {
375 // max
376 CurrentState = NodeState;
377 break;
378 }
379
380 if( NodeState > CurrentState ) {
381 // higher
382 CurrentState = NodeState;
383 }
384 }
385 }
386
387 return CurrentState;
388}
389
390QString NodeCollection::setState( Action_t A, bool Force ) {
391
392 QString msg;
393 Action_t Actions[10];
394 int NoOfActions = 0;
395
396 // get current state
397 state( Force );
398
399 switch( A ) {
400 case Disable :
401 if( CurrentState < Disabled ) {
402 // disabled
403 CurrentState = Disabled;
404 return QString();
405 }
406
407 if( CurrentState == IsUp ) {
408 Actions[NoOfActions++] = Down;
409 Actions[NoOfActions++] = Deactivate;
410 } else if( CurrentState == Available ) {
411 Actions[NoOfActions++] = Deactivate;
412 }
413 Actions[NoOfActions++] = Disable;
414 break;
415 case Enable :
416 // always possible -> detected state is new state
417 Actions[NoOfActions++] = Enable;
418 break;
419 case Activate :
420 if( ! Force ) {
421 if( CurrentState >= Available ) {
422 // already available
423 return QString();
424 }
425
426 if( CurrentState != Off ) {
427 return qApp->translate( "System",
428 "State should be off" );
429 }
430 }
431
432 Actions[NoOfActions++] = Activate;
433 break;
434 case Deactivate :
435 if( ! Force ) {
436 if( CurrentState < Off ) {
437 // already inactive
438 return QString();
439 }
440 }
441
442 if( CurrentState == IsUp ) {
443 Actions[NoOfActions++] = Down;
444 }
445 Actions[NoOfActions++] = Deactivate;
446 break;
447 case Up :
448 if( ! Force ) {
449 if( CurrentState == IsUp ) {
450 return QString();
451 }
452 if( CurrentState < Off ) {
453 return qApp->translate( "System",
454 "State should at least be off" );
455 }
456 }
457 if( CurrentState == Off ) {
458 Actions[NoOfActions++] = Activate;
459 }
460 Actions[NoOfActions++] = Up;
461 break;
462 case Down :
463 if( ! Force ) {
464 if( CurrentState < Available ) {
465 // OK
466 return QString();
467 }
468 }
469 Actions[NoOfActions++] = Down;
470 break;
471 }
472
473 // send actions to all nodes
474 Log(( "Action %s requires %d steps\n",
475 ActionName[A], NoOfActions ));
476
477 for( int i = 0 ; i < NoOfActions; i ++ ) {
478 // setState recurses through the tree depth first
479 msg = getToplevel()->runtime()->setState( this, Actions[i], Force );
480 if( ! msg.isEmpty() ) {
481 return msg;
482 }
483 }
484 return QString();
485}
486
325// 487//
326// 488//
327// RUNTIMEINFO 489// RuntimeInfo
328// 490//
329// 491//
330 492
331InterfaceInfo * RuntimeInfo::assignedInterface( void ) { 493QString RuntimeInfo::setState( NodeCollection * NC,
332 return netNode()->nextNode()->runtime()->assignedInterface(); 494 Action_t A,
333} 495 bool Force ) {
496 QString M;
497 RuntimeInfo * Deeper = nextNode();
498
499 if( Deeper ) {
500 // first go deeper
501 M = Deeper->setState( NC, A, Force );
502 if( ! M.isEmpty() )
503 return M;
504 }
334 505
335AsDevice * RuntimeInfo::device( void ) { 506 // set my own state
336 return netNode()->nextNode()->runtime()->device(); 507 Log (( "-> Act upon %s\n", netNode()->name() ));
508 M = setMyState( NC, A, Force );
509 Log (( " result %s\n", M.latin1() ));
510 return M;
337} 511}
diff --git a/noncore/settings/networksettings2/networksettings2/netnode.h b/noncore/settings/networksettings2/networksettings2/netnode.h
index d3d7b34..4626381 100644
--- a/noncore/settings/networksettings2/networksettings2/netnode.h
+++ b/noncore/settings/networksettings2/networksettings2/netnode.h
@@ -1,180 +1,195 @@
1#ifndef NETNODE_H 1#ifndef NETNODE_H
2#define NETNODE_H 2#define NETNODE_H
3 3
4#include <qtextstream.h> 4#include <qtextstream.h>
5#include <qlist.h> 5#include <qlist.h>
6#include <qdict.h> 6#include <qdict.h>
7#include <qpixmap.h> 7#include <qpixmap.h>
8#include <qstringlist.h> 8#include <qstringlist.h>
9#include <qobject.h> 9#include <qobject.h>
10#include <time.h> 10#include <time.h>
11 11
12#include <Utils.h> 12#include <Utils.h>
13#include <system.h>
13 14
14// difference feature interfaces 15// difference feature interfaces
15class AsDevice; 16class AsDevice;
16class AsLine; 17class AsLine;
17class AsConnection; 18class AsConnection;
18class AsFullSetup; 19class AsFullSetup;
19 20
20// needed for plugin creation function 21// needed for plugin creation function
21#include <qlist.h> 22#include <qlist.h>
22 23
23class ANetNode; 24class ANetNode;
24class ANetNodeInstance; 25class ANetNodeInstance;
25class NodeCollection; 26class NodeCollection;
26class QTextStream; 27class QTextStream;
27class RuntimeInfo; 28class RuntimeInfo;
28class InterfaceInfo; 29class InterfaceInfo;
30class NSResources;
29 31
30extern QString & deQuote( QString & X ); 32extern QString & deQuote( QString & X );
31extern QString quote( QString X ); 33extern QString quote( QString X );
32 34
33#include "systemfile.h" 35#include "systemfile.h"
34 36
35typedef enum State { 37typedef enum State {
36 // if we have not yet detected the state of the device 38 // if we have not yet detected the state of the device
37 Unchecked = 0, 39 Unchecked = 0,
38 // if we cannot determine the state 40 // if we cannot determine the state
39 Unknown = 1, 41 Unknown = 1,
40 // if connection cannot be established e.g. because 42 // if connection cannot be established e.g. because
41 // the hardware is not available 43 // the hardware is not available
42 Unavailable = 2, 44 Unavailable = 2,
43 // if the connection cannot be establishec but NOT 45 // if the connection cannot be establishec but NOT
44 // because it is physically impossible but because 46 // because it is physically impossible but because
45 // it has been disabled for FUNCTIONAL reasons 47 // it has been disabled for FUNCTIONAL reasons
46 Disabled = 3, 48 Disabled = 3,
47 // if connection is available to is currently down 49 // if connection is available to is currently down
48 // i.e. the corresponding hardware is not activated 50 // i.e. the corresponding hardware is not activated
49 Off = 4, 51 Off = 4,
50 // if connection is available to be used (i.e. the 52 // if connection is available to be used (i.e. the
51 // devices if fully ready to be used 53 // devices if fully ready to be used
52 Available = 5, 54 Available = 5,
53 // if connection is being used 55 // if connection is being used
54 IsUp = 6 56 IsUp = 6
55} State_t; 57} State_t;
56 58
57typedef enum Action { 59typedef enum Action {
58 // to make the device unavailable functionally 60 // to make the device unavailable functionally -> to disabled
59 Disable = 0, 61 Disable = 0,
60 // to make the device available functionally 62 // to make the device available functionally -> to off
61 Enable = 1, 63 Enable = 1,
62 // bring the hardware up 64 // bring the hardware up -> to Available
63 Activate = 2, 65 Activate = 2,
64 // bring the hardware down 66 // bring the hardware down -> to off
65 Deactivate = 3, 67 Deactivate = 3,
66 // bring the connection up 68 // bring the connection up -> to IsUp
67 Up = 4, 69 Up = 4,
68 // bring the connection down 70 // bring the connection down -> to Available
69 Down = 5 71 Down = 5
70} Action_t; 72} Action_t;
71 73
72class ANetNode : public QObject{ 74class ANetNode : public QObject {
73 75
74public: 76public:
75 77
76 typedef QArray<ANetNode *> NetNodeList; 78 typedef QArray<ANetNode *> NetNodeList;
77 79
78 ANetNode( const char * Name ) : QObject( 0, Name ) {} 80 ANetNode( const char * Name ) : QObject( 0, Name ) {}
79 virtual ~ANetNode(){}; 81 virtual ~ANetNode(){};
80 82
81 // 83 //
82 // 84 //
83 // standard methods with sensible default 85 // standard methods with sensible default
84 // 86 //
85 // 87 //
86 88
87 inline int done( void ) 89 inline int done( void )
88 { return Done; } 90 { return Done; }
89 inline void setDone( int D ) 91 inline void setDone( int D )
90 { Done = D; } 92 { Done = D; }
91 93
92 // does this Node provide a Connection 94 // does this Node provide a Connection
93 inline bool isToplevel( void ) 95 bool isToplevel( void );
94 { return strcmp( provides(), "fullsetup") == 0 ; }
95 96
96 // set the value of an attribute 97 // set the value of an attribute
97 void setAttribute( QString & Attr, QString & Value ) ; 98 void setAttribute( QString & Attr, QString & Value ) ;
98 void saveAttributes( QTextStream & TS ) ; 99 void saveAttributes( QTextStream & TS ) ;
99 100
100 // compiled references to 'needed' NetNodes -> needs list 101 // compiled references to 'needed' NetNodes -> needs list
101 inline void setAlternatives( NetNodeList * Alt ) 102 inline void setAlternatives( NetNodeList * Alt )
102 { Alternatives = Alt; } 103 { Alternatives = Alt; }
103 inline NetNodeList & alternatives( void ) 104 inline NetNodeList & alternatives( void )
104 { return *Alternatives; } 105 { return *Alternatives; }
105 106
106 // 107 //
107 // 108 //
108 // Virtual methods with sensible default 109 // Virtual methods with sensible default
109 // 110 //
110 // 111 //
111 112
112 // do instances of this noce class have data for this file 113 // do instances of this noce class have data for this file
113 virtual bool hasDataForFile( const QString & ) 114 virtual bool hasDataForFile( SystemFile & )
114 { return 0; } 115 { return 0; }
115 116
117 // open proper file SF identified by S
118 // this method is called by NS2.
119 //
120 // overrule this ONLY if this proper file is a common file
121 // for all NNI of this node class and the data generated
122 // by each of the NNI needs to be put in one file
123 //
124 // if this is the case the file should be (re)opened in append
125 // return 0 if file cannot be opened
126 virtual bool openFile( SystemFile &SF,
127 ANetNodeInstance * NNI );
128
116 // generate instance independent stuff 129 // generate instance independent stuff
117 // 0 : data output, 1 no data, 2 error 130 // 0 : data output, 1 no data, 2 error
118 virtual short generateFile( const QString & , 131 virtual short generatePreamble( SystemFile & )
119 const QString & , 132 { return 1; }
120 QTextStream & , 133
121 long ) 134 // generate instance independent stuff
135 // 0 : data output, 1 no data, 2 error
136 virtual short generatePostamble( SystemFile & )
122 { return 1; } 137 { return 1; }
123 138
124 // generate instance dependent but profile common stuff 139 // generate instance dependent but instance common stuff
125 // 0 : data output, 1 no data, 2 error 140 // 0 : data output, 1 no data, 2 error
126 virtual short generateFile( const QString & , 141 virtual short generateFile( SystemFile &,
127 const QString & ,
128 QTextStream & ,
129 ANetNodeInstance * , 142 ANetNodeInstance * ,
130 long ) 143 long )
131 { return 1; } 144 { return 1; }
132 145
133
134 // generate NIC name based on instance nr 146 // generate NIC name based on instance nr
135 // only relevant if node instances are devices 147 // only relevant if node instances are devices
136 virtual QString genNic( long ) 148 virtual QString genNic( long )
137 { return QString(""); } 149 { return QString(""); }
138 150
139 // max number of instances for this node type 151 // max number of instances for this node type
140 // only relevant if node instances are devices 152 // only relevant if node instances are devices
141 virtual long instanceCount( void ) 153 virtual long instanceCount( void )
142 { return 1; } 154 { return 1; }
143 155
144 // return list of files that are specific for this node class 156 // return ID list for each file generated specially for
145 virtual QStringList * properFiles( void ) 157 // this node type
146 { return 0; } 158 virtual QStringList properFiles( void )
159 { return QStringList(); }
147 160
148 // 161 //
149 // 162 //
150 // pure virtual methods with sensible default 163 // pure virtual methods with sensible default
151 // 164 //
152 // 165 //
153 166
154 // pixmap needed for this NetNode 167 // pixmap needed for this NetNode
155 virtual const QString pixmapName() = 0; 168 virtual const QString pixmapName() = 0;
156 169
157 // description for this NetNode 170 // description for this NetNode
158 virtual const QString nodeDescription() = 0; 171 virtual const QString nodeDescription() = 0;
159 172
160 // create a blank instance of a net node 173 // create a blank instance of a net node
161 virtual ANetNodeInstance * createInstance( void ) = 0; 174 virtual ANetNodeInstance * createInstance( void ) = 0;
162 175
163 // return feature this NetNode provides 176 // return features this NetNode provides
164 virtual const char * provides( void ) = 0; 177 virtual const char ** provides( void ) = 0;
178
179 // return features this NetNode needs
165 virtual const char ** needs( void ) = 0; 180 virtual const char ** needs( void ) = 0;
166 181
167protected : 182protected :
168 183
169 NetNodeList * Alternatives; 184 NetNodeList * Alternatives;
170 185
171private : 186private :
172 187
173 virtual void setSpecificAttribute( QString & , QString & ) = 0; 188 virtual void setSpecificAttribute( QString & , QString & ) = 0;
174 virtual void saveSpecificAttribute( QTextStream & ) = 0; 189 virtual void saveSpecificAttribute( QTextStream & ) = 0;
175 int Done; 190 int Done;
176 191
177}; 192};
178 193
179class ANetNodeInstance : public QObject { 194class ANetNodeInstance : public QObject {
180 195
@@ -211,78 +226,74 @@ public:
211 // return true if node isntance is NEW and not loaded 226 // return true if node isntance is NEW and not loaded
212 inline void setNew( bool IsN ) 227 inline void setNew( bool IsN )
213 { IsNew = IsN; } 228 { IsNew = IsN; }
214 inline bool isNew( void ) 229 inline bool isNew( void )
215 { return IsNew; } 230 { return IsNew; }
216 231
217 // return description for this instance 232 // return description for this instance
218 inline QString & description( void ) 233 inline QString & description( void )
219 { return Description; } 234 { return Description; }
220 inline void setDescription( const QString & S ) 235 inline void setDescription( const QString & S )
221 { Description = S; } 236 { Description = S; }
222 237
223 // pixmap for this instance -> from NetNode 238 // pixmap for this instance -> from NetNode
224 inline const QString pixmapName( void ) 239 inline const QString pixmapName( void )
225 { return NodeType->pixmapName(); } 240 { return NodeType->pixmapName(); }
226 241
227 inline const char * provides( void ) 242 inline const char ** provides( void )
228 { return NodeType->provides(); } 243 { return NodeType->provides(); }
229 244
230 inline const char ** needs( void ) 245 inline const char ** needs( void )
231 { return NodeType->needs(); } 246 { return NodeType->needs(); }
232 247
233 inline void setConnection( NodeCollection * NC ) 248 inline void setConnection( NodeCollection * NC )
234 { Connection = NC; } 249 { Connection = NC; }
235 inline NodeCollection * connection( void ) 250 inline NodeCollection * connection( void )
236 { return Connection; } 251 { return Connection; }
237 252
238 // 253 //
239 // 254 //
240 // Virtual methods with sensible defaults 255 // Virtual methods with sensible defaults
241 // 256 //
242 // 257 //
243 258
244 259
245 260
246 // open proper file identified by S 261 // open proper file identified by S
247 virtual QFile * openFile( const QString & ) 262 virtual bool openFile( SystemFile & )
248 { return 0; } 263 { return 0; }
249 264
250 // check if this node (or sub nodes) have data for this file 265 // check if this node (or sub nodes) have data for this file
251 virtual bool hasDataForFile( const QString & S ) 266 virtual bool hasDataForFile( SystemFile & S )
252 { return nodeClass()->hasDataForFile( S ); } 267 { return nodeClass()->hasDataForFile( S ); }
253 268
254 // generate code specific for this node but embedded 269 // generate code specific for this node but embedded
255 // in the section of the parent 270 // in the section of the parent
256 // this is called within the code of the parent 271 // this is called within the code of the parent
257 virtual short generateFileEmbedded( const QString & ID, 272 virtual short generateFileEmbedded( SystemFile & SF,
258 const QString & Path,
259 QTextStream & TS,
260 long DevNr ) 273 long DevNr )
261 { ANetNodeInstance * NNI = nextNode(); 274 { ANetNodeInstance * NNI = nextNode();
262 return (NNI) ? NNI->generateFileEmbedded( ID, Path, TS, DevNr ) : 1; 275 return (NNI) ? NNI->generateFileEmbedded( SF, DevNr ) : 1;
263 } 276 }
264 277
265 // generate code specific for this node 278 // generate code specific for this node
266 // (or find the first node that does) 279 // (or find the first node that does)
267 virtual short generateFile( const QString & ID, 280 virtual short generateFile( SystemFile & SF,
268 const QString & Path,
269 QTextStream & TS,
270 long DevNr ) 281 long DevNr )
271 { ANetNodeInstance * NNI = nextNode(); 282 { ANetNodeInstance * NNI = nextNode();
272 return (NNI) ? NNI->generateFile( ID, Path, TS, DevNr ) : 1; 283 return (NNI) ? NNI->generateFile( SF, DevNr ) : 1;
273 } 284 }
274 285
275 // return true if this node instance is triggered by this trigger 286 // return true if this node instance is triggered by this trigger
276 // could be delegated to deeper instances 287 // could be delegated to deeper instances
277 virtual bool triggeredBy( const QString & ) 288 virtual bool triggeredBy( const QString & )
278 { return 0; } 289 { return 0; }
279 290
280 // 291 //
281 // 292 //
282 // Pure virtual functions 293 // Pure virtual functions
283 // 294 //
284 // 295 //
285 296
286 // return runtime information for this node 297 // return runtime information for this node
287 virtual RuntimeInfo * runtime( void ) = 0; 298 virtual RuntimeInfo * runtime( void ) = 0;
288 299
@@ -310,67 +321,157 @@ protected :
310 bool IsModified; 321 bool IsModified;
311 bool IsNew; 322 bool IsNew;
312 int Done; 323 int Done;
313 324
314 static long InstanceCounter; 325 static long InstanceCounter;
315}; 326};
316 327
317class RuntimeInfo : public QObject { 328class RuntimeInfo : public QObject {
318 329
319 Q_OBJECT 330 Q_OBJECT
320 331
321public : 332public :
322 333
323 RuntimeInfo( ANetNodeInstance * TheNNI ) 334 RuntimeInfo( ANetNodeInstance * TheNNI )
324 { NNI = TheNNI; } 335 { NNI = TheNNI; }
325 336
326 // downcast implemented by specify runtime classes 337 //
327 virtual AsDevice * asDevice( void ) 338 //
328 { return 0; } 339 // methods to be overloaded by connection capable
329 virtual AsConnection * asConnection( void ) 340 // runtimes
330 { return 0; } 341 //
331 virtual AsLine * asLine( void ) 342 //
332 { return 0; } 343
333 virtual AsFullSetup * asFullSetup( void ) 344
334 { return 0; } 345 //
346 //
347 // methods to be overloaded by device capable
348 // runtimes
349 //
350 //
335 351
336 // does this node handles this interface e.g.eth0 352 // does this node handles this interface e.g.eth0
337 // recurse deeper if this node cannot answer that question 353 // recurse deeper if this node cannot answer that question
338 virtual bool handlesInterface( const QString & ) 354 virtual bool handlesInterface( const QString & S ) {
339 { return 0; } 355 RuntimeInfo * RI = device();
340 virtual bool handlesInterface( const InterfaceInfo & ) 356 if( RI ) {
341 { return 0; } 357 return RI->handlesInterface( S );
342 virtual InterfaceInfo * assignedInterface( void ); 358 }
343 virtual AsDevice * device( void ); 359 return 0;
344 360 }
345 ANetNodeInstance * netNode() 361 bool handlesInterface( const InterfaceInfo & I ) {
362 RuntimeInfo * RI = device();
363 if( RI ) {
364 return RI->handlesInterface( I );
365 }
366 return 0;
367 }
368
369 //
370 //
371 // methods to be overloaded by full setup capable
372 // runtimes
373 //
374 //
375
376 // return description for this full setup
377 virtual const QString & description( void ) {
378 return fullSetup()->description( );
379 }
380 // return triggers that should fire when this
381 // setup is brought up
382 virtual const QStringList & triggers( void ) {
383 return fullSetup()->triggers( );
384 }
385
386 //
387 //
388 // methods to be overloaded by line capable
389 // runtimes
390 //
391 //
392
393 // return the device file ('/dev/xxx') created
394 // by this line capable runtime
395 virtual QString deviceFile( void ) {
396 RuntimeInfo * RI = line();
397 if( RI ) {
398 return RI->deviceFile();
399 }
400 return QString();
401 }
402
403 //
404 //
405 // runtime interface
406 //
407 //
408
409 // return the node that offers device capability
410 virtual RuntimeInfo * device( void )
411 { RuntimeInfo * RI = nextNode();
412 return (RI) ? RI->device() : 0;
413 }
414
415 // return the node that offers connection capability
416 virtual RuntimeInfo * connection( void )
417 { RuntimeInfo * RI = nextNode();
418 return (RI) ? RI->connection() : 0;
419 }
420
421 // return the node that offers line capability
422 virtual RuntimeInfo * line( void )
423 { RuntimeInfo * RI = nextNode();
424 return (RI) ? RI->line() : 0;
425 }
426
427 // return the node that offers full setup capability
428 virtual RuntimeInfo * fullSetup( void )
429 { RuntimeInfo * RI = nextNode();
430 return (RI) ? RI->fullSetup() : 0;
431 }
432
433 inline ANetNodeInstance * netNode()
346 { return NNI; } 434 { return NNI; }
347 NodeCollection * connection() 435
436 inline NodeCollection * nodeCollection()
348 { return NNI->connection(); } 437 { return NNI->connection(); }
349 438
350 virtual void detectState( NodeCollection * NC ) = 0; 439 virtual State_t detectState( void ) = 0;
351 virtual bool setState( NodeCollection * NC, Action_t A, bool Force = 0 ) = 0; 440 // public API to set the state
352 virtual bool canSetState( State_t Curr, Action_t A ) = 0; 441 virtual QString setState( NodeCollection * NC,
442 Action_t A,
443 bool Force = 0 );
444
445 inline RuntimeInfo * nextNode( void ) {
446 ANetNodeInstance * NNI = netNode()->nextNode();
447 return (NNI) ? NNI->runtime() : 0;
448 }
353 449
354signals : 450signals :
355 451
356 // sent by device if state changes 452 // sent by device if state changes
357 void stateChanged( State_t S, ANetNodeInstance * NNI ); 453 void stateChanged( State_t S, ANetNodeInstance * NNI );
358 454
359protected : 455protected :
360 456
457 // set state of this node (private API)
458 virtual QString setMyState( NodeCollection * NC,
459 Action_t A,
460 bool Force = 0 ) = 0;
461
361 // connection this runtime info belongs to 462 // connection this runtime info belongs to
362 ANetNodeInstance * NNI; 463 ANetNodeInstance * NNI;
363}; 464};
364 465
365class NodeCollection : public QList<ANetNodeInstance> { 466class NodeCollection : public QList<ANetNodeInstance> {
366 467
367public : 468public :
368 469
369 NodeCollection( void ); 470 NodeCollection( void );
370 NodeCollection( QTextStream & TS ); 471 NodeCollection( QTextStream & TS );
371 ~NodeCollection( void ); 472 ~NodeCollection( void );
372 473
373 inline int done( void ) 474 inline int done( void )
374 { return Done; } 475 { return Done; }
375 inline void setDone( int D ) 476 inline void setDone( int D )
376 { Done = D; } 477 { Done = D; }
@@ -379,116 +480,117 @@ public :
379 { return Number; } 480 { return Number; }
380 inline void setNumber( int i ) 481 inline void setNumber( int i )
381 { Number = i; } 482 { Number = i; }
382 inline bool isNew( void ) 483 inline bool isNew( void )
383 { return IsNew; } 484 { return IsNew; }
384 inline void setNew( bool N ) 485 inline void setNew( bool N )
385 { IsNew = N ; } 486 { IsNew = N ; }
386 inline bool isModified( void ) 487 inline bool isModified( void )
387 { return IsModified; } 488 { return IsModified; }
388 inline void setModified( bool N ) 489 inline void setModified( bool N )
389 { IsModified = N ; } 490 { IsModified = N ; }
390 491
391 inline bool handlesInterface( const QString & S ) { 492 inline bool handlesInterface( const QString & S ) {
392 return getToplevel()->runtime()->handlesInterface( S ); 493 return getToplevel()->runtime()->handlesInterface( S );
393 } 494 }
394 495
496 // return the interface in the OS that is assigned to
497 // this device
395 inline InterfaceInfo * assignedInterface( void ) { 498 inline InterfaceInfo * assignedInterface( void ) {
396 return getToplevel()->runtime()->assignedInterface(); 499 return AssignedInterface;
397 } 500 }
398 501
399 inline AsDevice * device() { 502 // assign the interface to this device
503 inline void assignInterface( InterfaceInfo * NI ) {
504 if( NI == 0 ) {
505 if( AssignedInterface ) {
506 AssignedInterface->assignConnection( 0 );
507 }
508 }
509 AssignedInterface = NI;
510 if( AssignedInterface ) {
511 AssignedInterface->assignConnection( this );
512 }
513 }
514
515 inline RuntimeInfo * device() {
400 return getToplevel()->runtime()->device(); 516 return getToplevel()->runtime()->device();
401 } 517 }
402 518
403 bool triggersVPN(); 519 const QStringList & triggers();
404 520
405 inline State_t state( bool Update = 0 ) 521 State_t state( bool Update = 0 );
406 { Log(( "%s state %d(=%d?)\n", Name.latin1(), CurrentState,
407 Unchecked ));
408 if( CurrentState == Unchecked || Update ) {
409 Log(( "TL %p TLR %p\n",
410 getToplevel(),
411 getToplevel()->runtime() ));
412 // need to get current state
413 getToplevel()->runtime()->detectState( this );
414 }
415 return CurrentState;
416 }
417 522
418 // get the ixmap for this device 523 // get the ixmap for this device
419 QPixmap devicePixmap( void ); 524 QPixmap devicePixmap( void );
420 QPixmap statePixmap( State_t S ); 525 QPixmap statePixmap( State_t S );
421 inline QPixmap statePixmap( bool Update = 0 ) 526 inline QPixmap statePixmap( bool Update = 0 )
422 { return statePixmap( state(Update) ); } 527 { return statePixmap( state(Update) ); }
423 QString stateName( State_t ); 528 QString stateName( State_t );
424 inline QString stateName( bool Update = 0 ) 529 inline QString stateName( bool Update = 0 )
425 { return stateName( state(Update) ); } 530 { return stateName( state(Update) ); }
426 531
427 inline bool setState( Action_t A, bool Force =0 ) 532 QString setState( Action_t A, bool Force = 0 );
428 { return getToplevel()->runtime()->setState( this, A, Force ); }
429 inline bool canSetState( Action_t A )
430 { return getToplevel()->runtime()->canSetState( CurrentState, A ); }
431 533
432 void save( QTextStream & TS ); 534 void save( QTextStream & TS );
433 535
434 void append( ANetNodeInstance * NNI ); 536 void append( ANetNodeInstance * NNI );
435 537
436 // makes sure that all items in the connection point to 538 // makes sure that all items in the connection point to
437 // that connectoin 539 // that connectoin
438 void reassign( void ); 540 void reassign( void );
439 541
440 ANetNodeInstance * getToplevel( void ); 542 ANetNodeInstance * getToplevel( void );
441 ANetNodeInstance * findNext( ANetNodeInstance * NNI ); 543 ANetNodeInstance * findNext( ANetNodeInstance * NNI );
442 ANetNodeInstance * findByName( const QString & S ); 544 ANetNodeInstance * findByName( const QString & S );
443 545
444 inline const QString & name() 546 inline const QString & name()
445 { return Name; } 547 { return Name; }
446 548
447 const QString & description( void ); 549 const QString & description( void );
448 550
449 inline void setName( const QString & N) 551 inline void setName( const QString & N)
450 { Name = N; } 552 { Name = N; }
451 553
452 inline State_t currentState( void ) 554 inline State_t currentState( void )
453 { return CurrentState; } 555 { return CurrentState; }
454 inline void setCurrentState( State_t S ) 556 inline void setCurrentState( State_t S )
455 { CurrentState = S; } 557 { CurrentState = S; }
456 558
457 // return TRUE if this node can have data to be inserted in 559 // return TRUE if this node can have data to be inserted in
458 // file identified by S 560 // file identified by S
459 bool hasDataForFile( const QString & S ); 561 bool hasDataForFile( SystemFile & S );
460 ANetNodeInstance * firstWithDataForFile( const QString & S ); 562 ANetNodeInstance * firstWithDataForFile( SystemFile & );
461 563
462 // generate items for this file -> toplevel call 564 // generate items for this file -> toplevel call
463 short generateFile( const QString & FID, // identification of file 565 short generateFile( SystemFile & SF,
464 const QString & FName, // effective filename of file
465 QTextStream & TS, // stream to file
466 long DN // device number 566 long DN // device number
467 ) 567 )
468 { return getToplevel()->generateFile( FID, FName, TS, DN ); } 568 { return getToplevel()->generateFile( SF, DN ); }
469 569
470 bool triggeredBy( const QString & Trigger ) 570 bool triggeredBy( const QString & Trigger )
471 { return getToplevel()->triggeredBy( Trigger ); } 571 { return getToplevel()->triggeredBy( Trigger ); }
472 572
473private : 573private :
474 574
475 int compareItems ( QCollection::Item item1, 575 int compareItems ( QCollection::Item item1,
476 QCollection::Item item2 ); 576 QCollection::Item item2 );
477 577
478 long Number; 578 long Number;
479 579
480 // state of this connection 580 // state of this connection
481 State_t CurrentState; 581 State_t CurrentState;
482 582
483 QString Name; 583 QString Name;
484 // true if this collection was just created (and not 584 // true if this collection was just created (and not
485 // loaded from file 585 // loaded from file
486 bool IsNew; 586 bool IsNew;
487 // index in listbox 587 // index in listbox
488 int Index; 588 int Index;
489 bool IsModified; 589 bool IsModified;
490 int Done; 590 int Done;
491 591
592 InterfaceInfo * AssignedInterface;
593
492}; 594};
493 595
494#endif 596#endif
diff --git a/noncore/settings/networksettings2/networksettings2/networksettings2.pro b/noncore/settings/networksettings2/networksettings2/networksettings2.pro
index d1e42b7..f2ba9df 100644
--- a/noncore/settings/networksettings2/networksettings2/networksettings2.pro
+++ b/noncore/settings/networksettings2/networksettings2/networksettings2.pro
@@ -1,28 +1,24 @@
1TEMPLATE = lib 1TEMPLATE = lib
2CONFIG += qt warn_on release 2CONFIG += qt warn_on release
3 #CONFIG += qt warn_on debug 3 #CONFIG += qt warn_on debug
4 DESTDIR = $(OPIEDIR)/lib$(PROJMAK) 4 DESTDIR = $(OPIEDIR)/lib$(PROJMAK)
5 HEADERS = netnode.h \ 5 HEADERS = netnode.h \
6 resources.h \ 6 resources.h \
7 system.h \ 7 system.h \
8 asline.h \
9 GUIUtils.h \ 8 GUIUtils.h \
10 asconnection.h \
11 asfullsetup.h \
12 systemfile.h \ 9 systemfile.h \
13 wextensions.h \ 10 wextensions.h
14 asdevice.h
15 SOURCES = netnode.cpp \ 11 SOURCES = netnode.cpp \
16 GUIUtils.cpp \ 12 GUIUtils.cpp \
17 system.cpp \ 13 system.cpp \
18 systemfile.cpp \ 14 systemfile.cpp \
19 wextensions.cpp \ 15 wextensions.cpp \
20 resources.cpp 16 resources.cpp
21 INCLUDEPATH+= $(OPIEDIR)/include ../networksettings2 17 INCLUDEPATH+= $(OPIEDIR)/include ../networksettings2
22 DEPENDPATH+= $(OPIEDIR)/include 18 DEPENDPATH+= $(OPIEDIR)/include
23LIBS += -lqpe -lopiecore2 -lopieui2 19LIBS += -lqpe -lopiecore2 -lopieui2
24 INTERFACES= 20 INTERFACES=
25 TARGET = networksettings2 21 TARGET = networksettings2
26 VERSION = 1.0.0 22 VERSION = 1.0.0
27 23
28include( $(OPIEDIR)/include.pro ) 24include( $(OPIEDIR)/include.pro )
diff --git a/noncore/settings/networksettings2/networksettings2/resources.cpp b/noncore/settings/networksettings2/networksettings2/resources.cpp
index 2f17693..8b3b4fe 100644
--- a/noncore/settings/networksettings2/networksettings2/resources.cpp
+++ b/noncore/settings/networksettings2/networksettings2/resources.cpp
@@ -32,75 +32,83 @@ TheNSResources::TheNSResources( void ) : NodeTypeNameMap(),
32 { const char ** NeedsRun; 32 { const char ** NeedsRun;
33 QDictIterator<NetNode_t> OuterIt( AllNodeTypes ); 33 QDictIterator<NetNode_t> OuterIt( AllNodeTypes );
34 bool Done; 34 bool Done;
35 35
36 for ( ; OuterIt.current(); ++OuterIt ) { 36 for ( ; OuterIt.current(); ++OuterIt ) {
37 // find needs list 37 // find needs list
38 ANetNode::NetNodeList * NNLP = new ANetNode::NetNodeList; 38 ANetNode::NetNodeList * NNLP = new ANetNode::NetNodeList;
39 ANetNode::NetNodeList & NNL = *(NNLP); 39 ANetNode::NetNodeList & NNL = *(NNLP);
40 40
41 // must iterate this way to avoid duplication pointers 41 // must iterate this way to avoid duplication pointers
42 for ( QDictIterator<NetNode_t> InnerIt( AllNodeTypes ); 42 for ( QDictIterator<NetNode_t> InnerIt( AllNodeTypes );
43 InnerIt.current(); ++InnerIt ) { 43 InnerIt.current(); ++InnerIt ) {
44 if( InnerIt.current() == OuterIt.current() ) 44 if( InnerIt.current() == OuterIt.current() )
45 // avoid recursive 45 // avoid recursive
46 continue; 46 continue;
47 47
48 const char * Provides = InnerIt.current()->NetNode->provides(); 48 const char ** Provides = InnerIt.current()->NetNode->provides();
49 NeedsRun = OuterIt.current()->NetNode->needs(); 49 NeedsRun = OuterIt.current()->NetNode->needs();
50
50 for( ; *NeedsRun; NeedsRun ++ ) { 51 for( ; *NeedsRun; NeedsRun ++ ) {
51 if( strcmp( Provides, *NeedsRun ) == 0 ) { 52 const char ** PRun;
52 // inner provides what outer needs 53 PRun = Provides;
53 NNL.resize( NNL.size() + 1 ); 54 for( ; *PRun; PRun ++ ) {
54 NNL[NNL.size()-1] = InnerIt.current()->NetNode; 55 if( strcmp( *PRun, *NeedsRun ) == 0 ) {
55 Done = 1; // break from 2 loops 56 // inner provides what outer needs
56 break; 57 NNL.resize( NNL.size() + 1 );
58 NNL[NNL.size()-1] = InnerIt.current()->NetNode;
59 Done = 1; // break from 2 loops
60 break;
61 }
57 } 62 }
58 } 63 }
59 } 64 }
60 OuterIt.current()->NetNode->setAlternatives( NNLP ); 65 OuterIt.current()->NetNode->setAlternatives( NNLP );
61 } 66 }
62 } 67 }
63 68
64 // define Node types to Description map 69 // define built in Node types to Description map
65 NodeTypeNameMap.insert( "device", tr( "Network Device" ) ); 70 addNodeType( "device", tr( "Network Device" ),
66 NodeTypeNameMap.insert( "line", tr( "Character device" ) ); 71 tr( "<p>Devices that can handle IP packets</p>" ) );
67 NodeTypeNameMap.insert( "connection", tr( "IP Connection" ) ); 72 addNodeType( "line", tr( "Character device" ),
68 NodeTypeNameMap.insert( "fullsetup", tr( "Connection Profile" ) ); 73 tr( "<p>Devices that can handle single bytes</p>" ) );
69 74 addNodeType( "connection", tr( "IP Connection" ),
70 NodeTypeDescriptionMap.insert( "device", 75 tr( "<p>Nodes that provide working IP connections</p>" ) );
71 tr( "<p>Devices that can handle IP packets</p>" ) ); 76 addNodeType( "fullsetup", tr( "Connection Profile" ),
72 NodeTypeDescriptionMap.insert( "line", 77 tr( "<p>Fully configured connection profile</p>" ) );
73 tr( "<p>Devices that can handle single bytes</p>" ) ); 78 addNodeType( "GPRS", tr( "Connection to GPRS device" ),
74 NodeTypeDescriptionMap.insert( "connection", 79 tr( "<p>Connection to a GPRS capable device</p>" ) );
75 tr( "<p>Nodes that provide working IP connections</p>" ) );
76 NodeTypeDescriptionMap.insert( "fullsetup",
77 tr( "<p>Fully configured connection profile</p>" ) );
78
79 // define system files
80 addSystemFile( "interfaces", "/tmp/interfaces", 1 );
81 80
82 // get access to the system 81 // get access to the system
83 TheSystem = new System(); 82 TheSystem = new System();
84 83
85} 84}
86 85
87TheNSResources::~TheNSResources( void ) { 86TheNSResources::~TheNSResources( void ) {
88 delete TheSystem; 87 delete TheSystem;
89} 88}
90 89
90void TheNSResources::addNodeType( const QString & ID,
91 const QString & Name,
92 const QString & Descr ) {
93 if( NodeTypeNameMap[ID].isEmpty() ) {
94 NodeTypeNameMap.insert( ID, Name );
95 NodeTypeDescriptionMap.insert( ID, Descr );
96 }
97}
98
91void TheNSResources::addSystemFile( const QString & ID, 99void TheNSResources::addSystemFile( const QString & ID,
92 const QString & P, 100 const QString & P,
93 bool KDI ) { 101 bool KDI ) {
94 if( ! SystemFiles.find( ID ) ) { 102 if( ! SystemFiles.find( ID ) ) {
95 // new system file 103 // new system file
96 SystemFiles.insert( ID, new SystemFile( ID, P, KDI ) ); 104 SystemFiles.insert( ID, new SystemFile( ID, P, KDI ) );
97 } // else existed 105 } // else existed
98} 106}
99 107
100void TheNSResources::busy( bool ) { 108void TheNSResources::busy( bool ) {
101/* 109/*
102 if( B ) { 110 if( B ) {
103 ShowWait->show(); 111 ShowWait->show();
104 qApp->process 112 qApp->process
105 } else { 113 } else {
106 ShowWait->hide(); 114 ShowWait->hide();
@@ -207,34 +215,36 @@ bool TheNSResources::loadNetNode(
207 NN = new NetNode_t; 215 NN = new NetNode_t;
208 NN->NetNode = NNP; 216 NN->NetNode = NNP;
209 NN->TheLibrary = lib; 217 NN->TheLibrary = lib;
210 NN->NodeCountInLib = PNN.count(); 218 NN->NodeCountInLib = PNN.count();
211 219
212 // store mapping 220 // store mapping
213 AllNodeTypes.insert( NN->NetNode->name(), NN ); 221 AllNodeTypes.insert( NN->NetNode->name(), NN );
214 } 222 }
215 223
216 return 1; 224 return 1;
217} 225}
218 226
219QPixmap TheNSResources::getPixmap( const QString & QS ) { 227QPixmap TheNSResources::getPixmap( const QString & QS ) {
220 QPixmap P; 228 QPixmap P;
221 QString S("networksettings2/"); 229 QString S("networksettings2/");
222 S += QS; 230 S += QS;
223 Log(("%s\n", S.latin1() ));
224 P = Resource::loadPixmap( S ); 231 P = Resource::loadPixmap( S );
232 if( P.isNull() ) {
233 Log(( "Cannot load %s\n", S.latin1() ));
234 }
225 return ( P.isNull() ) ? QPixmap() : P; 235 return ( P.isNull() ) ? QPixmap() : P;
226} 236}
227 237
228QString TheNSResources::tr( const char * s ) { 238QString TheNSResources::tr( const char * s ) {
229 return qApp->translate( "resource", s ); 239 return qApp->translate( "resource", s );
230} 240}
231 241
232const QString & TheNSResources::netNode2Name( const char * s ) { 242const QString & TheNSResources::netNode2Name( const char * s ) {
233 return NodeTypeNameMap[s]; 243 return NodeTypeNameMap[s];
234} 244}
235 245
236const QString & TheNSResources::netNode2Description( const char * s ) { 246const QString & TheNSResources::netNode2Description( const char * s ) {
237 return NodeTypeDescriptionMap[s]; 247 return NodeTypeDescriptionMap[s];
238} 248}
239 249
240void TheNSResources::addConnection( NodeCollection * NC ) { 250void TheNSResources::addConnection( NodeCollection * NC ) {
@@ -256,32 +266,42 @@ void TheNSResources::removeConnection( const QString & N ) {
256 NodeCollection * NC = findConnection( N ); 266 NodeCollection * NC = findConnection( N );
257 if( ! NC ) 267 if( ! NC )
258 return; 268 return;
259 269
260 // delete netnodes in this connection 270 // delete netnodes in this connection
261 ANetNodeInstance * NNI; 271 ANetNodeInstance * NNI;
262 for( NNI = NC->first(); NNI != 0; NNI = NC->next() ) { 272 for( NNI = NC->first(); NNI != 0; NNI = NC->next() ) {
263 removeNodeInstance( NNI->name() ); 273 removeNodeInstance( NNI->name() );
264 } 274 }
265 ConnectionsMap.remove( N ); 275 ConnectionsMap.remove( N );
266} 276}
267 277
268NodeCollection * TheNSResources::findConnection( const QString & S ) { 278NodeCollection * TheNSResources::findConnection( const QString & S ) {
269 return ConnectionsMap[ S ]; 279 return ConnectionsMap[ S ];
270} 280}
271 281
282NodeCollection * TheNSResources::getConnection( int nr ) {
283 for( QDictIterator<NodeCollection> it(ConnectionsMap);
284 it.current();
285 ++it ) {
286 if( it.current()->number() == nr ) {
287 return it.current();
288 }
289 }
290 return 0;
291}
272/* 292/*
273void TheNSResources::renumberConnections( void ) { 293void TheNSResources::renumberConnections( void ) {
274 Name2Connection_t & M = NSResources->connections(); 294 Name2Connection_t & M = NSResources->connections();
275 NodeCollection * NC; 295 NodeCollection * NC;
276 296
277 // for all connections 297 // for all connections
278 NodeCollection::resetMaxNr(); 298 NodeCollection::resetMaxNr();
279 for( QDictIterator<NodeCollection> it(M); 299 for( QDictIterator<NodeCollection> it(M);
280 it.current(); 300 it.current();
281 ++it ) { 301 ++it ) {
282 NC = it.current(); 302 NC = it.current();
283 NC->setNumber( NC->maxConnectionNumber()+1 ); 303 NC->setNumber( NC->maxConnectionNumber()+1 );
284 NC->setModified( 1 ); 304 NC->setModified( 1 );
285 } 305 }
286} 306}
287*/ 307*/
diff --git a/noncore/settings/networksettings2/networksettings2/resources.h b/noncore/settings/networksettings2/networksettings2/resources.h
index 23b120e..634cd39 100644
--- a/noncore/settings/networksettings2/networksettings2/resources.h
+++ b/noncore/settings/networksettings2/networksettings2/resources.h
@@ -54,64 +54,70 @@ public :
54 54
55 System & system() 55 System & system()
56 { return *TheSystem; } 56 { return *TheSystem; }
57 57
58 int assignConnectionNumber(void); 58 int assignConnectionNumber(void);
59 QPixmap getPixmap( const QString & Name ); 59 QPixmap getPixmap( const QString & Name );
60 60
61 Name2NetNode_t & netNodes( void ) 61 Name2NetNode_t & netNodes( void )
62 { return AllNodeTypes; } 62 { return AllNodeTypes; }
63 bool netNodeExists( const QString & X ) 63 bool netNodeExists( const QString & X )
64 { return AllNodeTypes.find(X)!=0; } 64 { return AllNodeTypes.find(X)!=0; }
65 ANetNode * findNetNode( const QString & N ) 65 ANetNode * findNetNode( const QString & N )
66 { NetNode_t * NNT = AllNodeTypes.find(N); 66 { NetNode_t * NNT = AllNodeTypes.find(N);
67 return (NNT) ? NNT->NetNode : 0; 67 return (NNT) ? NNT->NetNode : 0;
68 } 68 }
69 69
70 // define new plugin (=node)
71 void addNodeType( const QString & ID,
72 const QString & LongName,
73 const QString & Description );
74
70 Name2SystemFile_t & systemFiles( void ) 75 Name2SystemFile_t & systemFiles( void )
71 { return SystemFiles; } 76 { return SystemFiles; }
72 void addSystemFile( const QString & ID, 77 void addSystemFile( const QString & ID,
73 const QString & P, 78 const QString & P,
74 bool KDI ); 79 bool KDI );
75 80
76 ANetNodeInstance * createNodeInstance( const QString & S ) 81 ANetNodeInstance * createNodeInstance( const QString & S )
77 { ANetNodeInstance * NNI = 0; 82 { ANetNodeInstance * NNI = 0;
78 NetNode_t * NNT = AllNodeTypes[S]; 83 NetNode_t * NNT = AllNodeTypes[S];
79 if( ! NNT ) { 84 if( ! NNT ) {
80 return 0; 85 return 0;
81 } 86 }
82 NNI = NNT->NetNode->createInstance(); 87 NNI = NNT->NetNode->createInstance();
83 NNI->initialize(); 88 NNI->initialize();
84 return NNI; 89 return NNI;
85 } 90 }
86 91
87 Name2Instance_t & netNodeInstances( void ) 92 Name2Instance_t & netNodeInstances( void )
88 { return AllNodes; } 93 { return AllNodes; }
89 void addNodeInstance( ANetNodeInstance * I ) 94 void addNodeInstance( ANetNodeInstance * I )
90 { AllNodes.insert( I->name(), I ); } 95 { AllNodes.insert( I->name(), I ); }
91 void removeNodeInstance( const QString & N ) 96 void removeNodeInstance( const QString & N )
92 { AllNodes.remove( N );} 97 { AllNodes.remove( N );}
93 ANetNodeInstance * findNodeInstance( const QString & S ) 98 ANetNodeInstance * findNodeInstance( const QString & S )
94 { return (AllNodes.find(S)!=0) ? AllNodes[S] : 0; } 99 { return (AllNodes.find(S)!=0) ? AllNodes[S] : 0; }
95 100
96 const QString & netNode2Name( const char * Type ); 101 const QString & netNode2Name( const char * Type );
97 const QString & netNode2Description( const char * Type ); 102 const QString & netNode2Description( const char * Type );
98 103
99 void addConnection( NodeCollection * NC ); 104 void addConnection( NodeCollection * NC );
100 void removeConnection( const QString & N ); 105 void removeConnection( const QString & N );
101 NodeCollection * findConnection( const QString & N ); 106 NodeCollection * findConnection( const QString & N );
107 NodeCollection * getConnection( int nr );
102 Name2Connection_t & connections( void ) 108 Name2Connection_t & connections( void )
103 { return ConnectionsMap; } 109 { return ConnectionsMap; }
104 110
105 inline bool userKnown( void ) 111 inline bool userKnown( void )
106 { return CurrentUser.known(); } 112 { return CurrentUser.known(); }
107 CurrentQPEUser & currentUser( void ) 113 CurrentQPEUser & currentUser( void )
108 { return CurrentUser; } 114 { return CurrentUser; }
109 115
110private : 116private :
111 117
112 void detectCurrentUser( void ); 118 void detectCurrentUser( void );
113 QString tr( const char * path ); 119 QString tr( const char * path );
114 void findAvailableNetNodes( const QString &path ); 120 void findAvailableNetNodes( const QString &path );
115 bool loadNetNode( 121 bool loadNetNode(
116 const QString &pluginFileName, 122 const QString &pluginFileName,
117 const QString &resolveString = "create_plugin"); 123 const QString &resolveString = "create_plugin");
diff --git a/noncore/settings/networksettings2/networksettings2/system.cpp b/noncore/settings/networksettings2/networksettings2/system.cpp
index 298bdc9..141484c 100644
--- a/noncore/settings/networksettings2/networksettings2/system.cpp
+++ b/noncore/settings/networksettings2/networksettings2/system.cpp
@@ -1,31 +1,33 @@
1#include <sys/types.h> 1#include <sys/types.h>
2#include <sys/wait.h> 2#include <sys/wait.h>
3 3
4#include <net/if.h> 4#include <net/if.h>
5#include <net/if_arp.h> 5#include <net/if_arp.h>
6#include <netinet/in.h> 6#include <netinet/in.h>
7#include <arpa/inet.h> 7#include <arpa/inet.h>
8#include <sys/ioctl.h> 8#include <sys/ioctl.h>
9#include <sys/socket.h> 9#include <sys/socket.h>
10#include <stdlib.h> 10#include <stdlib.h>
11#include <stdio.h> 11#include <stdio.h>
12#include <fcntl.h> 12#include <fcntl.h>
13#include <errno.h> 13#include <errno.h>
14#include <unistd.h> 14#include <unistd.h>
15 15
16#include <opie2/oprocess.h>
17
16#include <qdir.h> 18#include <qdir.h>
17#include <qregexp.h> 19#include <qregexp.h>
18#include <qstringlist.h> 20#include <qstringlist.h>
19#include <qfile.h> 21#include <qfile.h>
20#include <qtextstream.h> 22#include <qtextstream.h>
21#include <qapplication.h> 23#include <qapplication.h>
22 24
23#include "resources.h" 25#include "resources.h"
24#include "system.h" 26#include "system.h"
25 27
26#define PROCNETDEV "/proc/net/dev" 28#define PROCNETDEV "/proc/net/dev"
27 29
28#ifndef ARPHRD_IEEE80211 30#ifndef ARPHRD_IEEE80211
29#define ARPHRD_IEEE80211 801 31#define ARPHRD_IEEE80211 801
30#endif 32#endif
31 33
@@ -37,89 +39,144 @@ static char Dig2Hex[] = {
37}; 39};
38 40
39// get HIGH nibble of byte 41// get HIGH nibble of byte
40#define HN(x) Dig2Hex[(((x)&0xf0)>>4)] 42#define HN(x) Dig2Hex[(((x)&0xf0)>>4)]
41// get LOW nibble of byte 43// get LOW nibble of byte
42#define LN(x) Dig2Hex[((x)&0x0f)] 44#define LN(x) Dig2Hex[((x)&0x0f)]
43 45
44System::System( void ) : QObject(), ProbedInterfaces() { 46System::System( void ) : QObject(), ProbedInterfaces() {
45 probeInterfaces(); 47 probeInterfaces();
46} 48}
47 49
48System::~System( void ) { 50System::~System( void ) {
49 if( ProcDevNet ) 51 if( ProcDevNet )
50 delete ProcDevNet; 52 delete ProcDevNet;
51} 53}
52 54
53int System::runAsRoot( const QString & S ) { 55int System::runAsRoot( QStringList & S ) {
54 QString MyS = S;
55 char * usr = getenv("USER"); 56 char * usr = getenv("USER");
56 char ch;
57 57
58 if( S.isEmpty() ) { 58 if( S.count() == 0 ) {
59 // loophole to start shell 59 // loophole to start shell
60 return 8888; 60 return 8888;
61 } 61 }
62 if( usr == 0 || strcmp( usr, "root" ) ) { 62 if( usr == 0 || strcmp( usr, "root" ) ) {
63 // unknown or non-root user -> use SUDO 63 // unknown or non-root user -> use SUDO
64 MyS.prepend( "sudo " ); 64 S.prepend( "sudo" );
65 } 65 }
66 66
67 Log(("Executing %s\n", MyS.latin1() )); 67 if( getenv( "NS2TESTMODE" ) ) {
68 68 owarn << "TESTMODE !!! execute "
69 emit lineFromCommand( tr("Command : ") + MyS ); 69 << S.join( " ")
70 emit lineFromCommand( "---------------" ); 70 << oendl;
71 Log(( "Command : %s\n", MyS.latin1() ) ); 71 } else {
72 MyS += " 2>&1 "; 72 MyProcess * P = new MyProcess();
73 OutputOfCmd = popen( MyS.latin1(), "r" ) ; 73 emit processEvent( tr("Command : ") + S.join( " " ) );
74 if( ! OutputOfCmd ) { 74
75 // cannot fork 75 P->process() << S;
76 return 1; 76
77 connect( P,
78 SIGNAL( stdoutLine( const QString & ) ),
79 this,
80 SIGNAL( stdoutLine( const QString & ) ) );
81
82 connect( P,
83 SIGNAL( stderrLine( const QString & ) ),
84 this,
85 SIGNAL( stderrLine( const QString & ) ) );
86
87 connect( P,
88 SIGNAL(processExited(MyProcess*) ),
89 this, SLOT
90 (SLOT_ProcessExited(MyProcess*) ) );
91
92 Log(("Executing %s\n", S.join( " " ).latin1() ));
93
94 if( ! P->process().start( OProcess::DontCare,
95 OProcess::AllOutput ) ) {
96 owarn << "Error starting " << S << oendl;
97 delete P;
98 // error starting app
99 return 1;
100 }
101 owarn << "Started " << S << oendl;
77 } 102 }
78 103
79 // read all data 104 // all is fine
80 QString Line = ""; 105 return 0;
81 while( 1 ) { 106}
82 if( fread( &ch, 1, 1, OutputOfCmd ) < 1 ) 107
83 // eof 108int System::execAsUser( QStringList & SL ) {
84 break; 109 MyProcess * P = new MyProcess();
85 if( ch == '\n' || ch == '\r' ) { 110 CurrentQPEUser CU = NSResources->currentUser();
86 if( ! Line.isEmpty() ) { 111 char * usr = getenv("USER");
87 Log(( "read cmd output : **%s**\n", Line.latin1() ) ); 112
88 emit lineFromCommand( Line ); 113 if( strcmp( usr, "root" ) == 0 ) {
89 Line = ""; 114 // find user running qpe
90 qApp->processEvents(); 115 if( CU.UserName.isEmpty() ) {
116 // if we come here, the exec was not successfull
117 Log(("User not known \n" ));
118 return 0;
91 } 119 }
92 } else {
93 Line += ch;
94 } 120 }
95 }
96 121
97 if( ! Line.isEmpty() ) { 122 // now we are ready to exec the requested command
98 emit lineFromCommand( Line ); 123 setuid( CU.Uid );
99 Log(( "read cmd output : **%s**\n", Line.latin1() ) ); 124 setgid( CU.Gid );
100 }
101 Log(( "End of command\n", Line.latin1() ) );
102 125
103 if( pclose( OutputOfCmd ) < 0 ) { 126 for( unsigned int i = 0 ; i < CU.EnvList.count() ; i ++ ) {
104 // error in command 127 QString X;
105 return 3; 128 QStringList SL;
106 } 129 X = CU.EnvList[i];
130 SL = QStringList::split( "=", X );
131 P->process().setEnvironment( SL[0], SL[1] );
132 }
107 133
108 // all is fine 134 P->process() << SL;
109 return 0; 135
136 emit processEvent( tr("Command : ") + SL.join( " " ) );
137
138 Log(("Executing as user %s : %s\n",
139 CU.UserName.latin1(),
140 SL.join( " " ).latin1() ));
141
142 int rv = ( P->process().start( OProcess::DontCare,
143 OProcess::NoCommunication ) );
144 delete P;
145
146 if( rv ) {
147 // if we come here, the exec was not successfull
148 Log(("Could not exec : %d\n", errno ));
149 }
150
151 return rv;
152}
153
154void System::SLOT_ProcessExited( MyProcess * P ) {
155 QString R;
156
157 for( QValueListConstIterator<QCString> it = P->process().args().begin();
158 it != P->process().args().end();
159 ++it ) {
160 R += (*it);
161 R += " ";
162 }
163
164 R += "Returned with " + QString().setNum( P->process().exitStatus() );
165 emit processEvent( R );
166 delete P;
110} 167}
111 168
112void System::refreshStatistics( InterfaceInfo & I ) { 169void System::refreshStatistics( InterfaceInfo & I ) {
113 if( ! ProcDevNet ) { 170 if( ! ProcDevNet ) {
114 return; 171 return;
115 } 172 }
116 // cannot seek on dev 173 // cannot seek on dev
117 ProcDevNet->close(); 174 ProcDevNet->close();
118 ProcDevNet->open( IO_ReadOnly ); 175 ProcDevNet->open( IO_ReadOnly );
119 176
120 QString line; 177 QString line;
121 QTextStream procTs(ProcDevNet); 178 QTextStream procTs(ProcDevNet);
122 QStringList SL; 179 QStringList SL;
123 int loc = -1; 180 int loc = -1;
124 int version; 181 int version;
125 182
@@ -185,91 +242,105 @@ void System::refreshStatistics( InterfaceInfo & I ) {
185void System::probeInterfaces( void ) { 242void System::probeInterfaces( void ) {
186 243
187 // probe interfaces 244 // probe interfaces
188 int sockfd; 245 int sockfd;
189 // get list of all interfaces 246 // get list of all interfaces
190 struct ifreq ifrs; 247 struct ifreq ifrs;
191 InterfaceInfo * IFI; 248 InterfaceInfo * IFI;
192 249
193 // flag all as 'down' 250 // flag all as 'down'
194 for( QDictIterator<InterfaceInfo> it( ProbedInterfaces ); 251 for( QDictIterator<InterfaceInfo> it( ProbedInterfaces );
195 it.current(); 252 it.current();
196 ++it ) { 253 ++it ) {
197 it.current()->IsUp = 0; 254 it.current()->IsUp = 0;
198 } 255 }
199 256
200 sockfd = socket(PF_INET, SOCK_DGRAM, 0); 257 sockfd = socket(PF_INET, SOCK_DGRAM, 0);
201 if(sockfd == -1) 258 if(sockfd == -1) {
259 owarn << "Cannot open INET socket "
260 << errno
261 << " "
262 << strerror( errno )
263 << oendl;
202 return; 264 return;
265 }
203 266
204 // read interfaces from /proc/dev/net 267 // read interfaces from /proc/dev/net
205 // SIOCGIFCONF does not return ALL interfaces ???!? 268 // SIOCGIFCONF does not return ALL interfaces ???!?
206 ProcDevNet = new QFile(PROCNETDEV); 269 ProcDevNet = new QFile(PROCNETDEV);
207 if( ! ProcDevNet->open(IO_ReadOnly) ) { 270 if( ! ProcDevNet->open(IO_ReadOnly) ) {
271 owarn << "Cannot open "
272 << PROCNETDEV
273 << " "
274 << errno
275 << " "
276 << strerror( errno )
277 << oendl;
208 delete ProcDevNet; 278 delete ProcDevNet;
209 ProcDevNet =0; 279 ProcDevNet =0;
280 ::close( sockfd );
210 return; 281 return;
211 } 282 }
212 283
213 QString line; 284 QString line;
214 QString NicName; 285 QString NicName;
215 QTextStream procTs(ProcDevNet); 286 QTextStream procTs(ProcDevNet);
216 int loc = -1; 287 int loc = -1;
217 288
218 procTs.readLine(); // eat a line 289 procTs.readLine(); // eat a line
219 procTs.readLine(); // eat a line 290 procTs.readLine(); // eat a line
220 while((line = procTs.readLine().simplifyWhiteSpace()) != QString::null) { 291 while((line = procTs.readLine().simplifyWhiteSpace()) != QString::null) {
221 if((loc = line.find(":")) == -1) { 292 if((loc = line.find(":")) == -1) {
222 continue; 293 continue;
223 } 294 }
224 295
225 NicName = line.left(loc); 296 NicName = line.left(loc);
226 297
227 // set name for ioctl 298 // set name for ioctl
228 strcpy( ifrs.ifr_name, NicName.latin1() ); 299 strcpy( ifrs.ifr_name, NicName.latin1() );
229 300
230 if ( ! ( IFI = ProbedInterfaces.find( NicName ) ) ) { 301 if ( ! ( IFI = ProbedInterfaces.find( NicName ) ) ) {
231 // new nic 302 // new nic
232 Log(("NEWNIC %s\n", NicName.latin1())); 303 Log(("New NIC found : %s\n", NicName.latin1()));
233 IFI = new InterfaceInfo; 304 IFI = new InterfaceInfo;
234 IFI->Name = line.left(loc); 305 IFI->Name = line.left(loc);
235 IFI->NetNode = 0; 306 IFI->Collection = 0;
236 ProbedInterfaces.insert( IFI->Name, IFI ); 307 ProbedInterfaces.insert( IFI->Name, IFI );
237 308
238 // get dynamic info 309 // get dynamic info
239 if( ioctl(sockfd, SIOCGIFFLAGS, &ifrs) >= 0 ) { 310 if( ioctl(sockfd, SIOCGIFFLAGS, &ifrs) >= 0 ) {
240 IFI->IsPointToPoint = ((ifrs.ifr_flags & IFF_POINTOPOINT) == IFF_POINTOPOINT); 311 IFI->IsPointToPoint = ((ifrs.ifr_flags & IFF_POINTOPOINT) == IFF_POINTOPOINT);
241 } else { 312 } else {
242 IFI->IsPointToPoint = 0; 313 IFI->IsPointToPoint = 0;
243 } 314 }
244 315
245 // settings that never change 316 // settings that never change
246 IFI->DstAddress = ""; 317 IFI->DstAddress = "";
247 318
248 if( IFI->IsPointToPoint ) { 319 if( IFI->IsPointToPoint ) {
249 if( ioctl(sockfd, SIOCGIFDSTADDR, &ifrs) >= 0 ) { 320 if( ioctl(sockfd, SIOCGIFDSTADDR, &ifrs) >= 0 ) {
250 IFI->DstAddress = 321 IFI->DstAddress =
251 inet_ntoa(((struct sockaddr_in*)&ifrs.ifr_dstaddr)->sin_addr); 322 inet_ntoa(((struct sockaddr_in*)&ifrs.ifr_dstaddr)->sin_addr);
252 } 323 }
253 } 324 }
254 325
255 IFI->CardType = 999999; 326 IFI->CardType = 999999;
256 IFI->MACAddress = ""; 327 IFI->MACAddress = "";
257 328
258 if( ioctl(sockfd, SIOCGIFHWADDR, &ifrs) >= 0 ) { 329 if( ioctl(sockfd, SIOCGIFHWADDR, &ifrs) >= 0 ) {
259 Log(("%s = %d\n", IFI->Name.latin1(), 330 Log(("Family for NIC %s : %d\n", IFI->Name.latin1(),
260 ifrs.ifr_hwaddr.sa_family )); 331 ifrs.ifr_hwaddr.sa_family ));
261 332
262 IFI->CardType = ifrs.ifr_hwaddr.sa_family; 333 IFI->CardType = ifrs.ifr_hwaddr.sa_family;
263 switch( ifrs.ifr_hwaddr.sa_family ) { 334 switch( ifrs.ifr_hwaddr.sa_family ) {
264 case ARPHRD_ETHER : // regular MAC address 335 case ARPHRD_ETHER : // regular MAC address
265 // valid address -> convert to regular ::: format 336 // valid address -> convert to regular ::: format
266 // length = 6 bytes = 12 DIGITS -> 6 : 337 // length = 6 bytes = 12 DIGITS -> 6 :
267 IFI->MACAddress.sprintf( 338 IFI->MACAddress.sprintf(
268 "%c%c:%c%c:%c%c:%c%c:%c%c:%c%c", 339 "%c%c:%c%c:%c%c:%c%c:%c%c:%c%c",
269 HN( ifrs.ifr_hwaddr.sa_data[0] ), 340 HN( ifrs.ifr_hwaddr.sa_data[0] ),
270 LN( ifrs.ifr_hwaddr.sa_data[0] ), 341 LN( ifrs.ifr_hwaddr.sa_data[0] ),
271 HN( ifrs.ifr_hwaddr.sa_data[1] ), 342 HN( ifrs.ifr_hwaddr.sa_data[1] ),
272 LN( ifrs.ifr_hwaddr.sa_data[1] ), 343 LN( ifrs.ifr_hwaddr.sa_data[1] ),
273 HN( ifrs.ifr_hwaddr.sa_data[2] ), 344 HN( ifrs.ifr_hwaddr.sa_data[2] ),
274 LN( ifrs.ifr_hwaddr.sa_data[2] ), 345 LN( ifrs.ifr_hwaddr.sa_data[2] ),
275 HN( ifrs.ifr_hwaddr.sa_data[3] ), 346 HN( ifrs.ifr_hwaddr.sa_data[3] ),
@@ -311,123 +382,192 @@ void System::probeInterfaces( void ) {
311 HN( ifrs.ifr_hwaddr.sa_data[12] ), 382 HN( ifrs.ifr_hwaddr.sa_data[12] ),
312 LN( ifrs.ifr_hwaddr.sa_data[12] ), 383 LN( ifrs.ifr_hwaddr.sa_data[12] ),
313 HN( ifrs.ifr_hwaddr.sa_data[13] ), 384 HN( ifrs.ifr_hwaddr.sa_data[13] ),
314 LN( ifrs.ifr_hwaddr.sa_data[13] ) 385 LN( ifrs.ifr_hwaddr.sa_data[13] )
315 ); 386 );
316 break; 387 break;
317#endif 388#endif
318 case ARPHRD_PPP : // PPP 389 case ARPHRD_PPP : // PPP
319 break; 390 break;
320 case ARPHRD_IEEE80211 : // WLAN 391 case ARPHRD_IEEE80211 : // WLAN
321 break; 392 break;
322 case ARPHRD_IRDA : // IRDA 393 case ARPHRD_IRDA : // IRDA
323 break; 394 break;
324 } 395 }
325 } 396 }
326 } else // else already probed before -> just update 397 } else // else already probed before -> just update
327 Log(("OLDNIC %s\n", NicName.latin1())); 398 Log(("Redetected NIC %s\n", NicName.latin1()));
328 399
329 // get dynamic info 400 // get dynamic info
330 if( ioctl(sockfd, SIOCGIFFLAGS, &ifrs) >= 0 ) { 401 if( ioctl(sockfd, SIOCGIFFLAGS, &ifrs) >= 0 ) {
331 IFI->IsUp = ((ifrs.ifr_flags & IFF_UP) == IFF_UP); 402 IFI->IsUp = ((ifrs.ifr_flags & IFF_UP) == IFF_UP);
332 IFI->HasMulticast = ((ifrs.ifr_flags & IFF_MULTICAST) == IFF_MULTICAST); 403 IFI->HasMulticast = ((ifrs.ifr_flags & IFF_MULTICAST) == IFF_MULTICAST);
333 } else { 404 } else {
334 IFI->IsUp = 0; 405 IFI->IsUp = 0;
335 IFI->HasMulticast = 0; 406 IFI->HasMulticast = 0;
336 } 407 }
337 408
338 if( ioctl(sockfd, SIOCGIFADDR, &ifrs) >= 0 ) { 409 if( ioctl(sockfd, SIOCGIFADDR, &ifrs) >= 0 ) {
339 IFI->Address = 410 IFI->Address =
340 inet_ntoa(((struct sockaddr_in*)&ifrs.ifr_addr)->sin_addr); 411 inet_ntoa(((struct sockaddr_in*)&ifrs.ifr_addr)->sin_addr);
341 } else { 412 } else {
342 IFI->Address = ""; 413 IFI->Address = "";
343 IFI->IsUp = 0; 414 IFI->IsUp = 0;
344 } 415 }
345 if( ioctl(sockfd, SIOCGIFBRDADDR, &ifrs) >= 0 ) { 416 if( ioctl(sockfd, SIOCGIFBRDADDR, &ifrs) >= 0 ) {
346 IFI->BCastAddress = 417 IFI->BCastAddress =
347 inet_ntoa(((struct sockaddr_in*)&ifrs.ifr_broadaddr)->sin_addr); 418 inet_ntoa(((struct sockaddr_in*)&ifrs.ifr_broadaddr)->sin_addr);
348 } else { 419 } else {
349 IFI->BCastAddress = ""; 420 IFI->BCastAddress = "";
350 } 421 }
351 if( ioctl(sockfd, SIOCGIFNETMASK, &ifrs) >= 0 ) { 422 if( ioctl(sockfd, SIOCGIFNETMASK, &ifrs) >= 0 ) {
352 IFI->Netmask = 423 IFI->Netmask =
353 inet_ntoa(((struct sockaddr_in*)&ifrs.ifr_netmask)->sin_addr); 424 inet_ntoa(((struct sockaddr_in*)&ifrs.ifr_netmask)->sin_addr);
354 } else { 425 } else {
355 IFI->Netmask = ""; 426 IFI->Netmask = "";
356 } 427 }
357 Log(("NIC %s UP %d\n", NicName.latin1(), IFI->IsUp )); 428 Log(("NIC %s UP ? %d\n", NicName.latin1(), IFI->IsUp ));
358 } 429 }
359}
360
361void System::execAsUser( QString & Cmd, char * argv[] ) {
362 CurrentQPEUser CU = NSResources->currentUser();
363
364 if( CU.UserName.isEmpty() ) {
365 // if we come here, the exec was not successfull
366 Log(("User not known \n" ));
367 return;
368 }
369 430
370 // now we are ready to exec the requested command 431 ::close( sockfd );
371 setuid( CU.Uid ); 432}
372 setgid( CU.Gid );
373
374 char ** envp = (char **)alloca( sizeof( char *) *
375 (CU.EnvList.count()+1) );
376 433
377 for( unsigned int i = 0 ; i < CU.EnvList.count() ; i ++ ) { 434InterfaceInfo * System::findInterface( const QString & N ) {
378 *(envp+i) = CU.EnvList[i]; 435 InterfaceInfo * Run;
436 // has PAN connection UP interface ?
437 for( QDictIterator<InterfaceInfo> It(ProbedInterfaces);
438 It.current();
439 ++It ) {
440 Run = It.current();
441 if( N == Run->Name ) {
442 // this PAN connection is up
443 return Run;
444 }
379 } 445 }
380 envp[CU.EnvList.count()]=NULL; 446 return 0;
381
382 execve( Cmd.latin1(), argv, envp );
383
384 // if we come here, the exec was not successfull
385 Log(("Could not exec : %d\n", errno ));
386} 447}
387 448
388#include <stdarg.h> 449#include <stdarg.h>
389static FILE * logf = 0; 450static FILE * logf = 0;
390 451
391void VLog( char * Format, ... ) { 452void VLog( char * Format, ... ) {
392 va_list l; 453 va_list l;
393 454
394 va_start(l, Format ); 455 va_start(l, Format );
395 456
396 if( logf == (FILE *)0 ) { 457 if( logf == (FILE *)0 ) {
397 if( getenv("NS2STDERR") ) { 458 QString S = getenv("NS2LOG");
459 if( S == "stderr" ) {
398 logf = stderr; 460 logf = stderr;
399 } else { 461 } else if( S.isEmpty() ) {
400 logf = fopen( "/tmp/ns2log", "a" ); 462 logf = fopen( "/tmp/ns2log", "a" );
463 } else {
464 logf = fopen( S, "a" );
401 } 465 }
466
402 if( ! logf ) { 467 if( ! logf ) {
403 fprintf( stderr, "Cannot open logfile /tmp/ns2log %d\n", 468 fprintf( stderr, "Cannot open logfile %s : %d\n",
404 errno ); 469 S.latin1(), errno );
405 logf = (FILE *)1; 470 logf = (FILE *)1;
406 } else { 471 } else {
407 fprintf( logf, "____ OPEN LOGFILE ____\n"); 472 fprintf( logf, "____ OPEN LOGFILE ____\n");
408 } 473 }
409 } 474 }
410 475
411 if( (long)logf > 1 ) { 476 if( (unsigned long)logf > 1 ) {
412 vfprintf( logf, Format, l ); 477 vfprintf( logf, Format, l );
413 } 478 }
414 va_end( l ); 479 va_end( l );
480 fflush( logf );
415 481
416} 482}
417 483
418void LogClose( void ) { 484void LogClose( void ) {
419 if( (long)logf > 1 ) { 485 if( (long)logf > 1 ) {
420 fprintf( logf, "____ CLOSE LOGFILE ____\n"); 486 fprintf( logf, "____ CLOSE LOGFILE ____\n");
421 if( logf != stderr ) { 487 if( logf != stderr ) {
422 fclose( logf ); 488 fclose( logf );
423 } 489 }
424 logf = 0; 490 logf = 0;
425 } 491 }
426} 492}
427 493
428QString removeSpaces( const QString & X ) { 494QString removeSpaces( const QString & X ) {
429 QStringList SL; 495 QString Y;
496 Y = X.simplifyWhiteSpace();
497 Y.replace( QRegExp(" "), "_" );
498 owarn << X << " **" << Y << "**" << oendl;
499 return Y;
500}
501
502//
503//
504//
505//
506//
507
508MyProcess::MyProcess() : QObject(), StdoutBuffer(), StderrBuffer() {
509 P = new OProcess();
510 connect( P,
511 SIGNAL( receivedStdout(Opie::Core::OProcess*, char*, int ) ),
512 this,
513 SLOT( SLOT_Stdout(Opie::Core::OProcess*,char*,int) ) );
514
515 connect( P,
516 SIGNAL( receivedStderr(Opie::Core::OProcess*, char*, int ) ),
517 this,
518 SLOT( SLOT_Stderr(Opie::Core::OProcess*,char*,int) ) );
519 connect( P,
520 SIGNAL( processExited(Opie::Core::OProcess*) ),
521 this,
522 SLOT( SLOT_ProcessExited(Opie::Core::OProcess*) ) );
523}
524
525MyProcess::~MyProcess() {
526 delete P;
527}
528
529void MyProcess::SLOT_Stdout( Opie::Core::OProcess * , char * Buf, int len ) {
530 char * LB = (char *)alloca( len + 1 );
531 memcpy( LB, Buf, len );
532 LB[len] = '\0';
533
534 // now input is zero terminated
535 StdoutBuffer += LB;
536
537 owarn << "Received " << len << " bytes on stdout" << oendl;
538 // see if we have some lines (allow empty lines)
539 QStringList SL = QStringList::split( "\n", StdoutBuffer, TRUE );
540
541 for( unsigned int i = 0; i < SL.count()-1; i ++ ) {
542 Log(( "Stdout : \"%s\"\n", SL[i].latin1() ) );
543 emit stdoutLine( SL[i] );
544 }
545
546 // last line is rest
547 StdoutBuffer = SL[ SL.count()-1 ];
548}
549
550void MyProcess::SLOT_Stderr( Opie::Core::OProcess * , char * Buf, int len ) {
551 char * LB = (char *)alloca( len + 1 );
552 memcpy( LB, Buf, len );
553 LB[len] = '\0';
554
555 // now input is zero terminated
556 StderrBuffer += LB;
557
558 owarn << "Received " << len << " bytes on stderr" << oendl;
559 // see if we have some lines (allow empty lines)
560 QStringList SL = QStringList::split( "\n", StderrBuffer, TRUE );
561
562 for( unsigned int i = 0; i < SL.count()-1; i ++ ) {
563 Log(( "Stderr : \"%s\"\n", SL[i].latin1() ) );
564 emit stderrLine( SL[i] );
565 }
566
567 // last line is rest
568 StderrBuffer = SL[ SL.count()-1 ];
569}
430 570
431 SL = QStringList::split( " ", X ); 571void MyProcess::SLOT_ProcessExited( Opie::Core::OProcess * ) {
432 return SL.join( "_" ); 572 emit processExited( this );
433} 573}
diff --git a/noncore/settings/networksettings2/networksettings2/system.h b/noncore/settings/networksettings2/networksettings2/system.h
index 33af391..e67d695 100644
--- a/noncore/settings/networksettings2/networksettings2/system.h
+++ b/noncore/settings/networksettings2/networksettings2/system.h
@@ -1,47 +1,85 @@
1#ifndef __SYSTEM__H 1#ifndef __SYSTEM__H
2#define __SYSTEM__H 2#define __SYSTEM__H
3 3
4#include <qstring.h>
5
6#include <opie2/oprocess.h>
7
8using namespace Opie::Core;
9
4// for hardware types 10// for hardware types
5#include <net/if_arp.h> 11#include <net/if_arp.h>
6#include <qdict.h> 12#include <qdict.h>
7#include <qobject.h> 13#include <qobject.h>
8#include <stdio.h> 14#include <stdio.h>
9 15
16class NodeCollection;
10class ANetNodeInstance; 17class ANetNodeInstance;
11class QFile; 18class QFile;
12 19
20class MyProcess : public QObject {
21
22 Q_OBJECT
23
24public :
25
26 MyProcess();
27 ~MyProcess();
28
29 inline OProcess & process()
30 { return *P; }
31
32public slots :
33
34 void SLOT_Stdout( Opie::Core::OProcess * P, char *, int );
35 void SLOT_Stderr( Opie::Core::OProcess * P, char *, int );
36 void SLOT_ProcessExited( Opie::Core::OProcess * P);
37
38signals :
39
40 void stdoutLine( const QString & );
41 void stderrLine( const QString & );
42 void processExited( MyProcess * );
43
44private :
45
46 QString StdoutBuffer;
47 QString StderrBuffer;
48 OProcess * P;
49};
50
13class InterfaceInfo { 51class InterfaceInfo {
14 52
15public : 53public :
16 54
17 InterfaceInfo() : 55 InterfaceInfo() :
18 Name(), 56 Name(),
19 MACAddress(), 57 MACAddress(),
20 BCastAddress(), 58 BCastAddress(),
21 Netmask(), 59 Netmask(),
22 DstAddress() { 60 DstAddress() {
23 } 61 }
24 62
25 ANetNodeInstance * assignedNode() 63 NodeCollection * assignedConnection()
26 { return NetNode; } 64 { return Collection; }
27 65
28 void assignNode( ANetNodeInstance * NNI ) 66 void assignConnection( NodeCollection * NNI )
29 { NetNode = NNI; } 67 { Collection = NNI; }
30 68
31 ANetNodeInstance * NetNode; // netnode taking care of me 69 NodeCollection * Collection; // connection taking care of me
32 QString Name; // name of interface 70 QString Name; // name of interface
33 int CardType; // type of card 71 int CardType; // type of card
34 QString MACAddress; // MAC address 72 QString MACAddress; // MAC address
35 QString Address; // IP Address 73 QString Address; // IP Address
36 QString BCastAddress; // Broadcast Address 74 QString BCastAddress; // Broadcast Address
37 QString Netmask; // Netmask 75 QString Netmask; // Netmask
38 QString DstAddress; // Peer address (if P-t-P) 76 QString DstAddress; // Peer address (if P-t-P)
39 bool IsUp; // interface is UP 77 bool IsUp; // interface is UP
40 bool HasMulticast; // Supports Multicast 78 bool HasMulticast; // Supports Multicast
41 bool IsPointToPoint; // IsPointToPoint card 79 bool IsPointToPoint; // IsPointToPoint card
42 80
43 QString RcvBytes; 81 QString RcvBytes;
44 QString SndBytes; 82 QString SndBytes;
45 QString RcvErrors; 83 QString RcvErrors;
46 QString SndErrors; 84 QString SndErrors;
47 QString RcvDropped; 85 QString RcvDropped;
@@ -51,40 +89,47 @@ public :
51 89
52class System : public QObject { 90class System : public QObject {
53 91
54 Q_OBJECT 92 Q_OBJECT
55 93
56public : 94public :
57 95
58 System( void ); 96 System( void );
59 ~System( void ); 97 ~System( void );
60 98
61 QDict<InterfaceInfo> & interfaces( void ) 99 QDict<InterfaceInfo> & interfaces( void )
62 { return ProbedInterfaces; } 100 { return ProbedInterfaces; }
63 InterfaceInfo * interface( const QString& N ) 101 InterfaceInfo * interface( const QString& N )
64 { return ProbedInterfaces[N]; } 102 { return ProbedInterfaces[N]; }
65 103
66 // exec command as root 104 // exec command as root
67 int runAsRoot( const QString & S ); 105 int runAsRoot( QStringList & S );
68 106
69 // exec command as user 107 // exec command as user
70 void execAsUser( QString & Cmd, char * argv[] ); 108 int execAsUser( QStringList & Cmd );
71 109
72 // refresh stats for this interface 110 // refresh stats for this interface
73 void refreshStatistics( InterfaceInfo & ); 111 void refreshStatistics( InterfaceInfo & );
74 112
75 // reloads interfaces 113 // reloads interfaces
76 void probeInterfaces( void ); 114 void probeInterfaces( void );
77 115
116 InterfaceInfo * findInterface( const QString & DevName );
117
118private slots :
119
120 void SLOT_ProcessExited( MyProcess * );
121
78signals : 122signals :
79 123
80 void lineFromCommand( const QString & S ); 124 void stdoutLine( const QString & );
125 void stderrLine( const QString & );
126 void processEvent( const QString & );
81 127
82private : 128private :
83 129
84 QDict<InterfaceInfo> ProbedInterfaces; 130 QDict<InterfaceInfo> ProbedInterfaces;
85 FILE * OutputOfCmd; 131 FILE * OutputOfCmd;
86 QFile * ProcDevNet; 132 QFile * ProcDevNet;
87
88}; 133};
89 134
90#endif 135#endif
diff --git a/noncore/settings/networksettings2/networksettings2/systemfile.cpp b/noncore/settings/networksettings2/networksettings2/systemfile.cpp
index 2b40834..82fd43a 100644
--- a/noncore/settings/networksettings2/networksettings2/systemfile.cpp
+++ b/noncore/settings/networksettings2/networksettings2/systemfile.cpp
@@ -3,32 +3,33 @@
3#include <qfileinfo.h> 3#include <qfileinfo.h>
4#include <qmessagebox.h> 4#include <qmessagebox.h>
5#include <qfile.h> 5#include <qfile.h>
6#include <qtextstream.h> 6#include <qtextstream.h>
7 7
8#include "resources.h" 8#include "resources.h"
9#include "systemfile.h" 9#include "systemfile.h"
10 10
11#define TEMPLATEDIR "networktemplates/" 11#define TEMPLATEDIR "networktemplates/"
12QString TemplDir; 12QString TemplDir;
13 13
14SystemFile::SystemFile( const QString & N, 14SystemFile::SystemFile( const QString & N,
15 const QString & P, 15 const QString & P,
16 bool KDI ){ 16 bool KDI ){
17 Name = N; 17 Name = N;
18 Path = P; 18 Path = P;
19 InAppend = 0;
19 F = 0; 20 F = 0;
20 // get template info 21 // get template info
21 { QString S; 22 { QString S;
22 QFileInfo FI; 23 QFileInfo FI;
23 24
24 // find location of templates 25 // find location of templates
25 TemplDir = QPEApplication::qpeDir() + "etc/" + TEMPLATEDIR; 26 TemplDir = QPEApplication::qpeDir() + "etc/" + TEMPLATEDIR;
26 FI.setFile( TemplDir ); 27 FI.setFile( TemplDir );
27 if( ! FI.isDir() ) { 28 if( ! FI.isDir() ) {
28 // try current dir 29 // try current dir
29 TemplDir = "./" TEMPLATEDIR; 30 TemplDir = "./" TEMPLATEDIR;
30 FI.setFile( TemplDir ); 31 FI.setFile( TemplDir );
31 if( ! FI.isDir() ) { 32 if( ! FI.isDir() ) {
32 hasPreSection = 33 hasPreSection =
33 hasPostSection = 34 hasPostSection =
34 hasPreNodeSection = 35 hasPreNodeSection =
@@ -50,63 +51,108 @@ SystemFile::SystemFile( const QString & N,
50 FI.setFile( S ); 51 FI.setFile( S );
51 hasPreNodeSection = ( FI.exists() && FI.isReadable() ); 52 hasPreNodeSection = ( FI.exists() && FI.isReadable() );
52 S = TemplDir + Name + "/postnodesection"; 53 S = TemplDir + Name + "/postnodesection";
53 FI.setFile( S ); 54 FI.setFile( S );
54 hasPostNodeSection = ( FI.exists() && FI.isReadable() ); 55 hasPostNodeSection = ( FI.exists() && FI.isReadable() );
55 S = TemplDir + Name + "/predevicesection"; 56 S = TemplDir + Name + "/predevicesection";
56 FI.setFile( S ); 57 FI.setFile( S );
57 hasPreDeviceSection = ( FI.exists() && FI.isReadable() ); 58 hasPreDeviceSection = ( FI.exists() && FI.isReadable() );
58 S = TemplDir + Name + "/postdevicesection"; 59 S = TemplDir + Name + "/postdevicesection";
59 FI.setFile( S ); 60 FI.setFile( S );
60 hasPostDeviceSection = ( FI.exists() && FI.isReadable() ); 61 hasPostDeviceSection = ( FI.exists() && FI.isReadable() );
61 } 62 }
62 63
63 KnowsDeviceInstances = KDI; 64 KnowsDeviceInstances = KDI;
64} 65}
65 66
67SystemFile::SystemFile( const QString & N, bool KDI ){
68 Name = N;
69 Path = "";
70 InAppend = 0;
71 F =0;
72 KnowsDeviceInstances = KDI;
73 hasPreSection =
74 hasPostSection =
75 hasPreNodeSection =
76 hasPostNodeSection =
77 hasPreDeviceSection =
78 hasPostDeviceSection = 0;
79}
80
66SystemFile::~SystemFile( void ) { 81SystemFile::~SystemFile( void ) {
67 if( F ) 82 close();
68 delete F;
69} 83}
70 84
71bool SystemFile::open( void ) { 85bool SystemFile::open( void ) {
72 if( F ) { 86 QString Prefix = getenv( "NS2OUTPUTTO" );
73 F->close(); 87
74 delete F; 88 if( Prefix != "stderr" /* && Name != "interfaces" */ ) {
75 } 89 // generate files where the need to be
90 if( F ) {
91 F->close();
92 delete F;
93 }
76 94
77 F = new QFile( Path + "bup" ); 95 F = new QFile( Prefix + Path + ((InAppend)?"":"bup") );
78 if( ! F->open( IO_WriteOnly ) ) { 96 Log(( "Open systemfile %s\n", F->name().latin1() ));
79 return 0; 97 if( ! F->open( ((InAppend)?IO_Append : 0 ) | IO_WriteOnly ) ) {
98 return 0;
99 }
100 } else {
101 if( ! F ) {
102 owarn << "!!!!!!!!!!!!!!!!!! " << oendl;
103 owarn << "!!!! TESTMODE !!!!" << oendl;
104 owarn << "!!!!!!!!!!!!!!!!!! " << oendl;
105 owarn << "!!!!" << oendl;
106 owarn << "!!!! GENERATE " << Path << oendl;
107 if( InAppend ) {
108 owarn << "!!!! In APPEND mode" << oendl;
109 }
110 owarn << "!!!!" << oendl;
111 owarn << "!!!!!!!!!!!!!!!!!!" << oendl;
112
113 F = new QFile();
114 F->open( IO_WriteOnly, stderr );
115 }
80 } 116 }
81 setDevice( F ); 117 setDevice( F );
82 return 1; 118 return 1;
83} 119}
84 120
85bool SystemFile::close( void ) { 121bool SystemFile::close( void ) {
86 if( ! F ) { 122 if( ! F || ! F->isOpen() ) {
87 return 1 ; 123 return 1 ;
88 } 124 }
89 125
90 QString OldP = Path + "bup"; 126 QString Prefix = getenv( "NS2OUTPUTTO" );
127
128 if( Prefix == "stderr" ) {
129 return 1;
130 }
131
132 QString OldP = Prefix + Path + "bup";
91 133
92 F->close(); 134 F->close();
93 delete F; 135 delete F;
94 F = 0; 136 F = 0;
95 137
96 return ( rename( OldP.latin1(), Path.latin1() ) >= 0 ); 138 if( ! InAppend ) {
139 owarn << "Rename " << OldP << " to " << Path << oendl;
140 return ( rename( OldP.latin1(), Path.latin1() ) >= 0 );
141 }
142 return 1;
97} 143}
98 144
99bool SystemFile::preSection( void ) { 145bool SystemFile::preSection( void ) {
100 if( hasPreSection ) { 146 if( hasPreSection ) {
101 QFile Fl( TemplDir + Name + "/presection" ); 147 QFile Fl( TemplDir + Name + "/presection" );
102 if( ! Fl.open( IO_ReadOnly ) ) 148 if( ! Fl.open( IO_ReadOnly ) )
103 return 0; // error 149 return 0; // error
104 // copy file to this file 150 // copy file to this file
105 F->writeBlock( Fl.readAll() ); 151 F->writeBlock( Fl.readAll() );
106 } 152 }
107 return 1; 153 return 1;
108} 154}
109 155
110bool SystemFile::postSection( void ) { 156bool SystemFile::postSection( void ) {
111 if( hasPostSection ) { 157 if( hasPostSection ) {
112 QFile Fl( TemplDir + Name + "/postsection" ); 158 QFile Fl( TemplDir + Name + "/postsection" );
diff --git a/noncore/settings/networksettings2/networksettings2/systemfile.h b/noncore/settings/networksettings2/networksettings2/systemfile.h
index ceed605..a950c4d 100644
--- a/noncore/settings/networksettings2/networksettings2/systemfile.h
+++ b/noncore/settings/networksettings2/networksettings2/systemfile.h
@@ -1,50 +1,61 @@
1#ifndef __SYSTEMFILE__H 1#ifndef __SYSTEMFILE__H
2#define __SYSTEMFILE__H 2#define __SYSTEMFILE__H
3 3
4#include <qstring.h> 4#include <qstring.h>
5#include <qtextstream.h> 5#include <qtextstream.h>
6 6
7class QFile; 7class QFile;
8class ANetNodeInstance; 8class ANetNodeInstance;
9 9
10class SystemFile : public QTextStream { 10class SystemFile : public QTextStream {
11 11
12public : 12public :
13 13
14 SystemFile( const QString & Name, 14 SystemFile( const QString & Name,
15 const QString & Path, 15 const QString & Path,
16 bool KnowsDevicesInstances ); 16 bool KnowsDevicesInstances );
17 SystemFile( const QString & Name,
18 bool KnowsDevicesInstances = 0 );
17 ~SystemFile( void ); 19 ~SystemFile( void );
18 20
21 void setName( const QString & S )
22 { Name = S; }
19 const QString & name( void ) const 23 const QString & name( void ) const
20 { return Name; } 24 { return Name; }
25
26 void setPath( const QString & S )
27 { Path = S; }
21 const QString & path( void ) const 28 const QString & path( void ) const
22 { return Path; } 29 { return Path; }
30
23 bool knowsDeviceInstances( void ) const 31 bool knowsDeviceInstances( void ) const
24 { return KnowsDeviceInstances; } 32 { return KnowsDeviceInstances; }
25 33
34 void setAppendMode( bool A)
35 { InAppend = A; };
26 bool open( void ); 36 bool open( void );
27 bool close( void ); 37 bool close( void );
28 38
29 bool preSection( void ); 39 bool preSection( void );
30 bool postSection( void ); 40 bool postSection( void );
31 bool preNodeSection( ANetNodeInstance * NNI, long DevNr ); 41 bool preNodeSection( ANetNodeInstance * NNI, long DevNr );
32 bool postNodeSection( ANetNodeInstance * NNI, long DevNr ); 42 bool postNodeSection( ANetNodeInstance * NNI, long DevNr );
33 bool preDeviceSection( ANetNode * NN ); 43 bool preDeviceSection( ANetNode * NN );
34 bool postDeviceSection( ANetNode * NN ); 44 bool postDeviceSection( ANetNode * NN );
35 45
36private : 46private :
37 47
38 QString Name; 48 QString Name;
39 QString Path; 49 QString Path;
40 QFile * F; 50 QFile * F;
41 bool hasPreSection; 51 bool hasPreSection;
42 bool hasPostSection; 52 bool hasPostSection;
43 bool hasPreNodeSection; 53 bool hasPreNodeSection;
44 bool hasPostNodeSection; 54 bool hasPostNodeSection;
45 bool hasPreDeviceSection; 55 bool hasPreDeviceSection;
46 bool hasPostDeviceSection; 56 bool hasPostDeviceSection;
47 bool KnowsDeviceInstances; 57 bool KnowsDeviceInstances;
58 bool InAppend;
48 59
49}; 60};
50#endif 61#endif
diff --git a/noncore/settings/networksettings2/networksettingsGUI.ui b/noncore/settings/networksettings2/networksettingsGUI.ui
index 6ed29f3..1085e08 100644
--- a/noncore/settings/networksettings2/networksettingsGUI.ui
+++ b/noncore/settings/networksettings2/networksettingsGUI.ui
@@ -1,31 +1,31 @@
1<!DOCTYPE UI><UI> 1<!DOCTYPE UI><UI>
2<class>NetworkSettingsGUI</class> 2<class>NetworkSettingsGUI</class>
3<widget> 3<widget>
4 <class>QWidget</class> 4 <class>QWidget</class>
5 <property stdset="1"> 5 <property stdset="1">
6 <name>name</name> 6 <name>name</name>
7 <cstring>NetworkSettingsGUI</cstring> 7 <cstring>NetworkSettingsGUI</cstring>
8 </property> 8 </property>
9 <property stdset="1"> 9 <property stdset="1">
10 <name>geometry</name> 10 <name>geometry</name>
11 <rect> 11 <rect>
12 <x>0</x> 12 <x>0</x>
13 <y>0</y> 13 <y>0</y>
14 <width>144</width> 14 <width>383</width>
15 <height>260</height> 15 <height>359</height>
16 </rect> 16 </rect>
17 </property> 17 </property>
18 <property stdset="1"> 18 <property stdset="1">
19 <name>caption</name> 19 <name>caption</name>
20 <string>Network Settings</string> 20 <string>Network Settings</string>
21 </property> 21 </property>
22 <property> 22 <property>
23 <name>layoutMargin</name> 23 <name>layoutMargin</name>
24 </property> 24 </property>
25 <property> 25 <property>
26 <name>layoutSpacing</name> 26 <name>layoutSpacing</name>
27 </property> 27 </property>
28 <vbox> 28 <vbox>
29 <property stdset="1"> 29 <property stdset="1">
30 <name>margin</name> 30 <name>margin</name>
31 <number>2</number> 31 <number>2</number>
@@ -55,33 +55,33 @@
55 <name>frameShadow</name> 55 <name>frameShadow</name>
56 <enum>Raised</enum> 56 <enum>Raised</enum>
57 </property> 57 </property>
58 <property> 58 <property>
59 <name>layoutMargin</name> 59 <name>layoutMargin</name>
60 </property> 60 </property>
61 <property> 61 <property>
62 <name>layoutSpacing</name> 62 <name>layoutSpacing</name>
63 </property> 63 </property>
64 <hbox> 64 <hbox>
65 <property stdset="1"> 65 <property stdset="1">
66 <name>margin</name> 66 <name>margin</name>
67 <number>0</number> 67 <number>0</number>
68 </property> 68 </property>
69 <property stdset="1"> 69 <property stdset="1">
70 <name>spacing</name> 70 <name>spacing</name>
71 <number>1</number> 71 <number>0</number>
72 </property> 72 </property>
73 <widget> 73 <widget>
74 <class>QToolButton</class> 74 <class>QToolButton</class>
75 <property stdset="1"> 75 <property stdset="1">
76 <name>name</name> 76 <name>name</name>
77 <cstring>Add_TB</cstring> 77 <cstring>Add_TB</cstring>
78 </property> 78 </property>
79 <property stdset="1"> 79 <property stdset="1">
80 <name>sizePolicy</name> 80 <name>sizePolicy</name>
81 <sizepolicy> 81 <sizepolicy>
82 <hsizetype>0</hsizetype> 82 <hsizetype>0</hsizetype>
83 <vsizetype>0</vsizetype> 83 <vsizetype>0</vsizetype>
84 </sizepolicy> 84 </sizepolicy>
85 </property> 85 </property>
86 <property stdset="1"> 86 <property stdset="1">
87 <name>text</name> 87 <name>text</name>
@@ -154,130 +154,98 @@
154 <property stdset="1"> 154 <property stdset="1">
155 <name>sizeType</name> 155 <name>sizeType</name>
156 <enum>Expanding</enum> 156 <enum>Expanding</enum>
157 </property> 157 </property>
158 <property> 158 <property>
159 <name>sizeHint</name> 159 <name>sizeHint</name>
160 <size> 160 <size>
161 <width>20</width> 161 <width>20</width>
162 <height>20</height> 162 <height>20</height>
163 </size> 163 </size>
164 </property> 164 </property>
165 </spacer> 165 </spacer>
166 <widget> 166 <widget>
167 <class>QToolButton</class> 167 <class>QToolButton</class>
168 <property stdset="1"> 168 <property stdset="1">
169 <name>name</name> 169 <name>name</name>
170 <cstring>Enable_TB</cstring> 170 <cstring>Disable_TB</cstring>
171 </property>
172 <property stdset="1">
173 <name>sizePolicy</name>
174 <sizepolicy>
175 <hsizetype>0</hsizetype>
176 <vsizetype>0</vsizetype>
177 </sizepolicy>
178 </property> 171 </property>
179 <property stdset="1"> 172 <property stdset="1">
180 <name>text</name> 173 <name>text</name>
181 <string>...</string> 174 <string>...</string>
182 </property> 175 </property>
183 <property stdset="1"> 176 <property stdset="1">
184 <name>toggleButton</name> 177 <name>toggleButton</name>
185 <bool>true</bool> 178 <bool>true</bool>
186 </property> 179 </property>
187 <property stdset="1"> 180 <property stdset="1">
188 <name>toggleButton</name> 181 <name>toggleButton</name>
189 <bool>true</bool> 182 <bool>true</bool>
190 </property> 183 </property>
191 </widget> 184 </widget>
192 <widget> 185 <widget>
193 <class>QToolButton</class> 186 <class>QToolButton</class>
194 <property stdset="1"> 187 <property stdset="1">
195 <name>name</name> 188 <name>name</name>
196 <cstring>On_TB</cstring> 189 <cstring>Down_TB</cstring>
197 </property>
198 <property stdset="1">
199 <name>sizePolicy</name>
200 <sizepolicy>
201 <hsizetype>0</hsizetype>
202 <vsizetype>0</vsizetype>
203 </sizepolicy>
204 </property> 190 </property>
205 <property stdset="1"> 191 <property stdset="1">
206 <name>text</name> 192 <name>text</name>
207 <string>...</string> 193 <string>...</string>
208 </property> 194 </property>
209 <property stdset="1"> 195 <property stdset="1">
210 <name>toggleButton</name> 196 <name>toggleButton</name>
211 <bool>true</bool> 197 <bool>false</bool>
212 </property> 198 </property>
213 <property stdset="1"> 199 <property stdset="1">
214 <name>toggleButton</name> 200 <name>toggleButton</name>
215 <bool>true</bool> 201 <bool>false</bool>
216 </property> 202 </property>
217 </widget> 203 </widget>
218 <widget> 204 <widget>
219 <class>QToolButton</class> 205 <class>QFrame</class>
220 <property stdset="1"> 206 <property stdset="1">
221 <name>name</name> 207 <name>name</name>
222 <cstring>Connect_TB</cstring> 208 <cstring>LED_Frm</cstring>
223 </property> 209 </property>
224 <property stdset="1"> 210 <property stdset="1">
225 <name>sizePolicy</name> 211 <name>frameShape</name>
226 <sizepolicy> 212 <enum>NoFrame</enum>
227 <hsizetype>0</hsizetype>
228 <vsizetype>0</vsizetype>
229 </sizepolicy>
230 </property>
231 <property stdset="1">
232 <name>text</name>
233 <string>...</string>
234 </property>
235 <property stdset="1">
236 <name>toggleButton</name>
237 <bool>true</bool>
238 </property> 213 </property>
239 <property stdset="1"> 214 <property stdset="1">
240 <name>toggleButton</name> 215 <name>frameShadow</name>
241 <bool>true</bool> 216 <enum>Raised</enum>
242 </property> 217 </property>
243 </widget> 218 </widget>
244 <widget> 219 <widget>
245 <class>QToolButton</class> 220 <class>QToolButton</class>
246 <property stdset="1"> 221 <property stdset="1">
247 <name>name</name> 222 <name>name</name>
248 <cstring>Disconnect_TB</cstring> 223 <cstring>Up_TB</cstring>
249 </property>
250 <property stdset="1">
251 <name>sizePolicy</name>
252 <sizepolicy>
253 <hsizetype>0</hsizetype>
254 <vsizetype>0</vsizetype>
255 </sizepolicy>
256 </property> 224 </property>
257 <property stdset="1"> 225 <property stdset="1">
258 <name>text</name> 226 <name>text</name>
259 <string>...</string> 227 <string>...</string>
260 </property> 228 </property>
261 <property stdset="1"> 229 <property stdset="1">
262 <name>toggleButton</name> 230 <name>toggleButton</name>
263 <bool>true</bool> 231 <bool>false</bool>
264 </property> 232 </property>
265 <property stdset="1"> 233 <property stdset="1">
266 <name>toggleButton</name> 234 <name>toggleButton</name>
267 <bool>true</bool> 235 <bool>false</bool>
268 </property> 236 </property>
269 </widget> 237 </widget>
270 </hbox> 238 </hbox>
271 </widget> 239 </widget>
272 <widget> 240 <widget>
273 <class>QListBox</class> 241 <class>QListBox</class>
274 <property stdset="1"> 242 <property stdset="1">
275 <name>name</name> 243 <name>name</name>
276 <cstring>Profiles_LB</cstring> 244 <cstring>Profiles_LB</cstring>
277 </property> 245 </property>
278 </widget> 246 </widget>
279 <widget> 247 <widget>
280 <class>QGroupBox</class> 248 <class>QGroupBox</class>
281 <property stdset="1"> 249 <property stdset="1">
282 <name>name</name> 250 <name>name</name>
283 <cstring>Profile_GB</cstring> 251 <cstring>Profile_GB</cstring>
@@ -466,68 +434,44 @@
466 <name>name</name> 434 <name>name</name>
467 <cstring>ToProfile_BUT</cstring> 435 <cstring>ToProfile_BUT</cstring>
468 </property> 436 </property>
469 <property stdset="1"> 437 <property stdset="1">
470 <name>text</name> 438 <name>text</name>
471 <string>Profile ...</string> 439 <string>Profile ...</string>
472 </property> 440 </property>
473 </widget> 441 </widget>
474 </hbox> 442 </hbox>
475 </widget> 443 </widget>
476 </vbox> 444 </vbox>
477 </widget> 445 </widget>
478 </vbox> 446 </vbox>
479</widget> 447</widget>
480<connections> 448<connections>
481 <connection> 449 <connection>
482 <sender>Add_TB</sender>
483 <signal>clicked()</signal>
484 <receiver>NetworkSettingsGUI</receiver>
485 <slot>SLOT_AddNode()</slot>
486 </connection>
487 <connection>
488 <sender>Delete_TB</sender> 450 <sender>Delete_TB</sender>
489 <signal>clicked()</signal> 451 <signal>clicked()</signal>
490 <receiver>NetworkSettingsGUI</receiver> 452 <receiver>NetworkSettingsGUI</receiver>
491 <slot>SLOT_DeleteNode()</slot> 453 <slot>SLOT_DeleteNode()</slot>
492 </connection> 454 </connection>
493 <connection> 455 <connection>
494 <sender>CheckState_TB</sender> 456 <sender>CheckState_TB</sender>
495 <signal>clicked()</signal> 457 <signal>clicked()</signal>
496 <receiver>NetworkSettingsGUI</receiver> 458 <receiver>NetworkSettingsGUI</receiver>
497 <slot>SLOT_CheckState()</slot> 459 <slot>SLOT_CheckState()</slot>
498 </connection> 460 </connection>
499 <connection> 461 <connection>
500 <sender>Enable_TB</sender>
501 <signal>clicked()</signal>
502 <receiver>NetworkSettingsGUI</receiver>
503 <slot>SLOT_Enable()</slot>
504 </connection>
505 <connection>
506 <sender>Connect_TB</sender>
507 <signal>clicked()</signal>
508 <receiver>NetworkSettingsGUI</receiver>
509 <slot>SLOT_Connect()</slot>
510 </connection>
511 <connection>
512 <sender>On_TB</sender>
513 <signal>clicked()</signal>
514 <receiver>NetworkSettingsGUI</receiver>
515 <slot>SLOT_On()</slot>
516 </connection>
517 <connection>
518 <sender>GenConfig_TB</sender> 462 <sender>GenConfig_TB</sender>
519 <signal>clicked()</signal> 463 <signal>clicked()</signal>
520 <receiver>NetworkSettingsGUI</receiver> 464 <receiver>NetworkSettingsGUI</receiver>
521 <slot>SLOT_GenerateConfig()</slot> 465 <slot>SLOT_GenerateConfig()</slot>
522 </connection> 466 </connection>
523 <connection> 467 <connection>
524 <sender>Profiles_LB</sender> 468 <sender>Profiles_LB</sender>
525 <signal>clicked(QListBoxItem*)</signal> 469 <signal>clicked(QListBoxItem*)</signal>
526 <receiver>NetworkSettingsGUI</receiver> 470 <receiver>NetworkSettingsGUI</receiver>
527 <slot>SLOT_ShowNode( QListBoxItem*)</slot> 471 <slot>SLOT_ShowNode( QListBoxItem*)</slot>
528 </connection> 472 </connection>
529 <connection> 473 <connection>
530 <sender>Profiles_LB</sender> 474 <sender>Profiles_LB</sender>
531 <signal>currentChanged(QListBoxItem*)</signal> 475 <signal>currentChanged(QListBoxItem*)</signal>
532 <receiver>NetworkSettingsGUI</receiver> 476 <receiver>NetworkSettingsGUI</receiver>
533 <slot>SLOT_ShowNode( QListBoxItem*)</slot> 477 <slot>SLOT_ShowNode( QListBoxItem*)</slot>
@@ -538,35 +482,53 @@
538 <receiver>NetworkSettingsGUI</receiver> 482 <receiver>NetworkSettingsGUI</receiver>
539 <slot>SLOT_EditNode( QListBoxItem *)</slot> 483 <slot>SLOT_EditNode( QListBoxItem *)</slot>
540 </connection> 484 </connection>
541 <connection> 485 <connection>
542 <sender>ToProfile_BUT</sender> 486 <sender>ToProfile_BUT</sender>
543 <signal>clicked()</signal> 487 <signal>clicked()</signal>
544 <receiver>NetworkSettingsGUI</receiver> 488 <receiver>NetworkSettingsGUI</receiver>
545 <slot>SLOT_ToProfile()</slot> 489 <slot>SLOT_ToProfile()</slot>
546 </connection> 490 </connection>
547 <connection> 491 <connection>
548 <sender>ToMessages_BUT</sender> 492 <sender>ToMessages_BUT</sender>
549 <signal>clicked()</signal> 493 <signal>clicked()</signal>
550 <receiver>NetworkSettingsGUI</receiver> 494 <receiver>NetworkSettingsGUI</receiver>
551 <slot>SLOT_ToMessages()</slot> 495 <slot>SLOT_ToMessages()</slot>
552 </connection> 496 </connection>
553 <connection> 497 <connection>
554 <sender>Disconnect_TB</sender> 498 <sender>Add_TB</sender>
499 <signal>clicked()</signal>
500 <receiver>NetworkSettingsGUI</receiver>
501 <slot>SLOT_AddNode()</slot>
502 </connection>
503 <connection>
504 <sender>Disable_TB</sender>
505 <signal>toggled(bool)</signal>
506 <receiver>NetworkSettingsGUI</receiver>
507 <slot>SLOT_Disable(bool)</slot>
508 </connection>
509 <connection>
510 <sender>Down_TB</sender>
511 <signal>clicked()</signal>
512 <receiver>NetworkSettingsGUI</receiver>
513 <slot>SLOT_Down()</slot>
514 </connection>
515 <connection>
516 <sender>Up_TB</sender>
555 <signal>clicked()</signal> 517 <signal>clicked()</signal>
556 <receiver>NetworkSettingsGUI</receiver> 518 <receiver>NetworkSettingsGUI</receiver>
557 <slot>SLOT_Disconnect()</slot> 519 <slot>SLOT_Up()</slot>
558 </connection> 520 </connection>
559 <slot access="public">SLOT_AddNode()</slot> 521 <slot access="public">SLOT_AddNode()</slot>
560 <slot access="public">SLOT_CheckState()</slot> 522 <slot access="public">SLOT_CheckState()</slot>
561 <slot access="public">SLOT_Connect()</slot>
562 <slot access="public">SLOT_DeleteNode()</slot> 523 <slot access="public">SLOT_DeleteNode()</slot>
524 <slot access="public">SLOT_Disable(bool)</slot>
563 <slot access="public">SLOT_EditNode( QListBoxItem *)</slot> 525 <slot access="public">SLOT_EditNode( QListBoxItem *)</slot>
564 <slot access="public">SLOT_Enable()</slot>
565 <slot access="public">SLOT_GenerateConfig()</slot> 526 <slot access="public">SLOT_GenerateConfig()</slot>
566 <slot access="public">SLOT_On()</slot> 527 <slot access="public">SLOT_SetState(int)</slot>
567 <slot access="public">SLOT_ShowNode( QListBoxItem*)</slot> 528 <slot access="public">SLOT_ShowNode( QListBoxItem*)</slot>
568 <slot access="public">SLOT_ToMessages()</slot> 529 <slot access="public">SLOT_ToMessages()</slot>
569 <slot access="public">SLOT_ToProfile()</slot> 530 <slot access="public">SLOT_ToProfile()</slot>
570 <slot access="public">SLOT_Disconnect()</slot> 531 <slot access="public">SLOT_Up()</slot>
532 <slot access="public">SLOT_Down()</slot>
571</connections> 533</connections>
572</UI> 534</UI>
diff --git a/noncore/settings/networksettings2/nsdata.cpp b/noncore/settings/networksettings2/nsdata.cpp
index e2dd5b5..698a941 100644
--- a/noncore/settings/networksettings2/nsdata.cpp
+++ b/noncore/settings/networksettings2/nsdata.cpp
@@ -1,62 +1,103 @@
1#include <stdlib.h> 1#include <stdlib.h>
2#include <opie2/odebug.h>
2#include <qpe/qpeapplication.h> 3#include <qpe/qpeapplication.h>
3#include <qtextstream.h> 4#include <qtextstream.h>
4#include <qdir.h> 5#include <qdir.h>
5#include <qfile.h> 6#include <qfile.h>
6#include <qfileinfo.h> 7#include <qfileinfo.h>
7 8
8#include "nsdata.h" 9#include "nsdata.h"
9#include <asdevice.h> 10#include <netnode.h>
10#include <resources.h> 11#include <resources.h>
11 12
12static QString CfgFile; 13static QString CfgFile;
13 14
14NetworkSettingsData::NetworkSettingsData( void ) { 15NetworkSettingsData::NetworkSettingsData( void ) {
15 // init global resources structure 16 // init global resources structure
16 new TheNSResources(); 17 new TheNSResources();
17 18
18 if( ! NSResources->userKnown() ) { 19 if( ! NSResources->userKnown() ) {
19 Log(( "Cannot detect qpe user HOME=\"%s\" USER=\"%s\"\n", 20 Log(( "Cannot detect qpe user HOME=\"%s\" USER=\"%s\"\n",
20 NSResources->currentUser().HomeDir.latin1(), 21 NSResources->currentUser().HomeDir.latin1(),
21 NSResources->currentUser().UserName.latin1() )); 22 NSResources->currentUser().UserName.latin1() ));
22 return; 23 return;
23 } 24 }
24 25
25 CfgFile.sprintf( "%s/Settings/NS2.conf", 26 CfgFile.sprintf( "%s/Settings/NS2.conf",
26 NSResources->currentUser().HomeDir.latin1() ); 27 NSResources->currentUser().HomeDir.latin1() );
27 Log(( "Cfg from %s\n", CfgFile.latin1() )); 28 Log(( "Cfg from %s\n", CfgFile.latin1() ));
28 29
29 // load settings 30 // load settings
30 IsModified = 0;
31 loadSettings(); 31 loadSettings();
32
33 // assign interfaces by scanning /tmp/profile-%s.Up files
34 { QDir D( "/tmp" );
35 QFile * F = new QFile;
36 int profilenr;
37 QString interfacename;
38 QTextStream TS ( F );
39
40 QStringList SL = D.entryList( "profile-*.up");
41
42 Log(( "System reports %d interfaces. Found %d up\n",
43 NSResources->system().interfaces().count(),
44 SL.count() ));
45
46 for ( QStringList::Iterator it = SL.begin();
47 it != SL.end();
48 ++it ) {
49 profilenr = atol( (*it).mid( 8 ).latin1() );
50 // read the interface store int 'up'
51 F->setName( D.path() + "/" + (*it) );
52 if( F->open( IO_ReadOnly ) ) {
53 NodeCollection * NC;
54 interfacename = TS.readLine();
55 F->close();
56
57 Log(( "Assign interface %s to Profile nr %d\n",
58 interfacename.latin1(), profilenr ));
59
60 NC = NSResources->getConnection( profilenr );
61 if( NC ) {
62 NC->assignInterface(
63 NSResources->system().findInterface( interfacename ) );
64 } else {
65 Log(( "Profile nr %d no longer defined\n",
66 profilenr ));
67 }
68 }
69 }
70 }
32} 71}
33 72
34// saving is done by caller 73// saving is done by caller
35NetworkSettingsData::~NetworkSettingsData( void ) { 74NetworkSettingsData::~NetworkSettingsData( void ) {
36 delete NSResources; 75 delete NSResources;
37} 76}
38 77
39void NetworkSettingsData::loadSettings( void ) { 78void NetworkSettingsData::loadSettings( void ) {
40 QString Line, S; 79 QString Line, S;
41 QString Attr, Value; 80 QString Attr, Value;
42 long idx; 81 long idx;
43 82
44 QFile F( CfgFile ); 83 QFile F( CfgFile );
45 QTextStream TS( &F ); 84 QTextStream TS( &F );
46 85
86 ForceModified = 0;
87
47 do { 88 do {
48 89
49 if( ! F.open(IO_ReadOnly) ) 90 if( ! F.open(IO_ReadOnly) )
50 break; 91 break;
51 92
52 /* load the file -> 93 /* load the file ->
53 94
54 FORMAT : 95 FORMAT :
55 96
56 [NETNODETYPE] 97 [NETNODETYPE]
57 Entries ... 98 Entries ...
58 <EMPTYLINE> 99 <EMPTYLINE>
59 [connection] 100 [connection]
60 Name=Name 101 Name=Name
61 Node=Name 102 Node=Name
62 <EMPTYLINE> 103 <EMPTYLINE>
@@ -72,37 +113,35 @@ void NetworkSettingsData::loadSettings( void ) {
72 if( ! NSResources ) { 113 if( ! NSResources ) {
73 continue; 114 continue;
74 } 115 }
75 116
76 if( S == "connection" ) { 117 if( S == "connection" ) {
77 // load connections -> collections of nodes 118 // load connections -> collections of nodes
78 NodeCollection * NC = new NodeCollection( TS ); 119 NodeCollection * NC = new NodeCollection( TS );
79 NSResources->addConnection( NC ); 120 NSResources->addConnection( NC );
80 } else { 121 } else {
81 ANetNode * NN = 0; 122 ANetNode * NN = 0;
82 ANetNodeInstance* NNI = 0; 123 ANetNodeInstance* NNI = 0;
83 if( S.startsWith( "nodetype " ) ) { 124 if( S.startsWith( "nodetype " ) ) {
84 S = S.mid( 9, S.length()-9 ); 125 S = S.mid( 9, S.length()-9 );
85 S = deQuote(S); 126 S = deQuote(S);
86 // try to find netnode 127 // try to find netnode
87 NN = NSResources->findNetNode( S ); 128 NN = NSResources->findNetNode( S );
88 Log( ( "Node %s : %p\n", S.latin1(), NN ) );
89 } else { 129 } else {
90 // try to find instance 130 // try to find instance
91 NNI = NSResources->createNodeInstance( S ); 131 NNI = NSResources->createNodeInstance( S );
92 Log( ( "NodeInstance %s : %p\n", S.latin1(), NNI ));
93 } 132 }
94 133
95 if( NN == 0 && NNI == 0 ) { 134 if( NN == 0 && NNI == 0 ) {
96 LeftOvers.append( Line ); 135 LeftOvers.append( Line );
97 } 136 }
98 137
99 do { 138 do {
100 S = Line = TS.readLine(); 139 S = Line = TS.readLine();
101 140
102 if( NN || NNI ) { 141 if( NN || NNI ) {
103 if( S.isEmpty() ) { 142 if( S.isEmpty() ) {
104 // empty line 143 // empty line
105 break; 144 break;
106 } 145 }
107 idx = S.find( '=' ); 146 idx = S.find( '=' );
108 if( idx > 0 ) { 147 if( idx > 0 ) {
@@ -125,35 +164,39 @@ void NetworkSettingsData::loadSettings( void ) {
125 } else { 164 } else {
126 // set the attribute 165 // set the attribute
127 NNI->setAttribute( Attr, Value ); 166 NNI->setAttribute( Attr, Value );
128 } 167 }
129 } else { 168 } else {
130 LeftOvers.append( Line ); 169 LeftOvers.append( Line );
131 // add empty line too as delimiter 170 // add empty line too as delimiter
132 if( S.isEmpty() ) { 171 if( S.isEmpty() ) {
133 // empty line 172 // empty line
134 break; 173 break;
135 } 174 }
136 } 175 }
137 } while( 1 ); 176 } while( 1 );
138 177
139 if( NNI ) { 178 if( NNI ) {
140 // loading from file -> exists 179 // loading from file -> exists
180 Log( ( "NodeInstance %s : %p\n", NNI->name(), NNI ));
141 NNI->setNew( FALSE ); 181 NNI->setNew( FALSE );
142 NSResources->addNodeInstance( NNI ); 182 NSResources->addNodeInstance( NNI );
143 } 183 }
184 if( NN ) {
185 Log( ( "Node %s : %p\n", NN->name(), NN ) );
186 }
144 } 187 }
145 } 188 }
146 189
147 } while( 0 ); 190 } while( 0 );
148 191
149} 192}
150 193
151QString NetworkSettingsData::saveSettings( void ) { 194QString NetworkSettingsData::saveSettings( void ) {
152 QString ErrS = ""; 195 QString ErrS = "";
153 196
154 if( ! isModified() ) 197 if( ! isModified() )
155 return ErrS; 198 return ErrS;
156 199
157 QString S; 200 QString S;
158 QFile F( CfgFile + ".bup" ); 201 QFile F( CfgFile + ".bup" );
159 202
@@ -207,272 +250,345 @@ QString NetworkSettingsData::saveSettings( void ) {
207 NNI->saveAttributes( TS ); 250 NNI->saveAttributes( TS );
208 TS << endl; 251 TS << endl;
209 } 252 }
210 253
211 TS << "[connection]" << endl; 254 TS << "[connection]" << endl;
212 it.current()->save(TS); 255 it.current()->save(TS);
213 } 256 }
214 } 257 }
215 258
216 QDir D("."); 259 QDir D(".");
217 D.rename( CfgFile + ".bup", CfgFile ); 260 D.rename( CfgFile + ".bup", CfgFile );
218 261
219 // 262 //
220 // proper files AND system files regenerated 263 // proper files AND system files regenerated
221 // 264 //
222 265
223 setModified( 0 ); 266
267 for( QDictIterator<NodeCollection> it(NSResources->connections());
268 it.current();
269 ++it ) {
270 it.current()->setModified( 0 );
271 }
272
224 return ErrS; 273 return ErrS;
225} 274}
226 275
227QString NetworkSettingsData::generateSettings( void ) { 276QString NetworkSettingsData::generateSettings( void ) {
228 QString S = ""; 277 QString S = "";
229 Name2SystemFile_t & SFM = NSResources->systemFiles(); 278 Name2SystemFile_t & SFM = NSResources->systemFiles();
230 Name2Connection_t & M = NSResources->connections(); 279 Name2Connection_t & M = NSResources->connections();
231 NodeCollection * NC; 280 NodeCollection * NC;
232 ANetNodeInstance * NNI; 281 ANetNodeInstance * NNI;
233 ANetNodeInstance * FirstWithData; 282 ANetNodeInstance * FirstWithData;
234 SystemFile * SF; 283 RuntimeInfo * CurDev;
235 AsDevice * CurDev;
236 ANetNode * NN, * CurDevNN = 0; 284 ANetNode * NN, * CurDevNN = 0;
237 long NoOfDevs; 285 long NoOfDevs;
238 long DevCtStart; 286 long DevCtStart;
239 bool needToGenerate; 287 bool needToGenerate;
240 288
241 // regenerate system files 289 // regenerate system files
242 Log( ( "Generating settings from %s\n", CfgFile.latin1() )); 290 Log( ( "Generating settings from %s\n", CfgFile.latin1() ));
243 291
244 // 292 for( QDictIterator<NetNode_t> nnit( NSResources->netNodes() );
245 // generate files proper to each netnodeinstance 293 nnit.current();
246 // 294 ++nnit ) {
247 { Name2Instance_t & NNIs = NSResources->netNodeInstances(); 295 { QStringList SL;
248 296 bool FirstItem = 1;
249 for( QDictIterator<ANetNodeInstance> NNIIt(NNIs); 297 bool Generated = 0;
250 NNIIt.current(); 298
251 ++NNIIt ) { 299 CurDevNN = nnit.current()->NetNode;
252 // for all nodes find those that are modified 300 SL = CurDevNN->properFiles();
253 NNI = NNIIt.current(); 301
254 302 for ( QStringList::Iterator it = SL.begin();
255 { // get list of proper files for this nodeclass (if any) 303 it != SL.end();
256 QStringList * PF = NNI->nodeClass()->properFiles(); 304 ++it ) {
257 305
258 if( PF ) { 306 Generated = 0;
259 for ( QStringList::Iterator it = PF->begin(); 307 FirstItem = 1;
260 it != PF->end(); 308 // iterate over NNI's of this class
261 ++it ) { 309 for( QDictIterator<ANetNodeInstance> nniit(
262 QFile * F = NNI->openFile( (*it) ); 310 NSResources->netNodeInstances() );
263 if( F ) { 311 nniit.current();
264 QTextStream TS( F ); 312 ++nniit ) {
265 if( NNI->generateFile( (*it), F->name(), TS, -1 ) == 2 ) { 313 if( nniit.current()->nodeClass() != CurDevNN )
266 // problem generating 314 // different class
315 continue;
316
317 // open proper file
318 { SystemFile SF( (*it) );
319
320 if( ! CurDevNN->openFile( SF, nniit.current()) ) {
321 // cannot open
322 S = qApp->translate( "NetworkSettings",
323 "<p>Cannot open proper file \"%1\" for node \"%2\"</p>" ).
324 arg( (*it) ).arg( CurDevNN->name() );
325 return S;
326 }
327
328 if( ! SF.open() ) {
329 S = qApp->translate( "NetworkSettings",
330 "<p>Cannot open proper file \"%1\" for node \"%2\"</p>" ).
331 arg( (*it) ).arg( CurDevNN->name() );
332 return S;
333 }
334
335 // preamble on first
336 if( FirstItem ) {
337 if( CurDevNN->generatePreamble( SF ) == 2 ) {
267 S = qApp->translate( "NetworkSettings", 338 S = qApp->translate( "NetworkSettings",
268 "<p>Cannot generate files proper to \"%1\"</p>" ). 339 "<p>Error in section \"preamble\" for proper file \"%1\" and node \"%2\"</p>" ).
269 arg(NNI->nodeClass()->name()) ; 340 arg( (*it) ).
270 delete F; 341 arg( CurDevNN->name() );
271 return S; 342 return S;
272 } 343 }
273 delete F; 344 }
345 FirstItem = 0;
346 Generated = 1;
347
348 // item specific
349 if( nniit.current()->generateFile( SF, -1 ) == 2 ) {
350 S = qApp->translate( "NetworkSettings",
351 "<p>Error in section for node \"%1\" for proper file \"%2\" and node class \"%3\"</p>" ).
352 arg( nniit.current()->name() ).
353 arg( (*it) ).
354 arg( CurDevNN->name() );
355 return S;
274 } 356 }
275 } 357 }
276 } 358 }
359
360 if( Generated ) {
361 SystemFile SF( (*it) );
362
363 if( CurDevNN->openFile( SF, 0 ) &&
364 ! SF.path().isEmpty()
365 ) {
366
367 if( ! SF.open() ) {
368 S = qApp->translate( "NetworkSettings",
369 "<p>Cannot open proper file \"%1\" for node \"%2\"</p>" ).
370 arg( (*it) ).arg( CurDevNN->name() );
371 return S;
372 }
373
374 if( CurDevNN->generatePostamble( SF ) == 2 ) {
375 S = qApp->translate( "NetworkSettings",
376 "<p>Error in section \"postamble\" for proper file \"%1\" and node \"%2\"</p>" ).
377 arg( (*it) ).
378 arg( CurDevNN->name() );
379 return S;
380 }
381 } // no postamble
382 }
277 } 383 }
278 } 384 }
279 } 385 }
280 386
281 // 387 //
282 // generate all system files 388 // generate all registered files
283 // 389 //
284 for( QDictIterator<SystemFile> sfit(SFM); 390 for( QDictIterator<SystemFile> sfit(SFM);
285 sfit.current(); 391 sfit.current();
286 ++sfit ) { 392 ++sfit ) {
393 SystemFile * SF;
394
287 SF = sfit.current(); 395 SF = sfit.current();
288 396
289 // reset all 397 // reset all
290 for( QDictIterator<NetNode_t> nnit( NSResources->netNodes() ); 398 for( QDictIterator<NetNode_t> nnit( NSResources->netNodes() );
291 nnit.current(); 399 nnit.current();
292 ++nnit ) { 400 ++nnit ) {
293 nnit.current()->NetNode->setDone(0); 401 nnit.current()->NetNode->setDone(0);
294 } 402 }
295 403
296 for( QDictIterator<ANetNodeInstance> nniit( 404 for( QDictIterator<ANetNodeInstance> nniit(
297 NSResources->netNodeInstances() ); 405 NSResources->netNodeInstances() );
298 nniit.current(); 406 nniit.current();
299 ++nniit ) { 407 ++nniit ) {
300 nniit.current()->setDone(0); 408 nniit.current()->setDone(0);
301 } 409 }
302 410
303 for( QDictIterator<NodeCollection> ncit(M); 411 for( QDictIterator<NodeCollection> ncit(M);
304 ncit.current(); 412 ncit.current();
305 ++ncit ) { 413 ++ncit ) {
306 ncit.current()->setDone(0); 414 ncit.current()->setDone(0);
307 } 415 }
308 416
309 Log( ( "Generating %s\n", SF->name().latin1() )); 417 Log( ( "Generating system file %s\n", SF->name().latin1() ));
310 418
311 needToGenerate = 0; 419 needToGenerate = 0;
312 420
313 // are there netnodes that have instances and need 421 // are there netnodes that have instances and need
314 // to write data in this system file ? 422 // to write data in this system file ?
315 for( QDictIterator<NetNode_t> nnit( NSResources->netNodes() ); 423 for( QDictIterator<NetNode_t> nnit( NSResources->netNodes() );
316 ! needToGenerate && nnit.current(); 424 ! needToGenerate && nnit.current();
317 ++nnit ) { 425 ++nnit ) {
318 426
319 NN = nnit.current()->NetNode; 427 NN = nnit.current()->NetNode;
320 428
321 if( NN->hasDataForFile( SF->name() ) ) { 429 if( NN->hasDataForFile( *SF ) ) {
322 // netnode can have data 430 // netnode can have data
323 431
324 // are there instances of this node ? 432 // are there instances of this node ?
325 for( QDictIterator<ANetNodeInstance> nniit( 433 for( QDictIterator<ANetNodeInstance> nniit(
326 NSResources->netNodeInstances() ); 434 NSResources->netNodeInstances() );
327 ! needToGenerate && nniit.current(); 435 ! needToGenerate && nniit.current();
328 ++nniit ) { 436 ++nniit ) {
329 if( nniit.current()->nodeClass() == NN ) { 437 if( nniit.current()->nodeClass() == NN ) {
330 // yes 438 // yes
331 Log(("Node %s has data\n", 439 Log(("Node %s has data\n",
332 nniit.current()->name() )); 440 nniit.current()->name() ));
333 needToGenerate = 1; 441 needToGenerate = 1;
334 break; 442 break;
335 } 443 }
336 } 444 }
337 } 445 }
338 } 446 }
339 447
340 if( ! needToGenerate ) { 448 if( ! needToGenerate ) {
341 // no instances found that might need to write data 449 // no instances found that might need to write data
342 // in this systemfile 450 // in this systemfile
343 Log(("No nodes for systemfile %s\n", SF->name().latin1() )); 451 Log(("No nodes for systemfile %s\n", SF->name().latin1() ));
344 continue; 452 continue;
345 } 453 }
346 454
347 // ok generate this system file 455 // ok generate this system file
348 SF->open(); 456 if( ! SF->open() ) {
457 S = qApp->translate( "NetworkSettings",
458 "<p>Cannot open system file \"%1\"</p>" ).
459 arg( SF->name() );
460 return S;
461 }
349 462
350 // global presection for this system file 463 // global presection for this system file
351 if( ! SF->preSection() ) { 464 if( ! SF->preSection() ) {
352 S = qApp->translate( "NetworkSettings", 465 S = qApp->translate( "NetworkSettings",
353 "<p>Error in section \"Preamble\" for file \"%1\"</p>" ). 466 "<p>Error in section \"Preamble\" for file \"%1\"</p>" ).
354 arg( SF->name() ); 467 arg( SF->name() );
355 return S; 468 return S;
356 } 469 }
357 470
358 // find connections that want to write to this file 471 // find connections that want to write to this file
359 for( QDictIterator<NodeCollection> ncit(M); 472 for( QDictIterator<NodeCollection> ncit(M);
360 ncit.current(); 473 ncit.current();
361 ++ncit ) { 474 ++ncit ) {
362 475
363 NC = ncit.current(); 476 NC = ncit.current();
364 477
365 if( NC->done() ) { 478 if( NC->done() ) {
366 // already done 479 // already done
367 continue; 480 continue;
368 } 481 }
369 482
370 if( ! NC->hasDataForFile( SF->name() ) ) { 483 if( ! NC->hasDataForFile( *SF ) ) {
371 // no data 484 // no data
372 continue; 485 continue;
373 } 486 }
374 487
375 Log(("Generating %s for connection %s\n", 488 Log(("Generating %s for connection %s\n",
376 SF->name().latin1(), NC->name().latin1() )); 489 SF->name().latin1(), NC->name().latin1() ));
377 // find highest item that wants to write data to this file 490 // find highest item that wants to write data to this file
378 FirstWithData = NC->firstWithDataForFile( SF->name() ); 491 FirstWithData = NC->firstWithDataForFile( *SF );
379 492
380 // find device on which this connection works 493 // find device on which this connection works
381 CurDev = NC->device(); 494 CurDev = NC->device();
382 // class of that node 495 // class of that node
383 CurDevNN = CurDev->netNode()->nodeClass(); 496 CurDevNN = CurDev->netNode()->nodeClass();
384 497
385 Log(( "%s is done %d\n",
386 FirstWithData->nodeClass()->name(),
387 FirstWithData->nodeClass()->done() ));
388
389 if( ! FirstWithData->nodeClass()->done() ) { 498 if( ! FirstWithData->nodeClass()->done() ) {
390 // generate fixed part 499 // generate fixed part
391 if( ! SF->preDeviceSection( CurDevNN ) ) { 500 if( ! SF->preDeviceSection( CurDevNN ) ) {
392 S = qApp->translate( "NetworkSettings", 501 S = qApp->translate( "NetworkSettings",
393 "<p>Error in section \"Pre-Device\" for file \"%1\"</p>" ). 502 "<p>Error in section \"Pre-Device\" for file \"%1\"</p>" ).
394 arg( SF->name() ); 503 arg( SF->name() );
395 return S; 504 return S;
396 } 505 }
397 506
398 if( FirstWithData->nodeClass()->generateFile( 507 if( FirstWithData->nodeClass()->generateFile(
399 SF->name(), SF->path(), *SF, -1 ) == 2 ) { 508 *SF,
509 FirstWithData,
510 -2 ) == 2 ) {
400 S = qApp->translate( "NetworkSettings", 511 S = qApp->translate( "NetworkSettings",
401 "<p>Error in section \"Common\" for file \"%1\" and node \"%2\"</p>" ). 512 "<p>Error in section \"Common\" for file \"%1\" and node \"%2\"</p>" ).
402 arg( SF->name() ). 513 arg( SF->name() ).
403 arg( CurDevNN->name() ); 514 arg( CurDevNN->name() );
404 return S; 515 return S;
405 } 516 }
406 FirstWithData->nodeClass()->setDone( 1 ); 517 FirstWithData->nodeClass()->setDone( 1 );
518 Log(( "Systemfile %s for node instance %s is done\n",
519 SF->name().latin1(),
520 FirstWithData->name() ));
407 } 521 }
408 522
409 NoOfDevs = 0; 523 NoOfDevs = 0;
410 DevCtStart = -1; 524 DevCtStart = -1;
411 525
412 if( SF->knowsDeviceInstances() ) { 526 if( SF->knowsDeviceInstances() ) {
413 DevCtStart = 0; 527 DevCtStart = 0;
414 NoOfDevs = CurDevNN->instanceCount(); 528 NoOfDevs = CurDevNN->instanceCount();
415 } 529 }
416 530
417 Log(( "Node %s is done %d\n",
418 CurDev->netNode()->nodeClass()->name(),
419 CurDev->netNode()->nodeClass()->done() ));
420
421 if( ! CurDev->netNode()->nodeClass()->done() ) { 531 if( ! CurDev->netNode()->nodeClass()->done() ) {
422 // first time this device is handled 532 // first time this device is handled
423 // generate common device specific part 533 // generate common device specific part
424 for( int i = DevCtStart; i < NoOfDevs ; i ++ ) { 534 for( int i = DevCtStart; i < NoOfDevs ; i ++ ) {
425 535
426 if( FirstWithData->nodeClass()->generateFile( 536 if( FirstWithData->nodeClass()->generateFile(
427 SF->name(), SF->path(), *SF, CurDev->netNode(), i ) == 2 ) { 537 *SF, CurDev->netNode(), i ) == 2 ) {
428 S = qApp->translate( "NetworkSettings", 538 S = qApp->translate( "NetworkSettings",
429 "<p>Error in section \"Device\" for file \"%1\" and node \"%2\"</p>" ). 539 "<p>Error in section \"Device\" for file \"%1\" and node \"%2\"</p>" ).
430 arg( SF->name() ). 540 arg( SF->name() ).
431 arg( CurDevNN->name() ); 541 arg( CurDevNN->name() );
432 return S; 542 return S;
433 } 543 }
434 } 544 }
435 CurDev->netNode()->nodeClass()->setDone( 1 ); 545 CurDev->netNode()->nodeClass()->setDone( 1 );
546
547 Log(( "Systemfile %s for Nodeclass %s is done\n",
548 SF->name().latin1(),
549 CurDev->netNode()->nodeClass()->name()
550 ));
436 } 551 }
437 552
438 // generate profile specific info 553 // generate profile specific info
439 // for all nodeconnections that work on the same device 554 // for all nodeconnections that work on the same device
440 for( QDictIterator<NodeCollection> ncit2(M); 555 for( QDictIterator<NodeCollection> ncit2(M);
441 ncit2.current(); 556 ncit2.current();
442 ++ncit2 ) { 557 ++ncit2 ) {
443 558
444 if( ncit2.current()->device() != CurDev ) { 559 if( ncit2.current()->device() != CurDev ) {
445 // different device 560 // different device
446 continue; 561 continue;
447 } 562 }
448 563
449 Log(("Connection %s of same family\n", ncit2.current()->name().latin1() )); 564 Log(("Connection %s of family %s\n",
565 ncit2.current()->name().latin1(),
566 CurDev->name() ));
450 // generate 567 // generate
451 NNI = ncit2.current()->firstWithDataForFile( SF->name() ); 568 NNI = ncit2.current()->firstWithDataForFile( *SF );
452 for( int i = DevCtStart; i < NoOfDevs ; i ++ ) { 569 for( int i = DevCtStart; i < NoOfDevs ; i ++ ) {
453 if( ! SF->preNodeSection( NNI, i ) ) { 570 if( ! SF->preNodeSection( NNI, i ) ) {
454 S = qApp->translate( "NetworkSettings", 571 S = qApp->translate( "NetworkSettings",
455 "<p>Error in \"Pre-Node Part\" for file \"%1\" and node \"%2\"</p>" ). 572 "<p>Error in \"Pre-Node Part\" for file \"%1\" and node \"%2\"</p>" ).
456 arg( SF->name() ). 573 arg( SF->name() ).
457 arg( CurDevNN->name() ); 574 arg( CurDevNN->name() );
458 return S; 575 return S;
459 } 576 }
460 577
461 switch( NNI->generateFile( 578 switch( NNI->generateFile( *SF, i ) ) {
462 SF->name(), SF->path(), *SF, i ) ) {
463 case 0 : 579 case 0 :
464 (*SF) << endl; 580 (*SF) << endl;
465 break; 581 break;
466 case 1 : 582 case 1 :
467 break; 583 break;
468 case 2 : 584 case 2 :
469 S = qApp->translate( "NetworkSettings", 585 S = qApp->translate( "NetworkSettings",
470 "<p>Error in section \"Node\" for file \"%1\" and node \"%2\"</p>" ). 586 "<p>Error in section \"Node\" for file \"%1\" and node \"%2\"</p>" ).
471 arg( SF->name() ). 587 arg( SF->name() ).
472 arg( CurDevNN->name() ); 588 arg( CurDevNN->name() );
473 return S; 589 return S;
474 } 590 }
475 591
476 if( ! SF->postNodeSection( NNI, i ) ) { 592 if( ! SF->postNodeSection( NNI, i ) ) {
477 S = qApp->translate( "NetworkSettings", 593 S = qApp->translate( "NetworkSettings",
478 "<p>Error in \"Post-Node Part\" for file \"%1\" and node \"%2\"</p>" ). 594 "<p>Error in \"Post-Node Part\" for file \"%1\" and node \"%2\"</p>" ).
@@ -556,48 +672,54 @@ bool NetworkSettingsData::canStart( const char * Interface ) {
556 break; 672 break;
557 default : // need to ask user ? 673 default : // need to ask user ?
558 return 1; 674 return 1;
559 } 675 }
560 676
561 if( NC ) { 677 if( NC ) {
562 switch( NC->state() ) { 678 switch( NC->state() ) {
563 case Unchecked : 679 case Unchecked :
564 case Unknown : 680 case Unknown :
565 case Unavailable : 681 case Unavailable :
566 case Disabled : 682 case Disabled :
567 // this profile does not allow interface to be UP 683 // this profile does not allow interface to be UP
568 // -> try others 684 // -> try others
569 break; 685 break;
570 case Off : 686 case Off :
571 // try to UP the device 687 // try to UP the device
572 if( ! NC->setState( Activate ) ) { 688 { QString S= NC->setState( Activate );
573 // cannot bring device Online -> try other alters 689 if( ! S.isEmpty() ) {
574 break; 690 // could not bring device Online -> try other alters
691 Log(( "%s-c%d-disallowed : %s\n",
692 Interface, NC->number(), S.latin1() ));
693 break;
694 }
695 // interface assigned
575 } 696 }
576 // FT 697 // FT
577 case Available : 698 case Available :
578 case IsUp : // also called for 'ifdown' 699 case IsUp : // also called for 'ifdown'
579 // device is ready -> done 700 // device is ready -> done
580 Log(( "%s-c%d-allowed\n", Interface, NC->number() )); 701 Log(( "%s-c%d-allowed\n", Interface, NC->number() ));
581 printf( "%s-c%d-allowed\n", Interface, NC->number() ); 702 printf( "%s-c%d-allowed\n", Interface, NC->number() );
582 return 0; 703 return 0;
583 } 704 }
584 } 705 }
585 706
586 // if we come here no alternatives are possible 707 // if we come here no alternatives are possible
587 Log(( "%s-cnn-disallowed\n", Interface )); 708 Log(( "%s-cnn-disallowed\n", Interface ));
588 printf( "%s-cnn-disallowed\n", Interface ); 709 printf( "%s-cnn-disallowed\n", Interface );
589 return 0; 710 return 0;
590} 711}
591 712
592/* 713bool NetworkSettingsData::isModified( void ) {
593 Called by the system to regenerate config files 714 if( ForceModified )
594*/
595
596bool NetworkSettingsData::regenerate( void ) {
597 QString S = generateSettings();
598 if( ! S.isEmpty() ) {
599 fprintf( stdout, "%s\n", S.latin1() );
600 return 1; 715 return 1;
716
717 for( QDictIterator<NodeCollection> it(NSResources->connections());
718 it.current();
719 ++it ) {
720 if( it.current()->isModified() ) {
721 return 1;
722 }
601 } 723 }
602 return 0; 724 return 0;
603} 725}
diff --git a/noncore/settings/networksettings2/nsdata.h b/noncore/settings/networksettings2/nsdata.h
index 507185e..a0ae7d1 100644
--- a/noncore/settings/networksettings2/nsdata.h
+++ b/noncore/settings/networksettings2/nsdata.h
@@ -1,37 +1,34 @@
1#ifndef __NSDATA_H 1#ifndef __NSDATA_H
2#define __NSDATA_H 2#define __NSDATA_H
3 3
4#include "netnode.h" 4#include <netnode.h>
5 5
6class NetworkSettingsData { 6class NetworkSettingsData {
7 7
8public : 8public :
9 9
10 NetworkSettingsData( void ); 10 NetworkSettingsData( void );
11 ~NetworkSettingsData( void ); 11 ~NetworkSettingsData( void );
12 12
13 void loadSettings( void ); 13 void loadSettings( void );
14 QString saveSettings( void ); 14 QString saveSettings( void );
15 15
16 QString generateSettings( void ); 16 QString generateSettings( void );
17 17
18 bool isModified( void ) 18 bool isModified( void );
19 { return IsModified; } 19 inline void setModified( bool M )
20 void setModified( bool m ) 20 { ForceModified = M; }
21 { IsModified = m; }
22 21
23 QList<NodeCollection> collectPossible( const char * Interface ); 22 QList<NodeCollection> collectPossible( const char * Interface );
24 // return TRUE if we need gui to decide 23 // return TRUE if we need gui to decide
25 bool canStart( const char * Interface ); 24 bool canStart( const char * Interface );
26 bool regenerate( void );
27 25
28private : 26private :
29 27
30 bool IsModified; 28 bool ForceModified;
31 29
32 // collect strings in config file nobody wants 30 // collect strings in config file nobody wants
33 QStringList LeftOvers; 31 QStringList LeftOvers;
34
35}; 32};
36 33
37#endif 34#endif
diff --git a/noncore/settings/networksettings2/ppp/PPPAuthedit.cpp b/noncore/settings/networksettings2/ppp/PPPAuthedit.cpp
index 450d560..9403694 100644
--- a/noncore/settings/networksettings2/ppp/PPPAuthedit.cpp
+++ b/noncore/settings/networksettings2/ppp/PPPAuthedit.cpp
@@ -24,66 +24,66 @@ QString PPPAuthEdit::acceptable( void ) {
24 return tr("Login expect missing"); 24 return tr("Login expect missing");
25 if( PasswordSend_LE->text().isEmpty() ) 25 if( PasswordSend_LE->text().isEmpty() )
26 return tr("Password send missing"); 26 return tr("Password send missing");
27 if( PasswordExpect_LE->text().isEmpty() ) 27 if( PasswordExpect_LE->text().isEmpty() )
28 return tr("Password expect missing"); 28 return tr("Password expect missing");
29 } else if( PAP_Checked() ) { 29 } else if( PAP_Checked() ) {
30 if( Client_LE->text().isEmpty() ) 30 if( Client_LE->text().isEmpty() )
31 return tr("Pap/Chap/EAP client id missing"); 31 return tr("Pap/Chap/EAP client id missing");
32 if( Server_LE->text().isEmpty() ) 32 if( Server_LE->text().isEmpty() )
33 return tr("Pap/Chap/EAP server id missing"); 33 return tr("Pap/Chap/EAP server id missing");
34 if( Secret_LE->text().isEmpty() ) 34 if( Secret_LE->text().isEmpty() )
35 return tr("Pap/Chap/EAP secret id missing"); 35 return tr("Pap/Chap/EAP secret id missing");
36 } 36 }
37 return QString(); 37 return QString();
38} 38}
39 39
40bool PPPAuthEdit::commit( PPPData_t & D ) { 40bool PPPAuthEdit::commit( PPPData & D ) {
41 bool SM = 0; 41 bool SM = 0;
42 42
43 if( ( D.Auth.Mode == 0 && ! Login_RB->isChecked() ) || 43 if( ( D.Auth.Mode == 0 && ! Login_RB->isChecked() ) ||
44 ( D.Auth.Mode == 1 && ! PAP_Checked() ) || 44 ( D.Auth.Mode == 1 && ! PAP_Checked() ) ||
45 ( D.Auth.Mode == 2 && ! Terminal_RB->isChecked() ) ) { 45 ( D.Auth.Mode == 2 && ! Terminal_RB->isChecked() ) ) {
46 // mode modifed 46 // mode modifed
47 SM = 1; 47 SM = 1;
48 D.Auth.Mode = ( Login_RB->isChecked() ) ? 48 D.Auth.Mode = ( Login_RB->isChecked() ) ?
49 0 : 49 0 :
50 ( PAP_Checked() ) ? 1 : 2; 50 ( PAP_Checked() ) ? 1 : 2;
51 } 51 }
52 52
53 if( Login_RB->isChecked() ) { 53 if( Login_RB->isChecked() ) {
54 TXTM( D.Auth.Login.Expect, LoginExpect_LE, SM ); 54 TXTM( D.Auth.Login.Expect, LoginExpect_LE, SM );
55 TXTM( D.Auth.Login.Send, LoginSend_LE, SM ); 55 TXTM( D.Auth.Login.Send, LoginSend_LE, SM );
56 TXTM( D.Auth.Password.Expect, PasswordExpect_LE, SM ); 56 TXTM( D.Auth.Password.Expect, PasswordExpect_LE, SM );
57 TXTM( D.Auth.Password.Send, PasswordSend_LE, SM ); 57 TXTM( D.Auth.Password.Send, PasswordSend_LE, SM );
58 } else if( PAP_Checked() ) { 58 } else if( PAP_Checked() ) {
59 TXTM( D.Auth.Client, Client_LE, SM ); 59 TXTM( D.Auth.Client, Client_LE, SM );
60 TXTM( D.Auth.Server, Server_LE, SM ); 60 TXTM( D.Auth.Server, Server_LE, SM );
61 TXTM( D.Auth.Secret, Secret_LE, SM ); 61 TXTM( D.Auth.Secret, Secret_LE, SM );
62 if( Pap_RB->isChecked() ) { 62 if( Pap_RB->isChecked() ) {
63 D.Auth.PCEMode = 0; 63 D.Auth.PCEMode = 0;
64 } else if( Chap_RB->isChecked() ) { 64 } else if( Chap_RB->isChecked() ) {
65 D.Auth.PCEMode = 1; 65 D.Auth.PCEMode = 1;
66 } else if( EAP_RB->isChecked() ) { 66 } else if( EAP_RB->isChecked() ) {
67 D.Auth.PCEMode = 2; 67 D.Auth.PCEMode = 2;
68 } 68 }
69 } 69 }
70 return SM; 70 return SM;
71} 71}
72 72
73void PPPAuthEdit::showData( PPPData_t & D ) { 73void PPPAuthEdit::showData( PPPData & D ) {
74 74
75 switch( D.Auth.Mode ) { 75 switch( D.Auth.Mode ) {
76 case 0 : 76 case 0 :
77 Login_RB->setChecked( TRUE ); 77 Login_RB->setChecked( TRUE );
78 break; 78 break;
79 case 1 : 79 case 1 :
80 switch( D.Auth.PCEMode ) { 80 switch( D.Auth.PCEMode ) {
81 case 0 : 81 case 0 :
82 Pap_RB->setChecked( TRUE ); 82 Pap_RB->setChecked( TRUE );
83 break; 83 break;
84 case 1 : 84 case 1 :
85 Chap_RB->setChecked( TRUE ); 85 Chap_RB->setChecked( TRUE );
86 break; 86 break;
87 case 2 : 87 case 2 :
88 EAP_RB->setChecked( TRUE ); 88 EAP_RB->setChecked( TRUE );
89 break; 89 break;
diff --git a/noncore/settings/networksettings2/ppp/PPPAuthedit.h b/noncore/settings/networksettings2/ppp/PPPAuthedit.h
index 2392569..7a06657 100644
--- a/noncore/settings/networksettings2/ppp/PPPAuthedit.h
+++ b/noncore/settings/networksettings2/ppp/PPPAuthedit.h
@@ -1,17 +1,17 @@
1#include "pppdata.h" 1#include "pppdata.h"
2#include "PPPAuthGUI.h" 2#include "PPPAuthGUI.h"
3 3
4class PPPAuthEdit : public PPPAuthGUI { 4class PPPAuthEdit : public PPPAuthGUI {
5 5
6public : 6public :
7 7
8 PPPAuthEdit( QWidget * parent ); 8 PPPAuthEdit( QWidget * parent );
9 QString acceptable( void ); 9 QString acceptable( void );
10 bool commit( PPPData_t & Data ); 10 bool commit( PPPData & Data );
11 void showData( PPPData_t & Data ); 11 void showData( PPPData & Data );
12 bool PAP_Checked( void ); 12 bool PAP_Checked( void );
13 13
14 14
15private : 15private :
16 16
17}; 17};
diff --git a/noncore/settings/networksettings2/ppp/PPPDNSedit.cpp b/noncore/settings/networksettings2/ppp/PPPDNSedit.cpp
index 22f8e59..270f695 100644
--- a/noncore/settings/networksettings2/ppp/PPPDNSedit.cpp
+++ b/noncore/settings/networksettings2/ppp/PPPDNSedit.cpp
@@ -10,33 +10,33 @@
10PPPDNSEdit::PPPDNSEdit( QWidget * Parent ) : PPPDNSGUI( Parent ){ 10PPPDNSEdit::PPPDNSEdit( QWidget * Parent ) : PPPDNSGUI( Parent ){
11 11
12 Add_TB->setPixmap( NSResources->getPixmap( "add" ) ); 12 Add_TB->setPixmap( NSResources->getPixmap( "add" ) );
13 Remove_TB->setPixmap( NSResources->getPixmap( "remove" ) ); 13 Remove_TB->setPixmap( NSResources->getPixmap( "remove" ) );
14} 14}
15 15
16QString PPPDNSEdit::acceptable( void ) { 16QString PPPDNSEdit::acceptable( void ) {
17 if( DNSFixed_RB->isChecked() ) { 17 if( DNSFixed_RB->isChecked() ) {
18 if( DomainName_LE->text().isEmpty() ) 18 if( DomainName_LE->text().isEmpty() )
19 tr("Domainname needed"); 19 tr("Domainname needed");
20 if( Servers_LB->count() == 0 ) 20 if( Servers_LB->count() == 0 )
21 tr("DNS Servers needed"); 21 tr("DNS Servers needed");
22 } 22 }
23 return QString(); 23 return QString();
24} 24}
25 25
26bool PPPDNSEdit::commit( PPPData_t & D ) { 26bool PPPDNSEdit::commit( PPPData & D ) {
27 bool SM = 0; 27 bool SM = 0;
28 28
29 CBM( D.DNS.ServerAssigned, DNSServerAssigned_RB, SM ); 29 CBM( D.DNS.ServerAssigned, DNSServerAssigned_RB, SM );
30 TXTM( D.DNS.DomainName, DomainName_LE, SM ); 30 TXTM( D.DNS.DomainName, DomainName_LE, SM );
31 31
32 // new items in old ? 32 // new items in old ?
33 for ( unsigned i = 0; i < Servers_LB->count(); i++ ) { 33 for ( unsigned i = 0; i < Servers_LB->count(); i++ ) {
34 QString S; 34 QString S;
35 bool Found; 35 bool Found;
36 Found = 0; 36 Found = 0;
37 S = Servers_LB->text(i); 37 S = Servers_LB->text(i);
38 for ( unsigned j = 0; j < D.DNS.Servers.size(); j++ ) { 38 for ( unsigned j = 0; j < D.DNS.Servers.size(); j++ ) {
39 if( *(D.DNS.Servers[i]) == S ) { 39 if( *(D.DNS.Servers[i]) == S ) {
40 // still in list 40 // still in list
41 Found = 1; 41 Found = 1;
42 break; 42 break;
@@ -62,33 +62,33 @@ bool PPPDNSEdit::commit( PPPData_t & D ) {
62 } 62 }
63 if( ! Found ) { 63 if( ! Found ) {
64 // old obsolete 64 // old obsolete
65 SM = 1; 65 SM = 1;
66 delete D.DNS.Servers[j]; 66 delete D.DNS.Servers[j];
67 for( unsigned i = j+1; i < D.DNS.Servers.size(); i ++ ) { 67 for( unsigned i = j+1; i < D.DNS.Servers.size(); i ++ ) {
68 // compress array 68 // compress array
69 D.DNS.Servers[i-1] = D.DNS.Servers[i]; 69 D.DNS.Servers[i-1] = D.DNS.Servers[i];
70 } 70 }
71 // shrink 71 // shrink
72 D.DNS.Servers.resize( D.DNS.Servers.size()-1 ); 72 D.DNS.Servers.resize( D.DNS.Servers.size()-1 );
73 } 73 }
74 } 74 }
75 return SM; 75 return SM;
76} 76}
77 77
78void PPPDNSEdit::showData( PPPData_t & D) { 78void PPPDNSEdit::showData( PPPData & D) {
79 79
80 DNSServerAssigned_RB->setChecked( D.DNS.ServerAssigned ); 80 DNSServerAssigned_RB->setChecked( D.DNS.ServerAssigned );
81 81
82 DomainName_LE->setText( D.DNS.DomainName ); 82 DomainName_LE->setText( D.DNS.DomainName );
83 for( unsigned i = 0; i < D.DNS.Servers.size(); i ++ ) { 83 for( unsigned i = 0; i < D.DNS.Servers.size(); i ++ ) {
84 Servers_LB->insertItem( *(D.DNS.Servers[i]) ); 84 Servers_LB->insertItem( *(D.DNS.Servers[i]) );
85 } 85 }
86} 86}
87 87
88void PPPDNSEdit::SLOT_AddServer( void ) { 88void PPPDNSEdit::SLOT_AddServer( void ) {
89 if( ServerAddress_LE->text().isEmpty() ) 89 if( ServerAddress_LE->text().isEmpty() )
90 return; 90 return;
91 91
92 Servers_LB->insertItem( ServerAddress_LE->text() ); 92 Servers_LB->insertItem( ServerAddress_LE->text() );
93 ServerAddress_LE->setText( "" ); 93 ServerAddress_LE->setText( "" );
94} 94}
diff --git a/noncore/settings/networksettings2/ppp/PPPDNSedit.h b/noncore/settings/networksettings2/ppp/PPPDNSedit.h
index 43e0067..1ca8c21 100644
--- a/noncore/settings/networksettings2/ppp/PPPDNSedit.h
+++ b/noncore/settings/networksettings2/ppp/PPPDNSedit.h
@@ -1,20 +1,20 @@
1#include "pppdata.h" 1#include "pppdata.h"
2#include "PPPDNSGUI.h" 2#include "PPPDNSGUI.h"
3 3
4class PPPDNSEdit : public PPPDNSGUI { 4class PPPDNSEdit : public PPPDNSGUI {
5 5
6public : 6public :
7 7
8 PPPDNSEdit( QWidget * parent ); 8 PPPDNSEdit( QWidget * parent );
9 QString acceptable( void ); 9 QString acceptable( void );
10 bool commit( PPPData_t & Data ); 10 bool commit( PPPData & Data );
11 void showData( PPPData_t & Data ); 11 void showData( PPPData & Data );
12 12
13public slots : 13public slots :
14 14
15 void SLOT_AddServer( void ); 15 void SLOT_AddServer( void );
16 void SLOT_RemoveServer( void ); 16 void SLOT_RemoveServer( void );
17 17
18private : 18private :
19 19
20}; 20};
diff --git a/noncore/settings/networksettings2/ppp/PPPGUI.ui b/noncore/settings/networksettings2/ppp/PPPGUI.ui
index 777e4a9..4c79fe3 100644
--- a/noncore/settings/networksettings2/ppp/PPPGUI.ui
+++ b/noncore/settings/networksettings2/ppp/PPPGUI.ui
@@ -1,95 +1,107 @@
1<!DOCTYPE UI><UI> 1<!DOCTYPE UI><UI>
2<class>PPPGUI</class> 2<class>PPPGUI</class>
3<widget> 3<widget>
4 <class>QWidget</class> 4 <class>QWidget</class>
5 <property stdset="1"> 5 <property stdset="1">
6 <name>name</name> 6 <name>name</name>
7 <cstring>PPPGUI</cstring> 7 <cstring>PPPGUI</cstring>
8 </property> 8 </property>
9 <property stdset="1"> 9 <property stdset="1">
10 <name>geometry</name> 10 <name>geometry</name>
11 <rect> 11 <rect>
12 <x>0</x> 12 <x>0</x>
13 <y>0</y> 13 <y>0</y>
14 <width>124</width> 14 <width>528</width>
15 <height>29</height> 15 <height>345</height>
16 </rect> 16 </rect>
17 </property> 17 </property>
18 <property stdset="1"> 18 <property stdset="1">
19 <name>caption</name> 19 <name>caption</name>
20 <string>PPP</string> 20 <string>PPP</string>
21 </property> 21 </property>
22 <property> 22 <property>
23 <name>layoutMargin</name> 23 <name>layoutMargin</name>
24 </property> 24 </property>
25 <property> 25 <property>
26 <name>layoutSpacing</name> 26 <name>layoutSpacing</name>
27 </property> 27 </property>
28 <vbox> 28 <vbox>
29 <property stdset="1"> 29 <property stdset="1">
30 <name>margin</name> 30 <name>margin</name>
31 <number>2</number> 31 <number>0</number>
32 </property> 32 </property>
33 <property stdset="1"> 33 <property stdset="1">
34 <name>spacing</name> 34 <name>spacing</name>
35 <number>2</number> 35 <number>2</number>
36 </property> 36 </property>
37 <widget> 37 <widget>
38 <class>QComboBox</class> 38 <class>QComboBox</class>
39 <item> 39 <item>
40 <property> 40 <property>
41 <name>text</name> 41 <name>text</name>
42 <string>Authentication</string> 42 <string>Authentication</string>
43 </property> 43 </property>
44 </item> 44 </item>
45 <item> 45 <item>
46 <property> 46 <property>
47 <name>text</name> 47 <name>text</name>
48 <string>IP settings</string> 48 <string>IP settings</string>
49 </property> 49 </property>
50 </item> 50 </item>
51 <item> 51 <item>
52 <property> 52 <property>
53 <name>text</name> 53 <name>text</name>
54 <string>DNS Settings</string> 54 <string>DNS Settings</string>
55 </property> 55 </property>
56 </item> 56 </item>
57 <item>
58 <property>
59 <name>text</name>
60 <string>Commands</string>
61 </property>
62 </item>
63 <item>
64 <property>
65 <name>text</name>
66 <string>Dialing</string>
67 </property>
68 </item>
57 <property stdset="1"> 69 <property stdset="1">
58 <name>name</name> 70 <name>name</name>
59 <cstring>PPPOptions_CB</cstring> 71 <cstring>PPPOptions_CB</cstring>
60 </property> 72 </property>
61 </widget> 73 </widget>
62 <widget> 74 <widget>
63 <class>QWidgetStack</class> 75 <class>QWidgetStack</class>
64 <property stdset="1"> 76 <property stdset="1">
65 <name>name</name> 77 <name>name</name>
66 <cstring>Options_WS</cstring> 78 <cstring>Options_WS</cstring>
67 </property> 79 </property>
68 </widget> 80 </widget>
69 </vbox> 81 </vbox>
70</widget> 82</widget>
71<customwidgets> 83<customwidgets>
72 <customwidget> 84 <customwidget>
73 <class>QWidgetStack</class> 85 <class>QWidgetStack</class>
74 <header location="global">qwidgetstack.h</header> 86 <header location="global">qwidgetstack.h</header>
75 <sizehint> 87 <sizehint>
76 <width>-1</width> 88 <width>-1</width>
77 <height>-1</height> 89 <height>-1</height>
78 </sizehint> 90 </sizehint>
79 <container>0</container> 91 <container>1</container>
80 <sizepolicy> 92 <sizepolicy>
81 <hordata>7</hordata> 93 <hordata>7</hordata>
82 <verdata>7</verdata> 94 <verdata>7</verdata>
83 </sizepolicy> 95 </sizepolicy>
84 <pixmap>image0</pixmap> 96 <pixmap>image0</pixmap>
85 <slot access="public">raiseWidget( int )</slot> 97 <slot access="public">raiseWidget( int )</slot>
86 </customwidget> 98 </customwidget>
87</customwidgets> 99</customwidgets>
88<images> 100<images>
89 <image> 101 <image>
90 <name>image0</name> 102 <name>image0</name>
91 <data format="XPM.GZ" length="646">789c6dd2c10ac2300c00d07bbf2234b7229d1ddec44f503c0ae2a154410f53d0ed20e2bf6bdb656dd6861dd23d9a66591b0587fd1654235ebded6f0edcd53e419d87ae7b1f4f9b8f906d0bfe012317426a70b07bdc2f3ec77f8ed6b89559061a0343d06a124cc105596482585094bc0ae599b04646c9018926491b2205e140c485cace25755c175d0a967b622ff900b8cc9c7d29af594ea722d589167f813aa852ba07d94b9dce296e883fe7bb163f23896753</data> 103 <data format="XPM.GZ" length="646">789c6dd2c10ac2300c00d07bbf2234b7229d1ddec44f503c0ae2a154410f53d0ed20e2bf6bdb656dd6861dd23d9a66591b0587fd1654235ebded6f0edcd53e419d87ae7b1f4f9b8f906d0bfe012317426a70b07bdc2f3ec77f8ed6b89559061a0343d06a124cc105596482585094bc0ae599b04646c9018926491b2205e140c485cace25755c175d0a967b622ff900b8cc9c7d29af594ea722d589167f813aa852ba07d94b9dce296e883fe7bb163f23896753</data>
92 </image> 104 </image>
93</images> 105</images>
94<connections> 106<connections>
95 <connection> 107 <connection>
diff --git a/noncore/settings/networksettings2/ppp/PPPIPGUI.ui b/noncore/settings/networksettings2/ppp/PPPIPGUI.ui
index f3d5019..21bd29e 100644
--- a/noncore/settings/networksettings2/ppp/PPPIPGUI.ui
+++ b/noncore/settings/networksettings2/ppp/PPPIPGUI.ui
@@ -1,251 +1,180 @@
1<!DOCTYPE UI><UI> 1<!DOCTYPE UI><UI>
2<class>PPPIPGUI</class> 2<class>PPPIPGUI</class>
3<widget> 3<widget>
4 <class>QWidget</class> 4 <class>QWidget</class>
5 <property stdset="1"> 5 <property stdset="1">
6 <name>name</name> 6 <name>name</name>
7 <cstring>PPPIPGUI</cstring> 7 <cstring>PPPIPGUI</cstring>
8 </property> 8 </property>
9 <property stdset="1"> 9 <property stdset="1">
10 <name>geometry</name> 10 <name>geometry</name>
11 <rect> 11 <rect>
12 <x>0</x> 12 <x>0</x>
13 <y>0</y> 13 <y>0</y>
14 <width>133</width> 14 <width>258</width>
15 <height>235</height> 15 <height>232</height>
16 </rect> 16 </rect>
17 </property> 17 </property>
18 <property stdset="1"> 18 <property stdset="1">
19 <name>caption</name> 19 <name>caption</name>
20 <string>PPPIP</string> 20 <string>PPPIP</string>
21 </property> 21 </property>
22 <property> 22 <property>
23 <name>layoutMargin</name> 23 <name>layoutMargin</name>
24 </property> 24 </property>
25 <property> 25 <property>
26 <name>layoutSpacing</name> 26 <name>layoutSpacing</name>
27 </property> 27 </property>
28 <vbox> 28 <vbox>
29 <property stdset="1"> 29 <property stdset="1">
30 <name>margin</name> 30 <name>margin</name>
31 <number>3</number> 31 <number>0</number>
32 </property> 32 </property>
33 <property stdset="1"> 33 <property stdset="1">
34 <name>spacing</name> 34 <name>spacing</name>
35 <number>2</number> 35 <number>1</number>
36 </property> 36 </property>
37 <widget> 37 <widget>
38 <class>QButtonGroup</class> 38 <class>QGroupBox</class>
39 <property stdset="1"> 39 <property stdset="1">
40 <name>name</name> 40 <name>name</name>
41 <cstring>ButtonGroup4</cstring> 41 <cstring>GroupBox1</cstring>
42 </property>
43 <property stdset="1">
44 <name>frameShape</name>
45 <enum>Box</enum>
46 </property> 42 </property>
47 <property stdset="1"> 43 <property stdset="1">
48 <name>title</name> 44 <name>title</name>
49 <string>IP</string> 45 <string>IP</string>
50 </property> 46 </property>
51 <property> 47 <property>
52 <name>layoutMargin</name> 48 <name>layoutMargin</name>
53 </property> 49 </property>
54 <property> 50 <property>
55 <name>layoutSpacing</name> 51 <name>layoutSpacing</name>
56 </property> 52 </property>
57 <vbox> 53 <grid>
58 <property stdset="1"> 54 <property stdset="1">
59 <name>margin</name> 55 <name>margin</name>
60 <number>2</number> 56 <number>3</number>
61 </property> 57 </property>
62 <property stdset="1"> 58 <property stdset="1">
63 <name>spacing</name> 59 <name>spacing</name>
64 <number>2</number> 60 <number>2</number>
65 </property> 61 </property>
66 <widget> 62 <widget row="0" column="0" >
67 <class>QRadioButton</class> 63 <class>QLabel</class>
68 <property stdset="1"> 64 <property stdset="1">
69 <name>name</name> 65 <name>name</name>
70 <cstring>IPServerAssigned_RB</cstring> 66 <cstring>TextLabel1</cstring>
67 </property>
68 <property stdset="1">
69 <name>enabled</name>
70 <bool>true</bool>
71 </property> 71 </property>
72 <property stdset="1"> 72 <property stdset="1">
73 <name>text</name> 73 <name>text</name>
74 <string>Server assigned</string> 74 <string>Local</string>
75 </property> 75 </property>
76 </widget>
77 <widget row="0" column="1" >
78 <class>QLineEdit</class>
76 <property stdset="1"> 79 <property stdset="1">
77 <name>checked</name> 80 <name>name</name>
81 <cstring>LocalAddress_LE</cstring>
82 </property>
83 <property stdset="1">
84 <name>enabled</name>
78 <bool>true</bool> 85 <bool>true</bool>
79 </property> 86 </property>
80 </widget> 87 </widget>
81 <widget> 88 <widget row="0" column="2" >
82 <class>QRadioButton</class> 89 <class>QCheckBox</class>
83 <property stdset="1"> 90 <property stdset="1">
84 <name>name</name> 91 <name>name</name>
85 <cstring>IPFixed_RB</cstring> 92 <cstring>ServerOverrulesLocal_CB</cstring>
86 </property> 93 </property>
87 <property stdset="1"> 94 <property stdset="1">
88 <name>text</name> 95 <name>text</name>
89 <string>Fixed</string> 96 <string>Server Overrules</string>
90 </property> 97 </property>
91 </widget> 98 </widget>
92 <widget> 99 <widget row="1" column="1" >
93 <class>QLayoutWidget</class> 100 <class>QLineEdit</class>
94 <property stdset="1"> 101 <property stdset="1">
95 <name>name</name> 102 <name>name</name>
96 <cstring>Layout11</cstring> 103 <cstring>RemoteAddress_LE</cstring>
104 </property>
105 <property stdset="1">
106 <name>enabled</name>
107 <bool>true</bool>
97 </property> 108 </property>
98 <hbox>
99 <property stdset="1">
100 <name>margin</name>
101 <number>0</number>
102 </property>
103 <property stdset="1">
104 <name>spacing</name>
105 <number>6</number>
106 </property>
107 <spacer>
108 <property>
109 <name>name</name>
110 <cstring>Spacer8</cstring>
111 </property>
112 <property stdset="1">
113 <name>orientation</name>
114 <enum>Horizontal</enum>
115 </property>
116 <property stdset="1">
117 <name>sizeType</name>
118 <enum>Fixed</enum>
119 </property>
120 <property>
121 <name>sizeHint</name>
122 <size>
123 <width>20</width>
124 <height>20</height>
125 </size>
126 </property>
127 <property>
128 <name>layoutMargin</name>
129 </property>
130 <property>
131 <name>layoutSpacing</name>
132 </property>
133 </spacer>
134 <widget>
135 <class>QFrame</class>
136 <property stdset="1">
137 <name>name</name>
138 <cstring>Frame8</cstring>
139 </property>
140 <property stdset="1">
141 <name>enabled</name>
142 <bool>false</bool>
143 </property>
144 <property stdset="1">
145 <name>sizePolicy</name>
146 <sizepolicy>
147 <hsizetype>7</hsizetype>
148 <vsizetype>5</vsizetype>
149 </sizepolicy>
150 </property>
151 <property stdset="1">
152 <name>frameShape</name>
153 <enum>NoFrame</enum>
154 </property>
155 <property stdset="1">
156 <name>frameShadow</name>
157 <enum>Raised</enum>
158 </property>
159 <property>
160 <name>layoutMargin</name>
161 </property>
162 <property>
163 <name>layoutSpacing</name>
164 </property>
165 <grid>
166 <property stdset="1">
167 <name>margin</name>
168 <number>2</number>
169 </property>
170 <property stdset="1">
171 <name>spacing</name>
172 <number>2</number>
173 </property>
174 <widget row="0" column="1" >
175 <class>QLineEdit</class>
176 <property stdset="1">
177 <name>name</name>
178 <cstring>IPAddress_LE</cstring>
179 </property>
180 </widget>
181 <widget row="1" column="0" >
182 <class>QLabel</class>
183 <property stdset="1">
184 <name>name</name>
185 <cstring>TextLabel3</cstring>
186 </property>
187 <property stdset="1">
188 <name>text</name>
189 <string>Subnetmask</string>
190 </property>
191 </widget>
192 <widget row="0" column="0" >
193 <class>QLabel</class>
194 <property stdset="1">
195 <name>name</name>
196 <cstring>TextLabel2</cstring>
197 </property>
198 <property stdset="1">
199 <name>text</name>
200 <string>Address</string>
201 </property>
202 </widget>
203 <widget row="1" column="1" >
204 <class>QLineEdit</class>
205 <property stdset="1">
206 <name>name</name>
207 <cstring>IPSubMask_LE</cstring>
208 </property>
209 </widget>
210 </grid>
211 </widget>
212 </hbox>
213 </widget> 109 </widget>
214 </vbox> 110 <widget row="1" column="2" >
111 <class>QCheckBox</class>
112 <property stdset="1">
113 <name>name</name>
114 <cstring>ServerOverrulesRemote_CB</cstring>
115 </property>
116 <property stdset="1">
117 <name>text</name>
118 <string>Server Overrules</string>
119 </property>
120 </widget>
121 <widget row="1" column="0" >
122 <class>QLabel</class>
123 <property stdset="1">
124 <name>name</name>
125 <cstring>TextLabel1_2</cstring>
126 </property>
127 <property stdset="1">
128 <name>enabled</name>
129 <bool>true</bool>
130 </property>
131 <property stdset="1">
132 <name>text</name>
133 <string>Remote</string>
134 </property>
135 </widget>
136 </grid>
215 </widget> 137 </widget>
216 <widget> 138 <widget>
217 <class>QButtonGroup</class> 139 <class>QButtonGroup</class>
218 <property stdset="1"> 140 <property stdset="1">
219 <name>name</name> 141 <name>name</name>
220 <cstring>ButtonGroup5</cstring> 142 <cstring>ButtonGroup5</cstring>
221 </property> 143 </property>
222 <property stdset="1"> 144 <property stdset="1">
145 <name>sizePolicy</name>
146 <sizepolicy>
147 <hsizetype>5</hsizetype>
148 <vsizetype>1</vsizetype>
149 </sizepolicy>
150 </property>
151 <property stdset="1">
223 <name>title</name> 152 <name>title</name>
224 <string>Gateway</string> 153 <string>Gateway</string>
225 </property> 154 </property>
226 <property> 155 <property>
227 <name>layoutMargin</name> 156 <name>layoutMargin</name>
228 </property> 157 </property>
229 <property> 158 <property>
230 <name>layoutSpacing</name> 159 <name>layoutSpacing</name>
231 </property> 160 </property>
232 <vbox> 161 <vbox>
233 <property stdset="1"> 162 <property stdset="1">
234 <name>margin</name> 163 <name>margin</name>
235 <number>2</number> 164 <number>3</number>
236 </property> 165 </property>
237 <property stdset="1"> 166 <property stdset="1">
238 <name>spacing</name> 167 <name>spacing</name>
239 <number>2</number> 168 <number>2</number>
240 </property> 169 </property>
241 <widget> 170 <widget>
242 <class>QRadioButton</class> 171 <class>QRadioButton</class>
243 <property stdset="1"> 172 <property stdset="1">
244 <name>name</name> 173 <name>name</name>
245 <cstring>GWServerAssigned_RB</cstring> 174 <cstring>GWServerAssigned_RB</cstring>
246 </property> 175 </property>
247 <property stdset="1"> 176 <property stdset="1">
248 <name>text</name> 177 <name>text</name>
249 <string>Server assigned</string> 178 <string>Server assigned</string>
250 </property> 179 </property>
251 <property stdset="1"> 180 <property stdset="1">
@@ -365,80 +294,106 @@
365 </widget> 294 </widget>
366 <widget row="0" column="1" > 295 <widget row="0" column="1" >
367 <class>QLineEdit</class> 296 <class>QLineEdit</class>
368 <property stdset="1"> 297 <property stdset="1">
369 <name>name</name> 298 <name>name</name>
370 <cstring>GWAddress_LE</cstring> 299 <cstring>GWAddress_LE</cstring>
371 </property> 300 </property>
372 </widget> 301 </widget>
373 </grid> 302 </grid>
374 </widget> 303 </widget>
375 </hbox> 304 </hbox>
376 </widget> 305 </widget>
377 <widget> 306 <widget>
378 <class>QLayoutWidget</class> 307 <class>QLayoutWidget</class>
379 <property stdset="1"> 308 <property stdset="1">
380 <name>name</name> 309 <name>name</name>
381 <cstring>Layout3</cstring> 310 <cstring>Layout4</cstring>
382 </property> 311 </property>
383 <hbox> 312 <hbox>
384 <property stdset="1"> 313 <property stdset="1">
385 <name>margin</name> 314 <name>margin</name>
386 <number>0</number> 315 <number>0</number>
387 </property> 316 </property>
388 <property stdset="1"> 317 <property stdset="1">
389 <name>spacing</name> 318 <name>spacing</name>
390 <number>6</number> 319 <number>6</number>
391 </property> 320 </property>
321 <widget>
322 <class>QCheckBox</class>
323 <property stdset="1">
324 <name>name</name>
325 <cstring>GWIsDefault_CB</cstring>
326 </property>
327 <property stdset="1">
328 <name>text</name>
329 <string>Set as default</string>
330 </property>
331 </widget>
392 <spacer> 332 <spacer>
393 <property> 333 <property>
394 <name>name</name> 334 <name>name</name>
395 <cstring>Spacer3</cstring> 335 <cstring>Spacer3</cstring>
396 </property> 336 </property>
397 <property stdset="1"> 337 <property stdset="1">
398 <name>orientation</name> 338 <name>orientation</name>
399 <enum>Horizontal</enum> 339 <enum>Horizontal</enum>
400 </property> 340 </property>
401 <property stdset="1"> 341 <property stdset="1">
402 <name>sizeType</name> 342 <name>sizeType</name>
403 <enum>Expanding</enum> 343 <enum>Expanding</enum>
404 </property> 344 </property>
405 <property> 345 <property>
406 <name>sizeHint</name> 346 <name>sizeHint</name>
407 <size> 347 <size>
408 <width>20</width> 348 <width>20</width>
409 <height>20</height> 349 <height>20</height>
410 </size> 350 </size>
411 </property> 351 </property>
412 </spacer> 352 </spacer>
413 <widget> 353 <widget>
414 <class>QCheckBox</class> 354 <class>QCheckBox</class>
415 <property stdset="1"> 355 <property stdset="1">
416 <name>name</name> 356 <name>name</name>
417 <cstring>GWIsDefault_CB</cstring> 357 <cstring>GWIfNotSet_CB</cstring>
418 </property> 358 </property>
419 <property stdset="1"> 359 <property stdset="1">
420 <name>text</name> 360 <name>text</name>
421 <string>Set as default</string> 361 <string>Only if not yet set</string>
422 </property> 362 </property>
423 </widget> 363 </widget>
424 </hbox> 364 </hbox>
425 </widget> 365 </widget>
426 </vbox> 366 </vbox>
427 </widget> 367 </widget>
368 <spacer>
369 <property>
370 <name>name</name>
371 <cstring>Spacer4</cstring>
372 </property>
373 <property stdset="1">
374 <name>orientation</name>
375 <enum>Vertical</enum>
376 </property>
377 <property stdset="1">
378 <name>sizeType</name>
379 <enum>Expanding</enum>
380 </property>
381 <property>
382 <name>sizeHint</name>
383 <size>
384 <width>20</width>
385 <height>20</height>
386 </size>
387 </property>
388 </spacer>
428 </vbox> 389 </vbox>
429</widget> 390</widget>
430<connections> 391<connections>
431 <connection> 392 <connection>
432 <sender>GWFixed_RB</sender> 393 <sender>GWFixed_RB</sender>
433 <signal>toggled(bool)</signal> 394 <signal>toggled(bool)</signal>
434 <receiver>Frame9</receiver> 395 <receiver>Frame9</receiver>
435 <slot>setEnabled(bool)</slot> 396 <slot>setEnabled(bool)</slot>
436 </connection> 397 </connection>
437 <connection>
438 <sender>IPFixed_RB</sender>
439 <signal>toggled(bool)</signal>
440 <receiver>Frame8</receiver>
441 <slot>setEnabled(bool)</slot>
442 </connection>
443</connections> 398</connections>
444</UI> 399</UI>
diff --git a/noncore/settings/networksettings2/ppp/PPPIPedit.cpp b/noncore/settings/networksettings2/ppp/PPPIPedit.cpp
index 6965e5a..ef1b7c0 100644
--- a/noncore/settings/networksettings2/ppp/PPPIPedit.cpp
+++ b/noncore/settings/networksettings2/ppp/PPPIPedit.cpp
@@ -1,57 +1,54 @@
1#include <qmessagebox.h> 1#include <qmessagebox.h>
2#include <qcheckbox.h> 2#include <qcheckbox.h>
3#include <qradiobutton.h> 3#include <qradiobutton.h>
4#include <qlineedit.h> 4#include <qlineedit.h>
5#include <GUIUtils.h> 5#include <GUIUtils.h>
6#include "PPPIPedit.h" 6#include "PPPIPedit.h"
7 7
8PPPIPEdit::PPPIPEdit( QWidget * Parent ) : PPPIPGUI( Parent ){ 8PPPIPEdit::PPPIPEdit( QWidget * Parent ) : PPPIPGUI( Parent ){
9} 9}
10 10
11QString PPPIPEdit::acceptable( void ) { 11QString PPPIPEdit::acceptable( void ) {
12 if( IPFixed_RB->isChecked() ) { 12 if( GWFixed_RB->isChecked() ) {
13 if( IPAddress_LE->text().isEmpty() )
14 return tr("IPAddress needed" );
15 if( ! validIP( IPAddress_LE->text() ) )
16 return tr("IPAddress not valid" );
17 if( IPSubMask_LE->text().isEmpty() )
18 return tr("Subnet mask needed" );
19 if( ! validIP( IPSubMask_LE->text() ) )
20 return tr("Subnet mask not valid" );
21 } else if( GWFixed_RB->isChecked() ) {
22 if( GWAddress_LE->text().isEmpty() ) 13 if( GWAddress_LE->text().isEmpty() )
23 return tr("Gateway address needed" ); 14 return tr("Gateway address needed" );
24 if( ! validIP( GWAddress_LE->text() ) ) 15 if( ! validIP( GWAddress_LE->text() ) )
25 return tr("Gateway address not valid" ); 16 return tr("Gateway address not valid" );
26 }; 17 };
27 18
28 return QString(); 19 return QString();
29} 20}
30 21
31bool PPPIPEdit::commit( PPPData_t & D ) { 22bool PPPIPEdit::commit( PPPData & D ) {
32 23
33 bool SM = 0; 24 bool SM = 0;
34 25
35 CBM( D.IP.IPAutomatic, IPServerAssigned_RB, SM ); 26 CBM( D.IP.LocalOverrule, ServerOverrulesLocal_CB, SM );
36 if( ! D.IP.IPAutomatic ) { 27 CBM( D.IP.RemoteOverrule, ServerOverrulesRemote_CB, SM );
37 TXTM( D.IP.IPAddress, IPAddress_LE, SM ); 28
38 TXTM( D.IP.IPSubMask, IPSubMask_LE, SM ); 29 TXTM( D.IP.LocalAddress, LocalAddress_LE, SM );
39 } 30 TXTM( D.IP.RemoteAddress, RemoteAddress_LE, SM );
40 31
41 CBM( D.IP.GWAutomatic, GWServerAssigned_RB, SM ); 32 CBM( D.IP.GWAutomatic, GWServerAssigned_RB, SM );
33
42 if( ! D.IP.GWAutomatic ) { 34 if( ! D.IP.GWAutomatic ) {
43 TXTM( D.IP.GWAddress, GWAddress_LE, SM ); 35 TXTM( D.IP.GWAddress, GWAddress_LE, SM );
44 } 36 }
45 37
46 CBM( D.IP.GWIsDefault, GWIsDefault_CB, SM ); 38 CBM( D.IP.GWIsDefault, GWIsDefault_CB, SM );
39 CBM( D.IP.GWIfNotSet, GWIfNotSet_CB, SM );
40
47 return SM; 41 return SM;
48} 42}
49 43
50void PPPIPEdit::showData( PPPData_t & D ) { 44void PPPIPEdit::showData( PPPData & D ) {
51 IPServerAssigned_RB->setChecked( D.IP.IPAutomatic ); 45 ServerOverrulesLocal_CB->setChecked( D.IP.LocalOverrule );
52 IPAddress_LE->setText( D.IP.IPAddress ); 46 ServerOverrulesRemote_CB->setChecked( D.IP.RemoteOverrule );
53 IPSubMask_LE->setText( D.IP.IPSubMask ); 47 LocalAddress_LE->setText( D.IP.LocalAddress );
48 RemoteAddress_LE->setText( D.IP.RemoteAddress );
49
54 GWServerAssigned_RB->setChecked( D.IP.GWAutomatic ); 50 GWServerAssigned_RB->setChecked( D.IP.GWAutomatic );
55 GWAddress_LE->setText( D.IP.GWAddress ); 51 GWAddress_LE->setText( D.IP.GWAddress );
56 GWIsDefault_CB->setChecked( D.IP.GWIsDefault ); 52 GWIsDefault_CB->setChecked( D.IP.GWIsDefault );
53 GWIfNotSet_CB->setChecked( D.IP.GWIfNotSet );
57} 54}
diff --git a/noncore/settings/networksettings2/ppp/PPPIPedit.h b/noncore/settings/networksettings2/ppp/PPPIPedit.h
index 153ee68..5ca4326 100644
--- a/noncore/settings/networksettings2/ppp/PPPIPedit.h
+++ b/noncore/settings/networksettings2/ppp/PPPIPedit.h
@@ -1,15 +1,15 @@
1#include "pppdata.h" 1#include "pppdata.h"
2#include "PPPIPGUI.h" 2#include "PPPIPGUI.h"
3 3
4class PPPIPEdit : public PPPIPGUI { 4class PPPIPEdit : public PPPIPGUI {
5 5
6public : 6public :
7 7
8 PPPIPEdit( QWidget * parent ); 8 PPPIPEdit( QWidget * parent );
9 QString acceptable( void ); 9 QString acceptable( void );
10 bool commit( PPPData_t & Data ); 10 bool commit( PPPData & Data );
11 void showData( PPPData_t & Data ); 11 void showData( PPPData & Data );
12 12
13private : 13private :
14 14
15}; 15};
diff --git a/noncore/settings/networksettings2/ppp/PPPedit.cpp b/noncore/settings/networksettings2/ppp/PPPedit.cpp
index eb4fdbf..17889aa 100644
--- a/noncore/settings/networksettings2/ppp/PPPedit.cpp
+++ b/noncore/settings/networksettings2/ppp/PPPedit.cpp
@@ -1,48 +1,55 @@
1#include <qwidgetstack.h> 1#include <qwidgetstack.h>
2 2
3#include "PPPIPedit.h" 3#include "PPPIPedit.h"
4#include "PPPDNSedit.h" 4#include "PPPDNSedit.h"
5#include "PPPAuthedit.h" 5#include "PPPAuthedit.h"
6#include "PPPRunedit.h"
7#include "PPPDialingedit.h"
6#include "PPPedit.h" 8#include "PPPedit.h"
7 9
8PPPEdit::PPPEdit( QWidget * Parent ) : PPPGUI( Parent ){ 10PPPEdit::PPPEdit( QWidget * Parent ) : PPPGUI( Parent ){
9 11
10 Auth = new PPPAuthEdit( Options_WS ); 12 Auth = new PPPAuthEdit( Options_WS );
11 IP = new PPPIPEdit( Options_WS ); 13 IP = new PPPIPEdit( Options_WS );
12 DNS = new PPPDNSEdit( Options_WS ); 14 DNS = new PPPDNSEdit( Options_WS );
15 Run = new PPPRunEdit( Options_WS );
16 Dialing = new PPPDialingEdit( Options_WS );
17
13 Options_WS->addWidget( Auth, 0 ); 18 Options_WS->addWidget( Auth, 0 );
14 Options_WS->addWidget( IP, 1 ); 19 Options_WS->addWidget( IP, 1 );
15 Options_WS->addWidget( DNS, 2 ); 20 Options_WS->addWidget( DNS, 2 );
21 Options_WS->addWidget( Run, 3 );
22 Options_WS->addWidget( Dialing, 4 );
16 23
17 Options_WS->raiseWidget( 0 ); 24 Options_WS->raiseWidget( 0 );
18} 25}
19 26
20QString PPPEdit::acceptable( void ) { 27QString PPPEdit::acceptable( void ) {
21 QString S; 28 QString S;
22 S = Auth->acceptable(); 29 S = Auth->acceptable();
23 if( S.isEmpty() ) { 30 if( S.isEmpty() ) {
24 S = IP->acceptable(); 31 S = IP->acceptable();
25 if( S.isEmpty() ) { 32 if( S.isEmpty() ) {
26 S = DNS->acceptable(); 33 S = DNS->acceptable();
27 } 34 }
28 } 35 }
29 return S; 36 return S;
30} 37}
31 38
32bool PPPEdit::commit( PPPData_t & Data ) { 39bool PPPEdit::commit( PPPData & Data ) {
33 bool SM ; 40 bool SM ;
34 SM = Auth->commit( Data ); 41 SM = Auth->commit( Data );
35 SM |= IP->commit( Data ); 42 SM |= IP->commit( Data );
36 SM |= DNS->commit( Data ); 43 SM |= DNS->commit( Data );
37 return SM; 44 return SM;
38} 45}
39 46
40void PPPEdit::showData( PPPData_t & Data ) { 47void PPPEdit::showData( PPPData & Data ) {
41 Auth->showData( Data ) ; 48 Auth->showData( Data ) ;
42 IP->showData( Data ); 49 IP->showData( Data );
43 DNS->showData( Data ); 50 DNS->showData( Data );
44} 51}
45 52
46void PPPEdit::SLOT_SelectTopic( int v ) { 53void PPPEdit::SLOT_SelectTopic( int v ) {
47 Options_WS->raiseWidget( v ); 54 Options_WS->raiseWidget( v );
48} 55}
diff --git a/noncore/settings/networksettings2/ppp/PPPedit.h b/noncore/settings/networksettings2/ppp/PPPedit.h
index 57d38ee..f674b17 100644
--- a/noncore/settings/networksettings2/ppp/PPPedit.h
+++ b/noncore/settings/networksettings2/ppp/PPPedit.h
@@ -1,27 +1,31 @@
1#include "pppdata.h" 1#include "pppdata.h"
2#include "PPPGUI.h" 2#include "PPPGUI.h"
3 3
4class PPPAuthEdit; 4class PPPAuthEdit;
5class PPPIPEdit; 5class PPPIPEdit;
6class PPPDNSEdit; 6class PPPDNSEdit;
7class PPPRunEdit;
8class PPPDialingEdit;
7 9
8class PPPEdit : public PPPGUI { 10class PPPEdit : public PPPGUI {
9 11
10public : 12public :
11 13
12 PPPEdit( QWidget * parent ); 14 PPPEdit( QWidget * parent );
13 QString acceptable( void ); 15 QString acceptable( void );
14 bool commit( PPPData_t & Data ); 16 bool commit( PPPData & Data );
15 void showData( PPPData_t & Data ); 17 void showData( PPPData & Data );
16 18
17public slots : 19public slots :
18 20
19 void SLOT_SelectTopic( int ); 21 void SLOT_SelectTopic( int );
20 22
21private : 23private :
22 24
23 PPPAuthEdit * Auth; 25 PPPAuthEdit * Auth;
24 PPPDNSEdit * DNS; 26 PPPDNSEdit * DNS;
25 PPPIPEdit * IP; 27 PPPIPEdit * IP;
28 PPPRunEdit * Run;
29 PPPDialingEdit * Dialing;
26 30
27}; 31};
diff --git a/noncore/settings/networksettings2/ppp/opie-networksettings2plugin-ppp.control b/noncore/settings/networksettings2/ppp/opie-networksettings2plugin-ppp.control
index 7dfde38..19d1c89 100644
--- a/noncore/settings/networksettings2/ppp/opie-networksettings2plugin-ppp.control
+++ b/noncore/settings/networksettings2/ppp/opie-networksettings2plugin-ppp.control
@@ -1,9 +1,9 @@
1Package: opie-networksettingsplugin2-ppp 1Package: opie-networksettings2plugin-ppp
2Files: plugins/networksettings2/libppp.so* 2Files: plugins/networksettings2/libppp.so*
3Priority: optional 3Priority: optional
4Section: opie/settings 4Section: opie/settings
5Maintainer: Wim Delvaux <wimpie@handhelds.org> 5Maintainer: Wim Delvaux <wimpie@handhelds.org>
6Architecture: arm 6Architecture: arm
7Depends: opie-networksettings2, libopiecore2, libopienet2 7Depends: opie-networksettings2, libopiecore2, libopienet2
8Description: Network settings ppp plugin. 8Description: Network settings ppp plugin.
9Version: $QPE_VERSION$EXTRAVERSION 9Version: $QPE_VERSION$EXTRAVERSION
diff --git a/noncore/settings/networksettings2/ppp/ppp.pro b/noncore/settings/networksettings2/ppp/ppp.pro
index f866bee..dd3408c 100644
--- a/noncore/settings/networksettings2/ppp/ppp.pro
+++ b/noncore/settings/networksettings2/ppp/ppp.pro
@@ -1,24 +1,33 @@
1TEMPLATE = lib 1TEMPLATE = lib
2CONFIG += qt warn_on release 2CONFIG += qt warn_on release
3DESTDIR = $(OPIEDIR)/plugins/networksettings2 3DESTDIR = $(OPIEDIR)/plugins/networksettings2
4 HEADERS = ppp_NN.h \ 4 HEADERS = ppp_NN.h \
5 ppp_NNI.h \ 5 ppp_NNI.h \
6 PPPedit.h \ 6 PPPedit.h \
7 PPPAuthedit.h \ 7 PPPAuthedit.h \
8 PPPDNSedit.h \ 8 PPPDNSedit.h \
9 PPPRunedit.h \
10 PPPDialingedit.h \
9 PPPIPedit.h 11 PPPIPedit.h
10 SOURCES = ppp_NN.cpp \ 12 SOURCES = ppp_NN.cpp \
11 ppp_NNI.cpp \ 13 ppp_NNI.cpp \
12 PPPedit.cpp \ 14 PPPedit.cpp \
13 PPPDNSedit.cpp \ 15 PPPDNSedit.cpp \
16 PPPRunedit.cpp \
17 PPPDialingedit.cpp \
14 PPPAuthedit.cpp \ 18 PPPAuthedit.cpp \
15 ppprun.cpp \ 19 ppprun.cpp \
16 PPPIPedit.cpp 20 PPPIPedit.cpp
17 INCLUDEPATH+= $(OPIEDIR)/include ../ ../networksettings2 21 INCLUDEPATH+= $(OPIEDIR)/include ../ ../networksettings2
18 DEPENDPATH+= $(OPIEDIR)/include ../ ../networksettings2 22 DEPENDPATH+= $(OPIEDIR)/include ../ ../networksettings2
19LIBS += -lqpe 23LIBS += -lqpe
20 INTERFACES= PPPGUI.ui PPPAuthGUI.ui PPPIPGUI.ui PPPDNSGUI.ui 24 INTERFACES= PPPGUI.ui \
25 PPPAuthGUI.ui \
26 PPPIPGUI.ui \
27 PPPDNSGUI.ui \
28 PPPDialingGUI.ui \
29 PPPRunGUI.ui
21 TARGET = ppp 30 TARGET = ppp
22 VERSION = 1.0.0 31 VERSION = 1.0.0
23 32
24include( $(OPIEDIR)/include.pro ) 33include( $(OPIEDIR)/include.pro )
diff --git a/noncore/settings/networksettings2/ppp/ppp_NN.cpp b/noncore/settings/networksettings2/ppp/ppp_NN.cpp
index ff4465c..51ba27d 100644
--- a/noncore/settings/networksettings2/ppp/ppp_NN.cpp
+++ b/noncore/settings/networksettings2/ppp/ppp_NN.cpp
@@ -1,83 +1,83 @@
1#include <qfile.h> 1#include <qfile.h>
2#include <resources.h>
2#include <qtextstream.h> 3#include <qtextstream.h>
3#include "ppp_NN.h" 4#include "ppp_NN.h"
4#include "ppp_NNI.h" 5#include "ppp_NNI.h"
5 6
6QStringList * PPPNetNode::ProperFiles = 0; 7QStringList * PPPNetNode::ProperFiles = 0;
7 8
8static const char * PPPNeeds[] = 9static const char * PPPNeeds[] =
9 { "line", 10 { "modem",
10 "modem", 11 0
12 };
13
14static const char * PPPProvides[] =
15 { "connection",
11 0 16 0
12 }; 17 };
13 18
14/** 19/**
15 * Constructor, find all of the possible interfaces 20 * Constructor, find all of the possible interfaces
16 */ 21 */
17PPPNetNode::PPPNetNode() : ANetNode(tr("PPP Connection")) { 22PPPNetNode::PPPNetNode() : ANetNode(tr("PPP Connection")) {
18 23
19 // proper files : will leak
20 ProperFiles =new QStringList;
21 *ProperFiles << "peers";
22 *ProperFiles << "chatscript";
23
24 // system files
25 NSResources->addSystemFile( 24 NSResources->addSystemFile(
26 "pap-secrets", "/tmp/pap-secrets", 0 ); 25 "pap-secrets", "/etc/ppp/pap-secrets", 0 );
27 NSResources->addSystemFile( 26 NSResources->addSystemFile(
28 "chap-secrets", "/tmp/chap-secrets", 0 ); 27 "chap-secrets", "/etc/ppp/chap-secrets", 0 );
29} 28}
30 29
31/** 30/**
32 * Delete any interfaces that we own. 31 * Delete any interfaces that we own.
33 */ 32 */
34PPPNetNode::~PPPNetNode(){ 33PPPNetNode::~PPPNetNode(){
35} 34}
36 35
37const QString PPPNetNode::nodeDescription(){ 36const QString PPPNetNode::nodeDescription(){
38 return tr("\ 37 return tr("\
39<p>Sets up IP using PPP.</p>\ 38<p>Sets up IP using PPP.</p>\
40<p>Use this for dialup devices or serial setups</p>\ 39<p>Use this for dialup devices or serial setups</p>\
41" 40"
42); 41);
43} 42}
44 43
45ANetNodeInstance * PPPNetNode::createInstance( void ) { 44ANetNodeInstance * PPPNetNode::createInstance( void ) {
46 return new APPP( this ); 45 return new APPP( this );
47} 46}
48 47
49const char ** PPPNetNode::needs( void ) { 48const char ** PPPNetNode::needs( void ) {
50 return PPPNeeds; 49 return PPPNeeds;
51} 50}
52 51
53const char * PPPNetNode::provides( void ) { 52const char ** PPPNetNode::provides( void ) {
54 return "connection"; 53 return PPPProvides;
55} 54}
56 55
57QStringList * PPPNetNode::properFiles( void ) { 56QStringList PPPNetNode::properFiles( void ) {
58 return ProperFiles; 57 QStringList SL;
59 58 SL << "peers" << "chatscripts";
59 return SL;
60} 60}
61 61
62// need to generate : 62// need to generate :
63// /etc/ppp/pap-secrets 63// /etc/ppp/pap-secrets
64// /etc/ppp/pap-secrets 64// /etc/ppp/pap-secrets
65bool PPPNetNode::hasDataForFile( const QString & S ) { 65bool PPPNetNode::hasDataForFile( SystemFile & S ) {
66 return S == "pap-secrets" || 66 return S.name() == "pap-secrets" ||
67 S == "chap-secrets" ; 67 S.name() == "chap-secrets" ;
68} 68}
69 69
70QString PPPNetNode::genNic( long NicNr ) { 70QString PPPNetNode::genNic( long NicNr ) {
71 QString S; 71 QString S;
72 return S.sprintf( "ppp%ld", NicNr ); 72 return S.sprintf( "ppp%ld", NicNr );
73} 73}
74 74
75void PPPNetNode::setSpecificAttribute( QString & , QString & ) { 75void PPPNetNode::setSpecificAttribute( QString & , QString & ) {
76} 76}
77 77
78void PPPNetNode::saveSpecificAttribute( QTextStream & ) { 78void PPPNetNode::saveSpecificAttribute( QTextStream & ) {
79} 79}
80 80
81extern "C" { 81extern "C" {
82void create_plugin( QList<ANetNode> & PNN ) { 82void create_plugin( QList<ANetNode> & PNN ) {
83 PNN.append( new PPPNetNode() ); 83 PNN.append( new PPPNetNode() );
diff --git a/noncore/settings/networksettings2/ppp/ppp_NN.h b/noncore/settings/networksettings2/ppp/ppp_NN.h
index 249be5a..3ead10e 100644
--- a/noncore/settings/networksettings2/ppp/ppp_NN.h
+++ b/noncore/settings/networksettings2/ppp/ppp_NN.h
@@ -4,40 +4,40 @@
4#include "netnode.h" 4#include "netnode.h"
5 5
6class APPP; 6class APPP;
7 7
8class PPPNetNode : public ANetNode{ 8class PPPNetNode : public ANetNode{
9 9
10 Q_OBJECT 10 Q_OBJECT
11 11
12public: 12public:
13 13
14 PPPNetNode(); 14 PPPNetNode();
15 virtual ~PPPNetNode(); 15 virtual ~PPPNetNode();
16 16
17 virtual const QString pixmapName() 17 virtual const QString pixmapName()
18 { return "Devices/ppp"; } 18 { return "Devices/ppp"; }
19 19
20 virtual bool hasDataForFile( const QString & S ); 20 virtual bool hasDataForFile( SystemFile & S );
21 21
22 virtual const QString nodeDescription() ; 22 virtual const QString nodeDescription() ;
23 virtual ANetNodeInstance * createInstance( void ); 23 virtual ANetNodeInstance * createInstance( void );
24 virtual const char ** needs( void ); 24 virtual const char ** needs( void );
25 virtual const char * provides( void ); 25 virtual const char ** provides( void );
26 26
27 virtual QString genNic( long NicNr ); 27 virtual QString genNic( long NicNr );
28 virtual QStringList * properFiles( void ); 28 virtual QStringList properFiles( void );
29 29
30private: 30private:
31 31
32 virtual void setSpecificAttribute( QString & Attr, QString & Value ); 32 virtual void setSpecificAttribute( QString & Attr, QString & Value );
33 virtual void saveSpecificAttribute( QTextStream & TS ); 33 virtual void saveSpecificAttribute( QTextStream & TS );
34 34
35 static QStringList * ProperFiles; 35 static QStringList * ProperFiles;
36}; 36};
37 37
38extern "C" 38extern "C"
39{ 39{
40 void create_plugin( QList<ANetNode> & PNN ); 40 void create_plugin( QList<ANetNode> & PNN );
41}; 41};
42 42
43#endif 43#endif
diff --git a/noncore/settings/networksettings2/ppp/ppp_NNI.cpp b/noncore/settings/networksettings2/ppp/ppp_NNI.cpp
index ba639de..9e3bb64 100644
--- a/noncore/settings/networksettings2/ppp/ppp_NNI.cpp
+++ b/noncore/settings/networksettings2/ppp/ppp_NNI.cpp
@@ -3,38 +3,47 @@
3#include "PPPedit.h" 3#include "PPPedit.h"
4#include "ppp_NNI.h" 4#include "ppp_NNI.h"
5#include "ppp_NN.h" 5#include "ppp_NN.h"
6 6
7APPP::APPP( PPPNetNode * PNN ) : ANetNodeInstance( PNN ) { 7APPP::APPP( PPPNetNode * PNN ) : ANetNodeInstance( PNN ) {
8 Data.DNS.ServerAssigned = 1; 8 Data.DNS.ServerAssigned = 1;
9 Data.DNS.DomainName = ""; 9 Data.DNS.DomainName = "";
10 10
11 Data.Auth.Mode = 0; 11 Data.Auth.Mode = 0;
12 Data.Auth.Login.Expect = "ogin:"; 12 Data.Auth.Login.Expect = "ogin:";
13 Data.Auth.Password.Expect = "assword:"; 13 Data.Auth.Password.Expect = "assword:";
14 Data.Auth.PCEMode = 0; 14 Data.Auth.PCEMode = 0;
15 Data.Auth.Client = "*"; 15 Data.Auth.Client = "*";
16 Data.Auth.Server = "*"; 16 Data.Auth.Server = "*";
17 Data.Auth.Secret = ""; 17 Data.Auth.Secret = "";
18 18
19 Data.IP.IPAutomatic = 1; 19 Data.IP.LocalAddress = "10.0.0.1";
20 Data.IP.IPAddress = ""; 20 Data.IP.RemoteAddress = "10.0.0.2";
21 Data.IP.IPSubMask = ""; 21 Data.IP.LocalOverrule = 1;
22 Data.IP.RemoteOverrule = 1;
23
22 Data.IP.GWAutomatic = 1; 24 Data.IP.GWAutomatic = 1;
23 Data.IP.GWAddress = ""; 25 Data.IP.GWAddress = "";
24 Data.IP.GWIsDefault = 1; 26 Data.IP.GWIsDefault = 1;
27 Data.IP.GWIfNotSet = 1;
28
29 Data.Run.PreConnect = "";
30 Data.Run.PostConnect = "";
31 Data.Run.PreDisconnect = "";
32 Data.Run.PostDisconnect = "";
33
25 GUI = 0; 34 GUI = 0;
26 RT = 0; 35 RT = 0;
27 36
28} 37}
29 38
30void APPP::setSpecificAttribute( QString & A, QString & V ) { 39void APPP::setSpecificAttribute( QString & A, QString & V ) {
31 if( A.startsWith( "dns" ) ) { 40 if( A.startsWith( "dns" ) ) {
32 if( A == "dnsserverassigned" ) { 41 if( A == "dnsserverassigned" ) {
33 Data.DNS.ServerAssigned = (V == "yes"); 42 Data.DNS.ServerAssigned = (V == "yes");
34 } else if( A == "dnsdomainname" ) { 43 } else if( A == "dnsdomainname" ) {
35 Data.DNS.DomainName = V; 44 Data.DNS.DomainName = V;
36 } else if( A == "dnsserver" ) { 45 } else if( A == "dnsserver" ) {
37 Data.DNS.Servers.resize( Data.DNS.Servers.size()+1 ); 46 Data.DNS.Servers.resize( Data.DNS.Servers.size()+1 );
38 Data.DNS.Servers[Data.DNS.Servers.size()-1] = 47 Data.DNS.Servers[Data.DNS.Servers.size()-1] =
39 new QString( V ); 48 new QString( V );
40 } 49 }
@@ -46,176 +55,181 @@ void APPP::setSpecificAttribute( QString & A, QString & V ) {
46 } else if( A == "authloginsend" ) { 55 } else if( A == "authloginsend" ) {
47 Data.Auth.Login.Send = V; 56 Data.Auth.Login.Send = V;
48 } else if( A == "authpasswordexpect" ) { 57 } else if( A == "authpasswordexpect" ) {
49 Data.Auth.Password.Expect = V; 58 Data.Auth.Password.Expect = V;
50 } else if( A == "authpasswordsend" ) { 59 } else if( A == "authpasswordsend" ) {
51 Data.Auth.Password.Send = V; 60 Data.Auth.Password.Send = V;
52 } else if( A == "authpcemode" ) { 61 } else if( A == "authpcemode" ) {
53 Data.Auth.PCEMode = V.toShort(); 62 Data.Auth.PCEMode = V.toShort();
54 } else if( A == "authclient" ) { 63 } else if( A == "authclient" ) {
55 Data.Auth.Client = V; 64 Data.Auth.Client = V;
56 } else if( A == "authserver" ) { 65 } else if( A == "authserver" ) {
57 Data.Auth.Server = V; 66 Data.Auth.Server = V;
58 } else if( A == "authsecret" ) { 67 } else if( A == "authsecret" ) {
59 Data.Auth.Secret = V; 68 Data.Auth.Secret = V;
60 } 69 }
61 } else if( A.startsWith( "ip" ) ) { 70 } else if( A.startsWith( "ip" ) ) {
62 if( A == "ipautomatic" ) { 71 if( A == "iplocaloverrule" ) {
63 Data.IP.IPAutomatic = (V == "yes"); 72 Data.IP.LocalOverrule = (V == "yes");
64 } else if( A == "gwautomatic" ) { 73 } else if( A == "ipremoteoverrule" ) {
74 Data.IP.RemoteOverrule = (V == "yes");
75 } else if( A == "ipgwautomatic" ) {
65 Data.IP.GWAutomatic = (V == "yes"); 76 Data.IP.GWAutomatic = (V == "yes");
66 } else if( A == "gwisdefault" ) { 77 } else if( A == "ipgwisdefault" ) {
67 Data.IP.GWIsDefault = (V == "yes"); 78 Data.IP.GWIsDefault = (V == "yes");
68 } else if( A == "ipaddress" ) { 79 } else if( A == "ipgwifnotset" ) {
69 Data.IP.IPAddress = V; 80 Data.IP.GWIfNotSet = (V == "yes");
70 } else if( A == "ipsubmask" ) { 81 } else if( A == "iplocaladdress" ) {
71 Data.IP.IPSubMask = V; 82 Data.IP.LocalAddress = V;
72 } else if( A == "gwaddress" ) { 83 } else if( A == "ipremoteaddress" ) {
84 Data.IP.RemoteAddress = V;
85 } else if( A == "ipgwaddress" ) {
73 Data.IP.GWAddress = V; 86 Data.IP.GWAddress = V;
74 } 87 }
88 } else if( A.startsWith( "run" ) ) {
89 if( A == "runpreconnect" ) {
90 Data.Run.PreConnect = V;
91 } else if( A == "runpostconnect" ) {
92 Data.Run.PostConnect = V;
93 } else if( A == "runpredisconnect" ) {
94 Data.Run.PreDisconnect = V;
95 } else if( A == "runpostdisconnect" ) {
96 Data.Run.PostDisconnect = V;
97 }
75 } 98 }
76} 99}
77 100
78void APPP::saveSpecificAttribute( QTextStream & TS ) { 101void APPP::saveSpecificAttribute( QTextStream & TS ) {
79 TS << "dnsserverassigned=" << 102 TS << "dnsserverassigned=" <<
80 ( ( Data.DNS.ServerAssigned ) ? "yes" : "no" ) << endl; 103 ( ( Data.DNS.ServerAssigned ) ? "yes" : "no" ) << endl;
81 TS << "dnsdomainname=" << Data.DNS.DomainName << endl; 104 TS << "dnsdomainname=" << Data.DNS.DomainName << endl;
82 for( unsigned int i = 0; i < Data.DNS.Servers.size(); i ++ ) { 105 for( unsigned int i = 0; i < Data.DNS.Servers.size(); i ++ ) {
83 TS << "dnsserver=" << *(Data.DNS.Servers[i]) << endl; 106 TS << "dnsserver=" << *(Data.DNS.Servers[i]) << endl;
84 } 107 }
85 TS << "authmode=" << Data.Auth.Mode << endl; 108 TS << "authmode=" << Data.Auth.Mode << endl;
86 TS << "authloginexpect=" << quote( Data.Auth.Login.Expect ) << endl; 109 TS << "authloginexpect=" << quote( Data.Auth.Login.Expect ) << endl;
87 TS << "authloginsend=" << quote( Data.Auth.Login.Send ) << endl; 110 TS << "authloginsend=" << quote( Data.Auth.Login.Send ) << endl;
88 TS << "authpasswordexpect=" << quote( Data.Auth.Password.Expect ) << endl; 111 TS << "authpasswordexpect=" << quote( Data.Auth.Password.Expect ) << endl;
89 TS << "authpasswordsend=" << quote( Data.Auth.Password.Send ) << endl; 112 TS << "authpasswordsend=" << quote( Data.Auth.Password.Send ) << endl;
90 TS << "authpcemode=" << Data.Auth.PCEMode << endl; 113 TS << "authpcemode=" << Data.Auth.PCEMode << endl;
91 TS << "authclient=" << Data.Auth.Client << endl; 114 TS << "authclient=" << Data.Auth.Client << endl;
92 TS << "authserver=" << Data.Auth.Server << endl; 115 TS << "authserver=" << Data.Auth.Server << endl;
93 TS << "authsecret=" << quote( Data.Auth.Secret ) << endl; 116 TS << "authsecret=" << quote( Data.Auth.Secret ) << endl;
94 TS << "ipautomatic=" << ( ( Data.IP.IPAutomatic ) ? "yes" : "no" ) << endl; 117 TS << "ipgwautomatic=" << ( ( Data.IP.GWAutomatic ) ? "yes" : "no" ) << endl;
95 TS << "gwautomatic=" << ( ( Data.IP.GWAutomatic ) ? "yes" : "no" ) << endl; 118 TS << "ipgwisdefault=" << ( ( Data.IP.GWIsDefault ) ? "yes" : "no" ) << endl;
96 TS << "gwisdefault=" << ( ( Data.IP.GWIsDefault ) ? "yes" : "no" ) << endl; 119 TS << "ipgwifnotset=" << ( ( Data.IP.GWIfNotSet ) ? "yes" : "no" ) << endl;
97 TS << "ipaddress=" << Data.IP.IPAddress << endl; 120 TS << "iplocaloverrule=" << ( ( Data.IP.LocalOverrule ) ? "yes" : "no" ) << endl;
98 TS << "ipsubmask=" << Data.IP.IPSubMask << endl; 121 TS << "ipremoteoverrule=" << ( ( Data.IP.RemoteOverrule ) ? "yes" : "no" ) << endl;
99 TS << "gwaddress=" << Data.IP.GWAddress << endl; 122 TS << "iplocaladdress=" << Data.IP.LocalAddress << endl;
123 TS << "ipremoteaddress=" << Data.IP.RemoteAddress << endl;
124 TS << "ipgwaddress=" << Data.IP.GWAddress << endl;
125
126 TS << "runpreconnect=" << Data.Run.PreConnect << endl;
127 TS << "runpostconnect=" << Data.Run.PostConnect << endl;
128 TS << "runpredisconnect=" << Data.Run.PreDisconnect << endl;
129 TS << "runpostdisconnect=" << Data.Run.PostDisconnect << endl;
130
100} 131}
101 132
102QWidget * APPP::edit( QWidget * parent ) { 133QWidget * APPP::edit( QWidget * parent ) {
103 GUI = new PPPEdit( parent ); 134 GUI = new PPPEdit( parent );
104 GUI->showData( Data ); 135 GUI->showData( Data );
105 return GUI; 136 return GUI;
106} 137}
107 138
108QString APPP::acceptable( void ) { 139QString APPP::acceptable( void ) {
109 return ( GUI ) ? GUI->acceptable( ) : QString(); 140 return ( GUI ) ? GUI->acceptable( ) : QString();
110} 141}
111 142
112void APPP::commit( void ) { 143void APPP::commit( void ) {
113 if( GUI && GUI->commit( Data ) ) { 144 if( GUI && GUI->commit( Data ) ) {
114 setModified( 1 ); 145 setModified( 1 );
115 } 146 }
116} 147}
117 148
118QFile * APPP::openFile( const QString & ID ) { 149bool APPP::openFile( SystemFile & SF ) {
119 QFile * F = 0; 150 if( SF.name() == "peers" ) {
120 QString S; 151 SF.setPath( removeSpaces(
121 152 QString( "/tmp/ppp/peers/" ) + connection()->name() ) );
122 if( ID == "peers" ) { 153 return 1;
123 S = removeSpaces( QString("/tmp/") + connection()->name() ); 154 } else if ( SF.name() == "chatscripts" ) {
124 155 SF.setPath( removeSpaces(
125 F = new QFile( S ); 156 QString( "/tmp/chatscripts/" ) + connection()->name() ) );
126 157 return 1;
127 if( ! F->open( IO_WriteOnly ) ) {
128 Log(("Cannot open file %s\n", S.latin1() ));
129 return 0;
130 }
131 } else if ( ID == "chatscripts" ) {
132 S = removeSpaces( QString("/tmp/") + connection()->name() + ".chat" );
133 F = new QFile( S );
134
135 if( ! F->open( IO_WriteOnly ) ) {
136 Log(("Cannot open file %s\n", S.latin1() ));
137 return 0;
138 }
139 } 158 }
140 if( F ) { 159 return 0;
141 Log(("Generate proper file %s = %s\n",
142 ID.latin1(), F->name().latin1()));
143 }
144 return F;
145} 160}
146 161
147short APPP::generateFile( const QString & ID, 162short APPP::generateFile( SystemFile & SF, long DevNr ) {
148 const QString & Path,
149 QTextStream & TS,
150 long DevNr ) {
151 short rvl, rvd; 163 short rvl, rvd;
152 164
153 rvl = 1; 165 rvl = 1;
154 rvd = 1; 166 rvd = 1;
155 167
156 if( ID == "pap-secrets" ) { 168 if( SF.name() == "pap-secrets" ) {
157 Log(("Generate PPP for %s\n", ID.latin1() )); 169 Log(("Generate PPP for %s\n", SF.name().latin1() ));
170
158 if( Data.Auth.Mode == 1 && Data.Auth.PCEMode == 0 ) { 171 if( Data.Auth.Mode == 1 && Data.Auth.PCEMode == 0 ) {
159 TS << "# secrets for " 172 SF << "# secrets for "
160 << connection()->name().latin1() 173 << connection()->name().latin1()
161 << endl; 174 << endl;
162 TS << Data.Auth.Client 175 SF << Data.Auth.Client
163 << " " 176 << " "
164 << Data.Auth.Server 177 << Data.Auth.Server
165 << " " 178 << " "
166 << Data.Auth.Secret 179 << Data.Auth.Secret
167 << endl; 180 << endl;
168 rvl = 0; 181 rvl = 0;
169 rvd = connection()->getToplevel()->generateFileEmbedded( 182 rvd = connection()->getToplevel()->generateFileEmbedded(
170 ID, Path, TS, DevNr ); 183 SF, DevNr );
171 } 184 }
172 } else if( ID == "chap-secrets" ) { 185 } else if( SF.name() == "chap-secrets" ) {
173 Log(("Generate PPP for %s\n", ID.latin1() )); 186 Log(("Generate PPP for %s\n", SF.name().latin1() ));
174 if( Data.Auth.Mode == 1 && Data.Auth.PCEMode != 0 ) { 187 if( Data.Auth.Mode == 1 && Data.Auth.PCEMode != 0 ) {
175 // used for both EAP and Chap 188 // used for both EAP and Chap
176 TS << "# secrets for " 189 SF << "# secrets for "
177 << connection()->name().latin1() 190 << connection()->name().latin1()
178 << endl; 191 << endl;
179 TS << Data.Auth.Client 192 SF << Data.Auth.Client
180 << " " 193 << " "
181 << Data.Auth.Server 194 << Data.Auth.Server
182 << " " 195 << " "
183 << Data.Auth.Secret 196 << Data.Auth.Secret
184 << endl; 197 << endl;
185 198
186 rvl = 0; 199 rvl = 0;
187 rvd = connection()->getToplevel()->generateFileEmbedded( 200 rvd = connection()->getToplevel()->generateFileEmbedded(
188 ID, Path, TS, DevNr ); 201 SF, DevNr );
189 } 202 }
190 } else if ( ID == "peers" ) { 203 } else if ( SF.name() == "peers" ) {
191 QFileInfo FI(Path); 204
192 Log(("Generate PPP for %s\n", ID.latin1() )); 205 QFileInfo FI(SF.path());
206 Log(("Generate PPP for %s\n", SF.name().latin1() ));
193 207
194 TS << "connect \"/usr/sbin/chat -v -f /etc/ppp/" 208 SF << "connect \"/usr/sbin/chat -v -f /etc/chatscripts/"
195 << FI.baseName() 209 << FI.baseName()
196 << ".chat\"" 210 << "\""
197 << endl; 211 << endl;
198 212
199 if( Data.IP.GWIsDefault ) { 213 if( Data.IP.GWIsDefault ) {
200 TS << "defaultroute" 214 SF << "defaultroute"
201 << endl; 215 << endl;
202 } 216 }
203 217
204 TS << "linkname " 218 SF << "linkname "
205 << removeSpaces( ID.latin1() ) 219 << removeSpaces( SF.name().latin1() )
206 << endl; 220 << endl;
207 221
208 // insert other data here 222 // insert other data here
209 rvl = 0; 223 rvl = 0;
210 rvd = connection()->getToplevel()->generateFileEmbedded( 224 rvd = connection()->getToplevel()->generateFileEmbedded(
211 ID, Path, TS, DevNr ); 225 SF, DevNr );
212 } else if ( ID == "chatscripts" ) { 226 } else if ( SF.name() == "chatscripts" ) {
213 Log(("Generate PPP for %s\n", ID.latin1() )); 227 Log(("Generate PPP for %s\n", SF.name().latin1() ));
214 rvl = 0; 228 rvl = 0;
215 rvd = connection()->getToplevel()->generateFileEmbedded( 229 rvd = connection()->getToplevel()->generateFileEmbedded(
216 ID, Path, TS, DevNr ); 230 SF, DevNr );
217 } 231 }
218 232
219 return (rvd == 2 || rvl == 2 ) ? 2 : 233 return (rvd == 2 || rvl == 2 ) ? 2 :
220 (rvd == 0 || rvl == 0 ) ? 0 : 1; 234 (rvd == 0 || rvl == 0 ) ? 0 : 1;
221} 235}
diff --git a/noncore/settings/networksettings2/ppp/ppp_NNI.h b/noncore/settings/networksettings2/ppp/ppp_NNI.h
index 0bf8fa9..76afb21 100644
--- a/noncore/settings/networksettings2/ppp/ppp_NNI.h
+++ b/noncore/settings/networksettings2/ppp/ppp_NNI.h
@@ -3,49 +3,43 @@
3 3
4#include <netnode.h> 4#include <netnode.h>
5#include "pppdata.h" 5#include "pppdata.h"
6#include "ppprun.h" 6#include "ppprun.h"
7 7
8class PPPNetNode; 8class PPPNetNode;
9class PPPEdit; 9class PPPEdit;
10class QTextStream; 10class QTextStream;
11 11
12class APPP : public ANetNodeInstance { 12class APPP : public ANetNodeInstance {
13 13
14public : 14public :
15 15
16 APPP( PPPNetNode * PNN ); 16 APPP( PPPNetNode * PNN );
17 17
18 RuntimeInfo * runtime( void ) 18 RuntimeInfo * runtime( void )
19 { if( RT == 0 ) { 19 { return (RT) ? RT : (RT = new PPPRun( this, Data ) ); }
20 RT = new PPPRun( this, Data );
21 }
22 return RT->runtimeInfo();
23 }
24 20
25 QWidget * edit( QWidget * parent ); 21 QWidget * edit( QWidget * parent );
26 QString acceptable( void ); 22 QString acceptable( void );
27 void commit( void ); 23 void commit( void );
28 24
29 virtual void * data( void ) 25 virtual void * data( void )
30 { return (void *)&Data; } 26 { return (void *)&Data; }
31 27
32 virtual QFile * openFile( const QString & ID ); 28 virtual bool openFile( SystemFile & Sf );
33 short generateFile( const QString & ID, 29 short generateFile( SystemFile & TS,
34 const QString & Path,
35 QTextStream & TS,
36 long DevNr ); 30 long DevNr );
37 31
38protected : 32protected :
39 33
40 virtual void setSpecificAttribute( QString & Attr, QString & Value ); 34 virtual void setSpecificAttribute( QString & Attr, QString & Value );
41 virtual void saveSpecificAttribute( QTextStream & TS ); 35 virtual void saveSpecificAttribute( QTextStream & TS );
42 36
43private : 37private :
44 38
45 PPPEdit * GUI; 39 PPPEdit * GUI;
46 PPPData Data; 40 PPPData Data;
47 PPPRun * RT; 41 PPPRun * RT;
48 42
49}; 43};
50 44
51#endif 45#endif
diff --git a/noncore/settings/networksettings2/ppp/pppdata.h b/noncore/settings/networksettings2/ppp/pppdata.h
index 9e8543c..68666f8 100644
--- a/noncore/settings/networksettings2/ppp/pppdata.h
+++ b/noncore/settings/networksettings2/ppp/pppdata.h
@@ -1,38 +1,50 @@
1#ifndef PPP_DATA_H 1#ifndef PPP_DATA_H
2#define PPP_DATA_H 2#define PPP_DATA_H
3 3
4#include <qstring.h> 4#include <qstring.h>
5#include <qarray.h> 5#include <qarray.h>
6 6
7typedef struct PPPData { 7class PPPData {
8
9public :
10
8 struct { 11 struct {
9 bool IPAutomatic; 12 bool LocalOverrule;
10 QString IPAddress; 13 bool RemoteOverrule;
11 QString IPSubMask; 14 QString LocalAddress;
15 QString RemoteAddress;
12 bool GWAutomatic; 16 bool GWAutomatic;
13 QString GWAddress; 17 QString GWAddress;
14 bool GWIsDefault; 18 bool GWIsDefault;
19 bool GWIfNotSet;
15 } IP; 20 } IP;
21
16 struct { 22 struct {
17 short Mode; // 0 login, 1 chap/pap, 2 Terminal 23 short Mode; // 0 login, 1 chap/pap, 2 Terminal
18 struct { 24 struct {
19 QString Expect; 25 QString Expect;
20 QString Send; 26 QString Send;
21 } Login; 27 } Login;
22 struct { 28 struct {
23 QString Expect; 29 QString Expect;
24 QString Send; 30 QString Send;
25 } Password; 31 } Password;
26 short PCEMode; // 0 pap, 1, chap 2, EAP 32 short PCEMode; // 0 pap, 1, chap 2, EAP
27 QString Server; 33 QString Server;
28 QString Client; 34 QString Client;
29 QString Secret; 35 QString Secret;
30 } Auth; 36 } Auth;
31 struct { 37 struct {
32 bool ServerAssigned; 38 bool ServerAssigned;
33 QString DomainName; 39 QString DomainName;
34 QArray<QString *> Servers; 40 QArray<QString *> Servers;
35 } DNS; 41 } DNS;
36} PPPData_t; 42 struct {
43 QString PreConnect;
44 QString PostConnect;
45 QString PreDisconnect;
46 QString PostDisconnect;
47 } Run;
48};
37 49
38#endif 50#endif
diff --git a/noncore/settings/networksettings2/ppp/ppprun.cpp b/noncore/settings/networksettings2/ppp/ppprun.cpp
index a8abc50..8403e6d 100644
--- a/noncore/settings/networksettings2/ppp/ppprun.cpp
+++ b/noncore/settings/networksettings2/ppp/ppprun.cpp
@@ -1,82 +1,52 @@
1#include <resources.h> 1#include <resources.h>
2#include "ppprun.h" 2#include "ppprun.h"
3 3
4PPPRun::PPPRun( ANetNodeInstance * NNI, PPPData & Data ) : 4PPPRun::PPPRun( ANetNodeInstance * NNI, PPPData & Data ) :
5 AsConnection( NNI ), AsDevice( NNI ), Pat( "eth[0-9]" ) { 5 RuntimeInfo( NNI ), Pat( "eth[0-9]" ) {
6 D = &Data; 6 D = &Data;
7} 7}
8 8
9void PPPRun::detectState( NodeCollection * NC ) { 9State_t PPPRun::detectState( void ) {
10 if( isMyPPPDRunning( ) ) { 10 if( isMyPPPDRunning( ) ) {
11 if( isMyPPPUp() ) { 11 return ( isMyPPPUp() ) ? IsUp : Available;
12 NC->setCurrentState( IsUp ); 12 }
13 } else { 13 return Off;
14 NC->setCurrentState( Available );
15 }
16 } else {
17 NC->setCurrentState( Off ); // at least this
18 // but could also be unavailable
19 AsDevice::netNode()->nextNode()->runtime()->detectState( NC );
20 }
21} 14}
22 15
23bool PPPRun::setState( NodeCollection * NC, Action_t A, bool ) { 16QString PPPRun::setMyState( NodeCollection * NC, Action_t A, bool ) {
24 switch( A ) { 17 return QString();
25 case Activate :
26 NC->setCurrentState( Available );
27 // no
28 break;
29 case Deactivate :
30 if( NC->currentState() == IsUp ) {
31 NC->state( Down );
32 }
33 // cannot really disable
34 NC->setCurrentState( Available );
35 break;
36 case Up :
37 if( NC->currentState() != IsUp ) {
38 // start my PPPD
39 NC->setCurrentState( IsUp );
40 }
41 break;
42 case Down :
43 if( NC->currentState() == IsUp ) {
44 // stop my PPPD
45 NC->setCurrentState( Available );
46 }
47 break;
48 default : // FT
49 break;
50 }
51 return 1;
52} 18}
53 19
54bool PPPRun::isMyPPPDRunning( void ) { 20bool PPPRun::isMyPPPDRunning( void ) {
55 return 0; 21 return 0;
56} 22}
57 23
58bool PPPRun::isMyPPPUp( void ) { 24bool PPPRun::isMyPPPUp( void ) {
59 System & S = NSResources->system(); 25 System & S = NSResources->system();
60 InterfaceInfo * Run; 26 InterfaceInfo * Run;
61 QRegExp R( "ppp[0-9]" ); 27 QRegExp R( "ppp[0-9]" );
62 28
63 for( QDictIterator<InterfaceInfo> It(S.interfaces()); 29 for( QDictIterator<InterfaceInfo> It(S.interfaces());
64 It.current(); 30 It.current();
65 ++It ) { 31 ++It ) {
66 Run = It.current(); 32 Run = It.current();
67 if( R.match( Run->Name ) >= 0 && 33 if( R.match( Run->Name ) >= 0 &&
68 Run->IsPointToPoint 34 Run->IsPointToPoint
69 ) { 35 ) {
70 // this is a LAN card 36 // this is a LAN card
71 if( Run->assignedNode() == AsDevice::netNode() ) { 37 if( Run->assignedConnection() == netNode()->connection() ) {
72 // assigned to us 38 // assigned to us
73 return 1; 39 return 1;
74 } 40 }
75 } 41 }
76 } 42 }
77 return 0; 43 return 0;
78} 44}
79 45
80bool PPPRun::handlesInterface( const QString & S ) { 46bool PPPRun::handlesInterface( const QString & S ) {
81 return Pat.match( S ) >= 0; 47 return Pat.match( S ) >= 0;
82} 48}
49
50bool PPPRun::handlesInterface( InterfaceInfo * I ) {
51 return handlesInterface( I->Name );
52}
diff --git a/noncore/settings/networksettings2/ppp/ppprun.h b/noncore/settings/networksettings2/ppp/ppprun.h
index 90a3f25..2990a96 100644
--- a/noncore/settings/networksettings2/ppp/ppprun.h
+++ b/noncore/settings/networksettings2/ppp/ppprun.h
@@ -1,47 +1,37 @@
1#ifndef PPPRUN_H 1#ifndef PPPRUN_H
2#define PPPRUN_H 2#define PPPRUN_H
3 3
4#include <qregexp.h> 4#include <qregexp.h>
5#include <asconnection.h> 5#include <netnode.h>
6#include <asdevice.h>
7#include "pppdata.h" 6#include "pppdata.h"
8 7
9class PPPRun : public AsConnection, public AsDevice { 8class PPPRun : public RuntimeInfo {
10 9
11public : 10public :
12 11
13 PPPRun( ANetNodeInstance * NNI, 12 PPPRun( ANetNodeInstance * NNI,
14 PPPData & Data ); 13 PPPData & Data );
15 14
16 virtual AsDevice * asDevice( void ) 15 bool handlesInterface( const QString & I );
17 { return (AsDevice *)this; } 16 bool handlesInterface( InterfaceInfo * );
18 virtual AsConnection * asConnection( void )
19 { return (AsConnection *)this; }
20
21 virtual AsDevice * device( void )
22 { return (AsDevice *)this; }
23 17
24 virtual RuntimeInfo * runtimeInfo( void ) 18 State_t detectState( void );
25 { return ( AsConnection *)this; } 19 virtual RuntimeInfo * device( void )
20 { return this; }
21 virtual RuntimeInfo * connection( void )
22 { return this; }
26 23
27 protected : 24protected :
28 25
29 void detectState( NodeCollection * NC ); 26 QString setMyState( NodeCollection * , Action_t, bool );
30 bool setState( NodeCollection * NC, Action_t A, bool );
31 bool canSetState( State_t S, Action_t A )
32 { return AsDevice::connection()->findNext(
33 AsDevice::netNode() )->runtime()->canSetState( S,A ); }
34
35 bool handlesInterface( const QString & I );
36 27
37private : 28private :
38 29
39 bool isMyPPPDRunning( void ); 30 bool isMyPPPDRunning( void );
40 bool isMyPPPUp( void ); 31 bool isMyPPPUp( void );
41 32
42 PPPData_t * D; 33 PPPData * D;
43 QRegExp Pat; 34 QRegExp Pat;
44
45}; 35};
46 36
47#endif 37#endif
diff --git a/noncore/settings/networksettings2/profile/opie-networksettings2plugin-bluetooth.control b/noncore/settings/networksettings2/profile/opie-networksettings2plugin-bluetooth.control
index c76f9b8..40c8b48 100644
--- a/noncore/settings/networksettings2/profile/opie-networksettings2plugin-bluetooth.control
+++ b/noncore/settings/networksettings2/profile/opie-networksettings2plugin-bluetooth.control
@@ -1,9 +1,9 @@
1Package: opie-networksettingsplugin2-profile 1Package: opie-networksettings2plugin-profile
2Files: plugins/networksettings2/libprofile.so* 2Files: plugins/networksettings2/libprofile.so*
3Priority: optional 3Priority: optional
4Section: opie/settings 4Section: opie/settings
5Maintainer: Wim Delvaux <wimpie@handhelds.org> 5Maintainer: Wim Delvaux <wimpie@handhelds.org>
6Architecture: arm 6Architecture: arm
7Depends: opie-networksettings2, libopiecore2, libopienet2 7Depends: opie-networksettings2, libopiecore2, libopienet2
8Description: Network settings profile plugin. 8Description: Network settings usage profile plugin.
9Version: $QPE_VERSION$EXTRAVERSION 9Version: $QPE_VERSION$EXTRAVERSION
diff --git a/noncore/settings/networksettings2/profile/profile_NN.cpp b/noncore/settings/networksettings2/profile/profile_NN.cpp
index 945b48d..b7d8aa0 100644
--- a/noncore/settings/networksettings2/profile/profile_NN.cpp
+++ b/noncore/settings/networksettings2/profile/profile_NN.cpp
@@ -1,51 +1,60 @@
1#include <resources.h>
1#include "profile_NN.h" 2#include "profile_NN.h"
2#include "profile_NNI.h" 3#include "profile_NNI.h"
3 4
4static const char * ProfileNeeds[] = 5static const char * ProfileNeeds[] =
5 { "connection", 6 { "connection",
6 0 7 0
7 }; 8 };
9static const char * ProfileProvides[] =
10 { "fullsetup",
11 0
12 };
8 13
9/** 14/**
10 * Constructor, find all of the possible interfaces 15 * Constructor, find all of the possible interfaces
11 */ 16 */
12ProfileNetNode::ProfileNetNode() : ANetNode( tr("Regular connection profile")) { 17ProfileNetNode::ProfileNetNode() : ANetNode( tr("Regular connection profile")) {
18
19 NSResources->addSystemFile(
20 "interfaces", "/etc/network/interfaces", 1 );
21
13} 22}
14 23
15/** 24/**
16 * Delete any interfaces that we own. 25 * Delete any interfaces that we own.
17 */ 26 */
18ProfileNetNode::~ProfileNetNode(){ 27ProfileNetNode::~ProfileNetNode(){
19} 28}
20 29
21const QString ProfileNetNode::nodeDescription(){ 30const QString ProfileNetNode::nodeDescription(){
22 return tr("\ 31 return tr("\
23<p>Define use of an IP connection.</p>\ 32<p>Define use of an IP connection.</p>\
24<p>Configure if and when this connection needs to be established</p>\ 33<p>Configure if and when this connection needs to be established</p>\
25" 34"
26); 35);
27} 36}
28 37
29ANetNodeInstance * ProfileNetNode::createInstance( void ) { 38ANetNodeInstance * ProfileNetNode::createInstance( void ) {
30 return new AProfile( this ); 39 return new AProfile( this );
31} 40}
32 41
33const char ** ProfileNetNode::needs( void ) { 42const char ** ProfileNetNode::needs( void ) {
34 return ProfileNeeds; 43 return ProfileNeeds;
35} 44}
36 45
37const char * ProfileNetNode::provides( void ) { 46const char ** ProfileNetNode::provides( void ) {
38 return "fullsetup"; 47 return ProfileProvides;
39} 48}
40 49
41void ProfileNetNode::setSpecificAttribute( QString & , QString & ) { 50void ProfileNetNode::setSpecificAttribute( QString & , QString & ) {
42} 51}
43 52
44void ProfileNetNode::saveSpecificAttribute( QTextStream & ) { 53void ProfileNetNode::saveSpecificAttribute( QTextStream & ) {
45} 54}
46 55
47extern "C" { 56extern "C" {
48void create_plugin( QList<ANetNode> & PNN ) { 57void create_plugin( QList<ANetNode> & PNN ) {
49 PNN.append( new ProfileNetNode() ); 58 PNN.append( new ProfileNetNode() );
50} 59}
51} 60}
diff --git a/noncore/settings/networksettings2/profile/profile_NN.h b/noncore/settings/networksettings2/profile/profile_NN.h
index 1f1ee2c..f1648f9 100644
--- a/noncore/settings/networksettings2/profile/profile_NN.h
+++ b/noncore/settings/networksettings2/profile/profile_NN.h
@@ -7,30 +7,30 @@ class AProfile;
7 7
8class ProfileNetNode : public ANetNode{ 8class ProfileNetNode : public ANetNode{
9 9
10 Q_OBJECT 10 Q_OBJECT
11 11
12public: 12public:
13 13
14 ProfileNetNode(); 14 ProfileNetNode();
15 virtual ~ProfileNetNode(); 15 virtual ~ProfileNetNode();
16 16
17 virtual const QString pixmapName() 17 virtual const QString pixmapName()
18 { return "Devices/commprofile"; } 18 { return "Devices/commprofile"; }
19 19
20 virtual const QString nodeDescription() ; 20 virtual const QString nodeDescription() ;
21 virtual ANetNodeInstance * createInstance( void ); 21 virtual ANetNodeInstance * createInstance( void );
22 virtual const char ** needs( void ); 22 virtual const char ** needs( void );
23 virtual const char * provides( void ); 23 virtual const char ** provides( void );
24 24
25private: 25private:
26 26
27 virtual void setSpecificAttribute( QString & Attr, QString & Value ); 27 virtual void setSpecificAttribute( QString & Attr, QString & Value );
28 virtual void saveSpecificAttribute( QTextStream & TS ); 28 virtual void saveSpecificAttribute( QTextStream & TS );
29}; 29};
30 30
31extern "C" 31extern "C"
32{ 32{
33 void create_plugin( QList<ANetNode> & PNN ); 33 void create_plugin( QList<ANetNode> & PNN );
34}; 34};
35 35
36#endif 36#endif
diff --git a/noncore/settings/networksettings2/profile/profile_NNI.cpp b/noncore/settings/networksettings2/profile/profile_NNI.cpp
index f0f0b97..a1e1254 100644
--- a/noncore/settings/networksettings2/profile/profile_NNI.cpp
+++ b/noncore/settings/networksettings2/profile/profile_NNI.cpp
@@ -1,16 +1,17 @@
1#include <opie2/odebug.h>
1#include "profileedit.h" 2#include "profileedit.h"
2#include "profile_NNI.h" 3#include "profile_NNI.h"
3#include "profile_NN.h" 4#include "profile_NN.h"
4 5
5AProfile::AProfile( ProfileNetNode * PNN ) : ANetNodeInstance( PNN ) { 6AProfile::AProfile( ProfileNetNode * PNN ) : ANetNodeInstance( PNN ) {
6 Data.Automatic = 1; 7 Data.Automatic = 1;
7 Data.Confirm = 0; 8 Data.Confirm = 0;
8 Data.Description = ""; 9 Data.Description = "";
9 Data.Disabled = 0; 10 Data.Disabled = 0;
10 Data.TriggerVPN = 0; 11 Data.TriggerVPN = 0;
11 GUI = 0; 12 GUI = 0;
12 RT = 0; 13 RT = 0;
13} 14}
14 15
15void AProfile::setSpecificAttribute( QString & Attr, QString & Value ) { 16void AProfile::setSpecificAttribute( QString & Attr, QString & Value ) {
16 17
@@ -37,41 +38,39 @@ void AProfile::saveSpecificAttribute( QTextStream & TS ) {
37 38
38QWidget * AProfile::edit( QWidget * parent ) { 39QWidget * AProfile::edit( QWidget * parent ) {
39 GUI = new ProfileEdit( parent, this ); 40 GUI = new ProfileEdit( parent, this );
40 GUI->showData( Data ); 41 GUI->showData( Data );
41 return GUI; 42 return GUI;
42} 43}
43 44
44QString AProfile::acceptable( void ) { 45QString AProfile::acceptable( void ) {
45 return ( GUI ) ? GUI->acceptable( ) : QString(); 46 return ( GUI ) ? GUI->acceptable( ) : QString();
46} 47}
47 48
48void AProfile::commit( void ) { 49void AProfile::commit( void ) {
49 if( GUI && GUI->commit( Data ) ) 50 if( GUI && GUI->commit( Data ) )
50 setModified( 1 ); 51 setModified( 1 );
51} 52}
52 53
53short AProfile::generateFileEmbedded( const QString & ID, 54short AProfile::generateFileEmbedded( SystemFile & SF,
54 const QString & Path,
55 QTextStream & TS,
56 long DevNr ) { 55 long DevNr ) {
57 56
58 short rvl, rvd; 57 short rvl, rvd;
59 58
60 rvl = 1; 59 rvl = 1;
61 60
62 if( ID == "interfaces" ) { 61 if( SF.name() == "interfaces" ) {
63 Log(("Generate Profile for %s\n", ID.latin1() )); 62 Log(("Generate Profile for %s\n", SF.name().latin1() ));
64 if( Data.TriggerVPN ) { 63 if( Data.TriggerVPN ) {
65 // this profile triggers VPN -> insert trigger 64 // this profile triggers VPN -> insert trigger
66 TS << " up networksettings2 --triggervpn" 65 SF << " up networksettings2 --triggervpn"
67 << endl; 66 << endl;
68 rvl = 0; 67 rvl = 0;
69 } 68 }
70 } 69 }
71 rvd = ANetNodeInstance::generateFileEmbedded( ID, Path, TS, DevNr ); 70 rvd = ANetNodeInstance::generateFileEmbedded( SF, DevNr );
72 return (rvd == 2 || rvl == 2 ) ? 2 : 71 return (rvd == 2 || rvl == 2 ) ? 2 :
73 (rvd == 0 || rvl == 0 ) ? 0 : 1; 72 (rvd == 0 || rvl == 0 ) ? 0 : 1;
74} 73}
75 74
76 75
77 76
diff --git a/noncore/settings/networksettings2/profile/profile_NNI.h b/noncore/settings/networksettings2/profile/profile_NNI.h
index 957f4af..ccd746c 100644
--- a/noncore/settings/networksettings2/profile/profile_NNI.h
+++ b/noncore/settings/networksettings2/profile/profile_NNI.h
@@ -13,35 +13,33 @@ class AProfile : public ANetNodeInstance {
13public : 13public :
14 14
15 AProfile( ProfileNetNode * PNN ); 15 AProfile( ProfileNetNode * PNN );
16 16
17 RuntimeInfo * runtime( void ) 17 RuntimeInfo * runtime( void )
18 { return 18 { return
19 ( RT ) ? RT : ( RT = new ProfileRun( this, Data ) ); 19 ( RT ) ? RT : ( RT = new ProfileRun( this, Data ) );
20 } 20 }
21 21
22 QWidget * edit( QWidget * parent ); 22 QWidget * edit( QWidget * parent );
23 QString acceptable( void ); 23 QString acceptable( void );
24 void commit( void ); 24 void commit( void );
25 25
26 virtual void * data( void ) 26 virtual void * data( void )
27 { return (void *)&Data; } 27 { return (void *)&Data; }
28 28
29 virtual short generateFileEmbedded( const QString & ID, 29 virtual short generateFileEmbedded( SystemFile & TS,
30 const QString & Path,
31 QTextStream & TS,
32 long DevNr ); 30 long DevNr );
33 31
34 const QString & description( void ) 32 const QString & description( void )
35 { return Data.Description; } 33 { return Data.Description; }
36 34
37protected : 35protected :
38 36
39 virtual void setSpecificAttribute( QString & Attr, QString & Value ); 37 virtual void setSpecificAttribute( QString & Attr, QString & Value );
40 virtual void saveSpecificAttribute( QTextStream & TS ); 38 virtual void saveSpecificAttribute( QTextStream & TS );
41 39
42private : 40private :
43 41
44 ProfileEdit * GUI; 42 ProfileEdit * GUI;
45 ProfileData Data; 43 ProfileData Data;
46 ProfileRun * RT; 44 ProfileRun * RT;
47 45
diff --git a/noncore/settings/networksettings2/profile/profiledata.h b/noncore/settings/networksettings2/profile/profiledata.h
index 246d50c..c9577e5 100644
--- a/noncore/settings/networksettings2/profile/profiledata.h
+++ b/noncore/settings/networksettings2/profile/profiledata.h
@@ -1,16 +1,17 @@
1#ifndef PROFILE_DATA_H 1#ifndef PROFILE_DATA_H
2#define PROFILE_DATA_H 2#define PROFILE_DATA_H
3 3
4#include <qstring.h> 4#include <qstring.h>
5typedef struct ProfileData { 5class ProfileData {
6public :
6 QString Description; 7 QString Description;
7 // start up automatically 8 // start up automatically
8 bool Automatic; 9 bool Automatic;
9 // if started up automatically, ask user for confirmation 10 // if started up automatically, ask user for confirmation
10 bool Confirm; 11 bool Confirm;
11 // Do not bring this connection up 12 // Do not bring this connection up
12 bool Disabled; 13 bool Disabled;
13 bool TriggerVPN; 14 bool TriggerVPN;
14} ProfileData_t; 15} ;
15 16
16#endif 17#endif
diff --git a/noncore/settings/networksettings2/profile/profileedit.cpp b/noncore/settings/networksettings2/profile/profileedit.cpp
index 87e503e..88aab15 100644
--- a/noncore/settings/networksettings2/profile/profileedit.cpp
+++ b/noncore/settings/networksettings2/profile/profileedit.cpp
@@ -1,35 +1,35 @@
1#include <qlabel.h> 1#include <qlabel.h>
2#include <qframe.h> 2#include <qframe.h>
3#include <qcheckbox.h> 3#include <qcheckbox.h>
4#include <qmultilineedit.h> 4#include <qmultilineedit.h>
5#include <qcheckbox.h> 5#include <qcheckbox.h>
6 6
7#include <GUIUtils.h> 7#include <GUIUtils.h>
8#include <asdevice.h> 8#include <netnode.h>
9#include <resources.h> 9#include <resources.h>
10 10
11#include "profileedit.h" 11#include "profileedit.h"
12 12
13ProfileEdit::ProfileEdit( QWidget * Parent, ANetNodeInstance * TNNI ) : 13ProfileEdit::ProfileEdit( QWidget * Parent, ANetNodeInstance * TNNI ) :
14 ProfileGUI( Parent ), RefreshTimer(this) { 14 ProfileGUI( Parent ), RefreshTimer(this) {
15 InterfaceInfo * II; 15 InterfaceInfo * II;
16 16
17 NNI = TNNI; 17 NNI = TNNI;
18 Dev = NNI->runtime()->device(); 18 Dev = NNI->runtime()->device();
19 if( ( II = Dev->assignedInterface() ) ) { 19 if( ( II = NNI->connection()->assignedInterface() ) ) {
20 20
21 Refresh_CB->setEnabled( TRUE ); 21 Refresh_CB->setEnabled( TRUE );
22 Snd_GB->setEnabled( TRUE ); 22 Snd_GB->setEnabled( TRUE );
23 Rcv_GB->setEnabled( TRUE ); 23 Rcv_GB->setEnabled( TRUE );
24 Collisions_FRM->setEnabled( TRUE ); 24 Collisions_FRM->setEnabled( TRUE );
25 25
26 // show current content 26 // show current content
27 SLOT_Refresh(); 27 SLOT_Refresh();
28 28
29 // fill in static data 29 // fill in static data
30 InterfaceName_LBL->setText( II->Name ); 30 InterfaceName_LBL->setText( II->Name );
31 IPAddress_LBL->setText( II->Address ); 31 IPAddress_LBL->setText( II->Address );
32 SubnetMask_LBL->setText( II->Netmask ); 32 SubnetMask_LBL->setText( II->Netmask );
33 Broadcast_LBL->setText( II->BCastAddress ); 33 Broadcast_LBL->setText( II->BCastAddress );
34 MACAddress_LBL->setText( II->MACAddress ); 34 MACAddress_LBL->setText( II->MACAddress );
35 if( II->IsPointToPoint ) { 35 if( II->IsPointToPoint ) {
@@ -42,55 +42,55 @@ ProfileEdit::ProfileEdit( QWidget * Parent, ANetNodeInstance * TNNI ) :
42 } 42 }
43 if( ! S.isEmpty() ) { 43 if( ! S.isEmpty() ) {
44 S.prepend( " : " ); 44 S.prepend( " : " );
45 } 45 }
46 InterfaceOptions_LBL->setText( S ); 46 InterfaceOptions_LBL->setText( S );
47 47
48 connect( &RefreshTimer, SIGNAL( timeout() ), 48 connect( &RefreshTimer, SIGNAL( timeout() ),
49 this, SLOT( SLOT_Refresh() ) ); 49 this, SLOT( SLOT_Refresh() ) );
50 } 50 }
51 51
52} 52}
53 53
54QString ProfileEdit::acceptable( void ) { 54QString ProfileEdit::acceptable( void ) {
55 return QString(); 55 return QString();
56} 56}
57 57
58void ProfileEdit::showData( ProfileData_t & Data ) { 58void ProfileEdit::showData( ProfileData & Data ) {
59 Description_LE->setText( Data.Description ); 59 Description_LE->setText( Data.Description );
60 Automatic_CB->setChecked( Data.Automatic ); 60 Automatic_CB->setChecked( Data.Automatic );
61 TriggersVPN_CB->setChecked( Data.TriggerVPN ); 61 TriggersVPN_CB->setChecked( Data.TriggerVPN );
62 Confirm_CB->setChecked( Data.Confirm ); 62 Confirm_CB->setChecked( Data.Confirm );
63 Disabled_CB->setChecked( Data.Disabled ); 63 Disabled_CB->setChecked( Data.Disabled );
64} 64}
65 65
66 66
67bool ProfileEdit::commit( ProfileData_t & Data ) { 67bool ProfileEdit::commit( ProfileData & Data ) {
68 bool SM = 0; 68 bool SM = 0;
69 TXTM( Data.Description, Description_LE, SM ); 69 TXTM( Data.Description, Description_LE, SM );
70 70
71 CBM( Data.Automatic, Automatic_CB, SM ); 71 CBM( Data.Automatic, Automatic_CB, SM );
72 CBM( Data.TriggerVPN, TriggersVPN_CB, SM ); 72 CBM( Data.TriggerVPN, TriggersVPN_CB, SM );
73 CBM( Data.Disabled, Disabled_CB, SM ); 73 CBM( Data.Disabled, Disabled_CB, SM );
74 CBM( Data.Confirm, Confirm_CB, SM ); 74 CBM( Data.Confirm, Confirm_CB, SM );
75 75
76 return SM; 76 return SM;
77} 77}
78 78
79void ProfileEdit::SLOT_Refresh( void ) { 79void ProfileEdit::SLOT_Refresh( void ) {
80 InterfaceInfo * II = Dev->assignedInterface(); 80 InterfaceInfo * II = NNI->connection()->assignedInterface();
81 NSResources->system().refreshStatistics( *II ); 81 NSResources->system().refreshStatistics( *II );
82 RcvBytes_LBL->setText( II->RcvBytes ); 82 RcvBytes_LBL->setText( II->RcvBytes );
83 SndBytes_LBL->setText( II->SndBytes ); 83 SndBytes_LBL->setText( II->SndBytes );
84 RcvErrors_LBL->setText( II->RcvErrors ); 84 RcvErrors_LBL->setText( II->RcvErrors );
85 SndErrors_LBL->setText( II->SndErrors ); 85 SndErrors_LBL->setText( II->SndErrors );
86 RcvDropped_LBL->setText( II->RcvDropped ); 86 RcvDropped_LBL->setText( II->RcvDropped );
87 SndDropped_LBL->setText( II->SndDropped ); 87 SndDropped_LBL->setText( II->SndDropped );
88 Collisions_LBL->setText( II->Collisions ); 88 Collisions_LBL->setText( II->Collisions );
89} 89}
90 90
91void ProfileEdit::SLOT_AutoRefresh( bool ar ) { 91void ProfileEdit::SLOT_AutoRefresh( bool ar ) {
92 if( ar ) { 92 if( ar ) {
93 RefreshTimer.start( 1000 ); 93 RefreshTimer.start( 1000 );
94 SLOT_Refresh(); 94 SLOT_Refresh();
95 } else { 95 } else {
96 RefreshTimer.stop(); 96 RefreshTimer.stop();
diff --git a/noncore/settings/networksettings2/profile/profileedit.h b/noncore/settings/networksettings2/profile/profileedit.h
index b186b58..9cde845 100644
--- a/noncore/settings/networksettings2/profile/profileedit.h
+++ b/noncore/settings/networksettings2/profile/profileedit.h
@@ -1,29 +1,29 @@
1#include "profiledata.h" 1#include "profiledata.h"
2#include "profileGUI.h" 2#include "profileGUI.h"
3 3
4#include <qtimer.h> 4#include <qtimer.h>
5class ANetNodeInstance; 5class ANetNodeInstance;
6class AsDevice; 6class RuntimeInfo;
7 7
8class ProfileEdit : public ProfileGUI { 8class ProfileEdit : public ProfileGUI {
9 9
10 Q_OBJECT 10 Q_OBJECT
11 11
12public : 12public :
13 13
14 ProfileEdit( QWidget * parent, ANetNodeInstance * NNI ); 14 ProfileEdit( QWidget * parent, ANetNodeInstance * NNI );
15 QString acceptable( void ); 15 QString acceptable( void );
16 bool commit( ProfileData_t & Data ); 16 bool commit( ProfileData & Data );
17 void showData( ProfileData_t & Data ); 17 void showData( ProfileData & Data );
18 18
19public slots : 19public slots :
20 20
21 void SLOT_AutoRefresh( bool ); 21 void SLOT_AutoRefresh( bool );
22 void SLOT_Refresh( void ); 22 void SLOT_Refresh( void );
23 23
24private : 24private :
25 25
26 QTimer RefreshTimer; 26 QTimer RefreshTimer;
27 ANetNodeInstance * NNI; 27 ANetNodeInstance * NNI;
28 AsDevice * Dev; 28 RuntimeInfo * Dev;
29}; 29};
diff --git a/noncore/settings/networksettings2/profile/profilerun.cpp b/noncore/settings/networksettings2/profile/profilerun.cpp
index 1a5b15b..ab57a00 100644
--- a/noncore/settings/networksettings2/profile/profilerun.cpp
+++ b/noncore/settings/networksettings2/profile/profilerun.cpp
@@ -1,67 +1,27 @@
1#include <resources.h> 1#include <resources.h>
2 2
3#include "profilerun.h" 3#include "profilerun.h"
4 4
5void ProfileRun::detectState( NodeCollection * NC ) { 5State_t ProfileRun::detectState( void ) {
6 if( Data->Disabled ) { 6 if( Data->Disabled ) {
7 Log(( "%s disabled\n", NC->name().latin1() )); 7 return Disabled;
8 NC->setCurrentState( Disabled ); 8 }
9 } else { 9 return Unknown;
10 Log(( "%s not disabled\n", NC->name().latin1() ));
11 // find next item in connection
12 // convert to runtime and ask to detect the state
13 netNode()->nextNode()->runtime()->detectState( NC );
14 }
15} 10}
16 11
17bool ProfileRun::setState( NodeCollection * NC, Action_t A, bool F ) { 12QString ProfileRun::setMyState( NodeCollection * NC, Action_t A, bool ) {
18 ANetNodeInstance * NNNI; 13 owarn << "Profile " << Data->Disabled << oendl;
19 14 if( A == Disable ) {
20 NNNI = netNode()->nextNode(); 15 if( ! Data->Disabled ) {
21 switch ( A ) {
22 case Enable :
23 if( NC->currentState() == Disabled ) {
24 Data->Disabled = 0;
25 NC->setCurrentState( Off ); // at least
26 // ... but request deeper
27 NNNI->runtime()->detectState(NC);
28 }
29 return 1;
30 case Disable :
31 switch( NC->currentState() ) {
32 case IsUp :
33 case Available :
34 // bring Deactivate (will bring down)
35 if( ! NNNI->runtime()->setState(NC, Deactivate) )
36 return 0;
37 default :
38 break;
39 }
40 Data->Disabled = 1; 16 Data->Disabled = 1;
41 NC->setCurrentState( Disabled ); 17 NC->setModified( 1 );
42 return 1; 18 }
43 default : 19 } else if( A == Enable ) {
44 break; 20 if( Data->Disabled ) {
45 } 21 Data->Disabled = 0;
46 return NNNI->runtime()->setState(NC, A, F ); 22 NC->setModified( 1 );
47} 23 }
48
49bool ProfileRun::canSetState( State_t Curr, Action_t A ) {
50 RuntimeInfo * RI;
51 switch ( A ) {
52 case Enable :
53 case Disable :
54 // always possible
55 return 1;
56 default :
57 break;
58 } 24 }
59 RI = netNode()->nextNode()->runtime();
60 return ( Curr != Disabled ) ?
61 RI->canSetState(Curr, A) : 0;
62}
63 25
64bool ProfileRun::handlesInterface( const QString & S ) { 26 return QString();
65 // donno -> pass deeper
66 return netNode()->nextNode()->runtime()->handlesInterface(S);
67} 27}
diff --git a/noncore/settings/networksettings2/profile/profilerun.h b/noncore/settings/networksettings2/profile/profilerun.h
index 400b56c..2d48b15 100644
--- a/noncore/settings/networksettings2/profile/profilerun.h
+++ b/noncore/settings/networksettings2/profile/profilerun.h
@@ -1,35 +1,33 @@
1#ifndef PROFILERUN_H 1#ifndef PROFILERUN_H
2#define PROFILERUN_H 2#define PROFILERUN_H
3 3
4#include <asfullsetup.h> 4#include <netnode.h>
5#include "profiledata.h" 5#include "profiledata.h"
6 6
7class ProfileRun : public AsFullSetup { 7class ProfileRun : public RuntimeInfo {
8 8
9public : 9public :
10 10
11 ProfileRun( ANetNodeInstance * NNI, ProfileData & D ) : 11 ProfileRun( ANetNodeInstance * NNI, ProfileData & D ) :
12 AsFullSetup( NNI ) 12 RuntimeInfo( NNI )
13 { Data = &D; } 13 { Data = &D; }
14 14
15 void detectState( NodeCollection * NC ); 15 virtual RuntimeInfo * fullSetup( void )
16 bool setState( NodeCollection * NC, Action_t A, bool ); 16 { return this; }
17 bool canSetState( State_t Curr, Action_t A );
18
19 bool handlesInterface( const QString & I );
20
21 virtual const QString & description( void ) 17 virtual const QString & description( void )
22 { return Data->Description; } 18 { return Data->Description; }
23
24 virtual AsFullSetup * asFullSetup( void )
25 { return (AsFullSetup *)this; }
26
27 virtual bool triggersVPN( void ) 19 virtual bool triggersVPN( void )
28 { return Data->TriggerVPN; } 20 { return Data->TriggerVPN; }
29 21
22 State_t detectState( void );
23
24protected :
25
26 QString setMyState( NodeCollection * , Action_t, bool );
27
30private : 28private :
31 29
32 ProfileData * Data; 30 ProfileData * Data;
33 31
34}; 32};
35#endif 33#endif
diff --git a/noncore/settings/networksettings2/usb/opie-networksettings2plugin-usb.control b/noncore/settings/networksettings2/usb/opie-networksettings2plugin-usb.control
index 8b8508c..ffb3012 100644
--- a/noncore/settings/networksettings2/usb/opie-networksettings2plugin-usb.control
+++ b/noncore/settings/networksettings2/usb/opie-networksettings2plugin-usb.control
@@ -1,9 +1,9 @@
1Package: opie-networksettingsplugin2-usb 1Package: opie-networksettings2plugin-usb
2Files: plugins/networksettings2/libusb.so* 2Files: plugins/networksettings2/libusb.so*
3Priority: optional 3Priority: optional
4Section: opie/settings 4Section: opie/settings
5Maintainer: Wim Delvaux <wimpie@handhelds.org> 5Maintainer: Wim Delvaux <wimpie@handhelds.org>
6Architecture: arm 6Architecture: arm
7Depends: opie-networksettings2, libopiecore2, libopienet2 7Depends: opie-networksettings2, libopiecore2, libopienet2
8Description: Network settings usb plugin. 8Description: Network settings usb plugin.
9Version: $QPE_VERSION$EXTRAVERSION 9Version: $QPE_VERSION$EXTRAVERSION
diff --git a/noncore/settings/networksettings2/usb/usb_NN.cpp b/noncore/settings/networksettings2/usb/usb_NN.cpp
index 14c479a..bd9ae2b 100644
--- a/noncore/settings/networksettings2/usb/usb_NN.cpp
+++ b/noncore/settings/networksettings2/usb/usb_NN.cpp
@@ -1,53 +1,61 @@
1#include <resources.h>
1#include "usb_NN.h" 2#include "usb_NN.h"
2#include "usb_NNI.h" 3#include "usb_NNI.h"
3 4
4static const char * USBNeeds[] = 5static const char * USBNeeds[] =
5 { 0 6 { 0
6 }; 7 };
7 8
9static const char * USBProvides[] =
10 { "device",
11 0
12 };
13
8/** 14/**
9 * Constructor, find all of the possible interfaces 15 * Constructor, find all of the possible interfaces
10 */ 16 */
11USBNetNode::USBNetNode() : ANetNode(tr("USB Cable Connect")) { 17USBNetNode::USBNetNode() : ANetNode(tr("USB Cable Connect")) {
18 NSResources->addSystemFile(
19 "interfaces", "/etc/network/interfaces", 1 );
12} 20}
13 21
14/** 22/**
15 * Delete any interfaces that we own. 23 * Delete any interfaces that we own.
16 */ 24 */
17USBNetNode::~USBNetNode(){ 25USBNetNode::~USBNetNode(){
18} 26}
19 27
20const QString USBNetNode::nodeDescription(){ 28const QString USBNetNode::nodeDescription(){
21 return tr("\ 29 return tr("\
22<p>Configure Ethernet over USB.</p>\ 30<p>Configure Ethernet over USB.</p>\
23<p>Use this for a computer to computer USB cable connection</p>\ 31<p>Use this for a computer to computer USB cable connection</p>\
24" 32"
25); 33);
26} 34}
27 35
28ANetNodeInstance * USBNetNode::createInstance( void ) { 36ANetNodeInstance * USBNetNode::createInstance( void ) {
29 return new AUSB( this ); 37 return new AUSB( this );
30} 38}
31 39
32const char ** USBNetNode::needs( void ) { 40const char ** USBNetNode::needs( void ) {
33 return USBNeeds; 41 return USBNeeds;
34} 42}
35 43
36const char * USBNetNode::provides( void ) { 44const char ** USBNetNode::provides( void ) {
37 return "device"; 45 return USBProvides;
38} 46}
39 47
40QString USBNetNode::genNic( long ) { 48QString USBNetNode::genNic( long ) {
41 return QString( "usbf" ); 49 return QString( "usbf" );
42} 50}
43 51
44void USBNetNode::setSpecificAttribute( QString & , QString & ) { 52void USBNetNode::setSpecificAttribute( QString & , QString & ) {
45} 53}
46 54
47void USBNetNode::saveSpecificAttribute( QTextStream & ) { 55void USBNetNode::saveSpecificAttribute( QTextStream & ) {
48} 56}
49 57
50extern "C" { 58extern "C" {
51void create_plugin( QList<ANetNode> & PNN ) { 59void create_plugin( QList<ANetNode> & PNN ) {
52 PNN.append( new USBNetNode() ); 60 PNN.append( new USBNetNode() );
53} 61}
diff --git a/noncore/settings/networksettings2/usb/usb_NN.h b/noncore/settings/networksettings2/usb/usb_NN.h
index 73da15a..b825cec 100644
--- a/noncore/settings/networksettings2/usb/usb_NN.h
+++ b/noncore/settings/networksettings2/usb/usb_NN.h
@@ -7,32 +7,32 @@ class AUSB;
7 7
8class USBNetNode : public ANetNode{ 8class USBNetNode : public ANetNode{
9 9
10 Q_OBJECT 10 Q_OBJECT
11 11
12public: 12public:
13 13
14 USBNetNode(); 14 USBNetNode();
15 virtual ~USBNetNode(); 15 virtual ~USBNetNode();
16 16
17 virtual const QString pixmapName() 17 virtual const QString pixmapName()
18 { return "Devices/usb"; } 18 { return "Devices/usb"; }
19 19
20 virtual const QString nodeDescription() ; 20 virtual const QString nodeDescription() ;
21 virtual ANetNodeInstance * createInstance( void ); 21 virtual ANetNodeInstance * createInstance( void );
22 virtual const char ** needs( void ); 22 virtual const char ** needs( void );
23 virtual const char * provides( void ); 23 virtual const char ** provides( void );
24 24
25 virtual QString genNic( long nr ); 25 virtual QString genNic( long nr );
26 26
27private: 27private:
28 28
29 virtual void setSpecificAttribute( QString & Attr, QString & Value ); 29 virtual void setSpecificAttribute( QString & Attr, QString & Value );
30 virtual void saveSpecificAttribute( QTextStream & TS ); 30 virtual void saveSpecificAttribute( QTextStream & TS );
31}; 31};
32 32
33extern "C" 33extern "C"
34{ 34{
35 void create_plugin( QList<ANetNode> & PNN ); 35 void create_plugin( QList<ANetNode> & PNN );
36}; 36};
37 37
38#endif 38#endif
diff --git a/noncore/settings/networksettings2/usb/usb_NNI.cpp b/noncore/settings/networksettings2/usb/usb_NNI.cpp
index 50c6e8d..600b771 100644
--- a/noncore/settings/networksettings2/usb/usb_NNI.cpp
+++ b/noncore/settings/networksettings2/usb/usb_NNI.cpp
@@ -19,43 +19,41 @@ void AUSB::saveSpecificAttribute( QTextStream & ) {
19QWidget * AUSB::edit( QWidget * parent ) { 19QWidget * AUSB::edit( QWidget * parent ) {
20 GUI = new USBEdit( parent ); 20 GUI = new USBEdit( parent );
21 GUI->showData( Data ); 21 GUI->showData( Data );
22 return GUI; 22 return GUI;
23} 23}
24 24
25QString AUSB::acceptable( void ) { 25QString AUSB::acceptable( void ) {
26 return ( GUI ) ? GUI->acceptable( ) : QString(); 26 return ( GUI ) ? GUI->acceptable( ) : QString();
27} 27}
28 28
29void AUSB::commit( void ) { 29void AUSB::commit( void ) {
30 if( GUI && GUI->commit( Data ) ) { 30 if( GUI && GUI->commit( Data ) ) {
31 setModified( 1 ); 31 setModified( 1 );
32 } 32 }
33} 33}
34 34
35short AUSB::generateFileEmbedded( const QString & ID, 35short AUSB::generateFileEmbedded( SystemFile & SF,
36 const QString & Path,
37 QTextStream & TS,
38 long DevNr ) { 36 long DevNr ) {
39 37
40 QString NIC = runtime()->device()->netNode()->nodeClass()->genNic( DevNr ); 38 QString NIC = runtime()->device()->netNode()->nodeClass()->genNic( DevNr );
41 short rvl, rvd; 39 short rvl, rvd;
42 40
43 rvl = 1; 41 rvl = 1;
44 42
45 if( ID == "interfaces" ) { 43 if( SF.name() == "interfaces" ) {
46 Log(("Generate USB for %s\n", ID.latin1() )); 44 Log(("Generate USB for %s\n", SF.name().latin1() ));
47 // generate mapping stanza for this interface 45 // generate mapping stanza for this interface
48 TS << " pre-up " 46 SF << " pre-up "
49 << QPEApplication::qpeDir() 47 << QPEApplication::qpeDir()
50 << "bin/setmacaddress.sh " 48 << "bin/setmacaddress.sh "
51 << NIC 49 << NIC
52 << " || true" 50 << " || true"
53 << endl; 51 << endl;
54 rvl = 0; 52 rvl = 0;
55 } 53 }
56 rvd = ANetNodeInstance::generateFileEmbedded( ID, Path, TS, DevNr ); 54 rvd = ANetNodeInstance::generateFileEmbedded(SF, DevNr );
57 55
58 return (rvd == 2 || rvl == 2 ) ? 2 : 56 return (rvd == 2 || rvl == 2 ) ? 2 :
59 (rvd == 0 || rvl == 0 ) ? 0 : 1; 57 (rvd == 0 || rvl == 0 ) ? 0 : 1;
60 58
61} 59}
diff --git a/noncore/settings/networksettings2/usb/usb_NNI.h b/noncore/settings/networksettings2/usb/usb_NNI.h
index fcdfd91..27e71ee 100644
--- a/noncore/settings/networksettings2/usb/usb_NNI.h
+++ b/noncore/settings/networksettings2/usb/usb_NNI.h
@@ -13,34 +13,32 @@ class AUSB : public ANetNodeInstance {
13public : 13public :
14 14
15 AUSB( USBNetNode * PNN ); 15 AUSB( USBNetNode * PNN );
16 16
17 RuntimeInfo * runtime( void ) 17 RuntimeInfo * runtime( void )
18 { return 18 { return
19 ( RT ) ? RT : ( RT = new USBRun( this, Data ) ); 19 ( RT ) ? RT : ( RT = new USBRun( this, Data ) );
20 } 20 }
21 21
22 QWidget * edit( QWidget * parent ); 22 QWidget * edit( QWidget * parent );
23 QString acceptable( void ); 23 QString acceptable( void );
24 void commit( void ); 24 void commit( void );
25 25
26 virtual void * data( void ) 26 virtual void * data( void )
27 { return (void *)&Data; } 27 { return (void *)&Data; }
28 28
29 virtual short generateFileEmbedded( const QString & ID, 29 virtual short generateFileEmbedded( SystemFile & TS,
30 const QString & Path,
31 QTextStream & TS,
32 long DevNr ); 30 long DevNr );
33 31
34protected : 32protected :
35 33
36 virtual void setSpecificAttribute( QString & Attr, QString & Value ); 34 virtual void setSpecificAttribute( QString & Attr, QString & Value );
37 virtual void saveSpecificAttribute( QTextStream & TS ); 35 virtual void saveSpecificAttribute( QTextStream & TS );
38 36
39private : 37private :
40 38
41 USBEdit * GUI; 39 USBEdit * GUI;
42 USBData Data; 40 USBData Data;
43 USBRun * RT; 41 USBRun * RT;
44}; 42};
45 43
46#endif 44#endif
diff --git a/noncore/settings/networksettings2/usb/usbdata.h b/noncore/settings/networksettings2/usb/usbdata.h
index c59f508..fa357b5 100644
--- a/noncore/settings/networksettings2/usb/usbdata.h
+++ b/noncore/settings/networksettings2/usb/usbdata.h
@@ -1,8 +1,9 @@
1#ifndef USB_DATA_H 1#ifndef USB_DATA_H
2#define USB_DATA_H 2#define USB_DATA_H
3 3
4typedef struct USBData { 4class USBData {
5public :
5 bool Fake; 6 bool Fake;
6} USBData_t; 7} ;
7 8
8#endif 9#endif
diff --git a/noncore/settings/networksettings2/usb/usbedit.cpp b/noncore/settings/networksettings2/usb/usbedit.cpp
index 153c497..cc96b96 100644
--- a/noncore/settings/networksettings2/usb/usbedit.cpp
+++ b/noncore/settings/networksettings2/usb/usbedit.cpp
@@ -1,17 +1,17 @@
1#include <GUIUtils.h> 1#include <GUIUtils.h>
2#include "usbedit.h" 2#include "usbedit.h"
3 3
4USBEdit::USBEdit( QWidget * Parent ) : USBGUI( Parent ){ 4USBEdit::USBEdit( QWidget * Parent ) : USBGUI( Parent ){
5 5
6} 6}
7 7
8QString USBEdit::acceptable( void ) { 8QString USBEdit::acceptable( void ) {
9 return QString(); 9 return QString();
10} 10}
11 11
12void USBEdit::showData( USBData_t & Data ) { 12void USBEdit::showData( USBData & Data ) {
13} 13}
14 14
15bool USBEdit::commit( USBData_t & Data ) { 15bool USBEdit::commit( USBData & Data ) {
16 return 1; 16 return 1;
17} 17}
diff --git a/noncore/settings/networksettings2/usb/usbedit.h b/noncore/settings/networksettings2/usb/usbedit.h
index 441f2f0..4179898 100644
--- a/noncore/settings/networksettings2/usb/usbedit.h
+++ b/noncore/settings/networksettings2/usb/usbedit.h
@@ -1,12 +1,12 @@
1#include "usbdata.h" 1#include "usbdata.h"
2#include "usbGUI.h" 2#include "usbGUI.h"
3 3
4class USBEdit : public USBGUI { 4class USBEdit : public USBGUI {
5 5
6public : 6public :
7 7
8 USBEdit( QWidget * parent ); 8 USBEdit( QWidget * parent );
9 QString acceptable( void ); 9 QString acceptable( void );
10 bool commit( USBData_t & Data ); 10 bool commit( USBData & Data );
11 void showData( USBData_t & Data ); 11 void showData( USBData & Data );
12}; 12};
diff --git a/noncore/settings/networksettings2/usb/usbrun.cpp b/noncore/settings/networksettings2/usb/usbrun.cpp
index b8ac8a8..f8824e0 100644
--- a/noncore/settings/networksettings2/usb/usbrun.cpp
+++ b/noncore/settings/networksettings2/usb/usbrun.cpp
@@ -1,178 +1,112 @@
1#include <qfile.h> 1#include <qfile.h>
2#include <qfileinfo.h> 2#include <qfileinfo.h>
3#include <qtextstream.h> 3#include <qtextstream.h>
4#include <resources.h> 4#include <resources.h>
5#include "usbrun.h" 5#include "usbrun.h"
6 6
7void USBRun::detectState( NodeCollection * NC ) { 7State_t USBRun::detectState( void ) {
8 // unavailable : no card found 8 // unavailable : no card found
9 // available : card found and assigned to us or free 9 // available : card found and assigned to us or free
10 // up : card found and assigned to us and up 10 // up : card found and assigned to us and up
11 NodeCollection * NC = nodeCollection();
11 QString S = QString( "/tmp/profile-%1.up" ).arg(NC->number()); 12 QString S = QString( "/tmp/profile-%1.up" ).arg(NC->number());
12 System & Sys = NSResources->system(); 13 System & Sys = NSResources->system();
13 InterfaceInfo * Run; 14 InterfaceInfo * Run;
14 QFile F( S ); 15 QFile F( S );
15 Log(("Detecting for %s\n", NC->name().latin1() )); 16 Log(("Detecting for %s\n", NC->name().latin1() ));
16 17
17 if( F.open( IO_ReadOnly ) ) { 18 if( F.open( IO_ReadOnly ) ) {
18 // could open file -> read interface and assign 19 // could open file -> read interface and assign
19 QString X; 20 QString X;
20 QTextStream TS(&F); 21 QTextStream TS(&F);
21 X = TS.readLine(); 22 X = TS.readLine();
22 Log(("%s exists\n", S.latin1() )); 23 Log(("%s exists\n", S.latin1() ));
23 // find interface 24 // find interface
24 if( handlesInterface( X ) ) { 25 if( handlesInterface( X ) ) {
25 for( QDictIterator<InterfaceInfo> It(Sys.interfaces()); 26 for( QDictIterator<InterfaceInfo> It(Sys.interfaces());
26 It.current(); 27 It.current();
27 ++It ) { 28 ++It ) {
28 Run = It.current(); 29 Run = It.current();
29 if( X == Run->Name ) { 30 if( X == Run->Name ) {
30 Run->assignNode( netNode() ); 31 NC->assignInterface( Run );
31 assignInterface( Run ); 32 return IsUp;
32 NC->setCurrentState( IsUp );
33 return;
34 } 33 }
35 } 34 }
36 } 35 }
37 } 36 }
38 37
39 Log(("Assigned %p\n", assignedInterface() )); 38 Log(("Assigned %p\n", NC->assignedInterface() ));
40 if( ( Run = assignedInterface() ) ) { 39 if( ( Run = NC->assignedInterface() ) ) {
41 // we already have an interface assigned -> still present ? 40 // we already have an interface assigned -> still present ?
42 if( ! Run->IsUp ) { 41 if( ! Run->IsUp ) {
43 // usb is still free -> keep assignment 42 // usb is still free -> keep assignment
44 NC->setCurrentState( Available ); 43 return Available;
45 return;
46 } // else interface is up but NOT us -> some other profile 44 } // else interface is up but NOT us -> some other profile
47 } 45 }
48 46
49 // nothing (valid) assigned to us 47 // nothing (valid) assigned to us
50 assignInterface( 0 ); 48 NC->assignInterface( 0 );
51 49
52 // find possible interface 50 // find possible interface
53 for( QDictIterator<InterfaceInfo> It(Sys.interfaces()); 51 for( QDictIterator<InterfaceInfo> It(Sys.interfaces());
54 It.current(); 52 It.current();
55 ++It ) { 53 ++It ) {
56 Run = It.current(); 54 Run = It.current();
57 55
58 Log(("%s %d %d=%d %d\n", 56 Log(("%s %d %d=%d %d\n",
59 Run->Name.latin1(), 57 Run->Name.latin1(),
60 handlesInterface( Run->Name ), 58 handlesInterface( Run->Name ),
61 Run->CardType, ARPHRD_ETHER, 59 Run->CardType, ARPHRD_ETHER,
62 ! Run->IsUp )); 60 ! Run->IsUp ));
63 61
64 if( handlesInterface( Run->Name ) && 62 if( handlesInterface( Run->Name ) &&
65 Run->CardType == ARPHRD_ETHER && 63 Run->CardType == ARPHRD_ETHER &&
66 ! Run->IsUp 64 ! Run->IsUp
67 ) { 65 ) {
68 Log(("Released(OFF)\n" ));
69 // proper type, and Not UP -> free 66 // proper type, and Not UP -> free
70 NC->setCurrentState( Off ); 67 return Off;
71 return;
72 } 68 }
73 } 69 }
74 // no free found
75 Log(("UNA\n" ));
76 70
77 NC->setCurrentState( Unavailable ); 71 return Unavailable;
78} 72}
79 73
80bool USBRun::setState( NodeCollection * NC, Action_t A, bool ) { 74QString USBRun::setMyState( NodeCollection *, Action_t , bool ) {
81 75 return QString();
82 // we only handle activate and deactivate
83 switch( A ) {
84 case Activate :
85 {
86 if( NC->currentState() != Off ) {
87 return 0;
88 }
89 InterfaceInfo * N = getInterface();
90 if( ! N ) {
91 // no interface available
92 NC->setCurrentState( Unavailable );
93 return 0;
94 }
95 // because we were OFF the interface
96 // we get back is NOT assigned
97 N->assignNode( netNode() );
98 assignInterface( N );
99 Log(("Assing %p\n", N ));
100 NC->setCurrentState( Available );
101 return 1;
102 }
103 case Deactivate :
104 if( NC->currentState() == IsUp ) {
105 // bring down first
106 if( ! connection()->setState( Down ) )
107 // could not ...
108 return 0;
109 } else if( NC->currentState() != Available ) {
110 return 1;
111 }
112 assignedInterface()->assignNode( 0 ); // release
113 assignInterface( 0 );
114 NC->setCurrentState( Off );
115 return 1;
116 default :
117 // FT
118 break;
119 }
120 return 0;
121}
122
123bool USBRun::canSetState( State_t Curr, Action_t A ) {
124 // we only handle up down activate and deactivate
125 switch( A ) {
126 case Activate :
127 { // at least available
128 if( Curr == Available ) {
129 return 1;
130 }
131 // or we can make one available
132 InterfaceInfo * N = getInterface();
133 if( ! N || N->assignedNode() != 0 ) {
134 // non available or assigned
135 return 0;
136 }
137 return 1;
138 }
139 case Deactivate :
140 return ( Curr >= Available );
141 default :
142 // FT
143 break;
144 }
145 return 0;
146} 76}
147 77
148// get interface that is free or assigned to us 78// get interface that is free or assigned to us
149InterfaceInfo * USBRun::getInterface( void ) { 79InterfaceInfo * USBRun::getInterface( void ) {
150 80
151 System & S = NSResources->system(); 81 System & S = NSResources->system();
152 InterfaceInfo * best = 0, * Run; 82 InterfaceInfo * best = 0, * Run;
153 QRegExp R( "usb[0-9abcdef]" ); 83 QRegExp R( "usb[0-9abcdef]" );
154 84
155 for( QDictIterator<InterfaceInfo> It(S.interfaces()); 85 for( QDictIterator<InterfaceInfo> It(S.interfaces());
156 It.current(); 86 It.current();
157 ++It ) { 87 ++It ) {
158 Run = It.current(); 88 Run = It.current();
159 if( handlesInterface( Run->Name ) && 89 if( handlesInterface( Run->Name ) &&
160 Run->CardType == ARPHRD_ETHER 90 Run->CardType == ARPHRD_ETHER
161 ) { 91 ) {
162 // this is a USB card 92 // this is a USB card
163 if( Run->assignedNode() == netNode() ) { 93 if( Run->assignedConnection() == netNode()->connection() ) {
164 // assigned to us 94 // assigned to us
165 return Run; 95 return Run;
166 } else if( Run->assignedNode() == 0 ) { 96 } else if( Run->assignedConnection() == 0 ) {
167 // free 97 // free
168 best = Run; 98 best = Run;
169 } 99 }
170 } 100 }
171 } 101 }
172 return best; // can be 0 102 return best; // can be 0
173} 103}
174 104
175bool USBRun::handlesInterface( const QString & S ) { 105bool USBRun::handlesInterface( const QString & S ) {
176 return Pat.match( S ) >= 0; 106 return Pat.match( S ) >= 0;
177} 107}
178 108
109bool USBRun::handlesInterface( InterfaceInfo * I ) {
110 return handlesInterface( I->Name );
111}
112
diff --git a/noncore/settings/networksettings2/usb/usbrun.h b/noncore/settings/networksettings2/usb/usbrun.h
index 03e21ab..6ce4fa2 100644
--- a/noncore/settings/networksettings2/usb/usbrun.h
+++ b/noncore/settings/networksettings2/usb/usbrun.h
@@ -1,37 +1,36 @@
1#ifndef USBRUN_H 1#ifndef USBRUN_H
2#define USBRUN_H 2#define USBRUN_H
3 3
4#include <asdevice.h> 4#include <netnode.h>
5#include <qregexp.h> 5#include <qregexp.h>
6#include "usbdata.h" 6#include "usbdata.h"
7 7
8class USBRun : public AsDevice { 8class USBRun : public RuntimeInfo {
9 9
10public : 10public :
11 11
12 USBRun( ANetNodeInstance * NNI, 12 USBRun( ANetNodeInstance * NNI,
13 USBData & Data ) : 13 USBData & Data ) :
14 AsDevice( NNI ), 14 RuntimeInfo( NNI ),
15 Pat( "usb[0-9abcdef]" ) 15 Pat( "usb[0-9abcdef]" ) {
16 { } 16 }
17 17
18 virtual AsDevice * device( void ) 18 virtual RuntimeInfo * device( void )
19 { return (AsDevice *)this; } 19 { return this; }
20 20
21 virtual AsDevice * asDevice( void ) 21 bool handlesInterface( const QString & I );
22 { return (AsDevice *)this; } 22 bool handlesInterface( InterfaceInfo * );
23protected :
24 23
25 void detectState( NodeCollection * ); 24 State_t detectState( void );
26 bool setState( NodeCollection * , Action_t A, bool );
27 bool canSetState( State_t , Action_t A );
28 25
29 bool handlesInterface( const QString & I ); 26protected :
27
28 QString setMyState( NodeCollection * , Action_t, bool );
30 29
31private : 30private :
32 31
33 InterfaceInfo * getInterface( void ); 32 InterfaceInfo * getInterface( void );
34 QRegExp Pat; 33 QRegExp Pat;
35 34
36}; 35};
37#endif 36#endif
diff --git a/noncore/settings/networksettings2/vpn/opie-networksettings2plugin-vpn.control b/noncore/settings/networksettings2/vpn/opie-networksettings2plugin-vpn.control
index b346c5d..08f131f 100644
--- a/noncore/settings/networksettings2/vpn/opie-networksettings2plugin-vpn.control
+++ b/noncore/settings/networksettings2/vpn/opie-networksettings2plugin-vpn.control
@@ -1,9 +1,9 @@
1Package: opie-networksettingsplugin2-vpn 1Package: opie-networksettings2plugin-vpn
2Files: plugins/networksettings2/libvpn.so* 2Files: plugins/networksettings2/libvpn.so*
3Priority: optional 3Priority: optional
4Section: opie/settings 4Section: opie/settings
5Maintainer: Wim Delvaux <wimpie@handhelds.org> 5Maintainer: Wim Delvaux <wimpie@handhelds.org>
6Architecture: arm 6Architecture: arm
7Depends: opie-networksettings2, libopiecore2, libopienet2 7Depends: opie-networksettings2, libopiecore2, libopienet2
8Description: Network settings vpn plugin. 8Description: Network settings vpn plugin.
9Version: $QPE_VERSION$EXTRAVERSION 9Version: $QPE_VERSION$EXTRAVERSION
diff --git a/noncore/settings/networksettings2/vpn/vpn_NN.cpp b/noncore/settings/networksettings2/vpn/vpn_NN.cpp
index 9d3b6e7..23ec04a 100644
--- a/noncore/settings/networksettings2/vpn/vpn_NN.cpp
+++ b/noncore/settings/networksettings2/vpn/vpn_NN.cpp
@@ -1,50 +1,54 @@
1#include "vpn_NN.h" 1#include "vpn_NN.h"
2#include "vpn_NNI.h" 2#include "vpn_NNI.h"
3 3
4static const char * VPNNeeds[] = 4static const char * VPNNeeds[] =
5 { 0 5 { 0
6 }; 6 };
7 7
8static const char * VPNProvides[] =
9 { "connection",
10 0
11 };
8/** 12/**
9 * Constructor, find all of the possible interfaces 13 * Constructor, find all of the possible interfaces
10 */ 14 */
11VPNNetNode::VPNNetNode() : ANetNode(tr("VPN Connection")) { 15VPNNetNode::VPNNetNode() : ANetNode(tr("VPN Connection")) {
12} 16}
13 17
14/** 18/**
15 * Delete any interfaces that we own. 19 * Delete any interfaces that we own.
16 */ 20 */
17VPNNetNode::~VPNNetNode(){ 21VPNNetNode::~VPNNetNode(){
18} 22}
19 23
20const QString VPNNetNode::nodeDescription(){ 24const QString VPNNetNode::nodeDescription(){
21 return tr("\ 25 return tr("\
22<p>Configure private IP connection.</p>\ 26<p>Configure private IP connection.</p>\
23<p>Defines Secure tunnels over non secure IP sessions</p>\ 27<p>Defines Secure tunnels over non secure IP sessions</p>\
24" 28"
25); 29);
26} 30}
27 31
28ANetNodeInstance * VPNNetNode::createInstance( void ) { 32ANetNodeInstance * VPNNetNode::createInstance( void ) {
29 return new AVPN( this ); 33 return new AVPN( this );
30} 34}
31 35
32const char ** VPNNetNode::needs( void ) { 36const char ** VPNNetNode::needs( void ) {
33 return VPNNeeds; 37 return VPNNeeds;
34} 38}
35 39
36const char * VPNNetNode::provides( void ) { 40const char ** VPNNetNode::provides( void ) {
37 return "connection"; 41 return VPNProvides;
38} 42}
39 43
40void VPNNetNode::setSpecificAttribute( QString & , QString & ) { 44void VPNNetNode::setSpecificAttribute( QString & , QString & ) {
41} 45}
42 46
43void VPNNetNode::saveSpecificAttribute( QTextStream & ) { 47void VPNNetNode::saveSpecificAttribute( QTextStream & ) {
44} 48}
45 49
46extern "C" { 50extern "C" {
47void create_plugin( QList<ANetNode> & PNN ) { 51void create_plugin( QList<ANetNode> & PNN ) {
48 PNN.append( new VPNNetNode() ); 52 PNN.append( new VPNNetNode() );
49} 53}
50} 54}
diff --git a/noncore/settings/networksettings2/vpn/vpn_NN.h b/noncore/settings/networksettings2/vpn/vpn_NN.h
index 3c7b5e0..c2e43d4 100644
--- a/noncore/settings/networksettings2/vpn/vpn_NN.h
+++ b/noncore/settings/networksettings2/vpn/vpn_NN.h
@@ -7,30 +7,30 @@ class AVPN;
7 7
8class VPNNetNode : public ANetNode{ 8class VPNNetNode : public ANetNode{
9 9
10 Q_OBJECT 10 Q_OBJECT
11 11
12public: 12public:
13 13
14 VPNNetNode(); 14 VPNNetNode();
15 virtual ~VPNNetNode(); 15 virtual ~VPNNetNode();
16 16
17 virtual const QString pixmapName() 17 virtual const QString pixmapName()
18 { return "Devices/vpn"; } 18 { return "Devices/vpn"; }
19 19
20 virtual const QString nodeDescription() ; 20 virtual const QString nodeDescription() ;
21 virtual ANetNodeInstance * createInstance( void ); 21 virtual ANetNodeInstance * createInstance( void );
22 virtual const char ** needs( void ); 22 virtual const char ** needs( void );
23 virtual const char * provides( void ); 23 virtual const char ** provides( void );
24 24
25private: 25private:
26 26
27 virtual void setSpecificAttribute( QString & Attr, QString & Value ); 27 virtual void setSpecificAttribute( QString & Attr, QString & Value );
28 virtual void saveSpecificAttribute( QTextStream & TS ); 28 virtual void saveSpecificAttribute( QTextStream & TS );
29}; 29};
30 30
31extern "C" 31extern "C"
32{ 32{
33 void create_plugin( QList<ANetNode> & PNN ); 33 void create_plugin( QList<ANetNode> & PNN );
34}; 34};
35 35
36#endif 36#endif
diff --git a/noncore/settings/networksettings2/vpn/vpndata.h b/noncore/settings/networksettings2/vpn/vpndata.h
index 5c986aa..ee88bc4 100644
--- a/noncore/settings/networksettings2/vpn/vpndata.h
+++ b/noncore/settings/networksettings2/vpn/vpndata.h
@@ -1,16 +1,17 @@
1#ifndef VPN_DATA_H 1#ifndef VPN_DATA_H
2#define VPN_DATA_H 2#define VPN_DATA_H
3 3
4#include <qstring.h> 4#include <qstring.h>
5typedef struct VPNData { 5class VPNData {
6public :
6 QString Device; 7 QString Device;
7 QString LockFile; 8 QString LockFile;
8 long Speed; 9 long Speed;
9 short Parity; 10 short Parity;
10 short DataBits; 11 short DataBits;
11 short StopBits; 12 short StopBits;
12 bool HardwareControl; 13 bool HardwareControl;
13 bool SoftwareControl; 14 bool SoftwareControl;
14} VPNData_t; 15} ;
15 16
16#endif 17#endif
diff --git a/noncore/settings/networksettings2/vpn/vpnedit.cpp b/noncore/settings/networksettings2/vpn/vpnedit.cpp
index f336394..8445757 100644
--- a/noncore/settings/networksettings2/vpn/vpnedit.cpp
+++ b/noncore/settings/networksettings2/vpn/vpnedit.cpp
@@ -1,18 +1,18 @@
1#include <GUIUtils.h> 1#include <GUIUtils.h>
2#include "vpnedit.h" 2#include "vpnedit.h"
3 3
4 4
5VPNEdit::VPNEdit( QWidget * Parent ) : VPNGUI( Parent ){ 5VPNEdit::VPNEdit( QWidget * Parent ) : VPNGUI( Parent ){
6 6
7} 7}
8 8
9QString VPNEdit::acceptable( void ) { 9QString VPNEdit::acceptable( void ) {
10 return QString(); 10 return QString();
11} 11}
12 12
13void VPNEdit::showData( VPNData_t & Data ) { 13void VPNEdit::showData( VPNData & Data ) {
14} 14}
15 15
16bool VPNEdit::commit( VPNData_t & Data ) { 16bool VPNEdit::commit( VPNData & Data ) {
17 return 0; 17 return 0;
18} 18}
diff --git a/noncore/settings/networksettings2/vpn/vpnedit.h b/noncore/settings/networksettings2/vpn/vpnedit.h
index 76480cd..156bcc5 100644
--- a/noncore/settings/networksettings2/vpn/vpnedit.h
+++ b/noncore/settings/networksettings2/vpn/vpnedit.h
@@ -1,12 +1,12 @@
1#include "vpndata.h" 1#include "vpndata.h"
2#include "vpnGUI.h" 2#include "vpnGUI.h"
3 3
4class VPNEdit : public VPNGUI { 4class VPNEdit : public VPNGUI {
5 5
6public : 6public :
7 7
8 VPNEdit( QWidget * parent ); 8 VPNEdit( QWidget * parent );
9 QString acceptable( void ); 9 QString acceptable( void );
10 bool commit( VPNData_t & Data ); 10 bool commit( VPNData & Data );
11 void showData( VPNData_t & Data ); 11 void showData( VPNData & Data );
12}; 12};
diff --git a/noncore/settings/networksettings2/vpn/vpnrun.cpp b/noncore/settings/networksettings2/vpn/vpnrun.cpp
index ab2966c..64728aa 100644
--- a/noncore/settings/networksettings2/vpn/vpnrun.cpp
+++ b/noncore/settings/networksettings2/vpn/vpnrun.cpp
@@ -1,6 +1 @@
1#include "vpnrun.h" #include "vpnrun.h"
2
3bool VPNRun::handlesInterface( const QString & ) {
4 // to be figured out
5 return 0;
6}
diff --git a/noncore/settings/networksettings2/vpn/vpnrun.h b/noncore/settings/networksettings2/vpn/vpnrun.h
index c19b609..9a55625 100644
--- a/noncore/settings/networksettings2/vpn/vpnrun.h
+++ b/noncore/settings/networksettings2/vpn/vpnrun.h
@@ -1,32 +1,27 @@
1#ifndef VPNRUN_H 1#ifndef VPNRUN_H
2#define VPNRUN_H 2#define VPNRUN_H
3 3
4#include <asconnection.h> 4#include <netnode.h>
5#include "vpndata.h" 5#include "vpndata.h"
6 6
7class VPNRun : public AsConnection { 7class VPNRun : public RuntimeInfo {
8 8
9public : 9public :
10 10
11 VPNRun( ANetNodeInstance * NNI, VPNData & Data ) : 11 VPNRun( ANetNodeInstance * NNI, VPNData & Data ) :
12 AsConnection( NNI ) 12 RuntimeInfo( NNI )
13 { } 13 { }
14 14
15 virtual AsConnection * asConnection( void ) 15 virtual RuntimeInfo * connection( void )
16 { return (AsConnection *)this; } 16 { return this; }
17protected :
18
19 void detectState( NodeCollection * )
20 { }
21 17
22 bool setState( NodeCollection *, Action_t, bool ) 18 State_t detectState( void )
23 { return 0; } 19 { return Unknown; }
24 20
25 bool canSetState( State_t, Action_t ) 21protected :
26 { return 0; }
27
28 bool handlesInterface( const QString & I );
29 22
23 QString setMyState( NodeCollection * , Action_t, bool )
24 { return QString(); }
30}; 25};
31 26
32#endif 27#endif
diff --git a/noncore/settings/networksettings2/wlan/opie-networksettings2plugin-wlan.control b/noncore/settings/networksettings2/wlan/opie-networksettings2plugin-wlan.control
index 14afd21..90f195a 100644
--- a/noncore/settings/networksettings2/wlan/opie-networksettings2plugin-wlan.control
+++ b/noncore/settings/networksettings2/wlan/opie-networksettings2plugin-wlan.control
@@ -1,9 +1,9 @@
1Package: opie-networksettingsplugin2-wlan 1Package: opie-networksettings2plugin-wlan
2Files: plugins/networksettings2/libwlan.so* 2Files: plugins/networksettings2/libwlan.so*
3Priority: optional 3Priority: optional
4Section: opie/settings 4Section: opie/settings
5Maintainer: Wim Delvaux <wimpie@handhelds.org> 5Maintainer: Wim Delvaux <wimpie@handhelds.org>
6Architecture: arm 6Architecture: arm
7Depends: opie-networksettings2, libopiecore2, libopienet2 7Depends: opie-networksettings2, libopiecore2, libopienet2
8Description: Network settings wlan plugin. 8Description: Network settings wlan plugin.
9Version: $QPE_VERSION$EXTRAVERSION 9Version: $QPE_VERSION$EXTRAVERSION
diff --git a/noncore/settings/networksettings2/wlan/wlan_NN.cpp b/noncore/settings/networksettings2/wlan/wlan_NN.cpp
index e4c3f60..36a5c33 100644
--- a/noncore/settings/networksettings2/wlan/wlan_NN.cpp
+++ b/noncore/settings/networksettings2/wlan/wlan_NN.cpp
@@ -1,54 +1,62 @@
1#include <resources.h>
1#include "wlan_NN.h" 2#include "wlan_NN.h"
2#include "wlan_NNI.h" 3#include "wlan_NNI.h"
3 4
4static const char * WLanNeeds[] = 5static const char * WLanNeeds[] =
5 { 0 6 { 0
6 }; 7 };
7 8
9static const char * WLanProvides[] =
10 { "device",
11 0
12 };
13
8/** 14/**
9 * Constructor, find all of the possible interfaces 15 * Constructor, find all of the possible interfaces
10 */ 16 */
11WLanNetNode::WLanNetNode() : ANetNode(tr("WLan Device")) { 17WLanNetNode::WLanNetNode() : ANetNode(tr("WLan Device")) {
18 NSResources->addSystemFile(
19 "interfaces", "/etc/network/interfaces", 1 );
12 InstanceCount = 2; 20 InstanceCount = 2;
13} 21}
14 22
15/** 23/**
16 * Delete any interfaces that we own. 24 * Delete any interfaces that we own.
17 */ 25 */
18WLanNetNode::~WLanNetNode(){ 26WLanNetNode::~WLanNetNode(){
19} 27}
20 28
21const QString WLanNetNode::nodeDescription(){ 29const QString WLanNetNode::nodeDescription(){
22 return tr("\ 30 return tr("\
23<p>Configure Wi/Fi or WLan network cards.</p>\ 31<p>Configure Wi/Fi or WLan network cards.</p>\
24<p>Defines Wireless options for those cards</p>\ 32<p>Defines Wireless options for those cards</p>\
25" 33"
26); 34);
27} 35}
28 36
29ANetNodeInstance * WLanNetNode::createInstance( void ) { 37ANetNodeInstance * WLanNetNode::createInstance( void ) {
30 return new AWLan( this ); 38 return new AWLan( this );
31} 39}
32 40
33const char ** WLanNetNode::needs( void ) { 41const char ** WLanNetNode::needs( void ) {
34 return WLanNeeds; 42 return WLanNeeds;
35} 43}
36 44
37const char * WLanNetNode::provides( void ) { 45const char ** WLanNetNode::provides( void ) {
38 return "device"; 46 return WLanProvides;
39} 47}
40 48
41QString WLanNetNode::genNic( long nr ) { 49QString WLanNetNode::genNic( long nr ) {
42 QString S; 50 QString S;
43 return S.sprintf( "wlan%ld", nr ); 51 return S.sprintf( "wlan%ld", nr );
44} 52}
45 53
46void WLanNetNode::setSpecificAttribute( QString & A, QString & V ) { 54void WLanNetNode::setSpecificAttribute( QString & A, QString & V ) {
47 if( A == "interfacecount" ) { 55 if( A == "interfacecount" ) {
48 InstanceCount = V.toLong(); 56 InstanceCount = V.toLong();
49 } 57 }
50} 58}
51 59
52void WLanNetNode::saveSpecificAttribute( QTextStream & TS ) { 60void WLanNetNode::saveSpecificAttribute( QTextStream & TS ) {
53 TS << "interfacecount=" 61 TS << "interfacecount="
54 << InstanceCount 62 << InstanceCount
diff --git a/noncore/settings/networksettings2/wlan/wlan_NN.h b/noncore/settings/networksettings2/wlan/wlan_NN.h
index c13c05c..4bffd3d 100644
--- a/noncore/settings/networksettings2/wlan/wlan_NN.h
+++ b/noncore/settings/networksettings2/wlan/wlan_NN.h
@@ -7,33 +7,33 @@ class AWLan;
7 7
8class WLanNetNode : public ANetNode{ 8class WLanNetNode : public ANetNode{
9 9
10 Q_OBJECT 10 Q_OBJECT
11 11
12public: 12public:
13 13
14 WLanNetNode(); 14 WLanNetNode();
15 virtual ~WLanNetNode(); 15 virtual ~WLanNetNode();
16 16
17 virtual const QString pixmapName() 17 virtual const QString pixmapName()
18 { return "Devices/wlan"; } 18 { return "Devices/wlan"; }
19 19
20 virtual const QString nodeDescription() ; 20 virtual const QString nodeDescription() ;
21 virtual ANetNodeInstance * createInstance( void ); 21 virtual ANetNodeInstance * createInstance( void );
22 virtual const char ** needs( void ); 22 virtual const char ** needs( void );
23 virtual const char * provides( void ); 23 virtual const char ** provides( void );
24 24
25 virtual long instanceCount( void ) 25 virtual long instanceCount( void )
26 { return InstanceCount; } 26 { return InstanceCount; }
27 virtual QString genNic( long ); 27 virtual QString genNic( long );
28 28
29private: 29private:
30 30
31 virtual void setSpecificAttribute( QString & Attr, QString & Value ); 31 virtual void setSpecificAttribute( QString & Attr, QString & Value );
32 virtual void saveSpecificAttribute( QTextStream & TS ); 32 virtual void saveSpecificAttribute( QTextStream & TS );
33 33
34 // number of interfaces for this device 34 // number of interfaces for this device
35 long InstanceCount; 35 long InstanceCount;
36 36
37}; 37};
38 38
39extern "C" 39extern "C"
diff --git a/noncore/settings/networksettings2/wlan/wlan_NNI.cpp b/noncore/settings/networksettings2/wlan/wlan_NNI.cpp
index 0e4fc4c..d5b1014 100644
--- a/noncore/settings/networksettings2/wlan/wlan_NNI.cpp
+++ b/noncore/settings/networksettings2/wlan/wlan_NNI.cpp
@@ -66,86 +66,84 @@ void AWLan::saveSpecificAttribute( QTextStream & S ) {
66 66
67QWidget * AWLan::edit( QWidget * parent ) { 67QWidget * AWLan::edit( QWidget * parent ) {
68 GUI = new WLanEdit( parent, this ); 68 GUI = new WLanEdit( parent, this );
69 GUI->showData( Data ); 69 GUI->showData( Data );
70 return GUI; 70 return GUI;
71} 71}
72 72
73QString AWLan::acceptable( void ) { 73QString AWLan::acceptable( void ) {
74 return ( GUI ) ? GUI->acceptable( ) : QString(); 74 return ( GUI ) ? GUI->acceptable( ) : QString();
75} 75}
76 76
77void AWLan::commit( void ) { 77void AWLan::commit( void ) {
78 if( GUI && GUI->commit( Data ) ) 78 if( GUI && GUI->commit( Data ) )
79 setModified( 1 ); 79 setModified( 1 );
80} 80}
81 81
82short AWLan::generateFileEmbedded( const QString & ID, 82short AWLan::generateFileEmbedded( SystemFile & SF,
83 const QString & Path,
84 QTextStream & TS,
85 long DevNr ) { 83 long DevNr ) {
86 84
87 short rvl, rvd; 85 short rvl, rvd;
88 86
89 rvl = 1; 87 rvl = 1;
90 88
91 if( ID == "interfaces" ) { 89 if( SF.name() == "interfaces" ) {
92 Log(("Generate WLanNNI for %s\n", ID.latin1() )); 90 Log(("Generate WLanNNI for %s\n", SF.name().latin1() ));
93 TS << " wireless_essid \"" 91 SF << " wireless_essid \""
94 << Data.ESSID 92 << Data.ESSID
95 << "\"" 93 << "\""
96 << endl; 94 << endl;
97 95
98 if( ! Data.NodeName.isEmpty() ) { 96 if( ! Data.NodeName.isEmpty() ) {
99 if( Data.NodeName == tr("<UseHostName>") ) { 97 if( Data.NodeName == tr("<UseHostName>") ) {
100 char Buf[100]; 98 char Buf[100];
101 if( gethostname(Buf, sizeof(Buf) ) == 0 ) { 99 if( gethostname(Buf, sizeof(Buf) ) == 0 ) {
102 Buf[99] = '\0'; // just to make sure 100 Buf[99] = '\0'; // just to make sure
103 TS << " wireless_nick " 101 SF << " wireless_nick "
104 << Buf 102 << Buf
105 << endl; 103 << endl;
106 } 104 }
107 } else { 105 } else {
108 TS << " wireless_nick \"" 106 SF << " wireless_nick \""
109 << Data.NodeName 107 << Data.NodeName
110 << "\"" 108 << "\""
111 << endl; 109 << endl;
112 } 110 }
113 } 111 }
114 112
115 char * M = "Auto"; 113 char * M = "Auto";
116 switch ( Data.Mode ) { 114 switch ( Data.Mode ) {
117 case 0 : 115 case 0 :
118 break; 116 break;
119 case 1 : 117 case 1 :
120 M = "Managed"; 118 M = "Managed";
121 break; 119 break;
122 case 2 : 120 case 2 :
123 M = "Ad-Hoc"; 121 M = "Ad-Hoc";
124 break; 122 break;
125 } 123 }
126 124
127 TS << " wireless_mode " 125 SF << " wireless_mode "
128 << M 126 << M
129 << endl; 127 << endl;
130 if( Data.Encrypted ) { 128 if( Data.Encrypted ) {
131 for( int i = 0; i < 4; i ++ ) { 129 for( int i = 0; i < 4; i ++ ) {
132 if( ! Data.Key[i].isEmpty() ) { 130 if( ! Data.Key[i].isEmpty() ) {
133 TS << " wireless_key" 131 SF << " wireless_key"
134 << i 132 << i
135 << " " 133 << " "
136 << Data.Key[i] 134 << Data.Key[i]
137 << endl; 135 << endl;
138 } 136 }
139 } 137 }
140 TS << " wireless_keymode " 138 SF << " wireless_keymode "
141 << ((Data.AcceptNonEncrypted) ? "open" : "restricted") 139 << ((Data.AcceptNonEncrypted) ? "open" : "restricted")
142 << endl; 140 << endl;
143 } 141 }
144 rvl = 0; 142 rvl = 0;
145 } 143 }
146 rvd = ANetNodeInstance::generateFileEmbedded( ID, Path, TS, DevNr); 144 rvd = ANetNodeInstance::generateFileEmbedded( SF, DevNr);
147 145
148 return (rvd == 2 || rvl == 2 ) ? 2 : 146 return (rvd == 2 || rvl == 2 ) ? 2 :
149 (rvd == 0 || rvl == 0 ) ? 0 : 1; 147 (rvd == 0 || rvl == 0 ) ? 0 : 1;
150} 148}
151 149
diff --git a/noncore/settings/networksettings2/wlan/wlan_NNI.h b/noncore/settings/networksettings2/wlan/wlan_NNI.h
index a9be65f..e3251c7 100644
--- a/noncore/settings/networksettings2/wlan/wlan_NNI.h
+++ b/noncore/settings/networksettings2/wlan/wlan_NNI.h
@@ -13,35 +13,33 @@ class AWLan : public ANetNodeInstance {
13public : 13public :
14 14
15 AWLan( WLanNetNode * PNN ); 15 AWLan( WLanNetNode * PNN );
16 16
17 RuntimeInfo * runtime( void ) 17 RuntimeInfo * runtime( void )
18 { return 18 { return
19 ( RT ) ? RT : ( RT = new WLanRun( this, Data ) ); 19 ( RT ) ? RT : ( RT = new WLanRun( this, Data ) );
20 } 20 }
21 21
22 QWidget * edit( QWidget * parent ); 22 QWidget * edit( QWidget * parent );
23 QString acceptable( void ); 23 QString acceptable( void );
24 void commit( void ); 24 void commit( void );
25 25
26 virtual void * data( void ) 26 virtual void * data( void )
27 { return (void *)&Data; } 27 { return (void *)&Data; }
28 28
29 virtual short generateFileEmbedded( const QString & ID, 29 virtual short generateFileEmbedded( SystemFile & Sf,
30 const QString & Path,
31 QTextStream & TS,
32 long DevNr ); 30 long DevNr );
33 31
34protected : 32protected :
35 33
36 virtual void setSpecificAttribute( QString & Attr, QString & Value ); 34 virtual void setSpecificAttribute( QString & Attr, QString & Value );
37 virtual void saveSpecificAttribute( QTextStream & TS ); 35 virtual void saveSpecificAttribute( QTextStream & TS );
38 36
39private : 37private :
40 38
41 WLanEdit * GUI; 39 WLanEdit * GUI;
42 WLanData Data; 40 WLanData Data;
43 WLanRun * RT; 41 WLanRun * RT;
44 42
45}; 43};
46 44
47#endif 45#endif
diff --git a/noncore/settings/networksettings2/wlan/wlandata.h b/noncore/settings/networksettings2/wlan/wlandata.h
index 36990a9..f3cc1ab 100644
--- a/noncore/settings/networksettings2/wlan/wlandata.h
+++ b/noncore/settings/networksettings2/wlan/wlandata.h
@@ -1,16 +1,17 @@
1#ifndef WLAN_DATA_H 1#ifndef WLAN_DATA_H
2#define WLAN_DATA_H 2#define WLAN_DATA_H
3 3
4#include <qstring.h> 4#include <qstring.h>
5typedef struct WLanData { 5class WLanData {
6public :
6 QString ESSID; 7 QString ESSID;
7 QString NodeName; 8 QString NodeName;
8 short Mode; 9 short Mode;
9 bool SpecificAP; 10 bool SpecificAP;
10 QString APMac; 11 QString APMac;
11 bool Encrypted; 12 bool Encrypted;
12 QString Key[4]; 13 QString Key[4];
13 bool AcceptNonEncrypted; 14 bool AcceptNonEncrypted;
14} WLanData_t; 15} ;
15 16
16#endif 17#endif
diff --git a/noncore/settings/networksettings2/wlan/wlanedit.cpp b/noncore/settings/networksettings2/wlan/wlanedit.cpp
index 8d3979e..74174bf 100644
--- a/noncore/settings/networksettings2/wlan/wlanedit.cpp
+++ b/noncore/settings/networksettings2/wlan/wlanedit.cpp
@@ -7,33 +7,33 @@
7#include <GUIUtils.h> 7#include <GUIUtils.h>
8#include <resources.h> 8#include <resources.h>
9#include <wextensions.h> 9#include <wextensions.h>
10 10
11#include "wlanedit.h" 11#include "wlanedit.h"
12#include "wlan_NN.h" 12#include "wlan_NN.h"
13#include "wlan_NNI.h" 13#include "wlan_NNI.h"
14 14
15WLanEdit::WLanEdit( QWidget * Parent, ANetNodeInstance * TNNI ) : 15WLanEdit::WLanEdit( QWidget * Parent, ANetNodeInstance * TNNI ) :
16 WLanGUI( Parent ), RefreshTimer(this){ 16 WLanGUI( Parent ), RefreshTimer(this){
17 17
18 InterfaceInfo * II; 18 InterfaceInfo * II;
19 19
20 NNI = TNNI; 20 NNI = TNNI;
21 Dev = NNI->runtime()->device(); 21 Dev = NNI->runtime()->device();
22 WE = 0; 22 WE = 0;
23 if( ( II = Dev->assignedInterface() ) ) { 23 if( ( II = NNI->connection()->assignedInterface() ) ) {
24 // show data 24 // show data
25 WE = new WExtensions( II->Name ); 25 WE = new WExtensions( II->Name );
26 26
27 if( WE->doesHaveWirelessExtensions() ) { 27 if( WE->doesHaveWirelessExtensions() ) {
28 QString S; 28 QString S;
29 Station_LBL->setText( WE->station() ); 29 Station_LBL->setText( WE->station() );
30 ESSID_LBL->setText( WE->essid() ); 30 ESSID_LBL->setText( WE->essid() );
31 Mode_LBL->setText( WE->mode() ); 31 Mode_LBL->setText( WE->mode() );
32 S.setNum( WE->frequency() ); 32 S.setNum( WE->frequency() );
33 Frequency_LBL->setText( S ); 33 Frequency_LBL->setText( S );
34 S.setNum( WE->channel() ); 34 S.setNum( WE->channel() );
35 Channel_LBL->setText( S ); 35 Channel_LBL->setText( S );
36 S.setNum( WE->rate() ); 36 S.setNum( WE->rate() );
37 Rate_LBL->setText( S ); 37 Rate_LBL->setText( S );
38 AP_LBL->setText( WE->ap() ); 38 AP_LBL->setText( WE->ap() );
39 39
@@ -48,48 +48,48 @@ WLanEdit::WLanEdit( QWidget * Parent, ANetNodeInstance * TNNI ) :
48WLanEdit::~WLanEdit( void ) { 48WLanEdit::~WLanEdit( void ) {
49 if( WE ) 49 if( WE )
50 delete WE; 50 delete WE;
51} 51}
52 52
53QString WLanEdit::acceptable( void ) { 53QString WLanEdit::acceptable( void ) {
54 if( ESSID_LE->text().isEmpty() ) { 54 if( ESSID_LE->text().isEmpty() ) {
55 return QString("ESSID is mandatory"); 55 return QString("ESSID is mandatory");
56 } 56 }
57 if( SpecifyAP_CB->isChecked() && 57 if( SpecifyAP_CB->isChecked() &&
58 APMac_LE->text().isEmpty() ) { 58 APMac_LE->text().isEmpty() ) {
59 return QString("APMac must have value"); 59 return QString("APMac must have value");
60 } 60 }
61 return QString(); 61 return QString();
62} 62}
63 63
64void WLanEdit::showData( WLanData_t & Data ) { 64void WLanEdit::showData( WLanData & Data ) {
65 Mode_CB->setCurrentItem( Data.Mode ); 65 Mode_CB->setCurrentItem( Data.Mode );
66 ESSID_LE->setText( Data.ESSID ); 66 ESSID_LE->setText( Data.ESSID );
67 NodeName_LE->setText( Data.NodeName ); 67 NodeName_LE->setText( Data.NodeName );
68 SpecifyAP_CB->setChecked( Data.SpecificAP ); 68 SpecifyAP_CB->setChecked( Data.SpecificAP );
69 APMac_LE->setText( Data.APMac ); 69 APMac_LE->setText( Data.APMac );
70 70
71 EnableWEP_CB->setChecked( Data.Encrypted ); 71 EnableWEP_CB->setChecked( Data.Encrypted );
72 AcceptNonEncrypted_CB->setChecked( Data.AcceptNonEncrypted ); 72 AcceptNonEncrypted_CB->setChecked( Data.AcceptNonEncrypted );
73 Key1_LE->setText( Data.Key[0] ); 73 Key1_LE->setText( Data.Key[0] );
74 Key2_LE->setText( Data.Key[1] ); 74 Key2_LE->setText( Data.Key[1] );
75 Key3_LE->setText( Data.Key[2] ); 75 Key3_LE->setText( Data.Key[2] );
76 Key4_LE->setText( Data.Key[3] ); 76 Key4_LE->setText( Data.Key[3] );
77} 77}
78 78
79bool WLanEdit::commit( WLanData_t & Data ) { 79bool WLanEdit::commit( WLanData & Data ) {
80 bool SM = 0; 80 bool SM = 0;
81 81
82 TXTM( Data.ESSID, ESSID_LE, SM ); 82 TXTM( Data.ESSID, ESSID_LE, SM );
83 TXTM( Data.NodeName, NodeName_LE, SM ); 83 TXTM( Data.NodeName, NodeName_LE, SM );
84 TXTM( Data.APMac, APMac_LE, SM ); 84 TXTM( Data.APMac, APMac_LE, SM );
85 TXTM( Data.Key[0], Key1_LE, SM ); 85 TXTM( Data.Key[0], Key1_LE, SM );
86 TXTM( Data.Key[1], Key2_LE, SM ); 86 TXTM( Data.Key[1], Key2_LE, SM );
87 TXTM( Data.Key[2], Key3_LE, SM ); 87 TXTM( Data.Key[2], Key3_LE, SM );
88 TXTM( Data.Key[3], Key4_LE, SM ); 88 TXTM( Data.Key[3], Key4_LE, SM );
89 CBM( Data.SpecificAP, SpecifyAP_CB, SM ); 89 CBM( Data.SpecificAP, SpecifyAP_CB, SM );
90 CBM( Data.Encrypted, EnableWEP_CB, SM ); 90 CBM( Data.Encrypted, EnableWEP_CB, SM );
91 CBM( Data.AcceptNonEncrypted, AcceptNonEncrypted_CB, SM ); 91 CBM( Data.AcceptNonEncrypted, AcceptNonEncrypted_CB, SM );
92 CIM( Data.Mode, Mode_CB, SM ); 92 CIM( Data.Mode, Mode_CB, SM );
93 return 0; 93 return 0;
94} 94}
95 95
diff --git a/noncore/settings/networksettings2/wlan/wlanedit.h b/noncore/settings/networksettings2/wlan/wlanedit.h
index e550c14..8f219d9 100644
--- a/noncore/settings/networksettings2/wlan/wlanedit.h
+++ b/noncore/settings/networksettings2/wlan/wlanedit.h
@@ -1,32 +1,32 @@
1#include <qtimer.h> 1#include <qtimer.h>
2#include <wextensions.h> 2#include <wextensions.h>
3#include "wlandata.h" 3#include "wlandata.h"
4#include "wlanGUI.h" 4#include "wlanGUI.h"
5 5
6class ANetNodeInstance; 6class ANetNodeInstance;
7class AsDevice; 7class RuntimeInfo;
8class WExtensions; 8class WExtensions;
9 9
10class WLanEdit : public WLanGUI { 10class WLanEdit : public WLanGUI {
11 11
12public : 12public :
13 13
14 WLanEdit( QWidget * parent, ANetNodeInstance * NNI ); 14 WLanEdit( QWidget * parent, ANetNodeInstance * NNI );
15 ~WLanEdit( void ); 15 ~WLanEdit( void );
16 QString acceptable( void ); 16 QString acceptable( void );
17 void showData( WLanData_t & Data ); 17 void showData( WLanData & Data );
18 bool commit( WLanData_t & Data ); 18 bool commit( WLanData & Data );
19 19
20public slots : 20public slots :
21 21
22 void SLOT_AutoRefresh( bool ); 22 void SLOT_AutoRefresh( bool );
23 void SLOT_Refresh( void ); 23 void SLOT_Refresh( void );
24 24
25private : 25private :
26 26
27 ANetNodeInstance * NNI; 27 ANetNodeInstance * NNI;
28 AsDevice * Dev; 28 RuntimeInfo * Dev;
29 QTimer RefreshTimer; 29 QTimer RefreshTimer;
30 WExtensions * WE; 30 WExtensions * WE;
31 31
32}; 32};
diff --git a/noncore/settings/networksettings2/wlan/wlanrun.cpp b/noncore/settings/networksettings2/wlan/wlanrun.cpp
index 3f1d4a9..fe49c4e 100644
--- a/noncore/settings/networksettings2/wlan/wlanrun.cpp
+++ b/noncore/settings/networksettings2/wlan/wlanrun.cpp
@@ -1,181 +1,116 @@
1 1
2#include <qfile.h> 2#include <qfile.h>
3#include <qtextstream.h> 3#include <qtextstream.h>
4#include <qstringlist.h> 4#include <qstringlist.h>
5#include <resources.h> 5#include <resources.h>
6#include "wlanrun.h" 6#include "wlanrun.h"
7 7
8void WLanRun::detectState( NodeCollection * NC ) { 8State_t WLanRun::detectState( void ) {
9 9
10 // unavailable : no card found 10 // unavailable : no card found
11 // available : card found and assigned to us or free 11 // available : card found and assigned to us or free
12 // up : card found and assigned to us and up 12 // up : card found and assigned to us and up
13 13
14 NodeCollection * NC = nodeCollection();
14 QString S = QString( "/tmp/profile-%1.up" ).arg(NC->number()); 15 QString S = QString( "/tmp/profile-%1.up" ).arg(NC->number());
15 System & Sys = NSResources->system(); 16 System & Sys = NSResources->system();
16 InterfaceInfo * Run; 17 InterfaceInfo * Run;
17 18
18 QFile F( S ); 19 QFile F( S );
19 20
20 if( F.open( IO_ReadOnly ) ) { 21 if( F.open( IO_ReadOnly ) ) {
21 // could open file -> read interface and assign 22 // could open file -> read interface and assign
22 QString X; 23 QString X;
23 QTextStream TS(&F); 24 QTextStream TS(&F);
24 X = TS.readLine(); 25 X = TS.readLine();
25 // find interface 26 // find interface
26 if( handlesInterface( X ) ) { 27 if( handlesInterface( X ) ) {
27 for( QDictIterator<InterfaceInfo> It(Sys.interfaces()); 28 for( QDictIterator<InterfaceInfo> It(Sys.interfaces());
28 It.current(); 29 It.current();
29 ++It ) { 30 ++It ) {
30 Run = It.current(); 31 Run = It.current();
31 if( X == Run->Name ) { 32 if( X == Run->Name ) {
32 Run->assignNode( netNode() ); 33 NC->assignInterface( Run );
33 assignInterface( Run ); 34 return IsUp;
34 NC->setCurrentState( IsUp );
35 return;
36 } 35 }
37 } 36 }
38 } 37 }
39 } 38 }
40 39
41 if( ( Run = assignedInterface() ) ) { 40 if( ( Run = NC->assignedInterface() ) ) {
42 // we already have an interface assigned -> still present ? 41 // we already have an interface assigned -> still present ?
43 if( ! Run->IsUp ) { 42 if( ! Run->IsUp ) {
44 // usb is still free -> keep assignment 43 // usb is still free -> keep assignment
45 NC->setCurrentState( Available ); 44 return Available;
46 return;
47 } // else interface is up but NOT us -> some other profile 45 } // else interface is up but NOT us -> some other profile
48 } 46 }
49 47
50 // nothing (valid) assigned to us 48 // nothing (valid) assigned to us
51 assignInterface( 0 ); 49 NC->assignInterface( 0 );
52 50
53 // find possible interface 51 // find possible interface
54 for( QDictIterator<InterfaceInfo> It(Sys.interfaces()); 52 for( QDictIterator<InterfaceInfo> It(Sys.interfaces());
55 It.current(); 53 It.current();
56 ++It ) { 54 ++It ) {
57 Run = It.current(); 55 Run = It.current();
58 if( handlesInterface( *Run ) && 56 if( handlesInterface( *Run ) &&
59 ( Run->CardType == ARPHRD_ETHER 57 ( Run->CardType == ARPHRD_ETHER
60#ifdef ARPHRD_IEEE1394 58#ifdef ARPHRD_IEEE1394
61 || Run->CardType == ARPHRD_IEEE1394 59 || Run->CardType == ARPHRD_IEEE1394
62#endif 60#endif
63 ) && 61 ) &&
64 ! Run->IsUp 62 ! Run->IsUp
65 ) { 63 ) {
66 // proper type, and Not UP -> free 64 // proper type, and Not UP -> free
67 NC->setCurrentState( Off ); 65 return Off;
68 return;
69 } 66 }
70 } 67 }
71 // no free found
72 68
73 NC->setCurrentState( Unavailable ); 69 return Unavailable;
74 70
75} 71}
76 72
77bool WLanRun::setState( NodeCollection * NC, Action_t A, bool ) { 73QString WLanRun::setMyState( NodeCollection * , Action_t , bool ) {
78 74
79 // we only handle activate and deactivate 75 // we only handle activate and deactivate
80 switch( A ) { 76 return QString();
81 case Activate :
82 {
83 if( NC->currentState() != Off ) {
84 return 0;
85 }
86 InterfaceInfo * N = getInterface();
87 if( ! N ) {
88 // no interface available
89 NC->setCurrentState( Unavailable );
90 return 0;
91 }
92 // because we were OFF the interface
93 // we get back is NOT assigned
94 N->assignNode( netNode() );
95 assignInterface( N );
96 NC->setCurrentState( Available );
97 return 1;
98 }
99 case Deactivate :
100 if( NC->currentState() == IsUp ) {
101 // bring down first
102 if( ! connection()->setState( Down ) )
103 // could not ...
104 return 0;
105 } else if( NC->currentState() != Available ) {
106 return 1;
107 }
108 assignedInterface()->assignNode( 0 ); // release
109 assignInterface( 0 );
110 NC->setCurrentState( Off );
111 return 1;
112 default :
113 // FT
114 break;
115 }
116 return 0;
117}
118
119bool WLanRun::canSetState( State_t Curr, Action_t A ) {
120 // we only handle up down activate and deactivate
121 switch( A ) {
122 case Activate :
123 { // at least available
124 if( Curr == Available ) {
125 return 1;
126 }
127 // or we can make one available
128 InterfaceInfo * N = getInterface();
129 if( ! N || N->assignedNode() != 0 ) {
130 // non available or assigned
131 return 0;
132 }
133 return 1;
134 }
135 case Deactivate :
136 return ( Curr >= Available );
137 default :
138 // FT
139 break;
140 }
141 return 0;
142} 77}
143 78
144// get interface that is free or assigned to us 79// get interface that is free or assigned to us
145InterfaceInfo * WLanRun::getInterface( void ) { 80InterfaceInfo * WLanRun::getInterface( void ) {
146 81
147 System & S = NSResources->system(); 82 System & S = NSResources->system();
148 InterfaceInfo * best = 0, * Run; 83 InterfaceInfo * best = 0, * Run;
149 84
150 for( QDictIterator<InterfaceInfo> It(S.interfaces()); 85 for( QDictIterator<InterfaceInfo> It(S.interfaces());
151 It.current(); 86 It.current();
152 ++It ) { 87 ++It ) {
153 Run = It.current(); 88 Run = It.current();
154 if( handlesInterface( *Run ) && 89 if( handlesInterface( *Run ) &&
155 ( Run->CardType == ARPHRD_ETHER 90 ( Run->CardType == ARPHRD_ETHER
156#ifdef ARPHRD_IEEE1394 91#ifdef ARPHRD_IEEE1394
157 || Run->CardType == ARPHRD_IEEE1394 92 || Run->CardType == ARPHRD_IEEE1394
158#endif 93#endif
159 ) 94 )
160 ) { 95 ) {
161 // this is a LAN card 96 // this is a LAN card
162 if( Run->assignedNode() == netNode() ) { 97 if( Run->assignedConnection() == netNode()->connection() ) {
163 // assigned to us 98 // assigned to us
164 return Run; 99 return Run;
165 } else if( Run->assignedNode() == 0 ) { 100 } else if( Run->assignedConnection() == 0 ) {
166 // free 101 // free
167 best = Run; 102 best = Run;
168 } 103 }
169 } 104 }
170 } 105 }
171 return best; // can be 0 106 return best; // can be 0
172} 107}
173 108
174bool WLanRun::handlesInterface( const QString & S ) { 109bool WLanRun::handlesInterface( const QString & S ) {
175 InterfaceInfo * II; 110 InterfaceInfo * II;
176 II = NSResources->system().interface( S ); 111 II = NSResources->system().interface( S );
177 if( ( II = NSResources->system().interface( S ) ) ) { 112 if( ( II = NSResources->system().interface( S ) ) ) {
178 return handlesInterface( *II ); 113 return handlesInterface( *II );
179 } 114 }
180 return Pat.match( S ) >= 0; 115 return Pat.match( S ) >= 0;
181} 116}
diff --git a/noncore/settings/networksettings2/wlan/wlanrun.h b/noncore/settings/networksettings2/wlan/wlanrun.h
index 25d5b96..fd325d4 100644
--- a/noncore/settings/networksettings2/wlan/wlanrun.h
+++ b/noncore/settings/networksettings2/wlan/wlanrun.h
@@ -1,37 +1,36 @@
1#ifndef WLANRUN_H 1#ifndef WLANRUN_H
2#define WLANRUN_H 2#define WLANRUN_H
3 3
4#include <qregexp.h> 4#include <qregexp.h>
5#include <asdevice.h> 5#include <netnode.h>
6#include "wlandata.h" 6#include "wlandata.h"
7 7
8class WLanRun : public AsDevice { 8class WLanRun : public RuntimeInfo {
9 9
10public : 10public :
11 11
12 WLanRun( ANetNodeInstance * NNI, WLanData & Data ) : 12 WLanRun( ANetNodeInstance * NNI, WLanData & Data ) :
13 AsDevice( NNI ), 13 RuntimeInfo( NNI ),
14 Pat( "wlan[0-9]" ) 14 Pat( "wlan[0-9]" ) {
15 { } 15 }
16 16
17 virtual AsDevice * device( void ) 17 virtual RuntimeInfo * device( void )
18 { return (AsDevice *)this; } 18 { return this; }
19 virtual AsDevice * asDevice( void )
20 { return (AsDevice *)this; }
21 19
22protected :
23
24 void detectState( NodeCollection * );
25 bool setState( NodeCollection *, Action_t, bool );
26 bool canSetState( State_t, Action_t );
27 bool handlesInterface( const QString & I ); 20 bool handlesInterface( const QString & I );
28 bool handlesInterface( const InterfaceInfo & II ); 21 bool handlesInterface( const InterfaceInfo & II );
29 22
23 State_t detectState( void );
24
25protected :
26
27 QString setMyState( NodeCollection * , Action_t, bool );
28
30private : 29private :
31 30
32 InterfaceInfo * getInterface( void ); 31 InterfaceInfo * getInterface( void );
33 QRegExp Pat; 32 QRegExp Pat;
34 WLanData * Data; 33 WLanData * Data;
35}; 34};
36 35
37#endif 36#endif
diff --git a/noncore/settings/packagemanager/oconfitem.h b/noncore/settings/packagemanager/oconfitem.h
index 9972c00..7b52ce4 100644
--- a/noncore/settings/packagemanager/oconfitem.h
+++ b/noncore/settings/packagemanager/oconfitem.h
@@ -25,33 +25,38 @@ _;:, .> :=|. This program is free software; you can
25 -- :-=` this library; see the file COPYING.LIB. 25 -- :-=` this library; see the file COPYING.LIB.
26 If not, write to the Free Software Foundation, 26 If not, write to the Free Software Foundation,
27 Inc., 59 Temple Place - Suite 330, 27 Inc., 59 Temple Place - Suite 330,
28 Boston, MA 02111-1307, USA. 28 Boston, MA 02111-1307, USA.
29 29
30*/ 30*/
31 31
32#ifndef OCONFITEM_H 32#ifndef OCONFITEM_H
33#define OCONFITEM_H 33#define OCONFITEM_H
34 34
35#include <qlist.h> 35#include <qlist.h>
36#include <qstring.h> 36#include <qstring.h>
37 37
38class OConfItem 38class OConfItem
39{ 39{
40public: 40public:
41 enum Type { Source, Destination, Option, Arch, NotDefined }; 41 enum Type { Source=0x01,
42 GzSource=0x02,
43 Destination=0x04,
44 Option=0x08,
45 Arch=0x10,
46 NotDefined=0x20 };
42 47
43 OConfItem( Type type = NotDefined, const QString &name = QString::null, 48 OConfItem( Type type = NotDefined, const QString &name = QString::null,
44 const QString &value = QString::null, const QString &features = QString::null, 49 const QString &value = QString::null, const QString &features = QString::null,
45 bool active = true ); 50 bool active = true );
46 51
47 Type type() { return m_type; } 52 Type type() { return m_type; }
48 const QString &name() { return m_name; } 53 const QString &name() { return m_name; }
49 const QString &value() { return m_value; } 54 const QString &value() { return m_value; }
50 const QString &features() { return m_features; } 55 const QString &features() { return m_features; }
51 bool active() { return m_active; } 56 bool active() { return m_active; }
52 57
53 void setType( Type type ) { m_type = type; } 58 void setType( Type type ) { m_type = type; }
54 void setName( const QString &name ) { m_name = name; } 59 void setName( const QString &name ) { m_name = name; }
55 void setValue( const QString &value ) { m_value = value; } 60 void setValue( const QString &value ) { m_value = value; }
56 void setFeatures( const QString &features ) { m_features = features; } 61 void setFeatures( const QString &features ) { m_features = features; }
57 void setActive( bool active ) { m_active = active; } 62 void setActive( bool active ) { m_active = active; }
diff --git a/noncore/settings/packagemanager/oipkg.cpp b/noncore/settings/packagemanager/oipkg.cpp
index f2d7e39..a885ef8 100644
--- a/noncore/settings/packagemanager/oipkg.cpp
+++ b/noncore/settings/packagemanager/oipkg.cpp
@@ -101,33 +101,34 @@ OIpkg::~OIpkg()
101 if ( m_confInfo ) 101 if ( m_confInfo )
102 m_confInfo->setAutoDelete( true ); 102 m_confInfo->setAutoDelete( true );
103 103
104 // Free up libipkg resources 104 // Free up libipkg resources
105 ipkg_deinit( &m_ipkgArgs ); 105 ipkg_deinit( &m_ipkgArgs );
106} 106}
107 107
108OConfItemList *OIpkg::configItems() 108OConfItemList *OIpkg::configItems()
109{ 109{
110 // Retrieve all configuration items 110 // Retrieve all configuration items
111 return filterConfItems(); 111 return filterConfItems();
112} 112}
113 113
114OConfItemList *OIpkg::servers() 114OConfItemList *OIpkg::servers()
115{ 115{
116 // Retrieve only servers 116 // Retrieve only servers
117 return filterConfItems( OConfItem::Source ); 117 return filterConfItems( (OConfItem::Type)((int)OConfItem::Source |
118 (int)OConfItem::GzSource) );
118} 119}
119 120
120OConfItemList *OIpkg::destinations() 121OConfItemList *OIpkg::destinations()
121{ 122{
122 // Retrieve only destinations 123 // Retrieve only destinations
123 return filterConfItems( OConfItem::Destination ); 124 return filterConfItems( OConfItem::Destination );
124} 125}
125 126
126OConfItemList *OIpkg::options() 127OConfItemList *OIpkg::options()
127{ 128{
128 // Retrieve only destinations 129 // Retrieve only destinations
129 return filterConfItems( OConfItem::Option ); 130 return filterConfItems( OConfItem::Option );
130} 131}
131 132
132void OIpkg::setConfigItems( OConfItemList *configList ) 133void OIpkg::setConfigItems( OConfItemList *configList )
133{ 134{
@@ -530,32 +531,33 @@ void OIpkg::loadConfiguration()
530 531
531 // Read in file 532 // Read in file
532 QFile f( absFile ); 533 QFile f( absFile );
533 if ( f.open( IO_ReadOnly ) ) 534 if ( f.open( IO_ReadOnly ) )
534 { 535 {
535 QTextStream s( &f ); 536 QTextStream s( &f );
536 while ( !s.eof() ) 537 while ( !s.eof() )
537 { 538 {
538 539
539 QString line = s.readLine().simplifyWhiteSpace(); 540 QString line = s.readLine().simplifyWhiteSpace();
540 541
541 // Parse line and save info to the conf options list 542 // Parse line and save info to the conf options list
542 if ( !line.isEmpty() ) 543 if ( !line.isEmpty() )
543 { 544 {
544 if ( !line.startsWith( "#" ) || 545 if ( !line.startsWith( "#" ) ||
545 line.startsWith( "#src" ) || 546 line.startsWith( "#src" ) ||
547 line.startsWith( "#src/gz" ) ||
546 line.startsWith( "#dest" ) || 548 line.startsWith( "#dest" ) ||
547 line.startsWith( "#arch" ) || 549 line.startsWith( "#arch" ) ||
548 line.startsWith( "#option" ) ) 550 line.startsWith( "#option" ) )
549 { 551 {
550 int pos = line.find( ' ', 1 ); 552 int pos = line.find( ' ', 1 );
551 553
552 // Type 554 // Type
553 QString typeStr = line.left( pos ); 555 QString typeStr = line.left( pos );
554 OConfItem::Type type; 556 OConfItem::Type type;
555 QString features; 557 QString features;
556 if ( typeStr == "src" || typeStr == "#src" ) 558 if ( typeStr == "src" || typeStr == "#src" )
557 type = OConfItem::Source; 559 type = OConfItem::Source;
558 else if ( typeStr == "src/gz" || typeStr == "#src/gz" ) 560 else if ( typeStr == "src/gz" || typeStr == "#src/gz" )
559 { 561 {
560 type = OConfItem::Source; 562 type = OConfItem::Source;
561 features = "Compressed"; 563 features = "Compressed";
@@ -605,33 +607,34 @@ OConfItemList *OIpkg::filterConfItems( OConfItem::Type typefilter )
605{ 607{
606 // Load Ipkg configuration info if not already cached 608 // Load Ipkg configuration info if not already cached
607 if ( !m_confInfo ) 609 if ( !m_confInfo )
608 loadConfiguration(); 610 loadConfiguration();
609 611
610 // Build new server list (caller is responsible for deleting) 612 // Build new server list (caller is responsible for deleting)
611 OConfItemList *sl = new OConfItemList; 613 OConfItemList *sl = new OConfItemList;
612 614
613 // If typefilter is empty, retrieve all items 615 // If typefilter is empty, retrieve all items
614 bool retrieveAll = ( typefilter == OConfItem::NotDefined ); 616 bool retrieveAll = ( typefilter == OConfItem::NotDefined );
615 617
616 // Parse configuration info for servers 618 // Parse configuration info for servers
617 OConfItemListIterator it( *m_confInfo ); 619 OConfItemListIterator it( *m_confInfo );
618 for ( ; it.current(); ++it ) 620 for ( ; it.current(); ++it )
619 { 621 {
620 OConfItem *item = it.current(); 622 OConfItem *item = it.current();
621 if ( retrieveAll || item->type() == typefilter ) 623 if ( retrieveAll ||
624 ( item->type() & typefilter ) )
622 { 625 {
623 sl->append( item ); 626 sl->append( item );
624 } 627 }
625 } 628 }
626 629
627 return sl; 630 return sl;
628} 631}
629 632
630const QString &OIpkg::rootPath() 633const QString &OIpkg::rootPath()
631{ 634{
632 if ( m_rootPath.isEmpty() ) 635 if ( m_rootPath.isEmpty() )
633 { 636 {
634 OConfItem *rootDest = findConfItem( OConfItem::Destination, "root" ); 637 OConfItem *rootDest = findConfItem( OConfItem::Destination, "root" );
635 rootDest ? m_rootPath = rootDest->value() 638 rootDest ? m_rootPath = rootDest->value()
636 : m_rootPath = '/'; 639 : m_rootPath = '/';
637 if ( m_rootPath.right( 1 ) == '/' ) 640 if ( m_rootPath.right( 1 ) == '/' )
diff --git a/noncore/settings/packagemanager/opie-packagemanager.control b/noncore/settings/packagemanager/opie-packagemanager.control
index da3ddfe..0153d40 100644
--- a/noncore/settings/packagemanager/opie-packagemanager.control
+++ b/noncore/settings/packagemanager/opie-packagemanager.control
@@ -1,10 +1,10 @@
1Package: opie-packagemanager 1Package: opie-packagemanager
2Files: plugins/application/libpackagemanager.so* bin/packagemanager pics/packagemanager apps/Settings/packagemanager.desktop 2Files: plugins/application/libpackagemanager.so* bin/packagemanager pics/packagemanager apps/Settings/packagemanager.desktop
3Priority: optional 3Priority: optional
4Section: opie/settings 4Section: opie/settings
5Depends: task-opie-minimal, libopiecore2, libopieui2, libipkg (>=0.99.120) 5Depends: task-opie-minimal, libopiecore2, libopieui2, libipkg0 (>=0.99.120), ipkg-link
6Replaces: packagemanager 6Replaces: packagemanager
7Architecture: arm 7Architecture: arm
8Maintainer: Dan Williams (drw@handhelds.org) 8Maintainer: Dan Williams (drw@handhelds.org)
9Description: Opie package management client 9Description: Opie package management client
10Version: 0.6.1$EXTRAVERSION 10Version: $QPE_VERSION$EXTRAVERSION
diff --git a/noncore/tools/opie-sh/opie-sh.control b/noncore/tools/opie-sh/opie-sh.control
index 106a183..496a036 100644
--- a/noncore/tools/opie-sh/opie-sh.control
+++ b/noncore/tools/opie-sh/opie-sh.control
@@ -1,11 +1,11 @@
1Package: opie-sh 1Package: opie-sh
2Files: bin/opie-sh apps/Opie-SH/opie-sh.desktop pics/opie-sh/*.png help/opie-sh/*.html 2Files: bin/opie-sh apps/Opie-SH/opie-sh.desktop pics/opie-sh/*.png help/opie-sh/*.html
3Priority: optional 3Priority: optional
4Section: opie/sh 4Section: opie/sh
5Maintainer: Thomas Stephens <spiralman@softhome.net> 5Maintainer: Thomas Stephens <spiralman@softhome.net>
6Architecture: arm 6Architecture: arm
7Version: 0.5-$SUB_VERSION 7Version: $QPE_VERSION$EXTRAVERSION
8Depends: task-opie-minimal 8Depends: task-opie-minimal
9License: GPL 9License: GPL
10Description: A QDialog shell frontend 10Description: A QDialog shell frontend
11 A program to let you use various dialogs from the console (or a shell script) 11 A program to let you use various dialogs from the console (or a shell script)
diff --git a/noncore/tools/opie-sh/scripts/opie-sh-wavelanchooser.control b/noncore/tools/opie-sh/scripts/opie-sh-wavelanchooser.control
index 3c3463f..0d6b235 100644
--- a/noncore/tools/opie-sh/scripts/opie-sh-wavelanchooser.control
+++ b/noncore/tools/opie-sh/scripts/opie-sh-wavelanchooser.control
@@ -1,11 +1,11 @@
1Package: opie-sh-wavelanchooser 1Package: opie-sh-wavelanchooser
2Files: bin/opie-sh-wavelanchooser.sh apps/Opie-SH/opie-sh-wavelanchooser.desktop pics/opie-sh-scripts/qtwavelan.png 2Files: bin/opie-sh-wavelanchooser.sh apps/Opie-SH/opie-sh-wavelanchooser.desktop pics/opie-sh-scripts/qtwavelan.png
3Installed-Size: 0 3Installed-Size: 0
4Version: 0.1-20020527-1 4Version: $QPE_VERSION$EXTRAVERSION
5Depends: task-opie-minimal (1.5.0+), opie-sh 5Depends: task-opie-minimal (1.5.0+), opie-sh
6Priority: optional 6Priority: optional
7Section: opie/sh 7Section: opie/sh
8Maintainer: gonz <gonz@directbox.com> 8Maintainer: gonz <gonz@directbox.com>
9Architecture: all 9Architecture: all
10License: GPL 10License: GPL
11Description: Frontend to choose wavelan config 11Description: Frontend to choose wavelan config
diff --git a/noncore/unsupported/filebrowser/opie-filebrowser.control b/noncore/unsupported/filebrowser/opie-filebrowser.control
index d40bd8a..50080a1 100644
--- a/noncore/unsupported/filebrowser/opie-filebrowser.control
+++ b/noncore/unsupported/filebrowser/opie-filebrowser.control
@@ -1,10 +1,10 @@
1Package: opie-filebrowser 1Package: opie-filebrowser
2Files: bin/filebrowser apps/Applications/filebrowser.desktop pics/filebrowser/ 2Files: bin/filebrowser apps/Applications/filebrowser.desktop pics/filebrowser/
3Priority: optional 3Priority: optional
4Section: opie/applications 4Section: opie/applications
5Maintainer: Opie Team <opie@handhelds.org> 5Maintainer: Opie Team <opie@handhelds.org>
6Architecture: arm 6Architecture: arm
7Version: $QPE_VERSION-$SUB_VERSION 7Version: $QPE_VERSION$EXTRAVERSION
8Depends: task-opie-minimal 8Depends: task-opie-minimal
9Description: Browse the file system 9Description: Browse the file system
10 The filebrowser for the Opie environment. 10 The filebrowser for the Opie environment.
diff --git a/noncore/unsupported/gsmtool/opie-gsmtool.control b/noncore/unsupported/gsmtool/opie-gsmtool.control
index 6bd3b46..d987b11 100644
--- a/noncore/unsupported/gsmtool/opie-gsmtool.control
+++ b/noncore/unsupported/gsmtool/opie-gsmtool.control
@@ -1,11 +1,11 @@
1Package: opie-gsmtool 1Package: opie-gsmtool
2Files: plugins/application/libgsmtool.so* bin/gsmtool apps/Applications/gsmtool.desktop pics/gsmtool 2Files: plugins/application/libgsmtool.so* bin/gsmtool apps/Applications/gsmtool.desktop pics/gsmtool
3Priority: optional 3Priority: optional
4Section: opie/applications 4Section: opie/applications
5Maintainer: David Woodhouse <dwmw2@infradead.org> 5Maintainer: David Woodhouse <dwmw2@infradead.org>
6Architecture: arm 6Architecture: arm
7Version: 1.0.0-2 7Version: $QPE_VERSION$EXTRAVERSION
8Depends: task-opie-minimal, gsmlib 8Depends: task-opie-minimal, gsmlib
9License: Public Domain 9License: Public Domain
10Description: GSMTool program 10Description: GSMTool program
11 An GSM phone utility program for the Opie environment. 11 An GSM phone utility program for the Opie environment.
diff --git a/noncore/unsupported/oipkg/opie-oipkg.control b/noncore/unsupported/oipkg/opie-oipkg.control
index 17e7049..da6c755 100644
--- a/noncore/unsupported/oipkg/opie-oipkg.control
+++ b/noncore/unsupported/oipkg/opie-oipkg.control
@@ -1,10 +1,10 @@
1Package: opie-oipkg 1Package: opie-oipkg
2Files: bin/oipkg apps/Settings/oipkg.desktop pics/oipkg/* 2Files: bin/oipkg apps/Settings/oipkg.desktop pics/oipkg/*
3Priority: optional 3Priority: optional
4Section: opie/settings 4Section: opie/settings
5Maintainer: Patrick S. Vogt <tille@almana.ch> 5Maintainer: Patrick S. Vogt <tille@almana.ch>
6Architecture: arm 6Architecture: arm
7Version: $QPE_VERSION-$SUB_VERSION 7Version: $QPE_VERSION$EXTRAVERSION
8Depends: task-opie-minimal, ipkg (>0.99.20), ar 8Depends: task-opie-minimal, ipkg (>0.99.20), ar
9Description: Opie Projects advanced gui ipkg installer 9Description: Opie Projects advanced gui ipkg installer
10 A GUI front-end to ipkg for the Opie environment. 10 A GUI front-end to ipkg for the Opie environment.
diff --git a/noncore/unsupported/ubrowser/opie-ubrowser.control b/noncore/unsupported/ubrowser/opie-ubrowser.control
index cf96888..bfa6c30 100644
--- a/noncore/unsupported/ubrowser/opie-ubrowser.control
+++ b/noncore/unsupported/ubrowser/opie-ubrowser.control
@@ -1,10 +1,10 @@
1Package: opie-ubrowser 1Package: opie-ubrowser
2Files: bin/ubrowser apps/Applications/ubrowser.desktop pics/ubrowser/*.png plugins/application/libubrowser.so* 2Files: bin/ubrowser apps/Applications/ubrowser.desktop pics/ubrowser/*.png plugins/application/libubrowser.so*
3Priority: optional 3Priority: optional
4Section: opie/applications 4Section: opie/applications
5Maintainer: Thomas Stephens <spiralman@softhome.net> 5Maintainer: Thomas Stephens <spiralman@softhome.net>
6Architecture: arm 6Architecture: arm
7Version: 0.1-$SUB_VERSION 7Version: $QPE_VERSION$EXTRAVERSION
8Depends: task-opie-minimal 8Depends: task-opie-minimal
9License: GPL 9License: GPL
10Description: A very small web browser 10Description: A very small web browser