summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/settings/networksettings/mainwindow/mainwindowimp.cpp20
-rw-r--r--noncore/settings/networksettings/ppp/edit.cpp10
-rw-r--r--noncore/settings/networksettings/wlan/wlanimp2.cpp4
3 files changed, 15 insertions, 19 deletions
diff --git a/noncore/settings/networksettings/mainwindow/mainwindowimp.cpp b/noncore/settings/networksettings/mainwindow/mainwindowimp.cpp
index a7b0bdc..650e634 100644
--- a/noncore/settings/networksettings/mainwindow/mainwindowimp.cpp
+++ b/noncore/settings/networksettings/mainwindow/mainwindowimp.cpp
@@ -1,793 +1,785 @@
1 1
2#include "mainwindowimp.h" 2#include "mainwindowimp.h"
3#include "addconnectionimp.h" 3#include "addconnectionimp.h"
4#include "interfaceinformationimp.h" 4#include "interfaceinformationimp.h"
5#include "interfacesetupimp.h" 5#include "interfacesetupimp.h"
6#include "interfaces.h" 6#include "interfaces.h"
7#include "module.h" 7#include "module.h"
8 8
9/* OPIE */ 9/* OPIE */
10#include <opie2/odebug.h> 10#include <opie2/odebug.h>
11#include <opie2/oprocess.h> 11#include <opie2/oprocess.h>
12#include <opie2/oresource.h>
13
12#include <qpe/applnk.h> 14#include <qpe/applnk.h>
13#include <qpe/qcopenvelope_qws.h> 15#include <qpe/qcopenvelope_qws.h>
14#include <qpe/qpeapplication.h> 16#include <qpe/qpeapplication.h>
15#include <qpe/config.h> 17#include <qpe/config.h>
16#include <qpe/qlibrary.h> 18#include <qpe/qlibrary.h>
17#include <qpe/resource.h>
18 19
19/* QT */ 20/* QT */
20#include <qpushbutton.h> 21#include <qpushbutton.h>
21#include <qlistbox.h> 22#include <qlistbox.h>
22#include <qlineedit.h> 23#include <qlineedit.h>
23#include <qlistview.h> 24#include <qlistview.h>
24#include <qheader.h> 25#include <qheader.h>
25#include <qlabel.h> 26#include <qlabel.h>
26#include <qtabwidget.h> // in order to disable the profiles tab 27#include <qtabwidget.h> // in order to disable the profiles tab
27#include <qmessagebox.h> 28#include <qmessagebox.h>
28#include <qtextstream.h> 29#include <qtextstream.h>
29#include <qregexp.h> 30#include <qregexp.h>
30 31
31 32
32#if QT_VERSION < 0x030000 33#if QT_VERSION < 0x030000
33#include <qlist.h> 34#include <qlist.h>
34#else 35#else
35#include <qptrlist.h> 36#include <qptrlist.h>
36#endif 37#endif
37#include <qdir.h> 38#include <qdir.h>
38#include <qfile.h> 39#include <qfile.h>
39#include <qtextstream.h> 40#include <qtextstream.h>
40#include <qregexp.h> 41#include <qregexp.h>
41 42
42/* STD */ 43/* STD */
43#include <net/if.h> 44#include <net/if.h>
44#include <sys/ioctl.h> 45#include <sys/ioctl.h>
45#include <sys/socket.h> 46#include <sys/socket.h>
46 47
47#define DEFAULT_SCHEME "/var/lib/pcmcia/scheme" 48#define DEFAULT_SCHEME "/var/lib/pcmcia/scheme"
48#define _PROCNETDEV "/proc/net/dev" 49#define _PROCNETDEV "/proc/net/dev"
49 50
50// is this always right? 51// is this always right?
51#define _HOSTFILE "/etc/hostname" 52#define _HOSTFILE "/etc/hostname"
52#define _IRDANAME "/proc/sys/net/irda/devname" 53#define _IRDANAME "/proc/sys/net/irda/devname"
53 54
54using namespace Opie::Core; 55using namespace Opie::Core;
55 56
56MainWindowImp::MainWindowImp(QWidget *parent, const char *name, WFlags) : MainWindow(parent, name, Qt::WStyle_ContextHelp), advancedUserMode(true), scheme(DEFAULT_SCHEME) 57MainWindowImp::MainWindowImp(QWidget *parent, const char *name, WFlags) : MainWindow(parent, name, Qt::WStyle_ContextHelp), advancedUserMode(true), scheme(DEFAULT_SCHEME)
57{ 58{
58 connect(addConnectionButton, SIGNAL(clicked()), this, SLOT(addClicked())); 59 connect(addConnectionButton, SIGNAL(clicked()), this, SLOT(addClicked()));
59 connect(removeConnectionButton, SIGNAL(clicked()), this, SLOT(removeClicked())); 60 connect(removeConnectionButton, SIGNAL(clicked()), this, SLOT(removeClicked()));
60 connect(informationConnectionButton, SIGNAL(clicked()), this, SLOT(informationClicked())); 61 connect(informationConnectionButton, SIGNAL(clicked()), this, SLOT(informationClicked()));
61 connect(configureConnectionButton, SIGNAL(clicked()), this, SLOT(configureClicked())); 62 connect(configureConnectionButton, SIGNAL(clicked()), this, SLOT(configureClicked()));
62 63
63 //remove tab with no function 64 //remove tab with no function
64 tabWidget->removePage( tab ); 65 tabWidget->removePage( tab );
65 66
66 // Load connections. 67 // Load connections.
67 // /usr/local/kde/lib/libinterfaces.la 68 // /usr/local/kde/lib/libinterfaces.la
68 loadModules(QPEApplication::qpeDir() + "plugins/networksettings"); 69 loadModules(QPEApplication::qpeDir() + "plugins/networksettings");
69 getAllInterfaces(); 70 getAllInterfaces();
70 71
71 Interfaces i; 72 Interfaces i;
72 QStringList list = i.getInterfaceList(); 73 QStringList list = i.getInterfaceList();
73 QMap<QString, Interface*>::Iterator it; 74 QMap<QString, Interface*>::Iterator it;
74 for ( QStringList::Iterator ni = list.begin(); ni != list.end(); ++ni ) 75 for ( QStringList::Iterator ni = list.begin(); ni != list.end(); ++ni )
75 { 76 {
76 /* 77 /*
77 * we skipped it in getAllInterfaces now 78 * we skipped it in getAllInterfaces now
78 * we need to ignore it as well 79 * we need to ignore it as well
79 */ 80 */
80 if (m_handledIfaces.contains( *ni) ) 81 if (m_handledIfaces.contains( *ni) )
81 { 82 {
82 odebug << "Not up iface handled by module" << oendl; 83 odebug << "Not up iface handled by module" << oendl;
83 continue; 84 continue;
84 } 85 }
85 bool found = false; 86 bool found = false;
86 for( it = interfaceNames.begin(); it != interfaceNames.end(); ++it ) 87 for( it = interfaceNames.begin(); it != interfaceNames.end(); ++it )
87 { 88 {
88 if(it.key() == (*ni)) 89 if(it.key() == (*ni))
89 found = true; 90 found = true;
90 } 91 }
91 if(!found) 92 if(!found)
92 { 93 {
93 if(!(*ni).contains("_")) 94 if(!(*ni).contains("_"))
94 { 95 {
95 Interface *i = new Interface(this, *ni, false); 96 Interface *i = new Interface(this, *ni, false);
96 i->setAttached(false); 97 i->setAttached(false);
97 i->setHardwareName(tr("Disconnected")); 98 i->setHardwareName(tr("Disconnected"));
98 interfaceNames.insert(i->getInterfaceName(), i); 99 interfaceNames.insert(i->getInterfaceName(), i);
99 updateInterface(i); 100 updateInterface(i);
100 connect(i, SIGNAL(updateInterface(Interface*)), this, SLOT(updateInterface(Interface*))); 101 connect(i, SIGNAL(updateInterface(Interface*)), this, SLOT(updateInterface(Interface*)));
101 } 102 }
102 } 103 }
103 } 104 }
104 105
105 //getInterfaceList(); 106 //getInterfaceList();
106 connectionList->header()->hide(); 107 connectionList->header()->hide();
107 108
108 Config cfg("NetworkSetup"); 109 Config cfg("NetworkSetup");
109 profiles = QStringList::split(" ", cfg.readEntry("Profiles", "All")); 110 profiles = QStringList::split(" ", cfg.readEntry("Profiles", "All"));
110 for ( QStringList::Iterator it = profiles.begin(); 111 for ( QStringList::Iterator it = profiles.begin();
111 it != profiles.end(); ++it) 112 it != profiles.end(); ++it)
112 profilesList->insertItem((*it)); 113 profilesList->insertItem((*it));
113 currentProfileLabel->setText(cfg.readEntry("CurrentProfile", "All")); 114 currentProfileLabel->setText(cfg.readEntry("CurrentProfile", "All"));
114 advancedUserMode = cfg.readBoolEntry("AdvancedUserMode", false); 115 advancedUserMode = cfg.readBoolEntry("AdvancedUserMode", false);
115 scheme = cfg.readEntry("SchemeFile", DEFAULT_SCHEME); 116 scheme = cfg.readEntry("SchemeFile", DEFAULT_SCHEME);
116 117
117 QFile file(scheme); 118 QFile file(scheme);
118 if ( file.open(IO_ReadOnly) ) 119 if ( file.open(IO_ReadOnly) )
119 { // file opened successfully 120 { // file opened successfully
120 QTextStream stream( &file ); // use a text stream 121 QTextStream stream( &file ); // use a text stream
121 while ( !stream.eof() ) 122 while ( !stream.eof() )
122 { // until end of file... 123 { // until end of file...
123 QString line = stream.readLine(); // line of text excluding '\n' 124 QString line = stream.readLine(); // line of text excluding '\n'
124 if(line.contains("SCHEME")) 125 if(line.contains("SCHEME"))
125 { 126 {
126 line = line.mid(7, line.length()); 127 line = line.mid(7, line.length());
127 currentProfileLabel->setText(line); 128 currentProfileLabel->setText(line);
128 break; 129 break;
129 } 130 }
130 } 131 }
131 file.close(); 132 file.close();
132 } 133 }
133 makeChannel(); 134 makeChannel();
134 initHostname(); 135 initHostname();
135} 136}
136 137
137/** 138/**
138 * Deconstructor. Save profiles. Delete loaded libraries. 139 * Deconstructor. Save profiles. Delete loaded libraries.
139 */ 140 */
140MainWindowImp::~MainWindowImp() 141MainWindowImp::~MainWindowImp()
141{ 142{
142 // Save profiles. 143 // Save profiles.
143 Config cfg("NetworkSetup"); 144 Config cfg("NetworkSetup");
144 cfg.setGroup("General"); 145 cfg.setGroup("General");
145 cfg.writeEntry("Profiles", profiles.join(" ")); 146 cfg.writeEntry("Profiles", profiles.join(" "));
146 147
147 // Delete all interfaces that don't have owners. 148 // Delete all interfaces that don't have owners.
148 QMap<Interface*, QListViewItem*>::Iterator iIt; 149 QMap<Interface*, QListViewItem*>::Iterator iIt;
149 for( iIt = items.begin(); iIt != items.end(); ++iIt ) 150 for( iIt = items.begin(); iIt != items.end(); ++iIt )
150 { 151 {
151 if(iIt.key()->getModuleOwner() == NULL) 152 if(iIt.key()->getModuleOwner() == NULL)
152 delete iIt.key(); 153 delete iIt.key();
153 } 154 }
154 155
155 // Delete Modules and Libraries 156 // Delete Modules and Libraries
156 QMap<Module*, QLibrary*>::Iterator it; 157 QMap<Module*, QLibrary*>::Iterator it;
157 for( it = libraries.begin(); it != libraries.end(); ++it ) 158 for( it = libraries.begin(); it != libraries.end(); ++it )
158 { 159 {
159 delete it.key(); 160 delete it.key();
160 // I wonder why I can't delete the libraries 161 // I wonder why I can't delete the libraries
161 // What fucking shit this is. 162 // What fucking shit this is.
162 //delete it.data(); 163 //delete it.data();
163 } 164 }
164} 165}
165 166
166/** 167/**
167 * Query the kernel for all of the interfaces. 168 * Query the kernel for all of the interfaces.
168 */ 169 */
169void MainWindowImp::getAllInterfaces() 170void MainWindowImp::getAllInterfaces()
170{ 171{
171 int sockfd = socket(PF_INET, SOCK_DGRAM, 0); 172 int sockfd = socket(PF_INET, SOCK_DGRAM, 0);
172 if(sockfd == -1) 173 if(sockfd == -1)
173 return; 174 return;
174 175
175 struct ifreq ifr; 176 struct ifreq ifr;
176 QStringList ifaces; 177 QStringList ifaces;
177 QFile procFile(QString(_PROCNETDEV)); 178 QFile procFile(QString(_PROCNETDEV));
178 int result; 179 int result;
179 Interface *i; 180 Interface *i;
180 181
181 if (! procFile.exists()) 182 if (! procFile.exists())
182 { 183 {
183 struct ifreq ifrs[100]; 184 struct ifreq ifrs[100];
184 struct ifconf ifc; 185 struct ifconf ifc;
185 ifc.ifc_len = sizeof(ifrs); 186 ifc.ifc_len = sizeof(ifrs);
186 ifc.ifc_req = ifrs; 187 ifc.ifc_req = ifrs;
187 result = ioctl(sockfd, SIOCGIFCONF, &ifc); 188 result = ioctl(sockfd, SIOCGIFCONF, &ifc);
188 189
189 for (unsigned int i = 0; i < ifc.ifc_len / sizeof(struct ifreq); i++) 190 for (unsigned int i = 0; i < ifc.ifc_len / sizeof(struct ifreq); i++)
190 { 191 {
191 struct ifreq *pifr = &ifrs[i]; 192 struct ifreq *pifr = &ifrs[i];
192 if ( !QString( pifr->ifr_name ).startsWith( "wifi" ) ) ifaces += pifr->ifr_name; 193 if ( !QString( pifr->ifr_name ).startsWith( "wifi" ) ) ifaces += pifr->ifr_name;
193 else odebug << "ignoring hostap control interface " << pifr->ifr_name << oendl; 194 else odebug << "ignoring hostap control interface " << pifr->ifr_name << oendl;
194 } 195 }
195 } 196 }
196 else 197 else
197 { 198 {
198 procFile.open(IO_ReadOnly); 199 procFile.open(IO_ReadOnly);
199 QString line; 200 QString line;
200 QTextStream procTs(&procFile); 201 QTextStream procTs(&procFile);
201 int loc = -1; 202 int loc = -1;
202 203
203 procTs.readLine(); // eat a line 204 procTs.readLine(); // eat a line
204 procTs.readLine(); // eat a line 205 procTs.readLine(); // eat a line
205 while((line = procTs.readLine().simplifyWhiteSpace()) != QString::null) 206 while((line = procTs.readLine().simplifyWhiteSpace()) != QString::null)
206 { 207 {
207 if((loc = line.find(":")) != -1) 208 if((loc = line.find(":")) != -1)
208 { 209 {
209 // ignore wifi* (hostap control interfaces) 210 // ignore wifi* (hostap control interfaces)
210 if ( !line.left(loc).startsWith( "wifi" ) ) ifaces += line.left(loc); 211 if ( !line.left(loc).startsWith( "wifi" ) ) ifaces += line.left(loc);
211 else odebug << "ignoring hostap control interface " << line.left(loc) << oendl; 212 else odebug << "ignoring hostap control interface " << line.left(loc) << oendl;
212 } 213 }
213 } 214 }
214 } 215 }
215 216
216 for (QStringList::Iterator it = ifaces.begin(); it != ifaces.end(); ++it) 217 for (QStringList::Iterator it = ifaces.begin(); it != ifaces.end(); ++it)
217 { 218 {
218 int flags = 0; 219 int flags = 0;
219 if ( m_handledIfaces.contains( (*it) ) ) 220 if ( m_handledIfaces.contains( (*it) ) )
220 { 221 {
221 odebug << " " << (*it).latin1() << " is handled by a module" << oendl; 222 odebug << " " << (*it).latin1() << " is handled by a module" << oendl;
222 continue; 223 continue;
223 } 224 }
224 // int family; 225 // int family;
225 i = NULL; 226 i = NULL;
226 227
227 strcpy(ifr.ifr_name, (*it).latin1()); 228 strcpy(ifr.ifr_name, (*it).latin1());
228 229
229 struct ifreq ifcopy; 230 struct ifreq ifcopy;
230 ifcopy = ifr; 231 ifcopy = ifr;
231 result = ioctl(sockfd, SIOCGIFFLAGS, &ifcopy); 232 result = ioctl(sockfd, SIOCGIFFLAGS, &ifcopy);
232 flags = ifcopy.ifr_flags; 233 flags = ifcopy.ifr_flags;
233 i = new Interface(this, ifr.ifr_name, false); 234 i = new Interface(this, ifr.ifr_name, false);
234 i->setAttached(true); 235 i->setAttached(true);
235 if ((flags & IFF_UP) == IFF_UP) 236 if ((flags & IFF_UP) == IFF_UP)
236 i->setStatus(true); 237 i->setStatus(true);
237 else 238 else
238 i->setStatus(false); 239 i->setStatus(false);
239 240
240 if ((flags & IFF_BROADCAST) == IFF_BROADCAST) 241 if ((flags & IFF_BROADCAST) == IFF_BROADCAST)
241 i->setHardwareName("Ethernet"); 242 i->setHardwareName("Ethernet");
242 else if ((flags & IFF_POINTOPOINT) == IFF_POINTOPOINT) 243 else if ((flags & IFF_POINTOPOINT) == IFF_POINTOPOINT)
243 i->setHardwareName("Point to Point"); 244 i->setHardwareName("Point to Point");
244 else if ((flags & IFF_MULTICAST) == IFF_MULTICAST) 245 else if ((flags & IFF_MULTICAST) == IFF_MULTICAST)
245 i->setHardwareName("Multicast"); 246 i->setHardwareName("Multicast");
246 else if ((flags & IFF_LOOPBACK) == IFF_LOOPBACK) 247 else if ((flags & IFF_LOOPBACK) == IFF_LOOPBACK)
247 i->setHardwareName("Loopback"); 248 i->setHardwareName("Loopback");
248 else 249 else
249 i->setHardwareName("Unknown"); 250 i->setHardwareName("Unknown");
250 251
251 owarn << "Adding interface " << ifr.ifr_name << " to interfaceNames\n" << oendl; 252 owarn << "Adding interface " << ifr.ifr_name << " to interfaceNames\n" << oendl;
252 interfaceNames.insert(i->getInterfaceName(), i); 253 interfaceNames.insert(i->getInterfaceName(), i);
253 updateInterface(i); 254 updateInterface(i);
254 connect(i, SIGNAL(updateInterface(Interface*)), 255 connect(i, SIGNAL(updateInterface(Interface*)),
255 this, SLOT(updateInterface(Interface*))); 256 this, SLOT(updateInterface(Interface*)));
256 } 257 }
257 // now lets ask the plugins too ;) 258 // now lets ask the plugins too ;)
258 QMap<Module*, QLibrary*>::Iterator it; 259 QMap<Module*, QLibrary*>::Iterator it;
259 QList<Interface> ilist; 260 QList<Interface> ilist;
260 for( it = libraries.begin(); it != libraries.end(); ++it ) 261 for( it = libraries.begin(); it != libraries.end(); ++it )
261 { 262 {
262 if(it.key()) 263 if(it.key())
263 { 264 {
264 ilist = it.key()->getInterfaces(); 265 ilist = it.key()->getInterfaces();
265 for( i = ilist.first(); i != 0; i = ilist.next() ) 266 for( i = ilist.first(); i != 0; i = ilist.next() )
266 { 267 {
267 owarn << "Adding interface " << i->getInterfaceName().latin1() << " to interfaceNames\n" << oendl; 268 owarn << "Adding interface " << i->getInterfaceName().latin1() << " to interfaceNames\n" << oendl;
268 interfaceNames.insert(i->getInterfaceName(), i); 269 interfaceNames.insert(i->getInterfaceName(), i);
269 updateInterface(i); 270 updateInterface(i);
270 connect(i, SIGNAL(updateInterface(Interface*)), 271 connect(i, SIGNAL(updateInterface(Interface*)),
271 this, SLOT(updateInterface(Interface*))); 272 this, SLOT(updateInterface(Interface*)));
272 } 273 }
273 } 274 }
274 } 275 }
275} 276}
276 277
277/** 278/**
278 * Load all modules that are found in the path 279 * Load all modules that are found in the path
279 * @param path a directory that is scaned for any plugins that can be loaded 280 * @param path a directory that is scaned for any plugins that can be loaded
280 * and attempts to load them 281 * and attempts to load them
281 */ 282 */
282void MainWindowImp::loadModules(const QString &path) 283void MainWindowImp::loadModules(const QString &path)
283{ 284{
284#ifdef DEBUG 285#ifdef DEBUG
285 odebug << "MainWindowImp::loadModules: " << path.latin1() << "" << oendl; 286 odebug << "MainWindowImp::loadModules: " << path.latin1() << "" << oendl;
286#endif 287#endif
287 QDir d(path); 288 QDir d(path);
288 if(!d.exists()) 289 if(!d.exists())
289 return; 290 return;
290 291
291 QString lang = ::getenv("LANG"); 292 QString lang = ::getenv("LANG");
292 // Don't want sym links 293 // Don't want sym links
293 d.setFilter( QDir::Files | QDir::NoSymLinks ); 294 d.setFilter( QDir::Files | QDir::NoSymLinks );
294 const QFileInfoList *list = d.entryInfoList(); 295 const QFileInfoList *list = d.entryInfoList();
295 QFileInfoListIterator it( *list ); 296 QFileInfoListIterator it( *list );
296 QFileInfo *fi; 297 QFileInfo *fi;
297 while ( (fi=it.current()) ) 298 while ( (fi=it.current()) )
298 { 299 {
299 if(fi->fileName().contains(".so")) 300 if(fi->fileName().contains(".so"))
300 { 301 {
301 /* if loaded install translation */ 302 /* if loaded install translation */
302 if( loadPlugin(path + "/" + fi->fileName()) != 0l ){ 303 if( loadPlugin(path + "/" + fi->fileName()) != 0l ){
303 QTranslator *trans = new QTranslator(qApp); 304 QTranslator *trans = new QTranslator(qApp);
304 QString fn = QPEApplication::qpeDir()+"i18n/"+lang+"/"+ fi->fileName().left( fi->fileName().find(".") )+".qm"; 305 QString fn = QPEApplication::qpeDir()+"i18n/"+lang+"/"+ fi->fileName().left( fi->fileName().find(".") )+".qm";
305 if( trans->load( fn ) ) 306 if( trans->load( fn ) )
306 qApp->installTranslator( trans ); 307 qApp->installTranslator( trans );
307 else 308 else
308 delete trans; 309 delete trans;
309 } 310 }
310 odebug << "loaded plugin: >" << QString(path + "/" + fi->fileName()).latin1() << "< " << oendl; 311 odebug << "loaded plugin: >" << QString(path + "/" + fi->fileName()).latin1() << "< " << oendl;
311 } 312 }
312 ++it; 313 ++it;
313 } 314 }
314} 315}
315 316
316/** 317/**
317 * Attempt to load a function and resolve a function. 318 * Attempt to load a function and resolve a function.
318 * @param pluginFileName - the name of the file in which to attempt to load 319 * @param pluginFileName - the name of the file in which to attempt to load
319 * @param resolveString - function pointer to resolve 320 * @param resolveString - function pointer to resolve
320 * @return pointer to the function with name resolveString or NULL 321 * @return pointer to the function with name resolveString or NULL
321 */ 322 */
322Module* MainWindowImp::loadPlugin(const QString &pluginFileName, const QString &resolveString) 323Module* MainWindowImp::loadPlugin(const QString &pluginFileName, const QString &resolveString)
323{ 324{
324#ifdef DEBUG 325#ifdef DEBUG
325 odebug << "MainWindowImp::loadPlugin: " << pluginFileName.latin1() << ": resolving " << resolveString.latin1() << "" << oendl; 326 odebug << "MainWindowImp::loadPlugin: " << pluginFileName.latin1() << ": resolving " << resolveString.latin1() << "" << oendl;
326#endif 327#endif
327 QLibrary *lib = new QLibrary(pluginFileName); 328 QLibrary *lib = new QLibrary(pluginFileName);
328 void *functionPointer = lib->resolve(resolveString); 329 void *functionPointer = lib->resolve(resolveString);
329 if( !functionPointer ) 330 if( !functionPointer )
330 { 331 {
331#ifdef DEBUG 332#ifdef DEBUG
332 odebug << "MainWindowImp::loadPlugin: Warning: " << pluginFileName.latin1() << " is not a plugin" << oendl; 333 odebug << "MainWindowImp::loadPlugin: Warning: " << pluginFileName.latin1() << " is not a plugin" << oendl;
333#endif 334#endif
334 delete lib; 335 delete lib;
335 return 0; 336 return 0;
336 } 337 }
337 // Try to get an object. 338 // Try to get an object.
338 Module *object = ((Module* (*)()) functionPointer)(); 339 Module *object = ((Module* (*)()) functionPointer)();
339 if(object == 0) 340 if(object == 0)
340 { 341 {
341#ifdef DEBUG 342#ifdef DEBUG
342 odebug << "MainWindowImp: Couldn't create object, but did load library!" << oendl; 343 odebug << "MainWindowImp: Couldn't create object, but did load library!" << oendl;
343#endif 344#endif
344 delete lib; 345 delete lib;
345 return 0; 346 return 0;
346 } 347 }
347 348
348 m_handledIfaces += object->handledInterfaceNames(); 349 m_handledIfaces += object->handledInterfaceNames();
349 // Store for deletion later 350 // Store for deletion later
350 libraries.insert(object, lib); 351 libraries.insert(object, lib);
351 return object; 352 return object;
352} 353}
353 354
354/** 355/**
355 * The Add button was clicked. Bring up the add dialog and if OK is hit 356 * The Add button was clicked. Bring up the add dialog and if OK is hit
356 * load the plugin and append it to the list 357 * load the plugin and append it to the list
357 */ 358 */
358void MainWindowImp::addClicked() 359void MainWindowImp::addClicked()
359{ 360{
360 QMap<Module*, QLibrary*>::Iterator it; 361 QMap<Module*, QLibrary*>::Iterator it;
361 QMap<QString, QString> list; 362 QMap<QString, QString> list;
362 QMap<QString, Module*> newInterfaceOwners; 363 QMap<QString, Module*> newInterfaceOwners;
363 364
364 for( it = libraries.begin(); it != libraries.end(); ++it ) 365 for( it = libraries.begin(); it != libraries.end(); ++it )
365 { 366 {
366 if(it.key()) 367 if(it.key())
367 { 368 {
368 (it.key())->possibleNewInterfaces(list); 369 (it.key())->possibleNewInterfaces(list);
369 } 370 }
370 } 371 }
371 // See if the list has anything that we can add. 372 // See if the list has anything that we can add.
372 if(list.count() == 0) 373 if(list.count() == 0)
373 { 374 {
374 QMessageBox::information(this, "Sorry", "Nothing to add.", QMessageBox::Ok); 375 QMessageBox::information(this, "Sorry", "Nothing to add.", QMessageBox::Ok);
375 return; 376 return;
376 } 377 }
377 AddConnectionImp addNewConnection(this, "AddConnectionImp", true); 378 AddConnectionImp addNewConnection(this, "AddConnectionImp", true);
378 addNewConnection.addConnections(list); 379 addNewConnection.addConnections(list);
379 if( QDialog::Accepted == QPEApplication::execDialog( &addNewConnection ) ) 380 if( QDialog::Accepted == QPEApplication::execDialog( &addNewConnection ) )
380 { 381 {
381 QListViewItem *item = addNewConnection.registeredServicesList->currentItem(); 382 QListViewItem *item = addNewConnection.registeredServicesList->currentItem();
382 if(!item) 383 if(!item)
383 return; 384 return;
384 385
385 for( it = libraries.begin(); it != libraries.end(); ++it ) 386 for( it = libraries.begin(); it != libraries.end(); ++it )
386 { 387 {
387 if(it.key()) 388 if(it.key())
388 { 389 {
389 Interface *i = (it.key())->addNewInterface(item->text(0)); 390 Interface *i = (it.key())->addNewInterface(item->text(0));
390 if(i) 391 if(i)
391 { 392 {
392 odebug << "iface name " << i->getInterfaceName().latin1() << "" << oendl; 393 odebug << "iface name " << i->getInterfaceName().latin1() << "" << oendl;
393 interfaceNames.insert(i->getInterfaceName(), i); 394 interfaceNames.insert(i->getInterfaceName(), i);
394 updateInterface(i); 395 updateInterface(i);
395 } 396 }
396 } 397 }
397 } 398 }
398 } 399 }
399} 400}
400 401
401/** 402/**
402 * Prompt the user to see if they really want to do this. 403 * Prompt the user to see if they really want to do this.
403 * If they do then remove from the list and unload. 404 * If they do then remove from the list and unload.
404 */ 405 */
405void MainWindowImp::removeClicked() 406void MainWindowImp::removeClicked()
406{ 407{
407 QListViewItem *item = connectionList->currentItem(); 408 QListViewItem *item = connectionList->currentItem();
408 if(!item) 409 if(!item)
409 { 410 {
410 QMessageBox::information(this, "Sorry","Please select an interface First.", QMessageBox::Ok); 411 QMessageBox::information(this, "Sorry","Please select an interface First.", QMessageBox::Ok);
411 return; 412 return;
412 } 413 }
413 414
414 Interface *i = interfaceItems[item]; 415 Interface *i = interfaceItems[item];
415 if(i->getModuleOwner() == NULL) 416 if(i->getModuleOwner() == NULL)
416 { 417 {
417 QMessageBox::information(this, "Can't remove interface.", "Interface is built in.", QMessageBox::Ok); 418 QMessageBox::information(this, "Can't remove interface.", "Interface is built in.", QMessageBox::Ok);
418 } 419 }
419 else 420 else
420 { 421 {
421 if(!i->getModuleOwner()->remove(i)) 422 if(!i->getModuleOwner()->remove(i))
422 QMessageBox::information(this, tr("Error"), tr("Unable to remove."), QMessageBox::Ok); 423 QMessageBox::information(this, tr("Error"), tr("Unable to remove."), QMessageBox::Ok);
423 else 424 else
424 { 425 {
425 delete item; 426 delete item;
426 // QMessageBox::information(this, "Success", "Interface was removed.", QMessageBox::Ok); 427 // QMessageBox::information(this, "Success", "Interface was removed.", QMessageBox::Ok);
427 } 428 }
428 } 429 }
429} 430}
430 431
431/** 432/**
432 * Pull up the configure about the currently selected interface. 433 * Pull up the configure about the currently selected interface.
433 * Report an error if no interface is selected. 434 * Report an error if no interface is selected.
434 * If the interface has a module owner then request its configure. 435 * If the interface has a module owner then request its configure.
435 */ 436 */
436void MainWindowImp::configureClicked() 437void MainWindowImp::configureClicked()
437{ 438{
438 QListViewItem *item = connectionList->currentItem(); 439 QListViewItem *item = connectionList->currentItem();
439 if(!item) 440 if(!item)
440 { 441 {
441 QMessageBox::information(this, tr("Sorry"),tr("Please select an interface first."), QMessageBox::Ok); 442 QMessageBox::information(this, tr("Sorry"),tr("Please select an interface first."), QMessageBox::Ok);
442 return; 443 return;
443 } 444 }
444 445
445 QString currentProfileText = currentProfileLabel->text(); 446 QString currentProfileText = currentProfileLabel->text();
446 if(currentProfileText.upper() == "ALL"); 447 if(currentProfileText.upper() == "ALL");
447 currentProfileText = ""; 448 currentProfileText = "";
448 449
449 Interface *i = interfaceItems[item]; 450 Interface *i = interfaceItems[item];
450 451
451 if(i->getModuleOwner()) 452 if(i->getModuleOwner())
452 { 453 {
453 QWidget *moduleConfigure = i->getModuleOwner()->configure(i); 454 QWidget *moduleConfigure = i->getModuleOwner()->configure(i);
454 if(moduleConfigure != NULL) 455 if(moduleConfigure != NULL)
455 { 456 {
456 i->getModuleOwner()->setProfile(currentProfileText); 457 i->getModuleOwner()->setProfile(currentProfileText);
457 QPEApplication::showWidget( moduleConfigure ); 458 QPEApplication::showWidget( moduleConfigure );
458 return; 459 return;
459 } 460 }
460 } 461 }
461 462
462 InterfaceSetupImpDialog *configure = new InterfaceSetupImpDialog(this, "InterfaceSetupImp", i, true, Qt::WDestructiveClose | Qt::WStyle_ContextHelp ); 463 InterfaceSetupImpDialog *configure = new InterfaceSetupImpDialog(this, "InterfaceSetupImp", i, true, Qt::WDestructiveClose | Qt::WStyle_ContextHelp );
463 configure->setProfile(currentProfileText); 464 configure->setProfile(currentProfileText);
464 QPEApplication::showDialog( configure ); 465 QPEApplication::showDialog( configure );
465} 466}
466 467
467/** 468/**
468 * Pull up the information about the currently selected interface. 469 * Pull up the information about the currently selected interface.
469 * Report an error if no interface is selected. 470 * Report an error if no interface is selected.
470 * If the interface has a module owner then request its configure. 471 * If the interface has a module owner then request its configure.
471 */ 472 */
472void MainWindowImp::informationClicked() 473void MainWindowImp::informationClicked()
473{ 474{
474 QListViewItem *item = connectionList->currentItem(); 475 QListViewItem *item = connectionList->currentItem();
475 if(!item) 476 if(!item)
476 { 477 {
477 QMessageBox::information(this, "Sorry","Please select an interface First.", QMessageBox::Ok); 478 QMessageBox::information(this, "Sorry","Please select an interface First.", QMessageBox::Ok);
478 return; 479 return;
479 } 480 }
480 481
481 Interface *i = interfaceItems[item]; 482 Interface *i = interfaceItems[item];
482 // if(!i->isAttached()){ 483 // if(!i->isAttached()){
483 // QMessageBox::information(this, "Sorry","No information about\na disconnected interface.", QMessageBox::Ok); 484 // QMessageBox::information(this, "Sorry","No information about\na disconnected interface.", QMessageBox::Ok);
484 // return; 485 // return;
485 // } 486 // }
486 487
487 if(i->getModuleOwner()) 488 if(i->getModuleOwner())
488 { 489 {
489 QWidget *moduleInformation = i->getModuleOwner()->information(i); 490 QWidget *moduleInformation = i->getModuleOwner()->information(i);
490 if(moduleInformation != NULL) 491 if(moduleInformation != NULL)
491 { 492 {
492 QPEApplication::showWidget( moduleInformation ); 493 QPEApplication::showWidget( moduleInformation );
493#ifdef DEBUG 494#ifdef DEBUG
494 odebug << "MainWindowImp::informationClicked:: Module owner has created, we showed." << oendl; 495 odebug << "MainWindowImp::informationClicked:: Module owner has created, we showed." << oendl;
495#endif 496#endif
496 return; 497 return;
497 } 498 }
498 } 499 }
499 InterfaceInformationImp *information = new InterfaceInformationImp(this, "InterfaceSetupImp", i, Qt::WType_Modal | Qt::WDestructiveClose | Qt::WStyle_Dialog | Qt::WStyle_ContextHelp); 500 InterfaceInformationImp *information = new InterfaceInformationImp(this, "InterfaceSetupImp", i, Qt::WType_Modal | Qt::WDestructiveClose | Qt::WStyle_Dialog | Qt::WStyle_ContextHelp);
500 QPEApplication::showWidget( information ); 501 QPEApplication::showWidget( information );
501} 502}
502 503
503/** 504/**
504 * Update this interface. If no QListViewItem exists create one. 505 * Update this interface. If no QListViewItem exists create one.
505 * @param Interface* pointer to the interface that needs to be updated. 506 * @param Interface* pointer to the interface that needs to be updated.
506 */ 507 */
507void MainWindowImp::updateInterface(Interface *i) 508void MainWindowImp::updateInterface(Interface *i)
508{ 509{
509 if(!advancedUserMode) 510 if(!advancedUserMode)
510 { 511 {
511 if(i->getInterfaceName() == "lo") 512 if(i->getInterfaceName() == "lo")
512 return; 513 return;
513 } 514 }
514 515
515 QListViewItem *item = NULL; 516 QListViewItem *item = NULL;
516 517
517 // Find the interface, making it if needed. 518 // Find the interface, making it if needed.
518 if(items.find(i) == items.end()) 519 if(items.find(i) == items.end())
519 { 520 {
520 item = new QListViewItem(connectionList, "", "", ""); 521 item = new QListViewItem(connectionList, "", "", "");
521 // See if you can't find a module owner for this interface 522 // See if you can't find a module owner for this interface
522 QMap<Module*, QLibrary*>::Iterator it; 523 QMap<Module*, QLibrary*>::Iterator it;
523 for( it = libraries.begin(); it != libraries.end(); ++it ) 524 for( it = libraries.begin(); it != libraries.end(); ++it )
524 { 525 {
525 if(it.key()->isOwner(i)) 526 if(it.key()->isOwner(i))
526 i->setModuleOwner(it.key()); 527 i->setModuleOwner(it.key());
527 } 528 }
528 items.insert(i, item); 529 items.insert(i, item);
529 interfaceItems.insert(item, i); 530 interfaceItems.insert(item, i);
530 } 531 }
531 else 532 else
532 item = items[i]; 533 item = items[i];
533 534
534 // Update the icons and information 535 // Update the icons and information
535#ifdef QWS 536 item->setPixmap( 0, Opie::Core::OResource::loadPixmap( i->getStatus() ? "up" : "down", Opie::Core::OResource::SmallIcon ) );
536 QPixmap pic;
537 pic.convertFromImage( Resource::loadImage( i->getStatus() ? "up": "down" ).smoothScale( AppLnk::smallIconSize(), AppLnk::smallIconSize() ) );
538 item->setPixmap(0, ( pic ));
539#else
540 item->setPixmap(0, (SmallIcon(i->getStatus() ? "up": "down")));
541#endif
542 537
543 QString typeName = "lan"; 538 QString typeName = "lan";
544 if(i->getInterfaceName() == "lo") 539 if(i->getInterfaceName() == "lo")
545 typeName = "lo"; 540 typeName = "lo";
546 if(i->getInterfaceName().contains("irda")) 541 if(i->getInterfaceName().contains("irda"))
547 typeName = "irda"; 542 typeName = "irda";
548 if(i->getInterfaceName().contains("wlan")) 543 if(i->getInterfaceName().contains("wlan"))
549 typeName = "wlan"; 544 typeName = "wlan";
550 if(i->getInterfaceName().contains("usb")) 545 if(i->getInterfaceName().contains("usb"))
551 typeName = "usb"; 546 typeName = "usb";
552 547
553 if(!i->isAttached()) 548 if(!i->isAttached())
554 typeName = "connect_no"; 549 typeName = "connect_no";
555 // Actually try to use the Module 550 // Actually try to use the Module
556 if(i->getModuleOwner() != NULL) 551 if(i->getModuleOwner() != NULL)
557 typeName = i->getModuleOwner()->getPixmapName(i); 552 typeName = i->getModuleOwner()->getPixmapName(i);
558 553
559#ifdef QWS 554 item->setPixmap( 1, ( Opie::Core::OResource::loadPixmap( "networksettings/" + typeName, Opie::Core::OResource::SmallIcon ) ) );
560 item->setPixmap(1, (Resource::loadPixmap(QString("networksettings/") + typeName))); 555
561#else
562 item->setPixmap(1, (SmallIcon(typeName)));
563#endif
564 item->setText(2, i->getHardwareName()); 556 item->setText(2, i->getHardwareName());
565 item->setText(3, QString("(%1)").arg(i->getInterfaceName())); 557 item->setText(3, QString("(%1)").arg(i->getInterfaceName()));
566 item->setText(4, (i->getStatus()) ? i->getIp() : QString("")); 558 item->setText(4, (i->getStatus()) ? i->getIp() : QString(""));
567} 559}
568 560
569void MainWindowImp::newProfileChanged(const QString& newText) 561void MainWindowImp::newProfileChanged(const QString& newText)
570{ 562{
571 if(newText.length() > 0) 563 if(newText.length() > 0)
572 newProfileButton->setEnabled(true); 564 newProfileButton->setEnabled(true);
573 else 565 else
574 newProfileButton->setEnabled(false); 566 newProfileButton->setEnabled(false);
575} 567}
576 568
577/** 569/**
578 * Adds a new profile to the list of profiles. 570 * Adds a new profile to the list of profiles.
579 * Don't add profiles that already exists. 571 * Don't add profiles that already exists.
580 * Appends to the list and QStringList 572 * Appends to the list and QStringList
581 */ 573 */
582void MainWindowImp::addProfile() 574void MainWindowImp::addProfile()
583{ 575{
584 QString newProfileName = newProfile->text(); 576 QString newProfileName = newProfile->text();
585 if(profiles.grep(newProfileName).count() > 0) 577 if(profiles.grep(newProfileName).count() > 0)
586 { 578 {
587 QMessageBox::information(this, "Can't Add","Profile already exists.", QMessageBox::Ok); 579 QMessageBox::information(this, "Can't Add","Profile already exists.", QMessageBox::Ok);
588 return; 580 return;
589 } 581 }
590 profiles.append(newProfileName); 582 profiles.append(newProfileName);
591 profilesList->insertItem(newProfileName); 583 profilesList->insertItem(newProfileName);
592} 584}
593 585
594/** 586/**
595 * Removes the currently selected profile in the combo. 587 * Removes the currently selected profile in the combo.
596 * Doesn't delete if there are less then 2 profiles. 588 * Doesn't delete if there are less then 2 profiles.
597 */ 589 */
598void MainWindowImp::removeProfile() 590void MainWindowImp::removeProfile()
599{ 591{
600 if(profilesList->count() <= 1) 592 if(profilesList->count() <= 1)
601 { 593 {
602 QMessageBox::information(this, "Can't remove.","At least one profile\nis needed.", QMessageBox::Ok); 594 QMessageBox::information(this, "Can't remove.","At least one profile\nis needed.", QMessageBox::Ok);
603 return; 595 return;
604 } 596 }
605 QString profileToRemove = profilesList->currentText(); 597 QString profileToRemove = profilesList->currentText();
606 if(profileToRemove == "All") 598 if(profileToRemove == "All")
607 { 599 {
608 QMessageBox::information(this, "Can't remove.","Can't remove default.", QMessageBox::Ok); 600 QMessageBox::information(this, "Can't remove.","Can't remove default.", QMessageBox::Ok);
609 return; 601 return;
610 } 602 }
611 // Can't remove the curent profile 603 // Can't remove the curent profile
612 if(profileToRemove == currentProfileLabel->text()) 604 if(profileToRemove == currentProfileLabel->text())
613 { 605 {
614 QMessageBox::information(this, "Can't remove.",QString("%1 is the current profile.").arg(profileToRemove), QMessageBox::Ok); 606 QMessageBox::information(this, "Can't remove.",QString("%1 is the current profile.").arg(profileToRemove), QMessageBox::Ok);
615 return; 607 return;
616 608
617 } 609 }
618 610
619 if(QMessageBox::information(this, "Question",QString("Remove profile: %1").arg(profileToRemove), QMessageBox::Ok, QMessageBox::Cancel) == QMessageBox::Ok) 611 if(QMessageBox::information(this, "Question",QString("Remove profile: %1").arg(profileToRemove), QMessageBox::Ok, QMessageBox::Cancel) == QMessageBox::Ok)
620 { 612 {
621 profiles = QStringList::split(" ", profiles.join(" ").replace(QRegExp(profileToRemove), "")); 613 profiles = QStringList::split(" ", profiles.join(" ").replace(QRegExp(profileToRemove), ""));
622 profilesList->clear(); 614 profilesList->clear();
623 for ( QStringList::Iterator it = profiles.begin(); it != profiles.end(); ++it) 615 for ( QStringList::Iterator it = profiles.begin(); it != profiles.end(); ++it)
624 profilesList->insertItem((*it)); 616 profilesList->insertItem((*it));
625 617
626 // Remove any interface settings and mappings. 618 // Remove any interface settings and mappings.
627 Interfaces interfaces; 619 Interfaces interfaces;
628 // Go through them one by one 620 // Go through them one by one
629 QMap<Interface*, QListViewItem*>::Iterator it; 621 QMap<Interface*, QListViewItem*>::Iterator it;
630 for( it = items.begin(); it != items.end(); ++it ) 622 for( it = items.begin(); it != items.end(); ++it )
631 { 623 {
632 QString interfaceName = it.key()->getInterfaceName(); 624 QString interfaceName = it.key()->getInterfaceName();
633 odebug << interfaceName.latin1() << oendl; 625 odebug << interfaceName.latin1() << oendl;
634 if(interfaces.setInterface(interfaceName + "_" + profileToRemove)) 626 if(interfaces.setInterface(interfaceName + "_" + profileToRemove))
635 { 627 {
636 interfaces.removeInterface(); 628 interfaces.removeInterface();
637 if(interfaces.setMapping(interfaceName)) 629 if(interfaces.setMapping(interfaceName))
638 { 630 {
639 if(profilesList->count() == 1) 631 if(profilesList->count() == 1)
640 interfaces.removeMapping(); 632 interfaces.removeMapping();
641 else 633 else
642 { 634 {
643 interfaces.removeMap("map", interfaceName + "_" + profileToRemove); 635 interfaces.removeMap("map", interfaceName + "_" + profileToRemove);
644 } 636 }
645 } 637 }
646 interfaces.write(); 638 interfaces.write();
647 break; 639 break;
648 } 640 }
649 } 641 }
650 } 642 }
651} 643}
652 644
653/** 645/**
654 * A new profile has been selected, change. 646 * A new profile has been selected, change.
655 * @param newProfile the new profile. 647 * @param newProfile the new profile.
656 */ 648 */
657void MainWindowImp::changeProfile() 649void MainWindowImp::changeProfile()
658{ 650{
659 if(profilesList->currentItem() == -1) 651 if(profilesList->currentItem() == -1)
660 { 652 {
661 QMessageBox::information(this, "Can't Change.","Please select a profile.", QMessageBox::Ok); 653 QMessageBox::information(this, "Can't Change.","Please select a profile.", QMessageBox::Ok);
662 return; 654 return;
663 } 655 }
664 QString newProfile = profilesList->text(profilesList->currentItem()); 656 QString newProfile = profilesList->text(profilesList->currentItem());
665 if(newProfile != currentProfileLabel->text()) 657 if(newProfile != currentProfileLabel->text())
666 { 658 {
667 currentProfileLabel->setText(newProfile); 659 currentProfileLabel->setText(newProfile);
668 QFile::remove(scheme); 660 QFile::remove(scheme);
669 QFile file(scheme); 661 QFile file(scheme);
670 if ( file.open(IO_ReadWrite) ) 662 if ( file.open(IO_ReadWrite) )
671 { 663 {
672 QTextStream stream( &file ); 664 QTextStream stream( &file );
673 stream << QString("SCHEME=%1").arg(newProfile); 665 stream << QString("SCHEME=%1").arg(newProfile);
674 file.close(); 666 file.close();
675 } 667 }
676 // restart all up devices? 668 // restart all up devices?
677 if(QMessageBox::information(this, "Question","Restart all running interfaces?", QMessageBox::Ok, QMessageBox::No) == QMessageBox::Ok) 669 if(QMessageBox::information(this, "Question","Restart all running interfaces?", QMessageBox::Ok, QMessageBox::No) == QMessageBox::Ok)
678 { 670 {
679 // Go through them one by one 671 // Go through them one by one
680 QMap<Interface*, QListViewItem*>::Iterator it; 672 QMap<Interface*, QListViewItem*>::Iterator it;
681 for( it = items.begin(); it != items.end(); ++it ) 673 for( it = items.begin(); it != items.end(); ++it )
682 { 674 {
683 if(it.key()->getStatus() == true) 675 if(it.key()->getStatus() == true)
684 it.key()->restart(); 676 it.key()->restart();
685 } 677 }
686 } 678 }
687 } 679 }
688 // TODO change the profile in the modules 680 // TODO change the profile in the modules
689} 681}
690 682
691 683
692void MainWindowImp::makeChannel() 684void MainWindowImp::makeChannel()
693{ 685{
694 channel = new QCopChannel( "QPE/Application/networksettings", this ); 686 channel = new QCopChannel( "QPE/Application/networksettings", this );
695 connect( channel, SIGNAL(received(const QCString&,const QByteArray&)), 687 connect( channel, SIGNAL(received(const QCString&,const QByteArray&)),
696 this, SLOT(receive(const QCString&,const QByteArray&)) ); 688 this, SLOT(receive(const QCString&,const QByteArray&)) );
697} 689}
698 690
699void MainWindowImp::receive(const QCString &msg, const QByteArray &arg) 691void MainWindowImp::receive(const QCString &msg, const QByteArray &arg)
700{ 692{
701 bool found = false; 693 bool found = false;
702 odebug << "MainWindowImp::receive QCop msg >"+msg+"<" << oendl; 694 odebug << "MainWindowImp::receive QCop msg >"+msg+"<" << oendl;
703 if (msg == "raise") 695 if (msg == "raise")
704 { 696 {
705 raise(); 697 raise();
706 return; 698 return;
707 } 699 }
708 700
709 QString dest = msg.left(msg.find("(")); 701 QString dest = msg.left(msg.find("("));
710 QCString param = msg.right(msg.length() - msg.find("(") - 1); 702 QCString param = msg.right(msg.length() - msg.find("(") - 1);
711 param = param.left( param.length() - 1 ); 703 param = param.left( param.length() - 1 );
712 odebug << "dest >" << dest.latin1() << "< param >"+param+"<" << oendl; 704 odebug << "dest >" << dest.latin1() << "< param >"+param+"<" << oendl;
713 705
714 QMap<Module*, QLibrary*>::Iterator it; 706 QMap<Module*, QLibrary*>::Iterator it;
715 for( it = libraries.begin(); it != libraries.end(); ++it ) 707 for( it = libraries.begin(); it != libraries.end(); ++it )
716 { 708 {
717 odebug << "plugin >" << it.key()->type().latin1() << "<" << oendl; 709 odebug << "plugin >" << it.key()->type().latin1() << "<" << oendl;
718 if(it.key()->type() == dest) 710 if(it.key()->type() == dest)
719 { 711 {
720 it.key()->receive( param, arg ); 712 it.key()->receive( param, arg );
721 found = true; 713 found = true;
722 } 714 }
723 } 715 }
724 716
725 717
726 if (found) QPEApplication::setKeepRunning(); 718 if (found) QPEApplication::setKeepRunning();
727 else odebug << "Huh what do ya want" << oendl; 719 else odebug << "Huh what do ya want" << oendl;
728} 720}
729 721
730void MainWindowImp::setHostname() 722void MainWindowImp::setHostname()
731{ 723{
732 static QRegExp filter("[^A-Za-z0-9_\\-\\.]"); 724 static QRegExp filter("[^A-Za-z0-9_\\-\\.]");
733 if (filter.match(m_Nameinput->text())!=-1) { 725 if (filter.match(m_Nameinput->text())!=-1) {
734 odebug << "Wrong hostname" << oendl; 726 odebug << "Wrong hostname" << oendl;
735 QMessageBox::critical(0, tr("Sorry"), tr("This is a wrong name.<br>Please use A-Z, a-z, _, - or a single dot.")); 727 QMessageBox::critical(0, tr("Sorry"), tr("This is a wrong name.<br>Please use A-Z, a-z, _, - or a single dot."));
736 return; 728 return;
737 } 729 }
738 730
739 OProcess h; 731 OProcess h;
740 _procTemp=""; 732 _procTemp="";
741 h << "hostname" << m_Nameinput->text(); 733 h << "hostname" << m_Nameinput->text();
742 connect(&h,SIGNAL(receivedStderr(Opie::Core::OProcess*,char*,int)),this,SLOT(slotHostname(Opie::Core::OProcess*,char*,int))); 734 connect(&h,SIGNAL(receivedStderr(Opie::Core::OProcess*,char*,int)),this,SLOT(slotHostname(Opie::Core::OProcess*,char*,int)));
743 h.start(OProcess::Block,OProcess::Stderr); 735 h.start(OProcess::Block,OProcess::Stderr);
744 odebug << "Got " << _procTemp << " - " << h.exitStatus() << oendl; 736 odebug << "Got " << _procTemp << " - " << h.exitStatus() << oendl;
745 if (h.exitStatus()!=0) { 737 if (h.exitStatus()!=0) {
746 QMessageBox::critical(0, tr("Sorry"), QString(tr("Could not set name.\n%1")).arg(_procTemp.stripWhiteSpace())); 738 QMessageBox::critical(0, tr("Sorry"), QString(tr("Could not set name.\n%1")).arg(_procTemp.stripWhiteSpace()));
747 return; 739 return;
748 } 740 }
749 _procTemp=""; 741 _procTemp="";
750 742
751 QFile f(_HOSTFILE); 743 QFile f(_HOSTFILE);
752 if (f.open(IO_Truncate|IO_WriteOnly)) 744 if (f.open(IO_Truncate|IO_WriteOnly))
753 { 745 {
754 QTextStream s(&f); 746 QTextStream s(&f);
755 s << m_Nameinput->text(); 747 s << m_Nameinput->text();
756 } else { 748 } else {
757 QMessageBox::critical(0, tr("Sorry"), tr("Could not save name.")); 749 QMessageBox::critical(0, tr("Sorry"), tr("Could not save name."));
758 return; 750 return;
759 } 751 }
760 752
761 f.close(); 753 f.close();
762 f.setName(_IRDANAME); 754 f.setName(_IRDANAME);
763 if (f.open(IO_WriteOnly)) 755 if (f.open(IO_WriteOnly))
764 { 756 {
765 QTextStream s(&f); 757 QTextStream s(&f);
766 s << m_Nameinput->text(); 758 s << m_Nameinput->text();
767 } else { 759 } else {
768 QMessageBox::critical(0, tr("Sorry"), tr("Could not set infrared name.")); 760 QMessageBox::critical(0, tr("Sorry"), tr("Could not set infrared name."));
769 } 761 }
770} 762}
771 763
772void MainWindowImp::initHostname() 764void MainWindowImp::initHostname()
773{ 765{
774 OProcess h; 766 OProcess h;
775 _procTemp=""; 767 _procTemp="";
776 768
777 h << "hostname"; 769 h << "hostname";
778 connect(&h,SIGNAL(receivedStdout(Opie::Core::OProcess*,char*,int)),this,SLOT(slotHostname(Opie::Core::OProcess*,char*,int))); 770 connect(&h,SIGNAL(receivedStdout(Opie::Core::OProcess*,char*,int)),this,SLOT(slotHostname(Opie::Core::OProcess*,char*,int)));
779 h.start(OProcess::Block,OProcess::AllOutput); 771 h.start(OProcess::Block,OProcess::AllOutput);
780 odebug << "Got " << _procTemp <<oendl; 772 odebug << "Got " << _procTemp <<oendl;
781 m_Nameinput->setText(_procTemp.stripWhiteSpace()); 773 m_Nameinput->setText(_procTemp.stripWhiteSpace());
782 _procTemp=""; 774 _procTemp="";
783} 775}
784 776
785void MainWindowImp::slotHostname(Opie::Core::OProcess *proc, char *buffer, int buflen) 777void MainWindowImp::slotHostname(Opie::Core::OProcess */*proc*/, char *buffer, int buflen)
786{ 778{
787 if (buflen < 1 || buffer==0) return; 779 if (buflen < 1 || buffer==0) return;
788 char*_t = new char[buflen+1]; 780 char*_t = new char[buflen+1];
789 ::memset(_t,0,buflen+1); 781 ::memset(_t,0,buflen+1);
790 ::memcpy(_t,buffer,buflen); 782 ::memcpy(_t,buffer,buflen);
791 _procTemp+=_t; 783 _procTemp+=_t;
792 delete[]_t; 784 delete[]_t;
793} 785}
diff --git a/noncore/settings/networksettings/ppp/edit.cpp b/noncore/settings/networksettings/ppp/edit.cpp
index 6c9735c..0abf161 100644
--- a/noncore/settings/networksettings/ppp/edit.cpp
+++ b/noncore/settings/networksettings/ppp/edit.cpp
@@ -1,472 +1,476 @@
1/* 1/*
2 * kPPP: A pppd Front End for the KDE project 2 * kPPP: A pppd Front End for the KDE project
3 * 3 *
4 * $Id$ 4 * $Id$
5 * Copyright (C) 1997 Bernd Johannes Wuebben 5 * Copyright (C) 1997 Bernd Johannes Wuebben
6 * wuebben@math.cornell.edu 6 * wuebben@math.cornell.edu
7 * 7 *
8 * based on EzPPP: 8 * based on EzPPP:
9 * Copyright (C) 1997 Jay Painter 9 * Copyright (C) 1997 Jay Painter
10 * 10 *
11 * This program is free software; you can redistribute it and/or 11 * This program is free software; you can redistribute it and/or
12 * modify it under the terms of the GNU Library General Public 12 * modify it under the terms of the GNU Library General Public
13 * License as published by the Free Software Foundation; either 13 * License as published by the Free Software Foundation; either
14 * version 2 of the License, or (at your option) any later version. 14 * version 2 of the License, or (at your option) any later version.
15 * 15 *
16 * This program is distributed in the hope that it will be useful, 16 * This program is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19 * Library General Public License for more details. 19 * Library General Public License for more details.
20 * 20 *
21 * You should have received a copy of the GNU Library General Public 21 * You should have received a copy of the GNU Library General Public
22 * License along with this program; if not, write to the Free 22 * License along with this program; if not, write to the Free
23 * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 23 * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
24 */ 24 */
25 25
26#include "edit.h" 26#include "edit.h"
27#include "pppdata.h" 27#include "pppdata.h"
28#include "iplined.h" 28#include "iplined.h"
29#include "auth.h" 29#include "auth.h"
30 30
31/* OPIE */ 31/* OPIE */
32#include <qpe/resource.h> 32#include <opie2/oresource.h>
33
34#include <qpe/applnk.h>
33#include <qpe/qpeapplication.h> 35#include <qpe/qpeapplication.h>
34 36
35/* QT */ 37/* QT */
36#include <qlayout.h> 38#include <qlayout.h>
37#include <qmessagebox.h> 39#include <qmessagebox.h>
38#include <qwhatsthis.h> 40#include <qwhatsthis.h>
39#include <qregexp.h> 41#include <qregexp.h>
40#include <qapplication.h> 42#include <qapplication.h>
41#include <qbuttongroup.h> 43#include <qbuttongroup.h>
42#include <qvgroupbox.h> 44#include <qvgroupbox.h>
43#include <qhbox.h> 45#include <qhbox.h>
44#include <qdialog.h> 46#include <qdialog.h>
45 47
46/* STD */ 48/* STD */
47 49
48#include <string.h> 50#include <string.h>
49#include <termios.h> 51#include <termios.h>
50 52
51DialWidget::DialWidget( PPPData *pd, QWidget *parent, bool isnewaccount 53DialWidget::DialWidget( PPPData *pd, QWidget *parent, bool isnewaccount
52 , const char *name ) 54 , const char *name )
53 : QWidget(parent, name), _pppdata(pd) 55 : QWidget(parent, name), _pppdata(pd)
54{ 56{
55 const int GRIDROWS = 6; 57 const int GRIDROWS = 6;
56 58
57 QGridLayout *tl = new QGridLayout(this, GRIDROWS, 2, 0 ); 59 QGridLayout *tl = new QGridLayout(this, GRIDROWS, 2, 0 );
58 60
59 connect_label = new QLabel(tr("Connection name:"), this); 61 connect_label = new QLabel(tr("Connection name:"), this);
60 tl->addWidget(connect_label, 0, 0); 62 tl->addWidget(connect_label, 0, 0);
61 63
62 connectname_l = new QLineEdit(this); 64 connectname_l = new QLineEdit(this);
63 // connectname_l->setMaxLength(ACCNAME_SIZE); 65 // connectname_l->setMaxLength(ACCNAME_SIZE);
64 tl->addWidget(connectname_l, 0, 1); 66 tl->addWidget(connectname_l, 0, 1);
65 QString tmp = tr("Type in a unique name for this connection"); 67 QString tmp = tr("Type in a unique name for this connection");
66 68
67 QWhatsThis::add(connect_label,tmp); 69 QWhatsThis::add(connect_label,tmp);
68 QWhatsThis::add(connectname_l,tmp); 70 QWhatsThis::add(connectname_l,tmp);
69 71
70 72
71 number_label = new QLabel(tr("Phone number:"), this); 73 number_label = new QLabel(tr("Phone number:"), this);
72 number_label->setAlignment(AlignTop|AlignLeft); 74 number_label->setAlignment(AlignTop|AlignLeft);
73 tl->addWidget(number_label, 1, 0); 75 tl->addWidget(number_label, 1, 0);
74 76
75 QHBoxLayout *lpn = new QHBoxLayout(5); 77 QHBoxLayout *lpn = new QHBoxLayout(5);
76 tl->addLayout(lpn, 1, 1); 78 tl->addLayout(lpn, 1, 1);
77 numbers = new QListBox(this); 79 numbers = new QListBox(this);
78 // numbers->setMinimumSize(120, 70); 80 // numbers->setMinimumSize(120, 70);
79 lpn->addWidget(numbers); 81 lpn->addWidget(numbers);
80 QVBoxLayout *lpn1 = new QVBoxLayout; 82 QVBoxLayout *lpn1 = new QVBoxLayout;
81 lpn->addLayout(lpn1); 83 lpn->addLayout(lpn1);
82 add = new QPushButton(tr("&Add..."), this); 84 add = new QPushButton(tr("&Add..."), this);
83 del = new QPushButton(tr("&Remove"), this); 85 del = new QPushButton(tr("&Remove"), this);
84 86
85 up = new QPushButton(this); 87 up = new QPushButton(this);
86 up->setPixmap( Resource::loadPixmap("up") ); 88 up->setPixmap( Opie::Core::OResource::loadPixmap("up", Opie::Core::OResource::SmallIcon) );
89 up->setMinimumHeight( AppLnk::smallIconSize()+4 );
87 down = new QPushButton(this); 90 down = new QPushButton(this);
88 down->setPixmap( Resource::loadPixmap("down") ); 91 down->setPixmap( Opie::Core::OResource::loadPixmap("down", Opie::Core::OResource::SmallIcon) );
92 down->setMinimumHeight( AppLnk::smallIconSize()+4 );
89 lpn1->addWidget(add); 93 lpn1->addWidget(add);
90 lpn1->addWidget(del); 94 lpn1->addWidget(del);
91 lpn1->addStretch(1); 95 lpn1->addStretch(1);
92 lpn1->addWidget(up); 96 lpn1->addWidget(up);
93 lpn1->addWidget(down); 97 lpn1->addWidget(down);
94 connect(add, SIGNAL(clicked()), 98 connect(add, SIGNAL(clicked()),
95 this, SLOT(addNumber())); 99 this, SLOT(addNumber()));
96 connect(del, SIGNAL(clicked()), 100 connect(del, SIGNAL(clicked()),
97 this, SLOT(delNumber())); 101 this, SLOT(delNumber()));
98 connect(up, SIGNAL(clicked()), 102 connect(up, SIGNAL(clicked()),
99 this, SLOT(upNumber())); 103 this, SLOT(upNumber()));
100 connect(down, SIGNAL(clicked()), 104 connect(down, SIGNAL(clicked()),
101 this, SLOT(downNumber())); 105 this, SLOT(downNumber()));
102 connect(numbers, SIGNAL(highlighted(int)), 106 connect(numbers, SIGNAL(highlighted(int)),
103 this, SLOT(selectionChanged(int))); 107 this, SLOT(selectionChanged(int)));
104 numbersChanged(); 108 numbersChanged();
105 109
106 tmp = tr("<p>Specifies the phone numbers to dial. You\n" 110 tmp = tr("<p>Specifies the phone numbers to dial. You\n"
107 "can supply multiple numbers here, simply\n" 111 "can supply multiple numbers here, simply\n"
108 "click on \"Add\". You can arrange the\n" 112 "click on \"Add\". You can arrange the\n"
109 "order the numbers are tried by using the\n" 113 "order the numbers are tried by using the\n"
110 "arrow buttons.\n\n" 114 "arrow buttons.\n\n"
111 "When a number is busy or fails, <i>kppp</i> will \n" 115 "When a number is busy or fails, <i>kppp</i> will \n"
112 "try the next number and so on"); 116 "try the next number and so on");
113 117
114 QWhatsThis::add(number_label,tmp); 118 QWhatsThis::add(number_label,tmp);
115 QWhatsThis::add(numbers,tmp); 119 QWhatsThis::add(numbers,tmp);
116 120
117 pppdargs = new QPushButton(tr("Customize pppd Arguments..."), this); 121 pppdargs = new QPushButton(tr("Customize pppd Arguments..."), this);
118 connect(pppdargs, SIGNAL(clicked()), SLOT(pppdargsbutton())); 122 connect(pppdargs, SIGNAL(clicked()), SLOT(pppdargsbutton()));
119 tl->addMultiCellWidget(pppdargs, 5, 5, 0, 1, AlignCenter); 123 tl->addMultiCellWidget(pppdargs, 5, 5, 0, 1, AlignCenter);
120 124
121 // Set defaults if editing an existing connection 125 // Set defaults if editing an existing connection
122 if(!isnewaccount) 126 if(!isnewaccount)
123 { 127 {
124 connectname_l->setText(_pppdata->accname()); 128 connectname_l->setText(_pppdata->accname());
125 129
126 // insert the phone numbers into the listbox 130 // insert the phone numbers into the listbox
127 QString n = _pppdata->phonenumber(); 131 QString n = _pppdata->phonenumber();
128 QString tmp = ""; 132 QString tmp = "";
129 uint idx = 0; 133 uint idx = 0;
130 while(idx != n.length()) 134 while(idx != n.length())
131 { 135 {
132 if(n[idx] == ':') 136 if(n[idx] == ':')
133 { 137 {
134 if(tmp.length() > 0) 138 if(tmp.length() > 0)
135 numbers->insertItem(tmp); 139 numbers->insertItem(tmp);
136 tmp = ""; 140 tmp = "";
137 } 141 }
138 else 142 else
139 tmp += n[idx]; 143 tmp += n[idx];
140 idx++; 144 idx++;
141 } 145 }
142 if(tmp.length() > 0) 146 if(tmp.length() > 0)
143 numbers->insertItem(tmp); 147 numbers->insertItem(tmp);
144 148
145 } 149 }
146 150
147 numbersChanged(); 151 numbersChanged();
148 tl->activate(); 152 tl->activate();
149} 153}
150 154
151bool DialWidget::save() 155bool DialWidget::save()
152{ 156{
153 //first check to make sure that the account name is unique! 157 //first check to make sure that the account name is unique!
154 if(connectname_l->text().isEmpty() || 158 if(connectname_l->text().isEmpty() ||
155 !_pppdata->isUniqueAccname(connectname_l->text())) 159 !_pppdata->isUniqueAccname(connectname_l->text()))
156 { 160 {
157 return false; 161 return false;
158 } 162 }
159 else 163 else
160 { 164 {
161 _pppdata->setAccname(connectname_l->text()); 165 _pppdata->setAccname(connectname_l->text());
162 166
163 QString number = ""; 167 QString number = "";
164 for(uint i = 0; i < numbers->count(); i++) 168 for(uint i = 0; i < numbers->count(); i++)
165 { 169 {
166 if(i != 0) 170 if(i != 0)
167 number += ":"; 171 number += ":";
168 number += numbers->text(i); 172 number += numbers->text(i);
169 } 173 }
170 174
171 _pppdata->setPhonenumber(number); 175 _pppdata->setPhonenumber(number);
172 return true; 176 return true;
173 } 177 }
174} 178}
175 179
176 180
177void DialWidget::numbersChanged() 181void DialWidget::numbersChanged()
178{ 182{
179 int sel = numbers->currentItem(); 183 int sel = numbers->currentItem();
180 184
181 del->setEnabled(sel != -1); 185 del->setEnabled(sel != -1);
182 up->setEnabled(sel != -1 && sel != 0); 186 up->setEnabled(sel != -1 && sel != 0);
183 down->setEnabled(sel != -1 && sel != (int)numbers->count()-1); 187 down->setEnabled(sel != -1 && sel != (int)numbers->count()-1);
184} 188}
185 189
186 190
187void DialWidget::selectionChanged(int) 191void DialWidget::selectionChanged(int)
188{ 192{
189 numbersChanged(); 193 numbersChanged();
190} 194}
191 195
192 196
193void DialWidget::addNumber() 197void DialWidget::addNumber()
194{ 198{
195 PhoneNumberDialog dlg(this); 199 PhoneNumberDialog dlg(this);
196 if(dlg.exec()) 200 if(dlg.exec())
197 { 201 {
198 numbers->insertItem(dlg.phoneNumber()); 202 numbers->insertItem(dlg.phoneNumber());
199 numbersChanged(); 203 numbersChanged();
200 } 204 }
201} 205}
202 206
203 207
204void DialWidget::delNumber() 208void DialWidget::delNumber()
205{ 209{
206 if(numbers->currentItem() != -1) 210 if(numbers->currentItem() != -1)
207 { 211 {
208 numbers->removeItem(numbers->currentItem()); 212 numbers->removeItem(numbers->currentItem());
209 numbersChanged(); 213 numbersChanged();
210 } 214 }
211} 215}
212 216
213 217
214void DialWidget::upNumber() 218void DialWidget::upNumber()
215{ 219{
216 int idx = numbers->currentItem(); 220 int idx = numbers->currentItem();
217 if(idx != -1) 221 if(idx != -1)
218 { 222 {
219 QString item = numbers->text(idx); 223 QString item = numbers->text(idx);
220 numbers->removeItem(idx); 224 numbers->removeItem(idx);
221 numbers->insertItem(item, idx-1); 225 numbers->insertItem(item, idx-1);
222 numbers->setCurrentItem(idx-1); 226 numbers->setCurrentItem(idx-1);
223 numbersChanged(); 227 numbersChanged();
224 } 228 }
225} 229}
226 230
227 231
228void DialWidget::downNumber() 232void DialWidget::downNumber()
229{ 233{
230 int idx = numbers->currentItem(); 234 int idx = numbers->currentItem();
231 if(idx != -1) 235 if(idx != -1)
232 { 236 {
233 QString item = numbers->text(idx); 237 QString item = numbers->text(idx);
234 numbers->removeItem(idx); 238 numbers->removeItem(idx);
235 numbers->insertItem(item, idx+1); 239 numbers->insertItem(item, idx+1);
236 numbers->setCurrentItem(idx+1); 240 numbers->setCurrentItem(idx+1);
237 numbersChanged(); 241 numbersChanged();
238 } 242 }
239} 243}
240 244
241 245
242void DialWidget::pppdargsbutton() 246void DialWidget::pppdargsbutton()
243{ 247{
244 PPPdArguments pa(_pppdata, this); 248 PPPdArguments pa(_pppdata, this);
245 QPEApplication::execDialog( &pa ); 249 QPEApplication::execDialog( &pa );
246} 250}
247 251
248 252
249 253
250///////////////////////////////////////////////////////////////////////////// 254/////////////////////////////////////////////////////////////////////////////
251// ExecWidget 255// ExecWidget
252///////////////////////////////////////////////////////////////////////////// 256/////////////////////////////////////////////////////////////////////////////
253ExecWidget::ExecWidget(PPPData *pd, QWidget *parent, bool isnewaccount, const char *name) : 257ExecWidget::ExecWidget(PPPData *pd, QWidget *parent, bool isnewaccount, const char *name) :
254 QWidget(parent, name), _pppdata(pd) 258 QWidget(parent, name), _pppdata(pd)
255{ 259{
256 QVBoxLayout *tl = new QVBoxLayout(this, 0 );//, KDialog::spacingHint()); 260 QVBoxLayout *tl = new QVBoxLayout(this, 0 );//, KDialog::spacingHint());
257 261
258 QLabel *l = new QLabel( tr("Here you can select commands to run at certain stages of the connection. The commands are run with your real user id, so you cannot run any commands here requiring root permissions (unless, of course, you are root).<br><br>Be sure to supply the whole path to the program otherwise we might be unable to find it."), this); 262 QLabel *l = new QLabel( tr("Here you can select commands to run at certain stages of the connection. The commands are run with your real user id, so you cannot run any commands here requiring root permissions (unless, of course, you are root).<br><br>Be sure to supply the whole path to the program otherwise we might be unable to find it."), this);
259 263
260 tl->addWidget(l); 264 tl->addWidget(l);
261 tl->addStretch(1); 265 tl->addStretch(1);
262 266
263 QGridLayout *l1 = new QGridLayout(4, 2, 10); 267 QGridLayout *l1 = new QGridLayout(4, 2, 10);
264 tl->addLayout(l1); 268 tl->addLayout(l1);
265 l1->setColStretch(0, 0); 269 l1->setColStretch(0, 0);
266 l1->setColStretch(1, 1); 270 l1->setColStretch(1, 1);
267 271
268 before_connect_l = new QLabel(tr("Before connect:"), this); 272 before_connect_l = new QLabel(tr("Before connect:"), this);
269 before_connect_l->setAlignment(AlignVCenter); 273 before_connect_l->setAlignment(AlignVCenter);
270 l1->addWidget(before_connect_l, 0, 0); 274 l1->addWidget(before_connect_l, 0, 0);
271 before_connect = new QLineEdit(this); 275 before_connect = new QLineEdit(this);
272 // before_connect->setMaxLength(COMMAND_SIZE); 276 // before_connect->setMaxLength(COMMAND_SIZE);
273 l1->addWidget(before_connect, 0, 1); 277 l1->addWidget(before_connect, 0, 1);
274 QString tmp = tr("Allows you to run a program <b>before</b> a connection\n" 278 QString tmp = tr("Allows you to run a program <b>before</b> a connection\n"
275 "is established. It is called immediately before\n" 279 "is established. It is called immediately before\n"
276 "dialing has begun.\n\n" 280 "dialing has begun.\n\n"
277 "This might be useful, e.g. to stop HylaFAX blocking the\n" 281 "This might be useful, e.g. to stop HylaFAX blocking the\n"
278 "modem."); 282 "modem.");
279 283
280 QWhatsThis::add(before_connect_l,tmp); 284 QWhatsThis::add(before_connect_l,tmp);
281 QWhatsThis::add(before_connect,tmp); 285 QWhatsThis::add(before_connect,tmp);
282 286
283 command_label = new QLabel(tr("Upon connect:"), this); 287 command_label = new QLabel(tr("Upon connect:"), this);
284 command_label->setAlignment(AlignVCenter); 288 command_label->setAlignment(AlignVCenter);
285 l1->addWidget(command_label, 1, 0); 289 l1->addWidget(command_label, 1, 0);
286 command = new QLineEdit(this); 290 command = new QLineEdit(this);
287 // command->setMaxLength(COMMAND_SIZE); 291 // command->setMaxLength(COMMAND_SIZE);
288 l1->addWidget(command, 1, 1); 292 l1->addWidget(command, 1, 1);
289 tmp = tr("Allows you to run a program <b>after</b> a connection\n" 293 tmp = tr("Allows you to run a program <b>after</b> a connection\n"
290 "is established. When your program is called, all\n" 294 "is established. When your program is called, all\n"
291 "preparations for an Internet connection are finished.\n" 295 "preparations for an Internet connection are finished.\n"
292 "\n" 296 "\n"
293 "Very useful for fetching mail and news"); 297 "Very useful for fetching mail and news");
294 298
295 QWhatsThis::add(command_label,tmp); 299 QWhatsThis::add(command_label,tmp);
296 QWhatsThis::add(command,tmp); 300 QWhatsThis::add(command,tmp);
297 301
298 predisconnect_label = new QLabel(tr("Before disconnect:"), 302 predisconnect_label = new QLabel(tr("Before disconnect:"),
299 this); 303 this);
300 predisconnect_label->setAlignment(AlignVCenter); 304 predisconnect_label->setAlignment(AlignVCenter);
301 l1->addWidget(predisconnect_label, 2, 0); 305 l1->addWidget(predisconnect_label, 2, 0);
302 predisconnect = new QLineEdit(this); 306 predisconnect = new QLineEdit(this);
303 // predisconnect->setMaxLength(COMMAND_SIZE); 307 // predisconnect->setMaxLength(COMMAND_SIZE);
304 l1->addWidget(predisconnect, 2, 1); 308 l1->addWidget(predisconnect, 2, 1);
305 tmp = tr("Allows you to run a program <b>before</b> a connection\n" 309 tmp = tr("Allows you to run a program <b>before</b> a connection\n"
306 "is closed. The connection will stay open until\n" 310 "is closed. The connection will stay open until\n"
307 "the program exits."); 311 "the program exits.");
308 312
309 QWhatsThis::add(predisconnect_label,tmp); 313 QWhatsThis::add(predisconnect_label,tmp);
310 QWhatsThis::add(predisconnect,tmp); 314 QWhatsThis::add(predisconnect,tmp);
311 315
312 discommand_label = new QLabel(tr("Upon disconnect:"), 316 discommand_label = new QLabel(tr("Upon disconnect:"),
313 this); 317 this);
314 discommand_label->setAlignment(AlignVCenter); 318 discommand_label->setAlignment(AlignVCenter);
315 l1->addWidget(discommand_label, 3, 0); 319 l1->addWidget(discommand_label, 3, 0);
316 320
317 discommand = new QLineEdit(this); 321 discommand = new QLineEdit(this);
318 // discommand->setMaxLength(COMMAND_SIZE); 322 // discommand->setMaxLength(COMMAND_SIZE);
319 l1->addWidget(discommand, 3, 1); 323 l1->addWidget(discommand, 3, 1);
320 tmp = tr("Allows you to run a program <b>after</b> a connection\n" 324 tmp = tr("Allows you to run a program <b>after</b> a connection\n"
321 "has been closed."); 325 "has been closed.");
322 326
323 QWhatsThis::add(discommand_label,tmp); 327 QWhatsThis::add(discommand_label,tmp);
324 QWhatsThis::add(discommand,tmp); 328 QWhatsThis::add(discommand,tmp);
325 329
326 // extra space between entries 330 // extra space between entries
327 l1->addRowSpacing(1, 5); 331 l1->addRowSpacing(1, 5);
328 l1->addRowSpacing(3, 5); 332 l1->addRowSpacing(3, 5);
329 333
330 tl->addStretch(1); 334 tl->addStretch(1);
331 tl->activate(); 335 tl->activate();
332 336
333 // Set defaults if editing an existing connection 337 // Set defaults if editing an existing connection
334 if(!isnewaccount) 338 if(!isnewaccount)
335 { 339 {
336 before_connect->setText(_pppdata->command_before_connect()); 340 before_connect->setText(_pppdata->command_before_connect());
337 command->setText(_pppdata->command_on_connect()); 341 command->setText(_pppdata->command_on_connect());
338 discommand->setText(_pppdata->command_on_disconnect()); 342 discommand->setText(_pppdata->command_on_disconnect());
339 predisconnect->setText(_pppdata->command_before_disconnect()); 343 predisconnect->setText(_pppdata->command_before_disconnect());
340 } 344 }
341} 345}
342 346
343 347
344bool ExecWidget::save() 348bool ExecWidget::save()
345{ 349{
346 _pppdata->setCommand_before_connect(before_connect->text()); 350 _pppdata->setCommand_before_connect(before_connect->text());
347 _pppdata->setCommand_on_connect(command->text()); 351 _pppdata->setCommand_on_connect(command->text());
348 _pppdata->setCommand_before_disconnect(predisconnect->text()); 352 _pppdata->setCommand_before_disconnect(predisconnect->text());
349 _pppdata->setCommand_on_disconnect(discommand->text()); 353 _pppdata->setCommand_on_disconnect(discommand->text());
350 return true; 354 return true;
351} 355}
352 356
353 357
354 358
355///////////////////////////////////////////////////////////////////////////// 359/////////////////////////////////////////////////////////////////////////////
356// 360//
357// IPWidget 361// IPWidget
358// 362//
359///////////////////////////////////////////////////////////////////////////// 363/////////////////////////////////////////////////////////////////////////////
360IPWidget::IPWidget( PPPData *pd, QWidget *parent, bool isnewaccount, const char *name ) 364IPWidget::IPWidget( PPPData *pd, QWidget *parent, bool isnewaccount, const char *name )
361 : QWidget(parent, name), _pppdata(pd) 365 : QWidget(parent, name), _pppdata(pd)
362{ 366{
363 QVBoxLayout *topLayout = new QVBoxLayout(this); 367 QVBoxLayout *topLayout = new QVBoxLayout(this);
364 topLayout->setSpacing( 3 );//KDialog::spacingHint()); 368 topLayout->setSpacing( 3 );//KDialog::spacingHint());
365 369
366 box = new QVGroupBox(tr("Configuration"), this); 370 box = new QVGroupBox(tr("Configuration"), this);
367 // box->setInsideSpacing( 1 );//KDialog::spacingHint()); 371 // box->setInsideSpacing( 1 );//KDialog::spacingHint());
368 372
369 rb = new QButtonGroup(this); 373 rb = new QButtonGroup(this);
370 rb->hide(); 374 rb->hide();
371 connect(rb, SIGNAL(clicked(int)), 375 connect(rb, SIGNAL(clicked(int)),
372 SLOT(hitIPSelect(int))); 376 SLOT(hitIPSelect(int)));
373 377
374 dynamicadd_rb = new QRadioButton(box); 378 dynamicadd_rb = new QRadioButton(box);
375 dynamicadd_rb->setText(tr("Dynamic IP address")); 379 dynamicadd_rb->setText(tr("Dynamic IP address"));
376 QWhatsThis::add(dynamicadd_rb, 380 QWhatsThis::add(dynamicadd_rb,
377 tr("Select this option when your computer gets an\n" 381 tr("Select this option when your computer gets an\n"
378 "internet address (IP) every time a\n" 382 "internet address (IP) every time a\n"
379 "connection is made.\n" 383 "connection is made.\n"
380 "\n" 384 "\n"
381 "Almost every Internet Service Provider uses\n" 385 "Almost every Internet Service Provider uses\n"
382 "this method, so this should be turned on.")); 386 "this method, so this should be turned on."));
383 387
384 staticadd_rb = new QRadioButton(box); 388 staticadd_rb = new QRadioButton(box);
385 staticadd_rb->setText(tr("Static IP address")); 389 staticadd_rb->setText(tr("Static IP address"));
386 rb->insert(dynamicadd_rb, 0); 390 rb->insert(dynamicadd_rb, 0);
387 rb->insert(staticadd_rb, 1); 391 rb->insert(staticadd_rb, 1);
388 QWhatsThis::add(staticadd_rb, 392 QWhatsThis::add(staticadd_rb,
389 tr("Select this option when your computer has a\n" 393 tr("Select this option when your computer has a\n"
390 "fixed internet address (IP). Most computers\n" 394 "fixed internet address (IP). Most computers\n"
391 "don't have this, so you should probably select\n" 395 "don't have this, so you should probably select\n"
392 "dynamic IP addressing unless you know what you\n" 396 "dynamic IP addressing unless you know what you\n"
393 "are doing.")); 397 "are doing."));
394 398
395 QWidget *ipWidget = new QWidget(box); 399 QWidget *ipWidget = new QWidget(box);
396 QGridLayout *ipLayout = new QGridLayout(ipWidget, 2, 2); 400 QGridLayout *ipLayout = new QGridLayout(ipWidget, 2, 2);
397 ipLayout->setSpacing( 2 );//KDialog::spacingHint()); 401 ipLayout->setSpacing( 2 );//KDialog::spacingHint());
398 402
399 ipaddress_label = new QLabel(tr("IP address:"), ipWidget); 403 ipaddress_label = new QLabel(tr("IP address:"), ipWidget);
400 QString tmp = tr("If your computer has a permanent internet\n" 404 QString tmp = tr("If your computer has a permanent internet\n"
401 "address, you must supply your IP address here."); 405 "address, you must supply your IP address here.");
402 ipLayout->addWidget(ipaddress_label, 0, 0); 406 ipLayout->addWidget(ipaddress_label, 0, 0);
403 407
404 ipaddress_l = new IPLineEdit(ipWidget); 408 ipaddress_l = new IPLineEdit(ipWidget);
405 ipLayout->addWidget(ipaddress_l, 0, 1); 409 ipLayout->addWidget(ipaddress_l, 0, 1);
406 410
407 QWhatsThis::add(ipaddress_label,tmp); 411 QWhatsThis::add(ipaddress_label,tmp);
408 QWhatsThis::add(ipaddress_l,tmp); 412 QWhatsThis::add(ipaddress_l,tmp);
409 413
410 sub_label = new QLabel(tr("Subnet mask:"), ipWidget); 414 sub_label = new QLabel(tr("Subnet mask:"), ipWidget);
411 tmp = tr("<p>If your computer has a static Internet address,\n" 415 tmp = tr("<p>If your computer has a static Internet address,\n"
412 "you must supply a network mask here. In almost\n" 416 "you must supply a network mask here. In almost\n"
413 "all cases this netmask will be <b>255.255.255.0</b>,\n" 417 "all cases this netmask will be <b>255.255.255.0</b>,\n"
414 "but your mileage may vary.\n" 418 "but your mileage may vary.\n"
415 "\n" 419 "\n"
416 "If unsure, contact your Internet Service Provider"); 420 "If unsure, contact your Internet Service Provider");
417 ipLayout->addWidget(sub_label, 1, 0); 421 ipLayout->addWidget(sub_label, 1, 0);
418 422
419 subnetmask_l = new IPLineEdit(ipWidget); 423 subnetmask_l = new IPLineEdit(ipWidget);
420 ipLayout->addWidget(subnetmask_l, 1, 1); 424 ipLayout->addWidget(subnetmask_l, 1, 1);
421 425
422 QWhatsThis::add(sub_label,tmp); 426 QWhatsThis::add(sub_label,tmp);
423 QWhatsThis::add(subnetmask_l,tmp); 427 QWhatsThis::add(subnetmask_l,tmp);
424 428
425 autoname = new QCheckBox(tr("Auto-configure hostname from this IP"), this); 429 autoname = new QCheckBox(tr("Auto-configure hostname from this IP"), this);
426 autoname->setChecked(_pppdata->autoname()); 430 autoname->setChecked(_pppdata->autoname());
427 connect(autoname,SIGNAL(toggled(bool)), 431 connect(autoname,SIGNAL(toggled(bool)),
428 this,SLOT(autoname_t(bool))); 432 this,SLOT(autoname_t(bool)));
429 433
430 QWhatsThis::add(autoname, 434 QWhatsThis::add(autoname,
431 tr("<p>Whenever you connect, this reconfigures\n" 435 tr("<p>Whenever you connect, this reconfigures\n"
432 "your hostname to match the IP address you\n" 436 "your hostname to match the IP address you\n"
433 "got from the PPP server. This may be useful\n" 437 "got from the PPP server. This may be useful\n"
434 "if you need to use a protocol which depends\n" 438 "if you need to use a protocol which depends\n"
435 "on this information, but it can also cause several\n" 439 "on this information, but it can also cause several\n"
436 "<a href=\"kppp-7.html#autohostname\">problems</a>.\n" 440 "<a href=\"kppp-7.html#autohostname\">problems</a>.\n"
437 "\n" 441 "\n"
438 "Don't enable this unless you really need it.")); 442 "Don't enable this unless you really need it."));
439 443
440 topLayout->addWidget(box); 444 topLayout->addWidget(box);
441 topLayout->addWidget(autoname); 445 topLayout->addWidget(autoname);
442 topLayout->addStretch(); 446 topLayout->addStretch();
443 447
444 //load info from gpppdata 448 //load info from gpppdata
445 if(!isnewaccount) 449 if(!isnewaccount)
446 { 450 {
447 if(_pppdata->ipaddr() == "0.0.0.0" && 451 if(_pppdata->ipaddr() == "0.0.0.0" &&
448 _pppdata->subnetmask() == "0.0.0.0") 452 _pppdata->subnetmask() == "0.0.0.0")
449 { 453 {
450 dynamicadd_rb->setChecked(true); 454 dynamicadd_rb->setChecked(true);
451 hitIPSelect(0); 455 hitIPSelect(0);
452 autoname->setChecked(_pppdata->autoname()); 456 autoname->setChecked(_pppdata->autoname());
453 } 457 }
454 else 458 else
455 { 459 {
456 ipaddress_l->setText(_pppdata->ipaddr()); 460 ipaddress_l->setText(_pppdata->ipaddr());
457 subnetmask_l->setText(_pppdata->subnetmask()); 461 subnetmask_l->setText(_pppdata->subnetmask());
458 staticadd_rb->setChecked(true); 462 staticadd_rb->setChecked(true);
459 autoname->setChecked(false); 463 autoname->setChecked(false);
460 } 464 }
461 } 465 }
462 else 466 else
463 { 467 {
464 dynamicadd_rb->setChecked(true); 468 dynamicadd_rb->setChecked(true);
465 hitIPSelect(0); 469 hitIPSelect(0);
466 } 470 }
467 471
468} 472}
469 473
470void IPWidget::autoname_t(bool on) 474void IPWidget::autoname_t(bool on)
471{ 475{
472 static bool was_warned = false; 476 static bool was_warned = false;
diff --git a/noncore/settings/networksettings/wlan/wlanimp2.cpp b/noncore/settings/networksettings/wlan/wlanimp2.cpp
index 2fd97c3..0c18bcc 100644
--- a/noncore/settings/networksettings/wlan/wlanimp2.cpp
+++ b/noncore/settings/networksettings/wlan/wlanimp2.cpp
@@ -1,627 +1,627 @@
1#include "wlanimp2.h" 1#include "wlanimp2.h"
2#include "keyedit.h" 2#include "keyedit.h"
3#include "interfacesetupimp.h" 3#include "interfacesetupimp.h"
4#include "../interfaces/interface.h" 4#include "../interfaces/interface.h"
5 5
6#include <assert.h> 6#include <assert.h>
7#include <errno.h> 7#include <errno.h>
8#include <string.h> 8#include <string.h>
9 9
10/* OPIE */ 10/* OPIE */
11#include <opie2/odebug.h> 11#include <opie2/odebug.h>
12#include <opie2/oprocess.h> 12#include <opie2/oprocess.h>
13#include <opie2/onetwork.h> 13#include <opie2/onetwork.h>
14#include <opie2/opcap.h> 14#include <opie2/opcap.h>
15#include <qpe/resource.h> 15#include <opie2/oresource.h>
16using namespace Opie::Core; 16using namespace Opie::Core;
17using namespace Opie::Net; 17using namespace Opie::Net;
18 18
19/* QT */ 19/* QT */
20#include <qapplication.h> 20#include <qapplication.h>
21#include <qfile.h> 21#include <qfile.h>
22#include <qdir.h> 22#include <qdir.h>
23#include <qdialog.h> 23#include <qdialog.h>
24#include <qtextstream.h> 24#include <qtextstream.h>
25#include <qmessagebox.h> 25#include <qmessagebox.h>
26#include <qlineedit.h> 26#include <qlineedit.h>
27#include <qlabel.h> 27#include <qlabel.h>
28#include <qspinbox.h> 28#include <qspinbox.h>
29#include <qradiobutton.h> 29#include <qradiobutton.h>
30#include <qpushbutton.h> 30#include <qpushbutton.h>
31#include <qcheckbox.h> 31#include <qcheckbox.h>
32#include <qtabwidget.h> 32#include <qtabwidget.h>
33#include <qcombobox.h> 33#include <qcombobox.h>
34#include <qlistview.h> 34#include <qlistview.h>
35#include <qvbox.h> 35#include <qvbox.h>
36#include <qprogressbar.h> 36#include <qprogressbar.h>
37 37
38/* STD */ 38/* STD */
39#include <assert.h> 39#include <assert.h>
40#include <errno.h> 40#include <errno.h>
41#include <string.h> 41#include <string.h>
42 42
43#define WIRELESS_OPTS "/etc/pcmcia/wireless.opts" 43#define WIRELESS_OPTS "/etc/pcmcia/wireless.opts"
44#define PREUP "/etc/network/if-pre-up.d/wireless-tools" 44#define PREUP "/etc/network/if-pre-up.d/wireless-tools"
45 45
46/** 46/**
47 * Constructor, read in the wireless.opts file for parsing later. 47 * Constructor, read in the wireless.opts file for parsing later.
48 */ 48 */
49WLANImp::WLANImp( QWidget* parent, const char* name, Interface *i, bool modal, WFlags fl) : WLAN(parent, name, modal, fl), interface(i), currentProfile("*") { 49WLANImp::WLANImp( QWidget* parent, const char* name, Interface *i, bool modal, WFlags fl) : WLAN(parent, name, modal, fl), interface(i), currentProfile("*") {
50 interfaces = new Interfaces(); 50 interfaces = new Interfaces();
51 interfaceSetup = new InterfaceSetupImp(tabWidget, "InterfaceSetupImp", i, interfaces); 51 interfaceSetup = new InterfaceSetupImp(tabWidget, "InterfaceSetupImp", i, interfaces);
52 tabWidget->insertTab(interfaceSetup, "TCP/IP"); 52 tabWidget->insertTab(interfaceSetup, "TCP/IP");
53 53
54 // Check sanity - the existance of the wireless-tools if-pre-up script 54 // Check sanity - the existance of the wireless-tools if-pre-up script
55 QFile file(QString(PREUP)); 55 QFile file(QString(PREUP));
56 if (file.exists()) { 56 if (file.exists()) {
57 owarn << QString("WLANImp: Unable to open /etc/network/if-pre-up.d/wireless-tools") << oendl; 57 owarn << QString("WLANImp: Unable to open /etc/network/if-pre-up.d/wireless-tools") << oendl;
58 } 58 }
59 59
60 connect( rescanButton, SIGNAL( clicked() ), this, SLOT( rescanNeighbourhood() ) ); 60 connect( rescanButton, SIGNAL( clicked() ), this, SLOT( rescanNeighbourhood() ) );
61 connect( netView, SIGNAL( clicked(QListViewItem*) ), this, SLOT( selectNetwork(QListViewItem*) ) ); 61 connect( netView, SIGNAL( clicked(QListViewItem*) ), this, SLOT( selectNetwork(QListViewItem*) ) );
62 netView->setColumnAlignment( col_chn, AlignCenter ); 62 netView->setColumnAlignment( col_chn, AlignCenter );
63 netView->setItemMargin( 3 ); 63 netView->setItemMargin( 3 );
64 netView->setAllColumnsShowFocus( true ); 64 netView->setAllColumnsShowFocus( true );
65 65
66} 66}
67 67
68WLANImp::~WLANImp() { 68WLANImp::~WLANImp() {
69//FIXME: delete interfaces; 69//FIXME: delete interfaces;
70} 70}
71 71
72/** 72/**
73 * Change the profile for both wireless settings and network settings. 73 * Change the profile for both wireless settings and network settings.
74 */ 74 */
75void WLANImp::setProfile(const QString &profile){ 75void WLANImp::setProfile(const QString &profile){
76 interfaceSetup->setProfile(profile); 76 interfaceSetup->setProfile(profile);
77 parseOpts(); 77 parseOpts();
78} 78}
79 79
80void WLANImp::parseOpts() { 80void WLANImp::parseOpts() {
81 bool error; 81 bool error;
82 QString opt,key; 82 QString opt,key;
83 83
84 if (! interfaces->isInterfaceSet()) 84 if (! interfaces->isInterfaceSet())
85 return; 85 return;
86 86
87 opt = interfaces->getInterfaceOption("wireless_essid", error); 87 opt = interfaces->getInterfaceOption("wireless_essid", error);
88 if(opt == "any" || opt == "off" || opt.isNull()){ 88 if(opt == "any" || opt == "off" || opt.isNull()){
89 essid->setEditText("any"); 89 essid->setEditText("any");
90 } else { 90 } else {
91 essid->setEditText(opt); 91 essid->setEditText(opt);
92 } 92 }
93 93
94 opt = interfaces->getInterfaceOption("wireless_mode", error).simplifyWhiteSpace(); 94 opt = interfaces->getInterfaceOption("wireless_mode", error).simplifyWhiteSpace();
95 95
96 for ( int i = 0; i < mode->count(); i++) 96 for ( int i = 0; i < mode->count(); i++)
97 if ( mode->text( i ) == opt ) mode->setCurrentItem( i ); 97 if ( mode->text( i ) == opt ) mode->setCurrentItem( i );
98 98
99 opt = interfaces->getInterfaceOption("wireless_ap", error).simplifyWhiteSpace(); 99 opt = interfaces->getInterfaceOption("wireless_ap", error).simplifyWhiteSpace();
100 if (! opt.isNull()) { 100 if (! opt.isNull()) {
101 specifyAp->setChecked(true); 101 specifyAp->setChecked(true);
102 macEdit->setText(opt); 102 macEdit->setText(opt);
103 } 103 }
104 104
105 opt = interfaces->getInterfaceOption("wireless_channel", error).simplifyWhiteSpace(); 105 opt = interfaces->getInterfaceOption("wireless_channel", error).simplifyWhiteSpace();
106 if (! opt.isNull()) { 106 if (! opt.isNull()) {
107 specifyChan->setChecked(true); 107 specifyChan->setChecked(true);
108 networkChannel->setValue(opt.toInt()); 108 networkChannel->setValue(opt.toInt());
109 } 109 }
110 110
111 opt = interfaces->getInterfaceOption("wireless_type", error).simplifyWhiteSpace(); 111 opt = interfaces->getInterfaceOption("wireless_type", error).simplifyWhiteSpace();
112 112
113 if ( opt == "wlan-ng") { 113 if ( opt == "wlan-ng") {
114 114
115 //FIXME:Handle wlan_ng_priv_genstr 115 //FIXME:Handle wlan_ng_priv_genstr
116 116
117 // get default key_id 117 // get default key_id
118 opt = interfaces->getInterfaceOption("wlan_ng_default_key_id", error).simplifyWhiteSpace(); 118 opt = interfaces->getInterfaceOption("wlan_ng_default_key_id", error).simplifyWhiteSpace();
119 119
120 if (opt == "0") 120 if (opt == "0")
121 keyRadio0->setChecked(true); 121 keyRadio0->setChecked(true);
122 if (opt == "1") 122 if (opt == "1")
123 keyRadio1->setChecked(true); 123 keyRadio1->setChecked(true);
124 if (opt == "2") 124 if (opt == "2")
125 keyRadio2->setChecked(true); 125 keyRadio2->setChecked(true);
126 if (opt == "3") 126 if (opt == "3")
127 keyRadio3->setChecked(true); 127 keyRadio3->setChecked(true);
128 128
129 // get key0 129 // get key0
130 key = interfaces->getInterfaceOption("wlan_ng_key0", error).simplifyWhiteSpace(); 130 key = interfaces->getInterfaceOption("wlan_ng_key0", error).simplifyWhiteSpace();
131 key.replace(QString(":"),QString("")); 131 key.replace(QString(":"),QString(""));
132 keyLineEdit0->setText(key); 132 keyLineEdit0->setText(key);
133 133
134 // get key1 134 // get key1
135 key = interfaces->getInterfaceOption("wlan_ng_key1", error).simplifyWhiteSpace(); 135 key = interfaces->getInterfaceOption("wlan_ng_key1", error).simplifyWhiteSpace();
136 key.replace(QString(":"),QString("")); 136 key.replace(QString(":"),QString(""));
137 keyLineEdit1->setText(key); 137 keyLineEdit1->setText(key);
138 138
139 // get key2 139 // get key2
140 key = interfaces->getInterfaceOption("wlan_ng_key2", error).simplifyWhiteSpace(); 140 key = interfaces->getInterfaceOption("wlan_ng_key2", error).simplifyWhiteSpace();
141 key.replace(QString(":"),QString("")); 141 key.replace(QString(":"),QString(""));
142 keyLineEdit2->setText(key); 142 keyLineEdit2->setText(key);
143 143
144 // get key3 144 // get key3
145 key = interfaces->getInterfaceOption("wlan_ng_key3", error).simplifyWhiteSpace(); 145 key = interfaces->getInterfaceOption("wlan_ng_key3", error).simplifyWhiteSpace();
146 key.replace(QString(":"),QString("")); 146 key.replace(QString(":"),QString(""));
147 keyLineEdit3->setText(key); 147 keyLineEdit3->setText(key);
148 148
149 opt = interfaces->getInterfaceOption("wireless_enc", error).simplifyWhiteSpace(); 149 opt = interfaces->getInterfaceOption("wireless_enc", error).simplifyWhiteSpace();
150 150
151 // encryption on? 151 // encryption on?
152 if(opt == "on"){ 152 if(opt == "on"){
153 wepEnabled->setChecked(true); 153 wepEnabled->setChecked(true);
154 } else { 154 } else {
155 wepEnabled->setChecked(false); 155 wepEnabled->setChecked(false);
156 } 156 }
157 157
158 opt = interfaces->getInterfaceOption("wireless_keymode", error).simplifyWhiteSpace(); 158 opt = interfaces->getInterfaceOption("wireless_keymode", error).simplifyWhiteSpace();
159 159
160 if(opt == "restricted"){ 160 if(opt == "restricted"){
161 // restricted mode, only accept encrypted packets 161 // restricted mode, only accept encrypted packets
162 rejectNonEnc->setChecked(true); 162 rejectNonEnc->setChecked(true);
163 } 163 }
164 } 164 }
165 else { 165 else {
166 opt = interfaces->getInterfaceOption("wireless_key", error).simplifyWhiteSpace(); 166 opt = interfaces->getInterfaceOption("wireless_key", error).simplifyWhiteSpace();
167 167
168 parseKeyStr(opt); 168 parseKeyStr(opt);
169 } 169 }
170} 170}
171 171
172void WLANImp::parseKeyStr(QString keystr) { 172void WLANImp::parseKeyStr(QString keystr) {
173 int index = 1; 173 int index = 1;
174 QString key; 174 QString key;
175 QStringList keys = QStringList::split(QRegExp("\\s+"), keystr); 175 QStringList keys = QStringList::split(QRegExp("\\s+"), keystr);
176 int enc = -1; // encryption state 176 int enc = -1; // encryption state
177 177
178 for (QStringList::Iterator it = keys.begin(); it != keys.end(); ++it) { 178 for (QStringList::Iterator it = keys.begin(); it != keys.end(); ++it) {
179 if ((*it).left(3) == "off") { 179 if ((*it).left(3) == "off") {
180 // encryption disabled 180 // encryption disabled
181 enc = 0; 181 enc = 0;
182 } else if ((*it).left(2) == "on") { 182 } else if ((*it).left(2) == "on") {
183 // encryption enabled 183 // encryption enabled
184 enc = 1; 184 enc = 1;
185 } else if ((*it).left(4) == "open") { 185 } else if ((*it).left(4) == "open") {
186 // open mode, accept non encrypted packets 186 // open mode, accept non encrypted packets
187 acceptNonEnc->setChecked(true); 187 acceptNonEnc->setChecked(true);
188 } else if ((*it).left(10) == "restricted") { 188 } else if ((*it).left(10) == "restricted") {
189 // restricted mode, only accept encrypted packets 189 // restricted mode, only accept encrypted packets
190 rejectNonEnc->setChecked(true); 190 rejectNonEnc->setChecked(true);
191 } else if ((*it).left(3) == "key") { 191 } else if ((*it).left(3) == "key") {
192 // new set of options 192 // new set of options
193 } else if ((*it).left(1) == "[") { 193 } else if ((*it).left(1) == "[") {
194 index = (*it).mid(1, 1).toInt(); 194 index = (*it).mid(1, 1).toInt();
195 // switch current key to index 195 // switch current key to index
196 switch (index) { 196 switch (index) {
197 case 1: 197 case 1:
198 keyRadio0->setChecked(true); 198 keyRadio0->setChecked(true);
199 break; 199 break;
200 case 2: 200 case 2:
201 keyRadio1->setChecked(true); 201 keyRadio1->setChecked(true);
202 break; 202 break;
203 case 3: 203 case 3:
204 keyRadio2->setChecked(true); 204 keyRadio2->setChecked(true);
205 break; 205 break;
206 case 4: 206 case 4:
207 keyRadio3->setChecked(true); 207 keyRadio3->setChecked(true);
208 break; 208 break;
209 } 209 }
210 } else { 210 } else {
211 // key 211 // key
212 key = (*it); 212 key = (*it);
213 } 213 }
214 if (! key.isNull()) { 214 if (! key.isNull()) {
215 if (enc == -1) 215 if (enc == -1)
216 enc = 1; 216 enc = 1;
217 QStringList::Iterator next = ++it; 217 QStringList::Iterator next = ++it;
218 if (it == keys.end()) { 218 if (it == keys.end()) {
219 break; 219 break;
220 } 220 }
221 if ((*(next)).left(1) == "[") { 221 if ((*(next)).left(1) == "[") {
222 // set key at index 222 // set key at index
223 index = (*(next)).mid(1, 1).toInt(); 223 index = (*(next)).mid(1, 1).toInt();
224 } else { 224 } else {
225 index = 1; 225 index = 1;
226 } 226 }
227 switch (index) { 227 switch (index) {
228 case 1: 228 case 1:
229 keyLineEdit0->setText(key); 229 keyLineEdit0->setText(key);
230 break; 230 break;
231 case 2: 231 case 2:
232 keyLineEdit1->setText(key); 232 keyLineEdit1->setText(key);
233 break; 233 break;
234 case 3: 234 case 3:
235 keyLineEdit2->setText(key); 235 keyLineEdit2->setText(key);
236 break; 236 break;
237 case 4: 237 case 4:
238 keyLineEdit3->setText(key); 238 keyLineEdit3->setText(key);
239 break; 239 break;
240 } 240 }
241 key = QString::null; 241 key = QString::null;
242 } 242 }
243 } 243 }
244 if (enc == 1) { 244 if (enc == 1) {
245 wepEnabled->setChecked(true); 245 wepEnabled->setChecked(true);
246 } else { 246 } else {
247 wepEnabled->setChecked(false); 247 wepEnabled->setChecked(false);
248 } 248 }
249} 249}
250 250
251/** 251/**
252 * Check to see if the current config is valid 252 * Check to see if the current config is valid
253 * Save interfaces 253 * Save interfaces
254 */ 254 */
255void WLANImp::accept() { 255void WLANImp::accept() {
256 if (wepEnabled->isChecked()) { 256 if (wepEnabled->isChecked()) {
257 if ((keyRadio0->isChecked() && keyLineEdit0->text().isEmpty()) || 257 if ((keyRadio0->isChecked() && keyLineEdit0->text().isEmpty()) ||
258 (keyRadio1->isChecked() && keyLineEdit1->text().isEmpty()) || 258 (keyRadio1->isChecked() && keyLineEdit1->text().isEmpty()) ||
259 (keyRadio2->isChecked() && keyLineEdit2->text().isEmpty()) || 259 (keyRadio2->isChecked() && keyLineEdit2->text().isEmpty()) ||
260 (keyRadio3->isChecked() && keyLineEdit3->text().isEmpty())) { 260 (keyRadio3->isChecked() && keyLineEdit3->text().isEmpty())) {
261 QMessageBox::information(this, "Error", "Please enter a WEP key.", QMessageBox::Ok); 261 QMessageBox::information(this, "Error", "Please enter a WEP key.", QMessageBox::Ok);
262 return; 262 return;
263 } 263 }
264 } 264 }
265 265
266 if (essid->currentText().isEmpty()) { 266 if (essid->currentText().isEmpty()) {
267 QMessageBox::information(this, "Error", "Please select/enter an ESSID.", QMessageBox::Ok); 267 QMessageBox::information(this, "Error", "Please select/enter an ESSID.", QMessageBox::Ok);
268 return; 268 return;
269 } 269 }
270 270
271 if (specifyAp->isChecked() && macEdit->text().isEmpty()) { 271 if (specifyAp->isChecked() && macEdit->text().isEmpty()) {
272 QMessageBox::information(this, "Error", "Please enter the MAC address of the Access Point.", QMessageBox::Ok); 272 QMessageBox::information(this, "Error", "Please enter the MAC address of the Access Point.", QMessageBox::Ok);
273 return; 273 return;
274 } 274 }
275 275
276 // Try to save the interfaces settings. 276 // Try to save the interfaces settings.
277 writeOpts(); 277 writeOpts();
278 278
279 // Close out the dialog 279 // Close out the dialog
280// FIXME: QDialog::accept(); 280// FIXME: QDialog::accept();
281} 281}
282 282
283QString WLANImp::formatKey(QString input) 283QString WLANImp::formatKey(QString input)
284{ 284{
285 int len,r=0; 285 int len,r=0;
286 286
287 len = input.length(); 287 len = input.length();
288 288
289 if (!len) 289 if (!len)
290 return input; 290 return input;
291 291
292 for(int i=1;i<len/2;i++) 292 for(int i=1;i<len/2;i++)
293 { 293 {
294 input.insert(r+i*2,QString(":")); 294 input.insert(r+i*2,QString(":"));
295 r++; 295 r++;
296 } 296 }
297 297
298 return input; 298 return input;
299} 299}
300 300
301void WLANImp::writeOpts() { 301void WLANImp::writeOpts() {
302 QString para, devicetype; 302 QString para, devicetype;
303 303
304 // eh can't really do anything about it other then return. :-D 304 // eh can't really do anything about it other then return. :-D
305 if(!interfaces->isInterfaceSet()){ 305 if(!interfaces->isInterfaceSet()){
306 QMessageBox::warning(0,"Inface not set","should not happen!!!"); 306 QMessageBox::warning(0,"Inface not set","should not happen!!!");
307 return; 307 return;
308 } 308 }
309 bool error = false; 309 bool error = false;
310 310
311 odebug << "setting wlan interface " << interfaces->getInterfaceName( error ).latin1() << "" << oendl; 311 odebug << "setting wlan interface " << interfaces->getInterfaceName( error ).latin1() << "" << oendl;
312 312
313 if (error) QMessageBox::warning(0,"Inface not set","should not happen!!!"); 313 if (error) QMessageBox::warning(0,"Inface not set","should not happen!!!");
314 314
315 interfaces->setInterfaceOption(QString("wireless_mode"), mode->currentText()); 315 interfaces->setInterfaceOption(QString("wireless_mode"), mode->currentText());
316 interfaces->setInterfaceOption(QString("wireless_essid"), essid->currentText()); 316 interfaces->setInterfaceOption(QString("wireless_essid"), essid->currentText());
317 317
318 if (specifyAp->isChecked()) { 318 if (specifyAp->isChecked()) {
319 interfaces->setInterfaceOption(QString("wireless_ap"), macEdit->text()); 319 interfaces->setInterfaceOption(QString("wireless_ap"), macEdit->text());
320 } else { 320 } else {
321 interfaces->removeInterfaceOption(QString("wireless_ap")); 321 interfaces->removeInterfaceOption(QString("wireless_ap"));
322 } 322 }
323 323
324 if (specifyChan->isChecked()) { 324 if (specifyChan->isChecked()) {
325 interfaces->setInterfaceOption(QString("wireless_channel"), networkChannel->text()); 325 interfaces->setInterfaceOption(QString("wireless_channel"), networkChannel->text());
326 } else { 326 } else {
327 interfaces->removeInterfaceOption(QString("wireless_channel")); 327 interfaces->removeInterfaceOption(QString("wireless_channel"));
328 } 328 }
329 329
330 devicetype = interfaces->getInterfaceOption("wireless_type", error).simplifyWhiteSpace(); 330 devicetype = interfaces->getInterfaceOption("wireless_type", error).simplifyWhiteSpace();
331 331
332 if ( devicetype == "wlan-ng") { 332 if ( devicetype == "wlan-ng") {
333 333
334 // wlan-ng style 334 // wlan-ng style
335 interfaces->removeInterfaceOption(QString("wireless_key")); 335 interfaces->removeInterfaceOption(QString("wireless_key"));
336 336
337 if (wepEnabled->isChecked()) { 337 if (wepEnabled->isChecked()) {
338 338
339 interfaces->setInterfaceOption(QString("wireless_enc"),"on"); 339 interfaces->setInterfaceOption(QString("wireless_enc"),"on");
340 340
341 if (! keyLineEdit0->text().isNull()) { 341 if (! keyLineEdit0->text().isNull()) {
342 interfaces->setInterfaceOption(QString("wlan_ng_key0"), formatKey(keyLineEdit0->text())); 342 interfaces->setInterfaceOption(QString("wlan_ng_key0"), formatKey(keyLineEdit0->text()));
343 } else 343 } else
344 interfaces->removeInterfaceOption(QString("wlan_ng_key0")); 344 interfaces->removeInterfaceOption(QString("wlan_ng_key0"));
345 if (! keyLineEdit1->text().isNull()) { 345 if (! keyLineEdit1->text().isNull()) {
346 interfaces->setInterfaceOption(QString("wlan_ng_key1"), formatKey(keyLineEdit1->text())); 346 interfaces->setInterfaceOption(QString("wlan_ng_key1"), formatKey(keyLineEdit1->text()));
347 } else 347 } else
348 interfaces->removeInterfaceOption(QString("wlan_ng_key1")); 348 interfaces->removeInterfaceOption(QString("wlan_ng_key1"));
349 if (! keyLineEdit2->text().isNull()) { 349 if (! keyLineEdit2->text().isNull()) {
350 interfaces->setInterfaceOption(QString("wlan_ng_key2"), formatKey(keyLineEdit2->text())); 350 interfaces->setInterfaceOption(QString("wlan_ng_key2"), formatKey(keyLineEdit2->text()));
351 } else 351 } else
352 interfaces->removeInterfaceOption(QString("wlan_ng_key2")); 352 interfaces->removeInterfaceOption(QString("wlan_ng_key2"));
353 if (! keyLineEdit3->text().isNull()) { 353 if (! keyLineEdit3->text().isNull()) {
354 interfaces->setInterfaceOption(QString("wlan_ng_key3"), formatKey(keyLineEdit3->text())); 354 interfaces->setInterfaceOption(QString("wlan_ng_key3"), formatKey(keyLineEdit3->text()));
355 } else 355 } else
356 interfaces->removeInterfaceOption(QString("wlan_ng_key3")); 356 interfaces->removeInterfaceOption(QString("wlan_ng_key3"));
357 357
358 if (acceptNonEnc->isChecked()) 358 if (acceptNonEnc->isChecked())
359 interfaces->removeInterfaceOption(QString("wireless_keymode")); 359 interfaces->removeInterfaceOption(QString("wireless_keymode"));
360 else 360 else
361 interfaces->setInterfaceOption(QString("wireless_keymode"),"restricted"); 361 interfaces->setInterfaceOption(QString("wireless_keymode"),"restricted");
362 362
363 para = ""; 363 para = "";
364 if (keyRadio0->isChecked()) { 364 if (keyRadio0->isChecked()) {
365 para = "0"; 365 para = "0";
366 } else if (keyRadio1->isChecked()) { 366 } else if (keyRadio1->isChecked()) {
367 para = "1"; 367 para = "1";
368 } else if (keyRadio2->isChecked()) { 368 } else if (keyRadio2->isChecked()) {
369 para = "2"; 369 para = "2";
370 } else if (keyRadio3->isChecked()) { 370 } else if (keyRadio3->isChecked()) {
371 para = "3"; 371 para = "3";
372 } 372 }
373 373
374 interfaces->setInterfaceOption(QString("wlan_ng_default_key_id"), para); 374 interfaces->setInterfaceOption(QString("wlan_ng_default_key_id"), para);
375 375
376 } else { 376 } else {
377 // No wep, remove all previous keys 377 // No wep, remove all previous keys
378 interfaces->removeInterfaceOption(QString("wireless_enc")); 378 interfaces->removeInterfaceOption(QString("wireless_enc"));
379 interfaces->removeInterfaceOption(QString("wlan_ng_default_key_id")); 379 interfaces->removeInterfaceOption(QString("wlan_ng_default_key_id"));
380 interfaces->removeInterfaceOption(QString("wlan_ng_key0")); 380 interfaces->removeInterfaceOption(QString("wlan_ng_key0"));
381 interfaces->removeInterfaceOption(QString("wlan_ng_key1")); 381 interfaces->removeInterfaceOption(QString("wlan_ng_key1"));
382 interfaces->removeInterfaceOption(QString("wlan_ng_key2")); 382 interfaces->removeInterfaceOption(QString("wlan_ng_key2"));
383 interfaces->removeInterfaceOption(QString("wlan_ng_key3")); 383 interfaces->removeInterfaceOption(QString("wlan_ng_key3"));
384 } 384 }
385 385
386 } else { 386 } else {
387 // This is the old style 387 // This is the old style
388 if (wepEnabled->isChecked()) { 388 if (wepEnabled->isChecked()) {
389 QStringList keyList; 389 QStringList keyList;
390 390
391 if (! keyLineEdit0->text().isNull()) { 391 if (! keyLineEdit0->text().isNull()) {
392 keyList += keyLineEdit0->text(); 392 keyList += keyLineEdit0->text();
393 keyList += "[1]"; 393 keyList += "[1]";
394 } //else 394 } //else
395 if (! keyLineEdit1->text().isNull()) { 395 if (! keyLineEdit1->text().isNull()) {
396 keyList += keyLineEdit1->text(); 396 keyList += keyLineEdit1->text();
397 keyList += "[2]"; 397 keyList += "[2]";
398 } //else 398 } //else
399 if (! keyLineEdit2->text().isNull()) { 399 if (! keyLineEdit2->text().isNull()) {
400 keyList += keyLineEdit2->text(); 400 keyList += keyLineEdit2->text();
401 keyList += "[3]"; 401 keyList += "[3]";
402 } //else 402 } //else
403 if (! keyLineEdit3->text().isNull()) { 403 if (! keyLineEdit3->text().isNull()) {
404 keyList += keyLineEdit3->text(); 404 keyList += keyLineEdit3->text();
405 keyList += "[4]"; 405 keyList += "[4]";
406 } 406 }
407 if (acceptNonEnc->isChecked()) { 407 if (acceptNonEnc->isChecked()) {
408 keyList += "open"; 408 keyList += "open";
409 } else { 409 } else {
410 keyList += "restricted"; 410 keyList += "restricted";
411 } 411 }
412 412
413 keyList += "key"; 413 keyList += "key";
414 if (keyRadio0->isChecked()) { 414 if (keyRadio0->isChecked()) {
415 keyList += "[1]"; 415 keyList += "[1]";
416 } else if (keyRadio1->isChecked()) { 416 } else if (keyRadio1->isChecked()) {
417 keyList += "[2]"; 417 keyList += "[2]";
418 } else if (keyRadio2->isChecked()) { 418 } else if (keyRadio2->isChecked()) {
419 keyList += "[3]"; 419 keyList += "[3]";
420 } else if (keyRadio3->isChecked()) { 420 } else if (keyRadio3->isChecked()) {
421 keyList += "[4]"; 421 keyList += "[4]";
422 } 422 }
423 interfaces->setInterfaceOption(QString("wireless_key"), keyList.join(QString(" "))); 423 interfaces->setInterfaceOption(QString("wireless_key"), keyList.join(QString(" ")));
424 } else { 424 } else {
425 interfaces->removeInterfaceOption(QString("wireless_key")); 425 interfaces->removeInterfaceOption(QString("wireless_key"));
426 } 426 }
427 interfaces->removeInterfaceOption(QString("wireless_enc")); 427 interfaces->removeInterfaceOption(QString("wireless_enc"));
428 } 428 }
429 429
430 if(!interfaceSetup->saveChanges()) 430 if(!interfaceSetup->saveChanges())
431 return; 431 return;
432 432
433 QDialog::accept(); 433 QDialog::accept();
434} 434}
435 435
436/* 436/*
437 * Scan for possible wireless networks around... 437 * Scan for possible wireless networks around...
438 * ... powered by Wellenreiter II technology (C) Michael 'Mickey' Lauer <mickeyl@handhelds.org> 438 * ... powered by Wellenreiter II technology (C) Michael 'Mickey' Lauer <mickeyl@handhelds.org>
439 */ 439 */
440 440
441void WLANImp::rescanNeighbourhood() 441void WLANImp::rescanNeighbourhood()
442{ 442{
443 QString name = interface->getInterfaceName(); 443 QString name = interface->getInterfaceName();
444 odebug << "rescanNeighbourhood via '" << name << "'" << oendl; 444 odebug << "rescanNeighbourhood via '" << name << "'" << oendl;
445 445
446 OWirelessNetworkInterface* wiface = static_cast<OWirelessNetworkInterface*>( ONetwork::instance()->interface( name ) ); 446 OWirelessNetworkInterface* wiface = static_cast<OWirelessNetworkInterface*>( ONetwork::instance()->interface( name ) );
447 assert( wiface ); 447 assert( wiface );
448 448
449 // try to guess device type 449 // try to guess device type
450 QString devicetype; 450 QString devicetype;
451 QFile m( "/proc/modules" ); 451 QFile m( "/proc/modules" );
452 if ( m.open( IO_ReadOnly ) ) 452 if ( m.open( IO_ReadOnly ) )
453 { 453 {
454 QString line; 454 QString line;
455 QTextStream modules( &m ); 455 QTextStream modules( &m );
456 while( !modules.atEnd() && !devicetype ) 456 while( !modules.atEnd() && !devicetype )
457 { 457 {
458 modules >> line; 458 modules >> line;
459 if ( line.contains( "cisco" ) ) devicetype = "cisco"; 459 if ( line.contains( "cisco" ) ) devicetype = "cisco";
460 else if ( line.contains( "hostap" ) ) devicetype = "hostap"; 460 else if ( line.contains( "hostap" ) ) devicetype = "hostap";
461 else if ( line.contains( "prism" ) ) devicetype = "wlan-ng"; /* puke */ 461 else if ( line.contains( "prism" ) ) devicetype = "wlan-ng"; /* puke */
462 else if ( line.contains( "orinoco" ) ) devicetype = "orinoco"; 462 else if ( line.contains( "orinoco" ) ) devicetype = "orinoco";
463 } 463 }
464 } 464 }
465 if ( devicetype.isEmpty() ) 465 if ( devicetype.isEmpty() )
466 { 466 {
467 owarn << "rescanNeighbourhood(): couldn't guess device type :(" << oendl; 467 owarn << "rescanNeighbourhood(): couldn't guess device type :(" << oendl;
468 return; 468 return;
469 } 469 }
470 else 470 else
471 { 471 {
472 odebug << "rescanNeighbourhood(): device type seems to be '" << devicetype << "'" << oendl; 472 odebug << "rescanNeighbourhood(): device type seems to be '" << devicetype << "'" << oendl;
473 } 473 }
474 474
475 // configure interface to receive 802.11 management frames 475 // configure interface to receive 802.11 management frames
476 476
477 wiface->setUp( true ); 477 wiface->setUp( true );
478 wiface->setPromiscuousMode( true ); 478 wiface->setPromiscuousMode( true );
479 479
480 if ( devicetype == "cisco" ) wiface->setMonitoring( new OCiscoMonitoringInterface( wiface, false ) ); 480 if ( devicetype == "cisco" ) wiface->setMonitoring( new OCiscoMonitoringInterface( wiface, false ) );
481 else if ( devicetype == "hostap" ) wiface->setMonitoring( new OHostAPMonitoringInterface( wiface, false ) ); 481 else if ( devicetype == "hostap" ) wiface->setMonitoring( new OHostAPMonitoringInterface( wiface, false ) );
482 else if ( devicetype == "wlan-ng" ) wiface->setMonitoring( new OWlanNGMonitoringInterface( wiface, false ) ); 482 else if ( devicetype == "wlan-ng" ) wiface->setMonitoring( new OWlanNGMonitoringInterface( wiface, false ) );
483 else if ( devicetype == "orinoco" ) wiface->setMonitoring( new OOrinocoMonitoringInterface( wiface, false ) ); 483 else if ( devicetype == "orinoco" ) wiface->setMonitoring( new OOrinocoMonitoringInterface( wiface, false ) );
484 else 484 else
485 { 485 {
486 odebug << "rescanNeighbourhood(): unsupported device type for monitoring :(" << oendl; 486 odebug << "rescanNeighbourhood(): unsupported device type for monitoring :(" << oendl;
487 return; 487 return;
488 } 488 }
489 489
490 wiface->setMode( "monitor" ); 490 wiface->setMode( "monitor" );
491 if ( wiface->mode() != "monitor" ) 491 if ( wiface->mode() != "monitor" )
492 { 492 {
493 owarn << "rescanNeighbourhood(): Unable to bring device into monitor mode (" << strerror( errno ) << ")." << oendl; 493 owarn << "rescanNeighbourhood(): Unable to bring device into monitor mode (" << strerror( errno ) << ")." << oendl;
494 return; 494 return;
495 } 495 }
496 496
497 // open a packet capturer 497 // open a packet capturer
498 OPacketCapturer* cap = new OPacketCapturer(); 498 OPacketCapturer* cap = new OPacketCapturer();
499 cap->open( name ); 499 cap->open( name );
500 if ( !cap->isOpen() ) 500 if ( !cap->isOpen() )
501 { 501 {
502 owarn << "rescanNeighbourhood(): Unable to open libpcap (" << strerror( errno ) << ")." << oendl; 502 owarn << "rescanNeighbourhood(): Unable to open libpcap (" << strerror( errno ) << ")." << oendl;
503 return; 503 return;
504 } 504 }
505 505
506 // disable button and display splash screen 506 // disable button and display splash screen
507 rescanButton->setEnabled( false ); 507 rescanButton->setEnabled( false );
508 QFrame* splash = new QFrame( this, "splash", false, WStyle_StaysOnTop | WStyle_DialogBorder | WStyle_Customize ); 508 QFrame* splash = new QFrame( this, "splash", false, WStyle_StaysOnTop | WStyle_DialogBorder | WStyle_Customize );
509 splash->setLineWidth( 2 ); 509 splash->setLineWidth( 2 );
510 splash->setFrameStyle( QFrame::Panel | QFrame::Raised ); 510 splash->setFrameStyle( QFrame::Panel | QFrame::Raised );
511 QVBoxLayout* vbox = new QVBoxLayout( splash, 4, 4 ); 511 QVBoxLayout* vbox = new QVBoxLayout( splash, 4, 4 );
512 QLabel* lab = new QLabel( "<center><b>Scanning...</b><br>Please Wait...</center>", splash ); 512 QLabel* lab = new QLabel( "<center><b>Scanning...</b><br>Please Wait...</center>", splash );
513 QProgressBar* pb = new QProgressBar( wiface->channels(), splash ); 513 QProgressBar* pb = new QProgressBar( wiface->channels(), splash );
514 vbox->addWidget( lab ); 514 vbox->addWidget( lab );
515 vbox->addWidget( pb ); 515 vbox->addWidget( pb );
516 pb->setCenterIndicator( true ); 516 pb->setCenterIndicator( true );
517 pb->setFixedHeight( pb->sizeHint().height() ); 517 pb->setFixedHeight( pb->sizeHint().height() );
518 QWidget* widgetDesktop = qApp->desktop(); 518 QWidget* widgetDesktop = qApp->desktop();
519 int dw = widgetDesktop->width(); 519 int dw = widgetDesktop->width();
520 int dh = widgetDesktop->height(); 520 int dh = widgetDesktop->height();
521 int pw = vbox->sizeHint().width(); 521 int pw = vbox->sizeHint().width();
522 int ph = vbox->sizeHint().height(); 522 int ph = vbox->sizeHint().height();
523 splash->setGeometry((dw-pw)/2,(dh-ph)/2,pw,ph); 523 splash->setGeometry((dw-pw)/2,(dh-ph)/2,pw,ph);
524 splash->show(); 524 splash->show();
525 splash->raise(); 525 splash->raise();
526 qApp->processEvents(); 526 qApp->processEvents();
527 527
528 // set capturer to non-blocking mode 528 // set capturer to non-blocking mode
529 cap->setBlocking( false ); 529 cap->setBlocking( false );
530 530
531 for ( int i = 1; i <= wiface->channels(); ++i ) 531 for ( int i = 1; i <= wiface->channels(); ++i )
532 { 532 {
533 wiface->setChannel( i ); 533 wiface->setChannel( i );
534 pb->setProgress( i ); 534 pb->setProgress( i );
535 qApp->processEvents(); 535 qApp->processEvents();
536 odebug << "rescanNeighbourhood(): listening on channel " << i << "..." << oendl; 536 odebug << "rescanNeighbourhood(): listening on channel " << i << "..." << oendl;
537 OPacket* p = cap->next( 1000 ); 537 OPacket* p = cap->next( 1000 );
538 if ( !p ) 538 if ( !p )
539 { 539 {
540 odebug << "rescanNeighbourhood(): nothing received on channel " << i << "" << oendl; 540 odebug << "rescanNeighbourhood(): nothing received on channel " << i << "" << oendl;
541 } 541 }
542 else 542 else
543 { 543 {
544 odebug << "rescanNeighbourhood(): TADAA - something came in on channel " << i << "" << oendl; 544 odebug << "rescanNeighbourhood(): TADAA - something came in on channel " << i << "" << oendl;
545 handlePacket( p ); 545 handlePacket( p );
546 } 546 }
547 } 547 }
548 548
549 cap->close(); 549 cap->close();
550 wiface->setMode( "managed" ); // TODO: use previous mode 550 wiface->setMode( "managed" ); // TODO: use previous mode
551 wiface->setPromiscuousMode( false ); 551 wiface->setPromiscuousMode( false );
552 552
553 // hide splash screen and reenable button 553 // hide splash screen and reenable button
554 splash->hide(); 554 splash->hide();
555 delete splash; 555 delete splash;
556 rescanButton->setEnabled( true ); 556 rescanButton->setEnabled( true );
557} 557}
558 558
559void WLANImp::handlePacket( OPacket* p ) 559void WLANImp::handlePacket( OPacket* p )
560{ 560{
561 561
562 // check if we received a beacon frame 562 // check if we received a beacon frame
563 OWaveLanManagementPacket* beacon = static_cast<OWaveLanManagementPacket*>( p->child( "802.11 Management" ) ); 563 OWaveLanManagementPacket* beacon = static_cast<OWaveLanManagementPacket*>( p->child( "802.11 Management" ) );
564 if ( beacon && beacon->managementType() == "Beacon" ) 564 if ( beacon && beacon->managementType() == "Beacon" )
565 { 565 {
566 566
567 QString type; 567 QString type;
568 if ( beacon->canIBSS() ) 568 if ( beacon->canIBSS() )
569 { 569 {
570 type = "adhoc"; 570 type = "adhoc";
571 } 571 }
572 else if ( beacon->canESS() ) 572 else if ( beacon->canESS() )
573 { 573 {
574 type = "managed"; 574 type = "managed";
575 } 575 }
576 else 576 else
577 { 577 {
578 owarn << "handlePacket(): invalid frame [possibly noise] detected!" << oendl; 578 owarn << "handlePacket(): invalid frame [possibly noise] detected!" << oendl;
579 return; 579 return;
580 } 580 }
581 581
582 OWaveLanManagementSSID* ssid = static_cast<OWaveLanManagementSSID*>( p->child( "802.11 SSID" ) ); 582 OWaveLanManagementSSID* ssid = static_cast<OWaveLanManagementSSID*>( p->child( "802.11 SSID" ) );
583 QString essid = ssid ? ssid->ID() : QString("<unknown>"); 583 QString essid = ssid ? ssid->ID() : QString("<unknown>");
584 OWaveLanManagementDS* ds = static_cast<OWaveLanManagementDS*>( p->child( "802.11 DS" ) ); 584 OWaveLanManagementDS* ds = static_cast<OWaveLanManagementDS*>( p->child( "802.11 DS" ) );
585 int channel = ds ? ds->channel() : -1; 585 int channel = ds ? ds->channel() : -1;
586 OWaveLanPacket* header = static_cast<OWaveLanPacket*>( p->child( "802.11" ) ); 586 OWaveLanPacket* header = static_cast<OWaveLanPacket*>( p->child( "802.11" ) );
587 displayFoundNetwork( type, channel, essid, header->macAddress2() ); 587 displayFoundNetwork( type, channel, essid, header->macAddress2() );
588 } 588 }
589} 589}
590 590
591 591
592void WLANImp::displayFoundNetwork( const QString& mode, int channel, const QString& ssid, const OMacAddress& mac ) 592void WLANImp::displayFoundNetwork( const QString& mode, int channel, const QString& ssid, const OMacAddress& mac )
593{ 593{
594 594
595 odebug << "found network: <" << (const char*) mode << ">, chn " << channel 595 odebug << "found network: <" << (const char*) mode << ">, chn " << channel
596 << ", ssid '" << (const char*) ssid << "', mac '" << (const char*) mac.toString() << "'" << oendl; 596 << ", ssid '" << (const char*) ssid << "', mac '" << (const char*) mac.toString() << "'" << oendl;
597 597
598 QListViewItemIterator it( netView ); 598 QListViewItemIterator it( netView );
599 while ( it.current() && it.current()->text( col_ssid ) != ssid ) ++it; 599 while ( it.current() && it.current()->text( col_ssid ) != ssid ) ++it;
600 if ( !it.current() ) // ssid didn't show up yet 600 if ( !it.current() ) // ssid didn't show up yet
601 { 601 {
602 QListViewItem* item = new QListViewItem( netView, mode.left( 1 ).upper(), ssid, QString::number( channel ), mac.toString() ); 602 QListViewItem* item = new QListViewItem( netView, mode.left( 1 ).upper(), ssid, QString::number( channel ), mac.toString() );
603 QString name; 603 QString name;
604 name.sprintf( "networksettings/%s", (const char*) mode ); 604 name.sprintf( "networksettings/%s", (const char*) mode );
605 item->setPixmap( col_mode, Resource::loadPixmap( name ) ); 605 item->setPixmap( col_mode, Opie::Core::OResource::loadPixmap( name, Opie::Core::OResource::SmallIcon ) );
606 qApp->processEvents(); 606 qApp->processEvents();
607 } 607 }
608 608
609} 609}
610 610
611 611
612void WLANImp::selectNetwork( QListViewItem* item ) 612void WLANImp::selectNetwork( QListViewItem* item )
613{ 613{
614 bool ok; 614 bool ok;
615 if ( item ) 615 if ( item )
616 { 616 {
617 specifyAp->setChecked(true); 617 specifyAp->setChecked(true);
618 macEdit->setText( item->text( col_mac ) ); 618 macEdit->setText( item->text( col_mac ) );
619 specifyChan->setChecked( item->text( col_mode ) == "A" ); 619 specifyChan->setChecked( item->text( col_mode ) == "A" );
620 networkChannel->setValue( item->text( col_chn ).toInt( &ok ) ); 620 networkChannel->setValue( item->text( col_chn ).toInt( &ok ) );
621 essid->setEditText( item->text( col_ssid ) ); 621 essid->setEditText( item->text( col_ssid ) );
622 if ( item->text( col_mode ) == "A" ) 622 if ( item->text( col_mode ) == "A" )
623 mode->setCurrentItem( 3 ); 623 mode->setCurrentItem( 3 );
624 else 624 else
625 mode->setCurrentItem( 2 ); 625 mode->setCurrentItem( 2 );
626 } 626 }
627} 627}