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

传真(Fax)编程

开发平台:

C/C++

  1. /* $Id: Transport.c++,v 1.1.1.1 2005/11/11 21:32:03 faxguy Exp $ */
  2. /*
  3.  * Copyright (c) 1995-1996 Sam Leffler
  4.  * Copyright (c) 1995-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 "config.h"
  27. #include "Transport.h"
  28. #include "FaxClient.h"
  29. #include "InetTransport.h"
  30. #if CONFIG_UNIXTRANSPORT
  31. #include "UnixTransport.h"
  32. #endif
  33. #include "Sys.h"
  34. #include <errno.h>
  35. Transport::Transport(FaxClient& c) : client(c) {}
  36. Transport::~Transport() {}
  37. bool Transport::hangupServer() { return (true); }
  38. void
  39. Transport::closeDataConn(int fd)
  40. {
  41.     (void) Sys::close(fd);
  42. }
  43. Transport&
  44. Transport::getTransport(FaxClient& client, const char* address)
  45. {
  46.     if (address[0] == '') {
  47. /*
  48.  * An unqualified destination; look for
  49.  * the best available transport facility.
  50.  */
  51. #if CONFIG_UNIXTRANPSORT
  52. if (UnixTransport::isA(FAX_DEFUNIX)) {
  53.     client.setHost(FAX_DEFUNIX);
  54.     return *new UnixTransport(client);
  55. } else {
  56. #endif
  57.     client.setHost(FAX_DEFHOST);
  58.     return *new InetTransport(client);
  59. #if CONFIG_UNIXTRANPSORT
  60. }
  61. #endif
  62.     } else {
  63. #if CONFIG_UNIXTRANPSORT
  64. if (UnixTransport::isA(address))
  65.     return *new UnixTransport(client);
  66. else
  67. #endif
  68.     return *new InetTransport(client);
  69.     }
  70. }
  71. bool
  72. Transport::abortCmd(fxStr& emsg)
  73. {
  74.     static const char msg[] = { 'A', 'B', 'O', 'R', 'r', 'n' };
  75.     int s = fileno(client.getCtrlFd());
  76.     if (Sys::write(s, msg, sizeof (msg)) != sizeof (msg)) {
  77. emsg = fxStr::format("send(ABOR\r\n): %s", strerror(errno));
  78. return (false);
  79.     }
  80.     return (true);
  81. }
  82. void
  83. Transport::notConfigured(const char* what, fxStr& emsg)
  84. {
  85.     emsg = fxStr::format("Sorry, no %s communication support was configured.", what);
  86. }