]> git.ipfire.org Git - thirdparty/HylaFAX.git/commitdiff
[Bug 105] adds server-side PDF conversion
authorDarren Nickerson <darren.nickerson@ifax.com>
Mon, 19 Mar 2001 06:48:23 +0000 (06:48 +0000)
committerDarren Nickerson <darren.nickerson@ifax.com>
Mon, 19 Mar 2001 06:48:23 +0000 (06:48 +0000)
Applied Daryl Thachuk <daryl@montagetech.com>'s patch, as tuned by Lee.

15 files changed:
config.h.in
distrules
etc/faxsetup.sh.in
faxd/FaxRequest.c++
faxd/FaxRequest.h
faxd/faxQCleanApp.c++
faxd/faxQueueApp.c++
faxd/faxQueueApp.h
faxd/mkhash.c
hfaxd/FileSystem.c++
hfaxd/Jobs.c++
hfaxd/OldProtocol.c++
man/Makefile.in
util/Makefile.in
util/notify.awk

index 69548e49ac4b1f9b1bd7053024a3b6857d87f6cf..7a7014edcba9185fb3958f5ac1dd25c9039a4a43 100644 (file)
 #define        FAX_FAXRCVDCMD  FAX_BINDIR "/faxrcvd"   /* cmd to process a recvd fax */
 #define        FAX_POLLRCVDCMD FAX_BINDIR "/pollrcvd"  /* cmd to process a recvd fax */
 #define FAX_PS2FAXCMD  FAX_BINDIR "/ps2fax"    /* cmd to convert postscript */
+#define FAX_PDF2FAXCMD FAX_BINDIR "/pdf2fax"   /* cmd to convert PDF */ 
 #define FAX_PCL2FAXCMD FAX_BINDIR "/pcl2fax"   /* cmd to convert PCL */
 #define FAX_TIFF2FAXCMD        FAX_BINDIR "/tiff2fax"  /* cmd to convert TIFF */
 #define        FAX_COVERCMD    FAX_BINDIR "/mkcover"   /* cmd to make cont coverpage */
index 63976779e7b17bfadc8249bc41fb34e0d05722f5..f611b9637c0c2b71689caf36ff93b3a3fba582a1 100644 (file)
--- a/distrules
+++ b/distrules
@@ -346,6 +346,7 @@ HYLAFAXSRC=\
        util/ps2fax.dps.sh                      \
        util/ps2fax.gs.sh                       \
        util/ps2fax.imp.sh                      \
+       util/pdf2fax.gs.sh                      \
        util/recvstats.sh.in                    \
        util/tiff2fax.sh                        \
        util/wedged.sh                          \
@@ -613,6 +614,7 @@ MANPAGES=\
        man/pagesizes.4f                        \
        man/pollrcvd.1m                         \
        man/ps2fax.1m                           \
+       man/pdf2fax.1m                          \
        man/recvq.4f                            \
        man/recvstats.1m                        \
        man/sendfax.1                           \
index 185925b1f0cefa9cb7bea37352116ac863e8e349..958d548799220540d11edd13563fb2535919c58c 100644 (file)
@@ -1242,8 +1242,28 @@ EOF
     $RM bin/ps2fax
     if [ -n "$LN_S" ]; then
        $LN $LN_S ps2fax.$PS bin/ps2fax;
+       if [ $PS = gs ]; then
+           Note ""
+           Note "Make $DIR_SPOOL/bin/pdf2fax a link to $DIR_SPOOL/bin/pdf2fax.$PS."
+           Note ""
+           $LN $LN_S pdf2fax.$PS bin/pdf2fax;
+       else
+           Note ""
+           Note "Server-side PDF conversion is not supported on this system."
+           Note ""
+       fi
     else
        $LN bin/ps2fax.$PS bin/ps2fax;
+       if [ $PS = gs ]; then
+           Note ""
+           Note "Make $DIR_SPOOL/bin/pdf2fax a link to $DIR_SPOOL/bin/pdf2fax.$PS."
+           Note ""
+           $LN bin/pdf2fax.$PS bin/pdf2fax;
+       else
+           Note ""
+           Note "Server-side PDF conversion is not supported on this system."
+           Note ""
+       fi
     fi
 fi
 
