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

传真(Fax)编程

开发平台:

C/C++

  1. /* $Id: Class2.h,v 1.13 2007/11/04 01:45:30 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 _CLASS2_
  27. #define _CLASS2_
  28. /*
  29.  * Base class for a Class 2 and Class 2.0 Modem Drivers.
  30.  */
  31. #include "FaxModem.h"
  32. #include <stdarg.h>
  33. class Class2Modem : public FaxModem {
  34. protected:
  35.     fxStr classCmd; // set class command
  36.     fxStr cqCmds; // copy quality setup commands
  37.     fxStr tbcCmd; // modem-host communication mode command
  38.     fxStr crCmd; // enable receiving command
  39.     fxStr phctoCmd; // set Phase C timeout command
  40.     fxStr bugCmd; // enable HDLC tracing command
  41.     fxStr lidCmd; // set local ID command
  42.     fxStr dccCmd; // set configuration parameters command
  43.     fxStr dccQueryCmd; // modem capabilities query command
  44.     fxStr disCmd; // set session parameters command
  45.     fxStr cigCmd; // set polling ID string command
  46.     fxStr splCmd; // set polling request command
  47.     fxStr nrCmd; // negotiation message reporting control
  48.     fxStr pieCmd; // procedure interrupt enable control
  49.     fxStr borCmd; // set bit order command
  50.     fxStr abortCmd; // abort session command
  51.     fxStr ptsCmd; // set page status command
  52.     fxStr ptsQueryCmd; // query page status command
  53.     fxStr minspCmd; // set minimum transmit speed command
  54.     fxStr apCmd; // set address&polling caps. command
  55.     fxStr saCmd; // set subaddress command
  56.     fxStr paCmd; // set selective polling address command
  57.     fxStr pwCmd; // set password command
  58.     fxStr noFlowCmd; // no flow control command
  59.     fxStr softFlowCmd; // software flow control command
  60.     fxStr hardFlowCmd; // hardware flow control command
  61.     u_int serviceType; // modem service required
  62.     u_int modemCQ; // copy quality capabilities mask
  63.     u_int sendCQ; // sending copy quality capabilities mask
  64.     bool xmitWaitForXON; // if true, wait for XON when sending
  65.     bool hostDidCQ; // if true, copy quality done on host
  66.     bool hasPolling; // if true, modem does polled recv
  67.     bool useExtendedDF; // if true, modem has T.32-A data format extension
  68.     bool useJP; // if true, modem has JP +FCC parameter option
  69.     char recvDataTrigger; // char to send to start recv'ing data
  70.     char hangupCode[5]; // hangup reason (from modem)
  71.     bool hadHangup; // true if +FHNG:/+FHS: received
  72.     fxStr lid; // prepared local identifier string
  73.     int imagefd; // file descriptor for raw image data
  74. // modem setup stuff
  75.     virtual bool setupModem(bool isSend = true);
  76.     virtual bool setupModel(fxStr& model);
  77.     virtual bool setupRevision(fxStr& rev);
  78.     virtual bool setupDCC(bool enableV34 = true, bool enableV17 = true);
  79.     virtual bool setupClass2Parameters(bool enableV34 = true, bool enableV17 = true);
  80.     virtual bool setupFlowControl(FlowControl fc);
  81. // transmission support
  82.     bool dataTransfer();
  83.     bool sendRTC(Class2Params params);
  84.     bool sendPageData(TIFF* tif, u_int pageChop);
  85.     virtual bool sendPage(TIFF* tif, u_int pageChop) = 0;
  86.     virtual bool pageDone(u_int ppm, u_int& ppr) = 0;
  87. // reception support
  88.     const AnswerMsg* findAnswer(const char*);
  89.     bool recvDCS(const char*);
  90.     bool recvPageData(TIFF*, fxStr& emsg);
  91.     bool recvPPM(TIFF*, int& ppr);
  92.     bool parseFPTS(TIFF*, const char* cp, int& ppr);
  93.     void abortPageRecv();
  94. // miscellaneous
  95.     enum { // Class 2-specific AT responses
  96. AT_FHNG = 100, // remote hangup
  97. AT_FCON = 101, // fax connection status
  98. AT_FPOLL = 102, // document available for polling status
  99. AT_FDIS = 103, // DIS received status
  100. AT_FNSF = 104, // NSF received status
  101. AT_FCSI = 105, // CSI received status
  102. AT_FPTS = 106, // post-page status
  103. AT_FDCS = 107, // DCS received status
  104. AT_FNSS = 108, // NSS received status
  105. AT_FTSI = 109, // TSI received status
  106. AT_FET = 110, // post-page-response status
  107. AT_FVO = 111, // voice transition status
  108. AT_FSA = 112, // subaddress status
  109. AT_FPA = 113,  // polling address status
  110. AT_FPW = 114 // password status
  111.     };
  112.     virtual ATResponse atResponse(char* buf, long ms = 30*1000) = 0;
  113.     bool waitFor(ATResponse wanted, long ms = 30*1000);
  114.     fxStr stripQuotes(const char*);
  115. // hangup processing
  116.     void processHangup(const char*);
  117.     bool isNormalHangup();
  118.     const char* hangupCause(const char* code, bool codetocode = false);
  119.     void tracePPR(const char* dir, u_int ppr);
  120.     void tracePPM(const char* dir, u_int ppm);
  121. // class 2 command support routines
  122.     bool class2Cmd(const fxStr& cmd, int a0,
  123.     ATResponse = AT_OK, long ms = 30*1000);
  124.     bool class2Cmd(const fxStr& cmd, const fxStr& a0,
  125.     ATResponse = AT_OK, long ms = 30*1000);
  126.     bool class2Cmd(const fxStr& cmd, const Class2Params&, bool isDCC,
  127.     ATResponse =AT_OK, long ms = 30*1000);
  128. // parsing routines for capability&parameter strings
  129.     bool parseClass2Capabilities(const char* cap, Class2Params&, bool isDIS);
  130.     bool parseRange(const char*, Class2Params&);
  131.     const char* skipStatus(const char*);
  132.     Class2Modem(FaxServer&, const ModemConfig&);
  133. public:
  134.     virtual ~Class2Modem();
  135. // send support
  136.     bool sendSetup(FaxRequest&, const Class2Params&, fxStr& emsg);
  137.     CallStatus dialResponse(fxStr& emsg);
  138.     FaxSendStatus getPrologue(Class2Params&, bool&, fxStr&, u_int&);
  139.     FaxSendStatus sendPhaseB(TIFF* tif, Class2Params&, FaxMachineInfo&,
  140.     fxStr& pph, fxStr& emsg, u_int& batched);
  141.     void sendAbort();
  142. // receive support
  143.     bool setupReceive();
  144.     bool recvBegin(FaxSetup* setupinfo, fxStr& emsg);
  145.     bool recvEOMBegin(FaxSetup* setupinfo, fxStr& emsg);
  146.     bool recvPage(TIFF*, u_int& ppm, fxStr& emsg, const fxStr& id);
  147.     bool recvEnd(FaxSetup* setupinfo, fxStr& emsg);
  148.     void recvAbort();
  149.     void pokeConfig(bool isSend);
  150. // polling support
  151.     bool requestToPoll(fxStr& emsg);
  152.     bool pollBegin(const fxStr& cig, const fxStr& sep, const fxStr& pwd,
  153.     fxStr& emsg);
  154. // miscellaneous
  155.     bool faxService(bool enableV34, bool enableV17); // switch to fax mode (send)
  156.     bool reset(long ms); // reset modem
  157.     void setLID(const fxStr& number); // set local id string
  158.     bool supportsPolling() const; // modem capability
  159. };
  160. #endif /* _CLASS2_ */