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

传真(Fax)编程

开发平台:

C/C++

  1. /* $Id: ServerConfig.h,v 1.2 2007/12/06 18:19:28 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 _ServerConfig_
  27. #define _ServerConfig_
  28. /*
  29.  * Fax Modem and Protocol Server Configuration.
  30.  */
  31. #include "ModemConfig.h"
  32. class DialStringRules;
  33. class UUCPLock;
  34. class REArray;
  35. class fxBoolArray;
  36. class ServerConfig : public ModemConfig {
  37. public:
  38.     // NB: the S_ prefixes workaround a bug in the AIX xlC compiler
  39.     struct S_stringtag {
  40. const char*  name;
  41. fxStr ServerConfig::* p;
  42. const char*  def; // NULL is shorthand for ""
  43.     };
  44.     struct S_booltag {
  45. const char*  name;
  46. bool ServerConfig::* p;
  47. bool  def; // NULL is shorthand for ""
  48.     };
  49.     struct S_numbertag {
  50. const char*  name;
  51. u_int ServerConfig::*p;
  52. u_int  def;
  53.     };
  54.     struct S_filemodetag {
  55. const char*  name;
  56. mode_t ServerConfig::*p;
  57. // NB: this should be mode_t but causes alignment problems
  58. //     on systems where it's 16-bits (e.g. m68k-hp-hpux9).
  59. u_int  def;
  60.     };
  61. private:
  62.     fxStr longDistancePrefix; // prefix str for long distance dialing
  63.     fxStr internationalPrefix; // prefix str for international dialing
  64.     fxStr areaCode; // local area code
  65.     fxStr countryCode; // local country code
  66.     DialStringRules* dialRules; // dial string rules
  67.     fxStr uucpLockType; // UUCP lock file type
  68.     fxStr uucpLockDir; // UUCP lock file directory
  69.     mode_t uucpLockMode; // UUCP lock file creation mode
  70.     u_int uucpLockTimeout; // UUCP stale lock file timeout
  71.     time_t lastTSIModTime; // last mod time of TSI patterns file
  72.     time_t lastPWDModTime; // last mod time of PWD patterns file
  73.     REArray* tsiPats; // recv tsi patterns
  74.     REArray* pwdPats; // recv PWD patterns
  75.     fxBoolArray* acceptTSI; // accept/reject matched tsi
  76.     fxBoolArray* acceptPWD; // accept/reject matched PWD
  77.     fxStr logFacility; // syslog facility to direct trace msgs
  78.     static S_booltag bools[];
  79.     static S_stringtag strings[];
  80.     static S_numbertag numbers[];
  81.     static S_filemodetag filemodes[];
  82.     SpeakerVolume getVolume(const char* cp);
  83. protected:
  84.     ServerConfig();
  85.     void setupConfig();
  86.     virtual bool setConfigItem(const char* tag, const char* value);
  87. // pattern access control list support
  88.     void updatePatterns(const fxStr& file,
  89.     REArray*& pats, fxBoolArray*& accept,
  90.     time_t& lastModTime);
  91.     void readPatterns(FILE*, REArray*&, fxBoolArray*&);
  92.     bool checkACL(const fxStr& id, REArray*, fxBoolArray&);
  93. // methods for parameters whose assignment may have side effects
  94.     virtual void setDialRules(const char* name);
  95.     virtual void setLocalIdentifier(const fxStr& lid);
  96.     virtual void setModemSpeakerVolume(SpeakerVolume level);
  97. public:
  98.     SpeakerVolume speakerVolume; // volume control
  99.     fxStr qualifyTSI; // if set, no recv w/o acceptable tsi
  100.     fxStr qualifyPWD; // if set, no recv w/o acceptable PWD
  101.     mode_t recvFileMode; // protection mode for received files
  102.     mode_t deviceMode; // protection mode for modem device
  103.     mode_t logMode; // protection mode for log files
  104.     u_int tracingLevel; // tracing level w/o session
  105.     u_int logTracingLevel; // tracing level during session
  106.     u_int tracingMask; // tracing level control mask
  107.     bool clocalAsRoot; // set CLOCAL as root
  108.     bool priorityScheduling; // change process priority
  109.     u_int requeueTTS[9]; // requeue intervals[CallStatus code]
  110.     u_int requeueProto; // requeue interval after protocol error
  111.     u_int requeueOther; // requeue interval after other problem
  112.     u_int retryMAX[9]; // number of retries[CallStatus code]
  113.     u_int retryOther; // number of retries after other problem
  114.     u_int pollModemWait; // polling interval in modem wait state
  115.     u_int pollLockWait; // polling interval in lock wait state
  116.     bool pollLockPokeModem; // poke modem after polling lock
  117.     u_int maxRecvPages; // max pages to accept on receive
  118.     u_int maxConsecutiveBadCalls; // max consecutive bad phone calls
  119.     fxStr localIdentifier; // to use in place of FAXNumber
  120.     fxStr FAXNumber; // phone number
  121.     u_int maxSetupAttempts; // # times to try initializing modem
  122.     bool batchLogs; // Batch session logs togther or not
  123.     virtual ~ServerConfig();
  124.     virtual void resetConfig();
  125.     fxStr canonicalizePhoneNumber(const fxStr& ds);
  126.     fxStr prepareDialString(const fxStr& ds);
  127.     UUCPLock* getUUCPLock(const fxStr& deviceName);
  128.     bool isTSIOk(const fxStr& tsi);
  129.     bool isPWDOk(const fxStr& pwd);
  130.     virtual void vconfigError(const char* fmt, va_list ap) = 0;
  131.     virtual void vconfigTrace(const char* fmt, va_list ap) = 0;
  132.     virtual void vdialrulesTrace(const char* fmt, va_list ap) = 0;
  133.     void configError(const char* fmt, ...);
  134.     void configTrace(const char* fmt, ...);
  135. };
  136. #endif /* _ServerConfig_ */