pollrcvd.sh.in
上传用户:weiyuanprp
上传日期:2020-05-20
资源大小:1169k
文件大小:8k
源码类别:

传真(Fax)编程

开发平台:

C/C++

  1. #! @SCRIPT_SH@
  2. # $Id: pollrcvd.sh.in,v 1.23 2008/07/21 19:30:52 faxguy Exp $
  3. #
  4. # ============================================
  5. #
  6. # A NOTE ON CUSTOMIZING this script:
  7. #
  8. # You are welcome (even encouraged) to customize this script to suit the
  9. # needs of the deployment.  However, be advised that this script is
  10. # considered part of the package distribution and is subject to being
  11. # overwritten by subsequent upgrades.  Please consider copying this file
  12. # to something like "etc/pollrcvd-custom", modifying that copy of the file,
  13. # and then setting "PollRcvdCmd: etc/pollrcvd-custom" in your modem config
  14. # file to prevent your customizations from being overwritten during an
  15. # upgrade process.
  16. #
  17. # ============================================
  18. #
  19. # HylaFAX Facsimile Software
  20. #
  21. # Copyright (c) 1990-1996 Sam Leffler
  22. # Copyright (c) 1991-1996 Silicon Graphics, Inc.
  23. # HylaFAX is a trademark of Silicon Graphics
  24. # Permission to use, copy, modify, distribute, and sell this software and 
  25. # its documentation for any purpose is hereby granted without fee, provided
  26. # that (i) the above copyright notices and this permission notice appear in
  27. # all copies of the software and related documentation, and (ii) the names of
  28. # Sam Leffler and Silicon Graphics may not be used in any advertising or
  29. # publicity relating to the software without the specific, prior written
  30. # permission of Sam Leffler and Silicon Graphics.
  31. # THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, 
  32. # EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY 
  33. # WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  
  34. # IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
  35. # ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
  36. # OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
  37. # WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF 
  38. # LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 
  39. # OF THIS SOFTWARE.
  40. #
  41. . bin/common-functions
  42. #
  43. # pollrcvd mailaddr faxfile devID commID error-msg
  44. #
  45. if [ $# != 5 ]
  46. then
  47.     echo "Usage: $0 mailaddr faxfile devID commID error-msg"
  48.     hfExit 1
  49. fi
  50. #
  51. # If you want to change the presentation of the e-mail notification
  52. # then this is the place to change that.  We put it here, up-front,
  53. # because this is most likely what most customizations will deal with.
  54. #
  55. pollrcvd_mail()
  56. {
  57.     MAILTO="$1"
  58.     ATTACHFILE="$2"
  59.     CCTO="$3"
  60.     BCCTO="$4"
  61.    (echo "Mime-Version: 1.0"
  62.     echo "Content-Type: Multipart/Mixed; Boundary="$MIMEBOUNDARY""
  63.     echo "Content-Transfer-Encoding: 7bit"
  64.     echo "To: $MAILTO"
  65.     if [ -n "$CCTO" ]; then echo "Cc: $CCTO"; fi
  66.     printf "From: "
  67.     printf "$DICTRECEIVEAGENT" | LANG=C $AWK -f bin/rfc2047-encode.awk -v charset="$CHARSET"
  68.     echo " <$FROMADDR>"
  69.     printf "Subject: "
  70.     ( eval echo "$DICTRETRIEVEDFROM" ) | LANG=C $AWK -f bin/rfc2047-encode.awk -v charset="$CHARSET"; echo
  71.     echo ""
  72.     echo "--$MIMEBOUNDARY"
  73.     echo "Content-Type: text/plain; charset=$CHARSET"
  74.     echo "Content-Transfer-Encoding: quoted-printable"
  75.     echo ""
  76.     (
  77.      echo "$FILE (ftp://$HOSTNAME:$PORT/$FILE):";
  78.      faxInfo $FILE
  79.      echo "$DICTRECEIVEDON| $DEVICE" | printFormatted $INFOSIZE
  80.      if [ -z "$MSG" ]; then
  81. echo "$DICTCOMMID| c$COMMID (ftp://$HOSTNAME:$PORT/log/c$COMMID)" | printFormatted $INFOSIZE
  82.      fi
  83.      if [ "$ATTACHFILE" != "yes" ] || [ ! -f $FILE ]; then
  84. if [ -n "$MAILADDR" ]; then
  85.     echo ""
  86.     eval echo "$DICTPOLLDISPATCHTO"
  87. fi
  88.      fi
  89.     ) | LANG=C $AWK -f bin/qp-encode.awk
  90.     if [ "$MSG" ]; then
  91. (
  92.  echo ""
  93.  if [ -f $FILE ]; then
  94.     echo "$DICTMSGINTRO"
  95.  else
  96.     eval echo "$DICTATTEMPTEDPOLLFAILED"
  97.  fi
  98.  echo ""
  99.  echo "    $ERRMSG"
  100.  echo ""
  101.  echo "$DICTLOGFOLLOWS"
  102.  echo ""
  103. ) | LANG=C $AWK -f bin/qp-encode.awk
  104. if [ -f log/c$COMMID ]; then
  105.     echo ""
  106.     echo "--$MIMEBOUNDARY"
  107.     echo "Content-Type: text/plain; charset=US-ASCII; name=c$COMMID"
  108.     echo "Content-Description: FAX session log"
  109.     echo "Content-Transfer-Encoding: 7bit"
  110.     echo "Content-Disposition: inline"
  111.     echo ""
  112.     sed -e '/-- data/d' 
  113. -e '/start.*timer/d' -e '/stop.*timer/d' 
  114. log/c$COMMID
  115. elif [ -n "$COMMID" ]; then
  116.     ( echo "$DICTNOLOGAVAIL ($DICTCOMMID c$COMMID)." ) | LANG=C $AWK -f bin/qp-encode.awk
  117. else
  118.     ( echo "$DICTNOLOGAVAIL." ) | LANG=C $AWK -f bin/qp-encode.awk
  119. fi
  120.     fi
  121.     if [ "$ATTACHFILE" = "yes" ] && [ -f $FILE ]; then
  122. for type in $FILETYPE; do
  123.     echo ""
  124.     echo "--$MIMEBOUNDARY"
  125.     if [ "$type" = "tif" ]; then
  126. echo "Content-Type: image/tiff; name="$FILENAME.tif""
  127. echo "Content-Description: FAX document"
  128. echo "Content-Transfer-Encoding: $ENCODING"
  129. echo "Content-Disposition: attachment; filename="$FILENAME.tif""
  130. echo ""
  131. encode $FILE
  132.     elif [ "$type" = "pdf" ]; then
  133. echo "Content-Type: application/pdf; name="c$COMMID.pdf""
  134. echo "Content-Description: FAX document"
  135. echo "Content-Transfer-Encoding: $ENCODING"
  136. echo "Content-Disposition: attachment; filename="c$COMMID.pdf""
  137. echo ""
  138. $TIFF2PDF -o $FILE.pdf $FILE
  139. encode $FILE.pdf
  140. $RM -f $FILE.pdf 2>$ERRORSTO   
  141.     elif [ "$type" = "ps" ]; then
  142. echo "Content-Type: application/postscript; name="$FILENAME.ps""
  143. echo "Content-Description: FAX document"
  144. echo "Content-Transfer-Encoding: 7bit"
  145. echo "Content-Disposition: attachment; filename="$FILENAME.ps""
  146. echo ""
  147. $TIFF2PS -a $FILE 2>$ERRORSTO
  148.     fi
  149. done
  150.     fi
  151.     echo ""
  152.     echo "--$MIMEBOUNDARY--"
  153.    ) 2>$ERRORSTO | $SENDMAIL -ffax -oi "$MAILTO" "$CCTO" "$BCCTO"
  154. }
  155. test -f etc/setup.cache || {
  156.     SPOOL=`pwd`
  157.     cat<<EOF
  158. FATAL ERROR: $SPOOL/etc/setup.cache is missing!
  159. The file $SPOOL/etc/setup.cache is not present.  This
  160. probably means the machine has not been setup using the faxsetup(@MANNUM1_8@)
  161. command.  Read the documentation on setting up HylaFAX before you
  162. startup a server system.
  163. EOF
  164.     hfExit 1
  165. }
  166. # These settings may not be present in setup.cache if user upgraded and
  167. # didn't re-run faxsetup; we set them before calling setup.cache for
  168. # backward compatibility.
  169. ENCODING=base64
  170. MIMENCODE=mimencode
  171. TIFF2PDF=bin/tiff2pdf
  172. TTYCMD=tty
  173. CHARSET=UTF-8 # this really gets set in dictionary
  174. . etc/setup.cache
  175. INFO=$SBIN/faxinfo
  176. FAX2PS=$TIFFBIN/fax2ps
  177. TIFF2PS=$TIFFBIN/tiff2ps
  178. TOADDR=FaxMaster
  179. TIFFINFO=tiffinfo
  180. FROMADDR=fax
  181. MIMEBOUNDARY="NextPart$$"
  182. # Redirect errors to a tty, if possible, rather than
  183. # dev-nulling them or allowing them to creep into
  184. # the mail.
  185. if $TTYCMD >/dev/null 2>&1; then
  186.     ERRORSTO=`$TTYCMD`
  187. else
  188.     ERRORSTO=/dev/null
  189. fi
  190. #
  191. # Permit various types of attachment types: ps, tif, pdf
  192. # Note that non-ASCII filetypes require metamail.
  193. # pdf requires tiff2ps and tiff2pdf
  194. FILETYPE=ps
  195. #
  196. # There is no good portable way to find out the fully qualified
  197. # domain name (FQDN) of the host or the TCP port for the hylafax
  198. # service so we fudge here.  Folks may want to tailor this to
  199. # their needs; e.g. add a domain or use localhost so the loopback
  200. # interface is used.
  201. #
  202. HOSTNAME=`hostname`                     # XXX no good way to find FQDN
  203. PORT=4559                               # XXX no good way to lookup service
  204. MAILADDR="$1"
  205. FILE="$2"
  206. DEVICE="$3"
  207. COMMID="$4"
  208. MSG="$5"
  209. FILENAME=`echo $FILE | $SED -e 's/.tif//' -e 's/recvq///'`
  210. SetupPrivateTmp
  211. if [ -f $FILE ]; then
  212.     SENDER="`$INFO $FILE | $AWK -F: '/Sender/ { print $2 }' 2>/dev/null`"
  213. fi
  214. if [ -f etc/PollDispatch ]; then
  215.     . etc/PollDispatch       # NB: PollDispatch allows customization
  216. fi
  217. # Fetch language settings (after FaxDispatch for customization of $LANG).
  218. . bin/dictionary
  219. if [ -f etc/FaxDictionary ]; then
  220.     . etc/FaxDictionary
  221. fi
  222. #
  223. # Customize error message.
  224. #
  225. ERRNUM=`echo $MSG | sed 's/.*{([^}]*)}$/1/g'`
  226. if [ "$ERRNUM" != "$MSG" ]; then
  227.     eval ERRMSG="$"`echo $ERRNUM`
  228.     if [ -z "$ERRMSG" ]; then
  229. ERRMSG="$MSG"
  230.     fi
  231. else
  232.     ERRNUM=
  233.     ERRMSG="$MSG"
  234. fi
  235. setInfoSize $FILE
  236. if [ "$TOADDR" != "$MAILADDR" ]; then # don't send FaxMaster duplicate
  237.     pollrcvd_mail "$TOADDR" "no" "" ""
  238. fi
  239. if [ -n "$MAILADDR" ] && [ -f $FILE ]; then
  240.     pollrcvd_mail "$MAILADDR" "yes" "$CCTO" "$BCCTO"
  241. fi