亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? trigger.c++

?? fax相關的東西
?? C++
字號:
/*	$Id: Trigger.c++,v 1.3 2004/11/23 21:04:09 lhoward Exp $ *//* * Copyright (c) 1990-1996 Sam Leffler * Copyright (c) 1991-1996 Silicon Graphics, Inc. * HylaFAX is a trademark of Silicon Graphics * * Permission to use, copy, modify, distribute, and sell this software and  * its documentation for any purpose is hereby granted without fee, provided * that (i) the above copyright notices and this permission notice appear in * all copies of the software and related documentation, and (ii) the names of * Sam Leffler and Silicon Graphics may not be used in any advertising or * publicity relating to the software without the specific, prior written * permission of Sam Leffler and Silicon Graphics. *  * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND,  * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY  * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.   *  * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF  * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE  * OF THIS SOFTWARE. */#include "port.h"#include "Sys.h"#include "config.h"#include "HylaFAXServer.h"#include "Dispatcher.h"#include "ModemExt.h"#include "JobExt.h"#include "FaxRecvInfo.h"#include "FaxSendInfo.h"/* * Setup a trigger to monitor server events and * return ascii/binary event information on a * data connection. */voidHylaFAXServer::triggerCmd(const char* fmt ...){    /*     * We setup the connection before registering the     * trigger to reduce lost event reports.  If we setup     * the trigger first then events could come in and     * be discarded while we were setting up the data     * connection.  Either way we may still lose some     * events if, for example, the client wants to     * fully monitor a submitted job using a single     * control channel.  The only way to reliably do     * this is to register a trigger before a job is     * submitted (sigh).     */    int code;    FILE* dout = openDataConn("w", code);    if (dout != NULL) {	va_list ap;	va_start(ap, fmt);	trigSpec = fxStr::vformat(fmt, ap);	va_end(ap);	reply(code, "%s for trigger \"%s\".", dataConnMsg(code),	    (const char*) trigSpec);	state |= S_LOGTRIG;			// force events to be reported	fxStr emsg;	if (loadTrigger(emsg)) {	    if (setjmp(urgcatch) == 0) {		state |= S_TRANSFER;		/*		 * The only way out of this is a client		 * ABORt request or if the control channel		 * connection is broken.		 */		for (;;)		    Dispatcher::instance().dispatch();	    } else		perror_reply(426, "Data connection", errno);	    state &= ~S_TRANSFER;	    (void) cancelTrigger(emsg);	} else	    reply(504, "Cannot register trigger: %s.", (const char*) emsg);	state &= ~S_LOGTRIG;	closeDataConn(dout);    }}/* * Create a trigger for the specified events * and return the identifier sent back by the * scheduler. */boolHylaFAXServer::newTrigger(fxStr& emsg, const char* fmt, ...){    va_list ap;    va_start(ap, fmt);    bool b = vnewTrigger(emsg, fmt, ap);    va_end(ap);    return (b);}boolHylaFAXServer::vnewTrigger(fxStr& emsg, const char* fmt, va_list ap){    trigSpec = fxStr::vformat(fmt, ap);    return (loadTrigger(emsg));}/* * Send the current trigger specification to the scheduler * and stash the returned trigger ID.  This is used to * create triggers the first time as well as to re-load an * active trigger if the scheduler is restarted. */boolHylaFAXServer::loadTrigger(fxStr& emsg){    if (sendQueuerACK(emsg, "T%s", (const char*) trigSpec) &&      fifoResponse.length() > 2) {	tid = atoi(&fifoResponse[2]);	return (true);    } else	return (false);}/* * Inform the spooler that it should cancel * a previously created trigger. */boolHylaFAXServer::cancelTrigger(fxStr& emsg){    trigSpec = "";				// avoid spontaneous reloads    return sendQueuer(emsg, "D%u", tid);}/* * Handle a trigger event received while waiting * for a job or group of jobs.  The status information * is sent back to the client over the data channel * if S_LOGTRIG is set in the server state. */voidHylaFAXServer::triggerEvent(const TriggerMsgHeader& h, const char* cp){#define	EventType(e)	((e)>>4)    int evt = EventType(h.event);    if (evt == EventType(JOB_BASE) || evt == EventType(SEND_BASE)) {	JobExt job;	cp = job.decode(cp);	/*	 * Propagate job state for clients that are doing	 * things like waiting for a job to complete.  This	 * may be fairly costly if someone traces all jobs	 * as it'll cause the in-memory job database to grow.	 */	fxStr emsg;	Job* jp = findJob(job.jobid, emsg);	if (jp) {	    jp->tts = job.tts;	    jp->killtime = job.killtime;	    jp->state = job.state;	    jp->pri = job.pri;	    jp->commid = job.commid;	}	if (IS(LOGTRIG) && type == TYPE_A) {	    if (evt == EventType(JOB_BASE))		logJobEventMsg(h, job);	    else		logSendEventMsg(h, job, cp);	}    } else if (evt == EventType(RECV_BASE)) {	FaxRecvInfo ri;	ri.decode(cp);	/*	 * Update/record receive queue status.	 */	RecvInfo* rip = recvq[ri.qfile];	if (!rip)	    recvq[ri.qfile] = rip = new RecvInfo(ri.qfile);	if (rip->recvTime == 0)	    rip->recvTime = h.tstamp;	if (h.event == Trigger::RECV_END) {	    rip->beingReceived = false;	    rip->reason = ri.reason;	} else	    rip->beingReceived = true;	rip->sender = ri.sender;	rip->subaddr = ri.subaddr;	rip->npages = ri.npages;	rip->time = h.tstamp - rip->recvTime;	rip->commid = ri.commid;	if (IS(LOGTRIG) && type == TYPE_A)	    logRecvEventMsg(h, ri, cp);    } else if (evt == EventType(MODEM_BASE)) {	ModemExt modem;	cp = modem.decode(cp);	if (IS(LOGTRIG) && type == TYPE_A)	    logModemEventMsg(h, modem, cp);    } else {	logError("Unrecognized trigger event message %u.", h.event);	return;    }    if (IS(LOGTRIG) && type == TYPE_I) {	/*	 * Binary trigger logging causes the raw event	 * stream to pass through to the user.  This is	 * probably not a great idea as it causes clients	 * to be aware of the server's internal message	 * formats but for some applications it may be	 * appropriate.  We support it now to better	 * understand the implications.	 */	(void) Sys::write(data, cp - sizeof (h), h.length);    }#undef EventType}/* * Ascii Trigger Event Logging Support. */#define	unknownEvent	"Unknown event"		// XXX for HP CCvoidHylaFAXServer::logEventMsg(const TriggerMsgHeader& h, fxStr& msg){    struct tm& tm = *cvtTime(h.tstamp);    msg.insert(fxStr::format("%02d%02d%02d %d "	, tm.tm_hour	, tm.tm_min	, tm.tm_sec	, 100+h.event    ));    msg.append("\r\n");    (void) Sys::write(data, msg, msg.length());}/* * Format and log a job event. */voidHylaFAXServer::logJobEventMsg(const TriggerMsgHeader& h, const JobExt& job){    static const char* jobNames[16] = {	"Created",	"Suspended",	"Ready to send",	"Sleeping awaiting time-to-send",	"Marked dead",	"Being processed by scheduler",	"Corpus reaped",	"Activated",	"Rejected",	"Killed",	"Blocked by another job",	"Delayed by time-of-day restriction or similar",	"Parameters altered",	"Timed out",	"Preparation started",	"Preparation finished",    };    fxStr msg = fxStr::format("JOB %s (dest %s pri %u com %s): %s"	, (const char*) job.jobid	, (const char*) job.dest	, job.pri	, (const char*) job.commid	, jobNames[h.event&0xf]    );    logEventMsg(h, msg);}static voidaddParams(fxStr& msg, const Class2Params& params){    msg.append(fxStr::format("<%s, %s, %s, %s, %s>"	, (params.ln == LN_A4 ? "A4" : params.ln == LN_B4 ? "B4" : "INF")	, params.verticalResName()	, params.dataFormatName()	, params.bitRateName()	, params.scanlineTimeName()    ));}/* * Format and log a send event. */voidHylaFAXServer::logSendEventMsg(const TriggerMsgHeader& h, const JobExt& job, const char* cp){    fxStr msg = fxStr::format("JOB %s (dest %s pri %u com %s): SEND FAX: "	, (const char*) job.jobid	, (const char*) job.dest	, job.pri	, (const char*) job.commid    );    if (h.event != Trigger::SEND_POLLRCVD) {	static const char* sendNames[16] = {	    "Begin attempt",			// SEND_BEGIN	    "Call placed (off-hook)",		// SEND_CALL	    "Connected to remote device",	// SEND_CONNECTED	    unknownEvent,			// SEND_PAGE	    unknownEvent,			// SEND_DOC	    unknownEvent,			// SEND_POLLRCVD	    unknownEvent,			// SEND_POLLDONE	    "Finished attempt",			// SEND_END	    "Reformat documents because of capabilities mismatch",	    "Requeue job",			// SEND_REQUEUE	    "Job completed successfully",	// SEND_DONE	    unknownEvent,	    unknownEvent,	    unknownEvent,	    unknownEvent,	    unknownEvent	};	FaxSendInfo si;	switch (h.event) {	case Trigger::SEND_PAGE:		// page sent	    si.decode(cp);	    msg.append(fxStr::format("Page %u sent in %s (file %s) "		, si.npages		, fmtTime(si.time)		, (const char*) si.qfile	    ));	    addParams(msg, si.params);	    break;	case Trigger::SEND_DOC:			// document sent	    si.decode(cp);	    msg.append(fxStr::format("Document sent in %s (file %s)"		, fmtTime(si.time)		, (const char*) si.qfile	    ));	    break;	case Trigger::SEND_POLLDONE:		// polling operation done	    si.decode(cp);	    msg.append(fxStr::format("Poll completed in %s (file %s)"		, fmtTime(si.time)		, (const char*) si.qfile	    ));	    break;	default:	    msg.append(sendNames[h.event&15]);	    break;	}    } else {	FaxRecvInfo ri;	ri.decode(cp);	msg.append(fxStr::format("Recv polled document from %s, %u pages in %s, file %s"	    , (const char*) ri.sender	    , ri.npages	    , fmtTime((time_t) ri.time)	    , (const char*) ri.qfile	));    }    logEventMsg(h, msg);}/* * Format and log a modem event. */voidHylaFAXServer::logModemEventMsg(const TriggerMsgHeader& h, const ModemExt& modem, const char* cp){    static const char* modemNames[16] = {	"Assigned to job",	"Released by job",	"Marked down",	"Marked ready",	"Marked busy",	"Considered wedged",	"In-use by an outbound job",	"Inbound data call begin",	"Inbound data call completed",	"Inbound voice call begin",	"Inbound voice call completed",	"Caller-id information: ",	unknownEvent,	unknownEvent,	unknownEvent,	unknownEvent    };    fxStr msg = fxStr::format("MODEM %s: %s"	, (const char*) modem.devID	, modemNames[h.event&15]    );    if (h.event == Trigger::MODEM_CID)	msg.append(cp);    logEventMsg(h, msg);}/* * Format and log a facsimile receive event. */voidHylaFAXServer::logRecvEventMsg(const TriggerMsgHeader& h, const FaxRecvInfo& ri, const char*){    fxStr msg = fxStr::format("RECV FAX: ");    switch (h.event) {    case Trigger::RECV_BEGIN:	msg.append("Call started");	break;    case Trigger::RECV_END:	msg.append("Call ended");	break;    case Trigger::RECV_START:	msg.append(fxStr::format("Session started (com %s), TSI \"%s\" "	    , (const char*) ri.commid	    , (const char*) ri.sender	));	addParams(msg, ri.params);	break;    case Trigger::RECV_PAGE:	msg.append(fxStr::format("From %s (com %s), page %u in %s "	    , (const char*) ri.sender	    , (const char*) ri.commid	    , ri.npages	    , fmtTime((time_t) ri.time)	));	addParams(msg, ri.params);	break;    case Trigger::RECV_DOC:	msg.append(fxStr::format("From %s (com %s), %u pages in %s, file %s"	    , (const char*) ri.sender	    , (const char*) ri.commid	    , ri.npages	    , fmtTime((time_t) ri.time)	    , (const char*) ri.qfile	));	break;    default:	msg.append(unknownEvent);	break;    }    logEventMsg(h, msg);}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人一级黄色片| 天天综合色天天| 国产精品热久久久久夜色精品三区| 制服丝袜亚洲网站| 日韩美女视频一区二区在线观看| 久久女同互慰一区二区三区| 国产日韩欧美高清| 亚洲最色的网站| 亚洲成人一二三| 国产丶欧美丶日本不卡视频| 麻豆精品蜜桃视频网站| 成人午夜大片免费观看| 色综合久久88色综合天天免费| 99精品久久99久久久久| 欧美精品三级日韩久久| 国产欧美一二三区| 亚洲男女一区二区三区| 麻豆精品一二三| 99久久婷婷国产| 欧美成人伊人久久综合网| 国产精品乱人伦| 日本一道高清亚洲日美韩| www.66久久| 日韩精品一区在线观看| 亚洲精品亚洲人成人网在线播放| 国内精品伊人久久久久av影院 | 国模少妇一区二区三区| 久久国产免费看| 在线观看精品一区| 国产午夜精品一区二区三区嫩草 | 久久久久九九视频| 午夜伦理一区二区| 亚洲国产另类精品专区| 粉嫩高潮美女一区二区三区| 欧美日韩aaaaaa| 日韩毛片视频在线看| 国产一区二区福利| 91精品国产aⅴ一区二区| 亚洲在线中文字幕| 国产盗摄精品一区二区三区在线| 91精品国产综合久久福利软件| 亚洲免费av高清| 国产一区美女在线| 91精品国产丝袜白色高跟鞋| 亚洲国产日产av| 欧美在线高清视频| 亚洲色大成网站www久久九九| 国产精品99久久久久久似苏梦涵 | 国内精品免费**视频| 91精品国产免费久久综合| 亚洲国产精品天堂| 欧美探花视频资源| 亚洲亚洲人成综合网络| 欧美专区日韩专区| 亚洲综合男人的天堂| 欧美影视一区在线| 亚洲午夜一二三区视频| 精品视频资源站| 琪琪一区二区三区| 欧美日韩国产高清一区二区| 亚洲成精国产精品女| 欧美日韩专区在线| 天堂午夜影视日韩欧美一区二区| 在线一区二区观看| 亚洲国产综合色| 91精品婷婷国产综合久久| 日韩电影在线一区| 日韩精品一区二区三区三区免费| 久久黄色级2电影| 欧美一卡二卡在线观看| 亚洲动漫第一页| 欧美喷潮久久久xxxxx| 国产精品自拍网站| 一区二区三区欧美视频| 日韩精品自拍偷拍| 色系网站成人免费| 狠狠v欧美v日韩v亚洲ⅴ| 一区二区三区在线观看动漫| 日韩一区二区免费电影| 91麻豆swag| 国产在线不卡一区| 亚洲一级二级在线| 久久先锋影音av鲁色资源网| 在线免费一区三区| 国产精品影音先锋| 日韩av网站在线观看| 亚洲色图视频网| 国产亚洲精品免费| 日韩欧美中文字幕精品| 欧美亚洲一区二区在线| 成人av集中营| 国产精品中文字幕日韩精品| 视频一区视频二区中文| 亚洲日韩欧美一区二区在线| 久久久午夜精品| 日韩写真欧美这视频| 欧美亚洲国产一区在线观看网站| 国产乱码精品一区二区三| 日本不卡123| 亚洲精品美国一| 国产精品无人区| 久久久久国产精品麻豆ai换脸| 91精品国产综合久久福利软件| 日本久久一区二区| 99这里都是精品| 国产激情91久久精品导航| 老司机午夜精品| 日日夜夜精品视频天天综合网| 亚洲欧洲制服丝袜| 国产精品久久久爽爽爽麻豆色哟哟| 日韩精品一区二区三区在线| 欧美伦理电影网| 制服视频三区第一页精品| 欧美日韩在线一区二区| 欧美性一区二区| 欧美性猛交xxxx乱大交退制版| 91久久免费观看| 欧美视频一区二区三区在线观看| 色94色欧美sute亚洲线路一ni | 国产精品18久久久久久久久久久久 | 在线欧美小视频| 日本久久电影网| 欧美日韩视频在线第一区 | 亚洲超碰97人人做人人爱| 亚洲成人一二三| 奇米四色…亚洲| 国内精品国产成人| 风间由美一区二区三区在线观看| 国产成人亚洲综合a∨婷婷图片| 国产成人综合视频| 91社区在线播放| 欧美日韩成人在线一区| 欧美刺激脚交jootjob| 国产婷婷色一区二区三区在线| 国产欧美日韩卡一| 亚洲欧美国产高清| 午夜成人免费电影| 国内精品免费在线观看| 99精品视频在线播放观看| 欧美午夜精品免费| 日韩一区二区三区四区| 国产丝袜美腿一区二区三区| 中文字幕永久在线不卡| 亚洲成av人片| 国产精品66部| 欧美在线影院一区二区| 欧美一二三四区在线| 中文字幕精品三区| 亚洲午夜羞羞片| 国产一区二区三区四区五区入口| 99久久婷婷国产精品综合| 制服视频三区第一页精品| 久久久久国色av免费看影院| 亚洲图片另类小说| 免费xxxx性欧美18vr| 福利一区在线观看| 欧美日韩精品电影| 国产香蕉久久精品综合网| 一区二区三区免费网站| 国产一区中文字幕| 欧美主播一区二区三区| 久久视频一区二区| 亚洲国产色一区| 成人理论电影网| 3d动漫精品啪啪一区二区竹菊| 久久久av毛片精品| 亚洲一区二区三区中文字幕| 久久99深爱久久99精品| 色爱区综合激月婷婷| 久久久精品免费观看| 爽好久久久欧美精品| 成人av手机在线观看| 欧美草草影院在线视频| 亚洲一区二区三区四区在线| 国产成人av自拍| 欧美va亚洲va| 日韩国产高清影视| 欧美主播一区二区三区| 国产精品女主播在线观看| 精品一区二区三区影院在线午夜| 欧美在线啊v一区| 欧美激情一区二区三区蜜桃视频| 七七婷婷婷婷精品国产| 欧美一a一片一级一片| 日韩毛片高清在线播放| 丁香网亚洲国际| 欧美va在线播放| 日本美女视频一区二区| 欧美网站大全在线观看| 亚洲综合区在线| 色综合色综合色综合色综合色综合| 国产欧美日韩视频在线观看| 黄色资源网久久资源365| 欧美一区二区在线视频| 午夜精品福利一区二区蜜股av | 99久久精品国产毛片| 久久久精品国产免大香伊| 激情六月婷婷久久| 精品国产一二三区| 韩国欧美一区二区|