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

传真(Fax)编程

开发平台:

C/C++

  1. /* $Id: pageSendApp.h,v 1.3 2006/03/23 20:15:40 faxguy Exp $ */
  2. /*
  3.  * Copyright (c) 1994-1996 Sam Leffler
  4.  * Copyright (c) 1994-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 _pageSendApp_
  27. #define _pageSendApp_
  28. /*
  29.  * IXO/UCP Send Page App.
  30.  */
  31. #include "faxApp.h"
  32. #include "ModemServer.h"
  33. #include "FaxTrace.h"
  34. class UUCPLock;
  35. class fxStackBuffer;
  36. class pageSendApp : public ModemServer, public faxApp {
  37. public:
  38.     struct stringtag {
  39. const char*  name;
  40. fxStr pageSendApp::* p;
  41. const char*  def; // NULL is shorthand for ""
  42.     };
  43.     struct numbertag {
  44. const char*  name;
  45. u_int pageSendApp::*p;
  46. u_int  def;
  47.     };
  48. private:
  49. // runtime state
  50.     bool ready; // modem ready for use
  51.     UUCPLock* modemLock; // uucp lockfile handle
  52.     time_t connTime; // time connected to peer
  53.     fxStr pagerSetupCmds; // pager-specific modem setup commands
  54.     fxStr pagerTTYParity; // parity setting for tty
  55.     u_int pagerMaxMsgLength; // default max message text length
  56.     fxStr ixoService; // IXO protocol service string
  57.     fxStr ixoDeviceID; // IXO protocol device id string
  58.     u_int ixoMaxUnknown; // max unknown responses to permit
  59.     u_int ixoIDProbe; // time between probes for ID= string
  60.     u_int ixoIDTimeout; // timeout waiting for initial ID=
  61.     u_int ixoLoginRetries; // # times to retry login procedure
  62.     u_int ixoLoginTimeout; // timeout on login procedure
  63.     u_int ixoGATimeout; // timeout waiting for go-ahead message
  64.     u_int ixoXmitRetries; // # times to retry sending msg block
  65.     u_int ixoXmitTimeout; // timeout waiting for xmit response
  66.     u_int ixoAckTimeout; // timeout waiting ro final ack/nak
  67.     fxStr batchid; // Batch ID, for session logs
  68.     static pageSendApp* _instance;
  69.     static stringtag strings[];
  70.     static stringtag atcmds[];
  71.     static numbertag numbers[];
  72. // configuration support
  73.     void setupConfig();
  74.     void resetConfig();
  75.     bool setConfigItem(const char* tag, const char* value);
  76.     u_int getConfigParity(const char* value) const;
  77. // page transmission support (independent of paging protocol)
  78.     void  sendPage(FaxRequest&, FaxMachineInfo&, u_int&);
  79.     void  sendPage(FaxRequest&, FaxMachineInfo&, const fxStr&, 
  80. const fxStr&, u_int&);
  81. // IXO transmission support
  82.     void sendIxoPage(FaxRequest&, FaxMachineInfo&, const fxStr&, fxStr&, u_int&);
  83.     bool sendPagerMsg(FaxRequest&, FaxItem&, const fxStr&, fxStr&);
  84.     u_int getResponse(fxStackBuffer& buf, long secs);
  85.     bool prepareMsg(FaxRequest&, FaxMachineInfo&, fxStr&);
  86.     bool pagePrologue(FaxRequest&, const FaxMachineInfo&, fxStr&);
  87.     bool pageGoAhead(FaxRequest&, const FaxMachineInfo&, fxStr&);
  88.     bool pageEpilogue(FaxRequest&, const FaxMachineInfo&, fxStr&);
  89.     void sendFailed(FaxRequest&, FaxSendStatus, const char*, u_int = 0);
  90.     void notifyPageSent(FaxRequest& req, u_int fi);
  91.     time_t getConnectTime() const;
  92. // UCP transmission support
  93.     void sendUcpPage(FaxRequest&, FaxMachineInfo&, const fxStr&, fxStr&);    bool sendUcpMsg(FaxRequest&, FaxItem&, const fxStr&, fxStr&,
  94.     FaxMachineInfo&);
  95. // modem handling
  96.     bool canLockModem();
  97.     bool lockModem();
  98.     void unlockModem();
  99.     bool setupModem(bool isSend);
  100. // notification interfaces used by ModemServer
  101.     void notifyModemReady();
  102.     void notifyModemWedged();
  103. // miscellaneous
  104.     bool putModem(const void* data, int n, long ms = 0);
  105.     void traceResponse(const fxStackBuffer& buf);
  106.     void traceIXO(const char* fmt ...);
  107.     void traceIXOCom(const char* dir, const u_char* data, u_int cc);
  108. public:
  109.     pageSendApp(const fxStr& device, const fxStr& devID);
  110.     ~pageSendApp();
  111.     static pageSendApp& instance();
  112.     void initialize(int argc, char** argv);
  113.     void open();
  114.     void close();
  115.     FaxSendStatus send(const char** filename, int num);
  116.     bool isReady() const;
  117. };
  118. inline bool pageSendApp::isReady() const  { return ready; }
  119. #endif