912 lines
26 KiB
C
912 lines
26 KiB
C
|
|
||
|
// headers\et30type.h is assumed to be included
|
||
|
// ET30ACTION, ET30EVENT
|
||
|
|
||
|
// headers\timeouts.h ... TO
|
||
|
// headers\fr.h ... IFR
|
||
|
|
||
|
|
||
|
#define MODEM_CLASS1 1
|
||
|
#define MODEM_CLASS2 2
|
||
|
#define MODEM_CLASS2_0 3
|
||
|
|
||
|
typedef ET30ACTION ( __cdecl FAR* LPWHATNEXTPROC)(LPVOID, ET30EVENT, ...);
|
||
|
|
||
|
|
||
|
typedef struct {
|
||
|
LPWHATNEXTPROC lpfnWhatNext;
|
||
|
HMODEM hModem; // Modem driver handle
|
||
|
HLINE hLine; // NCU driver handle
|
||
|
} ET30PARAMS;
|
||
|
|
||
|
|
||
|
#define MAXRECVFRAMES 20
|
||
|
|
||
|
typedef struct {
|
||
|
LPFR rglpfr[MAXRECVFRAMES];
|
||
|
BYTE b[];
|
||
|
} FRAMESPACE, far* LPFRAMESPACE;
|
||
|
|
||
|
|
||
|
typedef struct {
|
||
|
LPFRAMESPACE lpfs; // ptr to storage for recvd frames
|
||
|
UWORD Nframes; // Number of recvd frames
|
||
|
|
||
|
IFR ifrCommand,
|
||
|
ifrResp,
|
||
|
ifrSend;
|
||
|
USHORT uTrainCount;
|
||
|
|
||
|
USHORT uRecvTCFMod; // for fastexit stuff
|
||
|
// set this from the DCS and jump straight into RecvTCF
|
||
|
|
||
|
// Used to decide whether to insert a 1 bit or not (T30 sec 5.3.6.1)
|
||
|
BOOL fReceivedDIS;
|
||
|
BOOL fReceivedDTC;
|
||
|
BOOL fReceivedEOM;
|
||
|
BOOL fAtEndOfRecvPage;
|
||
|
LONG sRecvBufSize;
|
||
|
TO toT1; // This is used in MainBody.
|
||
|
|
||
|
#ifdef IFK
|
||
|
TO toBuf; // This is used to wait for a free buffer
|
||
|
#endif
|
||
|
|
||
|
// INI file settings related stuff
|
||
|
USHORT uSkippedDIS;
|
||
|
|
||
|
// flag to know when we are doing send-after-send, and so should use
|
||
|
// SendSilence instead of RecvSilence. If we dont do this, we take
|
||
|
// too long & Ricoh's protocol tester complains. This is 7071, 7100
|
||
|
BOOL fSendAfterSend;
|
||
|
|
||
|
#ifdef MDDI
|
||
|
# define CLEAR_MISSED_TCFS()
|
||
|
#else // !MDDI
|
||
|
// Some modems can't train at higher speeds (timeout or return
|
||
|
// ERRROR on AT+FRM=xxx) with other specific devices, but are OK at lower
|
||
|
// speeds. So we keep track of the number of times we try to get the TCF,
|
||
|
// and after the 2nd failed attempt, send an FTT instead of going to
|
||
|
// node F.
|
||
|
# define CLEAR_MISSED_TCFS() (pTG->T30.uMissedTCFs=0)
|
||
|
# define MAX_MISSED_TCFS_BEFORE_FTT 2
|
||
|
USHORT uMissedTCFs;
|
||
|
#endif // !MDDI
|
||
|
|
||
|
#ifdef ADAPTIVE_ANSWER
|
||
|
BOOL fEnableHandoff;
|
||
|
#endif // ADAPTIVE_ANSWER
|
||
|
|
||
|
} ET30T30;
|
||
|
|
||
|
|
||
|
|
||
|
typedef struct {
|
||
|
DWORD dwPageSize; // Size of current page in bytes
|
||
|
USHORT uFrameSize;
|
||
|
USHORT SendPageCount,
|
||
|
SendBlockCount,
|
||
|
SendFrameCount;
|
||
|
USHORT FramesSent;
|
||
|
USHORT uPPRCount;
|
||
|
BOOL fEndOfPage;
|
||
|
TO toT5; // Used in RR_RNRLoop().
|
||
|
|
||
|
// Used for suppressing ST_FLAG in first PhaseC following
|
||
|
// a CTC/CTR (for V.17)
|
||
|
BOOL fSentCTC;
|
||
|
BOOL fRecvdCTC;
|
||
|
|
||
|
// Used in Recv
|
||
|
IFR ifrPrevCommand;
|
||
|
BOOL fRecvEndOfPage;
|
||
|
BYTE bRecvBadFrameMask[32];
|
||
|
BYTE bPrevPPS[4];
|
||
|
IFR ifrPrevResponse;
|
||
|
} ET30ECM;
|
||
|
|
||
|
|
||
|
|
||
|
typedef enum { modeNONE=0, modeNONECM, modeECM, modeECMRETX } PHASECMODE;
|
||
|
|
||
|
typedef struct {
|
||
|
IFR ifrLastSent;
|
||
|
PHASECMODE modePrevRecv;
|
||
|
BOOL fGotWrongMode;
|
||
|
} ET30ECHOPROTECT;
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
//
|
||
|
// headers\awnsfint.h is assumed to be included
|
||
|
// force include to class1\*.c
|
||
|
|
||
|
#pragma pack(1) // ensure packed structure
|
||
|
|
||
|
typedef struct {
|
||
|
BYTE G1stuff :3;
|
||
|
BYTE G2stuff :5;
|
||
|
|
||
|
BYTE G3Tx :1; // In DIS indicates poll doc avail. Must be 0 in DCS.
|
||
|
BYTE G3Rx :1; // Must set to 1 in BOTH DCS/DTC
|
||
|
BYTE Baud :4;
|
||
|
BYTE ResFine_200 :1;
|
||
|
BYTE MR_2D :1;
|
||
|
|
||
|
BYTE PageWidth :2;
|
||
|
BYTE PageLength :2;
|
||
|
BYTE MinScanCode :3;
|
||
|
BYTE Extend24 :1;
|
||
|
|
||
|
BYTE Hand2400 :1;
|
||
|
BYTE Uncompressed :1;
|
||
|
BYTE ECM :1;
|
||
|
BYTE SmallFrame :1;
|
||
|
BYTE ELM :1;
|
||
|
BYTE Reserved1 :1;
|
||
|
BYTE MMR :1;
|
||
|
BYTE Extend32 :1;
|
||
|
|
||
|
BYTE WidthInvalid :1;
|
||
|
BYTE Width2 :4;
|
||
|
// 1 == WidthA5_1216
|
||
|
// 2 == WidthA6_864
|
||
|
// 4 == WidthA5_1728
|
||
|
// 8 == WidthA6_1728
|
||
|
BYTE Reserved2 :2;
|
||
|
BYTE Extend40 :1;
|
||
|
|
||
|
BYTE Res8x15 :1;
|
||
|
BYTE Res_300 :1;
|
||
|
BYTE Res16x15_400 :1;
|
||
|
BYTE ResInchBased :1;
|
||
|
BYTE ResMetricBased :1;
|
||
|
BYTE MinScanSuperHalf:1;
|
||
|
BYTE SEPcap :1;
|
||
|
BYTE Extend48 :1;
|
||
|
|
||
|
BYTE SUBcap :1;
|
||
|
BYTE PWDcap :1;
|
||
|
BYTE CanEmitDataFile :1;
|
||
|
BYTE Reserved3 :1;
|
||
|
BYTE BFTcap :1;
|
||
|
BYTE DTMcap :1;
|
||
|
BYTE EDIcap :1;
|
||
|
BYTE Extend56 :1;
|
||
|
|
||
|
BYTE BTMcap :1;
|
||
|
BYTE Reserved4 :1;
|
||
|
BYTE CanEmitCharFile :1;
|
||
|
BYTE CharMode :1;
|
||
|
BYTE Reserved5 :3;
|
||
|
BYTE Extend64 :1;
|
||
|
|
||
|
} DIS, far* LPDIS, near* NPDIS;
|
||
|
|
||
|
#pragma pack()
|
||
|
|
||
|
|
||
|
#define MAXFRAMES 10
|
||
|
#define MAXSPACE 512
|
||
|
|
||
|
typedef struct
|
||
|
{
|
||
|
USHORT uNumFrames;
|
||
|
USHORT uFreeSpaceOff;
|
||
|
LPFR rglpfr[MAXFRAMES];
|
||
|
BYTE b[MAXSPACE];
|
||
|
}
|
||
|
RFS, near* NPRFS;
|
||
|
|
||
|
|
||
|
#define IDFIFSIZE 20 // from protocol\protocol.h
|
||
|
|
||
|
typedef struct {
|
||
|
BOOL fInUse;
|
||
|
|
||
|
////////////////////////// Client BC parameters
|
||
|
BCwithTEXT RecvCaps; // ==> NSF/DIS recved
|
||
|
DWORD RecvCapsGuard;
|
||
|
BCwithTEXT RecvParams; // ==> NSS/DCS recvd
|
||
|
DWORD RecvParamsGuard;
|
||
|
BCwithPOLL RecvPollReq; // ==> NSC/DTC recvd
|
||
|
DWORD RecvPollReqGuard;
|
||
|
|
||
|
BCwithTEXT SendCaps; // ==> NSF/DIS sent
|
||
|
DWORD SendCapsGuard;
|
||
|
BCwithTEXT SendParams; // ==> NSS/DCS sent
|
||
|
DWORD SendParamsGuard;
|
||
|
BCwithPOLL SendPollReq; // ==> NSC/DTC sent
|
||
|
DWORD SendPollReqGuard;
|
||
|
|
||
|
// LPBC lpbcSendCaps; // ==> NSF/DIS sent
|
||
|
// LPBC lpbcSendParams; // ==> NSS/DCS sent
|
||
|
// LPBC lpbcSendPollReq; // ==> NSC/DTC sent
|
||
|
|
||
|
BOOL fRecvCapsGot;
|
||
|
BOOL fSendCapsInited;
|
||
|
BOOL fSendParamsInited;
|
||
|
BOOL fRecvParamsGot;
|
||
|
BOOL fRecvPollReqGot;
|
||
|
BOOL fSendPollReqInited;
|
||
|
|
||
|
////////////////////////// Hardware parameters
|
||
|
LLPARAMS llRecvCaps; // DIS recvd
|
||
|
LLPARAMS llSendCaps; // DIS sent---use uRecvSpeeds
|
||
|
LLPARAMS llSendParams; // used to negotiate DCS--use uSendSpeeds
|
||
|
LLPARAMS llNegot; // DCS sent
|
||
|
LLPARAMS llRecvParams; // recvd DCS
|
||
|
|
||
|
BOOL fllRecvCapsGot;
|
||
|
BOOL fllSendCapsInited;
|
||
|
BOOL fllSendParamsInited;
|
||
|
BOOL fllNegotiated;
|
||
|
BOOL fllRecvParamsGot;
|
||
|
|
||
|
BOOL fHWCapsInited;
|
||
|
|
||
|
USHORT HighestSendSpeed;
|
||
|
USHORT LowestSendSpeed;
|
||
|
|
||
|
////////////////////////// Flags to make decisions with
|
||
|
// BYTE NextSend;
|
||
|
// BOOL fSendingECM;
|
||
|
// BOOL fReceivingECM;
|
||
|
BOOL fPageOK;
|
||
|
BOOL fAbort;
|
||
|
|
||
|
////////////////////////// Current Send/Recv params (to return on ExtFunc)
|
||
|
// USHORT uCurRecvBaud;
|
||
|
// USHORT uMinBytesPerLine;
|
||
|
// USHORT uCurECMFrameSize;
|
||
|
// USHORT uRecvECMFrameSize;
|
||
|
USHORT uFramesInThisBlock;
|
||
|
|
||
|
|
||
|
///////////////////////// NSF/NSC/NSS Received Frames
|
||
|
RFS RecvdNS;
|
||
|
|
||
|
///////////////////////// CSI/TSI/CIG Received Frames
|
||
|
BOOL fRecvdID;
|
||
|
BYTE bRemoteID[IDFIFSIZE+1];
|
||
|
|
||
|
///////////////////////// DIS Received Frames
|
||
|
DIS RemoteDIS;
|
||
|
USHORT uRemoteDISlen;
|
||
|
BOOL fRecvdDIS;
|
||
|
|
||
|
///////////////////////// DTC Received Frames
|
||
|
DIS RemoteDTC;
|
||
|
USHORT uRemoteDTClen;
|
||
|
BOOL fRecvdDTC;
|
||
|
|
||
|
///////////////////////// DCS Received Frames
|
||
|
DIS RemoteDCS;
|
||
|
USHORT uRemoteDCSlen;
|
||
|
BOOL fRecvdDCS;
|
||
|
|
||
|
///////////////////////// ECM Received Frames
|
||
|
BYTE bRemotePPR[32];
|
||
|
BOOL fRecvdPPR;
|
||
|
BYTE bRemotePPS[4]; // only 3 bytes, but use 4 so we can cast to DWORD
|
||
|
BOOL fRecvdPPS;
|
||
|
|
||
|
///////////////////////// SUB (subaddress) Received Frames
|
||
|
BOOL fRecvdSUB;
|
||
|
BYTE bRecipSubAddr[IDFIFSIZE+1];
|
||
|
|
||
|
}
|
||
|
PROT, near* NPPROT;
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
//
|
||
|
// protapi.h includes protparm.h
|
||
|
// which defines PROTPARAMS
|
||
|
//
|
||
|
|
||
|
|
||
|
typedef struct
|
||
|
{
|
||
|
USHORT uSize;
|
||
|
SHORT Class;
|
||
|
SHORT PreambleFlags,
|
||
|
InterframeFlags,
|
||
|
ClosingFlags;
|
||
|
}
|
||
|
MODEMPARAMS, far* LPMODEMPARAMS;
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
#define COMMANDBUFSIZE 40
|
||
|
|
||
|
|
||
|
typedef struct {
|
||
|
// TO toDialog, toZero;
|
||
|
TO toRecv;
|
||
|
// BYTE bLastReply[REPLYBUFSIZE+1];
|
||
|
|
||
|
BYTE bCmdBuf[COMMANDBUFSIZE];
|
||
|
USHORT uCmdLen;
|
||
|
BOOL fHDLC;
|
||
|
USHORT CurMod;
|
||
|
enum {SEND, RECV, IDLE } DriverMode;
|
||
|
enum {COMMAND, FRH, FTH, FTM, FRM} ModemMode;
|
||
|
BOOL fRecvNotStarted;
|
||
|
// SHORT sRecvBufSize;
|
||
|
|
||
|
HWND hwndNotify;
|
||
|
BOOL fSendSWFraming;
|
||
|
BOOL fRecvSWFraming;
|
||
|
|
||
|
enum {RECV_FCS_DUNNO=0, RECV_FCS_NO, RECV_FCS_CHK, RECV_FCS_NOCHK} eRecvFCS;
|
||
|
// Whether this modem appends FCS on HDLC recv.
|
||
|
// Modems with AT&T bug don't append FCS.
|
||
|
// Currently we determine this at run time.
|
||
|
|
||
|
#ifdef ADAPTIVE_ANSWER
|
||
|
BOOL fEnableHandoff;
|
||
|
#endif // ADAPTIVE_ANSWER
|
||
|
|
||
|
} CLASS1_MODEM;
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
typedef struct {
|
||
|
// BYTE fModemInit :1; // Reset & synced up with modem
|
||
|
// BYTE fOffHook :1; // Online (either dialled or answered)
|
||
|
USHORT ifrHint; // current hint
|
||
|
// BOOL fNCUAbort; // When set, means Abort Dial/Answer
|
||
|
} CLASS1_STATUS;
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
typedef struct
|
||
|
{
|
||
|
USHORT uComPort;
|
||
|
BOOL fLineInUse;
|
||
|
BOOL fModemOpen;
|
||
|
BOOL fNCUModemLinked;
|
||
|
}
|
||
|
CLASS1_DDI;
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
#define OVBUFSIZE 4096
|
||
|
|
||
|
typedef struct
|
||
|
{
|
||
|
enum {eDEINIT, eFREE, eALLOC, eIO_PENDING} eState;
|
||
|
OVERLAPPED ov;
|
||
|
char rgby[OVBUFSIZE]; // Buffer associated with this overlapped struct.
|
||
|
DWORD dwcb; // Current count of data in this buffer.
|
||
|
} OVREC;
|
||
|
|
||
|
typedef struct
|
||
|
{
|
||
|
// Timeouts
|
||
|
DWORD dwTOOutShortInactivity;
|
||
|
DWORD dwTOOutLongInactivity;
|
||
|
DWORD dwTOOutShortDeadComm;
|
||
|
DWORD dwTOOutLongDeadComm;
|
||
|
DWORD dwTOInOneChar;
|
||
|
|
||
|
} FCOMSETTINGS, FAR * LPFCOMSETTINGS;
|
||
|
|
||
|
typedef struct {
|
||
|
LONG_PTR nCid; // _must_ be 32bits in WIN32 (has to hold a HANDLE) -- AJR 12/16/97, change to LONG_PTR for 64 bits
|
||
|
int CommErr; // _must_ be 32bits in WIN32
|
||
|
UWORD cbInSize;
|
||
|
UWORD cbOutSize;
|
||
|
DCB dcb;
|
||
|
#ifdef METAPORT
|
||
|
DCB dcbOrig;
|
||
|
BOOL fExternalHandle;
|
||
|
BOOL fStateChanged;
|
||
|
#endif
|
||
|
COMSTAT comstat;
|
||
|
BYTE bDontYield; // Was a BOOL, now a counter.
|
||
|
#ifdef NTF
|
||
|
HWND hwndNotify; // can use this for timer msgs
|
||
|
#endif
|
||
|
#ifdef WFWBG
|
||
|
BOOL fBG;
|
||
|
#endif
|
||
|
TO toCommDead, toOnechar, toDrain;
|
||
|
USHORT uInterruptOverunCount;
|
||
|
USHORT uBufferOverflowCount;
|
||
|
USHORT uFramingBreakErrorCount;
|
||
|
USHORT uOtherErrorCount;
|
||
|
BOOL fCommOpen;
|
||
|
|
||
|
FCOMSETTINGS CurSettings;
|
||
|
|
||
|
#ifdef WIN32
|
||
|
|
||
|
# define NUM_OVS 2 // Need atleast 2 to get true overlaped I/O
|
||
|
|
||
|
// We maintain a queue of overlapped structures, having upto
|
||
|
// NUM_OVS overlapped writes pending. If NUM_OVS writes are pending,
|
||
|
// we do a GetOverlappedResult(fWait=TRUE) on the earliest write, and
|
||
|
// then reuse that structure...
|
||
|
|
||
|
OVERLAPPED ovAux; // For ReadFile and WriteFile(MyWriteComm only).
|
||
|
|
||
|
OVREC rgovr[NUM_OVS]; // For WriteFile
|
||
|
UINT uovFirst;
|
||
|
UINT uovLast;
|
||
|
UINT covAlloced;
|
||
|
BOOL fDoOverlapped;
|
||
|
BOOL fovInited;
|
||
|
|
||
|
OVREC *lpovrCur;
|
||
|
|
||
|
#endif // WIN32
|
||
|
|
||
|
#ifdef ADAPTIVE_ANSWER
|
||
|
BYTE fEnableHandoff:1; // True if we are to enable adaptive answer
|
||
|
BYTE fDataCall:1; // True if a data call is active.
|
||
|
#endif // ADAPTIVE_ANSWER
|
||
|
|
||
|
} FCOM_COMM;
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
//
|
||
|
// NCUPARAMS is defined in headers\ncuparm.h, included by .\modemddi.h
|
||
|
// we will force define modemddi.h
|
||
|
//
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
#define REPLYBUFSIZE 400
|
||
|
#define MAXKEYSIZE 128
|
||
|
|
||
|
|
||
|
|
||
|
typedef struct {
|
||
|
BYTE fModemInit :1; // Reset & synced up with modem
|
||
|
BYTE fOffHook :1; // Online (either dialled or answered)
|
||
|
BOOL fInDial, fInAnswer, fInDialog;
|
||
|
} FCOM_STATUS;
|
||
|
|
||
|
|
||
|
typedef struct {
|
||
|
DWORD dwDialCaps; // One of the LINEDEVCAPSFLAGS_* defined in filet30.h
|
||
|
// (and also in tapi.h)
|
||
|
} MODEMEXTCAPS, FAR *LPMODEMEXTCAPS;
|
||
|
|
||
|
|
||
|
|
||
|
typedef struct {
|
||
|
BYTE bLastReply[REPLYBUFSIZE+1];
|
||
|
|
||
|
#ifdef ADAPTIVE_ANSWER
|
||
|
BYTE bEntireReply[REPLYBUFSIZE+1]; // Used only for storing
|
||
|
#endif // ADAPTIVE_ANSWER
|
||
|
|
||
|
TO toDialog, toZero;
|
||
|
CMDTAB CurrCmdTab;
|
||
|
MODEMCAPS CurrMdmCaps;
|
||
|
MODEMEXTCAPS CurrMdmExtCaps;
|
||
|
|
||
|
// Following point to the location of the profile information.
|
||
|
# define MAXKEYSIZE 128
|
||
|
DWORD dwProfileID;
|
||
|
char rgchKey[MAXKEYSIZE];
|
||
|
char rgchOEMKey[MAXKEYSIZE];
|
||
|
|
||
|
|
||
|
} FCOM_MODEM;
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
// Inst from fxrn\efaxrun.h
|
||
|
|
||
|
typedef enum { IDLE1, BEFORE_ANSWER, BEFORE_RECVCAPS, SENDDATA_PHASE,
|
||
|
SENDDATA_BETWEENPAGES, /** BEFORE_HANGUP, BEFORE_ACCEPT, **/
|
||
|
BEFORE_RECVPARAMS, RECVDATA_PHASE, RECVDATA_BETWEENPAGES,
|
||
|
SEND_PENDING } STATE;
|
||
|
|
||
|
#define MAXRECV 50
|
||
|
#define FILENAMESIZE 15
|
||
|
#define PHONENUMSIZE 60
|
||
|
#define PATHSIZE 150
|
||
|
#define MAXUSERATCMDLEN 80
|
||
|
#define MAXSECTIONLENGTH 80
|
||
|
|
||
|
typedef struct
|
||
|
{
|
||
|
USHORT uNumPages; // keep a running tally as we process the file
|
||
|
USHORT vMsgProtocol;
|
||
|
USHORT vSecurity;
|
||
|
USHORT Encoding;
|
||
|
#ifdef COMPRESS
|
||
|
USHORT vMsgCompress;
|
||
|
#endif
|
||
|
DWORD AwRes;
|
||
|
USHORT PageWidth;
|
||
|
USHORT PageLength;
|
||
|
USHORT fLin;
|
||
|
USHORT fLastPage;
|
||
|
|
||
|
DWORD lNextHeaderOffset;
|
||
|
DWORD lDataOffset;
|
||
|
DWORD lDataSize;
|
||
|
|
||
|
enum {
|
||
|
RFS_DEINIT=0, // Either before WriteFileHeader or after WriteFileEnder
|
||
|
RFS_INIT, // After file opened, but before first StartWritePage
|
||
|
RFS_INSIDE_PAGE, // We've called StartWritePage but not EndWritePage
|
||
|
RFS_AFTER_PAGE // After EndWritePage
|
||
|
} erfs; // Receive File State
|
||
|
|
||
|
char szID[MAXFHBIDLEN + 2];
|
||
|
}
|
||
|
AWFILEINFO, FAR* LPAWFI;
|
||
|
|
||
|
#define MAX_REMOTE_MACHINECAPS_SIZE 256
|
||
|
typedef struct {
|
||
|
BOOL fInited;
|
||
|
BOOL fAbort;
|
||
|
BOOL fExternalHandle; // TRUE iff the comm port handle was
|
||
|
// supplied from outside.
|
||
|
// BOOL fDiskError;
|
||
|
// BOOL fInternalError;
|
||
|
// BOOL fRinging;
|
||
|
STATE state;
|
||
|
HWND hwndSend;
|
||
|
HWND hwndRecv;
|
||
|
HWND hwndListen;
|
||
|
USHORT uRingMessage; // message to post on RING
|
||
|
HWND hwndStatus;
|
||
|
DWORD dwLineID;
|
||
|
USHORT usLineIDType;
|
||
|
USHORT uModemClass;
|
||
|
LONG sSendBufSize;
|
||
|
USHORT uSendDataSize;
|
||
|
BOOL fSendPad;
|
||
|
BYTE szFaxDir[PATHSIZE + FILENAMESIZE + 1]; // add space to zap in file names
|
||
|
USHORT cbFaxDir;
|
||
|
ATOM aPhone;
|
||
|
ATOM aCapsPhone; // Phone number be used for storing capabilities..
|
||
|
// Typically in canonical form...
|
||
|
char szPath[PATHSIZE + FILENAMESIZE + 1];
|
||
|
char szFile[FILENAMESIZE];
|
||
|
HFILE hfileMG3, hfileEFX, hfileIFX;
|
||
|
BOOL fReceiving;
|
||
|
BOOL fSending;
|
||
|
|
||
|
#define MAXRECIPNAMELEN 128
|
||
|
#define MAXSUBJECTLEN 40
|
||
|
#define MAXSENDERLEN 40
|
||
|
|
||
|
// default RecipName
|
||
|
BYTE szDefRecipName[MAXRECIPNAMELEN + 2];
|
||
|
BYTE szDefRecipAddr[MAXRECIPNAMELEN + 2];
|
||
|
BYTE szDefSubject[MAXSUBJECTLEN + 2];
|
||
|
BYTE szNamedSubject[MAXSUBJECTLEN + 2];
|
||
|
BYTE szDefSender[MAXSENDERLEN + 2];
|
||
|
BYTE szLocalID[MAXRECIPNAMELEN + 2];
|
||
|
|
||
|
AWFILEINFO awfi;
|
||
|
|
||
|
long cbPage;
|
||
|
// long cbPageStart;
|
||
|
long cbBlockStart; // file ptr to start of block
|
||
|
long cbBlockSize; // size of block so far
|
||
|
HFILE hfile;
|
||
|
|
||
|
BCwithTEXT SendCaps;
|
||
|
BCwithTEXT RemoteRecvCaps;
|
||
|
BCwithTEXT SendParams;
|
||
|
BCwithTEXT RecvParams;
|
||
|
//BC RemoteRecvCaps;
|
||
|
//BC SendParams;
|
||
|
//BC RecvParams;
|
||
|
|
||
|
USHORT uPageAcks;
|
||
|
USHORT HorizScaling, VertScaling;
|
||
|
USHORT HorizScaling300dpi, VertScaling300dpi;
|
||
|
NCUPARAMS NcuParams;
|
||
|
MODEMPARAMS ModemParams; // added in the add-class0 hack
|
||
|
// HMODEM hModem;
|
||
|
// HLINE hLine;
|
||
|
PROTPARAMS ProtParams;
|
||
|
DWORD FixSerialSpeed;
|
||
|
// replaced by ProtParams
|
||
|
// USHORT HighestSendSpeed, LowestSendSpeed;
|
||
|
// BOOL fEnableV17Send, fEnableV17Recv;
|
||
|
// BOOL fDisableECM;
|
||
|
// BOOL f64ByteECM;
|
||
|
BOOL fDisableG3ECM; // If TRUE, will disable *sending* of MMR
|
||
|
// (so we don't use ECM when sending to
|
||
|
// fax machines).
|
||
|
BOOL fDisableSECtoMR; // If TRUE, we won't try to translate
|
||
|
BOOL fDisableMRRecv; // If TRUE, we won't advertise ability
|
||
|
// to receive MR..
|
||
|
USHORT uCopyQualityCheckLevel;
|
||
|
BYTE szWindowsDir[PATHSIZE + FILENAMESIZE + 1]; // add space to zap in DLL names
|
||
|
USHORT cbWindowsDir;
|
||
|
BOOL fProtInited; // for cleanups
|
||
|
#ifdef TSK
|
||
|
ATOM aFileMG3, aFileIFX, aFileEFX;
|
||
|
#endif //TSK
|
||
|
USHORT uRecvPageAck;
|
||
|
USHORT uNumBadPages;
|
||
|
#ifdef CHK
|
||
|
BOOL fRecvChecking;
|
||
|
#endif //CHK
|
||
|
#ifdef SEC
|
||
|
BOOL fSendRecoding;
|
||
|
LPBUFFER lpbfPrev;
|
||
|
BOOL fPassedEOP;
|
||
|
#endif //SEC
|
||
|
|
||
|
// Failure Codes
|
||
|
|
||
|
USHORT uFirstFailureCode;
|
||
|
USHORT uLastFailureCode;
|
||
|
BOOL fLogFailureCode; // write failures to efaxtrans.log
|
||
|
HFILE hfileFailureLog;
|
||
|
|
||
|
// Prevent re-entry in FreeOrGetDll + ProcessANswerModeReturn loop
|
||
|
// Re-entry can only happen inside the dialog box so we don't need
|
||
|
// an atomic test-and-set. See bug#1181
|
||
|
|
||
|
BOOL fChangingAnswerMode;
|
||
|
|
||
|
// If PostMessage of vital messages (i.e. FILET30DONE only) fails
|
||
|
// (which can happen if the msg queue is full), then try to post
|
||
|
// it again later. See bug#1276
|
||
|
|
||
|
MSG PostMsg;
|
||
|
DWORD dwProfileID;
|
||
|
char rgchSection[MAXSECTIONLENGTH];
|
||
|
|
||
|
BOOL fInPollReq;
|
||
|
#ifdef POLLREQ
|
||
|
USHORT PollType;
|
||
|
BOOL fPollNoSupportErr;
|
||
|
char szDocName[MAXTOTALIDLEN+3];
|
||
|
char szPassword[MAXTOTALIDLEN+3];
|
||
|
BCwithPOLL SendPollReq;
|
||
|
#endif
|
||
|
|
||
|
#ifdef COMPRESS
|
||
|
BOOL fDisableCmprsSend; // If true, we don't create compressed fls.
|
||
|
BOOL fDisableCmprsRecv; // If true, we don't say we support cmprs.
|
||
|
HFILE hfileEFXCmprs; // Handle of internally generated compressed
|
||
|
// file. This file is opened in OpenSendFiles (fileio.c).
|
||
|
// and closed on error (ErrCleanup, init.c)
|
||
|
// or when the call is complete (EndOfCall, init.c)
|
||
|
// From both places, I call the function
|
||
|
// DeleteCompressedFile, fileio.c
|
||
|
BOOL fCreatedEFXCmprs; // True if we've created this file.
|
||
|
char szEFXCmprsFile[MAX_PATH]; // full path name
|
||
|
#endif
|
||
|
|
||
|
BOOL fReinitClass2; // Set in FileT30Init, used and cleared
|
||
|
// in bgt30.c (call to lpfnClass2Calle[er].
|
||
|
|
||
|
#ifdef ADAPTIVE_ANSWER
|
||
|
BOOL fEnableHandoff;
|
||
|
#endif // ADAPTIVE_ANSWER
|
||
|
|
||
|
#ifdef USECAPI
|
||
|
BYTE bRemoteMachineCapsData[MAX_REMOTE_MACHINECAPS_SIZE];
|
||
|
#else // !USECAPI
|
||
|
BYTE szTextCaps[TEXTCAPSSIZE];
|
||
|
#endif // !USECAPI
|
||
|
}
|
||
|
INSTDATA, *PINSTDATA;
|
||
|
|
||
|
|
||
|
|
||
|
//memory management
|
||
|
#define STATICBUFSIZE (MY_BIGBUF_ACTUALSIZE * 2)
|
||
|
#define STATICBUFCOUNT 2
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
typedef struct {
|
||
|
HANDLE hComm;
|
||
|
CHAR szDeviceName[1];
|
||
|
} DEVICEID, FAR * LPDEVICEID;
|
||
|
|
||
|
// Device Setting Information BrianL 10/29/96
|
||
|
//
|
||
|
typedef struct tagDEVCFGHDR {
|
||
|
DWORD dwSize;
|
||
|
DWORD dwVersion;
|
||
|
DWORD fdwSettings;
|
||
|
} DEVCFGHDR;
|
||
|
|
||
|
|
||
|
typedef struct tagDEVCFG {
|
||
|
DEVCFGHDR dfgHdr;
|
||
|
COMMCONFIG commconfig;
|
||
|
} DEVCFG, *PDEVCFG, FAR* LPDEVCFG;
|
||
|
|
||
|
|
||
|
|
||
|
#define IDVARSTRINGSIZE (sizeof(VARSTRING)+128)
|
||
|
#define ASYNC_TIMEOUT 120000L
|
||
|
#define ASYNC_SHORT_TIMEOUT 20000L
|
||
|
#define BAD_HANDLE(h) (!(h) || (h)==INVALID_HANDLE_VALUE)
|
||
|
|
||
|
|
||
|
// ASCII stuff
|
||
|
|
||
|
typedef struct _FAX_RECEIVE_A {
|
||
|
DWORD SizeOfStruct;
|
||
|
LPSTR FileName;
|
||
|
LPSTR ReceiverName;
|
||
|
LPSTR ReceiverNumber;
|
||
|
DWORD Reserved[4];
|
||
|
} FAX_RECEIVE_A, *PFAX_RECEIVE_A;
|
||
|
|
||
|
|
||
|
typedef struct _FAX_SEND_A {
|
||
|
DWORD SizeOfStruct;
|
||
|
LPSTR FileName;
|
||
|
LPSTR CallerName;
|
||
|
LPSTR CallerNumber;
|
||
|
LPSTR ReceiverName;
|
||
|
LPSTR ReceiverNumber;
|
||
|
DWORD Reserved[4];
|
||
|
} FAX_SEND_A, *PFAX_SEND_A;
|
||
|
|
||
|
|
||
|
typedef struct _COMM_CACHE {
|
||
|
DWORD dwMaxSize;
|
||
|
DWORD dwCurrentSize;
|
||
|
DWORD dwOffset;
|
||
|
DWORD fReuse;
|
||
|
char lpBuffer[4096];
|
||
|
} COMM_CACHE;
|
||
|
|
||
|
|
||
|
typedef struct {
|
||
|
// BYTE fStuffZERO :1; // not used. Just set cbLineMin instead
|
||
|
UWORD cbLineMin;
|
||
|
|
||
|
// Output filtering (DLE stuffing and ZERO stuffing only)
|
||
|
// All inited in FComOutFilterInit()
|
||
|
LPB lpbFilterBuf;
|
||
|
UWORD cbLineCount; // Has to be 16 bits
|
||
|
BYTE bLastOutByte; // Stuff: last byte of previous input buffer
|
||
|
|
||
|
// Input filtering (DLE stripping) only.
|
||
|
// All inited in FComInFilterInit()
|
||
|
BYTE fGotDLEETX :1;
|
||
|
BYTE bPrevIn; // Strip::last byte of prev buffer was DLE
|
||
|
UWORD cbPost;
|
||
|
#define POSTBUFSIZE 20
|
||
|
BYTE rgbPost[POSTBUFSIZE+1];
|
||
|
|
||
|
} FCOM_FILTER;
|
||
|
|
||
|
|
||
|
typedef struct {
|
||
|
BYTE carry;
|
||
|
BYTE dec_width;
|
||
|
BYTE len;
|
||
|
enum { NORMAL=0, FLAG=1, ABORT=2 } flagabort;
|
||
|
} DECODESTATE, far* LPDECODESTATE;
|
||
|
|
||
|
|
||
|
typedef struct {
|
||
|
BYTE carry;
|
||
|
BYTE enc_width;
|
||
|
BYTE len;
|
||
|
} ENCODESTATE, far* LPENCODESTATE;
|
||
|
|
||
|
|
||
|
|
||
|
typedef struct {
|
||
|
// BOOL fFrameSend;
|
||
|
// BOOL fFrameRecv;
|
||
|
|
||
|
// Used by both encode and decode, so can't be
|
||
|
// both on at the same time
|
||
|
LPB lpbBuf;
|
||
|
USHORT cbBufSize;
|
||
|
|
||
|
// Output framing
|
||
|
// All inited in FramingSendSetup()
|
||
|
ENCODESTATE EncodeState;
|
||
|
|
||
|
// Input frame decoding
|
||
|
// All inited in FramingRecvSetup()
|
||
|
DECODESTATE DecodeState;
|
||
|
USHORT cbBufCount; // data count in buf
|
||
|
LPB lpbBufSrc; // start of data in buf
|
||
|
SWORD swEOF;
|
||
|
} COMMODEM_FRAMING;
|
||
|
|
||
|
|
||
|
#define MAXDUMPFRAMES 100
|
||
|
#define MAXDUMPSPACE 400
|
||
|
|
||
|
typedef struct
|
||
|
{
|
||
|
USHORT uNumFrames;
|
||
|
USHORT uFreeSpaceOff;
|
||
|
USHORT uFrameOff[MAXDUMPFRAMES]; // arrays of offsets to frames
|
||
|
BYTE b[MAXDUMPSPACE];
|
||
|
} PROTDUMP, FAR* LPPROTDUMP;
|
||
|
|
||
|
|
||
|
typedef struct {
|
||
|
DWORD fAvail;
|
||
|
DWORD ThreadId;
|
||
|
HANDLE FaxHandle;
|
||
|
LPVOID pTG;
|
||
|
HLINE LineHandle;
|
||
|
HCALL CallHandle;
|
||
|
DWORD DeviceId;
|
||
|
HANDLE CompletionPortHandle;
|
||
|
ULONG_PTR CompletionKey;
|
||
|
DWORD TiffThreadId;
|
||
|
DWORD TimeStart;
|
||
|
DWORD TimeUpdated;
|
||
|
DWORD CkSum;
|
||
|
} T30_RECOVERY_GLOB;
|
||
|
|
||
|
|
||
|
typedef struct {
|
||
|
DWORD dwContents; // Set to 1 (indicates containing key)
|
||
|
DWORD dwKeyOffset; // Offset to key from start of this struct.
|
||
|
// (not from start of LINEDEVCAPS ).
|
||
|
// 8 in our case.
|
||
|
BYTE rgby[1]; // place containing null-terminated
|
||
|
// registry key.
|
||
|
} MDM_DEVSPEC, FAR * LPMDM_DEVSPEC;
|
||
|
|
||
|
|