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

传真(Fax)编程

开发平台:

C/C++

  1. /* $Id: FaxRequest.h,v 1.12 2008/09/14 10:33:12 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 _FaxRequest_
  27. #define _FaxRequest_
  28. /*
  29.  * HylaFAX Job Request Structure.
  30.  */
  31. #include "FaxSendStatus.h"
  32. #include "FaxItem.h"
  33. #include <time.h>
  34. #include <stdio.h>
  35. class Class2Params;
  36. /*
  37.  * This structure is passed from the queue manager
  38.  * to the fax modem+protocol service for each job
  39.  * to be processed.  This class also supports the
  40.  * reading and writing of this information to an
  41.  * external file.
  42.  */
  43. class FaxRequest {
  44. protected:
  45.     void reset(void);
  46.     virtual bool checkDocument(const char* pathname);
  47.     virtual void error(const char* fmt, ...);
  48. public:
  49.     enum {
  50. send_fax = 0, // send prepared file via fax
  51. send_tiff = 1, // send tiff file via fax
  52. send_tiff_saved = 2, // saved tiff file (converted)
  53. send_pdf = 3, // send PDF file via fax
  54. send_pdf_saved = 4, // saved PDF file (converted)
  55. send_postscript = 5, // send postscript file via fax
  56. send_postscript_saved = 6, // saved postscript file (converted)
  57. send_pcl = 7, // send PCL file via fax
  58. send_pcl_saved = 8, // saved PCL file (converted to tiff)
  59. send_data = 9, // send untyped data file
  60. send_data_saved = 10, // send untyped data file (converted)
  61. send_poll = 11, // make fax poll request
  62. send_page = 12, // send pager message (converted)
  63. send_page_saved = 13, // send pager message
  64. send_uucp = 14, // send file via uucp
  65. send_unknown= 15
  66.     };
  67.     enum { // notification flags
  68. no_notice = 0x0, // no notifications
  69. when_done = 0x1, // notify when send completed
  70. when_requeued = 0x2, // notify if job requeued
  71. notify_any = 0x3
  72.     };
  73.     enum { // page chopping control
  74. chop_default = 0, // default server setting
  75. chop_none = 1, // chop no pages
  76. chop_all = 2, // chop all pages with trailing white
  77. chop_last = 3 // chop last page in each document
  78.     };
  79.     enum { // job scheduling state
  80. state_undefined = 0, // undefined state (should never be used)
  81. state_suspended = 1, // not being scheduled
  82. state_pending = 2, // waiting for time to send
  83. state_sleeping = 3, // waiting for scheduled timeout
  84. state_blocked = 4, // blocked by concurrent activity
  85. state_ready = 5, // ready to be go, waiting for resources
  86. state_active = 6, // actively being processed
  87. state_done = 7, // processing completed with success
  88. state_failed = 8 // processing completed with a failure
  89.     };
  90.     struct stringval { // string-valued item
  91. const char* name;
  92. fxStr FaxRequest::* p;
  93.     };
  94.     struct shortval { // u_short-valued item
  95. const char* name;
  96. u_short FaxRequest::* p;
  97.     };
  98.     struct intval {
  99. const char* name;
  100. int FaxRequest::* p;
  101.     };
  102.     fxStr qfile; // associated queue file name
  103.     fxStr jobid; // job identifier
  104.     fxStr groupid; // job group identifier
  105.     fxStr owner; // job owner identifier
  106.     fxStr commid; // last session's communication ID
  107.     int fd; // open+locked queue file
  108.     u_short state; // job scheduling state
  109.     u_short lineno; // line number when reading queue file
  110.     FaxSendStatus status; // request status indicator
  111.     u_short totpages; // total cumulative pages in documents
  112.     u_short npages; // total pages sent/received
  113.     u_short skippages; // skip over these pages in the document
  114.     int skippedpages; // start page numbering here + 1
  115.     u_short serverdocover; // server should create the coverpage
  116.     u_short nocountcover; // don't count these pages
  117.     u_short ntries; // # tries to send current page
  118.     u_short ndials; // # consecutive failed tries to call dest
  119.     u_short totdials; // total # calls to dest
  120.     u_short maxdials; // max # times to dial the phone
  121.     u_short tottries; // total # attempts to deliver
  122.     u_short maxtries; // max # attempts to deliver (answered calls)
  123.     u_short pagewidth; // desired output page width (mm)
  124.     u_short pagelength; // desired output page length (mm)
  125.     u_short resolution; // desired vertical resolution (lpi) (normal/fine)
  126.     u_short usrpri; // user-requested scheduling priority
  127.     u_short pri; // current scheduling priority
  128.     u_short minbr; // minimum acceptable signalling rate
  129.     u_short desiredbr; // maximum desired signalling rate
  130.     u_short desiredst; // desired min-scanline-time
  131.     u_short desiredec; // enable use of ECM if available
  132.     u_short desireddf; // desired data format
  133.     u_short desiredtl; // desired tagline handling
  134.     u_short useccover; // whether to use continuation cover page
  135.     u_short usexvres; // whether to use extended VR
  136.     u_short pagechop; // whether to do page chopping
  137.     u_short notify; // email notification flags
  138.     u_short ignoremodembusy;// ignore modem busy status
  139.     float chopthreshold; // minimum white space before chopping
  140.     time_t tts; // time to send
  141.     time_t killtime; // time to kill job
  142.     time_t retrytime; // time to delay between retries
  143.     fxStr sender; // sender's name
  144.     fxStr mailaddr; // return mail address
  145.     fxStr jobtag; // user-specified job tag
  146.     fxStr number; // dialstring for fax machine
  147.     fxStr subaddr; // transmit subaddress
  148.     fxStr passwd; // transmit password
  149.     fxStr canonical; // canonical phone number for data correlation
  150.     fxStr external; // displayable phone number for fax machine
  151.     fxStr notice; // message to send for notification
  152.     fxStr modem; // outgoing modem (ModemGroup) to use
  153.     fxStr modemused; // specific modem used in last attempt
  154.     fxStr faxnumber; // Sender's number to advertise to phone company
  155.     fxStr faxname; // Sender's name to advertise to phone company
  156.     fxStr tsi; // TSI to use instead of LocalIdentifier
  157.     fxStr pagehandling; // page analysis information
  158.     fxStr receiver; // receiver's identity for cover page generation
  159.     fxStr company; // receiver's company for cover page generation
  160.     fxStr location; // receiver's location for cover page generation
  161.     fxStr voice; // receiver's voice number for cover page generation
  162.     fxStr fromcompany; // sender's company for cover page generation
  163.     fxStr fromlocation; // sender's location for cover page generation
  164.     fxStr fromvoice; // sender's voice number for cover page generation
  165.     fxStr regarding; // regarding subject for cover page generation
  166.     fxStr comments; // comments for cover page generation
  167.     fxStr cover; // continuation cover page filename
  168.     fxStr client; // identity of machine that submitted job
  169.     fxStr sigrate; // negotiated signalling rate
  170.     fxStr df; // negotiated data format
  171.     fxStr jobtype; // job type for selecting send command
  172.     fxStr tagline; // tag line format
  173.     fxStr doneop; // operation to do when job completes
  174.     fxStr csi; // CSI string from receiving equipment (ASCII representation)
  175.     fxStr nsf; // NSF string from receiving equipment (ASCII representation)
  176.     fxStr timeofday; // time of day restrictions
  177.     fxStr errorcode; // error code for status
  178.     pid_t writeQFilePid; // pid of last writeQFile operation
  179.     FaxItemArray items; // set of requests
  180.     static stringval strvals[];
  181.     static shortval shortvals[];
  182.     static intval intvals[];
  183.     static const char* opNames[18];
  184.     static const char* notifyVals[4];
  185.     static const char* chopVals[4];
  186.     FaxRequest(const fxStr& qf, int fd = -1);
  187.     virtual ~FaxRequest();
  188.     bool readQFile(bool& rejectJob);
  189.     bool reReadQFile(bool& rejectJob);
  190.     void writeQFile();
  191.     u_int findItem(FaxSendOp, u_int start = 0) const;
  192.     bool isNotify(u_int what) const;
  193.     static bool isStrCmd(const char* cmd, u_int& ix);
  194.     static bool isShortCmd(const char* cmd, u_int& ix);
  195.     static bool isIntCmd(const char* cmd, u_int& ix);
  196.     void insertFax(u_int ix, const fxStr& file);
  197.     void addItem(FaxSendOp op, char* tag);
  198.     void addItem(FaxSendOp op, char* tag, bool& rejectJob);
  199.     void checkNotifyValue(const char* tag);
  200.     void checkChopValue(const char* tag);
  201.     static fxStr mkbasedoc(const fxStr& file);
  202.     void renameSaved(u_int fi);
  203.     bool isUnreferenced(u_int fi);
  204. };
  205. inline bool FaxRequest::isNotify(u_int what) const
  206.     { return (notify & (u_short) what) != 0; }
  207. #endif /* _FaxRequest_ */