📄 hylafaxserver.h
字号:
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 + -