faxwatch.c++
上传用户:weiyuanprp
上传日期:2020-05-20
资源大小:1169k
文件大小:3k
源码类别:

传真(Fax)编程

开发平台:

C/C++

  1. /* $Id: faxwatch.c++,v 1.4 2009/09/29 11:46:02 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. #include "FaxClient.h"
  27. #include "Sys.h"
  28. #include "config.h"
  29. #include <errno.h>
  30. #ifdef HAVE_STDINT_H
  31. #include <stdint.h>
  32. #endif
  33. class watchApp : public FaxClient {
  34. private:
  35.     fxStr appName;
  36.     void fatal(const char* fmt ...);
  37.     void usage();
  38. public:
  39.     watchApp();
  40.     ~watchApp();
  41.     void run(int argc, char** argv);
  42. };
  43. watchApp::watchApp() {}
  44. watchApp::~watchApp() {}
  45. static bool
  46. writeData(void* arg, const char* buf, int cc, fxStr& emsg)
  47. {
  48.     if (Sys::write((intptr_t) arg, buf, cc) != cc) {
  49. emsg = fxStr::format("write error: %s", strerror(errno));
  50. return (false);
  51.     } else
  52. return (true);
  53. }
  54. void
  55. watchApp::run(int argc, char** argv)
  56. {
  57.     extern int optind;
  58.     extern char* optarg;
  59.     int c;
  60.     appName = argv[0];
  61.     u_int l = appName.length();
  62.     appName = appName.tokenR(l, '/');
  63.     resetConfig();
  64.     readConfig(FAX_SYSCONF);
  65.     readConfig(FAX_USERCONF);
  66.     while ((c = Sys::getopt(argc, argv, "gh:lO:v")) != -1)
  67. switch (c) {
  68. case 'g':
  69.     setTimeZone(TZ_GMT);
  70.     break;
  71. case 'h': // server's host
  72.     setHost(optarg);
  73.     break;
  74. case 'l':
  75.     setTimeZone(TZ_LOCAL);
  76.     break;
  77. case 'O':
  78.     readConfigItem(optarg);
  79.     break;
  80. case 'v': // verbose mode
  81.     setvbuf(stdout, NULL, _IOLBF, BUFSIZ);
  82.     FaxClient::setVerbose(true);// protocol tracing
  83.     break;
  84. case '?':
  85.     usage();
  86.     /*NOTREACHED*/
  87. }
  88.     if (argc - optind != 1)
  89. usage();
  90.     fxStr emsg;
  91.     if (callServer(emsg)) {
  92. if (login(NULL, NULL, emsg) && setType(TYPE_A)) {
  93.     if (getTimeZone() == TZ_GMT)
  94. printWarning("time values reported in GMT");
  95.     (void) recvData(writeData, (void*) STDOUT_FILENO, emsg, 0,
  96. "SITE TRIGGER %s", argv[optind]);
  97. }
  98. hangupServer();
  99.     }
  100.     if (emsg != "")
  101. printError("%s", (const char*) emsg);
  102. }
  103. void
  104. watchApp::usage()
  105. {
  106.     fxFatal("usage: %s [-h host] [-g] [-l] [-v] trigger-specification",
  107. (const char*) appName);
  108. }
  109. int
  110. main(int argc, char** argv)
  111. {
  112.     watchApp app;
  113.     app.run(argc, argv);
  114.     return (-1); // reached only on error
  115. }