12 files changed, 121 insertions, 25 deletions
diff --git a/noncore/settings/networksettings2/bluetooth/bluetoothRFCOMMrun.cpp b/noncore/settings/networksettings2/bluetooth/bluetoothRFCOMMrun.cpp index cd7bb4a..63b214e 100644 --- a/noncore/settings/networksettings2/bluetooth/bluetoothRFCOMMrun.cpp +++ b/noncore/settings/networksettings2/bluetooth/bluetoothRFCOMMrun.cpp @@ -1,17 +1,29 @@ #include <qapplication.h> #include <resources.h> + +#include <OTPeer.h> #include <OTDevice.h> #include <OTGateway.h> +#include <Opietooth.h> + +#include <qlistbox.h> +#include <qframe.h> +#include <qlabel.h> +#include <qlayout.h> +#include <qdialog.h> + #include "bluetoothRFCOMMrun.h" using Opietooth2::OTGateway; using Opietooth2::OTDevice; using Opietooth2::OTDeviceAddress; +using Opietooth2::OTScan; +using Opietooth2::OTPeer; BluetoothRFCOMMRun::~BluetoothRFCOMMRun( void ) { if( OT ) { OTGateway::releaseOTGateway(); } } State_t BluetoothRFCOMMRun::detectState( void ) { @@ -50,16 +62,19 @@ QString BluetoothRFCOMMRun::setMyState( NetworkSetup *, QStringList S; S << "rfcomm" << "bind" << QString().setNum( DeviceNr ) << Ch->BDAddress << QString().setNum( Ch->Channel ); + // no longer needed + delete Ch; + if( Sys.runAsRoot( S ) ) { return QString( "Error starting %1").arg(S.join(" ")); } // here rfcomm should be running -> we will detect state later return QString(); } else { Log(( "No channel selected -> cancel\n" )); @@ -73,30 +88,40 @@ QString BluetoothRFCOMMRun::setMyState( NetworkSetup *, return QString( "Cannot release RFCOMM NetworkSetup" ); } DeviceNr = -1; } } return QString(); } -#include <qlistbox.h> -#include <qframe.h> -#include <qlabel.h> -#include <qlayout.h> -#include <qdialog.h> - RFCOMMChannel * BluetoothRFCOMMRun::getChannel( void ) { if( Data->Devices.count() == 1 ) { // only one device -> return channel return Data->Devices[0]; } RFCOMMChannel * Ch = 0; + + if( Data->Devices.count() == 0 ) { + OTPeer * Peer; + int Channel; + + if( OTScan::getDevice( Peer, Channel, OT ) == QDialog::Accepted ) { + Ch = new RFCOMMChannel; + Ch->BDAddress = Peer->address().toString(); + Ch->Name = Peer->name(); + Ch->Channel = Channel; + return Ch; + } + + return 0; + } + QDialog * Dlg = new QDialog( qApp->mainWidget(), 0, TRUE ); QVBoxLayout * V = new QVBoxLayout( Dlg ); QLabel * L = new QLabel( qApp->translate( "BluetoothRFCOMMRun", "Select device to connect to"), Dlg ); QListBox * LB = new QListBox( Dlg ); @@ -115,17 +140,20 @@ RFCOMMChannel * BluetoothRFCOMMRun::getChannel( void ) { Dlg->move( 20, (qApp->desktop()->height()-100)/2 ); if( Dlg->exec() == QDialog::Accepted ) { unsigned int i = 0; for( i = 0; i < Data->Devices.count(); i ++ ) { if( LB->isSelected(i) ) { odebug << "Selected " << Data->Devices[i]->Name << oendl; - Ch = Data->Devices[i]; + Ch = new RFCOMMChannel; + Ch->BDAddress = Data->Devices[i]->BDAddress; + Ch->Name = Data->Devices[i]->Name; + Ch->Channel = Data->Devices[i]->Channel; break; } } } delete Dlg; return Ch; } diff --git a/noncore/settings/networksettings2/gprs/GPRS_NNI.cpp b/noncore/settings/networksettings2/gprs/GPRS_NNI.cpp index bf8cc59..2dd54ff 100644 --- a/noncore/settings/networksettings2/gprs/GPRS_NNI.cpp +++ b/noncore/settings/networksettings2/gprs/GPRS_NNI.cpp @@ -202,29 +202,32 @@ short AGPRSDevice::generateFile( SystemFile & SF, << " # profile " << removeSpaces( networkSetup()->name() ) <<oendl; } } return 1; } -bool AGPRSDevice::openFile( SystemFile & SF ) { +bool AGPRSDevice::openFile( SystemFile & SF, QStringList & SL ) { if( SF.name() == "peers" ) { + SL << "/etc" << "ppp" << "peers"; SF.setPath( QString( "/etc/ppp/peers/" ) + removeSpaces( networkSetup()->name() ) ); return 1; } else if ( SF.name() == "chatscripts" ) { + SL << "/etc" << "chatscripts"; SF.setPath( QString( "/etc/chatscripts/" ) + removeSpaces( networkSetup()->name() ) ); return 1; + SL << "/etc" << "ppp"; } else if ( SF.name() == "extra" ) { SF.setPath( QString( "/etc/ppp/" ) + removeSpaces( networkSetup()->name() ) + ".fixed" ); return 1; } return 0; diff --git a/noncore/settings/networksettings2/gprs/GPRS_NNI.h b/noncore/settings/networksettings2/gprs/GPRS_NNI.h index 1060a6e..b5bf1b9 100644 --- a/noncore/settings/networksettings2/gprs/GPRS_NNI.h +++ b/noncore/settings/networksettings2/gprs/GPRS_NNI.h @@ -19,17 +19,18 @@ public : { return ( RT ) ? RT : ( RT = new GPRSRun( this, Data ) ); } QWidget * edit( QWidget * parent ); QString acceptable( void ); void commit( void ); - virtual bool openFile( SystemFile & SF ); + virtual bool openFile( SystemFile & SF, + QStringList & SL ); virtual void * data( void ) { return (void *)&Data; } virtual bool hasDataForFile( SystemFile & S ); virtual short generateFile( SystemFile & SF, long DevNr ); diff --git a/noncore/settings/networksettings2/networksettings.cpp b/noncore/settings/networksettings2/networksettings.cpp index 80dcb3d..2714dd5 100644 --- a/noncore/settings/networksettings2/networksettings.cpp +++ b/noncore/settings/networksettings2/networksettings.cpp @@ -246,17 +246,17 @@ void NetworkSettings::SLOT_EditNode( QListBoxItem * LBI ) { } else { // new item int ci = Profiles_LB->count(); NSResources->addNetworkSetup( NC, 0 ); NC->setNumber( NSResources->assignNetworkSetupNumber() ); Profiles_LB->insertItem( NC->devicePixmap(), NC->name() ); Profiles_LB->setSelected( ci, TRUE ); } - updateProfileState( LBI ); + SLOT_RefreshStates(); } } else { // cancelled : reset NetworkSetup if( LBI ) { NetworkSetup * NC = NSResources->findNetworkSetup( LBI->text() ); NC->reassign(); } } diff --git a/noncore/settings/networksettings2/networksettings2/netnode.cpp b/noncore/settings/networksettings2/networksettings2/netnode.cpp index 0ab0e5b..1bcd95c 100644 --- a/noncore/settings/networksettings2/networksettings2/netnode.cpp +++ b/noncore/settings/networksettings2/networksettings2/netnode.cpp @@ -84,18 +84,19 @@ bool ANetNode::isToplevel( void ) { if( strcmp( *P, "fullsetup") == 0 ) return 1; P ++; } return 0; } bool ANetNode::openFile( SystemFile & SF, - ANetNodeInstance * NNI ) { - return (NNI ) ? NNI->openFile( SF ) : 0 ; + ANetNodeInstance * NNI, + QStringList & SL ) { + return (NNI ) ? NNI->openFile( SF, SL ) : 0 ; } // // // ANETNODEINSTANCE // // @@ -401,21 +402,23 @@ QString NetworkSetup::setState( Action_t A, bool Force ) { Action_t Actions[10]; int NoOfActions = 0; // get current state state( Force ); switch( A ) { case Disable : + /* if( CurrentState < Disabled ) { // disabled CurrentState = Disabled; return QString(); } + */ if( CurrentState == IsUp ) { Actions[NoOfActions++] = Down; Actions[NoOfActions++] = Deactivate; } else if( CurrentState == Available ) { Actions[NoOfActions++] = Deactivate; } Actions[NoOfActions++] = Disable; diff --git a/noncore/settings/networksettings2/networksettings2/netnode.h b/noncore/settings/networksettings2/networksettings2/netnode.h index 8aebdc0..fa4ab70 100644 --- a/noncore/settings/networksettings2/networksettings2/netnode.h +++ b/noncore/settings/networksettings2/networksettings2/netnode.h @@ -116,20 +116,25 @@ public: // open proper file SF identified by S // this method is called by NS2. // // overrule this ONLY if this proper file is a common file // for all NNI of this node class and the data generated // by each of the NNI needs to be put in one file // + // the function can return a set of folders that should + // be created (or perhaps already exist) prior to opening + // the file + // // if this is the case the file should be (re)opened in append // return 0 if file cannot be opened virtual bool openFile( SystemFile &SF, - ANetNodeInstance * NNI ); + ANetNodeInstance * NNI, + QStringList & PathToCreate ); // generate instance independent stuff // 0 : data output, 1 no data, 2 error virtual short generatePreamble( SystemFile & ) { return 1; } // generate instance independent stuff // 0 : data output, 1 no data, 2 error @@ -254,17 +259,18 @@ public: // // Virtual methods with sensible defaults // // // open proper file identified by S - virtual bool openFile( SystemFile & ) + virtual bool openFile( SystemFile &, + QStringList & ) { return 0; } // check if this node (or sub nodes) have data for this file virtual bool hasDataForFile( SystemFile & S ) { return nodeClass()->hasDataForFile( S ); } // generate code specific for this node but embedded // in the section of the parent diff --git a/noncore/settings/networksettings2/nsdata.cpp b/noncore/settings/networksettings2/nsdata.cpp index 835c7c3..6b87399 100644 --- a/noncore/settings/networksettings2/nsdata.cpp +++ b/noncore/settings/networksettings2/nsdata.cpp @@ -331,22 +331,33 @@ QString NetworkSettingsData::generateSettings( void ) { nniit.current(); ++nniit ) { if( nniit.current()->nodeClass() != CurDevNN ) // different class continue; // open proper file { SystemFile SF( (*it) ); + QStringList SL; - if( ! CurDevNN->openFile( SF, nniit.current()) ) { + if( ! CurDevNN->openFile( SF, nniit.current(), SL) ) { // cannot open S = qApp->translate( "NetworkSettings", - "<p>Cannot open proper file \"%1\" for node \"%2\"</p>" ). - arg( (*it) ).arg( CurDevNN->name() ); + "<p>Cannot build proper file \"%1\" for node \"%2\"</p>" ). + arg( (*it) ). + arg( CurDevNN->name() ); + return S; + } + + if( ! createPath( SL ) ) { + S = qApp->translate( "NetworkSettings", + "<p>Cannot create path \"%1\" for proper file \"%2\" for node \"%3\"</p>" ). + arg( SL.join("/") ). + arg( (*it) ). + arg( CurDevNN->name() ); return S; } if( ! SF.open() ) { S = qApp->translate( "NetworkSettings", "<p>Cannot open proper file \"%1\" for node \"%2\"</p>" ). arg( (*it) ).arg( CurDevNN->name() ); return S; @@ -374,25 +385,36 @@ QString NetworkSettingsData::generateSettings( void ) { arg( CurDevNN->name() ); return S; } } } if( Generated ) { SystemFile SF( (*it) ); + QStringList SL; - if( CurDevNN->openFile( SF, 0 ) && + if( CurDevNN->openFile( SF, 0, SL ) && ! SF.path().isEmpty() ) { + if( ! createPath( SL ) ) { + S = qApp->translate( "NetworkSettings", + "<p>Cannot create path \"%1\" for proper file \"%2\" for node \"%3\"</p>" ). + arg( SL.join("/") ). + arg( (*it) ). + arg( CurDevNN->name() ); + return S; + } + if( ! SF.open() ) { S = qApp->translate( "NetworkSettings", "<p>Cannot open proper file \"%1\" for node \"%2\"</p>" ). - arg( (*it) ).arg( CurDevNN->name() ); + arg( (*it) ). + arg( CurDevNN->name() ); return S; } if( CurDevNN->generatePostamble( SF ) == 2 ) { S = qApp->translate( "NetworkSettings", "<p>Error in section \"postamble\" for proper file \"%1\" and node \"%2\"</p>" ). arg( (*it) ). arg( CurDevNN->name() ); @@ -780,8 +802,31 @@ QList<NetworkSetup> NetworkSettingsData::collectTriggered( Log( ( "Append %s for %s\n", NC->name().latin1(), Interface.latin1() )); PossibleTriggered.append( NC ); } } return PossibleTriggered; } +bool NetworkSettingsData::createPath( const QStringList & SL ) { + + QDir D( SL[0] ); + + for ( QStringList::ConstIterator it = SL.begin(); + it != SL.end(); + ++it ) { + + printf( "Create %s\n", (*it).latin1() ); + if( it == SL.begin() ) + continue; + + if( ! D.exists( *it ) ) { + if( ! D.mkdir( *it ) ) { + printf( "Failed %s %s\n", D.path().latin1(), (*it).latin1() ); + return 0; + } + } + + D.cd( *it ); + } + return 1; +} diff --git a/noncore/settings/networksettings2/nsdata.h b/noncore/settings/networksettings2/nsdata.h index b9c216d..65b61a3 100644 --- a/noncore/settings/networksettings2/nsdata.h +++ b/noncore/settings/networksettings2/nsdata.h @@ -24,15 +24,16 @@ public : bool canStart( const QString & Interface ); // return TRUE if there are vpns that could be triggered // by this interface bool couldBeTriggered( const QString & Interface ); private : QList<NetworkSetup> collectTriggered( const QString &Interface ); + bool createPath( const QStringList & SL ); bool ForceModified; // collect strings in config file nobody wants QStringList LeftOvers; }; #endif diff --git a/noncore/settings/networksettings2/opietooth2/Opietooth.cpp b/noncore/settings/networksettings2/opietooth2/Opietooth.cpp index 8323549..fc30bf8 100644 --- a/noncore/settings/networksettings2/opietooth2/Opietooth.cpp +++ b/noncore/settings/networksettings2/opietooth2/Opietooth.cpp @@ -179,17 +179,16 @@ void OTSniffing::SLOT_Trace( bool Run ) { ); delete HciDump; HciDump = 0; } } void OTSniffing::SLOT_Show( const QString & S ) { - printf( "%s\n", S.latin1() ); Output_TV->setText( Output_TV->text() + S + "\n" ); QScrollBar *scroll = Output_TV->verticalScrollBar(); scroll->setValue(scroll->maxValue()); //Output_LB->insertItem( S ); //Output_LB->setCurrentItem( Output_LB->count()-1 ); //Output_LB->ensureCurrentVisible(); } @@ -372,16 +371,17 @@ void OTPairing::SLOT_Unpair( ) { // // // OTScan::OTScan( QWidget * parent, OTIcons * _IC ) : OTScanGUI( parent ), Filter() { OT = OTGateway::getOTGateway(); + Icons = (_IC ) ? _IC : new OTIcons(); MyIcons = (_IC == 0 ); DetectedPeers_LV->header()->hide(); Current = 0; SelectedPeer = 0; SelectedChannel = 0; StrengthTimer = new QTimer( this ); @@ -439,16 +439,24 @@ OTScan::~OTScan() { int OTScan::getDevice( OTPeer *& Peer, int & Channel, OTGateway * OT, const UUIDVector & Filter, QWidget* Parent ) { bool IsUp = 0; unsigned int i; + if( ! OT->isEnabled() ) { + QMessageBox::warning( 0, + tr("Scanning problem"), + tr("Bluetooth not enabled" ) + ); + return QDialog::Rejected; + } + // check if bluetooth is up OTDriverList & DL = OT->getDriverList(); for( i = 0; i < DL.count(); i ++ ) { if( DL[i]->isUp() ) { // one device that is up found IsUp = 1; diff --git a/noncore/settings/networksettings2/ppp/ppp_NNI.cpp b/noncore/settings/networksettings2/ppp/ppp_NNI.cpp index 7286d96..9cdd51e 100644 --- a/noncore/settings/networksettings2/ppp/ppp_NNI.cpp +++ b/noncore/settings/networksettings2/ppp/ppp_NNI.cpp @@ -141,22 +141,24 @@ QString APPP::acceptable( void ) { } void APPP::commit( void ) { if( GUI && GUI->commit( Data ) ) { setModified( 1 ); } } -bool APPP::openFile( SystemFile & SF ) { +bool APPP::openFile( SystemFile & SF, QStringList & SL ) { if( SF.name() == "peers" ) { + SL << "/tmp/ppp" << "peers" ; SF.setPath( removeSpaces( QString( "/tmp/ppp/peers/" ) + networkSetup()->name() ) ); return 1; } else if ( SF.name() == "chatscripts" ) { + SL << "/tmp/chatscripts"; SF.setPath( removeSpaces( QString( "/tmp/chatscripts/" ) + networkSetup()->name() ) ); return 1; } return 0; } short APPP::generateFile( SystemFile & SF, long DevNr ) { diff --git a/noncore/settings/networksettings2/ppp/ppp_NNI.h b/noncore/settings/networksettings2/ppp/ppp_NNI.h index 76afb21..7830a4a 100644 --- a/noncore/settings/networksettings2/ppp/ppp_NNI.h +++ b/noncore/settings/networksettings2/ppp/ppp_NNI.h @@ -20,17 +20,17 @@ public : QWidget * edit( QWidget * parent ); QString acceptable( void ); void commit( void ); virtual void * data( void ) { return (void *)&Data; } - virtual bool openFile( SystemFile & Sf ); + virtual bool openFile( SystemFile & Sf, QStringList &SL ); short generateFile( SystemFile & TS, long DevNr ); protected : virtual void setSpecificAttribute( QString & Attr, QString & Value ); virtual void saveSpecificAttribute( QTextStream & TS ); diff --git a/noncore/settings/networksettings2/profile/profilerun.cpp b/noncore/settings/networksettings2/profile/profilerun.cpp index 48011ea..77bf9ac 100644 --- a/noncore/settings/networksettings2/profile/profilerun.cpp +++ b/noncore/settings/networksettings2/profile/profilerun.cpp @@ -1,17 +1,16 @@ #include <resources.h> #include "profilerun.h" State_t ProfileRun::detectState( void ) { - InterfaceInfo * II = networkSetup()->assignedInterface(); - Log(( "Interface %p %p %p: %d\n", II, - netNode(), netNode()->networkSetup(), (II) ? II->IsUp : 0 )); + Log(( "Profile %sabled\n", (Data->Disabled) ? "dis" : "en" )); + if( Data->Disabled ) { return Disabled; } return Unknown; } QString ProfileRun::setMyState( NetworkSetup * NC, Action_t A, bool ) { odebug << "Profile " << Data->Disabled << oendl; |