-rw-r--r-- | libopie2/opienet/onetutils.h | 25 | ||||
-rw-r--r-- | libopie2/opienet/onetwork.cpp | 203 | ||||
-rw-r--r-- | libopie2/opienet/onetwork.h | 8 | ||||
-rw-r--r-- | libopie2/opienet/opienet.pro | 2 | ||||
-rw-r--r-- | libopie2/opienet/ostation.h | 5 |
5 files changed, 212 insertions, 31 deletions
diff --git a/libopie2/opienet/onetutils.h b/libopie2/opienet/onetutils.h index f1d34a0..32f5355 100644 --- a/libopie2/opienet/onetutils.h +++ b/libopie2/opienet/onetutils.h | |||
@@ -1,45 +1,44 @@ | |||
1 | /* | 1 | /* |
2 | This file is part of the Opie Project | 2 | This file is part of the Opie Project |
3 | 3 | (C) 2003-2005 Michael 'Mickey' Lauer <mickey@Vanille.de> | |
4 | (C) 2003 Michael 'Mickey' Lauer <mickey@tm.informatik.uni-frankfurt.de> | ||
5 | =. | 4 | =. |
6 | .=l. | 5 | .=l. |
7 | .>+-= | 6 | .>+-= |
8 | _;:, .> :=|. This program is free software; you can | 7 | _;:, .> :=|. This program is free software; you can |
9 | .> <`_, > . <= redistribute it and/or modify it under | 8 | .> <`_, > . <= redistribute it and/or modify it under |
10 | :`=1 )Y*s>-.-- : the terms of the GNU Library General Public | 9 | :`=1 )Y*s>-.-- : the terms of the GNU Library General Public |
11 | .="- .-=="i, .._ License as published by the Free Software | 10 | .="- .-=="i, .._ License as published by the Free Software |
12 | - . .-<_> .<> Foundation; version 2 of the License. | 11 | - . .-<_> .<> Foundation; version 2 of the License. |
13 | ._= =} : | 12 | ._= =} : |
14 | .%`+i> _;_. | 13 | .%`+i> _;_. |
15 | .i_,=:_. -<s. This program is distributed in the hope that | 14 | .i_,=:_. -<s. This program is distributed in the hope that |
16 | + . -:. = it will be useful, but WITHOUT ANY WARRANTY; | 15 | + . -:. = it will be useful, but WITHOUT ANY WARRANTY; |
17 | : .. .:, . . . without even the implied warranty of | 16 | : .. .:, . . . without even the implied warranty of |
18 | =_ + =;=|` MERCHANTABILITY or FITNESS FOR A | 17 | =_ + =;=|` MERCHANTABILITY or FITNESS FOR A |
19 | _.=:. : :=>`: PARTICULAR PURPOSE. See the GNU | 18 | _.=:. : :=>`: PARTICULAR PURPOSE. See the GNU |
20 | ..}^=.= = ; Library General Public License for more | 19 | ..}^=.= = ; Library General Public License for more |
21 | ++= -. .` .: details. | 20 | ++= -. .` .: details. |
22 | : = ...= . :.=- | 21 | : = ...= . :.=- |
23 | -. .:....=;==+<; You should have received a copy of the GNU | 22 | -. .:....=;==+<; You should have received a copy of the GNU |
24 | -_. . . )=. = Library General Public License along with | 23 | -_. . . )=. = Library General Public License along with |
25 | -- :-=` this library; see the file COPYING.LIB. | 24 | -- :-=` this library; see the file COPYING.LIB. |
26 | If not, write to the Free Software Foundation, | 25 | If not, write to the Free Software Foundation, |
27 | Inc., 59 Temple Place - Suite 330, | 26 | Inc., 59 Temple Place - Suite 330, |
28 | Boston, MA 02111-1307, USA. | 27 | Boston, MA 02111-1307, USA. |
29 | 28 | ||
30 | */ | 29 | */ |
31 | 30 | ||
32 | #ifndef ONETUTILS_H | 31 | #ifndef ONETUTILS_H |
33 | #define ONETUTILS_H | 32 | #define ONETUTILS_H |
34 | 33 | ||
35 | #include <qdict.h> | 34 | #include <qdict.h> |
36 | #include <qmap.h> | 35 | #include <qmap.h> |
37 | #include <qstring.h> | 36 | #include <qstring.h> |
38 | #include <qhostaddress.h> | 37 | #include <qhostaddress.h> |
39 | #include <qobject.h> | 38 | #include <qobject.h> |
40 | 39 | ||
41 | #include <sys/types.h> | 40 | #include <sys/types.h> |
42 | 41 | ||
43 | struct ifreq; | 42 | struct ifreq; |
44 | 43 | ||
45 | namespace Opie { | 44 | namespace Opie { |
@@ -121,71 +120,91 @@ class OPrivateIOCTL : public QObject | |||
121 | 120 | ||
122 | private: | 121 | private: |
123 | u_int32_t _ioctl; | 122 | u_int32_t _ioctl; |
124 | u_int16_t _getargs; | 123 | u_int16_t _getargs; |
125 | u_int16_t _setargs; | 124 | u_int16_t _setargs; |
126 | 125 | ||
127 | class Private; | 126 | class Private; |
128 | Private *d; | 127 | Private *d; |
129 | }; | 128 | }; |
130 | 129 | ||
131 | /*====================================================================================== | 130 | /*====================================================================================== |
132 | * Miscellaneous | 131 | * Miscellaneous |
133 | *======================================================================================*/ | 132 | *======================================================================================*/ |
134 | 133 | ||
135 | namespace Internal { | 134 | namespace Internal { |
136 | void dumpBytes( const unsigned char* data, int num ); | 135 | void dumpBytes( const unsigned char* data, int num ); |
137 | QString modeToString( int ); | 136 | QString modeToString( int ); |
138 | int stringToMode( const QString& ); | 137 | int stringToMode( const QString& ); |
139 | } | 138 | } |
140 | } | 139 | } |
141 | } | 140 | } |
142 | 141 | ||
143 | #define IW_PRIV_TYPE_MASK 0x7000 | 142 | #define IW_PRIV_TYPE_MASK 0x7000 |
144 | #define IW_PRIV_TYPE_NONE 0x0000 | 143 | #define IW_PRIV_TYPE_NONE 0x0000 |
145 | #define IW_PRIV_TYPE_BYTE 0x1000 | 144 | #define IW_PRIV_TYPE_BYTE 0x1000 |
146 | #define IW_PRIV_TYPE_CHAR 0x2000 | 145 | #define IW_PRIV_TYPE_CHAR 0x2000 |
147 | #define IW_PRIV_TYPE_INT 0x4000 | 146 | #define IW_PRIV_TYPE_INT 0x4000 |
148 | #define IW_PRIV_TYPE_FLOAT 0x5000 | 147 | #define IW_PRIV_TYPE_FLOAT 0x5000 |
149 | #define IW_PRIV_TYPE_ADDR 0x6000 | 148 | #define IW_PRIV_TYPE_ADDR 0x6000 |
150 | #define IW_PRIV_SIZE_FIXED 0x0800 | 149 | #define IW_PRIV_SIZE_FIXED 0x0800 |
151 | #define IW_PRIV_SIZE_MASK 0x07FF | 150 | #define IW_PRIV_SIZE_MASK 0x07FF |
152 | 151 | ||
152 | #define IW_HEADER_TYPE_NULL 0 /* Not available */ | ||
153 | #define IW_HEADER_TYPE_CHAR 2 /* char [IFNAMSIZ] */ | ||
154 | #define IW_HEADER_TYPE_UINT 4 /* __u32 */ | ||
155 | #define IW_HEADER_TYPE_FREQ 5 /* struct iw_freq */ | ||
156 | #define IW_HEADER_TYPE_ADDR 6 /* struct sockaddr */ | ||
157 | #define IW_HEADER_TYPE_POINT 8 /* struct iw_point */ | ||
158 | #define IW_HEADER_TYPE_PARAM 9 /* struct iw_param */ | ||
159 | #define IW_HEADER_TYPE_QUAL 10 /* struct iw_quality */ | ||
160 | |||
161 | #define IW_EV_POINT_OFF (((char *) &(((struct iw_point *) NULL)->length)) - \ | ||
162 | (char *) NULL) | ||
163 | |||
153 | #ifndef ARPHRD_IEEE80211 | 164 | #ifndef ARPHRD_IEEE80211 |
154 | #define ARPHRD_IEEE80211 801 | 165 | #define ARPHRD_IEEE80211 801 |
155 | #endif | 166 | #endif |
156 | #ifndef ARPHRD_IEEE80211_PRISM | 167 | #ifndef ARPHRD_IEEE80211_PRISM |
157 | #define ARPHRD_IEEE80211_PRISM 802 | 168 | #define ARPHRD_IEEE80211_PRISM 802 |
158 | #endif | 169 | #endif |
159 | 170 | ||
171 | /* Wireless Extension Scanning Stuff */ | ||
172 | struct iw_stream_descr | ||
173 | { | ||
174 | char * end; /* End of the stream */ | ||
175 | char * current; /* Current event in stream of events */ | ||
176 | char * value; /* Current value in event */ | ||
177 | }; | ||
178 | |||
160 | 179 | ||
161 | /* Network to host order macros */ | 180 | /* Network to host order macros */ |
162 | 181 | ||
163 | #ifdef LBL_ALIGN | 182 | #ifdef LBL_ALIGN |
164 | #define EXTRACT_16BITS(p) \ | 183 | #define EXTRACT_16BITS(p) \ |
165 | ((u_int16_t)((u_int16_t)*((const u_int8_t *)(p) + 0) << 8 | \ | 184 | ((u_int16_t)((u_int16_t)*((const u_int8_t *)(p) + 0) << 8 | \ |
166 | (u_int16_t)*((const u_int8_t *)(p) + 1))) | 185 | (u_int16_t)*((const u_int8_t *)(p) + 1))) |
167 | #define EXTRACT_32BITS(p) \ | 186 | #define EXTRACT_32BITS(p) \ |
168 | ((u_int32_t)((u_int32_t)*((const u_int8_t *)(p) + 0) << 24 | \ | 187 | ((u_int32_t)((u_int32_t)*((const u_int8_t *)(p) + 0) << 24 | \ |
169 | (u_int32_t)*((const u_int8_t *)(p) + 1) << 16 | \ | 188 | (u_int32_t)*((const u_int8_t *)(p) + 1) << 16 | \ |
170 | (u_int32_t)*((const u_int8_t *)(p) + 2) << 8 | \ | 189 | (u_int32_t)*((const u_int8_t *)(p) + 2) << 8 | \ |
171 | (u_int32_t)*((const u_int8_t *)(p) + 3))) | 190 | (u_int32_t)*((const u_int8_t *)(p) + 3))) |
172 | #else | 191 | #else |
173 | #define EXTRACT_16BITS(p) \ | 192 | #define EXTRACT_16BITS(p) \ |
174 | ((u_int16_t)ntohs(*(const u_int16_t *)(p))) | 193 | ((u_int16_t)ntohs(*(const u_int16_t *)(p))) |
175 | #define EXTRACT_32BITS(p) \ | 194 | #define EXTRACT_32BITS(p) \ |
176 | ((u_int32_t)ntohl(*(const u_int32_t *)(p))) | 195 | ((u_int32_t)ntohl(*(const u_int32_t *)(p))) |
177 | #endif | 196 | #endif |
178 | 197 | ||
179 | #define EXTRACT_24BITS(p) \ | 198 | #define EXTRACT_24BITS(p) \ |
180 | ((u_int32_t)((u_int32_t)*((const u_int8_t *)(p) + 0) << 16 | \ | 199 | ((u_int32_t)((u_int32_t)*((const u_int8_t *)(p) + 0) << 16 | \ |
181 | (u_int32_t)*((const u_int8_t *)(p) + 1) << 8 | \ | 200 | (u_int32_t)*((const u_int8_t *)(p) + 1) << 8 | \ |
182 | (u_int32_t)*((const u_int8_t *)(p) + 2))) | 201 | (u_int32_t)*((const u_int8_t *)(p) + 2))) |
183 | 202 | ||
184 | /* Little endian protocol host order macros */ | 203 | /* Little endian protocol host order macros */ |
185 | #define EXTRACT_LE_8BITS(p) (*(p)) | 204 | #define EXTRACT_LE_8BITS(p) (*(p)) |
186 | #define EXTRACT_LE_16BITS(p) \ | 205 | #define EXTRACT_LE_16BITS(p) \ |
187 | ((u_int16_t)((u_int16_t)*((const u_int8_t *)(p) + 1) << 8 | \ | 206 | ((u_int16_t)((u_int16_t)*((const u_int8_t *)(p) + 1) << 8 | \ |
188 | (u_int16_t)*((const u_int8_t *)(p) + 0))) | 207 | (u_int16_t)*((const u_int8_t *)(p) + 0))) |
189 | #define EXTRACT_LE_32BITS(p) \ | 208 | #define EXTRACT_LE_32BITS(p) \ |
190 | ((u_int32_t)((u_int32_t)*((const u_int8_t *)(p) + 3) << 24 | \ | 209 | ((u_int32_t)((u_int32_t)*((const u_int8_t *)(p) + 3) << 24 | \ |
191 | (u_int32_t)*((const u_int8_t *)(p) + 2) << 16 | \ | 210 | (u_int32_t)*((const u_int8_t *)(p) + 2) << 16 | \ |
diff --git a/libopie2/opienet/onetwork.cpp b/libopie2/opienet/onetwork.cpp index ae1865d..546be9e 100644 --- a/libopie2/opienet/onetwork.cpp +++ b/libopie2/opienet/onetwork.cpp | |||
@@ -1,93 +1,92 @@ | |||
1 | /* | 1 | /* |
2 | This file is part of the Opie Project | 2 | This file is part of the Opie Project |
3 | Copyright (C) 2003-2004 by Michael 'Mickey' Lauer | 3 | Copyright (C) 2003-2005 by Michael 'Mickey' Lauer <mickey@Vanille.de> |
4 | =. <mickey@Vanille.de> | 4 | =. |
5 | .=l. | 5 | .=l. |
6 | .>+-= | 6 | .>+-= |
7 | _;:, .> :=|. This program is free software; you can | 7 | _;:, .> :=|. This program is free software; you can |
8 | .> <`_, > . <= redistribute it and/or modify it under | 8 | .> <`_, > . <= redistribute it and/or modify it under |
9 | :`=1 )Y*s>-.-- : the terms of the GNU Library General Public | 9 | :`=1 )Y*s>-.-- : the terms of the GNU Library General Public |
10 | .="- .-=="i, .._ License as published by the Free Software | 10 | .="- .-=="i, .._ License as published by the Free Software |
11 | - . .-<_> .<> Foundation; version 2 of the License. | 11 | - . .-<_> .<> Foundation; version 2 of the License. |
12 | ._= =} : | 12 | ._= =} : |
13 | .%`+i> _;_. | 13 | .%`+i> _;_. |
14 | .i_,=:_. -<s. This program is distributed in the hope that | 14 | .i_,=:_. -<s. This program is distributed in the hope that |
15 | + . -:. = it will be useful, but WITHOUT ANY WARRANTY; | 15 | + . -:. = it will be useful, but WITHOUT ANY WARRANTY; |
16 | : .. .:, . . . without even the implied warranty of | 16 | : .. .:, . . . without even the implied warranty of |
17 | =_ + =;=|` MERCHANTABILITY or FITNESS FOR A | 17 | =_ + =;=|` MERCHANTABILITY or FITNESS FOR A |
18 | _.=:. : :=>`: PARTICULAR PURPOSE. See the GNU | 18 | _.=:. : :=>`: PARTICULAR PURPOSE. See the GNU |
19 | ..}^=.= = ; Library General Public License for more | 19 | ..}^=.= = ; Library General Public License for more |
20 | ++= -. .` .: details. | 20 | ++= -. .` .: details. |
21 | : = ...= . :.=- | 21 | : = ...= . :.=- |
22 | -. .:....=;==+<; You should have received a copy of the GNU | 22 | -. .:....=;==+<; You should have received a copy of the GNU |
23 | -_. . . )=. = Library General Public License along with | 23 | -_. . . )=. = Library General Public License along with |
24 | -- :-=` this library; see the file COPYING.LIB. | 24 | -- :-=` this library; see the file COPYING.LIB. |
25 | If not, write to the Free Software Foundation, | 25 | If not, write to the Free Software Foundation, |
26 | Inc., 59 Temple Place - Suite 330, | 26 | Inc., 59 Temple Place - Suite 330, |
27 | Boston, MA 02111-1307, USA. | 27 | Boston, MA 02111-1307, USA. |
28 | 28 | ||
29 | */ | 29 | */ |
30 | 30 | ||
31 | /* OPIE */ | 31 | /* OPIE */ |
32 | 32 | ||
33 | #include <opie2/onetwork.h> | 33 | #include <opie2/onetwork.h> |
34 | #include <opie2/ostation.h> | 34 | #include <opie2/ostation.h> |
35 | #include <opie2/odebug.h> | 35 | #include <opie2/odebug.h> |
36 | 36 | ||
37 | /* QT */ | 37 | /* QT */ |
38 | 38 | ||
39 | #include <qfile.h> | 39 | #include <qfile.h> |
40 | #include <qtextstream.h> | 40 | #include <qtextstream.h> |
41 | 41 | ||
42 | /* UNIX */ | 42 | /* UNIX */ |
43 | 43 | ||
44 | #include <assert.h> | 44 | #include <assert.h> |
45 | #include <arpa/inet.h> | 45 | #include <arpa/inet.h> |
46 | #include <errno.h> | 46 | #include <errno.h> |
47 | #include <string.h> | 47 | #include <string.h> |
48 | #include <stdlib.h> | 48 | #include <stdlib.h> |
49 | #include <math.h> | 49 | #include <math.h> |
50 | #include <sys/ioctl.h> | 50 | #include <sys/ioctl.h> |
51 | #include <sys/socket.h> | 51 | #include <sys/socket.h> |
52 | #include <sys/types.h> | 52 | #include <sys/types.h> |
53 | #include <unistd.h> | 53 | #include <unistd.h> |
54 | #include <linux/sockios.h> | 54 | #include <linux/sockios.h> |
55 | #include <net/if_arp.h> | 55 | #include <net/if_arp.h> |
56 | #include <stdarg.h> | 56 | #include <stdarg.h> |
57 | 57 | ||
58 | #ifndef NODEBUG | 58 | #ifndef NODEBUG |
59 | #include <opie2/odebugmapper.h> | 59 | #include <opie2/odebugmapper.h> |
60 | 60 | ||
61 | |||
62 | using namespace Opie::Core; | 61 | using namespace Opie::Core; |
63 | using namespace Opie::Net::Internal; | 62 | using namespace Opie::Net::Internal; |
64 | DebugMapper* debugmapper = new DebugMapper(); | 63 | DebugMapper* debugmapper = new DebugMapper(); |
65 | #endif | 64 | #endif |
66 | 65 | ||
67 | /*====================================================================================== | 66 | /*====================================================================================== |
68 | * ONetwork | 67 | * ONetwork |
69 | *======================================================================================*/ | 68 | *======================================================================================*/ |
70 | 69 | ||
71 | namespace Opie { | 70 | namespace Opie { |
72 | namespace Net { | 71 | namespace Net { |
73 | ONetwork* ONetwork::_instance = 0; | 72 | ONetwork* ONetwork::_instance = 0; |
74 | 73 | ||
75 | ONetwork::ONetwork() | 74 | ONetwork::ONetwork() |
76 | { | 75 | { |
77 | odebug << "ONetwork::ONetwork()" << oendl; | 76 | odebug << "ONetwork::ONetwork()" << oendl; |
78 | odebug << "ONetwork: This code has been compiled against Wireless Extensions V" << WIRELESS_EXT << oendl; | 77 | odebug << "ONetwork: This code has been compiled against Wireless Extensions V" << WIRELESS_EXT << oendl; |
79 | synchronize(); | 78 | synchronize(); |
80 | } | 79 | } |
81 | 80 | ||
82 | void ONetwork::synchronize() | 81 | void ONetwork::synchronize() |
83 | { | 82 | { |
84 | // gather available interfaces by inspecting /proc/net/dev | 83 | // gather available interfaces by inspecting /proc/net/dev |
85 | //FIXME: we could use SIOCGIFCONF here, but we aren't interested in virtual (e.g. eth0:0) devices | 84 | //FIXME: we could use SIOCGIFCONF here, but we aren't interested in virtual (e.g. eth0:0) devices |
86 | //FIXME: Use SIOCGIFCONF anway, because we can disable listing of aliased devices | 85 | //FIXME: Use SIOCGIFCONF anway, because we can disable listing of aliased devices |
87 | //FIXME: Best is use SIOCGIFCONF and if this doesn't work (result=-1), then fallback to parsing /proc/net/dev | 86 | //FIXME: Best is use SIOCGIFCONF and if this doesn't work (result=-1), then fallback to parsing /proc/net/dev |
88 | 87 | ||
89 | _interfaces.clear(); | 88 | _interfaces.clear(); |
90 | QString str; | 89 | QString str; |
91 | QFile f( "/proc/net/dev" ); | 90 | QFile f( "/proc/net/dev" ); |
92 | bool hasFile = f.open( IO_ReadOnly ); | 91 | bool hasFile = f.open( IO_ReadOnly ); |
93 | if ( !hasFile ) | 92 | if ( !hasFile ) |
@@ -836,193 +835,355 @@ void OWirelessNetworkInterface::setPrivate( const QString& call, int numargs, .. | |||
836 | 835 | ||
837 | void OWirelessNetworkInterface::getPrivate( const QString& ) | 836 | void OWirelessNetworkInterface::getPrivate( const QString& ) |
838 | { | 837 | { |
839 | oerr << "OWirelessNetworkInterface::getPrivate() is not implemented yet." << oendl; | 838 | oerr << "OWirelessNetworkInterface::getPrivate() is not implemented yet." << oendl; |
840 | } | 839 | } |
841 | 840 | ||
842 | 841 | ||
843 | bool OWirelessNetworkInterface::hasPrivate( const QString& call ) | 842 | bool OWirelessNetworkInterface::hasPrivate( const QString& call ) |
844 | { | 843 | { |
845 | return child( call.local8Bit() ); | 844 | return child( call.local8Bit() ); |
846 | } | 845 | } |
847 | 846 | ||
848 | 847 | ||
849 | QString OWirelessNetworkInterface::SSID() const | 848 | QString OWirelessNetworkInterface::SSID() const |
850 | { | 849 | { |
851 | char str[IW_ESSID_MAX_SIZE]; | 850 | char str[IW_ESSID_MAX_SIZE]; |
852 | _iwr.u.essid.pointer = &str[0]; | 851 | _iwr.u.essid.pointer = &str[0]; |
853 | _iwr.u.essid.length = IW_ESSID_MAX_SIZE; | 852 | _iwr.u.essid.length = IW_ESSID_MAX_SIZE; |
854 | if ( !wioctl( SIOCGIWESSID ) ) | 853 | if ( !wioctl( SIOCGIWESSID ) ) |
855 | { | 854 | { |
856 | return "<unknown>"; | 855 | return "<unknown>"; |
857 | } | 856 | } |
858 | else | 857 | else |
859 | { | 858 | { |
860 | return str; | 859 | return str; |
861 | } | 860 | } |
862 | } | 861 | } |
863 | 862 | ||
864 | 863 | ||
865 | void OWirelessNetworkInterface::setSSID( const QString& ssid ) | 864 | void OWirelessNetworkInterface::setSSID( const QString& ssid ) |
866 | { | 865 | { |
867 | _iwr.u.essid.pointer = const_cast<char*>( (const char*) ssid ); | 866 | _iwr.u.essid.pointer = const_cast<char*>( (const char*) ssid ); |
868 | _iwr.u.essid.length = ssid.length(); | 867 | _iwr.u.essid.length = ssid.length()+1; // zero byte |
869 | wioctl( SIOCSIWESSID ); | 868 | wioctl( SIOCSIWESSID ); |
870 | } | 869 | } |
871 | 870 | ||
872 | 871 | ||
873 | OStationList* OWirelessNetworkInterface::scanNetwork() | 872 | OStationList* OWirelessNetworkInterface::scanNetwork() |
874 | { | 873 | { |
875 | _iwr.u.param.flags = IW_SCAN_DEFAULT; | 874 | _iwr.u.param.flags = IW_SCAN_DEFAULT; |
876 | _iwr.u.param.value = 0; | 875 | _iwr.u.param.value = 0; |
877 | if ( !wioctl( SIOCSIWSCAN ) ) | 876 | if ( !wioctl( SIOCSIWSCAN ) ) |
878 | { | 877 | { |
879 | return 0; | 878 | return 0; |
880 | } | 879 | } |
881 | 880 | ||
882 | OStationList* stations = new OStationList(); | 881 | OStationList* stations = new OStationList(); |
883 | 882 | ||
884 | int timeout = 1000000; | 883 | int timeout = 10000000; |
885 | 884 | ||
886 | odebug << "ONetworkInterface::scanNetwork() - scan started." << oendl; | 885 | odebug << "ONetworkInterface::scanNetwork() - scan started." << oendl; |
887 | 886 | ||
888 | bool results = false; | 887 | bool results = false; |
889 | struct timeval tv; | 888 | struct timeval tv; |
890 | tv.tv_sec = 0; | 889 | tv.tv_sec = 0; |
891 | tv.tv_usec = 250000; // initial timeout ~ 250ms | 890 | tv.tv_usec = 250000; // initial timeout ~ 250ms |
892 | char buffer[IW_SCAN_MAX_DATA]; | 891 | char buffer[IW_SCAN_MAX_DATA]; |
893 | 892 | ||
894 | while ( !results && timeout > 0 ) | 893 | while ( !results && timeout > 0 ) |
895 | { | 894 | { |
896 | timeout -= tv.tv_usec; | 895 | timeout -= tv.tv_usec; |
897 | select( 0, 0, 0, 0, &tv ); | 896 | select( 0, 0, 0, 0, &tv ); |
898 | 897 | ||
899 | _iwr.u.data.pointer = &buffer[0]; | 898 | _iwr.u.data.pointer = &buffer[0]; |
900 | _iwr.u.data.flags = 0; | 899 | _iwr.u.data.flags = 0; |
901 | _iwr.u.data.length = sizeof buffer; | 900 | _iwr.u.data.length = sizeof buffer; |
902 | if ( wioctl( SIOCGIWSCAN ) ) | 901 | if ( wioctl( SIOCGIWSCAN ) ) |
903 | { | 902 | { |
904 | results = true; | 903 | results = true; |
905 | continue; | 904 | continue; |
906 | } | 905 | } |
907 | else if ( errno == EAGAIN) | 906 | else if ( errno == EAGAIN) |
908 | { | 907 | { |
909 | odebug << "ONetworkInterface::scanNetwork() - scan in progress..." << oendl; | 908 | odebug << "ONetworkInterface::scanNetwork() - scan in progress..." << oendl; |
910 | #if 0 | 909 | #if 0 |
911 | if ( qApp ) | 910 | if ( qApp ) |
912 | { | 911 | { |
913 | qApp->processEvents( 100 ); | 912 | qApp->processEvents( 100 ); |
914 | continue; | 913 | continue; |
915 | } | 914 | } |
916 | #endif | 915 | #endif |
917 | tv.tv_sec = 0; | 916 | tv.tv_sec = 0; |
918 | tv.tv_usec = 100000; | 917 | tv.tv_usec = 100000; |
919 | continue; | 918 | continue; |
920 | } | 919 | } |
921 | } | 920 | } |
922 | 921 | ||
923 | odebug << "ONetworkInterface::scanNetwork() - scan finished." << oendl; | 922 | odebug << "ONetworkInterface::scanNetwork() - scan finished." << oendl; |
924 | 923 | ||
925 | if ( results ) | 924 | if ( results ) |
926 | { | 925 | { |
927 | odebug << " - result length = " << _iwr.u.data.length << oendl; | 926 | odebug << " - result length = " << _iwr.u.data.length << oendl; |
928 | if ( !_iwr.u.data.length ) | 927 | if ( !_iwr.u.data.length ) |
929 | { | 928 | { |
930 | odebug << " - no results (empty neighbourhood)" << oendl; | 929 | odebug << " - no results (empty neighbourhood)" << oendl; |
931 | return stations; | 930 | return stations; |
932 | } | 931 | } |
933 | 932 | ||
934 | odebug << " - results are in!" << oendl; | 933 | odebug << " - results are in!" << oendl; |
935 | dumpBytes( (const unsigned char*) &buffer[0], _iwr.u.data.length ); | 934 | dumpBytes( (const unsigned char*) &buffer[0], _iwr.u.data.length ); |
936 | 935 | ||
937 | // parse results | 936 | // parse results |
937 | struct iw_event iwe; | ||
938 | struct iw_stream_descr stream; | ||
939 | unsigned int cmd_index, event_type, event_len; | ||
940 | char *pointer; | ||
941 | |||
942 | const char standard_ioctl_hdr[] = { | ||
943 | IW_HEADER_TYPE_NULL, /* SIOCSIWCOMMIT */ | ||
944 | IW_HEADER_TYPE_CHAR, /* SIOCGIWNAME */ | ||
945 | IW_HEADER_TYPE_PARAM, /* SIOCSIWNWID */ | ||
946 | IW_HEADER_TYPE_PARAM, /* SIOCGIWNWID */ | ||
947 | IW_HEADER_TYPE_FREQ, /* SIOCSIWFREQ */ | ||
948 | IW_HEADER_TYPE_FREQ, /* SIOCGIWFREQ */ | ||
949 | IW_HEADER_TYPE_UINT, /* SIOCSIWMODE */ | ||
950 | IW_HEADER_TYPE_UINT, /* SIOCGIWMODE */ | ||
951 | IW_HEADER_TYPE_PARAM, /* SIOCSIWSENS */ | ||
952 | IW_HEADER_TYPE_PARAM, /* SIOCGIWSENS */ | ||
953 | IW_HEADER_TYPE_NULL, /* SIOCSIWRANGE */ | ||
954 | IW_HEADER_TYPE_POINT, /* SIOCGIWRANGE */ | ||
955 | IW_HEADER_TYPE_NULL, /* SIOCSIWPRIV */ | ||
956 | IW_HEADER_TYPE_POINT, /* SIOCGIWPRIV */ | ||
957 | IW_HEADER_TYPE_NULL, /* SIOCSIWSTATS */ | ||
958 | IW_HEADER_TYPE_POINT, /* SIOCGIWSTATS */ | ||
959 | IW_HEADER_TYPE_POINT, /* SIOCSIWSPY */ | ||
960 | IW_HEADER_TYPE_POINT, /* SIOCGIWSPY */ | ||
961 | IW_HEADER_TYPE_POINT, /* SIOCSIWTHRSPY */ | ||
962 | IW_HEADER_TYPE_POINT, /* SIOCGIWTHRSPY */ | ||
963 | IW_HEADER_TYPE_ADDR, /* SIOCSIWAP */ | ||
964 | IW_HEADER_TYPE_ADDR, /* SIOCGIWAP */ | ||
965 | IW_HEADER_TYPE_NULL, /* -- hole -- */ | ||
966 | IW_HEADER_TYPE_POINT, /* SIOCGIWAPLIST */ | ||
967 | IW_HEADER_TYPE_PARAM, /* SIOCSIWSCAN */ | ||
968 | IW_HEADER_TYPE_POINT, /* SIOCGIWSCAN */ | ||
969 | IW_HEADER_TYPE_POINT, /* SIOCSIWESSID */ | ||
970 | IW_HEADER_TYPE_POINT, /* SIOCGIWESSID */ | ||
971 | IW_HEADER_TYPE_POINT, /* SIOCSIWNICKN */ | ||
972 | IW_HEADER_TYPE_POINT, /* SIOCGIWNICKN */ | ||
973 | IW_HEADER_TYPE_NULL, /* -- hole -- */ | ||
974 | IW_HEADER_TYPE_NULL, /* -- hole -- */ | ||
975 | IW_HEADER_TYPE_PARAM, /* SIOCSIWRATE */ | ||
976 | IW_HEADER_TYPE_PARAM, /* SIOCGIWRATE */ | ||
977 | IW_HEADER_TYPE_PARAM, /* SIOCSIWRTS */ | ||
978 | IW_HEADER_TYPE_PARAM, /* SIOCGIWRTS */ | ||
979 | IW_HEADER_TYPE_PARAM, /* SIOCSIWFRAG */ | ||
980 | IW_HEADER_TYPE_PARAM, /* SIOCGIWFRAG */ | ||
981 | IW_HEADER_TYPE_PARAM, /* SIOCSIWTXPOW */ | ||
982 | IW_HEADER_TYPE_PARAM, /* SIOCGIWTXPOW */ | ||
983 | IW_HEADER_TYPE_PARAM, /* SIOCSIWRETRY */ | ||
984 | IW_HEADER_TYPE_PARAM, /* SIOCGIWRETRY */ | ||
985 | IW_HEADER_TYPE_POINT, /* SIOCSIWENCODE */ | ||
986 | IW_HEADER_TYPE_POINT, /* SIOCGIWENCODE */ | ||
987 | IW_HEADER_TYPE_PARAM, /* SIOCSIWPOWER */ | ||
988 | IW_HEADER_TYPE_PARAM, /* SIOCGIWPOWER */ | ||
989 | }; | ||
990 | |||
991 | const char standard_event_hdr[] = { | ||
992 | IW_HEADER_TYPE_ADDR, /* IWEVTXDROP */ | ||
993 | IW_HEADER_TYPE_QUAL, /* IWEVQUAL */ | ||
994 | IW_HEADER_TYPE_POINT, /* IWEVCUSTOM */ | ||
995 | IW_HEADER_TYPE_ADDR, /* IWEVREGISTERED */ | ||
996 | IW_HEADER_TYPE_ADDR, /* IWEVEXPIRED */ | ||
997 | IW_HEADER_TYPE_POINT, /* IWEVGENIE */ | ||
998 | IW_HEADER_TYPE_POINT, /* IWEVMICHAELMICFAILURE */ | ||
999 | IW_HEADER_TYPE_POINT, /* IWEVASSOCREQIE */ | ||
1000 | IW_HEADER_TYPE_POINT, /* IWEVASSOCRESPIE */ | ||
1001 | IW_HEADER_TYPE_POINT, /* IWEVPMKIDCAND */ | ||
1002 | }; | ||
1003 | |||
1004 | |||
1005 | const int event_type_size[] = { | ||
1006 | IW_EV_LCP_LEN, /* IW_HEADER_TYPE_NULL */ | ||
1007 | 0, | ||
1008 | IW_EV_CHAR_LEN, /* IW_HEADER_TYPE_CHAR */ | ||
1009 | 0, | ||
1010 | IW_EV_UINT_LEN, /* IW_HEADER_TYPE_UINT */ | ||
1011 | IW_EV_FREQ_LEN, /* IW_HEADER_TYPE_FREQ */ | ||
1012 | IW_EV_ADDR_LEN, /* IW_HEADER_TYPE_ADDR */ | ||
1013 | 0, | ||
1014 | IW_EV_POINT_LEN, /* Without variable payload */ | ||
1015 | IW_EV_PARAM_LEN, /* IW_HEADER_TYPE_PARAM */ | ||
1016 | IW_EV_QUAL_LEN, /* IW_HEADER_TYPE_QUAL */ | ||
1017 | }; | ||
1018 | |||
1019 | |||
1020 | //Initialize the stream | ||
1021 | memset( &stream, 0, sizeof(struct iw_stream_descr) ); | ||
1022 | stream.current = buffer; | ||
1023 | stream.end = buffer + _iwr.u.data.length; | ||
1024 | |||
1025 | do | ||
1026 | { | ||
1027 | if ((stream.current + IW_EV_LCP_LEN) > stream.end) | ||
1028 | break; | ||
1029 | memcpy((char *) &iwe, stream.current, IW_EV_LCP_LEN); | ||
938 | 1030 | ||
939 | int offset = 0; | 1031 | if (iwe.len <= IW_EV_LCP_LEN) //If yes, it is an invalid event |
940 | struct iw_event* we = (struct iw_event*) &buffer[0]; | 1032 | break; |
1033 | if (iwe.cmd <= SIOCIWLAST) { | ||
1034 | cmd_index = iwe.cmd - SIOCIWFIRST; | ||
941 | 1035 | ||
942 | while ( offset < _iwr.u.data.length ) | 1036 | if(cmd_index < sizeof(standard_ioctl_hdr)) |
943 | { | 1037 | event_type = standard_ioctl_hdr[cmd_index]; |
944 | //const char* cmd = *(*_ioctlmap)[we->cmd]; | 1038 | } |
945 | //if ( !cmd ) cmd = "<unknown>"; | 1039 | else { |
1040 | cmd_index = iwe.cmd - IWEVFIRST; | ||
1041 | |||
1042 | if(cmd_index < sizeof(standard_event_hdr)) | ||
1043 | event_type = standard_event_hdr[cmd_index]; | ||
1044 | } | ||
1045 | |||
1046 | /* Unknown events -> event_type=0 => IW_EV_LCP_LEN */ | ||
1047 | event_len = event_type_size[event_type]; | ||
1048 | |||
1049 | /* Fixup for later version of WE */ | ||
1050 | if((_range.we_version_compiled > 18) && (event_type == IW_HEADER_TYPE_POINT)) | ||
1051 | event_len -= IW_EV_POINT_OFF; | ||
1052 | |||
1053 | /* Check if we know about this event */ | ||
1054 | if(event_len <= IW_EV_LCP_LEN) { | ||
1055 | /* Skip to next event */ | ||
1056 | stream.current += iwe.len; | ||
1057 | continue; | ||
1058 | } | ||
1059 | |||
1060 | event_len -= IW_EV_LCP_LEN; | ||
1061 | |||
1062 | /* Set pointer on data */ | ||
1063 | if(stream.value != NULL) | ||
1064 | pointer = stream.value; /* Next value in event */ | ||
1065 | else | ||
1066 | pointer = stream.current + IW_EV_LCP_LEN; /* First value in event */ | ||
1067 | |||
1068 | if((pointer + event_len) > stream.end) { | ||
1069 | /* Go to next event */ | ||
1070 | stream.current += iwe.len; | ||
1071 | break; | ||
1072 | } | ||
1073 | |||
1074 | /* Fixup for later version of WE */ | ||
1075 | if((_range.we_version_compiled > 18) && (event_type == IW_HEADER_TYPE_POINT)) | ||
1076 | memcpy((char *) &iwe + IW_EV_LCP_LEN + IW_EV_POINT_OFF, pointer, event_len); | ||
1077 | else | ||
1078 | memcpy((char *) &iwe + IW_EV_LCP_LEN, pointer, event_len); | ||
1079 | |||
1080 | /* Skip event in the stream */ | ||
1081 | pointer += event_len; | ||
1082 | |||
1083 | /* Special processing for iw_point events */ | ||
1084 | if(event_type == IW_HEADER_TYPE_POINT) { | ||
1085 | /* Check the length of the payload */ | ||
1086 | |||
1087 | if((iwe.len - (event_len + IW_EV_LCP_LEN)) > 0) | ||
1088 | /* Set pointer on variable part (warning : non aligned) */ | ||
1089 | iwe.u.data.pointer = pointer; | ||
1090 | else | ||
1091 | /* No data */ | ||
1092 | iwe.u.data.pointer = NULL; | ||
1093 | /* Go to next event */ | ||
1094 | stream.current += iwe.len; | ||
1095 | } | ||
1096 | |||
1097 | else { | ||
1098 | /* Is there more value in the event ? */ | ||
1099 | if((pointer + event_len) <= (stream.current + iwe.len)) | ||
1100 | /* Go to next value */ | ||
1101 | stream.value = pointer; | ||
1102 | else { | ||
1103 | /* Go to next event */ | ||
1104 | stream.value = NULL; | ||
1105 | stream.current += iwe.len; | ||
1106 | } | ||
1107 | } | ||
1108 | |||
1109 | struct iw_event *we = &iwe; | ||
1110 | //------ | ||
946 | odebug << " - reading next event... cmd=" << we->cmd << ", len=" << we->len << oendl; | 1111 | odebug << " - reading next event... cmd=" << we->cmd << ", len=" << we->len << oendl; |
947 | switch (we->cmd) | 1112 | switch (we->cmd) |
948 | { | 1113 | { |
949 | case SIOCGIWAP: | 1114 | case SIOCGIWAP: |
950 | { | 1115 | { |
951 | odebug << "SIOCGIWAP" << oendl; | 1116 | odebug << "SIOCGIWAP" << oendl; |
952 | stations->append( new OStation() ); | 1117 | stations->append( new OStation() ); |
953 | stations->last()->macAddress = (const unsigned char*) &we->u.ap_addr.sa_data[0]; | 1118 | stations->last()->macAddress = (const unsigned char*) &we->u.ap_addr.sa_data[0]; |
954 | break; | 1119 | break; |
955 | } | 1120 | } |
956 | case SIOCGIWMODE: | 1121 | case SIOCGIWMODE: |
957 | { | 1122 | { |
958 | odebug << "SIOCGIWMODE" << oendl; | 1123 | odebug << "SIOCGIWMODE" << oendl; |
959 | stations->last()->type = modeToString( we->u.mode ); | 1124 | stations->last()->type = modeToString( we->u.mode ); |
960 | break; | 1125 | break; |
961 | } | 1126 | } |
962 | case SIOCGIWFREQ: | 1127 | case SIOCGIWFREQ: |
963 | { | 1128 | { |
964 | odebug << "SIOCGIWFREQ" << oendl; | 1129 | odebug << "SIOCGIWFREQ" << oendl; |
965 | stations->last()->channel = _channels[ static_cast<int>(double( we->u.freq.m ) * pow( 10.0, we->u.freq.e ) / 1000000) ]; | 1130 | stations->last()->channel = _channels[ static_cast<int>(double( we->u.freq.m ) * pow( 10.0, we->u.freq.e ) / 1000000) ]; |
966 | break; | 1131 | break; |
967 | } | 1132 | } |
968 | case SIOCGIWESSID: | 1133 | case SIOCGIWESSID: |
969 | { | 1134 | { |
970 | odebug << "SIOCGIWESSID" << oendl; | 1135 | odebug << "SIOCGIWESSID" << oendl; |
971 | stations->last()->ssid = static_cast<const char*>( we->u.essid.pointer ); | 1136 | we->u.essid.length = '\0'; // make sure it is zero terminated |
1137 | stations->last()->ssid = static_cast<const char*> (we->u.essid.pointer); | ||
1138 | odebug << "ESSID: " << stations->last()->ssid << oendl; | ||
972 | break; | 1139 | break; |
973 | } | 1140 | } |
974 | case SIOCGIWSENS: odebug << "SIOCGIWSENS" << oendl; break; | 1141 | case SIOCGIWSENS: odebug << "SIOCGIWSENS" << oendl; break; |
975 | case SIOCGIWENCODE: odebug << "SIOCGIWENCODE" << oendl; break; | 1142 | case SIOCGIWENCODE: odebug << "SIOCGIWENCODE" << oendl; break; |
976 | case IWEVTXDROP: odebug << "IWEVTXDROP" << oendl; break; /* Packet dropped to excessive retry */ | 1143 | case IWEVTXDROP: odebug << "IWEVTXDROP" << oendl; break; /* Packet dropped to excessive retry */ |
977 | case IWEVQUAL: odebug << "IWEVQUAL" << oendl; break; /* Quality part of statistics (scan) */ | 1144 | case IWEVQUAL: odebug << "IWEVQUAL" << oendl; break; /* Quality part of statistics (scan) */ |
978 | case IWEVCUSTOM: odebug << "IWEVCUSTOM" << oendl; break; /* Driver specific ascii string */ | 1145 | case IWEVCUSTOM: odebug << "IWEVCUSTOM" << oendl; break; /* Driver specific ascii string */ |
979 | case IWEVREGISTERED: odebug << "IWEVREGISTERED" << oendl; break; /* Discovered a new node (AP mode) */ | 1146 | case IWEVREGISTERED: odebug << "IWEVREGISTERED" << oendl; break; /* Discovered a new node (AP mode) */ |
980 | case IWEVEXPIRED: odebug << "IWEVEXPIRED" << oendl; break; /* Expired a node (AP mode) */ | 1147 | case IWEVEXPIRED: odebug << "IWEVEXPIRED" << oendl; break; /* Expired a node (AP mode) */ |
981 | default: odebug << "unhandled event" << oendl; | 1148 | default: odebug << "unhandled event" << oendl; |
982 | } | 1149 | } |
983 | 1150 | ||
984 | offset += we->len; | 1151 | } while (true); |
985 | we = (struct iw_event*) &buffer[offset]; | ||
986 | } | ||
987 | return stations; | ||
988 | |||
989 | return stations; | ||
990 | |||
991 | } | 1152 | } |
992 | else | 1153 | else |
993 | { | 1154 | { |
994 | odebug << " - no results (timeout) :(" << oendl; | 1155 | odebug << " - no results (timeout) :(" << oendl; |
995 | return stations; | ||
996 | } | 1156 | } |
1157 | return stations; | ||
997 | } | 1158 | } |
998 | 1159 | ||
999 | 1160 | ||
1000 | int OWirelessNetworkInterface::signalStrength() const | 1161 | int OWirelessNetworkInterface::signalStrength() const |
1001 | { | 1162 | { |
1002 | iw_statistics stat; | 1163 | iw_statistics stat; |
1003 | ::memset( &stat, 0, sizeof stat ); | 1164 | ::memset( &stat, 0, sizeof stat ); |
1004 | _iwr.u.data.pointer = (char*) &stat; | 1165 | _iwr.u.data.pointer = (char*) &stat; |
1005 | _iwr.u.data.flags = 0; | 1166 | _iwr.u.data.flags = 0; |
1006 | _iwr.u.data.length = sizeof stat; | 1167 | _iwr.u.data.length = sizeof stat; |
1007 | 1168 | ||
1008 | if ( !wioctl( SIOCGIWSTATS ) ) | 1169 | if ( !wioctl( SIOCGIWSTATS ) ) |
1009 | { | 1170 | { |
1010 | return -1; | 1171 | return -1; |
1011 | } | 1172 | } |
1012 | 1173 | ||
1013 | int max = _range.max_qual.qual; | 1174 | int max = _range.max_qual.qual; |
1014 | int cur = stat.qual.qual; | 1175 | int cur = stat.qual.qual; |
1015 | // int lev = stat.qual.level; //FIXME: Do something with them? | 1176 | // int lev = stat.qual.level; //FIXME: Do something with them? |
1016 | // int noi = stat.qual.noise; //FIXME: Do something with them? | 1177 | // int noi = stat.qual.noise; //FIXME: Do something with them? |
1017 | 1178 | ||
1018 | 1179 | ||
1019 | return max != 0 ? cur*100/max: -1; | 1180 | return max != 0 ? cur*100/max: -1; |
1020 | } | 1181 | } |
1021 | 1182 | ||
1022 | 1183 | ||
1023 | bool OWirelessNetworkInterface::wioctl( int call, struct iwreq& iwreq ) const | 1184 | bool OWirelessNetworkInterface::wioctl( int call, struct iwreq& iwreq ) const |
1024 | { | 1185 | { |
1025 | #ifndef NODEBUG | 1186 | #ifndef NODEBUG |
1026 | int result = ::ioctl( _sfd, call, &iwreq ); | 1187 | int result = ::ioctl( _sfd, call, &iwreq ); |
1027 | 1188 | ||
1028 | if ( result == -1 ) | 1189 | if ( result == -1 ) |
diff --git a/libopie2/opienet/onetwork.h b/libopie2/opienet/onetwork.h index be4bb46..4d9912d 100644 --- a/libopie2/opienet/onetwork.h +++ b/libopie2/opienet/onetwork.h | |||
@@ -1,78 +1,78 @@ | |||
1 | /* | 1 | /* |
2 | This file is part of the Opie Project | 2 | This file is part of the Opie Project |
3 | Copyright (C) 2003-2004 by Michael 'Mickey' Lauer | 3 | Copyright (C) 2003-2005 by Michael 'Mickey' Lauer <mickey@Vanille.de> |
4 | =. <mickey@Vanille.de> | 4 | =. |
5 | .=l. | 5 | .=l. |
6 | .>+-= | 6 | .>+-= |
7 | _;:, .> :=|. This program is free software; you can | 7 | _;:, .> :=|. This program is free software; you can |
8 | .> <`_, > . <= redistribute it and/or modify it under | 8 | .> <`_, > . <= redistribute it and/or modify it under |
9 | :`=1 )Y*s>-.-- : the terms of the GNU Library General Public | 9 | :`=1 )Y*s>-.-- : the terms of the GNU Library General Public |
10 | .="- .-=="i, .._ License as published by the Free Software | 10 | .="- .-=="i, .._ License as published by the Free Software |
11 | - . .-<_> .<> Foundation; version 2 of the License. | 11 | - . .-<_> .<> Foundation; version 2 of the License. |
12 | ._= =} : | 12 | ._= =} : |
13 | .%`+i> _;_. | 13 | .%`+i> _;_. |
14 | .i_,=:_. -<s. This program is distributed in the hope that | 14 | .i_,=:_. -<s. This program is distributed in the hope that |
15 | + . -:. = it will be useful, but WITHOUT ANY WARRANTY; | 15 | + . -:. = it will be useful, but WITHOUT ANY WARRANTY; |
16 | : .. .:, . . . without even the implied warranty of | 16 | : .. .:, . . . without even the implied warranty of |
17 | =_ + =;=|` MERCHANTABILITY or FITNESS FOR A | 17 | =_ + =;=|` MERCHANTABILITY or FITNESS FOR A |
18 | _.=:. : :=>`: PARTICULAR PURPOSE. See the GNU | 18 | _.=:. : :=>`: PARTICULAR PURPOSE. See the GNU |
19 | ..}^=.= = ; Library General Public License for more | 19 | ..}^=.= = ; Library General Public License for more |
20 | ++= -. .` .: details. | 20 | ++= -. .` .: details. |
21 | : = ...= . :.=- | 21 | : = ...= . :.=- |
22 | -. .:....=;==+<; You should have received a copy of the GNU | 22 | -. .:....=;==+<; You should have received a copy of the GNU |
23 | -_. . . )=. = Library General Public License along with | 23 | -_. . . )=. = Library General Public License along with |
24 | -- :-=` this library; see the file COPYING.LIB. | 24 | -- :-=` this library; see the file COPYING.LIB. |
25 | If not, write to the Free Software Foundation, | 25 | If not, write to the Free Software Foundation, |
26 | Inc., 59 Temple Place - Suite 330, | 26 | Inc., 59 Temple Place - Suite 330, |
27 | Boston, MA 02111-1307, USA. | 27 | Boston, MA 02111-1307, USA. |
28 | 28 | ||
29 | */ | 29 | */ |
30 | 30 | ||
31 | #ifndef ONETWORK_H | 31 | #ifndef ONETWORK_H |
32 | #define ONETWORK_H | 32 | #define ONETWORK_H |
33 | 33 | ||
34 | /* OPIE */ | 34 | /* OPIE */ |
35 | #include <opie2/onetutils.h> | 35 | #include <opie2/onetutils.h> |
36 | #include <opie2/ostation.h> | 36 | #include <opie2/ostation.h> |
37 | 37 | ||
38 | /* QT */ | 38 | /* QT */ |
39 | #include <qvaluelist.h> | 39 | #include <qvaluelist.h> |
40 | #include <qdict.h> | 40 | #include <qdict.h> |
41 | #include <qmap.h> | 41 | #include <qmap.h> |
42 | #include <qobject.h> | 42 | #include <qobject.h> |
43 | #include <qhostaddress.h> | 43 | #include <qhostaddress.h> |
44 | 44 | ||
45 | /* STD */ | 45 | /* STD */ |
46 | // hacky workaround until we have a user space wireless.h | 46 | // hacky workarounds until we have a true user space wireless.h |
47 | #include <net/if.h> | 47 | #include <net/if.h> |
48 | #define _LINUX_IF_H | 48 | #define _LINUX_IF_H |
49 | #include <linux/wireless.h> | 49 | #include <linux/wireless.h> |
50 | #ifndef IW_MAX_PRIV_DEF | 50 | #ifndef IW_MAX_PRIV_DEF |
51 | #define IW_MAX_PRIV_DEF 128 | 51 | #define IW_MAX_PRIV_DEF 128 |
52 | #endif | 52 | #endif |
53 | 53 | ||
54 | namespace Opie { | 54 | namespace Opie { |
55 | namespace Net { | 55 | namespace Net { |
56 | class ONetworkInterface; | 56 | class ONetworkInterface; |
57 | class OWirelessNetworkInterface; | 57 | class OWirelessNetworkInterface; |
58 | class OChannelHopper; | 58 | class OChannelHopper; |
59 | class OMonitoringInterface; | 59 | class OMonitoringInterface; |
60 | 60 | ||
61 | /*====================================================================================== | 61 | /*====================================================================================== |
62 | * ONetwork | 62 | * ONetwork |
63 | *======================================================================================*/ | 63 | *======================================================================================*/ |
64 | 64 | ||
65 | /** | 65 | /** |
66 | * @brief A container class for all network interfaces | 66 | * @brief A container class for all network interfaces |
67 | * | 67 | * |
68 | * This class provides access to all available network interfaces of your computer. | 68 | * This class provides access to all available network interfaces of your computer. |
69 | * | 69 | * |
70 | * @author Michael 'Mickey' Lauer <mickey@vanille.de> | 70 | * @author Michael 'Mickey' Lauer <mickey@vanille.de> |
71 | */ | 71 | */ |
72 | class ONetwork : public QObject | 72 | class ONetwork : public QObject |
73 | { | 73 | { |
74 | Q_OBJECT | 74 | Q_OBJECT |
75 | 75 | ||
76 | public: | 76 | public: |
77 | typedef QDict<ONetworkInterface> InterfaceMap; | 77 | typedef QDict<ONetworkInterface> InterfaceMap; |
78 | typedef QDictIterator<ONetworkInterface> InterfaceIterator; | 78 | typedef QDictIterator<ONetworkInterface> InterfaceIterator; |
diff --git a/libopie2/opienet/opienet.pro b/libopie2/opienet/opienet.pro index 98fa175..a10a949 100644 --- a/libopie2/opienet/opienet.pro +++ b/libopie2/opienet/opienet.pro | |||
@@ -1,40 +1,40 @@ | |||
1 | TEMPLATE = lib | 1 | TEMPLATE = lib |
2 | CONFIG += qt warn_on | 2 | CONFIG += qt warn_on |
3 | DESTDIR = $(OPIEDIR)/lib | 3 | DESTDIR = $(OPIEDIR)/lib |
4 | HEADERS = 802_11_user.h \ | 4 | HEADERS = 802_11_user.h \ |
5 | dhcp.h \ | 5 | dhcp.h \ |
6 | udp_ports.h \ | 6 | udp_ports.h \ |
7 | odebugmapper.h \ | 7 | odebugmapper.h \ |
8 | omanufacturerdb.h \ | 8 | omanufacturerdb.h \ |
9 | onetutils.h \ | 9 | onetutils.h \ |
10 | onetwork.h \ | 10 | onetwork.h \ |
11 | opcap.h \ | 11 | opcap.h \ |
12 | ostation.h | 12 | ostation.h |
13 | SOURCES = odebugmapper.cpp \ | 13 | SOURCES = odebugmapper.cpp \ |
14 | omanufacturerdb.cpp \ | 14 | omanufacturerdb.cpp \ |
15 | onetutils.cpp \ | 15 | onetutils.cpp \ |
16 | onetwork.cpp \ | 16 | onetwork.cpp \ |
17 | opcap.cpp \ | 17 | opcap.cpp \ |
18 | ostation.cpp | 18 | ostation.cpp |
19 | INTERFACES = | 19 | INTERFACES = |
20 | TARGET = opienet2 | 20 | TARGET = opienet2 |
21 | VERSION = 1.8.4 | 21 | VERSION = 1.8.5 |
22 | INCLUDEPATH += $(OPIEDIR)/include | 22 | INCLUDEPATH += $(OPIEDIR)/include |
23 | DEPENDPATH += $(OPIEDIR)/include | 23 | DEPENDPATH += $(OPIEDIR)/include |
24 | LIBS += -lpcap | 24 | LIBS += -lpcap |
25 | 25 | ||
26 | 26 | ||
27 | !contains( platform, x11 ) { | 27 | !contains( platform, x11 ) { |
28 | include( $(OPIEDIR)/include.pro ) | 28 | include( $(OPIEDIR)/include.pro ) |
29 | } | 29 | } |
30 | 30 | ||
31 | contains( platform, x11 ) { | 31 | contains( platform, x11 ) { |
32 | LIBS += -L$(OPIEDIR)/lib -Wl,-rpath,$(OPIEDIR)/lib | 32 | LIBS += -L$(OPIEDIR)/lib -Wl,-rpath,$(OPIEDIR)/lib |
33 | } | 33 | } |
34 | 34 | ||
35 | !isEmpty( LIBPCAP_INC_DIR ) { | 35 | !isEmpty( LIBPCAP_INC_DIR ) { |
36 | INCLUDEPATH = $$LIBPCAP_INC_DIR $$INCLUDEPATH | 36 | INCLUDEPATH = $$LIBPCAP_INC_DIR $$INCLUDEPATH |
37 | } | 37 | } |
38 | !isEmpty( LIBPCAP_LIB_DIR ) { | 38 | !isEmpty( LIBPCAP_LIB_DIR ) { |
39 | LIBS = -L$$LIBPCAP_LIB_DIR $$LIBS | 39 | LIBS = -L$$LIBPCAP_LIB_DIR $$LIBS |
40 | } | 40 | } |
diff --git a/libopie2/opienet/ostation.h b/libopie2/opienet/ostation.h index bdc653f..5219d92 100644 --- a/libopie2/opienet/ostation.h +++ b/libopie2/opienet/ostation.h | |||
@@ -1,82 +1,83 @@ | |||
1 | /* | 1 | /* |
2 | This file is part of the Opie Project | 2 | This file is part of the Opie Project |
3 | Copyright (C) 2003 by Michael 'Mickey' Lauer <mickey@Vanille.de> | 3 | Copyright (C) 2003-2005 by Michael 'Mickey' Lauer <mickey@Vanille.de> |
4 | =. | 4 | =. |
5 | .=l. | 5 | .=l. |
6 | .>+-= | 6 | .>+-= |
7 | _;:, .> :=|. This program is free software; you can | 7 | _;:, .> :=|. This program is free software; you can |
8 | .> <`_, > . <= redistribute it and/or modify it under | 8 | .> <`_, > . <= redistribute it and/or modify it under |
9 | :`=1 )Y*s>-.-- : the terms of the GNU Library General Public | 9 | :`=1 )Y*s>-.-- : the terms of the GNU Library General Public |
10 | .="- .-=="i, .._ License as published by the Free Software | 10 | .="- .-=="i, .._ License as published by the Free Software |
11 | - . .-<_> .<> Foundation; version 2 of the License. | 11 | - . .-<_> .<> Foundation; version 2 of the License. |
12 | ._= =} : | 12 | ._= =} : |
13 | .%`+i> _;_. | 13 | .%`+i> _;_. |
14 | .i_,=:_. -<s. This program is distributed in the hope that | 14 | .i_,=:_. -<s. This program is distributed in the hope that |
15 | + . -:. = it will be useful, but WITHOUT ANY WARRANTY; | 15 | + . -:. = it will be useful, but WITHOUT ANY WARRANTY; |
16 | : .. .:, . . . without even the implied warranty of | 16 | : .. .:, . . . without even the implied warranty of |
17 | =_ + =;=|` MERCHANTABILITY or FITNESS FOR A | 17 | =_ + =;=|` MERCHANTABILITY or FITNESS FOR A |
18 | _.=:. : :=>`: PARTICULAR PURPOSE. See the GNU | 18 | _.=:. : :=>`: PARTICULAR PURPOSE. See the GNU |
19 | ..}^=.= = ; Library General Public License for more | 19 | ..}^=.= = ; Library General Public License for more |
20 | ++= -. .` .: details. | 20 | ++= -. .` .: details. |
21 | : = ...= . :.=- | 21 | : = ...= . :.=- |
22 | -. .:....=;==+<; You should have received a copy of the GNU | 22 | -. .:....=;==+<; You should have received a copy of the GNU |
23 | -_. . . )=. = Library General Public License along with | 23 | -_. . . )=. = Library General Public License along with |
24 | -- :-=` this library; see the file COPYING.LIB. | 24 | -- :-=` this library; see the file COPYING.LIB. |
25 | If not, write to the Free Software Foundation, | 25 | If not, write to the Free Software Foundation, |
26 | Inc., 59 Temple Place - Suite 330, | 26 | Inc., 59 Temple Place - Suite 330, |
27 | Boston, MA 02111-1307, USA. | 27 | Boston, MA 02111-1307, USA. |
28 | 28 | ||
29 | */ | 29 | */ |
30 | 30 | ||
31 | #ifndef OSTATION_H | 31 | #ifndef OSTATION_H |
32 | #define OSTATION_H | 32 | #define OSTATION_H |
33 | 33 | ||
34 | #include <opie2/onetutils.h> | 34 | #include <opie2/onetutils.h> |
35 | 35 | ||
36 | #include <qlist.h> | 36 | #include <qlist.h> |
37 | #include <qstring.h> | 37 | #include <qstring.h> |
38 | #include <qhostaddress.h> | 38 | #include <qhostaddress.h> |
39 | #include <qobject.h> | 39 | #include <qobject.h> |
40 | 40 | ||
41 | #include <sys/types.h> | 41 | #include <sys/types.h> |
42 | 42 | ||
43 | namespace Opie { | 43 | namespace Opie { |
44 | namespace Net { | 44 | namespace Net { |
45 | 45 | ||
46 | class OStation; | 46 | class OStation; |
47 | 47 | ||
48 | 48 | ||
49 | typedef QList<OStation> OStationList; | 49 | typedef QList<OStation> OStationList; |
50 | 50 | ||
51 | /*====================================================================================== | 51 | /*====================================================================================== |
52 | * OStation | 52 | * OStation |
53 | *======================================================================================*/ | 53 | *======================================================================================*/ |
54 | 54 | ||
55 | class OStation | 55 | class OStation |
56 | { | 56 | { |
57 | public: | 57 | public: |
58 | OStation(); | 58 | OStation(); |
59 | ~OStation(); | 59 | ~OStation(); |
60 | 60 | ||
61 | void dump(); | 61 | void dump(); |
62 | 62 | ||
63 | /* Ethernet */ | 63 | /* Ethernet */ |
64 | QString type; | 64 | QString type; |
65 | OMacAddress macAddress; | 65 | OMacAddress macAddress; |
66 | QHostAddress ipAddress; | 66 | QHostAddress ipAddress; |
67 | 67 | ||
68 | /* WaveLan */ | 68 | /* WaveLan */ |
69 | QString ssid; | 69 | QString ssid; |
70 | OMacAddress apAddress; | 70 | OMacAddress apAddress; |
71 | int channel; | 71 | int channel; |
72 | int level; | ||
72 | bool encrypted; | 73 | bool encrypted; |
73 | private: | 74 | private: |
74 | class Private; | 75 | class Private; |
75 | Private *d; | 76 | Private *d; |
76 | }; | 77 | }; |
77 | 78 | ||
78 | } | 79 | } |
79 | } | 80 | } |
80 | 81 | ||
81 | #endif // OSTATION_H | 82 | #endif // OSTATION_H |
82 | 83 | ||