index 4e6fb9a3d91c08b3bcdf3283c193e32f06bcd79c..dd191f9bcb75c605c303657c8a4921dd4d3946db 100644 (file)
@@ -130,10 +130,12 @@ const FaxRequest::shortval FaxRequest::shortvals[] = {
     { "desiredtl",     &FaxRequest::desiredtl },
     { "useccover",     &FaxRequest::useccover },
 };
-const char* FaxRequest::opNames[16] = {
+const char* FaxRequest::opNames[18] = {
     "fax",
     "tiff",
     "!tiff",
+    "pdf",
+    "!pdf",
     "postscript",
     "!postscript",
     "pcl",
@@ -321,6 +323,12 @@ FaxRequest::readQFile(bool& rejectJob)
 
        case H_POLL:            addRequest(send_poll, tag); break;
        case H_FAX:             addRequest(send_fax, tag); break;
+       case H_PDF:
+           if (cmd[0] == '!')
+               addRequest(send_pdf_saved, tag);
+           else
+               addRequest(send_pdf, tag, rejectJob);
+           break;
        case H_TIFF:
            if (cmd[0] == '!')
                addRequest(send_tiff_saved, tag);
@@ -610,8 +618,10 @@ FaxRequest::addRequest(FaxSendOp op, char* tag, bool& rejectJob)
        *cp++ = '\0';
     else
        cp = tag, tag = "";
-    if (!checkDocument(cp))
+    if (!checkDocument(cp)) {
+       error("Document has been rejected");
        rejectJob = true;
+    }
     else
        requests.append(faxRequest(op, dirnum, tag, cp));
 }
index 79e3150e18b2c8a7b55cdc83229b5e0d3c601cf5..1f8daa210284a2e8ae7dba756b7ebf705490c569 100644 (file)
@@ -52,17 +52,20 @@ public:
        send_fax        = 0,    // send prepared file via fax
        send_tiff       = 1,    // send tiff file via fax
        send_tiff_saved = 2,    // saved tiff file (converted)
-       send_postscript = 3,    // send postscript file via fax
-       send_postscript_saved = 4, // saved postscript file (converted)
-       send_pcl        = 5,    // send PCL file via fax
-       send_pcl_saved  = 6,    // saved PCL file (converted to tiff)
-       send_data       = 7,    // send untyped data file
-       send_data_saved = 8,    // send untyped data file (converted)
-       send_poll       = 9,    // make fax poll request
-       send_page       = 10,   // send pager message (converted)
-       send_page_saved = 11,   // send pager message
-       send_uucp       = 12,   // send file via uucp
-       send_unknown    = 13
+       send_pdf        = 3,    // send PDF file via fax
+       send_pdf_saved  = 4,    // saved PDF file (converted)
+       send_postscript = 5,    // send postscript file via fax
+       send_postscript_saved = 6, // saved postscript file (converted)
+       send_pcl        = 7,    // send PCL file via fax
+       send_pcl_saved  = 8,    // saved PCL file (converted to tiff)
+       send_data       = 9,    // send untyped data file
+       send_data_saved = 10,   // send untyped data file (converted)
+       send_poll       = 11,   // make fax poll request
+       send_page       = 12,   // send pager message (converted)
+       send_page_saved = 13,   // send pager message
+       send_uucp       = 14,   // send file via uucp
+       send_unknown= 15
+
     };
     enum {                     // notification flags
        no_notice       = 0x0,  // no notifications
@@ -154,7 +157,7 @@ public:
 
     static const stringval strvals[];
     static const shortval shortvals[];
-    static const char* opNames[16];
+    static const char* opNames[18];
     static const char* notifyVals[4];
     static const char* chopVals[4];
 
index 63f3f7769646b73e91ab49b83489ff87422a94a2..0d6a503968b4876f07e01b903567bc0c09fe5e28 100644 (file)
@@ -219,6 +219,8 @@ faxQCleanApp::collectRefs(const FaxRequest& req)
     for (u_int i = 0, n = req.requests.length(); i < n; i++) {
        const faxRequest& freq = req.requests[i];
        switch (freq.op) {
+       case FaxRequest::send_pdf:
+       case FaxRequest::send_pdf_saved:
        case FaxRequest::send_tiff:
        case FaxRequest::send_tiff_saved:
        case FaxRequest::send_postscript:
index c22da109b8388887e6ac3290de578bba32f43b15..4b8d9d30a4a105887a5d890a7b7d60ee32cd20df 100644 (file)
@@ -250,6 +250,7 @@ faxQueueApp::prepareJobNeeded(Job& job, FaxRequest& req, JobStatus& status)
        case FaxRequest::send_postscript:       // convert PostScript
        case FaxRequest::send_pcl:              // convert PCL
        case FaxRequest::send_tiff:             // verify&possibly convert TIFF
+       case FaxRequest::send_pdf:              // convert PDF
            return (true);
        case FaxRequest::send_poll:             // verify modem is capable
            if (!job.modem->supportsPolling()) {
@@ -539,6 +540,7 @@ faxQueueApp::prepareJob(Job& job, FaxRequest& req,
        case FaxRequest::send_postscript:       // convert PostScript
        case FaxRequest::send_pcl:              // convert PCL
        case FaxRequest::send_tiff:             // verify&possibly convert TIFF
+        case FaxRequest::send_pdf:             // convert PDF
            tmp = FaxRequest::mkbasedoc(freq.item) | ";" | params.encodePage();
            status = convertDocument(job, freq, tmp, params, dci, req.notice);
            if (status == Job::done) {
@@ -977,6 +979,7 @@ faxQueueApp::convertDocument(Job& job,
        int ac = 0;
        switch (req.op) {
        case FaxRequest::send_postscript: argv[ac++] = ps2faxCmd; break;
+       case FaxRequest::send_pdf:        argv[ac++] = pdf2faxCmd; break;
        case FaxRequest::send_pcl:        argv[ac++] = pcl2faxCmd; break;
        case FaxRequest::send_tiff:       argv[ac++] = tiff2faxCmd; break;
        }
@@ -2331,6 +2334,8 @@ faxQueueApp::deleteRequest(Job& job, FaxRequest& req, JobStatus why,
                break;
            case FaxRequest::send_tiff:
            case FaxRequest::send_tiff_saved:
+           case FaxRequest::send_pdf:
+           case FaxRequest::send_pdf_saved:
            case FaxRequest::send_postscript:
            case FaxRequest::send_postscript_saved:
            case FaxRequest::send_pcl:
@@ -2636,6 +2641,7 @@ const faxQueueApp::stringtag faxQueueApp::strings[] = {
 { "contcovercmd",      &faxQueueApp::coverCmd,         FAX_COVERCMD },
 { "notifycmd",         &faxQueueApp::notifyCmd,        FAX_NOTIFYCMD },
 { "ps2faxcmd",         &faxQueueApp::ps2faxCmd,        FAX_PS2FAXCMD },
+{ "pdf2faxcmd",                &faxQueueApp::pdf2faxCmd,       FAX_PDF2FAXCMD },
 { "pcl2faxcmd",                &faxQueueApp::pcl2faxCmd,       FAX_PCL2FAXCMD },
 { "tiff2faxcmd",       &faxQueueApp::tiff2faxCmd,      FAX_TIFF2FAXCMD },
 { "sendfaxcmd",                &faxQueueApp::sendFaxCmd,
index 01967f47c0b71b9f7f1c11b2518d37abc93a4969..72e30fa50f58fa219f297ba7a36cb34a4685e037 100644 (file)
@@ -105,6 +105,7 @@ private:
     float      pageChopThreshold;      // minimum space before page chop
     fxStr      notifyCmd;              // external command for notification
     fxStr      ps2faxCmd;              // external command for ps imager
+    fxStr      pdf2faxCmd;             // external command for pdf imager
     fxStr      pcl2faxCmd;             // external command for pcl imager
     fxStr      tiff2faxCmd;            // external command for TIFF converter
     fxStr      coverCmd;               // external command for cont cover pages
index ac8deb6546d0d035a9a845809480cab6e699e3cc..8674d340fda734821193870f0e9c729a0f546922 100644 (file)
@@ -117,6 +117,8 @@ main()
     hash("retrytime");
     hash("poll");
     hash("tiff");
+    hash("pdf");
+    hash("!pdf");
     hash("!tiff");
     hash("postscript");
     hash("!postscript");
index 6f1a5c56645406921ff8407095eaf7fc0e3493d5..42c7a10aeedf96e9b23da43b0387c0487a00430e 100644 (file)
@@ -759,6 +759,10 @@ HylaFAXServer::docType(const char* docname, FaxSendOp& op)
            int cc = Sys::read(fd, (char*) &b, sizeof (b));
            if (cc > 2 && b.buf[0] == '%' && b.buf[1] == '!')
                op = FaxRequest::send_postscript;
+           else if (cc > 2 && b.buf[0] == '%' && b.buf[1] == 'P') {
+               logError("What we have here is a PDF file");
+               op = FaxRequest::send_pdf;
+           }
            else if (cc > sizeof (b.h) && isTIFF(b.h))
                op = FaxRequest::send_tiff;
            else
@@ -766,5 +770,8 @@ HylaFAXServer::docType(const char* docname, FaxSendOp& op)
        }
        Sys::close(fd);
     }
+    if (op == FaxRequest::send_unknown)
+               logError("Don't know what file");
+
     return (op != FaxRequest::send_unknown);   
 }
index 27281034500b0bab3adde2eaf0f2fddc47cc4aea..d3642f81ad521480216999d52d4bf44114cc4137 100644 (file)
@@ -260,6 +260,8 @@ static const char* docTypeNames[] = {
     "PAGE",            // send_page_saved
     "UUCP",            // send_uucp
     "UNKNOWN",         // send_unknown
+    "PDF",                     // send_pdf
+    "PDF",                     // send_pdf_saved
 };
 
 static const char*
@@ -394,6 +396,8 @@ HylaFAXServer::replyJobParamValue(Job& job, int code, Token t)
            const faxRequest& freq = job.requests[i];
            // XXX should cover page docs not be shown?
            switch (freq.op) {
+           case FaxRequest::send_pdf:
+           case FaxRequest::send_pdf_saved:
            case FaxRequest::send_tiff:
            case FaxRequest::send_tiff_saved:
            case FaxRequest::send_postscript:
@@ -414,6 +418,8 @@ HylaFAXServer::replyJobParamValue(Job& job, int code, Token t)
                switch (freq.op) {
                case FaxRequest::send_tiff:
                case FaxRequest::send_tiff_saved:
+               case FaxRequest::send_pdf:
+               case FaxRequest::send_pdf_saved:
                case FaxRequest::send_postscript:
                case FaxRequest::send_postscript_saved:
                case FaxRequest::send_pcl:
@@ -530,6 +536,8 @@ HylaFAXServer::jstatCmd(const Job& job)
                break;
            case FaxRequest::send_tiff:
            case FaxRequest::send_tiff_saved:
+           case FaxRequest::send_pdf:
+           case FaxRequest::send_pdf_saved:
            case FaxRequest::send_postscript:
            case FaxRequest::send_postscript_saved:
            case FaxRequest::send_pcl:
@@ -1213,6 +1221,8 @@ HylaFAXServer::deleteJob(const char* jobid)
                    /* ... fall thru */
                case FaxRequest::send_tiff_saved:
                case FaxRequest::send_tiff:
+               case FaxRequest::send_pdf_saved:
+               case FaxRequest::send_pdf:
                case FaxRequest::send_postscript:
                case FaxRequest::send_postscript_saved:
                case FaxRequest::send_pcl:
@@ -1229,6 +1239,8 @@ HylaFAXServer::deleteJob(const char* jobid)
                switch (freq.op) {
                case FaxRequest::send_tiff_saved:
                case FaxRequest::send_tiff:
+               case FaxRequest::send_pdf_saved:
+               case FaxRequest::send_pdf:
                case FaxRequest::send_postscript:
                case FaxRequest::send_postscript_saved:
                case FaxRequest::send_pcl:
index 26f960fa852eae31e0819267cabfc2b1f1898b0a..87b31f7f40361cca26eb4a44de24ce43f61cd77d 100644 (file)
@@ -724,6 +724,8 @@ OldProtocolServer::reallyRemoveJob(const char* op, Job& job)
            switch (freq.op) {
            case FaxRequest::send_tiff:
            case FaxRequest::send_tiff_saved:
+           case FaxRequest::send_pdf:
+           case FaxRequest::send_pdf_saved:
            case FaxRequest::send_postscript:
            case FaxRequest::send_postscript_saved:
            case FaxRequest::send_pcl:
@@ -917,6 +919,7 @@ OldProtocolServer::setupData(void)
                    const faxRequest& freq = reqs[--i];
                    switch (freq.op) {
                    case FaxRequest::send_tiff:
+                   case FaxRequest::send_pdf:
                    case FaxRequest::send_postscript:
                    case FaxRequest::send_pcl:
                        Sys::unlink(freq.item);
@@ -953,6 +956,7 @@ OldProtocolServer::dataTemplate(FaxSendOp type, int& dfd)
        , seqnum
        , type == FaxRequest::send_tiff         ? ".tif" :
          type == FaxRequest::send_postscript   ? ".ps"  :
+         type == FaxRequest::send_pdf  ? ".pdf":
                                                  ""
        );
     dfd = Sys::open(templ, O_RDWR|O_CREAT|O_EXCL, 0660);
index 6f7c1f8d398d2cd12dec493c5d637be85db48f58..a82760ab2752e2f26226004b54d511b2f703e009 100644 (file)
@@ -88,6 +88,7 @@ MANSAPP=sman.apps/cqtest.1m   \
        sman.apps/pagesend.1m   \
        sman.apps/pollrcvd.1m   \
        sman.apps/ps2fax.1m     \
+       sman.apps/pdf2fax.1m    \
        sman.apps/recvstats.1m  \
        sman.apps/tagtest.1m    \
        sman.apps/tiff2fax.1m   \
@@ -180,6 +181,7 @@ sman.apps/notify.1m::       ${SRCDIR}/notify.1m;    ${MANCVT}
 sman.apps/pagesend.1m::        ${SRCDIR}/pagesend.1m;  ${MANCVT}
 sman.apps/pollrcvd.1m::        ${SRCDIR}/pollrcvd.1m;  ${MANCVT}
 sman.apps/ps2fax.1m::  ${SRCDIR}/ps2fax.1m;    ${MANCVT}
+sman.apps/pdf2fax.1m:: ${SRCDIR}/pdf2fax.1m;   ${MANCVT}
 sman.apps/recvstats.1m:: ${SRCDIR}/recvstats.1m; ${MANCVT}
 sman.apps/tagtest.1m:: ${SRCDIR}/tagtest.1m;   ${MANCVT}
 sman.apps/tiff2fax.1m::        ${SRCDIR}/tiff2fax.1m;  ${MANCVT}
index 0c0e5b935d634870501fbbdb6106a3e08b24a8aa..2135ea4387e356b9bb7d136353dc92d09ab9e59a 100644 (file)
@@ -174,6 +174,7 @@ install: installClient
        ${PUTSUPD} -m 755 -src ${SRCDIR}/ps2fax.gs.sh -O ps2fax.gs
        ${PUTSUPD} -m 755 -src ${SRCDIR}/ps2fax.dps.sh -O ps2fax.dps
        ${PUTSUPD} -m 755 -src ${SRCDIR}/ps2fax.imp.sh -O ps2fax.imp
+       ${PUTSUPD} -m 755 -src ${SRCDIR}/pdf2fax.gs.sh -O pdf2fax.gs
        ${PUTSUPD} -m 755 -src ${SRCDIR}/pcl2fax.sh -O pcl2fax
        ${PUTSUPD} -m 755 -src ${SRCDIR}/tiff2fax.sh -O tiff2fax
        ${PUTSUPD} -m 755 -src ${SRCDIR}/notify.sh -O notify
index be80ddcfc5f9a828e89aff1322f4fb836bd2228f..8b77e1a7381e11b38085291709f90547f5cfc599 100644 (file)
@@ -52,6 +52,8 @@ function docType(s)
        return "PostScript";
     else if (match(s, "\.tif"))
        return "TIFF";
+    else if (match(s, "\.pdf"))
+       return "PDF";
     else if (match(s, "\.pcl"))
        return "PCL";
     else