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

📄 dialup.cpp

📁 Trolltech公司发布的图形界面操作系统。可在qt-embedded-2.3.10平台上编译为嵌入式图形界面操作系统。
💻 CPP
📖 第 1 页 / 共 2 页
字号:
    mkdir("/etc/ppp/peers",0700);    QFile options("/etc/ppp/peers/"+acid);    if ( options.open(IO_WriteOnly) ) {	QTextStream opt(&options);	opt << cfg.readEntry("speed") << "\n";	QString dial = dialString(cfg);	//opt << "debug\n";#ifdef QTOPIA_PHONE	opt << "connect '" // No tr	    << QPEApplication::qpeDir() << "/bin/qtopia-dial-internal'\n";	opt << "disconnect '" // No tr	    << QPEApplication::qpeDir() << "/bin/qtopia-stop-internal'\n";#else	opt << "connect '/usr/sbin/chat " // No tr		"-s -v "		"ABORT \"NO CARRIER\" " // No tr		"ABORT \"NO DIALTONE\" " // No tr		"ABORT \"BUSY\" " // No tr	    << "\"\" ATZ OK " + dial + " CONNECT'\n";#endif	if ( cfg.readBoolEntry("crtscts") )	    opt << "crtscts\n";	else	    opt << "nocrtscts\n";	opt << "noipdefault\n";	opt << "modem\n"; // No tr	QString user = cfg.readEntry("username");	if ( !user.isEmpty() )	    opt << "user " << Global::stringQuote(user) << "\n"; // No tr	int dialmode = cfg.readNumEntry("dialmode",0);	if ( dialmode == 2 )	    opt << "demand\n"; // No tr	int idlet = cfg.readNumEntry("idletime",120);	if ( dialmode > 0 && idlet )	    opt << "idle " << idlet << "\n"; // No tr	if ( cfg.readBoolEntry("usepeerdns",TRUE) )	    opt << "usepeerdns\n";	if ( cfg.readBoolEntry("defaultroute",TRUE) )	    opt << "defaultroute\n";	int cdel = cfg.readNumEntry("connectdelay",0);	if ( cdel )	    opt << "connect-delay " << cdel << "\n";	if ( !acid.isEmpty() )	    opt << "remotename " << acid << "\n";	QString pw = cfg.readEntry("password");	bool pwsetok = TRUE;	if ( !pw.isEmpty() )	    pwsetok = setPapSecret(user,acid,pw,"");	else	    pwsetok = setPapSecret(user,acid,QString::null,"");	if ( !pwsetok ) {	    QMessageBox::critical(parent,Dialup::tr("I/O Error"),		Dialup::tr("<P>Cannot write to PPP password files."));	    return FALSE;	}	return TRUE;    } else {	QMessageBox::critical(parent,Dialup::tr("I/O Error"),	    Dialup::tr("<P>Cannot write to %1.").arg(options.name()));	return FALSE;    }}QString DialupImpl::dev( Config& cfg ) const{    QString d = cfg.readEntry("SerialDevice");    if ( d.isEmpty() ) {	QString ct = cardType(cfg);	if ( !ct.isEmpty() ) {	    FILE* f = fopen("/var/run/stab", "r");	    if (!f) f = fopen("/var/state/pcmcia/stab", "r");	    if (!f) f = fopen("/var/lib/pcmcia/stab", "r");	    if ( f ) {		char line[1024];		char devtype[80];		char devname[80];		while ( fgets( line, 1024, f ) ) {		    // 0       serial  serial_cs       0       ttyS0   4       64		    if ( sscanf(line,"%*d %s %*s %*s %s", devtype, devname )==2 )		    {			if ( ct == devtype ) {			    fclose(f);			    return QString("/dev/")+devname;			}		    }		}		fclose(f);	    }	}    }    return d;}bool DialupImpl::create( Config& ){    // nothing special    return TRUE;}bool DialupImpl::remove( Config&cfg ){    stop(cfg);    cfg.setGroup("Info");    QString peer = cfg.readEntry( "Id" );    if ( !peer.isEmpty() ) {	peer = "/etc/ppp/peers/" + peer;	unlink( peer.latin1() );    }    return TRUE;}class PppMon : public QObject {    Q_OBJECT    enum { Initialize, Connect, Authenticate, Timing, Disappearing } state;    int age;    int start;    bool demand;    QString logfile;public:    PppMon(bool demanddialing) :	demand(demanddialing)    {	age = 0;	start = 0;	state = Initialize;	logfile= Global::tempDir()+ "qpe-pppd-log";	progress(demand ? tr("Waiting for activity") : tr("Initializing modem"),1);	startTimer(demand ? 8000 /* progress less interesting */ : 2000);    }    ~PppMon()    {    }protected:    void timerEvent(QTimerEvent*)    {	if ( state == Disappearing ) {	    killTimers();	    delete this;	    return;	}	QFile logf(logfile);	if ( logf.open(IO_ReadOnly) ) {	    QString log = logf.readAll();	    log.replace(QRegExp("\r"),"");	    switch (state) {	      case Initialize:		if ( log.find(QRegExp("\nFailed"))>=start ) { // No tr		    progress(tr("Connection failed"),0);		    state = Disappearing;		} else if ( demand ) {		    int ns;		    if ( (ns=log.find(QRegExp("Starting link\n")))>=start ) { // No tr			progress(tr("Connecting"),5);			state = Connect;			start = ns+1;		    }		} else {		    int ns;		    if ( (ns=log.find(QRegExp("\nOK\n -- got it")))>=start ) { // No tr			progress(tr("Connecting"),1);			state = Connect;			start = ns+1;		    }		}		break;	      case Connect:		if ( log.find(QRegExp("\nCONNECT[^\n]*\n -- got it"))>=start ) { // No tr		    progress(tr("Authenticating"),1); // No tr		    state = Authenticate;		} else if ( log.find(QRegExp("\nNO DIALTONE"))>=start ) {		    progress(tr("No dialtone"),0);		    state = Disappearing;		} else if ( log.find(QRegExp("\nNO CARRIER"))>=start ) {		    progress(tr("No carrier"),0);		    state = Disappearing;		} else if ( log.find(QRegExp("\nBUSY"))>=start ) {		    progress(tr("Number is busy"),0);		    state = Disappearing;		} else if ( log.find(QRegExp("\nalarm"))>=start ) { // No tr		    progress(tr("Timed out"),0);		    state = Disappearing;		} else if ( log.find(QRegExp("\nFailed"))>=start ) { // No tr		    progress(tr("Connection failed"),0);		    state = Disappearing;		}		break;	      case Authenticate:		if ( log.find(QRegExp("\nPAP authentication failed"))>=start ) { // No tr		    progress(tr("Authentication Failed"),0);		    state = Disappearing;		} else if ( log.find(QRegExp("\nCHAP authentication failed"))>=start ) { // No tr		    progress(tr("Authentication Failed"),0);		    state = Disappearing;		} else if ( log.find(QRegExp("\nipcp: up"))>=start ) { // No tr		    progress(tr("Connected"),5);		    if ( demand )			state = Timing;		    else			state = Disappearing;		}		break;	      case Timing:		if ( log.find(QRegExp("\nConnection terminated"))>=start ) { // No tr		    progress(tr("Waiting for activity"),1);		    state = Initialize;		}		break;	      case Disappearing:		break;	    }	    if ( !demand && age++ > 120 ) // fail-safe self destruction		state = Disappearing;	} else	    state = Disappearing;    }    void progress(const QString& p, int flag)    {#ifndef QT_NO_COP	QCopEnvelope e("QPE/Network", "progress(QString,int)");	if ( demand ) flag |= 2;	e << p << flag;#endif    }};bool DialupImpl::start( Config& cfg ){    return start(cfg,QString::null);}bool DialupImpl::start( Config& cfg, const QString& password ){    // start pppd    QString cmd = cfg.readEntry("script");    QStringList args;    if ( cmd.isEmpty() ) {	if ( !cfg.readBoolEntry("usepeerdns",TRUE) ) {	    bool any=FALSE;	    for (int i=1; i<5 && !any; i++)		any = !cfg.readEntry("dns"+QString::number(i)).isEmpty();	    if ( any ) {		QFile rc("/etc/ppp/resolv.conf");		if ( rc.open(IO_WriteOnly) ) {		    QTextStream stream(&rc);		    for (int i=1; i<5; i++) {			QString dns = cfg.readEntry("dns"+QString::number(i));			if ( !dns.isEmpty() )			    stream << "nameserver " << dns << "\n";		    }		} else {		    qWarning("Cannot write to /etc/ppp/resolv.conf file.");		}	    }	}	cfg.setGroup("Info");	args.append("/usr/sbin/pppd");	    // No tr#ifdef QTOPIA_PHONE	args.append("nodetach");	    // No tr	args.append("notty");		    // No tr#else	QString d = dev(cfg);	if ( d.isEmpty() ) {	    qWarning("No device for card type %s",cardType(cfg).latin1());	    return FALSE;	}	args.append("updetach");	    // No tr	args.append(d);#endif	args.append("debug");		    // No tr	args.append("call");		    // No tr	args.append(cfg.readEntry("Id"));   // No tr    } else {	args = QStringList::split(" ", cmd);#ifndef QTOPIA_PHONE	args.append(dev(cfg));#endif    }    if ( !password.isNull() ) {	args.append("password");	    // No tr	args.append(password);    }    args.append("logfile");		    // No tr    args.append(logfile);    QFile::remove(logfile);#ifdef QTOPIA_PHONE    // Construct the full dial control string.    QString dial = dialString(cfg);    // Split the dial control string into setup commands and phone number.    QStringList init = QStringList::split(" ", dial);    QStringList::Iterator iter;    QString number;    for ( iter = init.begin(); iter != init.end(); ) {	if ( *iter == "OK" ) {	    // The phone library will take care of looking for "OK".	    iter = init.remove(iter);	} else if ( (*iter).startsWith("ATD") ) {	    // The dial command, starting with ATD, ATDT, or ATDP.	    number = (*iter).mid(3);	    if ( number.startsWith("T") || number.startsWith("P") ) {		number = number.mid(1);	    }	    iter = init.remove(iter);	} else {	    ++iter;	}    }    // Create a data call.    PhoneLine line;    bool demand = cfg.readNumEntry("dialmode",0) == 2;    line.startData( number, init, args, demand);#else    // Quote the command-line before passing it to "system".    cmd = args[0];    for ( uint posn = 1; posn < args.count(); ++posn ) {	cmd += " " + Global::shellQuote(args[posn]);    }    cmd += " &";    system("cardctl resume");    system(cmd.latin1());#endif    cfg.setGroup("Properties");    int dialmode = cfg.readNumEntry("dialmode",0);    (void)new PppMon(dialmode==2);    return TRUE;}bool DialupImpl::stop( Config& cfg ){#ifdef QTOPIA_PHONE    Q_CONST_UNUSED(cfg);    PhoneLine line;    line.stopData();    return TRUE;#else    // kill pppd    QString d = device(cfg);    if ( !QFile::exists("/var/run/"+d+".pid") )	d += "0";    QFile pid("/var/run/"+d+".pid");    if ( pid.open(IO_ReadOnly) ) {	QString s(pid.readAll());	int p = s.toInt();	if ( p ) {	    kill(p,SIGTERM); // SIGHUP not enough for demand dialing pppd	    system("cardctl suspend");	    return TRUE;	}    }    return FALSE;#endif}bool DialupImpl::isAvailable( Config& cfg ) const{#ifdef QTOPIA_PHONE    Q_CONST_UNUSED(cfg);    return TRUE;#else    QString d = dev(cfg);    if ( d.isEmpty() )	return FALSE;    return QFile::exists(d);#endif}bool DialupImpl::needPassword( Config& cfg ) const{    return cfg.readEntry("password").isEmpty();}bool DialupImpl::setProperties( Config& cfg, const NetworkInterfaceProperties& settings ){    // XXX relationship between these proxies and WWW proxies???    cfg.writeEntry("wapProxyAddress", settings["proxyAddress"].toString());    cfg.writeEntry("wapProxyAddressType", settings["proxyAddressType"].toString());    cfg.writeEntry("wapProxyLoginType", settings["proxyLoginType"].toString());    cfg.writeEntry("wapProxyAuthName", settings["proxyAuthName"].toString());    cfg.writeEntry("wapProxyAuthPassword", settings["proxyAuthPassword"].toString());    cfg.writeEntry("wapProxyPort", settings["proxyPort"].toString());    cfg.writeEntry("wapProxyService", settings["proxyService"].toString());    cfg.writeEntry("wapDefaultHomePage", settings["homePage"].toString());    cfg.writeEntry("mmsURL", settings["mmsUrl"].toString());    QString acid = cfg.readEntry("Id");    // Remove old password    QString prev_user = cfg.readEntry("username");    QString user = settings["authName"].toString();    if ( prev_user != user ) {	cfg.writeEntry("username",user);	setPapSecret(prev_user,acid,QString::null,"");    }    cfg.writeEntry("apn", settings["accessPoint"].toString());    cfg.writeEntry("password", settings["authPassword"].toString());    return writeSystemFiles(0,cfg);}#include "dialup.moc"

⌨️ 快捷键说明

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