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

传真(Fax)编程

开发平台:

C/C++

  1. /* $Id: faxrm.c++,v 1.6 2009/09/29 11:46:01 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. class faxRmApp : public FaxClient {
  30. private:
  31.     void usage();
  32.     bool removeJob(const char* id, fxStr& emsg);
  33.     bool deleteDoc(const char* id);
  34. public:
  35.     faxRmApp();
  36.     ~faxRmApp();
  37.     bool run(int argc, char** argv);
  38. };
  39. faxRmApp::faxRmApp() {}
  40. faxRmApp::~faxRmApp() {}
  41. bool
  42. faxRmApp::run(int argc, char** argv)
  43. {
  44.     extern int optind;
  45.     extern char* optarg;
  46.     int c;
  47.     resetConfig();
  48.     readConfig(FAX_SYSCONF);
  49.     readConfig(FAX_USERCONF);
  50.     bool jobs = true;
  51.     bool docs = false;
  52.     bool useadmin = false;
  53.     char* pass = NULL;
  54.     char* adminpass = NULL;
  55.     char* user = NULL;
  56.     int errcnt = 0; // count how many jobs couldn't be removed
  57.     while ((c = Sys::getopt(argc, argv, "ah:dO:p:u:v")) != -1)
  58. switch (c) {
  59. case 'a':
  60.     useadmin = true;
  61.     break;
  62. case 'd': // treat args as document names
  63.     jobs = false;
  64.     docs = true;
  65.     break;
  66. case 'h': // server's host
  67.     setHost(optarg);
  68.     break;
  69.         case 'p': // password:adminpass
  70.     {
  71. char* pp = strchr(optarg, ':');
  72. if (pp && *(pp + 1) != '') {
  73.     *pp = '';
  74.     adminpass = pp + 1;
  75. }
  76.     }
  77.     pass = optarg;
  78.     break;
  79.         case 'u': // user
  80.     user = optarg;
  81.     break;
  82. case 'O':
  83.     readConfigItem(optarg);
  84.     break;
  85. case 'v':
  86.     setVerbose(true);
  87.     break;
  88. case '?':
  89.     usage();
  90. }
  91.     if (optind >= argc)
  92. usage();
  93.     fxStr emsg;
  94.     if (callServer(emsg)) {
  95. if (login(user, pass, emsg) &&
  96.     (!useadmin || admin (adminpass, emsg))) {
  97.     for (; optind < argc; optind++) {
  98. const char* id = argv[optind];
  99. if (jobs) {
  100.     if (!removeJob(id, emsg)) {
  101. errcnt++;
  102. break;
  103.                     }
  104. } else if (docs) {
  105.     if (!deleteDoc(id)) {
  106. emsg = getLastResponse();
  107.                         errcnt++;
  108. break;
  109.     }
  110.     printf("%s removed.n", id);
  111. }
  112.     }
  113. }
  114. hangupServer();
  115.     }
  116.     if (emsg != "")
  117. printError("%s", (const char*) emsg);
  118.     if (errcnt != 0)
  119.         return (false);
  120.     return(true);
  121. }
  122. bool
  123. faxRmApp::removeJob(const char* id, fxStr& emsg)
  124. {
  125.     if (jobKill(id)) {
  126. printf("Job %s removed.n", id);
  127. return (true);
  128.     }
  129.     emsg = getLastResponse();
  130.     if (getLastCode() == 504 && jobDelete(id)) {
  131. printf("Job %s removed (from doneq).n", id);
  132. emsg = "";
  133. return (true);
  134.     }
  135.     return (false);
  136. }
  137. bool
  138. faxRmApp::deleteDoc(const char* id)
  139. {
  140.     return (command("DELE %s%s"
  141. , id[0] == '/' || strncmp(id, FAX_DOCDIR, sizeof (FAX_DOCDIR)-1) == 0 ?
  142.     "" : "/" FAX_DOCDIR "/"
  143. , id
  144. ) == COMPLETE);
  145. }
  146. void
  147. faxRmApp::usage()
  148. {
  149.     fxFatal("usage: faxrm [-h server-host] [-u user] [-p pass[:admin]] [-adv] id...");
  150. }
  151. int
  152. main(int argc, char** argv)
  153. {
  154.     faxRmApp app;
  155.     if(!app.run(argc, argv))
  156.         return 1;
  157.     return 0;
  158. }