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

📄 parser.c++

📁 fax相关的东西
💻 C++
📖 第 1 页 / 共 4 页
字号:
		tm.tm_min  = twodigits(cp+10, 60);		tm.tm_hour = twodigits(cp+8, 24);		tm.tm_mday = twodigits(cp+6, 31);		tm.tm_mon  = twodigits(cp+4, 12) -1;		tm.tm_year = fourdigits(cp+0) - 1900;		shutCmd(tm, reason);		return (true);	    } else		syntaxError("bad time specification");	}	break;    case T_VRFY:			// verify server to use for destination	if (string_param(s, "dialstring")) {	    // XXX at least support a static file...	    reply(200, "%s (%s)"		, (const char*) hostname		, (const char*) hostaddr	    );	    return (true);	}	break;    }    return (false);}/* * Site-specific protocol commands (one line). */boolHylaFAXServer::site_cmd(Token t){    fxStr s;    switch (t) {    case T_ADDUSER:	if (checkadmin(T_ADDUSER) && SPACE() && STRING(s, "user-spec")) {	    fxStr pass;	    if (opt_CRLF()) {		addUserCmd(s, "", "");		return (true);	    } else if (SPACE() && STRING(pass, "password")) {		fxStr apass;		if (opt_CRLF()) {		    addUserCmd(s, pass, "");		    return (true);		} else if (string_param(apass, "admin-password")) {		    addUserCmd(s, pass, apass);		    return (true);		}	    }	}	break;    case T_DELUSER:	if (checkadmin(T_DELUSER) && string_param(s, "user-spec")) {	    delUserCmd(s);	    return (true);	}	break;    case T_DELMODEM:	if (checkadmin(T_DELMODEM) && string_param(s, "modem")) {	    delModemCmd(s);	    return (true);	}	break;    case T_ADDMODEM:	if (checkadmin(T_ADDMODEM) && string_param(s, "modem")) {	    addModemCmd(s);	    return (true);	}	break;    case T_CONFIG:	if (checkadmin(T_CONFIG) && SPACE() && STRING(s, "modem")) {	    fxStr config;	    if (opt_CRLF()) {		configQueryCmd(s);		return (true);	    } else if (SPACE() && multi_STRING(config)) {		configCmd(s, config);		return (true);	    }	}	break;    case T_TRIGGER:	if (string_param(s, "trigger-spec")) {	    logcmd(t, "%s", (const char*)s);	    triggerCmd("%s", (const char*) s);	    return (true);	}	break;    case T_HELP:			// return help	if (opt_CRLF()) {	    helpCmd(sitetab, (char*) NULL);	    return (true);	} else if (string_param(s, "command name")) {	    logcmd(T_SITE, "HELP %s", (const char*) s);	    s.raisecase();	    helpCmd(sitetab, s);	    return (true);	}	break;    }    return (false);}boolHylaFAXServer::param_cmd(Token t){    fxStr s;    long n;    time_t ticks;    bool b;    switch (t) {    case T_SENDTIME:			// time to send job	if (opt_CRLF()) {	    replyJobParamValue(*curJob, 213, t);	    return (true);	} else if (SPACE() && getToken(T_STRING, "time specification")) {	    tokenBody.raisecase();	    if (tokenBody == "NOW") {		if (CRLF() && setJobParameter(*curJob, t, (time_t) 0)) {		    reply(213, "%s set to NOW.", parmToken(t));		    return (true);		}	    } else {		pushToken(T_STRING);	// XXX		if (TIMESPEC(12, ticks) && CRLF() &&		  setJobParameter(*curJob, t, ticks)) {		    if (ticks != 0) {			const struct tm* tm = cvtTime(ticks);			// XXX should response include seconds?			reply(213, "%s set to %4d%02d%02d%02d%02d%02d."			    , parmToken(t)			    , tm->tm_year+1900			    , tm->tm_mon+1			    , tm->tm_mday			    , tm->tm_hour			    , tm->tm_min			    , tm->tm_sec			);		    } else			reply(213, "%s set to NOW.", parmToken(t));		    return (true);		}	    }	}	break;    case T_LASTTIME:			// time to kill job	if (opt_CRLF()) {	    replyJobParamValue(*curJob, 213, t);	    return (true);	} else if (timespec_param(6, ticks) &&	  setJobParameter(*curJob, t, ticks)) {	    reply(213, "%s set to %02d%02d%02d."		, parmToken(t)		, ticks/(24*60*60)		, (ticks/(60*60))%24		, (ticks/60)%60	    );	    return (true);	}	break;    case T_RETRYTIME:			// retry interval for job	if (opt_CRLF()) {	    replyJobParamValue(*curJob, 213, t);	    return (true);	} else if (timespec_param(4, ticks) &&	  setJobParameter(*curJob, t, ticks)) {	    reply(213, "%s set to %02d%02d."		, parmToken(t)		, ticks/60		, ticks%60	    );	    return (true);	}	break;    case T_MAXDIALS:    case T_MAXTRIES:    case T_VRES:    case T_PAGEWIDTH:    case T_PAGELENGTH:    case T_MINBR:    case T_BEGBR:    case T_BEGST:    case T_MAXPAGES:    case T_SCHEDPRI:    case T_NPAGES:    case T_TOTPAGES:    case T_NTRIES:    case T_TOTTRIES:    case T_NDIALS:    case T_TOTDIALS:	if (opt_CRLF()) {	    replyJobParamValue(*curJob, 213, t);	    return (true);	} else if (number_param(n) &&	  setJobParameter(*curJob, t, (u_short) n)) {	    reply(213, "%s set to %u.", parmToken(t), n);	    return (true);	}	break;    case T_NOTIFYADDR:    case T_NOTIFY:    case T_MODEM:    case T_DIALSTRING:    case T_EXTERNAL:    case T_SUBADDR:    case T_DATAFORMAT:    case T_TO_USER:    case T_TO_LOCATION:    case T_TO_COMPANY:    case T_TO_VOICE:    case T_FROM_USER:    case T_FROM_LOCATION:    case T_FROM_COMPANY:    case T_FROM_VOICE:    case T_USRKEY:    case T_PASSWD:    case T_CLIENT:    case T_PAGECHOP:    case T_TAGLINE:    case T_GROUPID:    case T_JOBID:    case T_JOBINFO:    case T_OWNER:    case T_STATE:    case T_STATUS:    case T_DONEOP:    case T_COMMID:    case T_REGARDING:    case T_COMMENTS:    case T_FAXNUMBER:    case T_TSI:	if (opt_CRLF()) {	    replyJobParamValue(*curJob, 213, t);	    return (true);	} else if (SPACE() && multi_STRING(s) && CRLF() &&	  setJobParameter(*curJob, t, s)) {	    reply(213, "%s set to \"%s\".", parmToken(t), (const char*) s);	    return (true);	}	break;    case T_USE_ECM:    case T_USE_TAGLINE:    case T_USE_CONTCOVER:	if (opt_CRLF()) {	    replyJobParamValue(*curJob, 213, t);	    return (true);	} else if (boolean_param(b) &&	  setJobParameter(*curJob, t, b)) {	    reply(213, "%s set to %s.", parmToken(t), b ? "YES" : "NO");	    return (true);	}	break;    case T_USE_XVRES:	if (opt_CRLF()) {	    replyJobParamValue(*curJob, 213, t);	    return (true);	} else if (boolean_param(b) &&	  setJobParameter(*curJob, t, b)) {	    reply(213, "%s set to %s.", parmToken(t), b ? "YES" : "NO");	    return (true);	}	break;    case T_CHOPTHRESH:	if (opt_CRLF()) {	    replyJobParamValue(*curJob, 213, t);	    return (true);	} else if (string_param(s, "floating point number") &&	  setJobParameter(*curJob, t, (float) atof(s))) {	    reply(213, "%s set to %g.", parmToken(t), (float) atof(s));	    return (true);	}	break;     case T_COVER:			// specify/query cover page document	if (opt_CRLF()) {	    replyJobParamValue(*curJob, 213, t);	    return (true);	} else if (pathname_param(s)) {	    addCoverDocument(*curJob, s);	    return (true);	}	break;    case T_DOCUMENT:			// specify/query normal document	if (opt_CRLF()) {	    replyJobParamValue(*curJob, 213, t);	    return (true);	} else if (pathname_param(s)) {	    addDocument(*curJob, s);	    return (true);	}	break;    case T_POLL:			// specify/query poll operation	if (opt_CRLF()) {	    replyJobParamValue(*curJob, 213, t);	    return (true);	} else if (SPACE() && STRING(s, "polling selector")) {	    fxStr pwd;	    if (opt_CRLF()) {		addPollOp(*curJob, s, "");	// sep but no pwd		return (true);	    } else if (SPACE() && pwd_param(pwd) && CRLF()) {		addPollOp(*curJob, s, pwd);	// sep & pwd		return (true);	    }	}	break;    case T_HELP:			// return help	if (opt_CRLF()) {	    helpCmd(parmtab, (char*) NULL);	    return (true);	} else if (string_param(s, "parameter name")) {	    s.raisecase();	    logcmd(T_JPARM, "HELP %s", (const char*) s);	    helpCmd(parmtab, s);	    return (true);	}	break;    }    return (false);}/* * Collect a single string parameter. */boolHylaFAXServer::string_param(fxStr& s, const char* what){    return SPACE() && STRING(s, what) && CRLF();}/* * Collect a single number parameter. */boolHylaFAXServer::number_param(long& n){    return SPACE() && NUMBER(n) && CRLF();}/* * Collect a single boolean parameter. */boolHylaFAXServer::boolean_param(bool& b){    return SPACE() && BOOLEAN(b) && CRLF();}/* * Collect a single time parameter. */boolHylaFAXServer::timespec_param(int ndigits, time_t& t){    return SPACE() && TIMESPEC(ndigits, t) && CRLF();}/* * File manipulation command. */boolHylaFAXServer::pathname_param(fxStr& s){    return SPACE() && pathname(s) && CRLF();}/* * Job control commands. */boolHylaFAXServer::job_param(fxStr& jid){    if (opt_CRLF()) {	jid = curJob->jobid;	return (true);    } else if (SPACE() && STRING(jid, "job identifer") && CRLF()) {	jid.lowercase();	return (true);    }    return (false);}/* * Job group control commands. */boolHylaFAXServer::jgrp_param(fxStr& jgid){    if (opt_CRLF()) {	jgid = curJob->groupid;	return (true);    } else if (SPACE() && STRING(jgid, "job group identifier") && CRLF()) {	jgid.lowercase();	return (true);    }    return (false);}boolHylaFAXServer::pwd_param(fxStr& s){    return STRING(s, "polling password");}boolHylaFAXServer::pathname(fxStr& s){    return STRING(s, "pathname");}boolHylaFAXServer::TIMESPEC(u_int len, time_t& result){    if (getToken(T_STRING, "time specification")) {	if (tokenBody.length() == len) {	    if (checkNUMBER(tokenBody)) {		const char* cp = tokenBody;		if (len == 12) {		// YYYYMMDDHHMM		    struct tm tm;		    tm.tm_sec  = 0;		    tm.tm_min  = twodigits(cp+10, 60);		    tm.tm_hour = twodigits(cp+8, 24);		    tm.tm_mday = twodigits(cp+6, 32);		    tm.tm_mon  = twodigits(cp+4, 13) - 1;		    tm.tm_year = fourdigits(cp+0) - 1900;		    tm.tm_isdst= -1;		// XXX not sure about this???		    /*		     * Client specifies time relative to GMT		     * and mktime returns locally adjusted		     * time so we need to adjust the result		     * here to get things in the right timezone.		     */		    result = mktime(&tm) - gmtoff;		} else if (len == 6) {		// DDHHMM		    result = 24*60*60*twodigits(cp, 100)			   +    60*60*twodigits(cp+2, 24)			   +       60*twodigits(cp+4, 60);		} else {			// MMSS		    result = 60*twodigits(cp, 60)			   +    twodigits(cp+2, 60);		}

⌨️ 快捷键说明

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