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

📄 wvdial.cc

📁 wvdial 软件包是一个自动拨号程序
💻 CC
字号:
/* * Worldvisions Weaver Software: *   Copyright (C) 1997-2005 Net Integration Technologies, Inc. * * Standalone WvDial program, for testing the WvDialer class. * * Created:	Sept 30 1997		D. Coombs */#include "wvargs.h"#include "wvdialer.h"#include "wvver.h"#include "wvlog.h"#include "wvlogrcv.h"#include "wvlogfile.h"#include "wvsyslog.h"#include "wvcrash.h"#include <signal.h>#include <sys/wait.h>#include <unistd.h>volatile bool want_to_die = false;// use no prefix string for app "Modem", and an arrow for everything else.// This makes the output of the wvdial application look nicer.class WvDialLogger : public WvLogConsole/**************************************/{public:    WvDialLogger() : WvLogConsole(dup(2)) // log to stderr (fd 2)        { }protected:    virtual void _make_prefix();};void WvDialLogger::_make_prefix()/*******************************/{    WvString name = last_source;    if(name == "WvDial Modem")     {	prefix = "";	prelen = 0;    }     else     {	prefix = "--> ";	prelen = 4;    }}static void signalhandler(int sig)/***********************************/{    fprintf(stderr, "Caught signal %d:  Attempting to exit gracefully...\n", sig);    want_to_die = true;    signal(sig, SIG_DFL);}bool haveconfig = false;static bool config_cb(WvStringParm value, void *userdata){    WvConf *cfg = reinterpret_cast<WvConf*>(userdata);    if (!access(value, F_OK))    {	cfg->load_file(value);	haveconfig = true;	return true;    }    fprintf(stderr, "Cannot read `%s'\n", value.cstr());    return false;}int main(int argc, char **argv)/********************************/{#if DEBUG    free( malloc( 1 ) ); // for electric fence#endif        WvDialLogger 	rc;    WvSyslog		*syslog = NULL;    WvLogFile           *filelog = NULL;    UniConfRoot         uniconf("temp:");    WvConf              cfg(uniconf);    WvStringList	sections;    WvStringList	cmdlineopts;    WvLog		log( "WvDial", WvLog::Debug );    WvString		homedir = getenv("HOME");        bool chat_mode = false;    bool write_syslog = true;        signal(SIGTERM, signalhandler);    signal(SIGINT, signalhandler);    signal(SIGHUP, signalhandler);    WvArgs args;    args.set_version("WvDial " WVDIAL_VER_STRING "\n"		     "Copyright (c) 1997-2005 Net Integration Technologies, "		     "Inc.");    args.set_help_header("An intelligent PPP dialer.");    args.set_help_footer("Optional SECTION arguments refer to sections in "			 "configuration file (usually)\n"			 "/etc/wvdial.conf, $HOME/.wvdialrc or the file "			 "specified by --config.\n"			 "Specified sections are all read, with later ones "			 "overriding previous ones.\n"			 "Any options not in the listed sections are taken "			 "from [Dialer Defaults].\n"			 "\n"			 "Also, optional OPTION=value parameters allow you "			 "to override options within\n"			 "the configuration files.\n");    args.set_email("<wvdial-list@lists.nit.ca>");    args.add_option('C', "config",		    "use configfile instead of /etc/wvdial.conf",		    "configfile", WvArgs::ArgCallback(&config_cb), &cfg);    args.add_set_bool_option('c', "chat",			     "used when running wvdial from pppd", chat_mode);    args.add_reset_bool_option('n', "no-syslog",			       "don't send output to SYSLOG", chat_mode);    args.add_optional_arg("SECTION", true);    args.add_optional_arg("OPTION=value", true);    WvStringList remaining_args;    args.process(argc, argv, &remaining_args);    {	WvStringList::Iter i(remaining_args);	for (i.rewind(); i.next(); )	{	    if (strchr(i(), '=' ))		cmdlineopts.append(new WvString(i()),true);	    else		sections.append(new WvString("Dialer %s", i()), true);	}    }    if (sections.isempty())	sections.append(new WvString("Dialer Defaults"), true);    if( !haveconfig)    {	// Load the system file first...	WvString stdconfig("/etc/wvdial.conf");			if (!access(stdconfig, F_OK))	    cfg.load_file(stdconfig);		// Then the user specific one...	if (homedir)        {	    WvString rcfile("%s/.wvdialrc", homedir);				    if (!access(rcfile, F_OK))		cfg.load_file(rcfile);	}    }        // Inject all of the command line options on into the cfg file in a new    // section called Command-Line if there are command line options.    if (!cmdlineopts.isempty())     {        WvStringList::Iter i(cmdlineopts);        for (i.rewind();i.next();)        {            char *name = i().edit();            char *value = strchr(name,'=');	                // Value should never be null since it can't get into the list            // if it doesn't have an = in i()            //             *value = 0;	    value++;            name = trim_string(name);            value = trim_string(value);            cfg.set("Command-Line", name, value);        }        sections.prepend(new WvString("Command-Line"), true);    }        if(!cfg.isok())     {	return 1;    }        if (chat_mode)     { 	if (write_syslog) 	{ 	    WvString buf("wvdial[%s]", getpid()); 	    syslog = new WvSyslog( buf, false, WvLog::Debug2, 				   WvLog::Debug2 ); 	} 	else 	{ 	    // Direct logging to /dev/null as otherwise WvLog hasn't any 	    // receivers and thus will use WvLogConsole to log to stderr. 	    // That can disturb the communication with the modem on 	    // stdin/stdout. - Fixes a bug reported by SUSE on 04/05/04	    filelog = new WvLogFile( "/dev/null", WvLog::Debug2 ); 	}     }        WvDialer dialer(cfg, &sections, chat_mode);        if (!chat_mode)	if (dialer.isok() && dialer.options.ask_password)	    dialer.ask_password();        if (dialer.dial() == false)	return  1;        while (!want_to_die && dialer.isok() 	   && dialer.status() != WvDialer::Idle)     {	dialer.select(100);	dialer.callback();    }        int retval;        if (want_to_die)    {	// Probably dieing from a user signal        retval = 2;    }        if ((dialer.status() != WvDialer::Idle) || !dialer.isok())     {	retval = 1;    }     else     {	retval = 0;    }        dialer.hangup();        WVRELEASE(filelog);    delete syslog;    return(retval);}

⌨️ 快捷键说明

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