⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lan.cpp

📁 Trolltech公司发布的图形界面操作系统。可在qt-embedded-2.3.10平台上编译为嵌入式图形界面操作系统。
💻 CPP
📖 第 1 页 / 共 2 页
字号:
    if ( !tmpFile.open( IO_WriteOnly ) )	return FALSE;    bool retval = TRUE;        QTextStream in( &prevFile );    QTextStream out( &tmpFile );    config.setGroup("Info");    QString nm = config.readEntry( "Name" );    config.setGroup("Properties");    //For DHCP to work, we have to remove the TCP/IP fields    bool dhcp = config.readEntry("DHCP","y") != "n";        QString line;    bool found=FALSE;    bool done=FALSE;    while ( !in.atEnd() ) {	QString line = in.readLine();	QString wline = line.simplifyWhiteSpace();	if ( !done ) {	    if ( found ) {		if ( wline == ";;" ) {		    done = TRUE;		} else {		    int eq=wline.find("=");		    QString k,s,v;		    if ( eq > 0 ) {			k = wline.left(eq);			s = "=";		    } else if ( wline.left(8) == "start_fn" ) {			k = wline.left(8);			s = " () ";		    } else if ( wline.left(7) == "stop_fn" ) {			k = wline.left(7);			s = " () ";		    }		    if ( !k.isNull() ) {			QString v = config.readEntry(k);			if ( eq > 0 ) {			    if ( dhcp && k.left(4) != "DHCP" )				v = "";			    else				v = Global::shellQuote(v);			} else {			    if ( v.isEmpty() )				v = "{ return; }"; // No tr			}			line = "    " + k + s + v;		    }		}	    } else {		if ( wline.left(scheme.length()+7) == scheme + ",*,*,*)" ) {		    found=TRUE;		} else if ( wline == "esac" || wline == "*,*,*,*)" ) {		    // end - add new entry		    // Not all fields have a GUI, but all are supported		    // in the network configuration files.		    static const char* txtfields[] = {			"IF_PORT", "DHCP_HOSTNAME", "NETWORK",			"DOMAIN", "SEARCH", "MOUNTS",			"MTU", "NO_CHECK", "NO_FUSER",			"IPADDR", "NETMASK", "BROADCAST", "GATEWAY",			"DNS_1", "DNS_2", "DNS_3", 0		    };		    out << scheme << ",*,*,*)" << "\n"			<< "    INFO=" << Global::shellQuote(nm) << "\n"			<< "    BOOTP=" << config.readEntry("BOOTP","n") << "\n"			<< "    DHCP=" << config.readEntry("DHCP","y") << "\n"			<< "    start_fn () " << config.readEntry("start_fn","{ return; }") << "\n"			<< "    stop_fn () " << config.readEntry("stop_fn","{ return; }") << "\n"			;		    const char** f = txtfields;		    while (*f) {			out << "    " << *f << "=" 			    << Global::shellQuote(dhcp ? QString("") : config.readEntry(*f,""))			    << "\n";			++f;		    }		    out << "    ;;\n";		    done = TRUE;		}	    }	}	out << line << "\n";    }    prevFile.close();    tmpFile.close();    QString prevng = wlanopts;    QString tmpng = prevng + "-qpe-new";    QString prevwl = wirelessopts;    QString tmpwl = prevwl + "-qpe-new";    for (int ng=0; ng<2; ng++) {	prevFile.setName(ng ? prevng : prevwl);	if ( !prevFile.open( IO_ReadOnly ) ) {	    if ( ng )		prevng = QString::null;	    else		prevwl = QString::null;	    break;	}	tmpFile.setName(ng ? tmpng : tmpwl);	if ( !tmpFile.open( IO_WriteOnly ) )	    return FALSE;	QTextStream win( &prevFile );	QTextStream wout( &tmpFile );	found=FALSE;	done=FALSE;	QString wep = config.readEntry("WEP");	while ( !win.atEnd() ) {	    QString line = win.readLine();	    QString wline = line.simplifyWhiteSpace();	    if ( !done ) {		if ( found ) {		    if ( wline == ";;" ) {			done = TRUE;		    } else {			int eq=wline.find("=");			QString k,v;			if ( eq > 0 ) {			    k = wline.left(eq);			}			if ( !k.isNull() ) {			    QString v;			    if ( ng )				v = config.readEntry(k);			    else				v = ngToWireless(config,k);			    line = "    " + k + "=" + Global::shellQuote(v);			}		    }		} else {		    if ( wline.left(scheme.length()+7) == scheme + ",*,*,*)" ) {			found=TRUE;		    } else if ( wline == "esac" || wline == "*,*,*,*)" ) {			// end - add new entry			wout << scheme << ",*,*,*)" << "\n";			const char** f;			if ( ng ) {			    // Not all fields have a GUI, but all are supported			    // in the wlan configuration files.			    static const char* txtfields[] = {				"WLAN_ENABLE",				"USER_MIBS", "dot11ExcludeUnencrypted", "PRIV_GENERATOR",				"PRIV_KEY128", "BCNINT", "BASICRATES", "OPRATES",				"SSID", "IS_ADHOC", "CHANNEL", "PRIV_GENSTR",				"dot11WEPDefaultKey0", "dot11WEPDefaultKey1",				"dot11WEPDefaultKey2", "dot11WEPDefaultKey3",				"AuthType", "dot11PrivacyInvoked", "dot11WEPDefaultKeyID",				0			    };			    f = txtfields;			} else {			    static const char* txtfields[] = {				"NWID", "CHANNEL", "FREQ", "SENS", "RATE", "RTS", "FRAG",				"IWCONFIG", "IWSPY", "IWPRIV",				// these need translation				"ESSID", "INFO", "MODE", "KEY", 				0			    };			    f = txtfields;			}			while (*f) {			    QString v;			    if ( ng )				v = config.readEntry(*f,"");			    else				v = ngToWireless(config,*f);			    wout << "    " << *f << "=" 				    << Global::shellQuote(v) << "\n";			    ++f;			}			wout << "    ;;\n";			done = TRUE;		    }		}	    }	    wout << line << "\n";	}	prevFile.close();	tmpFile.close();    }    //system("cardctl suspend");    system("cardctl eject");    if ( system( "mv " + tmp + " " + prev ) )	retval = FALSE;    if ( !prevng.isNull() && system( "mv " + tmpng + " " + prevng ) )	retval = FALSE;    if ( !prevwl.isNull() && system( "mv " + tmpwl + " " + prevwl ) )	retval = FALSE;#ifdef USE_SCHEMES    if ( retval )	SchemeChanger::changeLanScheme(scheme);#endif    //system("cardctl resume");    system("cardctl insert");    return retval;}void Lan::accept(){    if ( writeConfig() )	QDialog::accept();}static QStringList findLans(const QString& skip=QString::null){    QStringList srv = Network::choices();    QStringList lans;    for (QStringList::ConstIterator it=srv.begin(); it!=srv.end(); ++it) {	QString t = Network::serviceType(*it);	if ( t == "lan" ) {	    Config cfg(*it,Config::File);	    cfg.setGroup("Info");	    QString n = cfg.readEntry("Name");	    if ( n != skip )		lans.append(n);	}    }    return lans;}static QString findScheme(const QStringList& lans){    QString scheme;    if ( lans.count() > 0 ) {	{	    Config c("Network");	    c.setGroup("Lan");	    scheme = c.readEntry("Scheme");	}	bool found=FALSE;	for (QStringList::ConstIterator it=lans.begin(); !found && it!=lans.end(); ++it) {	    if ( toSchemeId(*it) == scheme )		found = TRUE;	}	if ( !found )	    SchemeChanger::changeLanScheme( lans[0] );    } else {	{	    Config c("Network");	    c.setGroup("Lan");	    c.writeEntry("Scheme","default"); // No tr	}	SchemeChanger::changeLanScheme( "default" ); // No tr    }    return scheme;}LanImpl::LanImpl(){}LanImpl::~LanImpl(){}QRESULT LanImpl::queryInterface( const QUuid &uuid, QUnknownInterface **iface ){    *iface = 0;    if ( uuid == IID_QUnknown )	*iface = this;    else if ( uuid == IID_Network )	*iface = this;    else	return QS_FALSE;    (*iface)->addRef();    return QS_OK;}Q_EXPORT_INTERFACE(){    Q_CREATE_INSTANCE( LanImpl )}bool LanImpl::doProperties( QWidget *parent, Config& cfg ){    Lan dialog(cfg,parent);    dialog.showMaximized();    return dialog.exec();}bool LanImpl::create( Config& cfg ){    QStringList lans = findLans();    QString nm = cfg.readEntry("Name");    int n=1;    while ( lans.contains(nm) ) {	nm = "LAN " + QString::number(++n);    }    cfg.writeEntry("Name",nm);    return TRUE;}bool LanImpl::remove( Config& cfg ){#ifdef USE_SCHEMES    // Switch to another    cfg.setGroup("Info");    QStringList lans = findLans(cfg.readEntry("Name"));    findScheme(lans);#endif    return TRUE;}bool LanImpl::start( Config& cfg ){    cfg.setGroup("Info");#ifdef USE_SCHEMES    QString scheme = toSchemeId(cfg.readEntry("Name"));    system( "cardctl scheme " + scheme );    return TRUE;#else    return Lan::writeNetworkOpts( cfg );#endif}bool LanImpl::stop( Config& cfg ){    // Not implemented    return !isActive(cfg);}class LanStateImpl : public LanState {    Q_OBJECTpublic:    LanStateImpl(QWidget* parent, const QString &dev) : LanState(parent), device(dev)    {	QStringList lans = findLans();	QString scheme = findScheme(lans);	if ( lans.count() > 1 ) {	    services->insertStringList(lans);	    for(QStringList::Iterator it=lans.begin(); it!=lans.end(); ++it)		*it = toSchemeId(*it);	    services->setCurrentItem(lans.findIndex(scheme));	    SchemeChanger* sc = new SchemeChanger(this);	    QObject::connect(services,SIGNAL(activated(const QString&)),		sc,SLOT(changeLanSchemeSlot(const QString&)));	} else {	    services->hide();	    services_label->hide();	}	if ( !device[(int)device.length()-1].isDigit() )	    device += "0";	tid = startTimer(1000);	updateDisplay();    }    void timerEvent(QTimerEvent*)    {	updateDisplay();	if ( ipaddress->text()[0] != 'e' ) {	    // slow down	    killTimer(tid);	    tid = startTimer(5000);	}    }    bool ok() const    {	return !ipaddress->text().isEmpty();    }private slots:    void updateDisplay()    {	QString ipaddr;	Process p(QStringList() << "ifconfig" << device);	if ( p.exec( "", ipaddr ) ) {	    ipaddr.replace(QRegExp(".*inet addr:"),"");	    ipaddr.replace(QRegExp(" .*"),"");	    ipaddress->setText(ipaddr);	} else {	    ipaddress->setText("");	}    }private:    int tid;    QString device;};QWidget* LanImpl::addStateWidget( QWidget* parent, Config& cfg ) const{    if ( isActive(cfg) ) {	cfg.setGroup( "Properties" );	QString dev = cfg.readEntry( "Device" );	LanStateImpl* state = new LanStateImpl(parent, dev);	if ( state->ok() )	    return state;	delete state;    }    return 0;}bool LanImpl::isActive( Config& cfg ) const{    if ( NetworkInterface::isActive(cfg) ) {	QString n,s;	{	    cfg.setGroup("Info");	    n = toSchemeId(cfg.readEntry("Name"));	    Config c("Network");	    c.setGroup("Lan");	    s = c.readEntry("Scheme");	}	if ( s.isNull() ) {	    s=n;	    SchemeChanger::changeLanScheme( s );	}	if ( s==n )	    return TRUE;    }    return FALSE;}bool LanImpl::isAvailable( Config& cfg ) const{    return NetworkInterface::isAvailable(cfg);}#include "lan.moc"

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -