summaryrefslogtreecommitdiff
authormickeyl <mickeyl>2004-01-07 23:04:55 (UTC)
committer mickeyl <mickeyl>2004-01-07 23:04:55 (UTC)
commitcfb7335c5b65a79f5817b393e5a8b3345558f220 (patch) (unidiff)
treea8d2d2bcc0bd29a6aac7fec7325f058f148d466e
parentc4d6574e85f74d6086c1709ecf0d117df7417222 (diff)
downloadopie-cfb7335c5b65a79f5817b393e5a8b3345558f220.zip
opie-cfb7335c5b65a79f5817b393e5a8b3345558f220.tar.gz
opie-cfb7335c5b65a79f5817b393e5a8b3345558f220.tar.bz2
A bunch of miscellaneous changes and improvements. read the ChangeLog :)
Oh and it's WIP - not everything mentioned there works already. Will soon, though.
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/net/wellenreiter/ChangeLog5
-rw-r--r--noncore/net/wellenreiter/TODO5
-rw-r--r--noncore/net/wellenreiter/gui/configbase.ui287
-rw-r--r--noncore/net/wellenreiter/gui/configwindow.cpp103
-rw-r--r--noncore/net/wellenreiter/gui/configwindow.h7
-rw-r--r--noncore/net/wellenreiter/gui/gps.cpp8
-rw-r--r--noncore/net/wellenreiter/gui/scanlist.cpp20
-rw-r--r--noncore/net/wellenreiter/gui/scanlist.h3
-rw-r--r--noncore/net/wellenreiter/gui/wellenreiter.cpp8
-rw-r--r--noncore/net/wellenreiter/opie-wellenreiter.control2
10 files changed, 357 insertions, 91 deletions
diff --git a/noncore/net/wellenreiter/ChangeLog b/noncore/net/wellenreiter/ChangeLog
index 8bf8cc8..d4dca9f 100644
--- a/noncore/net/wellenreiter/ChangeLog
+++ b/noncore/net/wellenreiter/ChangeLog
@@ -1,18 +1,23 @@
1 2004-??-?? Michael Lauer <mickey@Vanille.de> 1 2004-??-?? Michael Lauer <mickey@Vanille.de>
2 2
3 * Rewrote the simple actions on new {Network, Client, Station}. Besides playing a sound or
4 blinking a LED, a user customizable script can now be executed, if something has been
5 detected. This opens up many possibilities, i.e. a qcop to qpegps or exec'ing Flite.
6 * Added decloaking of cloaked ESSIDs (length != 0, but essid[0] == \0)
7 * Hided the 'Parse' Tab in the configuration window. Not functional now and may come later
3 * Added parsing of control frames. Display stations sending them SSID "???" for now. 8 * Added parsing of control frames. Display stations sending them SSID "???" for now.
4 * Added command line option "-nocheck" to skip non-root and dhcp tests 9 * Added command line option "-nocheck" to skip non-root and dhcp tests
5 * Improved the speed reading the manufacturer list 10 * Improved the speed reading the manufacturer list
6 * GPS coordinates are now presented in the DMS (as opposed to decimal) format 11 * GPS coordinates are now presented in the DMS (as opposed to decimal) format
7 12
8 2003-12-18 Michael Lauer <mickey@Vanille.de> 13 2003-12-18 Michael Lauer <mickey@Vanille.de>
9 14
10 * Released as Version 1.0.2 (Development Snapshot) 15 * Released as Version 1.0.2 (Development Snapshot)
11 * Added automatic uploading of capture files to "The Capture Dump" site at 16 * Added automatic uploading of capture files to "The Capture Dump" site at
12 http://www.Vanille.de/projects/capturedump.spy 17 http://www.Vanille.de/projects/capturedump.spy
13 * Initial reading of the manufacturer database happens now in background 18 * Initial reading of the manufacturer database happens now in background
14 * Removed deprecated setMonitorMode() API ==> Use setMode( "monitor" ) now. 19 * Removed deprecated setMonitorMode() API ==> Use setMode( "monitor" ) now.
15 The monitor mode now tries to use the standard IW_MODE_MONITOR first. If that 20 The monitor mode now tries to use the standard IW_MODE_MONITOR first. If that
16 doesn't work, it falls back to using the proprietary iwpriv commands 21 doesn't work, it falls back to using the proprietary iwpriv commands
17 22
18 2003-11-30 Michael Lauer <mickey@Vanille.de> 23 2003-11-30 Michael Lauer <mickey@Vanille.de>
diff --git a/noncore/net/wellenreiter/TODO b/noncore/net/wellenreiter/TODO
index ff98eaf..ab171c8 100644
--- a/noncore/net/wellenreiter/TODO
+++ b/noncore/net/wellenreiter/TODO
@@ -1,35 +1,38 @@
1- beep over headphone / customizable 1- beep over headphone / customizable
2 2
3- add configuration for scrollback buffer in hex window and log window 3- add configuration for scrollback buffer in hex window and log window
4 4
5- implement beacon stripping (the first beacon is enough to detect a 5- implement beacon stripping (the first beacon is enough to detect a
6 new network - further beacons just blow up the capture file) 6 new network - further beacons just blow up the capture file)
7 7
8- identification of probe requests 8- identification of probe requests
9 i.e. other sniffers around 9 i.e. other sniffers around
10 10
11- decloaking of falsely reported zero-length SSIDs 11- decloaking of falsely reported SSIDs [done]
12 12
13- option to launch an external application (i.e. qcop) on 13- option to launch an external application (i.e. qcop) on
14 - new net 14 - new net
15 - new station 15 - new station
16 - <whatever> event 16 - <whatever> event
17 17
18- adaptive hopping scheme ! 18- adaptive hopping scheme !
19 19
20- display interface capabilities 20- display interface capabilities
21 21
22- enable sniffing in wired networks 22- enable sniffing in wired networks
23 23
24- enable multiple packet sources 24- enable multiple packet sources
25 - infrared 25 - infrared
26 - bluetooth 26 - bluetooth
27 - usb? 27 - usb?
28 28
29- define packet structure in a metalanguage and generate 29- define packet structure in a metalanguage and generate
30 the actual parsing code (hmmm) 30 the actual parsing code (hmmm)
31 31
32- pester the ethereal folks to settle for an application independant 32- pester the ethereal folks to settle for an application independant
33 packet dissection framework... (unlikely) 33 packet dissection framework... (unlikely)
34 34
35- revamp hex window, make it more sophisticated than just a QMultiLineEdit 35- revamp hex window, make it more sophisticated than just a QMultiLineEdit
36
37- write kismet-like .network format and format to be importable into AutoRoute
38
diff --git a/noncore/net/wellenreiter/gui/configbase.ui b/noncore/net/wellenreiter/gui/configbase.ui
index 2c335df..de6abfc 100644
--- a/noncore/net/wellenreiter/gui/configbase.ui
+++ b/noncore/net/wellenreiter/gui/configbase.ui
@@ -1,31 +1,31 @@
1<!DOCTYPE UI><UI> 1<!DOCTYPE UI><UI>
2<class>WellenreiterConfigBase</class> 2<class>WellenreiterConfigBase</class>
3<widget> 3<widget>
4 <class>QDialog</class> 4 <class>QDialog</class>
5 <property stdset="1"> 5 <property stdset="1">
6 <name>name</name> 6 <name>name</name>
7 <cstring>WellenreiterConfigBase</cstring> 7 <cstring>WellenreiterConfigBase</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>303</width> 14 <width>250</width>
15 <height>343</height> 15 <height>371</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>Wellenreiter II COnfiguration Dialog</string> 20 <string>Wellenreiter II COnfiguration Dialog</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 <grid> 28 <grid>
29 <property stdset="1"> 29 <property stdset="1">
30 <name>margin</name> 30 <name>margin</name>
31 <number>2</number> 31 <number>2</number>
@@ -693,37 +693,37 @@
693 </widget> 693 </widget>
694 </grid> 694 </grid>
695 </widget> 695 </widget>
696 <widget> 696 <widget>
697 <class>QWidget</class> 697 <class>QWidget</class>
698 <property stdset="1"> 698 <property stdset="1">
699 <name>name</name> 699 <name>name</name>
700 <cstring>tab</cstring> 700 <cstring>tab</cstring>
701 </property> 701 </property>
702 <attribute> 702 <attribute>
703 <name>title</name> 703 <name>title</name>
704 <string>UI</string> 704 <string>UI</string>
705 </attribute> 705 </attribute>
706 <vbox> 706 <vbox>
707 <property stdset="1"> 707 <property stdset="1">
708 <name>margin</name> 708 <name>margin</name>
709 <number>6</number> 709 <number>5</number>
710 </property> 710 </property>
711 <property stdset="1"> 711 <property stdset="1">
712 <name>spacing</name> 712 <name>spacing</name>
713 <number>6</number> 713 <number>3</number>
714 </property> 714 </property>
715 <widget> 715 <widget>
716 <class>QCheckBox</class> 716 <class>QCheckBox</class>
717 <property stdset="1"> 717 <property stdset="1">
718 <name>name</name> 718 <name>name</name>
719 <cstring>lookupVendor</cstring> 719 <cstring>lookupVendor</cstring>
720 </property> 720 </property>
721 <property stdset="1"> 721 <property stdset="1">
722 <name>text</name> 722 <name>text</name>
723 <string>Lookup MAC vendor names</string> 723 <string>Lookup MAC vendor names</string>
724 </property> 724 </property>
725 </widget> 725 </widget>
726 <widget> 726 <widget>
727 <class>QCheckBox</class> 727 <class>QCheckBox</class>
728 <property stdset="1"> 728 <property stdset="1">
729 <name>name</name> 729 <name>name</name>
@@ -761,100 +761,277 @@
761 <property> 761 <property>
762 <name>sizeHint</name> 762 <name>sizeHint</name>
763 <size> 763 <size>
764 <width>20</width> 764 <width>20</width>
765 <height>20</height> 765 <height>20</height>
766 </size> 766 </size>
767 </property> 767 </property>
768 </spacer> 768 </spacer>
769 <widget> 769 <widget>
770 <class>QGroupBox</class> 770 <class>QGroupBox</class>
771 <property stdset="1"> 771 <property stdset="1">
772 <name>name</name> 772 <name>name</name>
773 <cstring>GroupBox4_2</cstring> 773 <cstring>GroupBox4_2</cstring>
774 </property> 774 </property>
775 <property stdset="1"> 775 <property stdset="1">
776 <name>enabled</name> 776 <name>enabled</name>
777 <bool>false</bool> 777 <bool>true</bool>
778 </property> 778 </property>
779 <property stdset="1"> 779 <property stdset="1">
780 <name>title</name> 780 <name>title</name>
781 <string>Action On Detecting</string> 781 <string>Action on detecting a new</string>
782 </property>
783 <property>
784 <name>layoutMargin</name>
785 </property>
786 <property>
787 <name>layoutSpacing</name>
782 </property> 788 </property>
783 <grid> 789 <grid>
784 <property stdset="1"> 790 <property stdset="1">
785 <name>margin</name> 791 <name>margin</name>
786 <number>11</number> 792 <number>3</number>
787 </property> 793 </property>
788 <property stdset="1"> 794 <property stdset="1">
789 <name>spacing</name> 795 <name>spacing</name>
790 <number>6</number> 796 <number>0</number>
791 </property> 797 </property>
792 <widget row="1" column="0" >
793 <class>QLabel</class>
794 <property stdset="1">
795 <name>name</name>
796 <cstring>TextLabel2</cstring>
797 </property>
798 <property stdset="1">
799 <name>text</name>
800 <string>New Wireless Station</string>
801 </property>
802 </widget>
803 <widget row="0" column="0" > 798 <widget row="0" column="0" >
804 <class>QLabel</class> 799 <class>QLayoutWidget</class>
805 <property stdset="1">
806 <name>name</name>
807 <cstring>TextLabel1_3</cstring>
808 </property>
809 <property stdset="1">
810 <name>text</name>
811 <string>New Network</string>
812 </property>
813 </widget>
814 <widget row="0" column="1" >
815 <class>QComboBox</class>
816 <property stdset="1">
817 <name>name</name>
818 <cstring>newNetwork</cstring>
819 </property>
820 </widget>
821 <widget row="1" column="1" >
822 <class>QComboBox</class>
823 <property stdset="1">
824 <name>name</name>
825 <cstring>newWirelessStation</cstring>
826 </property>
827 </widget>
828 <widget row="2" column="1" >
829 <class>QComboBox</class>
830 <property stdset="1"> 800 <property stdset="1">
831 <name>name</name> 801 <name>name</name>
832 <cstring>newStation</cstring> 802 <cstring>Layout6</cstring>
833 </property> 803 </property>
834 </widget> 804 <property>
835 <widget row="2" column="0" > 805 <name>layoutMargin</name>
836 <class>QLabel</class>
837 <property stdset="1">
838 <name>name</name>
839 <cstring>TextLabel3</cstring>
840 </property> 806 </property>
841 <property stdset="1"> 807 <property>
842 <name>text</name> 808 <name>layoutSpacing</name>
843 <string>New Station</string>
844 </property> 809 </property>
810 <grid>
811 <property stdset="1">
812 <name>margin</name>
813 <number>2</number>
814 </property>
815 <property stdset="1">
816 <name>spacing</name>
817 <number>2</number>
818 </property>
819 <widget row="4" column="0" >
820 <class>QLabel</class>
821 <property stdset="1">
822 <name>name</name>
823 <cstring>TextLabel3</cstring>
824 </property>
825 <property stdset="1">
826 <name>text</name>
827 <string>Wired Station:</string>
828 </property>
829 </widget>
830 <widget row="0" column="0" >
831 <class>QLabel</class>
832 <property stdset="1">
833 <name>name</name>
834 <cstring>TextLabel1_3</cstring>
835 </property>
836 <property stdset="1">
837 <name>text</name>
838 <string>Network:</string>
839 </property>
840 </widget>
841 <widget row="2" column="1" >
842 <class>QComboBox</class>
843 <item>
844 <property>
845 <name>text</name>
846 <string>&lt;Ignore&gt;</string>
847 </property>
848 </item>
849 <item>
850 <property>
851 <name>text</name>
852 <string>Play Alarm</string>
853 </property>
854 </item>
855 <item>
856 <property>
857 <name>text</name>
858 <string>Play Click</string>
859 </property>
860 </item>
861 <item>
862 <property>
863 <name>text</name>
864 <string>Blink LED</string>
865 </property>
866 </item>
867 <item>
868 <property>
869 <name>text</name>
870 <string>Run Script</string>
871 </property>
872 </item>
873 <property stdset="1">
874 <name>name</name>
875 <cstring>newClientAction</cstring>
876 </property>
877 <property stdset="1">
878 <name>sizePolicy</name>
879 <sizepolicy>
880 <hsizetype>7</hsizetype>
881 <vsizetype>0</vsizetype>
882 </sizepolicy>
883 </property>
884 </widget>
885 <widget row="3" column="0" rowspan="1" colspan="2" >
886 <class>QLineEdit</class>
887 <property stdset="1">
888 <name>name</name>
889 <cstring>newClientScript</cstring>
890 </property>
891 <property stdset="1">
892 <name>enabled</name>
893 <bool>true</bool>
894 </property>
895 </widget>
896 <widget row="2" column="0" >
897 <class>QLabel</class>
898 <property stdset="1">
899 <name>name</name>
900 <cstring>TextLabel2</cstring>
901 </property>
902 <property stdset="1">
903 <name>text</name>
904 <string>Wireless Station:</string>
905 </property>
906 </widget>
907 <widget row="4" column="1" >
908 <class>QComboBox</class>
909 <item>
910 <property>
911 <name>text</name>
912 <string>&lt;Ignore&gt;</string>
913 </property>
914 </item>
915 <item>
916 <property>
917 <name>text</name>
918 <string>Play Alarm</string>
919 </property>
920 </item>
921 <item>
922 <property>
923 <name>text</name>
924 <string>Play Click</string>
925 </property>
926 </item>
927 <item>
928 <property>
929 <name>text</name>
930 <string>Blink LED</string>
931 </property>
932 </item>
933 <item>
934 <property>
935 <name>text</name>
936 <string>Run Script</string>
937 </property>
938 </item>
939 <property stdset="1">
940 <name>name</name>
941 <cstring>newStationAction</cstring>
942 </property>
943 <property stdset="1">
944 <name>sizePolicy</name>
945 <sizepolicy>
946 <hsizetype>7</hsizetype>
947 <vsizetype>0</vsizetype>
948 </sizepolicy>
949 </property>
950 </widget>
951 <widget row="0" column="1" >
952 <class>QComboBox</class>
953 <item>
954 <property>
955 <name>text</name>
956 <string>&lt;Ignore&gt;</string>
957 </property>
958 </item>
959 <item>
960 <property>
961 <name>text</name>
962 <string>Play Alarm</string>
963 </property>
964 </item>
965 <item>
966 <property>
967 <name>text</name>
968 <string>Play Click</string>
969 </property>
970 </item>
971 <item>
972 <property>
973 <name>text</name>
974 <string>Blink LED</string>
975 </property>
976 </item>
977 <item>
978 <property>
979 <name>text</name>
980 <string>Run Script</string>
981 </property>
982 </item>
983 <property stdset="1">
984 <name>name</name>
985 <cstring>newNetworkAction</cstring>
986 </property>
987 <property stdset="1">
988 <name>sizePolicy</name>
989 <sizepolicy>
990 <hsizetype>7</hsizetype>
991 <vsizetype>0</vsizetype>
992 </sizepolicy>
993 </property>
994 <property stdset="1">
995 <name>editable</name>
996 <bool>false</bool>
997 </property>
998 </widget>
999 <widget row="1" column="0" rowspan="1" colspan="2" >
1000 <class>QLineEdit</class>
1001 <property stdset="1">
1002 <name>name</name>
1003 <cstring>newNetworkScript</cstring>
1004 </property>
1005 <property stdset="1">
1006 <name>enabled</name>
1007 <bool>true</bool>
1008 </property>
1009 </widget>
1010 <widget row="5" column="0" rowspan="1" colspan="2" >
1011 <class>QLineEdit</class>
1012 <property stdset="1">
1013 <name>name</name>
1014 <cstring>newStationScript</cstring>
1015 </property>
1016 <property stdset="1">
1017 <name>enabled</name>
1018 <bool>true</bool>
1019 </property>
1020 </widget>
1021 </grid>
845 </widget> 1022 </widget>
846 </grid> 1023 </grid>
847 </widget> 1024 </widget>
848 </vbox> 1025 </vbox>
849 </widget> 1026 </widget>
850 <widget> 1027 <widget>
851 <class>QWidget</class> 1028 <class>QWidget</class>
852 <property stdset="1"> 1029 <property stdset="1">
853 <name>name</name> 1030 <name>name</name>
854 <cstring>tab</cstring> 1031 <cstring>tab</cstring>
855 </property> 1032 </property>
856 <attribute> 1033 <attribute>
857 <name>title</name> 1034 <name>title</name>
858 <string>Intrusion</string> 1035 <string>Intrusion</string>
859 </attribute> 1036 </attribute>
860 <grid> 1037 <grid>
diff --git a/noncore/net/wellenreiter/gui/configwindow.cpp b/noncore/net/wellenreiter/gui/configwindow.cpp
index f536f4e..1341d03 100644
--- a/noncore/net/wellenreiter/gui/configwindow.cpp
+++ b/noncore/net/wellenreiter/gui/configwindow.cpp
@@ -4,52 +4,53 @@
4** This file is part of Opie Environment. 4** This file is part of Opie Environment.
5** 5**
6** This file may be distributed and/or modified under the terms of the 6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software 7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the 8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file. 9** packaging of this file.
10** 10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13** 13**
14**********************************************************************/ 14**********************************************************************/
15 15
16/* LOCAL */ 16/* LOCAL */
17#include "configwindow.h" 17#include "configwindow.h"
18#include "mainwindow.h" 18#include "mainwindow.h"
19 19
20/* OPIE */
21#include <opie2/onetwork.h>
22#ifdef QWS
23#include <opie2/oapplication.h>
24#include <opie2/oconfig.h>
25#endif
26
20/* QT */ 27/* QT */
21#include <qapplication.h> 28#include <qapplication.h>
22#include <qcheckbox.h> 29#include <qcheckbox.h>
23#include <qcombobox.h> 30#include <qcombobox.h>
24#include <qfile.h> 31#include <qfile.h>
25#include <qlineedit.h> 32#include <qlineedit.h>
26#include <qlayout.h> 33#include <qlayout.h>
27#include <qmap.h> 34#include <qmap.h>
28#include <qpushbutton.h> 35#include <qpushbutton.h>
36#include <qtabwidget.h>
29#include <qtoolbutton.h> 37#include <qtoolbutton.h>
30#include <qspinbox.h> 38#include <qspinbox.h>
31#include <qtextstream.h> 39#include <qtextstream.h>
32 40
33/* OPIE */
34#include <opie2/onetwork.h>
35
36#ifdef QWS
37#include <opie2/oapplication.h>
38#include <opie2/oconfig.h>
39#endif
40 41
41WellenreiterConfigWindow* WellenreiterConfigWindow::_instance = 0; 42WellenreiterConfigWindow* WellenreiterConfigWindow::_instance = 0;
42 43
43WellenreiterConfigWindow::WellenreiterConfigWindow( QWidget * parent, const char * name, WFlags f ) 44WellenreiterConfigWindow::WellenreiterConfigWindow( QWidget * parent, const char * name, WFlags f )
44 :WellenreiterConfigBase( parent, name, true, f ) 45 :WellenreiterConfigBase( parent, name, true, f )
45{ 46{
46 _devicetype[ "cisco" ] = DEVTYPE_CISCO; 47 _devicetype[ "cisco" ] = DEVTYPE_CISCO;
47 _devicetype[ "wlan-ng" ] = DEVTYPE_WLAN_NG; 48 _devicetype[ "wlan-ng" ] = DEVTYPE_WLAN_NG;
48 _devicetype[ "hostap" ] = DEVTYPE_HOSTAP; 49 _devicetype[ "hostap" ] = DEVTYPE_HOSTAP;
49 _devicetype[ "orinoco" ] = DEVTYPE_ORINOCO; 50 _devicetype[ "orinoco" ] = DEVTYPE_ORINOCO;
50 _devicetype[ "<manual>" ] = DEVTYPE_MANUAL; 51 _devicetype[ "<manual>" ] = DEVTYPE_MANUAL;
51 _devicetype[ "<file>" ] = DEVTYPE_FILE; 52 _devicetype[ "<file>" ] = DEVTYPE_FILE;
52 53
53 // gather possible interface names from ONetwork 54 // gather possible interface names from ONetwork
54 ONetwork* net = ONetwork::instance(); 55 ONetwork* net = ONetwork::instance();
55 ONetwork::InterfaceIterator it = net->iterator(); 56 ONetwork::InterfaceIterator it = net->iterator();
@@ -59,38 +60,44 @@ WellenreiterConfigWindow::WellenreiterConfigWindow( QWidget * parent, const char
59 interfaceName->insertItem( it.current()->name() ); 60 interfaceName->insertItem( it.current()->name() );
60 ++it; 61 ++it;
61 } 62 }
62 63
63 load(); 64 load();
64 65
65 #ifdef Q_WS_X11 // We're on X11: adding an Ok-Button for the Dialog here 66 #ifdef Q_WS_X11 // We're on X11: adding an Ok-Button for the Dialog here
66 QPushButton* okButton = new QPushButton( "ok", this ); 67 QPushButton* okButton = new QPushButton( "ok", this );
67 okButton->show(); 68 okButton->show();
68 WellenreiterConfigBaseLayout->addWidget( okButton, 0, 3 ); //FIXME: rename this in configbase.ui 69 WellenreiterConfigBaseLayout->addWidget( okButton, 0, 3 ); //FIXME: rename this in configbase.ui
69 connect( okButton, SIGNAL( clicked() ), this, SLOT( accept() ) ); 70 connect( okButton, SIGNAL( clicked() ), this, SLOT( accept() ) );
70 #endif 71 #endif
71 72
72 WellenreiterConfigWindow::_instance = this; 73 WellenreiterConfigWindow::_instance = this;
73 74
74 connect( deviceType, SIGNAL( activated(int) ), this, SLOT( changedDeviceType(int) ) ); 75 connect( deviceType, SIGNAL( activated(int) ), this, SLOT( changedDeviceType(int) ) );
76 connect( newNetworkAction, SIGNAL( activated(int) ), this, SLOT( changedNetworkAction(int) ) );
77 connect( newClientAction, SIGNAL( activated(int) ), this, SLOT( changedClientAction(int) ) );
78 connect( newStationAction, SIGNAL( activated(int) ), this, SLOT( changedStationAction(int) ) );
75 connect( getCaptureFileName, SIGNAL( clicked() ), this, SLOT( getCaptureFileNameClicked() ) ); 79 connect( getCaptureFileName, SIGNAL( clicked() ), this, SLOT( getCaptureFileNameClicked() ) );
76 80
77 // make the checkbox 'channelAll' control all other channels 81 // make the checkbox 'channelAll' control all other channels
78 connect( channelAll, SIGNAL( stateChanged(int) ), this, SLOT( channelAllClicked(int) ) ); 82 connect( channelAll, SIGNAL( stateChanged(int) ), this, SLOT( channelAllClicked(int) ) );
79 83
80 connect( autodetect, SIGNAL( clicked() ), this, SLOT( performAutodetection() ) ); 84 connect( autodetect, SIGNAL( clicked() ), this, SLOT( performAutodetection() ) );
85
86 // hide tab4 (parse) until Wellenreiter 1.2
87 tab->removePage( tab_4 );
81}; 88};
82 89
83 90
84WellenreiterConfigWindow::~WellenreiterConfigWindow() 91WellenreiterConfigWindow::~WellenreiterConfigWindow()
85{ 92{
86 save(); 93 save();
87} 94}
88 95
89 96
90void WellenreiterConfigWindow::performAutodetection() 97void WellenreiterConfigWindow::performAutodetection()
91{ 98{
92 //TODO: insert modal splash screen here 99 //TODO: insert modal splash screen here
93 // and sleep a second, so that it looks 100 // and sleep a second, so that it looks
94 // like we're actually doing something fancy... ;-) 101 // like we're actually doing something fancy... ;-)
95 102
96 qDebug( "WellenreiterConfigWindow::performAutodetection()" ); 103 qDebug( "WellenreiterConfigWindow::performAutodetection()" );
@@ -172,32 +179,62 @@ void WellenreiterConfigWindow::changedDeviceType(int t)
172{ 179{
173 if ( t != DEVTYPE_FILE ) return; 180 if ( t != DEVTYPE_FILE ) return;
174 QString name = ( (WellenreiterMainWindow*) qApp->mainWidget() )->getFileName(false); 181 QString name = ( (WellenreiterMainWindow*) qApp->mainWidget() )->getFileName(false);
175 if ( !name.isEmpty() && QFile::exists( name ) ) 182 if ( !name.isEmpty() && QFile::exists( name ) )
176 { 183 {
177 interfaceName->insertItem( name ); 184 interfaceName->insertItem( name );
178 interfaceName->setCurrentItem( interfaceName->count()-1 ); 185 interfaceName->setCurrentItem( interfaceName->count()-1 );
179 } 186 }
180 else 187 else
181 { 188 {
182 deviceType->setCurrentItem( _guess ); 189 deviceType->setCurrentItem( _guess );
183 } 190 }
184 191
185} 192}
186 193
187 194
195void WellenreiterConfigWindow::synchronizeActionsAndScripts()
196{
197 if ( newNetworkAction->currentItem() == 4 ) newNetworkScript->show(); else newNetworkScript->hide();
198 if ( newClientAction->currentItem() == 4 ) newClientScript->show(); else newClientScript->hide();
199 if ( newStationAction->currentItem() == 4 ) newStationScript->show(); else newStationScript->hide();
200
201 //newNetworkScript->setEnabled( newNetworkAction->currentItem() == 4 );
202 //newClientScript->setEnabled( newClientAction->currentItem() == 4 );
203 //newStationScript->setEnabled( newStationAction->currentItem() == 4 );
204}
205
206
207void WellenreiterConfigWindow::changedNetworkAction(int t)
208{
209 synchronizeActionsAndScripts();
210}
211
212
213void WellenreiterConfigWindow::changedClientAction(int t)
214{
215 synchronizeActionsAndScripts();
216}
217
218
219void WellenreiterConfigWindow::changedStationAction(int t)
220{
221 synchronizeActionsAndScripts();
222}
223
224
188void WellenreiterConfigWindow::getCaptureFileNameClicked() 225void WellenreiterConfigWindow::getCaptureFileNameClicked()
189{ 226{
190 QString name = ( (WellenreiterMainWindow*) qApp->mainWidget() )->getFileName(true); 227 QString name = ( (WellenreiterMainWindow*) qApp->mainWidget() )->getFileName(true);
191 qDebug( "name = %s", (const char*) name ); 228 qDebug( "name = %s", (const char*) name );
192 if ( !name.isEmpty() ) 229 if ( !name.isEmpty() )
193 { 230 {
194 captureFileName->setText( name ); 231 captureFileName->setText( name );
195 } 232 }
196} 233}
197 234
198 235
199void WellenreiterConfigWindow::channelAllClicked(int state) 236void WellenreiterConfigWindow::channelAllClicked(int state)
200{ 237{
201 bool b = state; 238 bool b = state;
202 channel1->setChecked( b ); 239 channel1->setChecked( b );
203 channel2->setChecked( b ); 240 channel2->setChecked( b );
@@ -222,32 +259,71 @@ bool WellenreiterConfigWindow::useGPS() const
222} 259}
223 260
224 261
225const QString WellenreiterConfigWindow::gpsHost() const 262const QString WellenreiterConfigWindow::gpsHost() const
226{ 263{
227 return useGPS() ? gpsdHost->currentText() : QString::null; 264 return useGPS() ? gpsdHost->currentText() : QString::null;
228} 265}
229 266
230 267
231int WellenreiterConfigWindow::gpsPort() const 268int WellenreiterConfigWindow::gpsPort() const
232{ 269{
233 bool ok; 270 bool ok;
234 return useGPS() ? gpsdPort->value() : -1; 271 return useGPS() ? gpsdPort->value() : -1;
235} 272}
236 273
237 274
275void WellenreiterConfigWindow::performAction( const QString& type )
276{
277 int action;
278 QString script;
279
280 if ( type == "network" )
281 {
282 action = newNetworkAction->currentItem();
283 script = newNetworkScript->text();
284 }
285 else if ( type == "managed" || type == "adhoc" )
286 {
287 action = newClientAction->currentItem();
288 script = newClientScript->text();
289 }
290 else if ( type == "station" )
291 {
292 action = newStationAction->currentItem();
293 script = newStationScript->text();
294 }
295 else
296 {
297 qWarning( "WellenreiterConfigWindow::performAction(): unknown type '%s'", (const char*) type );
298 return;
299 }
300
301 qDebug( "going to perform action %d (script='%s')", action, (const char*) script );
302
303 /*
304
305 if ( sound == "Ignore" ) return;
306 else if ( sound == "Touch" ) ODevice::inst()->touchSound();
307 else if ( sound == "Key" ) ODevice::inst()->keySound();
308 else if ( sound == "Alarm" ) ODevice::inst()->alarmSound();
309
310 */
311}
312
313
238void WellenreiterConfigWindow::load() 314void WellenreiterConfigWindow::load()
239{ 315{
240#ifdef Q_WS_X11 316#ifdef Q_WS_X11
241 #warning Persistent Configuration not yet implemented for standalone X11 build 317 #warning Persistent Configuration not yet implemented for standalone X11 build
242 performAutodetection(); 318 performAutodetection();
243#else 319#else
244 qDebug( "loading configuration settings..." ); 320 qDebug( "loading configuration settings..." );
245 321
246 /* This is dumb monkey typing stuff... We _need_ to do this automatically! */ 322 /* This is dumb monkey typing stuff... We _need_ to do this automatically! */
247 323
248 OConfig* c = oApp->config(); 324 OConfig* c = oApp->config();
249 325
250 c->setGroup( "Interface" ); 326 c->setGroup( "Interface" );
251 327
252 QString interface = c->readEntry( "name", "<none>" ); 328 QString interface = c->readEntry( "name", "<none>" );
253 if ( interface != "<none>" ) 329 if ( interface != "<none>" )
@@ -277,32 +353,39 @@ void WellenreiterConfigWindow::load()
277 { 353 {
278 performAutodetection(); 354 performAutodetection();
279 } 355 }
280 356
281 prismHeader->setChecked( c->readBoolEntry( "prism", false ) ); 357 prismHeader->setChecked( c->readBoolEntry( "prism", false ) );
282 hopChannels->setChecked( c->readBoolEntry( "hop", true ) ); 358 hopChannels->setChecked( c->readBoolEntry( "hop", true ) );
283 hopInterval->setValue( c->readNumEntry( "interval", 250 ) ); 359 hopInterval->setValue( c->readNumEntry( "interval", 250 ) );
284 adaptiveHopping->setChecked( c->readBoolEntry( "adaptive", true ) ); 360 adaptiveHopping->setChecked( c->readBoolEntry( "adaptive", true ) );
285 361
286 c->setGroup( "Capture" ); 362 c->setGroup( "Capture" );
287 captureFileName->setText( c->readEntry( "filename", "/tmp/capture" ) ); 363 captureFileName->setText( c->readEntry( "filename", "/tmp/capture" ) );
288 364
289 c->setGroup( "UI" ); 365 c->setGroup( "UI" );
290 lookupVendor->setChecked( c->readBoolEntry( "lookupVendor", true ) ); 366 lookupVendor->setChecked( c->readBoolEntry( "lookupVendor", true ) );
291 openTree->setChecked( c->readBoolEntry( "openTree", true ) ); 367 openTree->setChecked( c->readBoolEntry( "openTree", true ) );
292 disablePM->setChecked( c->readBoolEntry( "disablePM", true ) ); 368 disablePM->setChecked( c->readBoolEntry( "disablePM", true ) );
369 newNetworkAction->setCurrentItem( c->readNumEntry( "newNetworkAction", 0 ) );
370 newNetworkScript->setText( c->readEntry( "newNetworkScript", "" ) );
371 newClientAction->setCurrentItem( c->readNumEntry( "newClientAction", 0 ) );
372 newClientScript->setText( c->readEntry( "newClientScript", "" ) );
373 newStationAction->setCurrentItem( c->readNumEntry( "newStationAction", 0 ) );
374 newStationScript->setText( c->readEntry( "newStationScript", "" ) );
375 synchronizeActionsAndScripts(); // needed for showing/hiding the script QLineEdit on demand
293 376
294 c->setGroup( "GPS" ); 377 c->setGroup( "GPS" );
295 enableGPS->setChecked( c->readBoolEntry( "use", false ) ); 378 enableGPS->setChecked( c->readBoolEntry( "use", false ) );
296#if QT_VERSION < 300 379#if QT_VERSION < 300
297 gpsdHost->insertItem( c->readEntry( "host", "localhost" ), 0 ); 380 gpsdHost->insertItem( c->readEntry( "host", "localhost" ), 0 );
298 gpsdHost->setCurrentItem( 0 ); 381 gpsdHost->setCurrentItem( 0 );
299#else 382#else
300 gpsdHost->setCurrentText( c->readEntry( "host", "localhost" ) ); 383 gpsdHost->setCurrentText( c->readEntry( "host", "localhost" ) );
301#endif 384#endif
302 gpsdPort->setValue( c->readNumEntry( "port", 2947 ) ); 385 gpsdPort->setValue( c->readNumEntry( "port", 2947 ) );
303 startGPS->setChecked( c->readBoolEntry( "start", false ) ); 386 startGPS->setChecked( c->readBoolEntry( "start", false ) );
304 commandGPS->setText( c->readEntry( "command", "gpsd -p /dev/ttyS3 -s 57600" ) ); 387 commandGPS->setText( c->readEntry( "command", "gpsd -p /dev/ttyS3 -s 57600" ) );
305 388
306#endif 389#endif
307} 390}
308 391
@@ -320,28 +403,34 @@ void WellenreiterConfigWindow::save()
320 403
321 c->setGroup( "Interface" ); 404 c->setGroup( "Interface" );
322 c->writeEntry( "name", interfaceName->currentText() ); 405 c->writeEntry( "name", interfaceName->currentText() );
323 c->writeEntry( "type", deviceType->currentText() ); 406 c->writeEntry( "type", deviceType->currentText() );
324 c->writeEntry( "prism", prismHeader->isChecked() ); 407 c->writeEntry( "prism", prismHeader->isChecked() );
325 c->writeEntry( "hop", hopChannels->isChecked() ); 408 c->writeEntry( "hop", hopChannels->isChecked() );
326 c->writeEntry( "interval", hopInterval->value() ); 409 c->writeEntry( "interval", hopInterval->value() );
327 c->writeEntry( "adaptive", adaptiveHopping->isChecked() ); 410 c->writeEntry( "adaptive", adaptiveHopping->isChecked() );
328 411
329 c->setGroup( "Capture" ); 412 c->setGroup( "Capture" );
330 c->writeEntry( "filename", captureFileName->text() ); 413 c->writeEntry( "filename", captureFileName->text() );
331 414
332 c->setGroup( "UI" ); 415 c->setGroup( "UI" );
333 c->writeEntry( "lookupVendor", lookupVendor->isChecked() ); 416 c->writeEntry( "lookupVendor", lookupVendor->isChecked() );
334 c->writeEntry( "openTree", openTree->isChecked() ); 417 c->writeEntry( "openTree", openTree->isChecked() );
335 c->writeEntry( "disablePM", disablePM->isChecked() ); 418 c->writeEntry( "disablePM", disablePM->isChecked() );
419 c->writeEntry( "newNetworkAction", newNetworkAction->currentItem() );
420 c->writeEntry( "newNetworkScript", newNetworkScript->text() );
421 c->writeEntry( "newClientAction", newClientAction->currentItem() );
422 c->writeEntry( "newClientScript", newClientScript->text() );
423 c->writeEntry( "newStationAction", newStationAction->currentItem() );
424 c->writeEntry( "newStationScript", newStationScript->text() );
336 425
337 c->setGroup( "GPS" ); 426 c->setGroup( "GPS" );
338 c->writeEntry( "use", enableGPS->isChecked() ); 427 c->writeEntry( "use", enableGPS->isChecked() );
339 c->writeEntry( "host", gpsdHost->currentText() ); 428 c->writeEntry( "host", gpsdHost->currentText() );
340 c->writeEntry( "port", gpsdPort->value() ); 429 c->writeEntry( "port", gpsdPort->value() );
341 c->writeEntry( "start", startGPS->isChecked() ); 430 c->writeEntry( "start", startGPS->isChecked() );
342 c->writeEntry( "command", commandGPS->text() ); 431 c->writeEntry( "command", commandGPS->text() );
343 432
344 c->write(); 433 c->write();
345 434
346#endif 435#endif
347} 436}
diff --git a/noncore/net/wellenreiter/gui/configwindow.h b/noncore/net/wellenreiter/gui/configwindow.h
index 80b4d2b..b082331 100644
--- a/noncore/net/wellenreiter/gui/configwindow.h
+++ b/noncore/net/wellenreiter/gui/configwindow.h
@@ -44,28 +44,35 @@ class WellenreiterConfigWindow : public WellenreiterConfigBase
44 const QString soundOnBeacon() const { return "";/*beaconSound->currentText();*/ }; 44 const QString soundOnBeacon() const { return "";/*beaconSound->currentText();*/ };
45 static WellenreiterConfigWindow* instance() { return _instance; }; 45 static WellenreiterConfigWindow* instance() { return _instance; };
46 46
47 int hoppingInterval() const; 47 int hoppingInterval() const;
48 bool usePrismHeader() const; 48 bool usePrismHeader() const;
49 bool isChannelChecked( int ) const; 49 bool isChannelChecked( int ) const;
50 50
51 bool useGPS() const; 51 bool useGPS() const;
52 const QString gpsHost() const; 52 const QString gpsHost() const;
53 int gpsPort() const; 53 int gpsPort() const;
54 54
55 void save(); 55 void save();
56 void load(); 56 void load();
57 57
58 public slots: 58 public slots:
59 void changedDeviceType(int); 59 void changedDeviceType(int);
60 void changedNetworkAction(int t);
61 void changedClientAction(int t);
62 void changedStationAction(int t);
60 void getCaptureFileNameClicked(); 63 void getCaptureFileNameClicked();
61 void performAutodetection(); 64 void performAutodetection();
62 void channelAllClicked(int); 65 void channelAllClicked(int);
66 void performAction( const QString& );
67
68 protected:
69 void synchronizeActionsAndScripts();
63 70
64 protected: 71 protected:
65 QMap<QString, int> _devicetype; 72 QMap<QString, int> _devicetype;
66 static WellenreiterConfigWindow* _instance; 73 static WellenreiterConfigWindow* _instance;
67 int _guess; 74 int _guess;
68 75
69}; 76};
70 77
71#endif 78#endif
diff --git a/noncore/net/wellenreiter/gui/gps.cpp b/noncore/net/wellenreiter/gui/gps.cpp
index 31f95ce..b814427 100644
--- a/noncore/net/wellenreiter/gui/gps.cpp
+++ b/noncore/net/wellenreiter/gui/gps.cpp
@@ -45,49 +45,49 @@ bool GPS::open( const QString& host, int port )
45GpsLocation GPS::position() const 45GpsLocation GPS::position() const
46{ 46{
47 char buf[256]; 47 char buf[256];
48 48
49 int result = _socket->writeBlock( "p\r\n", 3 ); 49 int result = _socket->writeBlock( "p\r\n", 3 );
50 _socket->flush(); 50 _socket->flush();
51 if ( result ) 51 if ( result )
52 { 52 {
53 int numAvail = _socket->bytesAvailable(); 53 int numAvail = _socket->bytesAvailable();
54 qDebug( "GPS write succeeded, %d bytes available for reading...", numAvail ); 54 qDebug( "GPS write succeeded, %d bytes available for reading...", numAvail );
55 if ( numAvail ) 55 if ( numAvail )
56 { 56 {
57 QTextStream stream( _socket ); 57 QTextStream stream( _socket );
58 58
59 QString str; 59 QString str;
60 stream.readRawBytes( &buf[0], 7 ); 60 stream.readRawBytes( &buf[0], 7 );
61 float lat = -111.111; 61 float lat = -111;
62 stream >> lat; 62 stream >> lat;
63 stream.skipWhiteSpace(); 63 stream.skipWhiteSpace();
64 float lon = -111.111; 64 float lon = -111;
65 stream >> lon; 65 stream >> lon;
66 stream.readRawBytes( &buf[0], 200 ); // read and discard the stuff until EOF 66 stream.readRawBytes( &buf[0], 200 ); // read and discard the stuff until EOF
67 67
68 return GpsLocation( lat, lon ); 68 return GpsLocation( lat, lon );
69 } 69 }
70 } 70 }
71 return GpsLocation( -111.111, -111.111 ); 71 return GpsLocation( -111, -111 );
72} 72}
73 73
74 74
75QString GpsLocation::dmsPosition() const 75QString GpsLocation::dmsPosition() const
76{ 76{
77 if ( _latitude == -111.111 || _longitude == -111.11 ) 77 if ( _latitude == -111 || _longitude == -111 )
78 return "N/A"; 78 return "N/A";
79 if ( _latitude == 0.0 && _longitude == 0.0 ) 79 if ( _latitude == 0.0 && _longitude == 0.0 )
80 return "NULL"; 80 return "NULL";
81 81
82 /* compute latitude */ 82 /* compute latitude */
83 83
84 QString dms = "N"; 84 QString dms = "N";
85 if ( _latitude >= 0 ) dms.append( "+" ); 85 if ( _latitude >= 0 ) dms.append( "+" );
86 86
87 int trunc = int( _latitude ); 87 int trunc = int( _latitude );
88 float rest = _latitude - trunc; 88 float rest = _latitude - trunc;
89 89
90 float minf = rest * 60; 90 float minf = rest * 60;
91 int minutes = int( minf ); 91 int minutes = int( minf );
92 92
93 rest = minf - minutes; 93 rest = minf - minutes;
diff --git a/noncore/net/wellenreiter/gui/scanlist.cpp b/noncore/net/wellenreiter/gui/scanlist.cpp
index d89c71f..470646d 100644
--- a/noncore/net/wellenreiter/gui/scanlist.cpp
+++ b/noncore/net/wellenreiter/gui/scanlist.cpp
@@ -13,37 +13,34 @@
13** 13**
14**********************************************************************/ 14**********************************************************************/
15 15
16#include "scanlist.h" 16#include "scanlist.h"
17#include "configwindow.h" 17#include "configwindow.h"
18#include "logwindow.h" 18#include "logwindow.h"
19 19
20#include <assert.h> 20#include <assert.h>
21#include <qcursor.h> 21#include <qcursor.h>
22#include <qdatetime.h> 22#include <qdatetime.h>
23#include <qtextstream.h> 23#include <qtextstream.h>
24#include <qpopupmenu.h> 24#include <qpopupmenu.h>
25#include <qcheckbox.h> 25#include <qcheckbox.h>
26 26
27#ifdef QWS 27#ifdef QWS
28#include <qpe/qpeapplication.h> 28#include <qpe/qpeapplication.h>
29#include <opie/odevice.h>
30using namespace Opie;
31#endif 29#endif
32 30
33
34#ifdef QWS 31#ifdef QWS
35#include <qpe/resource.h> 32#include <qpe/resource.h>
36#else 33#else
37#include "resource.h" 34#include "resource.h"
38#endif 35#endif
39 36
40const int col_type = 0; 37const int col_type = 0;
41const int col_essid = 0; 38const int col_essid = 0;
42const int col_sig = 1; 39const int col_sig = 1;
43const int col_ap = 2; 40const int col_ap = 2;
44const int col_channel = 3; 41const int col_channel = 3;
45const int col_wep = 4; 42const int col_wep = 4;
46const int col_traffic = 5; 43const int col_traffic = 5;
47const int col_ip = 6; 44const int col_ip = 6;
48const int col_manuf = 7; 45const int col_manuf = 7;
49const int col_firstseen = 8; 46const int col_firstseen = 8;
@@ -408,34 +405,36 @@ void MScanListView::contextMenuRequested( QListViewItem* item, const QPoint&, in
408 } 405 }
409} 406}
410 407
411//============================================================ 408//============================================================
412// MScanListItem 409// MScanListItem
413//============================================================ 410//============================================================
414 411
415MScanListItem::MScanListItem( QListView* parent, QString type, QString essid, QString macaddr, 412MScanListItem::MScanListItem( QListView* parent, QString type, QString essid, QString macaddr,
416 bool wep, int channel, int signal ) 413 bool wep, int channel, int signal )
417 :OListViewItem( parent, essid, QString::null, macaddr, QString::null, QString::null ), 414 :OListViewItem( parent, essid, QString::null, macaddr, QString::null, QString::null ),
418 _type( type ), _essid( essid ), _macaddr( macaddr ), _wep( wep ), 415 _type( type ), _essid( essid ), _macaddr( macaddr ), _wep( wep ),
419 _channel( channel ), _signal( signal ), _beacons( 1 ) 416 _channel( channel ), _signal( signal ), _beacons( 1 )
420{ 417{
421 #ifdef DEBUG 418 #ifdef DEBUG
422 qDebug( "creating scanlist item" ); 419 qDebug( "creating scanlist item" );
423 #endif 420 #endif
424 if ( WellenreiterConfigWindow::instance() && type == "network" ) 421
425 playSound( WellenreiterConfigWindow::instance()->soundOnNetwork() ); 422 if ( WellenreiterConfigWindow::instance() )
423 WellenreiterConfigWindow::instance()->performAction( type ); // better use signal/slot combination here
424
426 decorateItem( type, essid, macaddr, wep, channel, signal ); 425 decorateItem( type, essid, macaddr, wep, channel, signal );
427} 426}
428 427
429MScanListItem::MScanListItem( QListViewItem* parent, QString type, QString essid, QString macaddr, 428MScanListItem::MScanListItem( QListViewItem* parent, QString type, QString essid, QString macaddr,
430 bool wep, int channel, int signal ) 429 bool wep, int channel, int signal )
431 :OListViewItem( parent, essid, QString::null, macaddr, QString::null, QString::null ) 430 :OListViewItem( parent, essid, QString::null, macaddr, QString::null, QString::null )
432{ 431{
433 #ifdef DEBUG 432 #ifdef DEBUG
434 qDebug( "creating scanlist item" ); 433 qDebug( "creating scanlist item" );
435 #endif 434 #endif
436 decorateItem( type, essid, macaddr, wep, channel, signal ); 435 decorateItem( type, essid, macaddr, wep, channel, signal );
437} 436}
438 437
439const QString& MScanListItem::essid() const 438const QString& MScanListItem::essid() const
440{ 439{
441 if ( type == "network" ) 440 if ( type == "network" )
@@ -526,41 +525,30 @@ void MScanListItem::decorateItem( QString type, QString essid, QString macaddr,
526 525
527} 526}
528 527
529 528
530void MScanListItem::setManufacturer( const QString& manufacturer ) 529void MScanListItem::setManufacturer( const QString& manufacturer )
531{ 530{
532 setText( col_manuf, manufacturer ); 531 setText( col_manuf, manufacturer );
533} 532}
534 533
535 534
536void MScanListItem::setLocation( const QString& location ) 535void MScanListItem::setLocation( const QString& location )
537{ 536{
538 setText( col_location, location ); 537 setText( col_location, location );
539} 538}
540 539
541 540
542void MScanListItem::playSound( const QString& sound ) const
543{
544 #ifdef QWS
545 if ( sound == "Ignore" ) return;
546 else if ( sound == "Touch" ) ODevice::inst()->touchSound();
547 else if ( sound == "Key" ) ODevice::inst()->keySound();
548 else if ( sound == "Alarm" ) ODevice::inst()->alarmSound();
549 #endif
550}
551
552
553void MScanListItem::receivedBeacon() 541void MScanListItem::receivedBeacon()
554{ 542{
555 _beacons++; 543 _beacons++;
556 #ifdef DEBUG 544 #ifdef DEBUG
557 qDebug( "MScanListItem %s: received beacon #%d", (const char*) _macaddr, _beacons ); 545 qDebug( "MScanListItem %s: received beacon #%d", (const char*) _macaddr, _beacons );
558 #endif 546 #endif
559 setText( col_sig, QString::number( _beacons ) ); 547 setText( col_sig, QString::number( _beacons ) );
560 setText( col_lastseen, QTime::currentTime().toString() ); 548 setText( col_lastseen, QTime::currentTime().toString() );
561 549
562 MScanListItem* p = (MScanListItem*) parent(); 550 MScanListItem* p = (MScanListItem*) parent();
563 if ( p ) p->receivedBeacon(); 551 if ( p ) p->receivedBeacon();
564 552
565} 553}
566 554
diff --git a/noncore/net/wellenreiter/gui/scanlist.h b/noncore/net/wellenreiter/gui/scanlist.h
index 6cd8fc0..42f35c2 100644
--- a/noncore/net/wellenreiter/gui/scanlist.h
+++ b/noncore/net/wellenreiter/gui/scanlist.h
@@ -96,35 +96,32 @@ class MScanListItem: public OListViewItem
96 const QString& macaddr() { return _macaddr; }; 96 const QString& macaddr() { return _macaddr; };
97 bool wep() { return _wep; }; 97 bool wep() { return _wep; };
98 int channel() { return _channel; }; 98 int channel() { return _channel; };
99 int signal() { return _signal; }; 99 int signal() { return _signal; };
100 int beacons() { return _beacons; }; 100 int beacons() { return _beacons; };
101 101
102 void setSignal( int signal ) { /* TODO */ }; 102 void setSignal( int signal ) { /* TODO */ };
103 void receivedBeacon(); 103 void receivedBeacon();
104 104
105 void setManufacturer( const QString& manufacturer ); 105 void setManufacturer( const QString& manufacturer );
106 void setLocation( const QString& location ); 106 void setLocation( const QString& location );
107 107
108 virtual OListViewItem* childFactory(); 108 virtual OListViewItem* childFactory();
109 virtual void serializeTo( QDataStream& s ) const; 109 virtual void serializeTo( QDataStream& s ) const;
110 virtual void serializeFrom( QDataStream& s ); 110 virtual void serializeFrom( QDataStream& s );
111 111
112 protected:
113 void playSound( const QString& ) const;
114
115 private: 112 private:
116 QString _type; 113 QString _type;
117 QString _essid; 114 QString _essid;
118 QString _macaddr; 115 QString _macaddr;
119 bool _wep; 116 bool _wep;
120 int _channel; 117 int _channel;
121 int _signal; 118 int _signal;
122 int _beacons; 119 int _beacons;
123 120
124}; 121};
125 122
126//****************************** MScanListViewFactory **************************************************************** 123//****************************** MScanListViewFactory ****************************************************************
127 124
128/* 125/*
129 126
130class MScanListViewFactory : public OListViewFactory 127class MScanListViewFactory : public OListViewFactory
diff --git a/noncore/net/wellenreiter/gui/wellenreiter.cpp b/noncore/net/wellenreiter/gui/wellenreiter.cpp
index 45d7142..25632f3 100644
--- a/noncore/net/wellenreiter/gui/wellenreiter.cpp
+++ b/noncore/net/wellenreiter/gui/wellenreiter.cpp
@@ -168,68 +168,68 @@ void Wellenreiter::handleManagementFrame( OPacket* p, OWaveLanManagementPacket*
168 QString type; 168 QString type;
169 if ( beacon->canIBSS() ) 169 if ( beacon->canIBSS() )
170 { 170 {
171 type = "adhoc"; 171 type = "adhoc";
172 } 172 }
173 else if ( beacon->canESS() ) 173 else if ( beacon->canESS() )
174 { 174 {
175 type = "managed"; 175 type = "managed";
176 } 176 }
177 else 177 else
178 { 178 {
179 qWarning( "Wellenreiter::invalid frame [possibly noise] detected!" ); 179 qWarning( "Wellenreiter::invalid frame [possibly noise] detected!" );
180 return; 180 return;
181 } 181 }
182 182
183 OWaveLanManagementSSID* ssid = static_cast<OWaveLanManagementSSID*>( p->child( "802.11 SSID" ) ); 183 OWaveLanManagementSSID* ssid = static_cast<OWaveLanManagementSSID*>( p->child( "802.11 SSID" ) );
184 QString essid = ssid ? ssid->ID() : QString("<unknown>"); 184 QString essid = ssid ? ssid->ID( true /* decloak */ ) : QString("<unknown>");
185 OWaveLanManagementDS* ds = static_cast<OWaveLanManagementDS*>( p->child( "802.11 DS" ) ); 185 OWaveLanManagementDS* ds = static_cast<OWaveLanManagementDS*>( p->child( "802.11 DS" ) );
186 int channel = ds ? ds->channel() : -1; 186 int channel = ds ? ds->channel() : -1;
187 187
188 OWaveLanPacket* header = static_cast<OWaveLanPacket*>( p->child( "802.11" ) ); 188 OWaveLanPacket* header = static_cast<OWaveLanPacket*>( p->child( "802.11" ) );
189 189
190 GpsLocation loc( -111.111, -111.111 ); 190 GpsLocation loc( -111, -111 );
191 if ( configwindow->enableGPS->isChecked() ) 191 if ( configwindow->enableGPS->isChecked() )
192 { 192 {
193 // TODO: add check if GPS is working!? 193 // TODO: add check if GPS is working!?
194 qDebug( "Wellenreiter::gathering GPS data..." ); 194 qDebug( "Wellenreiter::gathering GPS data..." );
195 loc = gps->position(); 195 loc = gps->position();
196 qDebug( "Wellenreiter::GPS data received is ( %f , %f ) - dms string = '%s'", loc.latitude(), loc.longitude(), loc.dmsPosition().latin1() ); 196 qDebug( "Wellenreiter::GPS data received is ( %f , %f ) - dms string = '%s'", loc.latitude(), loc.longitude(), loc.dmsPosition().latin1() );
197 } 197 }
198 198
199 netView()->addNewItem( type, essid, header->macAddress2(), beacon->canPrivacy(), channel, 0, loc ); 199 netView()->addNewItem( type, essid, header->macAddress2(), beacon->canPrivacy(), channel, 0, loc );
200 200
201 // update graph window 201 // update graph window
202 if ( ds ) 202 if ( ds )
203 { 203 {
204 OPrismHeaderPacket* prism = static_cast<OPrismHeaderPacket*>( p->child( "Prism" ) ); 204 OPrismHeaderPacket* prism = static_cast<OPrismHeaderPacket*>( p->child( "Prism" ) );
205 if ( prism ) 205 if ( prism )
206 graphwindow->traffic( ds->channel(), prism->signalStrength() ); 206 graphwindow->traffic( ds->channel(), prism->signalStrength() );
207 else 207 else
208 graphwindow->traffic( ds->channel(), 95 ); 208 graphwindow->traffic( ds->channel(), 95 );
209 } 209 }
210} 210}
211 211
212 212
213void Wellenreiter::handleControlFrame( OPacket* p, OWaveLanControlPacket* control ) 213void Wellenreiter::handleControlFrame( OPacket* p, OWaveLanControlPacket* control )
214{ 214{
215 OWaveLanPacket* header = static_cast<OWaveLanPacket*>( p->child( "802.11" ) ); 215 OWaveLanPacket* header = static_cast<OWaveLanPacket*>( p->child( "802.11" ) );
216 216
217 if ( control->controlType() == "Acknowledge" ) 217 if ( control->controlType() == "Acknowledge" )
218 { 218 {
219 netView()->addNewItem( "adhoc", "???", header->macAddress1(), false, -1, 0, GpsLocation( -111.111, -111.111 ) ); 219 netView()->addNewItem( "adhoc", "???", header->macAddress1(), false, -1, 0, GpsLocation( -111, -111 ) );
220 } 220 }
221 else 221 else
222 { 222 {
223 qDebug( "Wellenreiter::handleControlFrame - please handle %s in a future version! :D", (const char*) control->controlType() ); 223 qDebug( "Wellenreiter::handleControlFrame - please handle %s in a future version! :D", (const char*) control->controlType() );
224 } 224 }
225} 225}
226 226
227 227
228void Wellenreiter::handleWlanData( OPacket* p, OWaveLanDataPacket* data, OMacAddress& from, OMacAddress& to ) 228void Wellenreiter::handleWlanData( OPacket* p, OWaveLanDataPacket* data, OMacAddress& from, OMacAddress& to )
229{ 229{
230 OWaveLanPacket* wlan = (OWaveLanPacket*) p->child( "802.11" ); 230 OWaveLanPacket* wlan = (OWaveLanPacket*) p->child( "802.11" );
231 if ( wlan->fromDS() && !wlan->toDS() ) 231 if ( wlan->fromDS() && !wlan->toDS() )
232 { 232 {
233 netView()->fromDStraffic( wlan->macAddress3(), wlan->macAddress1(), wlan->macAddress2() ); 233 netView()->fromDStraffic( wlan->macAddress3(), wlan->macAddress1(), wlan->macAddress2() );
234 from = wlan->macAddress3(); 234 from = wlan->macAddress3();
235 to = wlan->macAddress2(); 235 to = wlan->macAddress2();
@@ -247,33 +247,33 @@ void Wellenreiter::handleWlanData( OPacket* p, OWaveLanDataPacket* data, OMacAdd
247 to = wlan->macAddress3(); 247 to = wlan->macAddress3();
248 } 248 }
249 else 249 else
250 { 250 {
251 netView()->IBSStraffic( wlan->macAddress2(), wlan->macAddress1(), wlan->macAddress3() ); 251 netView()->IBSStraffic( wlan->macAddress2(), wlan->macAddress1(), wlan->macAddress3() );
252 from = wlan->macAddress2(); 252 from = wlan->macAddress2();
253 to = wlan->macAddress1(); 253 to = wlan->macAddress1();
254 } 254 }
255} 255}
256 256
257 257
258void Wellenreiter::handleEthernetData( OPacket* p, OEthernetPacket* data, OMacAddress& from, OMacAddress& to ) 258void Wellenreiter::handleEthernetData( OPacket* p, OEthernetPacket* data, OMacAddress& from, OMacAddress& to )
259{ 259{
260 from = data->sourceAddress(); 260 from = data->sourceAddress();
261 to = data->destinationAddress(); 261 to = data->destinationAddress();
262 262
263 netView()->addNewItem( "station", "<wired>", from, false, -1, 0, GpsLocation( -111.111, -111.111 ) ); 263 netView()->addNewItem( "station", "<wired>", from, false, -1, 0, GpsLocation( -111, -111 ) );
264} 264}
265 265
266 266
267void Wellenreiter::handleARPData( OPacket* p, OARPPacket*, OMacAddress& source, OMacAddress& dest ) 267void Wellenreiter::handleARPData( OPacket* p, OARPPacket*, OMacAddress& source, OMacAddress& dest )
268{ 268{
269 OARPPacket* arp = (OARPPacket*) p->child( "ARP" ); 269 OARPPacket* arp = (OARPPacket*) p->child( "ARP" );
270 if ( arp ) 270 if ( arp )
271 { 271 {
272 qDebug( "Received ARP traffic (type '%s'): ", (const char*) arp->type() ); 272 qDebug( "Received ARP traffic (type '%s'): ", (const char*) arp->type() );
273 if ( arp->type() == "REQUEST" ) 273 if ( arp->type() == "REQUEST" )
274 { 274 {
275 netView()->identify( arp->senderMacAddress(), arp->senderIPV4Address().toString() ); 275 netView()->identify( arp->senderMacAddress(), arp->senderIPV4Address().toString() );
276 } 276 }
277 else if ( arp->type() == "REPLY" ) 277 else if ( arp->type() == "REPLY" )
278 { 278 {
279 netView()->identify( arp->senderMacAddress(), arp->senderIPV4Address().toString() ); 279 netView()->identify( arp->senderMacAddress(), arp->senderIPV4Address().toString() );
diff --git a/noncore/net/wellenreiter/opie-wellenreiter.control b/noncore/net/wellenreiter/opie-wellenreiter.control
index 18bac98..1d8c482 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.2-$SUB_VERSION 7Version: 1.0.2-$SUB_VERSION
8Depends: libqpe1, libpcap0 (0.7.2), libopiecore2, libopienet2, libopieui2 8Depends: libqpe1, libpcap0 (0.7.2), libopiecore2, libopienet2 (>=1.8.3), 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.