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

传真(Fax)编程

开发平台:

C/C++

  1. /* $Id: FaxPoll.c++,v 1.2 2007/08/17 14:54:27 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 <stdio.h>
  27. #include "Sys.h"
  28. #include "faxApp.h" // XXX
  29. #include "FaxServer.h"
  30. #include "FaxRecvInfo.h"
  31. /*
  32.  * FAX Server Polling Protocol.
  33.  */
  34. /*
  35.  * Initiate a polling receive and invoke the receiving protocol.
  36.  */
  37. bool
  38. FaxServer::pollFaxPhaseB(const fxStr& sep, const fxStr& pwd, FaxRecvInfoArray& docs, fxStr& emsg)
  39. {
  40.     bool pollOK = false;
  41.     changeState(RECEIVING);
  42.     traceProtocol("POLL FAX: begin (SEP "%s", PWD "%s")",
  43. (const char*) sep, (const char*) pwd);
  44.     /*
  45.      * Create the first file ahead of time to avoid timing
  46.      * problems with Class 1 modems.  (Creating the file
  47.      * after recvBegin can cause part of the first page to
  48.      * be lost.)
  49.      */
  50.     FaxRecvInfo info;
  51.     FaxSetup setupinfo;
  52.     TIFF* tif = setupForRecv(info, docs, emsg);
  53.     if (tif) {
  54. recvPages = 0; // count of received pages
  55. fileStart = Sys::now(); // count initial negotiation on failure
  56. if (modem->pollBegin(canonicalizePhoneNumber(FAXNumber), sep, pwd, emsg)) {
  57.     pollOK = recvDocuments(tif, info, docs, &setupinfo, emsg);
  58.     if (!pollOK)
  59. traceProtocol("POLL FAX: %s", (const char*) emsg);
  60.     if (!modem->recvEnd(&setupinfo, emsg))
  61. traceProtocol("POLL FAX: %s", (const char*) emsg);
  62. } else
  63.     traceProtocol("POLL FAX: %s", (const char*) emsg);
  64.     } else
  65. traceProtocol("POLL FAX: %s", (const char*) emsg);
  66.     traceProtocol("POLL FAX: end");
  67.     return (pollOK);
  68. }
  69. /*
  70.  * Handle notification of a document received as a
  71.  * result of a poll request.
  72.  */
  73. void
  74. FaxServer::notifyPollRecvd(FaxRequest&, FaxRecvInfo&)
  75. {
  76. }
  77. /*
  78.  * Handle notification that a poll operation has been
  79.  * successfully completed. 
  80.  */
  81. void
  82. FaxServer::notifyPollDone(FaxRequest& req, u_int pi)
  83. {
  84.     if (req.items[pi].op == FaxRequest::send_poll) {
  85. req.items.remove(pi);
  86. req.writeQFile();
  87.     } else
  88. logError("notifyPollDone called for non-poll request");
  89. }