Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

229 lines
7.4 KiB

/*
* xmodem.hh -- Include file for ZMODEM private stuff
*
* Copyright 1989 by Hilgraeve Inc. -- Monroe, MI
* All rights reserved
*
* $Revision: 6 $
* $Date: 7/12/02 8:20a $
*/
// These constants are used to turn on various types of debug display
// #define DEBUG_DUMPPACKET // Log bad packet contents to a file
#if defined(ERROR)
#undef ERROR
#endif
#if defined(CAN)
#undef CAN
#endif
#define OK 0
#define FALSE 0
#define TRUE 1
#if defined(ERROR)
#undef ERROR
#endif
#define ERROR (-1)
#define FILE_DONE 1
#define TRANSFER_DONE 2
/*
* Max value for HOWMANY is 255.
* A larger value reduces system overhead but may evoke kernel bugs.
* 133 corresponds to an XMODEM/CRC sector
*/
#ifndef HOWMANY
#define HOWMANY 133
#endif
/* Ward Christensen / CP/M parameters - Don't change these! */
#define ENQ 005
#define CAN ('X'&037)
#define XOFF ('s'&037)
#define XON ('q'&037)
#define SOH 1
#define STX 2
#define EOT 4
#define ACK 6
#define NAK 025
#define CPMEOF 032
#define WANTCRC 0103 /* send C not NAK to get crc not checksum */
#define TIMEOUT (-2)
#define RCDO (-3) /* Not too sure about this one */
#define ZCARRIER_LOST (-4)
#define ZFULLDISK (-5)
#define ERROFFSET 5
#define ERRORMAX 5
#define RETRYMAX 5
#define WCEOT (-10)
//#define PATHLEN 257 /* ready for 4.2 bsd ? */
#define PATHLEN MAX_PATH
#define UNIXFILE 0xF000 /* The S_IFMT file mask bit for stat */
/* Parameters for ZSINIT frame */
#define ZATTNLEN 32 /* Max length of attention string */
/* Control structure, allocated during transfers to hold control variables */
struct z_mdm_cntrl
{
HSESSION hSession; /* in case we actually need this */
HCOM hCom; /* derived from above */
int nMethod; /* Zmodem, or Zmodem wiht crash recovery? */
int fSavePartial; /* Save partially received files? */
unsigned long ulOverride; /* Override "file exists" overwrite options? */
long real_bytes; /* real number of bytes, not virtual number */
long file_bytes; /* number of bytes processed in current file */
long total_bytes; /* number of bytes total in previous files */
long actual_bytes; /* previous value includes skipped files */
int nSkip; /* true if skipping a file */
void *flagkey; /* used for detecting the user abort key */
jmp_buf flagkey_buf; /* used for long jump after user abort */
jmp_buf intrjmp;
ST_IOBUF *fh; /* handle for the current file */
long basesize; /* used when appending to a file */
long xfertimer; /* used for timing the transfers */
long xfertime; /* ditto */
int nfiles; /* total number of files to transfer */
int filen; /* number of the current file */
long filesize; /* size of the current file */
long nbytes; /* total number of bytes to transfer */
long Rxtimeout; /* Tenths of a second to wait for something */
const long *z_cr3tab; /* pointer to 32 bit checksum table */
const unsigned short *z_crctab; /* pointer to 16 bit checksum table */
int Rxframeind; /* ZBIN ZBIN32, or ZHEX type of frame received */
int Rxtype; /* Type of header received */
int Rxcount; /* Count of data bytes received */
char Rxhdr[4]; /* Received header */
char Txhdr[4]; /* Transmitted header */
long Rxpos; /* Received file position */
long Txpos; /* Transmitted file position */
int Txfcs32; /* TRUE means send binary frames with 32 bit FCS */
int Crc32t; /* Display flag indicating 32 bit CRC being sent */
int Crc32; /* Display flag indicating 32 bit CRC being received */
char Attn[ZATTNLEN+1]; /* Attention string rx sends to tx on err */
int lastsent; /* Last char we sent */
int Not8bit; /* Seven bits seen on header */
long displayed_time;
int Zctlesc;
int Zrwindow;
BOOL Eofseen;
int tryzhdrtype;
BOOL Thisbinary;
int Filemode;
long Modtime;
int do_init;
TCHAR zconv; /* ZMODEM file conversion request */
TCHAR zmanag; /* ZMODEM file management request */
TCHAR ztrans; /* ZMODEM file transport request */
TCHAR *secbuf;
TCHAR *fname;
TCHAR *our_fname;
stFB stP; /* used in foo com functions */
TCHAR *txbuf;
int Filesleft;
long Totalleft;
int blklen;
int blkopt; /* do we override zmodem block length */
int Beenhereb4;
BOOL Wantfcs32; /* Do we want 32 bit crc */
int Rxflags;
unsigned Rxbuflen; /* receiver maximum buffer length */
unsigned Txwindow;
unsigned Txwcnt; /* counter used to space ack requests */
unsigned Txwspac; /* space between ZCRCQ requests */
char Myattn[1];
int errors;
int s_error;
int pstatus;
int last_event;
int Lskipnocor;
long Lastsync; /* last offset to which we got a ZRPOS */
long Lrxpos; /* receivers last reported offset */
};
typedef struct z_mdm_cntrl ZC;
#define updcrc(x,cp,crc) (x->z_crctab[((crc >> 8) & 255)] ^ (crc << 8) ^ cp)
#define UPDC32(x,b,c) (x->z_cr3tab[((int)c ^ b) & 0xff] ^ ((c >> 8) & 0x00FFFFFF))
/* from zmdm.c */
void zsbhdr (ZC *zc, int type, BYTE *hdr);
void zsbh32 (ZC *zc, BYTE *hdr, int type);
void zshhdr (ZC *zc, int type, BYTE *hdr);
void zsdata (ZC *zc, BYTE *buf, int length, int frameend);
void zsda32 (ZC *zc, BYTE *buf, int length, int frameend);
int zrdata (ZC *zc, BYTE *buf, int length);
int zrdat32 (ZC *zc, BYTE *buf, int length);
int zgethdr (ZC *zc, BYTE *hdr, int eflag);
int zrbhdr (ZC *zc, BYTE *hdr, int eflag);
int zrbhdr32 (ZC *zc, BYTE *hdr, int eflag);
int zrhhdr (ZC *zc, BYTE *hdr, int eflag);
void zputhex (ZC *zc, int c);
void zsendline (ZC *zc, int c);
int zgethex (ZC *zc);
int zgeth1 (ZC *zc);
int zdlread (ZC *zc);
int noxrd7 (ZC *zc);
void stohdr (ZC *zc, long pos);
long rclhdr (BYTE *hdr);
int zmdm_rl (ZC *zc, int timeout);
/* Functions used to fiddle with the displays */
void zmdms_progress (ZC *zc, int status);
void zmdms_newfile (ZC *zc, int filen, TCHAR *fname, long flength);
void zmdms_update (ZC *zc, int state);
void zmdmr_progress (ZC *zc, int status);
void zmdmr_update (ZC *zc, int status);
void zmdmr_filecnt (ZC *zc, int cnt);
void zmdmr_totalsize (ZC *zc, long bytes);
void zmdmr_newfile (ZC *zc, int filen, BYTE *theirname, TCHAR *ourname);
void zmdmr_filesize (ZC *zc, long fsize);
unsigned int zmdm_error (ZC *zc, int error);
int zmdm_retval (ZC *zc, int flag, int error);
/* from zmdm_rcv.c */
int tryz (ZC *zc);
int rzfiles (ZC *zc);
int rzfile (ZC *zc);
void zmputs (ZC *zc, char *s);
int closeit (ZC *zc);
void ackbibi (ZC *zc);
/* void bttyout (char c); */
/* from zmdm_snd.c */
int wcs (ZC *zc, TCHAR FAR *oname);
int wctxpn (ZC *zc, TCHAR FAR *name);
int zfilbuf (ZC *zc);
void canit (ZC *zc);
int getzrxinit (ZC *zc);
int sendzsinit (ZC *zc);
int zsendfile (ZC *zc, char *buf, int blen);
int zsendfdata (ZC *zc);
int getinsync (ZC *zc, int flag);
void saybibi (ZC *zc);
/* the following stuff is here as an attempt to match names into HA5 */
#define readline(h,x) zmdm_rl(h,x)
#define xsendline(h,p,c) fooComSendChar(h->hCom,p,c)
#define sendline(h,p,c) fooComSendChar(h->hCom,p,c)
#define flushmo(h,p) fooComSendPush(h->hCom,p)