FaxServer.h
上传用户:weiyuanprp
上传日期:2020-05-20
资源大小:1169k
文件大小:5k
源码类别:

传真(Fax)编程

开发平台:

C/C++

  1. /* $Id: FaxServer.h,v 1.7 2008/01/12 20:00:18 faxguy Exp $ */
  2. /*
  3.  * Copyright (c) 1990-1996 Sam Leffler
  4.  * Copyright (c) 1991-1996 Silicon Graphics, Inc.
  5.  * HylaFAX is a trademark of Silicon Graphics
  6.  *
  7.  * Permission to use, copy, modify, distribute, and sell this software and 
  8.  * its documentation for any purpose is hereby granted without fee, provided
  9.  * that (i) the above copyright notices and this permission notice appear in
  10.  * all copies of the software and related documentation, and (ii) the names of
  11.  * Sam Leffler and Silicon Graphics may not be used in any advertising or
  12.  * publicity relating to the software without the specific, prior written
  13.  * permission of Sam Leffler and Silicon Graphics.
  14.  * 
  15.  * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, 
  16.  * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY 
  17.  * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  
  18.  * 
  19.  * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
  20.  * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
  21.  * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
  22.  * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF 
  23.  * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 
  24.  * OF THIS SOFTWARE.
  25.  */
  26. #ifndef _FaxServer_
  27. #define _FaxServer_
  28. /*
  29.  * Fax Modem and Protocol Server.
  30.  */
  31. #include "ModemServer.h"
  32. #include "FaxRecvInfo.h"
  33. #include "Array.h"
  34. class FaxAcctInfo;
  35. fxDECLARE_ObjArray(FaxRecvInfoArray, FaxRecvInfo)
  36. /*
  37.  * This class defines the ``server process'' that manages the fax
  38.  * modem and implements the necessary protocol above the FaxModem
  39.  * driver interface.  When the server is multi-threaded, this class
  40.  * embodies a separate thread.
  41.  */
  42. class FaxServer : public ModemServer {
  43. private:
  44.     FaxModem* modem; // modem driver
  45. // group 3 protocol-related state
  46.     Class2Params clientCapabilities; // received client capabilities
  47.     Class2Params clientParams; // current session parameters
  48. // for fax reception ...
  49.     fxStr recvTSI; // sender's TSI
  50.     fxStr hostname; // host on which fax is received
  51.     u_int recvPages; // count of received pages
  52.     pid_t waitNotifyPid; // pid of last notification process
  53. // send+receive stats
  54.     time_t connTime; // time connected to peer
  55.     time_t fileStart; // starting time for file transmit
  56.     time_t pageStart; // starting time for page transmit
  57.     time_t pageTransferTime; // transfer time for last page
  58.     u_int npages; // # pages sent/received
  59.     fxStr batchid; // Batch ID, for session logs
  60.     u_int formatSize[2]; // combined byte sizes for comparing 1D and 2D encodings
  61.     friend class FaxModem;
  62.     bool useDF; // limits application of RTFCC
  63. // FAX transmission protocol support
  64.     void sendFax(FaxRequest& fax, FaxMachineInfo&, const fxStr& number, u_int&);
  65.     bool sendClientCapabilitiesOK(FaxRequest&, FaxMachineInfo&, fxStr&);
  66.     bool sendFaxPhaseB(FaxRequest&, FaxItem&, FaxMachineInfo&, u_int, bool);
  67.     void sendPoll(FaxRequest& fax, bool remoteHasDoc);
  68.     FaxSendStatus sendSetupParams(TIFF*,
  69.     Class2Params&, const FaxMachineInfo&, fxStr&);
  70.     FaxSendStatus sendSetupParams1(TIFF*,
  71.     Class2Params&, const FaxMachineInfo&, fxStr&);
  72.     void sendFailed(FaxRequest& fax,
  73.     FaxSendStatus, const char* notice, u_int tts = 0);
  74. // FAX reception support
  75.     int getRecvFile(fxStr& qfile, fxStr& emsg);
  76.     TIFF* setupForRecv(FaxRecvInfo&, FaxRecvInfoArray&, fxStr& emsg);
  77.     bool recvDocuments(TIFF*, FaxRecvInfo&, FaxRecvInfoArray&,
  78.     FaxSetup* setupinfo, fxStr& emsg);
  79.     bool recvFaxPhaseD(TIFF* tif, FaxRecvInfo&, u_int& ppm, fxStr& emsg);
  80.     bool pollFaxPhaseB(const fxStr& sep, const fxStr& pwd,
  81.     FaxRecvInfoArray&, fxStr& emsg);
  82. protected:
  83.     FaxServer(const fxStr& deviceName, const fxStr& devID);
  84.     bool setupModem(bool isSend = true);
  85.     ClassModem* deduceModem(bool isSend = true);
  86.     void discardModem(bool dropDTR);
  87.     fxStr getModemCapabilities() const;
  88.     void readConfig(const fxStr& filename);
  89.     void setLocalIdentifier(const fxStr& lid);
  90.     void sendFax(FaxRequest&, FaxMachineInfo&, FaxAcctInfo&, u_int&, bool);
  91.     bool recvFax(const CallID& callid, FaxMachineInfo clientInfo, fxStr& emsg);
  92.     time_t getFileTransferTime() const;
  93.     time_t getPageTransferTime() const;
  94.     time_t setPageTransferTime();
  95.     time_t getConnectTime() const;
  96.     const Class2Params& getClientParams() const;
  97. // notification interfaces overridden in derived class
  98.     virtual void notifyCallPlaced(const FaxRequest&);
  99.     virtual void notifyConnected(const FaxRequest&);
  100.     virtual void notifyPageSent(FaxRequest&, const char*);
  101.     virtual void notifyDocumentSent(FaxRequest&, u_int index);
  102.     virtual void notifyPollRecvd(FaxRequest&, FaxRecvInfo&);
  103.     virtual void notifyPollDone(FaxRequest&, u_int index);
  104.     virtual void notifyRecvBegun(FaxRecvInfo&);
  105.     virtual void notifyPageRecvd(TIFF* tif, FaxRecvInfo&, int ppm);
  106.     virtual void notifyDocumentRecvd(FaxRecvInfo& req);
  107.     virtual void notifyRecvDone(FaxRecvInfo& req);
  108.     virtual bool processTSIRecvdCmd(FaxRecvInfo&, fxStr&);
  109. public:
  110.     virtual ~FaxServer();
  111.     void initialize(int argc, char** argv);
  112.     const fxStr& getLocalIdentifier() const;
  113.     bool modemSupports2D() const;
  114.     bool modemSupportsMMR() const;
  115.     bool modemSupportsEOLPadding() const;
  116.     bool modemSupportsVRes(float res) const;
  117.     bool modemSupportsPageLength(u_int l) const;
  118.     bool modemSupportsPolling() const;
  119. };
  120. #endif /* _FaxServer_ */