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

📄 hylafaxserver.h

📁 fax相关的东西
💻 H
📖 第 1 页 / 共 2 页
字号:
    void statFileCmd(const char* name);	// STAT    void chownCmd(const char*, const char*);// CHOWN    void chmodCmd(const char*, u_int);	// CHMOD    virtual void passiveCmd(void) = 0;	// PASV: depends on transport    virtual void portCmd(void) = 0;	// PORT: depends on transport    void triggerCmd(const char*, ...);	// TRIGGER    /*     * Administrative commands (experimental).     */    void abortCallCmd(const char*);    void addUserCmd(const char* spec, const char* pass, const char* apass);    void delUserCmd(const char* spec);    void answerCallCmd(const char* modem, const char* how);    void disableModemCmd(const char* modem, const char* reason);    void enableModemCmd(const char* mode);    void shutCmd(const struct tm& when, const char* reason);    void addModemCmd(const char* modem);    void delModemCmd(const char* modem);    void configQueryCmd(const char* where);    void configCmd(const char* where, const char* info);    virtual void initServer(void);    bool readShutdownFile(void);    bool isShutdown(bool quiet);    void fatal(const char *fmt, ...);    void reply(int code, const char* fmt, ...);    void vreply(int code, const char* fmt, va_list ap);    void lreply(int code, const char* fmt, ...);    void vlreply(int code, const char* fmt, va_list ap);    void perror_reply(int code, const char* string, int errnum);    void ack(int code, const char*);    void printTransferStatus(FILE* fd);    struct tm* cvtTime(const time_t&) const;    void setFileOwner(const char* filename);    void loginRefused(const char* why);	bool pamCheck(const char* user=NULL, const char* pass=NULL);	bool pamIsAdmin(const char* user=NULL);	void pamEnd(int pamret);    bool checkUser(const char*);    bool checkuser(FILE*, const char *name);    bool checkuser(const char *name);    void login(int code);    void end_login(void);    virtual void dologout(int status);    const char* fixPathname(const char* file);    const char* userName(u_int uid);    bool userID(const char*, u_int& id);    void fillIDCache(void);    bool cvtPasswd(const char* type, const char* pass, fxStr& result);    bool findUser(FILE* db, const char* user, u_int& newuid);    bool addUser(FILE* db, const char* user, u_int uid,	const char* upass, const char* apass);    bool deleteUser(FILE* db, const char* user);    /*     * Configuration file support.     */    static stringtag strings[];    static numbertag numbers[];    void resetConfig();    void setupConfig();    void configError(const char* fmt, ...);    void configTrace(const char* fmt, ...);    bool setConfigItem(const char* tag, const char* value);    bool restartSend(FILE* fd, off_t marker);    static SpoolDir dirs[];    void dirSetup(void);    static SpoolDir* dirLookup(const char* path);    static SpoolDir* dirLookup(ino_t ino);    SpoolDir* dirAccess(const char* path);    SpoolDir* fileAccess(const char* path, int op, struct stat&);    bool fileVisible(const SpoolDir&, const char*, const struct stat&);    bool isVisibleRecvQFile(const char*, const struct stat&);    void listRecvQ(FILE* fd, const SpoolDir& sd, DIR* dir);    void listRecvQFile(FILE*, const SpoolDir&, const char*, const struct stat&);    bool isVisibleSendQFile(const char*, const struct stat&);    void listSendQ(FILE* fd, const SpoolDir& sd, DIR* dir);    void listSendQFile(FILE*, const SpoolDir&, const char*, const struct stat&);    void nlstSendQ(FILE* fd, const SpoolDir& sd, DIR* dir);    void nlstSendQFile(FILE*, const SpoolDir&, const char*, const struct stat&);    void listStatus(FILE* fd, const SpoolDir& sd, DIR* dir);    void listStatusFile(FILE*, const SpoolDir&, const char*, const struct stat&);    void nlstStatus(FILE* fd, const SpoolDir& sd, DIR* dir);    bool isVisibletrue(const char*, const struct stat&);    bool isVisibleDocQFile(const char*, const struct stat&);    bool isVisibleRootFile(const char*, const struct stat&);    void listDirectory(FILE* fd, const SpoolDir& sd, DIR* dir);    void listUnixFile(FILE*, const SpoolDir&, const char*, const struct stat&);    void makeProt(const struct stat& sb, bool withGrp, char prot[10]);    void Fprintf(FILE*, const char* fmt, const char*, const struct stat&);    void nlstDirectory(FILE* fd, const SpoolDir& sd, DIR* dir);    void nlstUnixFile(FILE*, const SpoolDir&, const char*, const struct stat&);    virtual FILE* openDataConn(const char* mode, int& code) = 0;    static const char* dataConnMsg(int code);    virtual void closeDataConn(FILE*);    bool sendData(FILE* fdin, FILE* fdout);    bool sendIData(int fdin, int fdout);    bool sendZData(int fdin, int fdout);    bool recvData(FILE* instr, FILE* outstr);    bool recvIData(int fdin, int fdout);    bool recvZData(int fdin, int fdout);    TIFF* openTIFF(const char* name);    bool sendTIFFData(TIFF* tif, FILE* fdout);    bool sendTIFFHeader(TIFF* tif, int fdout);    bool sendITIFFData(TIFF* tif, int fdout);    void logTransfer(const char*, const SpoolDir&, const char*, time_t);    virtual int parse(void);    bool cmd(Token t);    bool site_cmd(Token t);    bool param_cmd(Token t);    bool string_param(fxStr&, const char* what = NULL);    bool number_param(long&);    bool boolean_param(bool&);    bool file_param(fxStr& pathname);    bool pwd_param(fxStr& s);    bool timespec_param(int ndigits, time_t& t);    bool pathname_param(fxStr& pathname);    bool job_param(fxStr& jid);    bool jgrp_param(fxStr& jgid);    bool pathname(fxStr& s);    bool CRLF();    bool SPACE();    bool COMMA();    bool TIMESPEC(u_int len, time_t& result);    bool BOOLEAN(bool& b);    bool STRING(fxStr& s, const char* what = NULL);    bool NUMBER(long& n);    bool checkNUMBER(const char* s);    bool opt_CRLF();    bool opt_STRING(fxStr& s);    bool multi_STRING(fxStr& s);    static u_int twodigits(const char* cp, u_int range);    static u_int fourdigits(const char* cp);    virtual void syntaxError(const char* msg);    virtual void netStatus(FILE*) = 0;	// depends on transport    virtual bool hostPort() = 0;	// depends on transport    int getChar(bool waitForInput);    void pushCmdData(const char* data, int n);    bool getCmdLine(char* s, int n, bool waitForInput = false);    void pushToken(Token t);    Token nextToken(void);    bool checkToken(Token);    bool getToken(Token, const char*);    void helpCmd(const tab* ctab, const char* s);    void logcmd(Token t, const char* fmt = NULL, ...);    void cmdFailure(Token t, const char* why);    bool checklogin(Token);    bool checkadmin(Token);    static const char* version;    virtual const char* cmdToken(Token t);    virtual const char* siteToken(Token t);    static const char* parmToken(Token t);    bool initClientFIFO(fxStr& emsg);    int FIFOInput(int fd);    void FIFOMessage(const char* cp, u_int len);    bool sendModem(const char* modem, fxStr& emsg, const char* fmt ...);    bool sendQueuerMsg(fxStr& emsg, const fxStr& msg);    bool sendQueuer(fxStr& emsg, const char* fmt ...);    bool sendQueuerACK(fxStr& emsg, const char* fmt, ...);    bool vsendQueuerACK(fxStr& emsg, const char* fmt, va_list ap);    bool newTrigger(fxStr& emsg, const char* fmt, ...);    bool vnewTrigger(fxStr& emsg, const char* fmt, va_list ap);    bool loadTrigger(fxStr& emsg);    bool cancelTrigger(fxStr& emsg);    void triggerEvent(const TriggerMsgHeader& h, const char* data);    void logEventMsg(const TriggerMsgHeader&h, fxStr& msg);    void logJobEventMsg(const TriggerMsgHeader&, const JobExt&);    void logSendEventMsg(const TriggerMsgHeader&, const JobExt&, const char*);    void logModemEventMsg(const TriggerMsgHeader&,	const ModemExt&, const char*);    void logRecvEventMsg(const TriggerMsgHeader&,	const FaxRecvInfo&, const char*);    virtual void initDefaultJob(void);    void parmBotch(Token t);    bool checkAccess(const Job& job, Token t, u_int op);    bool checkParm(Job&, Token t, u_int op);    bool checkJobState(Job*);    void replyJobParamValue(Job&, int code, Token t);    void replyBoolean(int code, bool b);    bool setValue(u_short& v, const char* value, const char* what,	const char* valNames[], u_int nValNames);    void flushPreparedDocuments(Job& job);    bool setJobParameter(Job&, Token t, const fxStr& value);    bool setJobParameter(Job&, Token t, u_short value);    bool setJobParameter(Job&, Token t, time_t value);    bool setJobParameter(Job&, Token t, bool b);    bool setJobParameter(Job&, Token t, float value);    bool docType(const char* docname, FaxSendOp& op);    bool checkAddDocument(Job&, Token type, const char* docname, FaxSendOp&);    void addCoverDocument(Job&, const char* docname);    void addDocument(Job&, const char* docname);    void addPollOp(Job&, const char* sep, const char* pwd);    void newJobCmd(void);    bool newJob(fxStr& emsg);    Job* findJob(const char* jobid, fxStr& emsg);    Job* findJobInMemmory(const char* jobid);    Job* findJobOnDisk(const char* jobid, fxStr& emsg);    bool updateJobFromDisk(Job& job);    void replyCurrentJob(const char* leader);    void setCurrentJob(const char* jobid);    Job* preJobCmd(const char* op, const char* jobid, fxStr& emsg);    void operateOnJob(const char* jobid, const char* what, const char* op);    void deleteJob(const char* jobid);    void killJob(const char* jobid);    void replyBadJob(const Job& job, Token t);    void resetJob(const char* jobid);    void interruptJob(const char* jobid);    void suspendJob(const char* jobid);    void submitJob(const char* jobid);    void waitForJob(const char* jobid);    bool updateJobOnDisk(Job& req, fxStr& emsg);    bool lockJob(Job& job, int how, fxStr& emsg);    bool lockJob(Job& job, int how);    void unlockJob(Job& job);#ifdef OLDPROTO_SUPPORT    void readJobs(void);#endif    void purgeJobs(void);    void jstatCmd(const Job&);    void jstatLine(Token t, const char* fmt ...);    const char* compactTime(time_t t);    void Jprintf(FILE* fd, const char* fmt, const Job& job);    u_int getJobNumber(fxStr&);    u_int getDocumentNumber(fxStr&);    bool getRecvDocStatus(RecvInfo& ri);    RecvInfo* getRecvInfo(const fxStr& qfile, const struct stat& sb);    const char* compactRecvTime(time_t t);    void Rprintf(FILE*, const char*, const RecvInfo&, const struct stat&);    void getServerStatus(const char* fileName, fxStr& status);    void Mprintf(FILE*, const char*, const ModemConfig&);public:    HylaFAXServer();    virtual ~HylaFAXServer();    static void setupPermissions(void);    static void closeAllBut(int fd);    static void closeAllDispatched();    static void sanitize(fxStr& s);    static void canonModem(fxStr& s);    static void canonDevID(fxStr& s);    virtual void open(void);    virtual void close(void);    virtual int inputReady(int);    void timerExpired(long, long);};inline void HylaFAXServer::pushToken(Token t)		{ pushedToken = t; }/* * Directories in the spooling area are treated * specially to hide implementation details and * privileged information that clients have no * business seeing.  Also we implement an access * control system that is built on top of the * normal UNIX protection mechanisms. */ struct SpoolDir {    const char*	pathname;    bool adminOnly;	// accessible by unprivileged clients    bool storAble;	// unprivileged clients may STOR files    bool deleAble;	// unprivileged clients may DELE files    ino_t ino;		// directory inode number    bool (HylaFAXServer::*isVisibleFile)(const char*, const struct stat&);    void (HylaFAXServer::*listDirectory)(FILE*, const SpoolDir&, DIR*);    void (HylaFAXServer::*listFile)(FILE*, const SpoolDir&,        const char*, const struct stat&);    void (HylaFAXServer::*nlstDirectory)(FILE*, const SpoolDir&, DIR*);    void (HylaFAXServer::*nlstFile)(FILE*, const SpoolDir&,        const char*, const struct stat&);    void (HylaFAXServer::*delFile)(const SpoolDir&, const char*);    void (HylaFAXServer::*retrFile)(const SpoolDir&, const char*);    void (HylaFAXServer::*storFile)(const SpoolDir&, const char*);};#define	IS(x)	((state & (S_##x)) != 0)#endif /* _HylaFAXServer_ */

⌨️ 快捷键说明

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