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

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

?? oldprotocol.c++

?? fax相關的東西
?? C++
?? 第 1 頁 / 共 3 頁
字號:
/*	$Id: OldProtocol.c++,v 1.14 2005/11/21 21:57:18 aidan Exp $ *//* * Copyright (c) 1995-1996 Sam Leffler * Copyright (c) 1995-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. */#ifdef OLDPROTO_SUPPORT/* * ``Old Protocol'' Support. * * This optional module implements the old client-server * protocol using the new mechanisms (mostly).  This * stuff is intended to be used for old clients that * cannot easily upgrade to use the new protocol (e.g. * the Mac- and PC-based clients). */#include "port.h"#include "Dispatcher.h"#include "OldProtocol.h"#include "Sys.h"#include "Socket.h"#include "config.h"#include <sys/file.h>#include <netdb.h>#include <ctype.h>extern "C" {#include <arpa/inet.h>#include <netinet/in_systm.h>#include <netinet/ip.h>}#define	FAX_OSERVICE	"fax"		// old protocol service name#define	FAX_ODEFPORT	4557		// old protocol default portOldProtocolSuperServer::OldProtocolSuperServer(const char* p, int bl)    : SuperServer("Old", bl)    , port(p){}OldProtocolSuperServer::~OldProtocolSuperServer() {}boolOldProtocolSuperServer::startServer(void){    int s = socket(AF_INET, SOCK_STREAM, 0);    if (s >= 0) {	struct sockaddr_in sin;	memset(&sin, 0, sizeof (sin));	sin.sin_family = AF_INET;	const char* cp = port;	struct servent* sp = getservbyname(cp, FAX_PROTONAME);	if (!sp) {	    if (isdigit(cp[0]))		sin.sin_port = htons(atoi(cp));	    else		sin.sin_port = htons(FAX_ODEFPORT);	} else	    sin.sin_port = sp->s_port;	if (Socket::bind(s, &sin, sizeof (sin)) >= 0) {	    (void) listen(s, getBacklog());	    Dispatcher::instance().link(s, Dispatcher::ReadMask, this);	    return (true);				// success	}	Sys::close(s);	logError("HylaFAX %s: bind (port %u): %m",	    getKind(), ntohs(sin.sin_port));    } else	logError("HylaFAX %s: socket: %m", getKind());    return (false);}HylaFAXServer* OldProtocolSuperServer::newChild(void)    { return new OldProtocolServer; }OldProtocolServer::OldProtocolServer(){    version = 0;    alreadyChecked = false;    codetab = NULL;}OldProtocolServer::~OldProtocolServer() {}voidOldProtocolServer::open(void){    setupNetwork(STDIN_FILENO);    initServer();    if (TRACE(CONNECT))        logInfo("HylaFAX Old connection from %s [%s]",	    (const char*) remotehost, (const char*) remoteaddr);    fxStr emsg;    if (isShutdown(true)) {        logInfo("HylaFAX Old connection refused (server shut down) from %s [%s]",	    (const char*) remotehost, (const char*) remoteaddr);	dologout(-1);    }    if (!initClientFIFO(emsg)) {        logInfo("HylaFAX Old connection refused (%s) from %s [%s]",	    (const char*) emsg,	    (const char*) remotehost, (const char*) remoteaddr);	dologout(-1);    }    /*     * We must chroot to the top of the spooling area to     * mimic the new protocol; otherwise various pathname     * assumptions will not be right.     */    uid_t ouid = geteuid();    seteuid(0);    if (chroot(".") < 0 || chdir("/") < 0)	dologout(-1);    seteuid(ouid);    (void) umask(077);    dirSetup();					// initialize directory handling    /*     * old protocol Jprintf format %Y historically gives localtime,     * we'll force off USEGMT now that %Y is GMT/LOCAL aware, just like     * SNNPServer.     */    state &= ~S_USEGMT;    doProtocol();}/* * Check host identity returned by gethostbyaddr to * weed out clients trying to spoof us (this is mostly * a sanity check; it's still trivial to spoof). * If the name returned by gethostbyaddr is in our domain, * look up the name and check that the peer's address * corresponds to the host name. */boolOldProtocolServer::checkHostIdentity(hostent*& hp){    if (!isLocalDomain(hp->h_name))		// not local, don't check	return (true);    fxStr name(hp->h_name);			// must copy static value    hp = Socket::gethostbyname(name);    if (hp) {	for (const char** cpp = (const char**) hp->h_addr_list; *cpp; cpp++)	    if (memcmp(*cpp, &peer_addr.sin_addr, hp->h_length) == 0)		return (true);	sendError("Client address %s is not listed for host name %s.",	    (const char*) remoteaddr, hp->h_name);    } else	sendError("No inverse address mapping for client host name %s.",	    (const char*) name);    return (false);}voidOldProtocolServer::setupNetwork(int fd){    socklen_t addrlen;    addrlen = sizeof (peer_addr);    if (Socket::getpeername(fd, &peer_addr, &addrlen) < 0) {        logError("getpeername: %m");        dologout(-1);    }    addrlen = sizeof (ctrl_addr);    if (Socket::getsockname(fd, &ctrl_addr, &addrlen) < 0) {        logError("getsockname: %m");        dologout(-1);    }#if defined(IPTOS_LOWDELAY)    { int tos = IPTOS_LOWDELAY;      if (Socket::setsockopt(fd, IPPROTO_IP, IP_TOS, &tos, sizeof (tos)) < 0)          logWarning("setsockopt (IP_TOS): %m");    }#endif#if defined(SO_LINGER) && !defined(__linux__)    { struct linger opt;      opt.l_onoff = 1;      opt.l_linger = 60;      if (Socket::setsockopt(fd, SOL_SOCKET, SO_LINGER, &opt, sizeof (opt)) < 0)	logWarning("setsockopt (SO_LINGER): %m");    }#endif#ifdef  F_SETOWN    if (fcntl(fd, F_SETOWN, getpid()) == -1)        logError("fcntl (F_SETOWN): %m");#endif    hostent* hp = gethostbyaddr((char*) &peer_addr.sin_addr,	sizeof (struct in_addr), AF_INET);    remoteaddr = inet_ntoa(peer_addr.sin_addr);    if (remoteaddr == "0.0.0.0")        remotehost = "localhost";    else if (hp) {	if (checkHostIdentity(hp))	    remotehost = hp->h_name;	else	    remotehost = remoteaddr;    } else {	sendError("Can not map your network address (%s) to a hostname",	    (const char*) remoteaddr);	remotehost =  remoteaddr;    }}// NB: there is no support for the old style data transferconst OldProtocolServer::protoCmd OldProtocolServer::cmds[] = {{ "begin",		true,	&OldProtocolServer::submitJob },{ "checkPerm",		true,	&OldProtocolServer::ackPermission },{ "tiff",		true,	&OldProtocolServer::getTIFFData },{ "postscript",		true,	&OldProtocolServer::getPostScriptData },{ "zpostscript",	true,	&OldProtocolServer::getZPostScriptData },{ "opaque",		true,	&OldProtocolServer::getOpaqueData },{ "zopaque",		true,	&OldProtocolServer::getZOpaqueData },{ "poll",		true,	&OldProtocolServer::newPollID },{ "userID",		false,	&OldProtocolServer::setUserID },{ "version",		false,	&OldProtocolServer::setProtoVersion },{ "serverStatus",	false,	&OldProtocolServer::sendServerStatus },{ "serverInfo",		false,	&OldProtocolServer::sendServerInfo },{ "allStatus",		false,	&OldProtocolServer::sendAllStatus },{ "userStatus",		false,	&OldProtocolServer::sendUserStatus },{ "jobStatus",		false,	&OldProtocolServer::sendJobStatus },{ "recvStatus",		false,	&OldProtocolServer::sendRecvStatus },{ "remove",		true,	&OldProtocolServer::removeJob },{ "removeGroup",	true,	&OldProtocolServer::removeJobGroup },{ "kill",		true,	&OldProtocolServer::killJob },{ "killGroup",		true,	&OldProtocolServer::killJobGroup },{ "alterTTS",		true,	&OldProtocolServer::alterJobTTS },{ "alterGroupTTS",	true,	&OldProtocolServer::alterJobGroupTTS },{ "alterKillTime",	true,	&OldProtocolServer::alterJobKillTime },{ "alterGroupKillTime",	true,	&OldProtocolServer::alterJobGroupKillTime },{ "alterMaxDials",	true,	&OldProtocolServer::alterJobMaxDials },{ "alterGroupMaxDials",	true,	&OldProtocolServer::alterJobGroupMaxDials },{ "alterNotify",	true,	&OldProtocolServer::alterJobNotification },{ "alterGroupNotify",	true,	&OldProtocolServer::alterJobGroupNotification },{ "alterModem",		true,	&OldProtocolServer::alterJobModem },{ "alterGroupModem",	true,	&OldProtocolServer::alterJobGroupModem },{ "alterPriority",	true,	&OldProtocolServer::alterJobPriority },{ "alterGroupPriority",	true,	&OldProtocolServer::alterJobGroupPriority },};#define	NCMDS	(sizeof (cmds) / sizeof (cmds[0]))#define	isCmd(a)	(strcasecmp(line,a) == 0)voidOldProtocolServer::doProtocol(void){    modem = MODEM_ANY;    the_user = "";    char line[1024];    char* tag;    for (;;) {	getCommandLine(line, tag);	if (isCmd("."))	    break;	if (isCmd("modem")) {			// select outgoing device	    int l = strlen(_PATH_DEV);	    char* cp;	    /*	     * Convert modem name to identifier form by stripping	     * any leading device pathname prefix and by replacing	     * '/'s with '_'s for SVR4 where terminal devices are	     * in subdirectories.	     */	    if (strncmp(tag, _PATH_DEV, l) == 0)		tag += l;	    for (cp = tag; (cp = strchr(cp, '/')); *cp = '_')		;	    modem = tag;	} else {	    u_int i;	    for (i = 0; i < NCMDS && !isCmd(cmds[i].cmd); i++)		;	    if (i == NCMDS)		protocolBotch("unrecognized cmd \"%s\".", line);	    if (cmds[i].check) {		if (!alreadyChecked) {		    if (!checkUser(the_user)) {			logError("%s (%s): HylaFAX Old service refused",			    (const char*) remotehost, (const char*) remoteaddr);			sendError(		    "Service refused; %s to use the fax server from %s (%s)."			    , "you do not have permission"			    , (const char*) remotehost			    , (const char*) remoteaddr			);			dologout(-1);		    }		    alreadyChecked = true;		}	    }	    (this->*cmds[i].cmdFunc)(tag);	}    }    fflush(stdout);    dologout(0);}voidOldProtocolServer::getCommandLine(char line[1024], char*& tag){    if (!fgets(line, 1024-1, stdin))	protocolBotch("unexpected EOF.");    char* cp = strchr(line, '\0');    if (cp > line && cp[-1] == '\n')	*--cp = '\0';    if (cp > line && cp[-1] == '\r')		// for telnet users	*--cp = '\0';    if (TRACE(PROTOCOL))	logDebug("line \"%s\"", line);    if (strcmp(line, ".") && strcmp(line, "..")) {	tag = strchr(line, ':');	if (!tag)	    protocolBotch("malformed line \"%s\".", line);	*tag++ = '\0';	while (isspace(*tag))	    tag++;    }}extern int parseAtSyntax(const char*, const struct tm&, struct tm&, fxStr& emsg);u_longOldProtocolServer::cvtTime(const char* spec, const struct tm* ref, const char* what){    fxStr emsg;    struct tm when;    if (!parseAtSyntax(spec, *ref, when, emsg)) {	sendAndLogError("Error parsing %s \"%s\": %s.", what, spec, (const char*) emsg);	/*NOTREACHED*/    }    return (u_long) mktime(&when);}voidOldProtocolServer::vsendClient(const char* tag, const char* fmt, va_list ap){    fxStr s = fxStr::format("%s:", tag) | fxStr::vformat(fmt, ap);    fprintf(stdout, "%s\n", (const char*)s);    if (TRACE(PROTOCOL)) {        logDebug("%s", (const char*)s);    }}voidOldProtocolServer::sendClient(const char* tag, const char* fmt, ...){    va_list ap;    va_start(ap, fmt);    vsendClient(tag, fmt, ap);    va_end(ap);}voidOldProtocolServer::sendError(const char* fmt, ...){    va_list ap;    va_start(ap, fmt);    vsendClient("error", fmt, ap);    va_end(ap);}voidOldProtocolServer::sendAndLogError(const char* fmt, ...){    va_list ap;    va_start(ap, fmt);    vsendClient("error", fmt, ap);    va_end(ap);    va_start(ap, fmt);    vlogError(fmt, ap);    va_end(ap);    dologout(1);}voidOldProtocolServer::protocolBotch(const char* fmt, ...){    va_list ap;    va_start(ap, fmt);    fxStr buf(fxStr::format("Protocol botch, %s", fmt));    vsendClient("error", buf, ap);    va_end(ap);    va_start(ap, fmt);    vlogError(buf, ap);    va_end(ap);    dologout(1);}/* * Miscellaneous protocol requests. *//* * Define client identity. */voidOldProtocolServer::setUserID(const char* tag){    the_user = tag;    initDefaultJob();    if (TRACE(LOGIN))	logInfo("HylaFAX OLD LOGIN FROM %s [%s], %s"	    , (const char*) remotehost	    , (const char*) remoteaddr	    , (const char*) the_user	);}/* * Add a poll request. */voidOldProtocolServer::newPollID(const char* tag){    reqs.append(FaxItem(FaxRequest::send_poll, 0, tag, ""));}/* * Set the required/expected protocol version. */voidOldProtocolServer::setProtoVersion(const char* tag){    version = atoi(tag);    if (version > FAX_PROTOVERS)	protocolBotch(	    "protocol version %u requested: only understand up to %u.",	    version, FAX_PROTOVERS);}/* * Send the client acknowledgement that * it has permission to submit jobs. */voidOldProtocolServer::ackPermission(const char*){    sendClient("permission", "%s", "granted");

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品综合久久| 亚洲三级小视频| 欧美精品久久99| 欧美放荡的少妇| 欧洲另类一二三四区| 精品国产制服丝袜高跟| 精品99999| 久久久影视传媒| 日韩伦理电影网| 国产精品久久久久影院老司| 精品久久久久久久一区二区蜜臀| 成人午夜视频免费看| 麻豆精品一区二区综合av| 日本网站在线观看一区二区三区| 久久99久久99精品免视看婷婷 | 婷婷综合另类小说色区| 欧美一区二区三区视频| 欧美精品一区二区三区很污很色的| 国产清纯在线一区二区www| 91首页免费视频| 欧美一区二区女人| 综合精品久久久| 色综合天天综合狠狠| 欧美在线一区二区| 欧美群妇大交群中文字幕| 国产精品一区一区| 一区二区三区在线免费| 亚洲综合色区另类av| 亚洲人吸女人奶水| 亚洲福利一区二区三区| 喷白浆一区二区| 成人夜色视频网站在线观看| 色狠狠av一区二区三区| 日韩无一区二区| 亚洲日本一区二区| 麻豆精品新av中文字幕| youjizz国产精品| 91精品国产综合久久小美女| 中文字幕 久热精品 视频在线 | 日本一区免费视频| 亚洲精品视频观看| 国产美女视频91| 欧美艳星brazzers| 国产视频视频一区| 日韩国产欧美视频| 91麻豆国产香蕉久久精品| 精品国免费一区二区三区| 国产日韩精品久久久| 午夜久久久久久久久| 99精品国产99久久久久久白柏 | 国产精品国产成人国产三级 | 国产91丝袜在线播放| 6080午夜不卡| 一区二区三区成人| 国产91精品入口| 2014亚洲片线观看视频免费| 亚洲国产精品久久久久秋霞影院| 亚洲综合av网| 国产高清视频一区| 欧美mv日韩mv| 日韩电影在线观看电影| 在线亚洲一区二区| 一区二区高清在线| 91免费视频大全| 国产精品成人在线观看| 成+人+亚洲+综合天堂| 日本一二三不卡| 福利视频网站一区二区三区| 精品国产成人在线影院| 美国av一区二区| 欧美一级欧美三级| 久久国产人妖系列| 精品国产麻豆免费人成网站| 久久国产精品99久久久久久老狼| 韩国一区二区三区| 欧美一区二区三区四区久久| 亚洲韩国一区二区三区| 在线观看视频欧美| 午夜影院久久久| 欧美精品视频www在线观看| 精久久久久久久久久久| 精品人伦一区二区色婷婷| 久久不见久久见免费视频1| 日韩午夜在线播放| 国产精品一区二区三区四区| 久久日韩精品一区二区五区| 国产在线观看一区二区| 中文字幕精品一区二区精品绿巨人| 一区二区三区在线视频观看| 色综合一区二区| 亚洲午夜私人影院| 日韩视频永久免费| 国产69精品久久久久毛片| 亚洲欧美日韩国产综合| 日日夜夜免费精品视频| 91无套直看片红桃| 久久综合九色综合97婷婷| 午夜精品久久久久久久久久 | 亚洲精品国产一区二区精华液| 久久久99精品久久| 日韩成人精品在线| 国产亚洲精品福利| 91亚洲国产成人精品一区二三| www.欧美亚洲| 日韩精品电影在线| 一级日本不卡的影视| 最新成人av在线| 国产精品久久久久久久久晋中| 91丨porny丨户外露出| 成人精品鲁一区一区二区| 国产精品乡下勾搭老头1| 久久电影网电视剧免费观看| 免费美女久久99| 蜜桃视频一区二区| 久久精品国产亚洲高清剧情介绍 | 日韩精品视频网| 午夜视频在线观看一区二区三区| 在线播放/欧美激情| 精品视频色一区| 9191成人精品久久| 制服丝袜成人动漫| 欧美一级在线视频| 欧美变态tickle挠乳网站| 欧美成人女星排行榜| 久久久久国产成人精品亚洲午夜| 色悠悠久久综合| 在线视频一区二区三| 在线精品视频免费播放| 欧美一区二区三区视频免费| 国产精品人人做人人爽人人添| 欧美视频一区二区在线观看| 欧美精品九九99久久| 欧美成人精品高清在线播放| 2021国产精品久久精品| 欧美经典三级视频一区二区三区| 欧美老女人在线| 久久综合九色综合久久久精品综合 | 国产一区二区精品在线观看| 国产99精品在线观看| 色天使色偷偷av一区二区| 欧美日本视频在线| 欧美大片免费久久精品三p| 国产亚洲制服色| 亚洲综合在线第一页| 久国产精品韩国三级视频| 成人app网站| 91精品欧美福利在线观看| 国产亚洲一区二区在线观看| 亚洲另类在线制服丝袜| 另类中文字幕网| 91久久精品一区二区二区| 精品黑人一区二区三区久久| 国产精品免费久久| 天堂成人国产精品一区| 成人性视频免费网站| 在线不卡欧美精品一区二区三区| 欧美最新大片在线看| 亚洲另类春色国产| 国内精品伊人久久久久影院对白| 五月婷婷激情综合| 国产成人综合视频| 欧美群妇大交群中文字幕| 中文一区二区在线观看| 水野朝阳av一区二区三区| www.欧美色图| 久久五月婷婷丁香社区| 亚洲成av人片| 99v久久综合狠狠综合久久| 欧美精品一区二区三区四区 | 日韩一卡二卡三卡国产欧美| 国产精品视频线看| 久久99日本精品| 欧美肥妇bbw| 亚洲午夜久久久久久久久久久| 18涩涩午夜精品.www| 国产一区二区三区免费看| 在线一区二区视频| 亚洲视频中文字幕| 成人免费看视频| 精品国产乱码久久久久久浪潮| 日韩一级大片在线观看| 樱桃国产成人精品视频| 成人激情午夜影院| 久久蜜桃av一区二区天堂| 麻豆国产一区二区| 7777精品伊人久久久大香线蕉完整版 | 欧美精品久久一区二区三区| 亚洲欧美一区二区三区国产精品| 亚洲欧美成aⅴ人在线观看| 国产激情一区二区三区四区| 日韩免费性生活视频播放| 免费欧美高清视频| 欧美一级片在线| 久久成人免费网站| 精品伦理精品一区| 国内精品视频一区二区三区八戒| 国产高清精品网站| 日本一区二区三区四区在线视频 | 中文字幕av不卡| 国产精品18久久久久久久久久久久 |