[r2332]: trunk / faxd / FaxRequest.h  Maximize  Restore  History

Download this file

223 lines (212 with data), 9.6 kB

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
/* $Id: FaxRequest.h 1108 2012-06-26 03:56:56Z faxguy $ */
/*
* Copyright (c) 1990-1996 Sam Leffler
* Copyright (c) 1991-1996 Silicon Graphics, Inc.
* HylaFAX is a trademark of Silicon Graphics
*
* Permission to use, copy, modify, distribute, and sell this software and
* its documentation for any purpose is hereby granted without fee, provided
* that (i) the above copyright notices and this permission notice appear in
* all copies of the software and related documentation, and (ii) the names of
* Sam Leffler and Silicon Graphics may not be used in any advertising or
* publicity relating to the software without the specific, prior written
* permission of Sam Leffler and Silicon Graphics.
*
* THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND,
* EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
* WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
*
* IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
* ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
* OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
* WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF
* LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
* OF THIS SOFTWARE.
*/
#ifndef _FaxRequest_
#define _FaxRequest_
/*
* HylaFAX Job Request Structure.
*/
#include "FaxSendStatus.h"
#include "FaxItem.h"
#include <time.h>
#include <stdio.h>
class Class2Params;
/*
* This structure is passed from the queue manager
* to the fax modem+protocol service for each job
* to be processed. This class also supports the
* reading and writing of this information to an
* external file.
*/
class FaxRequest {
protected:
void reset(void);
virtual bool checkDocument(const char* pathname);
virtual void error(const char* fmt, ...);
public:
enum {
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_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
when_done = 0x1, // notify when send completed
when_requeued = 0x2, // notify if job requeued
notify_any = 0x3
};
enum { // page chopping control
chop_default = 0, // default server setting
chop_none = 1, // chop no pages
chop_all = 2, // chop all pages with trailing white
chop_last = 3 // chop last page in each document
};
enum { // job scheduling state
state_undefined = 0, // undefined state (should never be used)
state_suspended = 1, // not being scheduled
state_pending = 2, // waiting for time to send
state_sleeping = 3, // waiting for scheduled timeout
state_blocked = 4, // blocked by concurrent activity
state_ready = 5, // ready to be go, waiting for resources
state_active = 6, // actively being processed
state_done = 7, // processing completed with success
state_failed = 8 // processing completed with a failure
};
struct stringval { // string-valued item
const char* name;
fxStr FaxRequest::* p;
};
struct shortval { // u_short-valued item
const char* name;
u_short FaxRequest::* p;
};
struct intval {
const char* name;
int FaxRequest::* p;
};
fxStr qfile; // associated queue file name
fxStr jobid; // job identifier
fxStr groupid; // job group identifier
fxStr owner; // job owner identifier
fxStr commid; // last session's communication ID
int fd; // open+locked queue file
u_short state; // job scheduling state
u_short lineno; // line number when reading queue file
FaxSendStatus status; // request status indicator
u_short totpages; // total cumulative pages in documents
u_short npages; // total pages sent/received
u_short skippages; // skip over these pages in the document
int skippedpages; // start page numbering here + 1
u_short serverdocover; // server should create the coverpage
u_short nocountcover; // don't count these pages
u_short probeonly; // this job is only to probe the receiver
u_short conntime; // connection time on last session
u_short duration; // duration time on last session
u_short ntries; // # tries to send current page
u_short ndials; // # consecutive failed tries to call dest
u_short totdials; // total # calls to dest
u_short maxdials; // max # times to dial the phone
u_short tottries; // total # attempts to deliver
u_short maxtries; // max # attempts to deliver (answered calls)
u_short pagewidth; // desired output page width (mm)
u_short pagelength; // desired output page length (mm)
u_short resolution; // desired vertical resolution (lpi) (normal/fine)
u_short usrpri; // user-requested scheduling priority
u_short pri; // current scheduling priority
u_short minbr; // minimum acceptable signalling rate
u_short desiredbr; // maximum desired signalling rate
u_short desiredst; // desired min-scanline-time
u_short desiredec; // enable use of ECM if available
u_short desireddf; // desired data format
u_short desiredtl; // desired tagline handling
u_short useccover; // whether to use continuation cover page
u_short usexvres; // whether to use extended VR
u_short usecolor; // whether to use color
u_short pagechop; // whether to do page chopping
u_short notify; // email notification flags
u_short ignoremodembusy;// ignore modem busy status
float chopthreshold; // minimum white space before chopping
time_t tts; // time to send
time_t killtime; // time to kill job
time_t retrytime; // time to delay between retries
fxStr sender; // sender's name
fxStr mailaddr; // return mail address
fxStr jobtag; // user-specified job tag
fxStr number; // dialstring for fax machine
fxStr subaddr; // transmit subaddress
fxStr passwd; // transmit password
fxStr canonical; // canonical phone number for data correlation
fxStr external; // displayable phone number for fax machine
fxStr notice; // message to send for notification
fxStr modem; // outgoing modem (ModemGroup) to use
fxStr modemused; // specific modem used in last attempt
fxStr faxnumber; // Sender's number to advertise to phone company
fxStr faxname; // Sender's name to advertise to phone company
fxStr tsi; // TSI to use instead of LocalIdentifier
fxStr pagehandling; // page analysis information
fxStr receiver; // receiver's identity for cover page generation
fxStr company; // receiver's company for cover page generation
fxStr location; // receiver's location for cover page generation
fxStr voice; // receiver's voice number for cover page generation
fxStr fromcompany; // sender's company for cover page generation
fxStr fromlocation; // sender's location for cover page generation
fxStr fromvoice; // sender's voice number for cover page generation
fxStr regarding; // regarding subject for cover page generation
fxStr comments; // comments for cover page generation
fxStr cover; // continuation cover page filename
fxStr client; // identity of machine that submitted job
fxStr sigrate; // negotiated signalling rate
fxStr df; // negotiated data format
fxStr jobtype; // job type for selecting send command
fxStr tagline; // tag line format
fxStr doneop; // operation to do when job completes
fxStr csi; // CSI string from receiving equipment (ASCII representation)
fxStr nsf; // NSF string from receiving equipment (ASCII representation)
fxStr timeofday; // time of day restrictions
fxStr timezone; // timezone to use in tag line
fxStr errorcode; // error code for status
pid_t writeQFilePid; // pid of last writeQFile operation
FaxItemArray items; // set of requests
static stringval strvals[];
static shortval shortvals[];
static intval intvals[];
static const char* opNames[18];
static const char* notifyVals[4];
static const char* chopVals[4];
FaxRequest(const fxStr& qf, int fd = -1);
virtual ~FaxRequest();
bool readQFile(bool& rejectJob);
bool reReadQFile(bool& rejectJob);
void writeQFile();
u_int findItem(FaxSendOp, u_int start = 0) const;
bool isNotify(u_int what) const;
static bool isStrCmd(const char* cmd, u_int& ix);
static bool isShortCmd(const char* cmd, u_int& ix);
static bool isIntCmd(const char* cmd, u_int& ix);
void insertFax(u_int ix, const fxStr& file);
void addItem(FaxSendOp op, char* tag);
void addItem(FaxSendOp op, char* tag, bool& rejectJob);
void checkNotifyValue(const char* tag);
void checkChopValue(const char* tag);
static fxStr mkbasedoc(const fxStr& file);
void renameSaved(u_int fi);
bool isUnreferenced(u_int fi);
};
inline bool FaxRequest::isNotify(u_int what) const
{ return (notify & (u_short) what) != 0; }
#endif /* _FaxRequest_ */