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

📄 parser.c++

📁 fax相关的东西
💻 C++
📖 第 1 页 / 共 4 页
字号:
    case T_TYPE:			// data transfer type	if (string_param(s, "transfer type")) {	    logcmd(t, "%s", (const char*) s);	    typeCmd(s);	    return (true);	}	break;    case T_RETP:			// retrieve next page of document/file	if (pathname_param(s)) {	    logcmd(t, "%s", (const char*) s);	    retrievePageCmd(s);	    return (true);	}	break;    case T_RETR:			// retrieve document/file	if (pathname_param(s)) {	    logcmd(t, "%s", (const char*) s);	    retrieveCmd(s);	    return (true);	}	break;    case T_STOR:			// store document/file	if (pathname_param(s)) {	    logcmd(t, "%s", (const char*) s);	    // XXX file must exist if not admin, check for bad chars in pathname	    storeCmd(s, "w");	    return (true);	}	break;    case T_APPE:			// append to document/file	if (pathname_param(s)) {	    logcmd(t, "%s", (const char*) s);	    storeCmd(s, "a");	    return (true);	}	break;    case T_STOT:			// store uniquely named document/file	if (CRLF()) {	    logcmd(t);	    storeUniqueCmd(true);	    return (true);	}	break;    case T_STOU:			// store uniquely named document/file	if (CRLF()) {	    logcmd(t);	    storeUniqueCmd(false);	    return (true);	}	break;    case T_LIST:			// list directory/file    case T_NLST:			// list directory/file names	if (opt_CRLF()) {	    logcmd(t);	    if (t == T_LIST)		listCmd(".");	    else		nlstCmd(".");	    return (true);	} else if (pathname_param(s)) {	    logcmd(t, "%s", (const char*) s);	    if (t == T_LIST)		listCmd(s);	    else		nlstCmd(s);	    return (true);	}	break;    case T_CWD:				// change working directory	if (opt_CRLF()) {	    logcmd(t);	    cwdCmd("/");	    return (true);	} else if (pathname_param(s)) {	    logcmd(t, "%s", (const char*) s);	    cwdCmd(s);	    return (true);	}	break;    case T_CDUP:			// CWD ..	logcmd(t);	cwdCmd("..");	return (true);    case T_PWD:				// print working directory	if (CRLF()) {	    logcmd(t);	    pwdCmd();	    return (true);	}	break;    case T_STAT:			// stat file/server status	if (opt_CRLF()) {	    logcmd(t);	    statusCmd();	    return (true);	} else if (checklogin(T_STAT) && pathname_param(s)) {	    logcmd(t, "%s", (const char*) s);	    statFileCmd(s);	    return (true);	}	break;    case T_SIZE:			// return file size	if (pathname_param(s)) {	    logcmd(t, "%s", (const char*) s);	    struct stat sb;	    if (Sys::stat(s, sb) < 0 || (sb.st_mode&S_IFMT) != S_IFREG)		reply(550, "%s: not a plain file.", (const char*) s);	    else		reply(213, "%lu", (u_long) sb.st_size);	    return (true);	}	break;    case T_CHMOD:			// set file protection	if (SPACE() && STRING(s, "filename") && SPACE() && NUMBER(n)) {	    chmodCmd(s, (u_int) n);	    return (true);	}	break;    case T_MDTM:			// return file last modification time	if (pathname_param(s)) {	    logcmd(t, "%s", (const char*) s);	    mdtmCmd(s);	    return (true);	}	break;    case T_DELE:			// delete file/document	if (pathname_param(s)) {	    logcmd(t, "%s", (const char*) s);	    deleCmd(s);	    return (true);	}	break;    case T_ABOR:			// abort active command/incoming call	if (opt_CRLF()) {	    logcmd(t);	    ack(225, cmdToken(t));	    return (true);	} else if (checkadmin(T_ABOR) && string_param(s, "modem")) {	    abortCallCmd(s);	    return (true);	}	break;    case T_HELP:			// return help	if (opt_CRLF()) {	    logcmd(t);	    helpCmd(cmdtab, (char*) NULL);	    return (true);	} else if (string_param(s, "command name")) {	    logcmd(t, "%s", (const char*) s);	    s.raisecase();	    if (s == "SITE")		helpCmd(sitetab, NULL);	    else if (s == "JPARM" || s == "JGPARM")		helpCmd(parmtab, NULL);	    else		helpCmd(cmdtab, s);	    return (true);	}	break;    case T_JNEW:			// create new job	if (CRLF()) {	    newJobCmd();	    return (true);	}	break;    case T_JOB:				// select current job	if (job_param(s)) {	    setCurrentJob(s);	    return (true);	}	break;    case T_JREST:			// reset job state	if (job_param(s)) {	    resetJob(s);	    return (true);	}	break;    case T_JDELE:			// delete job	if (job_param(s)) {	    deleteJob(s);	    return (true);	}	break;    case T_JINTR:			// interrupt job	if (job_param(s)) {	    interruptJob(s);	    return (true);	}	break;    case T_JKILL:			// kill job	if (job_param(s)) {	    killJob(s);	    return (true);	}	break;    case T_JSUSP:			// suspend job	if (job_param(s)) {	    suspendJob(s);	    return (true);	}	break;    case T_JSUB:			// submit job	if (job_param(s)) {	    submitJob(s);	    return (true);	}	break;    case T_JWAIT:			// wait for job	if (job_param(s)) {	    waitForJob(s);	    return (true);	}	break;    case T_JGNEW:			// create job group	if (CRLF()) {	    curJob->groupid = curJob->jobid;	    ack(200, cmdToken(t));	    return (true);	}	break;    case T_JGREST:			// reset current job group state	if (CRLF()) {	    return (true);	}	break;    case T_JGRP:			// select current job group	if (jgrp_param(s)) {	    return (true);	}	break;    case T_JGDELE:			// delete job group	if (jgrp_param(s)) {	    return (true);	}	break;    case T_JGINTR:			// interrupt job group	if (jgrp_param(s)) {	    return (true);	}	break;    case T_JGKILL:			// kill job group	if (jgrp_param(s)) {	    return (true);	}	break;    case T_JGSUSP:			// suspend job group	if (jgrp_param(s)) {	    return (true);	}	break;    case T_JGSUB:			// submit job group	if (jgrp_param(s)) {	    return (true);	}	break;    case T_JGWAIT:			// wait for job group	if (jgrp_param(s)) {	    return (true);	}	break;    case T_NOOP:			// no-op	if (CRLF()) {	    logcmd(t);	    ack(200, cmdToken(t));	    return (true);	}	break;    case T_IDLE:			// set/query idle timeout	if (opt_CRLF()) {	    logcmd(t);	    reply(213, "%u seconds.", idleTimeout);	    return (true);	} else if (number_param(n)) {	    logcmd(t, "%lu", n);	    if ((unsigned)n > maxIdleTimeout && !IS(PRIVILEGED)) {		idleTimeout = maxIdleTimeout;		reply(213, "%lu: Idle timeout too large, set to %u.",		    n, maxIdleTimeout);	    } else {		idleTimeout = (int) n;		reply(213, "Idle timeout set to %u.", idleTimeout);	    }	    return (true);	}	break;    case T_QUIT:			// terminate session	if (CRLF()) {	    logcmd(t);	    reply(221, "Goodbye.");	    dologout(0);	    return (true);	}	break;    case T_TZONE:			// set/query timezone usage	if (opt_CRLF()) {	    reply(200, "Time values are handled in %s.", 		IS(USEGMT) ? "GMT" : tzname[0]);	    return (true);	} else if (string_param(s, "timezone specification")) {	    logcmd(t, "%s", (const char*) s);	    s.raisecase();	    if (s == "GMT") {		state |= S_USEGMT;		reply(200, "Using time values in GMT.");	    } else if (s == "LOCAL") {		state &= ~S_USEGMT;		reply(200, "Using time values in %s.", tzname[0]);	    } else {		reply(503, "Unknown timezone specification %s.",		    (const char*) s);	    }	    return (true);	}	break;    case T_JOBFMT:			// query/specify job format string    case T_RCVFMT:			// query/specify recvq format string    case T_MODEMFMT:			// query/specify modem format string    case T_FILEFMT:			// query/specify file format string	if (opt_CRLF()) {	    reply(200, "%s",		t == T_JOBFMT ?   (const char*) jobFormat :		t == T_RCVFMT ?   (const char*) recvFormat:		t == T_MODEMFMT ? (const char*) modemFormat :				  (const char*) fileFormat	    );	    return (true);	} else if (string_param(s, "format-string")) {	    if (t == T_JOBFMT)		jobFormat = s;	    else if (t == T_RCVFMT)		recvFormat = s;	    else if (t == T_MODEMFMT)		modemFormat = s;	    else if (t == T_FILEFMT)		fileFormat = s;	    ack(200, cmdToken(t));	    return (true);	}	break;    case T_JPARM:			// set/query job parameter	if (opt_CRLF()) {	    logcmd(T_JPARM);	    if (checkJobState(curJob))		jstatCmd(*curJob);	    return (true);	} else if (SPACE() && getToken(T_STRING, "parameter name")) {	    tokenBody.raisecase();	    const tab* p = lookup(parmtab, N(parmtab), tokenBody);	    if (p == NULL) {		reply(500, "JPARM %s: Parameter not recognized.",		    (const char*) tokenBody);	    } else if (!p->implemented)		reply(502, "JPARM %s: Parameter not implemented.", p->name);	    else		return (param_cmd(p->token));	}	break;    case T_JGPARM:			// set/query job group parameter	if (SPACE() && getToken(T_STRING, "parameter name")) {	    tokenBody.raisecase();	    const tab* p = lookup(parmtab, N(parmtab), tokenBody);	    if (p == NULL) {		reply(500, "JPARM %s: Parameter not recognized.",		    (const char*) tokenBody);	    } else if (!p->implemented)		reply(502, "JPARM %s: Parameter not implemented.", p->name);	    else		return (param_cmd(p->token));	}	break;    case T_SITE:			// site-specific command	if (SPACE() && getToken(T_STRING, "site command")) {	    tokenBody.raisecase();	    const tab* p = lookup(sitetab, N(sitetab), tokenBody);	    if (p == NULL) {		reply(500, "SITE %s: Command not recognized.",		    (const char*) tokenBody);	    } else if (!p->implemented)		reply(502, "SITE %s: Command not implemented.", p->name);	    else		return (site_cmd(p->token));	}	break;    case T_ANSWER:			// answer phone on specific line	if (checkadmin(T_ANSWER) && SPACE() && STRING(s, "modem")) {	    fxStr how;	    if (opt_CRLF())		how = "any";	    else if (!string_param(how, "answer-how"))		break;	    answerCallCmd(s, how);	    return (true);	}	break;    case T_CHOWN:			// assign file ownership	if (checkadmin(T_CHOWN) && SPACE() && STRING(s, "filename")) {	    fxStr who;	    if (string_param(who, "user")) {		chownCmd(s, who);		return (true);	    }	}	break;    case T_DISABLE:			// disable outbound-usage of modem	if (checkadmin(T_DISABLE) && SPACE() && STRING(s, "modem")) {	    fxStr reason;	    if (opt_CRLF())		reason = "<unspecified reason>";	    else if (!SPACE() || !multi_STRING(reason))		break;	    disableModemCmd(s, reason);	    return (true);	}	break;    case T_ENABLE:			// enable outbound-usage of modem	if (checkadmin(T_ENABLE) && string_param(s, "modem")) {	    enableModemCmd(s);	    return (true);	}	break;    case T_SHUT:			// shutdown server	if (checkadmin(T_SHUT) && SPACE() && STRING(s, "shutdown-time")) {	    fxStr reason;	    if (opt_CRLF())		reason = "<unspecified reason>";	    else if (!SPACE() || !multi_STRING(reason))		break;	    const char* cp = s;	    if (s.length() == 3 && strcasecmp(cp, "NOW") == 0) {		time_t t = Sys::now();		shutCmd(*localtime(&t), reason);		return (true);	    } else if (s.length() == 4 && checkNUMBER(cp)) {		time_t t = Sys::now();		struct tm tm = *localtime(&t);		tm.tm_hour = 60*60*twodigits(cp, 60);		tm.tm_min  =    60*twodigits(cp+2, 60);		shutCmd(tm, reason);		return (true);	    } else if (s.length() == 12 && checkNUMBER(cp)) {		struct tm tm;		tm.tm_sec  = 0;

⌨️ 快捷键说明

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