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

传真(Fax)编程

开发平台:

C/C++

  1. /* $Id: SendFaxClient.h,v 1.3 2007/09/02 00:39:02 faxguy Exp $ */
  2. /*
  3.  * Copyright (c) 1993-1996 Sam Leffler
  4.  * Copyright (c) 1993-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. /*
  27.                     SendFaxClient class
  28. */
  29. #ifndef _SendFaxClient_
  30. #define _SendFaxClient_
  31. #include "FaxClient.h"
  32. #include "SendFaxJob.h"
  33. class TypeRule;
  34. class TypeRules;
  35. class DialStringRules;
  36. struct FileInfo;
  37. class FileInfoArray;
  38. struct PollRequest;
  39. class PollRequestArray;
  40. class SendFaxClient : public FaxClient {
  41. public:
  42.     // NB: the SF_ prefixes workaround a bug in the AIX xlC compiler
  43.     struct SF_stringtag {
  44. const char*  name;
  45. fxStr SendFaxClient::* p;
  46. const char*  def; // NULL is shorthand for ""
  47.     };
  48. private:
  49.     SendFaxJobArray* jobs; // job state information
  50.     SendFaxJob proto; // prototypical job
  51.     fxStr typeRulesFile; // filename for type deduction rules
  52.     TypeRules* typeRules; // file type/conversion database
  53.     fxStr dialRulesFile; // filename for dialstring rules
  54.     DialStringRules* dialRules; // dial string conversion database
  55.     FileInfoArray* files; // files to send (possibly converted)
  56.     PollRequestArray* polls; // polling requests
  57.     bool verbose; // enable debugging information
  58.     bool setup; // if true, then ready to send
  59.     fxStr tmpFile; // stuff to cleanup on abort
  60.     fxStr from; // command line from information
  61.     fxStr senderName; // sender's full name
  62.     fxStr coverCmd; // cover page program name
  63.     u_int totalPages; // total pages in submitted documents
  64.     fxStr dateFormat; // date format string for cover page
  65.     static const SF_stringtag strings[];
  66. protected:
  67.     SendFaxClient();
  68.     /*
  69.      * Derived classes can override these methods to
  70.      * provide more suitable feedback than the default
  71.      * ``print to the terminal'' work done by FaxClient.
  72.      */
  73.     virtual void vprintError(const char* fmt, va_list ap);
  74.     virtual void vprintWarning(const char* fmt, va_list ap);
  75.     virtual void vtraceServer(const char* fmt, va_list ap);
  76.     /*
  77.      * Derived classes can override this method to capture
  78.      * job identifiers returned by the server when a job is
  79.      * submitted.  The default action is to print a message
  80.      * to the terminal identifying the jobid and groupid of
  81.      * newly submitted job.
  82.      */
  83.     virtual void notifyNewJob(const SendFaxJob& job);
  84.     /*
  85.      * Derived classes can override makeCoverPage to supply an
  86.      * application-specific cover page generation scheme.
  87.      */
  88.     virtual bool makeCoverPage(const SendFaxJob&, fxStr& file, fxStr& emsg);
  89.     /*
  90.      * These methods are used to count/estimate the number
  91.      * of pages in a document that is to be transmitted.
  92.      * Counting pages in a TIFF document is easy and reliable
  93.      * but doing it for a PostScript document is not; so that
  94.      * method is marked virtual in case a derived class wants to
  95.      * provide a better algorithm than the default one.
  96.      */
  97.     void countTIFFPages(const char* name);
  98.     virtual void estimatePostScriptPages(const char* name);
  99.     /*
  100.      * Configuration file support; derived classes may override
  101.      * these to implement application-specific config controls.
  102.      */
  103.     virtual void setupConfig();
  104.     virtual void resetConfig();
  105.     virtual bool setConfigItem(const char* tag, const char* value);
  106.     /*
  107.      * File typerule support.
  108.      */
  109.     const TypeRule* fileType(const char* filename, fxStr& emsg);
  110.     bool prepareFile(FileInfo& info, fxStr& emsg);
  111.     /*
  112.      * Miscellaneous stuff used by setupSenderIdentity.
  113.      */
  114.     void setBlankMailboxes(const fxStr&);
  115.     bool getNonBlankMailbox(fxStr&);
  116. public:
  117.     virtual ~SendFaxClient();
  118. // prepare jobs for submission
  119.     virtual bool prepareForJobSubmissions(fxStr& emsg);
  120.     void purgeFileConversions(void); // purge any converted docs
  121.     virtual bool submitJobs(fxStr& emsg); // submit documents & jobs
  122.     virtual bool sendDocuments(fxStr& emsg); // send prepared documents
  123.     /*
  124.      * Job manipulation interfaces.
  125.      */
  126.     SendFaxJob& addJob(void);
  127.     SendFaxJob* findJob(const fxStr& number, const fxStr& name);
  128.     SendFaxJob* findJobByTag(const fxStr& tag);
  129.     void removeJob(const SendFaxJob&);
  130.     u_int getNumberOfJobs() const;
  131.     SendFaxJob& getProtoJob();
  132.     /*
  133.      * Document transmit request interfaces.
  134.      */
  135.     u_int addFile(const fxStr& filename);
  136.     u_int findFile(const fxStr& filename) const;
  137.     void removeFile(u_int);
  138.     u_int getNumberOfFiles() const;
  139.     const fxStr& getFileDocument(u_int) const;
  140.     /*
  141.      * Polled retrieval request interfaces.
  142.      */
  143.     u_int addPollRequest();
  144.     u_int addPollRequest(const fxStr& sep);
  145.     u_int addPollRequest(const fxStr& sep, const fxStr& pwd);
  146.     void removePollRequest(u_int);
  147.     u_int getNumberOfPollRequests() const;
  148.     void getPollRequest(u_int, fxStr& sep, fxStr& pwd);
  149.     /*
  150.      * Sender identity controls.  There are two separate
  151.      * identities maintained, one for the actual user/account
  152.      * that submits the jobs and another for person identified
  153.      * as the sender on the outbound facsimile.  This distinction
  154.      * is used by proxy services such as email to fax gateways
  155.      * and for folks people that submit jobs for other people.
  156.      */
  157. // identity associated with job
  158.     bool setupSenderIdentity(const fxStr&, fxStr& emsg);
  159.     const fxStr& getSenderName() const;
  160.     void setFromIdentity(const char*); // identity associated with fax
  161.     const fxStr& getFromIdentity() const;
  162.     bool getVerbose() const; // trace operation
  163.     void setVerbose(bool);
  164. };
  165. inline SendFaxJob& SendFaxClient::getProtoJob() { return proto; }
  166. inline const fxStr& SendFaxClient::getFromIdentity() const { return from; }
  167. inline const fxStr& SendFaxClient::getSenderName() const { return senderName;}
  168. inline void SendFaxClient::setVerbose(bool b) { verbose = b; }
  169. inline bool SendFaxClient::getVerbose() const { return verbose; }
  170. #endif /* _SendFaxClient_ */