1 /***************************************************************************
2 stuff.cpp - description
5 copyright : (C) 2001 by Stefan Winter
6 email : mail@stefan-winter.de
7 ***************************************************************************/
9 /***************************************************************************
11 * This program is free software; you can redistribute it and/or modify *
12 * it under the terms of the GNU General Public License as published by *
13 * the Free Software Foundation; either version 2 of the License, or *
14 * (at your option) any later version. *
16 ***************************************************************************/
18 #include "interface_wireless.h"
22 #include <QStringList>
27 #include <arts/artsflow.h>
28 #include <arts/connect.h>
29 #include <arts/iomanager.h>
30 #include <arts/referenceclean.h>
31 #endif // WITHOUT_ARTS
38 #include <arpa/inet.h>
40 QStringList
Interface_wireless::ignoreInterfaces
;
42 Interface_wireless::Interface_wireless ( )
44 has_frequency
= false;
53 access_point_address
= "";
54 ip_addresses
.clear ( );
58 for ( int i
= 0; i
< MAX_HISTORY
; i
++ )
67 noiseLevelMin
= 32000;
69 noiseLevelMax
= -32000;
71 already_warned
= false;
75 Interface_wireless::get_device_freq ( long &freq
)
89 Interface_wireless::get_mode ( int &ext_mode
)
103 Interface_wireless::get_key ( QString
& ext_key
, int &ext_size
, int &ext_flags
)
109 ext_flags
= key_flags
;
119 Interface_wireless::get_essid ( )
125 Interface_wireless::get_has_txpower ( )
131 Interface_wireless::get_txpower_disabled ( )
133 return txpower_disabled
;
137 Interface_wireless::get_AP_info ( QString
& mac
, QString
& /*ip */ )
139 mac
= access_point_address
;
144 Interface_wireless::get_IP_info ( )
150 Interface_wireless::get_bitrate ( )
156 Interface_wireless::getMaxBitrate ( )
162 Interface_wireless::get_interface_name ( )
164 return interface_name
;
168 Interface_wireless::get_current_quality ( int &sig
, int &noi
, int &qua
)
170 if ( valid
[current
] )
172 sig
= sigLevel
[current
];
173 noi
= noiseLevel
[current
];
182 Interface_wireless::getDeviceState ( )
184 if ( !has_frequency
|| txpower_disabled
)
188 else if ( mode
== 1 )
192 else if ( qual
[current
] == 0 )
194 return NO_CONNECTION
;
196 else if ( qual
[current
] > 0 )
207 sine_wave ( double frequency
)
209 using namespace Arts
;
210 StdIOManager
*limiter
= new StdIOManager
;
211 Dispatcher
dispatcher ( limiter
);
212 MyTimeNotify
*zeit
= new MyTimeNotify ( &dispatcher
);
213 Synth_FREQUENCY freq
;
216 setValue ( freq
, frequency
);
217 connect ( freq
, sin
);
218 connect ( sin
, play
, "invalue_left" );
222 limiter
->addTimer ( 240, zeit
);
230 MyTimeNotify::notifyTime ( )
238 whois ( const char *MAC_ADR
, QStringList APList
)
240 for ( QStringList::Iterator it
= APList
.begin ( ); it
!= APList
.end ( ); ( it
++ )++ )
242 if ( ( *it
) == ( QString
) MAC_ADR
)
245 return i18n ( "UNKNOWN" );
249 NetworkParameterDataModel::rowCount ( const QModelIndex
& parent
) const
251 return dataContainer
.size ( );
255 NetworkParameterDataModel::columnCount ( const QModelIndex
& parent
) const
261 NetworkParameterDataModel::data ( const QModelIndex
& index
, int role
) const
263 if ( index
.row ( ) >= dataContainer
.size ( ) )
266 if ( role
!= Qt::DisplayRole
&& role
!= Qt::BackgroundColorRole
)
269 if ( role
== Qt::DisplayRole
)
270 switch ( index
.column ( ) )
273 return dataContainer
[index
.row ( )].ssid
;
275 return dataContainer
[index
.row ( )].mode
;
277 return ( QString ( "%1" ) ).arg ( dataContainer
[index
.row ( )].quality
);
279 if ( dataContainer
[index
.row ( )].encryption
== "off" )
280 return QString ( i18n ( "off" ) );
281 if ( dataContainer
[index
.row ( )].encryption
== "on" )
282 return QString ( i18n ( "on" ) );
283 return dataContainer
[index
.row ( )].encryption
;
288 if ( role
== Qt::BackgroundColorRole
)
289 switch ( index
.column ( ) )
292 return ( dataContainer
[index
.row ( )].ssid
== "" ? QColor ( 255, 255, 0 ) : QColor ( 0, 128, 0 ) );
294 return QColor ( 0, 128, 0 );
296 return QColor ( 0, 128, 0 );
298 if ( dataContainer
[index
.row ( )].encryption
== "on" )
299 return QColor ( 255, 255, 0 );
300 if ( checkWEP ( dataContainer
[index
.row ( )].encryption
) == NONE
)
301 return QColor ( 0, 128, 0 );
302 if ( checkWEP ( dataContainer
[index
.row ( )].encryption
) == VALID_HEX
||
303 checkWEP ( dataContainer
[index
.row ( )].encryption
) == VALID_STRING
)
304 return QColor ( 0, 128, 0 );
305 if ( checkWEP ( dataContainer
[index
.row ( )].encryption
) == INVALID
)
306 return QColor ( 255, 0, 0 );
312 // we will never get here, but let's make the compiler happy
317 NetworkParameterDataModel::checkWEP ( const QString
& key
) const
320 kDebug ( ) << "In checkWEP()\n";
324 if ( key
.length ( ) == 5 )
326 if ( key
.length ( ) == 13 )
328 if ( key
.length ( ) == 32 )
331 // a more restrictive check: is it really a hex number?
333 QRegExp
hexNumber ( "[A-F,a-f,0-9]*" );
335 if ( key
.length ( ) == 10 && hexNumber
.exactMatch ( key
) )
337 if ( key
.length ( ) == 26 && hexNumber
.exactMatch ( key
) )
339 if ( key
.length ( ) == 64 && hexNumber
.exactMatch ( key
) )
347 NetworkParameterDataModel::data ( int row
, int col
)
349 return data ( createIndex ( row
, col
, 0 ), Qt::DisplayRole
);
353 NetworkParameterDataModel::headerData ( int section
, Qt::Orientation orientation
, int role
= Qt::DisplayRole
) const
355 if ( orientation
== Qt::Vertical
)
360 return i18n ( "SSID" );
363 return i18n ( "Mode" );
366 return i18n ( "Quality" );
369 return i18n ( "Encryption" );
381 NetworkParameterDataModel::headerData ( int col
)
383 return headerData ( col
, Qt::Horizontal
);
387 NetworkParameterDataModel::setData ( const QModelIndex
& index
, const QVariant
& value
, int role
= Qt::EditRole
)
389 if ( role
!= Qt::EditRole
)
391 if ( dataContainer
.size ( ) == 0 )
392 insertColumns ( 0, 4 );
393 for ( int i
= dataContainer
.size ( ); i
<= index
.row ( ); i
++ )
395 kDebug ( ) << "intialising intermediate row " << i
<< ".\n";
396 struct NetworkParameterData
*newRow
= new NetworkParameterData
;
400 newRow
->encryption
= "off";
401 dataContainer
.append ( *newRow
);
404 kDebug ( ) << "Setting value at row " << index
.row ( ) << ", col " << index
.column ( ) << " to " << value
.
405 toString ( ) << ".\n";
407 switch ( index
.column ( ) )
410 dataContainer
[index
.row ( )].ssid
= value
.toString ( );
413 dataContainer
[index
.row ( )].mode
= value
.toString ( );
416 dataContainer
[index
.row ( )].quality
= value
.toString ( ).toInt ( );
419 dataContainer
[index
.row ( )].encryption
= value
.toString ( );
424 // emit dataChanged(index,index);
429 NetworkParameterDataModel::gotFinishedIndicator ( )
431 emit
finishedScanning ( );
435 NetworkParameterDataModel::setData ( int row
, int col
, const QVariant
& value
)
437 return setData ( createIndex ( row
, col
), value
);
440 Qt::ItemFlags
NetworkParameterDataModel::flags ( const QModelIndex
& index
) const
442 if ( index
.row ( ) >= dataContainer
.size ( ) )
444 if ( index
.column ( ) > 3 )
446 if ( index
.column ( ) != 0 && index
.column ( ) != 3 )
447 return Qt::ItemIsSelectable
;
448 if ( index
.column ( ) == 0 && !dataContainer
[index
.row ( )].ssid
.isEmpty() )
449 return Qt::ItemIsSelectable
;
450 if ( index
.column ( ) == 3 && dataContainer
[index
.row ( )].encryption
== "off" )
451 return Qt::ItemIsSelectable
;
452 return Qt::ItemIsSelectable
| Qt::ItemIsEnabled
| Qt::ItemIsEditable
;
455 #include "interface_wireless.moc"