summaryrefslogtreecommitdiff
authormickeyl <mickeyl>2003-10-10 02:24:48 (UTC)
committer mickeyl <mickeyl>2003-10-10 02:24:48 (UTC)
commit2b2620fee2bbd6f7045b237aa33c277c47512345 (patch) (side-by-side diff)
tree31f92a166da4ae596d55fe5079f058dd4a16fce4
parentc1a897e63513c9647666970794c1684b2439501e (diff)
downloadopie-2b2620fee2bbd6f7045b237aa33c277c47512345.zip
opie-2b2620fee2bbd6f7045b237aa33c277c47512345.tar.gz
opie-2b2620fee2bbd6f7045b237aa33c277c47512345.tar.bz2
This patch adds scanning the "network neighbourhood" in networksettings-wlan
(powered by the Wellenreiter II scanning engine found in libopienet2). Detected networks are put in a list and you can select parameters by clicking on an entry in the list. See http://opie.net.wox.org/images/wlanplugin.png Two inherent drawbacks: 1.) networksettingsplugin-wlan now needs libopienet2. Well, my library work pays off. If you like to rewrite the stuff so that libopienet2 is not needed, then just go ahead ;) 2.) Scanning won't work on linux distributions without patched monitor mode drivers. I think we can live with these two "issues". Feel free to revert, if you don't like my work :D
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/settings/networksettings/wlan/config.in4
-rw-r--r--noncore/settings/networksettings/wlan/opie-networksettingsplugin-wlan.control2
-rw-r--r--noncore/settings/networksettings/wlan/wlan.pro2
-rw-r--r--noncore/settings/networksettings/wlan/wlan.ui658
-rw-r--r--noncore/settings/networksettings/wlan/wlanimp.cpp2
-rw-r--r--noncore/settings/networksettings/wlan/wlanimp2.cpp216
-rw-r--r--noncore/settings/networksettings/wlan/wlanimp2.h21
-rw-r--r--pics/networksettings/adhoc.pngbin0 -> 694 bytes
-rw-r--r--pics/networksettings/managed.pngbin0 -> 410 bytes
9 files changed, 577 insertions, 328 deletions
diff --git a/noncore/settings/networksettings/wlan/config.in b/noncore/settings/networksettings/wlan/config.in
index 53bcb1e..e459788 100644
--- a/noncore/settings/networksettings/wlan/config.in
+++ b/noncore/settings/networksettings/wlan/config.in
@@ -1,4 +1,6 @@
config WLAN
boolean "opie-networksettingsplugin-wlan (wireless LAN module)"
default "n" if NETWORKSETUP
- depends ( LIBQPE || LIBQPE-X11 ) && LIBOPIE && NETWORKSETUP && NETWORKSETUP-CORE && INTERFACES
+ depends ( LIBQPE || LIBQPE-X11 ) && LIBOPIE && NETWORKSETUP && NETWORKSETUP-CORE && INTERFACES && LIBOPIE2NET
+ #comment "opie-networksettingsplugin-wlan needs libopie, libopie2net and networksetup"
+ #depends !( LIBOPIE2NET && LIBOPIE && NETWORKSETUP) \ No newline at end of file
diff --git a/noncore/settings/networksettings/wlan/opie-networksettingsplugin-wlan.control b/noncore/settings/networksettings/wlan/opie-networksettingsplugin-wlan.control
index 719337f..ec3078d 100644
--- a/noncore/settings/networksettings/wlan/opie-networksettingsplugin-wlan.control
+++ b/noncore/settings/networksettings/wlan/opie-networksettingsplugin-wlan.control
@@ -1,10 +1,10 @@
Package: opie-networksettingsplugin-wlan
Files: plugins/networksettings/libwlan.so*
Priority: optional
Section: opie/settings
Maintainer: Patrick S. Vogt <tille@handhelds.org>
Architecture: arm
-Depends: opie-networksettings
+Depends: opie-networksettings, libopie2net (1.8.1)
Description: Network settings wavelan plugin.
Version: $QPE_VERSION$EXTRAVERSION
diff --git a/noncore/settings/networksettings/wlan/wlan.pro b/noncore/settings/networksettings/wlan/wlan.pro
index 552c669..82a5b2f 100644
--- a/noncore/settings/networksettings/wlan/wlan.pro
+++ b/noncore/settings/networksettings/wlan/wlan.pro
@@ -1,28 +1,28 @@
#
TEMPLATE = lib
#TEMPLATE = app
CONFIG += qt warn_on release
#CONFIG += qt warn_on debug
DESTDIR = $(OPIEDIR)/plugins/networksettings
HEADERS = infoimp.h wlanmodule.h wextensions.h keyedit.h
SOURCES = infoimp.cpp wlanmodule.cpp wextensions.cpp keyedit.cpp
INCLUDEPATH += $(OPIEDIR)/include ../ ../interfaces/
DEPENDPATH += $(OPIEDIR)/include
-LIBS += -lqpe -L../interfaces/ -linterfaces
+LIBS += -lqpe -L../interfaces/ -linterfaces -lopienet2
INTERFACES = wlan.ui info.ui
TARGET = wlan
VERSION = 1.0.0
#CONFIG += wirelessopts
wirelessopts {
HEADERS += wlanimp.h
SOURCES += wlanimp.cpp
}
! wirelessopts {
HEADERS += wlanimp2.h
SOURCES += wlanimp2.cpp
}
include ( $(OPIEDIR)/include.pro )
diff --git a/noncore/settings/networksettings/wlan/wlan.ui b/noncore/settings/networksettings/wlan/wlan.ui
index 7e39e23..195ead9 100644
--- a/noncore/settings/networksettings/wlan/wlan.ui
+++ b/noncore/settings/networksettings/wlan/wlan.ui
@@ -1,724 +1,742 @@
<!DOCTYPE UI><UI>
<class>WLAN</class>
<widget>
<class>QDialog</class>
<property stdset="1">
<name>name</name>
<cstring>WLAN</cstring>
</property>
<property stdset="1">
<name>geometry</name>
<rect>
<x>0</x>
<y>0</y>
- <width>247</width>
- <height>299</height>
+ <width>216</width>
+ <height>342</height>
</rect>
</property>
<property stdset="1">
<name>caption</name>
<string>Wireless Configuration</string>
</property>
<property stdset="1">
<name>sizeGripEnabled</name>
<bool>true</bool>
</property>
<property>
<name>layoutMargin</name>
</property>
<vbox>
<property stdset="1">
<name>margin</name>
<number>0</number>
</property>
<property stdset="1">
<name>spacing</name>
<number>6</number>
</property>
<widget>
<class>QTabWidget</class>
<property stdset="1">
<name>name</name>
<cstring>tabWidget</cstring>
</property>
<property stdset="1">
<name>enabled</name>
<bool>true</bool>
</property>
+ <property>
+ <name>layoutMargin</name>
+ </property>
+ <property>
+ <name>layoutSpacing</name>
+ </property>
<widget>
<class>QWidget</class>
<property stdset="1">
<name>name</name>
<cstring>ConfigPage</cstring>
</property>
<attribute>
<name>title</name>
<string>General</string>
</attribute>
- <spacer>
- <property>
- <name>name</name>
- <cstring>Spacer31</cstring>
- </property>
- <property stdset="1">
- <name>orientation</name>
- <enum>Vertical</enum>
- </property>
- <property stdset="1">
- <name>sizeType</name>
- <enum>Expanding</enum>
- </property>
- <property>
- <name>sizeHint</name>
- <size>
- <width>20</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- <widget>
- <class>QLabel</class>
- <property stdset="1">
- <name>name</name>
- <cstring>modeLabel</cstring>
- </property>
- <property stdset="1">
- <name>enabled</name>
- <bool>true</bool>
- </property>
- <property stdset="1">
- <name>geometry</name>
- <rect>
- <x>11</x>
- <y>11</y>
- <width>84</width>
- <height>29</height>
- </rect>
- </property>
- <property stdset="1">
- <name>sizePolicy</name>
- <sizepolicy>
- <hsizetype>1</hsizetype>
- <vsizetype>1</vsizetype>
- </sizepolicy>
- </property>
- <property stdset="1">
- <name>text</name>
- <string>Mode</string>
- </property>
- </widget>
- <widget>
- <class>QLabel</class>
- <property stdset="1">
- <name>name</name>
- <cstring>essidLabel</cstring>
- </property>
- <property stdset="1">
- <name>enabled</name>
- <bool>true</bool>
- </property>
- <property stdset="1">
- <name>geometry</name>
- <rect>
- <x>11</x>
- <y>46</y>
- <width>84</width>
- <height>29</height>
- </rect>
- </property>
- <property stdset="1">
- <name>sizePolicy</name>
- <sizepolicy>
- <hsizetype>1</hsizetype>
- <vsizetype>1</vsizetype>
- </sizepolicy>
- </property>
- <property stdset="1">
- <name>text</name>
- <string>ESS-ID</string>
- </property>
- </widget>
- <widget>
- <class>QSpinBox</class>
- <property stdset="1">
- <name>name</name>
- <cstring>networkChannel</cstring>
- </property>
- <property stdset="1">
- <name>enabled</name>
- <bool>false</bool>
- </property>
- <property stdset="1">
- <name>geometry</name>
- <rect>
- <x>146</x>
- <y>139</y>
- <width>58</width>
- <height>25</height>
- </rect>
- </property>
- <property stdset="1">
- <name>maxValue</name>
- <number>15</number>
- </property>
- <property stdset="1">
- <name>minValue</name>
- <number>1</number>
- </property>
- <property stdset="1">
- <name>value</name>
- <number>1</number>
- </property>
- </widget>
- <widget>
- <class>QLineEdit</class>
- <property stdset="1">
- <name>name</name>
- <cstring>macEdit</cstring>
- </property>
- <property stdset="1">
- <name>enabled</name>
- <bool>false</bool>
- </property>
- <property stdset="1">
- <name>geometry</name>
- <rect>
- <x>56</x>
- <y>108</y>
- <width>182</width>
- <height>25</height>
- </rect>
- </property>
- <property stdset="1">
- <name>sizePolicy</name>
- <sizepolicy>
- <hsizetype>5</hsizetype>
- <vsizetype>1</vsizetype>
- </sizepolicy>
- </property>
- </widget>
- <widget>
- <class>QLabel</class>
- <property stdset="1">
- <name>name</name>
- <cstring>macLabel</cstring>
- </property>
- <property stdset="1">
- <name>enabled</name>
- <bool>false</bool>
- </property>
- <property stdset="1">
- <name>geometry</name>
- <rect>
- <x>11</x>
- <y>108</y>
- <width>39</width>
- <height>25</height>
- </rect>
- </property>
- <property stdset="1">
- <name>text</name>
- <string>MAC</string>
- </property>
- </widget>
- <widget>
- <class>QCheckBox</class>
- <property stdset="1">
- <name>name</name>
- <cstring>specifyAp</cstring>
- </property>
- <property stdset="1">
- <name>geometry</name>
- <rect>
- <x>11</x>
- <y>81</y>
- <width>227</width>
- <height>21</height>
- </rect>
- </property>
- <property stdset="1">
- <name>text</name>
- <string>Specify &amp;Access Point</string>
- </property>
- </widget>
- <widget>
- <class>QCheckBox</class>
- <property stdset="1">
- <name>name</name>
- <cstring>specifyChan</cstring>
- </property>
- <property stdset="1">
- <name>geometry</name>
- <rect>
- <x>11</x>
- <y>141</y>
- <width>129</width>
- <height>21</height>
- </rect>
- </property>
- <property stdset="1">
- <name>text</name>
- <string>Specify &amp;Channel</string>
- </property>
- </widget>
- <spacer>
- <property>
- <name>name</name>
- <cstring>Spacer10</cstring>
- </property>
+ <vbox>
<property stdset="1">
- <name>orientation</name>
- <enum>Horizontal</enum>
+ <name>margin</name>
+ <number>3</number>
</property>
<property stdset="1">
- <name>sizeType</name>
- <enum>Expanding</enum>
- </property>
- <property>
- <name>sizeHint</name>
- <size>
- <width>20</width>
- <height>20</height>
- </size>
+ <name>spacing</name>
+ <number>2</number>
</property>
- </spacer>
- <widget>
- <class>QComboBox</class>
- <item>
- <property>
- <name>text</name>
- <string>any</string>
+ <widget>
+ <class>QLayoutWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>Layout1</cstring>
</property>
- </item>
- <property stdset="1">
- <name>name</name>
- <cstring>essid</cstring>
- </property>
- <property stdset="1">
- <name>geometry</name>
- <rect>
- <x>101</x>
- <y>46</y>
- <width>103</width>
- <height>29</height>
- </rect>
- </property>
- <property stdset="1">
- <name>sizePolicy</name>
- <sizepolicy>
- <hsizetype>7</hsizetype>
- <vsizetype>0</vsizetype>
- </sizepolicy>
- </property>
- <property stdset="1">
- <name>editable</name>
- <bool>true</bool>
- </property>
- <property stdset="1">
- <name>currentItem</name>
- <number>0</number>
- </property>
- <property stdset="1">
- <name>sizeLimit</name>
- <number>5</number>
- </property>
- <property stdset="1">
- <name>autoCompletion</name>
- <bool>true</bool>
- </property>
- <property stdset="1">
- <name>duplicatesEnabled</name>
- <bool>false</bool>
- </property>
- </widget>
- <widget>
- <class>QComboBox</class>
- <item>
- <property>
- <name>text</name>
- <string>Infrastructure</string>
+ <grid>
+ <property stdset="1">
+ <name>margin</name>
+ <number>0</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget row="1" column="1" >
+ <class>QComboBox</class>
+ <item>
+ <property>
+ <name>text</name>
+ <string>any</string>
+ </property>
+ </item>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>essid</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>0</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>editable</name>
+ <bool>true</bool>
+ </property>
+ <property stdset="1">
+ <name>currentItem</name>
+ <number>0</number>
+ </property>
+ <property stdset="1">
+ <name>sizeLimit</name>
+ <number>5</number>
+ </property>
+ <property stdset="1">
+ <name>autoCompletion</name>
+ <bool>true</bool>
+ </property>
+ <property stdset="1">
+ <name>duplicatesEnabled</name>
+ <bool>false</bool>
+ </property>
+ </widget>
+ <widget row="1" column="0" >
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>essidLabel</cstring>
+ </property>
+ <property stdset="1">
+ <name>enabled</name>
+ <bool>true</bool>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>1</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>SSID</string>
+ </property>
+ </widget>
+ <widget row="0" column="1" >
+ <class>QComboBox</class>
+ <item>
+ <property>
+ <name>text</name>
+ <string>Infrastructure</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>Auto</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>Managed</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>Ad-Hoc</string>
+ </property>
+ </item>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>mode</cstring>
+ </property>
+ <property stdset="1">
+ <name>enabled</name>
+ <bool>true</bool>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>0</vsizetype>
+ </sizepolicy>
+ </property>
+ </widget>
+ <widget row="0" column="0" >
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>modeLabel</cstring>
+ </property>
+ <property stdset="1">
+ <name>enabled</name>
+ <bool>true</bool>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>1</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Mode</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget>
+ <class>QCheckBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>specifyAp</cstring>
</property>
- </item>
- <item>
- <property>
+ <property stdset="1">
<name>text</name>
- <string>Auto</string>
+ <string>Specify &amp;Access Point</string>
</property>
- </item>
- <item>
- <property>
- <name>text</name>
- <string>Managed</string>
+ </widget>
+ <widget>
+ <class>QLayoutWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>Layout3</cstring>
</property>
- </item>
- <item>
- <property>
+ <hbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>0</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget>
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>macLabel</cstring>
+ </property>
+ <property stdset="1">
+ <name>enabled</name>
+ <bool>false</bool>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>MAC</string>
+ </property>
+ </widget>
+ <widget>
+ <class>QLineEdit</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>macEdit</cstring>
+ </property>
+ <property stdset="1">
+ <name>enabled</name>
+ <bool>false</bool>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>1</vsizetype>
+ </sizepolicy>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget>
+ <class>QLayoutWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>Layout4</cstring>
+ </property>
+ <hbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>0</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget>
+ <class>QCheckBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>specifyChan</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Specify &amp;Channel</string>
+ </property>
+ </widget>
+ <widget>
+ <class>QSpinBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>networkChannel</cstring>
+ </property>
+ <property stdset="1">
+ <name>enabled</name>
+ <bool>false</bool>
+ </property>
+ <property stdset="1">
+ <name>maxValue</name>
+ <number>15</number>
+ </property>
+ <property stdset="1">
+ <name>minValue</name>
+ <number>1</number>
+ </property>
+ <property stdset="1">
+ <name>value</name>
+ <number>1</number>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget>
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>rescanButton</cstring>
+ </property>
+ <property stdset="1">
<name>text</name>
- <string>Ad-Hoc</string>
+ <string>Rescan Neighbourhood</string>
</property>
- </item>
- <property stdset="1">
- <name>name</name>
- <cstring>mode</cstring>
- </property>
- <property stdset="1">
- <name>enabled</name>
- <bool>true</bool>
- </property>
- <property stdset="1">
- <name>geometry</name>
- <rect>
- <x>101</x>
- <y>11</y>
- <width>103</width>
- <height>29</height>
- </rect>
- </property>
- <property stdset="1">
- <name>sizePolicy</name>
- <sizepolicy>
- <hsizetype>1</hsizetype>
- <vsizetype>0</vsizetype>
- </sizepolicy>
- </property>
- </widget>
+ </widget>
+ <widget>
+ <class>QListView</class>
+ <column>
+ <property>
+ <name>text</name>
+ <string></string>
+ </property>
+ <property>
+ <name>clickable</name>
+ <bool>true</bool>
+ </property>
+ <property>
+ <name>resizeable</name>
+ <bool>true</bool>
+ </property>
+ </column>
+ <column>
+ <property>
+ <name>text</name>
+ <string>SSID</string>
+ </property>
+ <property>
+ <name>clickable</name>
+ <bool>true</bool>
+ </property>
+ <property>
+ <name>resizeable</name>
+ <bool>true</bool>
+ </property>
+ </column>
+ <column>
+ <property>
+ <name>text</name>
+ <string>Chn</string>
+ </property>
+ <property>
+ <name>clickable</name>
+ <bool>true</bool>
+ </property>
+ <property>
+ <name>resizeable</name>
+ <bool>true</bool>
+ </property>
+ </column>
+ <column>
+ <property>
+ <name>text</name>
+ <string>MAC</string>
+ </property>
+ <property>
+ <name>clickable</name>
+ <bool>true</bool>
+ </property>
+ <property>
+ <name>resizeable</name>
+ <bool>true</bool>
+ </property>
+ </column>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>netView</cstring>
+ </property>
+ </widget>
+ </vbox>
</widget>
<widget>
<class>QWidget</class>
<property stdset="1">
<name>name</name>
<cstring>WepPage</cstring>
</property>
<attribute>
<name>title</name>
<string>Encryption</string>
</attribute>
<grid>
<property stdset="1">
<name>margin</name>
- <number>11</number>
+ <number>7</number>
</property>
<property stdset="1">
<name>spacing</name>
- <number>6</number>
+ <number>3</number>
</property>
<widget row="0" column="0" >
<class>QCheckBox</class>
<property stdset="1">
<name>name</name>
<cstring>wepEnabled</cstring>
</property>
<property stdset="1">
<name>text</name>
<string>&amp;Enable Encryption</string>
</property>
</widget>
<widget row="1" column="0" >
<class>QButtonGroup</class>
<property stdset="1">
<name>name</name>
<cstring>KeyButtonGroup</cstring>
</property>
<property stdset="1">
<name>enabled</name>
<bool>false</bool>
</property>
<property stdset="1">
<name>title</name>
<string>&amp;Key Setting</string>
</property>
<grid>
<property stdset="1">
<name>margin</name>
<number>11</number>
</property>
<property stdset="1">
<name>spacing</name>
<number>6</number>
</property>
<widget row="0" column="0" >
<class>QRadioButton</class>
<property stdset="1">
<name>name</name>
<cstring>keyRadio0</cstring>
</property>
<property stdset="1">
<name>text</name>
<string>Key &amp;1</string>
</property>
<property stdset="1">
<name>checked</name>
<bool>true</bool>
</property>
</widget>
<widget row="1" column="0" >
<class>QRadioButton</class>
<property stdset="1">
<name>name</name>
<cstring>keyRadio1</cstring>
</property>
<property stdset="1">
<name>text</name>
<string>Key &amp;2</string>
</property>
</widget>
<widget row="2" column="0" >
<class>QRadioButton</class>
<property stdset="1">
<name>name</name>
<cstring>keyRadio2</cstring>
</property>
<property stdset="1">
<name>text</name>
<string>Key &amp;3</string>
</property>
</widget>
<widget row="3" column="0" >
<class>QRadioButton</class>
<property stdset="1">
<name>name</name>
<cstring>keyRadio3</cstring>
</property>
<property stdset="1">
<name>text</name>
<string>Key &amp;4</string>
</property>
</widget>
<widget row="0" column="1" >
<class>KeyEdit</class>
<property stdset="1">
<name>name</name>
<cstring>keyLineEdit0</cstring>
</property>
<property stdset="1">
<name>sizePolicy</name>
<sizepolicy>
<hsizetype>3</hsizetype>
<vsizetype>5</vsizetype>
</sizepolicy>
</property>
<property stdset="1">
<name>focusPolicy</name>
<enum>StrongFocus</enum>
</property>
</widget>
<widget row="1" column="1" >
<class>KeyEdit</class>
<property stdset="1">
<name>name</name>
<cstring>keyLineEdit1</cstring>
</property>
<property stdset="1">
<name>sizePolicy</name>
<sizepolicy>
<hsizetype>3</hsizetype>
<vsizetype>5</vsizetype>
</sizepolicy>
</property>
<property stdset="1">
<name>focusPolicy</name>
<enum>StrongFocus</enum>
</property>
</widget>
<widget row="2" column="1" >
<class>KeyEdit</class>
<property stdset="1">
<name>name</name>
<cstring>keyLineEdit2</cstring>
</property>
<property stdset="1">
<name>sizePolicy</name>
<sizepolicy>
<hsizetype>3</hsizetype>
<vsizetype>5</vsizetype>
</sizepolicy>
</property>
<property stdset="1">
<name>focusPolicy</name>
<enum>StrongFocus</enum>
</property>
</widget>
<widget row="3" column="1" >
<class>KeyEdit</class>
<property stdset="1">
<name>name</name>
<cstring>keyLineEdit3</cstring>
</property>
<property stdset="1">
<name>sizePolicy</name>
<sizepolicy>
<hsizetype>3</hsizetype>
<vsizetype>5</vsizetype>
</sizepolicy>
</property>
<property stdset="1">
<name>focusPolicy</name>
<enum>StrongFocus</enum>
</property>
</widget>
</grid>
</widget>
<widget row="2" column="0" >
<class>QButtonGroup</class>
<property stdset="1">
<name>name</name>
<cstring>NonEncButtonGroup</cstring>
</property>
<property stdset="1">
<name>enabled</name>
<bool>false</bool>
</property>
<property stdset="1">
<name>title</name>
<string>Non-encrypted Packets</string>
</property>
<property stdset="1">
<name>radioButtonExclusive</name>
<bool>true</bool>
</property>
<grid>
<property stdset="1">
<name>margin</name>
<number>11</number>
</property>
<property stdset="1">
<name>spacing</name>
<number>6</number>
</property>
<widget row="0" column="0" >
<class>QRadioButton</class>
<property stdset="1">
<name>name</name>
<cstring>acceptNonEnc</cstring>
</property>
<property stdset="1">
<name>text</name>
<string>&amp;Accept</string>
</property>
<property stdset="1">
<name>checked</name>
<bool>true</bool>
</property>
<property stdset="1">
<name>buttonGroupId</name>
<number>0</number>
</property>
</widget>
<widget row="0" column="1" >
<class>QRadioButton</class>
<property stdset="1">
<name>name</name>
<cstring>rejectNonEnc</cstring>
</property>
<property stdset="1">
<name>text</name>
<string>&amp;Reject</string>
</property>
<property stdset="1">
<name>buttonGroupId</name>
<number>1</number>
</property>
</widget>
</grid>
</widget>
<spacer row="3" column="0" >
<property>
<name>name</name>
<cstring>Spacer30</cstring>
</property>
<property stdset="1">
<name>orientation</name>
<enum>Vertical</enum>
</property>
<property stdset="1">
<name>sizeType</name>
<enum>Expanding</enum>
</property>
<property>
<name>sizeHint</name>
<size>
<width>20</width>
<height>20</height>
</size>
</property>
</spacer>
</grid>
</widget>
</widget>
</vbox>
</widget>
<customwidgets>
<customwidget>
<class>KeyEdit</class>
<header location="local">keyedit.h</header>
<sizehint>
<width>-1</width>
<height>-1</height>
</sizehint>
<container>0</container>
<sizepolicy>
<hordata>5</hordata>
<verdata>5</verdata>
</sizepolicy>
<pixmap>image0</pixmap>
<slot access="public">setEnabled(bool)</slot>
</customwidget>
</customwidgets>
<images>
<image>
<name>image0</name>
<data format="XPM.GZ" length="646">789c6dd2c10ac2300c00d07bbf2234b7229d1ddec44f503c0ae2a154410f53d0ed20e2bf6bdb656dd6861dd23d9a66591b0587fd1654235ebded6f0edcd53e419d87ae7b1f4f9b8f906d0bfe012317426a70b07bdc2f3ec77f8ed6b89559061a0343d06a124cc105596482585094bc0ae599b04646c9018926491b2205e140c485cace25755c175d0a967b622ff900b8cc9c7d29af594ea722d589167f813aa852ba07d94b9dce296e883fe7bb163f23896753</data>
</image>
</images>
<connections>
<connection>
<sender>specifyAp</sender>
<signal>toggled(bool)</signal>
<receiver>macLabel</receiver>
<slot>setEnabled(bool)</slot>
</connection>
<connection>
<sender>specifyAp</sender>
<signal>toggled(bool)</signal>
<receiver>macEdit</receiver>
<slot>setEnabled(bool)</slot>
</connection>
<connection>
<sender>specifyChan</sender>
<signal>toggled(bool)</signal>
<receiver>networkChannel</receiver>
<slot>setEnabled(bool)</slot>
</connection>
<connection>
<sender>wepEnabled</sender>
<signal>toggled(bool)</signal>
<receiver>KeyButtonGroup</receiver>
<slot>setEnabled(bool)</slot>
</connection>
<connection>
<sender>wepEnabled</sender>
<signal>toggled(bool)</signal>
<receiver>NonEncButtonGroup</receiver>
<slot>setEnabled(bool)</slot>
</connection>
</connections>
<tabstops>
<tabstop>tabWidget</tabstop>
<tabstop>wepEnabled</tabstop>
<tabstop>keyRadio0</tabstop>
<tabstop>keyLineEdit0</tabstop>
<tabstop>keyRadio1</tabstop>
<tabstop>keyLineEdit1</tabstop>
<tabstop>keyRadio2</tabstop>
<tabstop>keyLineEdit2</tabstop>
<tabstop>keyRadio3</tabstop>
<tabstop>keyLineEdit3</tabstop>
<tabstop>acceptNonEnc</tabstop>
<tabstop>mode</tabstop>
<tabstop>essid</tabstop>
<tabstop>specifyAp</tabstop>
<tabstop>macEdit</tabstop>
<tabstop>specifyChan</tabstop>
<tabstop>networkChannel</tabstop>
</tabstops>
</UI>
diff --git a/noncore/settings/networksettings/wlan/wlanimp.cpp b/noncore/settings/networksettings/wlan/wlanimp.cpp
index 8bf004f..719be1b 100644
--- a/noncore/settings/networksettings/wlan/wlanimp.cpp
+++ b/noncore/settings/networksettings/wlan/wlanimp.cpp
@@ -1,244 +1,244 @@
#include "wlanimp.h"
#include "interfacesetupimp.h"
#include <qfile.h>
#include <qdir.h>
#include <qtextstream.h>
#include <qmessagebox.h>
#include <qlineedit.h>
#include <qlabel.h>
#include <qspinbox.h>
#include <qradiobutton.h>
#include <qcheckbox.h>
#include <qtabwidget.h>
#include <qcombobox.h>
#ifdef QWS
#include <opie/oprocess.h>
#else
#define OProcess KProcess
#include <kprocess.h>
#endif
#define WIRELESS_OPTS "/etc/pcmcia/wireless.opts"
/**
* Constructor, read in the wireless.opts file for parsing later.
*/
WLANImp::WLANImp( QWidget* parent, const char* name, Interface *i, bool modal, WFlags fl):WLAN(parent, name, modal, fl), currentProfile("*") {
interfaceSetup = new InterfaceSetupImp(tabWidget, "InterfaceSetupImp", i);
tabWidget->insertTab(interfaceSetup, "TCP/IP");
// Read in the config file.
QString wlanFile = WIRELESS_OPTS;
QFile file(wlanFile);
if (file.open(IO_ReadOnly)){
QTextStream stream( &file );
QString line = "";
while ( !stream.eof() ) {
line += stream.readLine();
line += "\n";
}
file.close();
settingsFileText = QStringList::split("\n", line, true);
parseSettingFile();
}
else
qDebug(QString("WLANImp: Can't open file: %1 for reading.").arg(wlanFile).latin1());
connect(networkType, SIGNAL(activated(int)), this, SLOT(typeChanged(int)));
}
void WLANImp::typeChanged(int mod){
networkChannel->setEnabled(mod);
channelLabel->setEnabled(mod);
}
/**
* Change the profile for both wireless settings and network settings.
*/
void WLANImp::setProfile(const QString &profile){
interfaceSetup->setProfile(profile);
parseSettingFile();
}
/**
* Parses the settings file that was read in and gets any setting from it.
*/
void WLANImp::parseSettingFile(){
bool foundCase = false;
bool found = false;
for ( QStringList::Iterator it = settingsFileText.begin(); it != settingsFileText.end(); ++it ) {
QString line = (*it).simplifyWhiteSpace();
if(line.contains("case"))
foundCase = true;
// See if we found our scheme to write or the sceme couldn't be found
if((foundCase && line.contains("esac")) ||
(foundCase && line.left(currentProfile.length()+7) == currentProfile + ",*,*,*)" && line.at(0) != '#'))
found = true;
if(line.contains(";;"))
found = false;
if(found){
// write out scheme
if(line.contains("ESSID=")){
QString id = line.mid(line.find("ESSID=")+6, line.length());
if(id == "any"){
essAny->setChecked(false);
}else{
essAny->setChecked(true);
essSpecificLineEdit->setText(id);
}
}
if(line.contains("MODE=")){
QString mode = line.mid(line.find("MODE=")+5, line.length());
if(mode == "Managed"){
networkType->setCurrentItem(0);
channelLabel->setEnabled(false);
networkChannel->setEnabled(false);
}
else{
networkType->setCurrentItem(1);
networkChannel->setEnabled(true);
channelLabel->setEnabled(true);
}
}
if(line.contains("#KEY0="))
keyLineEdit0->setText(line.mid(6, line.length()));
if(line.contains("#KEY1="))
keyLineEdit1->setText(line.mid(6, line.length()));
if(line.contains("#KEY2="))
keyLineEdit2->setText(line.mid(6, line.length()));
if(line.contains("#KEY3="))
keyLineEdit3->setText(line.mid(6, line.length()));
if(line.contains("KEY=")){
wepEnabled->setChecked(true);
QString key;
if(line.right(5) == (" open")){
key = line.mid(4, line.length()-5);
authOpen->setChecked(true);
authShared->setChecked(false);
}
else{
authOpen->setChecked(false);
authShared->setChecked(true);
key = line.mid(4, line.length());
}
if(key == keyLineEdit0->text()) keyRadio0->setChecked(true);
if(key == keyLineEdit1->text()) keyRadio1->setChecked(true);
if(key == keyLineEdit2->text()) keyRadio2->setChecked(true);
if(key == keyLineEdit3->text()) keyRadio3->setChecked(true);
}
if(line.contains("CHANNEL=")){
networkChannel->setValue(line.mid(line.find("CHANNEL=")+8, line.length()).toInt());
}
}
}
}
/**
* Saves settings to the wireless.opts file using the current profile
*/
void WLANImp::changeAndSaveSettingFile(){
QString wlanFile = WIRELESS_OPTS;
QFile::remove(wlanFile);
QFile file(wlanFile);
if (!file.open(IO_ReadWrite)){
qDebug(QString("WLANImp::changeAndSaveSettingFile(): Can't open file: %1 for writing.").arg(wlanFile).latin1());
return;
}
QTextStream stream( &file );
bool foundCase = false;
bool found = false;
bool output = true;
for ( QStringList::Iterator it = settingsFileText.begin(); it != settingsFileText.end(); ++it ) {
QString line = (*it).simplifyWhiteSpace();
if(line.contains("case"))
foundCase = true;
// See if we found our scheme to write or the sceme couldn't be found
if((foundCase && line.contains("esac") && !found) ||
(foundCase && line.left(currentProfile.length()+7) == currentProfile + ",*,*,*)" && line.at(0) != '#')){
// write out scheme
found = true;
output = false;
if(!line.contains("esac"))
stream << line << "\n";
if(!essAny->isChecked() == true){
stream << "\tESSID=any\n";
stream << "\tMODE=Managed\n";
}
else{
stream << "\tESSID=" << essSpecificLineEdit->text() << '\n';
stream << "\tMODE=" << ( networkType->currentItem() == 0 ? "Managed" : "ad-hoc") << '\n';
stream << "\tCHANNEL=" << networkChannel->value() << "\n";
}
stream << "\t#KEY0=" << keyLineEdit0->text() << "\n";
stream << "\t#KEY1=" << keyLineEdit1->text() << "\n";
stream << "\t#KEY2=" << keyLineEdit2->text() << "\n";
stream << "\t#KEY3=" << keyLineEdit3->text() << "\n";
if(wepEnabled->isChecked()){
stream << "\tKEY=\"";
if(keyRadio0->isChecked()) stream << keyLineEdit0->text();
if(keyRadio1->isChecked()) stream << keyLineEdit1->text();
if(keyRadio2->isChecked()) stream << keyLineEdit2->text();
if(keyRadio3->isChecked()) stream << keyLineEdit3->text();
if(authOpen->isChecked())
stream << " open";
else
stream << " restricted";
stream << "\"\n";
}
stream << "\tRATE=auto\n";
if(line.contains("esac"))
stream << line << "\n";
}
if(line.contains(";;"))
output = true;
if(output && (*it).length() )
stream << (*it) << '\n';
}
file.close();
}
/**
* Check to see if the current config is valid
* Save wireless.opts, save interfaces
*/
void WLANImp::accept(){
if(wepEnabled->isChecked()){
if(keyLineEdit0->text().isEmpty() && keyLineEdit1->text().isEmpty() && keyLineEdit2->text().isEmpty() && keyLineEdit3->text().isEmpty() ){
QMessageBox::information(this, "Error", "Please enter a key for WEP.", QMessageBox::Ok);
return;
}
}
if(essAny->isChecked() && essSpecificLineEdit->text().isEmpty()){
- QMessageBox::information(this, "Error", "Please enter a ESS-ID.", QMessageBox::Ok);
+ QMessageBox::information(this, "Error", "Please enter a SSID.", QMessageBox::Ok);
return;
}
// Ok settings are good here, save
changeAndSaveSettingFile();
// Try to save the interfaces settings.
if(!interfaceSetup->saveChanges())
return;
OProcess insert;
insert << "sh";
insert << "-c";
insert << "cardctl eject && cardctl insert";
if (!insert.start(OProcess::DontCare, OProcess::NoCommunication) ) {
qWarning("could not start cardctl");
}
// Close out the dialog
QDialog::accept();
}
diff --git a/noncore/settings/networksettings/wlan/wlanimp2.cpp b/noncore/settings/networksettings/wlan/wlanimp2.cpp
index 26e3aa9..7ce096f 100644
--- a/noncore/settings/networksettings/wlan/wlanimp2.cpp
+++ b/noncore/settings/networksettings/wlan/wlanimp2.cpp
@@ -1,276 +1,490 @@
#include "wlanimp2.h"
#include "keyedit.h"
#include "interfacesetupimp.h"
+#include "../interfaces/interface.h"
+
+#include <assert.h>
+#include <errno.h>
+#include <string.h>
+
+#include <qapplication.h>
#include <qfile.h>
#include <qdir.h>
+#include <qdialog.h>
#include <qtextstream.h>
#include <qmessagebox.h>
#include <qlineedit.h>
#include <qlabel.h>
#include <qspinbox.h>
#include <qradiobutton.h>
+#include <qpushbutton.h>
#include <qcheckbox.h>
#include <qtabwidget.h>
#include <qcombobox.h>
+#include <qlistview.h>
+#include <qvbox.h>
+#include <qprogressbar.h>
#ifdef QWS
+ #include <qpe/resource.h>
#include <opie/oprocess.h>
+ #include <opie2/onetwork.h>
+ #include <opie2/opcap.h>
#else
#define OProcess KProcess
#include <kprocess.h>
#endif
#define WIRELESS_OPTS "/etc/pcmcia/wireless.opts"
-#define PREUP "/etc/netwrok/if-pre-up.d/wireless-tools"
+#define PREUP "/etc/network/if-pre-up.d/wireless-tools"
/**
* Constructor, read in the wireless.opts file for parsing later.
*/
WLANImp::WLANImp( QWidget* parent, const char* name, Interface *i, bool modal, WFlags fl) : WLAN(parent, name, modal, fl), interface(i), currentProfile("*") {
interfaces = new Interfaces();
interfaceSetup = new InterfaceSetupImp(tabWidget, "InterfaceSetupImp", i, interfaces);
tabWidget->insertTab(interfaceSetup, "TCP/IP");
// Check sanity - the existance of the wireless-tools if-pre-up script
QFile file(QString(PREUP));
if (file.exists()) {
qWarning(QString("WLANImp: Unable to open /etc/network/if-pre-up.d/wireless-tools"));
}
+
+ connect( rescanButton, SIGNAL( clicked() ), this, SLOT( rescanNeighbourhood() ) );
+ connect( netView, SIGNAL( clicked( QListViewItem* ) ), this, SLOT( selectNetwork( QListViewItem* ) ) );
+ netView->setColumnAlignment( col_chn, AlignCenter );
+ netView->setItemMargin( 3 );
+ netView->setAllColumnsShowFocus( true );
+
}
WLANImp::~WLANImp() {
//FIXME: delete interfaces;
}
/**
* Change the profile for both wireless settings and network settings.
*/
void WLANImp::setProfile(const QString &profile){
interfaceSetup->setProfile(profile);
parseOpts();
}
void WLANImp::parseOpts() {
bool error;
QString opt;
if (! interfaces->isInterfaceSet())
return;
opt = interfaces->getInterfaceOption("wireless_essid", error);
if(opt == "any" || opt == "off" || opt.isNull()){
essid->setEditText("any");
} else {
essid->setEditText(opt);
}
opt = interfaces->getInterfaceOption("wireless_mode", error).simplifyWhiteSpace();
for ( int i = 0; i < mode->count(); i++)
if ( mode->text( i ) == opt ) mode->setCurrentItem( i );
opt = interfaces->getInterfaceOption("wireless_ap", error).simplifyWhiteSpace();
if (! opt.isNull()) {
specifyAp->setChecked(true);
macEdit->setText(opt);
}
opt = interfaces->getInterfaceOption("wireless_channel", error).simplifyWhiteSpace();
if (! opt.isNull()) {
specifyChan->setChecked(true);
networkChannel->setValue(opt.toInt());
}
opt = interfaces->getInterfaceOption("wireless_key", error).simplifyWhiteSpace();
if (opt.isNull())
opt = interfaces->getInterfaceOption("wireless_enc", error).simplifyWhiteSpace();
parseKeyStr(opt);
}
void WLANImp::parseKeyStr(QString keystr) {
int loc = 0;
int index = 1;
QString key;
QStringList keys = QStringList::split(QRegExp("\\s+"), keystr);
int enc = -1; // encryption state
for (QStringList::Iterator it = keys.begin(); it != keys.end(); ++it) {
if ((*it).left(3) == "off") {
// encryption disabled
enc = 0;
} else if ((*it).left(2) == "on") {
// encryption enabled
enc = 1;
} else if ((*it).left(4) == "open") {
// open mode, accept non encrypted packets
acceptNonEnc->setChecked(true);
} else if ((*it).left(10) == "restricted") {
// restricted mode, only accept encrypted packets
rejectNonEnc->setChecked(true);
} else if ((*it).left(3) == "key") {
// new set of options
} else if ((*it).left(1) == "[") {
index = (*it).mid(1, 1).toInt();
// switch current key to index
switch (index) {
case 1:
keyRadio0->setChecked(true);
break;
case 2:
keyRadio1->setChecked(true);
break;
case 3:
keyRadio2->setChecked(true);
break;
case 4:
keyRadio3->setChecked(true);
break;
}
} else {
// key
key = (*it);
}
if (! key.isNull()) {
if (enc == -1)
enc = 1;
QStringList::Iterator next = ++it;
if (it == keys.end()) {
break;
}
if ((*(next)).left(1) == "[") {
// set key at index
index = (*(next)).mid(1, 1).toInt();
} else {
index = 1;
}
switch (index) {
case 1:
keyLineEdit0->setText(key);
break;
case 2:
keyLineEdit1->setText(key);
break;
case 3:
keyLineEdit2->setText(key);
break;
case 4:
keyLineEdit3->setText(key);
break;
}
key = QString::null;
}
}
if (enc == 1) {
wepEnabled->setChecked(true);
} else {
wepEnabled->setChecked(false);
}
}
/**
* Check to see if the current config is valid
* Save interfaces
*/
void WLANImp::accept() {
if (wepEnabled->isChecked()) {
if ((keyRadio0->isChecked() && keyLineEdit0->text().isEmpty()) ||
(keyRadio1->isChecked() && keyLineEdit1->text().isEmpty()) ||
(keyRadio2->isChecked() && keyLineEdit2->text().isEmpty()) ||
(keyRadio3->isChecked() && keyLineEdit3->text().isEmpty())) {
QMessageBox::information(this, "Error", "Please enter a WEP key.", QMessageBox::Ok);
return;
}
}
if (essid->currentText().isEmpty()) {
QMessageBox::information(this, "Error", "Please select/enter an ESSID.", QMessageBox::Ok);
return;
}
if (specifyAp->isChecked() && macEdit->text().isEmpty()) {
QMessageBox::information(this, "Error", "Please enter the MAC address of the Access Point.", QMessageBox::Ok);
return;
}
// Try to save the interfaces settings.
writeOpts();
// Close out the dialog
// FIXME: QDialog::accept();
}
void WLANImp::writeOpts() {
// eh can't really do anything about it other then return. :-D
if(!interfaces->isInterfaceSet()){
QMessageBox::warning(0,"Inface not set","should not happen!!!");
return;
}
bool error = false;
qDebug("setting wlan interface %s", interfaces->getInterfaceName( error ).latin1() );
if (error) QMessageBox::warning(0,"Inface not set","should not happen!!!");
interfaces->setInterfaceOption(QString("wireless_mode"), mode->currentText());
interfaces->setInterfaceOption(QString("wireless_essid"), essid->currentText());
if (specifyAp->isChecked()) {
interfaces->setInterfaceOption(QString("wireless_ap"), macEdit->text());
} else {
interfaces->removeInterfaceOption(QString("wireless_ap"));
}
if (specifyChan->isChecked()) {
interfaces->setInterfaceOption(QString("wireless_channel"), networkChannel->text());
} else {
interfaces->removeInterfaceOption(QString("wireless_channel"));
}
if (wepEnabled->isChecked()) {
QStringList keyList;
if (! keyLineEdit0->text().isNull()) {
keyList += keyLineEdit0->text();
keyList += "[1]";
} //else
if (! keyLineEdit1->text().isNull()) {
keyList += keyLineEdit1->text();
keyList += "[2]";
} //else
if (! keyLineEdit2->text().isNull()) {
keyList += keyLineEdit2->text();
keyList += "[3]";
} //else
if (! keyLineEdit3->text().isNull()) {
keyList += keyLineEdit3->text();
keyList += "[4]";
}
if (acceptNonEnc->isChecked()) {
keyList += "open";
} else {
keyList += "restricted";
}
keyList += "key";
if (keyRadio0->isChecked()) {
keyList += "[1]";
} else if (keyRadio1->isChecked()) {
keyList += "[2]";
} else if (keyRadio2->isChecked()) {
keyList += "[3]";
} else if (keyRadio3->isChecked()) {
keyList += "[4]";
}
interfaces->setInterfaceOption(QString("wireless_key"), keyList.join(QString(" ")));
} else {
interfaces->removeInterfaceOption(QString("wireless_key"));
}
interfaces->removeInterfaceOption(QString("wireless_enc"));
if(!interfaceSetup->saveChanges())
return;
QDialog::accept();
}
+
+/*
+ * Scan for possible wireless networks around...
+ * ... powered by Wellenreiter II technology (C) Michael 'Mickey' Lauer <mickeyl@handhelds.org>
+ */
+
+void WLANImp::rescanNeighbourhood()
+{
+ QString name = interface->getInterfaceName();
+ qDebug( "rescanNeighbourhood via '%s'", (const char*) name );
+
+ OWirelessNetworkInterface* wiface = static_cast<OWirelessNetworkInterface*>( ONetwork::instance()->interface( name ) );
+ assert( wiface );
+
+ // try to guess device type
+ QString devicetype;
+ QFile m( "/proc/modules" );
+ if ( m.open( IO_ReadOnly ) )
+ {
+ QString line;
+ QTextStream modules( &m );
+ while( !modules.atEnd() && !devicetype )
+ {
+ modules >> line;
+ if ( line.contains( "cisco" ) ) devicetype = "cisco";
+ else if ( line.contains( "hostap" ) ) devicetype = "hostap";
+ else if ( line.contains( "prism" ) ) devicetype = "wlan-ng"; /* puke */
+ else if ( line.contains( "orinoco" ) ) devicetype = "orinoco";
+ }
+ }
+ if ( devicetype.isEmpty() )
+ {
+ qWarning( "rescanNeighbourhood(): couldn't guess device type :(" );
+ return;
+ }
+ else
+ {
+ qDebug( "rescanNeighbourhood(): device type seems to be '%s'", (const char*) devicetype );
+ }
+
+ // configure interface to receive 802.11 management frames
+
+ wiface->setUp( true );
+ wiface->setPromiscuousMode( true );
+
+ if ( devicetype == "cisco" ) wiface->setMonitoring( new OCiscoMonitoringInterface( wiface, false ) );
+ else if ( devicetype == "hostap" ) wiface->setMonitoring( new OHostAPMonitoringInterface( wiface, false ) );
+ else if ( devicetype == "wlan-ng" ) wiface->setMonitoring( new OWlanNGMonitoringInterface( wiface, false ) );
+ else if ( devicetype == "orinoco" ) wiface->setMonitoring( new OOrinocoMonitoringInterface( wiface, false ) );
+ else
+ {
+ qDebug( "rescanNeighbourhood(): unsupported device type for monitoring :(" );
+ return;
+ }
+
+ wiface->setMonitorMode( true );
+ if ( !wiface->monitorMode() )
+ {
+ qWarning( "rescanNeighbourhood(): Unable to bring device into monitor mode (%s).", strerror( errno ) );
+ return;
+ }
+
+ // open a packet capturer
+ OPacketCapturer* cap = new OPacketCapturer();
+ cap->open( name );
+ if ( !cap->isOpen() )
+ {
+ qWarning( "rescanNeighbourhood(): Unable to open libpcap (%s).", strerror( errno ) );
+ return;
+ }
+
+ // display splash screen
+ QFrame* splash = new QFrame( this, "splash", false, WStyle_StaysOnTop | WStyle_DialogBorder | WStyle_Customize );
+ splash->setLineWidth( 2 );
+ splash->setFrameStyle( QFrame::Panel | QFrame::Raised );
+ QVBoxLayout* vbox = new QVBoxLayout( splash, 4, 4 );
+ QLabel* lab = new QLabel( "<center><b>Scanning...</b><br>Please Wait...</center>", splash );
+ QProgressBar* pb = new QProgressBar( wiface->channels(), splash );
+ vbox->addWidget( lab );
+ vbox->addWidget( pb );
+ pb->setCenterIndicator( true );
+ pb->setFixedHeight( pb->sizeHint().height() );
+ QWidget* widgetDesktop = qApp->desktop();
+ int dw = widgetDesktop->width();
+ int dh = widgetDesktop->height();
+ int pw = vbox->sizeHint().width();
+ int ph = vbox->sizeHint().height();
+ splash->setGeometry((dw-pw)/2,(dh-ph)/2,pw,ph);
+ splash->show();
+ splash->raise();
+ qApp->processEvents();
+
+ // set capturer to non-blocking mode
+ cap->setBlocking( false );
+
+ for ( int i = 1; i <= wiface->channels(); ++i )
+ {
+ wiface->setChannel( i );
+ pb->setProgress( i );
+ qApp->processEvents();
+ qDebug( "rescanNeighbourhood(): listening on channel %d...", i );
+ OPacket* p = cap->next( 1000 );
+ if ( !p )
+ {
+ qDebug( "rescanNeighbourhood(): nothing received on channel %d", i );
+ }
+ else
+ {
+ qDebug( "rescanNeighbourhood(): TADAA - something came in on channel %d", i );
+ handlePacket( p );
+ }
+ }
+
+ cap->close();
+ wiface->setMonitorMode( false );
+ wiface->setPromiscuousMode( true );
+
+ splash->hide();
+ delete splash;
+
+}
+
+void WLANImp::handlePacket( OPacket* p )
+{
+
+ // check if we received a beacon frame
+ OWaveLanManagementPacket* beacon = static_cast<OWaveLanManagementPacket*>( p->child( "802.11 Management" ) );
+ if ( beacon && beacon->managementType() == "Beacon" )
+ {
+
+ QString type;
+ if ( beacon->canIBSS() )
+ {
+ type = "adhoc";
+ }
+ else if ( beacon->canESS() )
+ {
+ type = "managed";
+ }
+ else
+ {
+ qWarning( "handlePacket(): invalid frame [possibly noise] detected!" );
+ return;
+ }
+
+ OWaveLanManagementSSID* ssid = static_cast<OWaveLanManagementSSID*>( p->child( "802.11 SSID" ) );
+ QString essid = ssid ? ssid->ID() : QString("<unknown>");
+ OWaveLanManagementDS* ds = static_cast<OWaveLanManagementDS*>( p->child( "802.11 DS" ) );
+ int channel = ds ? ds->channel() : -1;
+ OWaveLanPacket* header = static_cast<OWaveLanPacket*>( p->child( "802.11" ) );
+ displayFoundNetwork( type, channel, essid, header->macAddress2() );
+ }
+}
+
+
+void WLANImp::displayFoundNetwork( const QString& mode, int channel, const QString& ssid, const OMacAddress& mac )
+{
+
+ qDebug( "found network: <%s>, chn %d, ssid '%s', mac '%s'", (const char*) mode, channel,
+ (const char*) ssid,
+ (const char*) mac.toString() );
+
+ QListViewItemIterator it( netView );
+ while ( it.current() && it.current()->text( col_ssid ) != ssid ) ++it;
+ if ( !it.current() ) // ssid didn't show up yet
+ {
+ QListViewItem* item = new QListViewItem( netView, mode.left( 1 ).upper(), ssid, QString::number( channel ), mac.toString() );
+ QString name;
+ name.sprintf( "networksettings/%s", (const char*) mode );
+ item->setPixmap( col_mode, Resource::loadPixmap( name ) );
+ qApp->processEvents();
+ }
+
+}
+
+
+void WLANImp::selectNetwork( QListViewItem* item )
+{
+ bool ok;
+ if ( item )
+ {
+ specifyAp->setChecked(true);
+ macEdit->setText( item->text( col_mac ) );
+ specifyChan->setChecked( item->text( col_mode ) == "A" );
+ networkChannel->setValue( item->text( col_chn ).toInt( &ok ) );
+ essid->setEditText( item->text( col_ssid ) );
+ if ( item->text( col_mode ) == "A" )
+ mode->setCurrentItem( 3 );
+ else
+ mode->setCurrentItem( 2 );
+ }
+}
diff --git a/noncore/settings/networksettings/wlan/wlanimp2.h b/noncore/settings/networksettings/wlan/wlanimp2.h
index 992d09a..a777203 100644
--- a/noncore/settings/networksettings/wlan/wlanimp2.h
+++ b/noncore/settings/networksettings/wlan/wlanimp2.h
@@ -1,37 +1,52 @@
#ifndef WLANIMP_H
#define WLANIMP_H
#include "wlan.h"
#include "interfaces.h"
#include <qstringlist.h>
+#include <opie2/onetutils.h>
class InterfaceSetupImp;
class Interface;
class Config;
+class OPacket;
+class QListViewItem;
-class WLANImp : public WLAN {
+const int col_mode= 0;
+const int col_ssid = 1;
+const int col_chn = 2;
+const int col_mac = 3;
+
+class WLANImp : public WLAN {
Q_OBJECT
public:
WLANImp( QWidget* parent = 0, const char* name = 0, Interface *i=0, bool modal = FALSE, WFlags fl = 0 );
~WLANImp();
void setProfile(const QString &profile);
+public slots:
+ void rescanNeighbourhood();
+ void selectNetwork( QListViewItem* );
+
protected:
void accept();
private:
void parseOpts();
void writeOpts();
void parseKeyStr(QString keystr);
-
+
+ void handlePacket( OPacket* );
+ void displayFoundNetwork( const QString& mode, int channel, const QString& ssid, const OMacAddress& mac );
+
InterfaceSetupImp *interfaceSetup;
Interfaces *interfaces;
Interface *interface;
QString currentProfile;
};
#endif
-
+
diff --git a/pics/networksettings/adhoc.png b/pics/networksettings/adhoc.png
new file mode 100644
index 0000000..dcf5ad2
--- a/dev/null
+++ b/pics/networksettings/adhoc.png
Binary files differ
diff --git a/pics/networksettings/managed.png b/pics/networksettings/managed.png
new file mode 100644
index 0000000..4554533
--- a/dev/null
+++ b/pics/networksettings/managed.png
Binary files differ