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.
 
 
 
 
 
 

401 lines
14 KiB

/* File: C:\WACKER\xfer\hpr.hh (Created: 24-Jan-1994)
* created from HAWIN source file:
* hpr.hh -- Header file for HyperProtocol routines.
*
* Copyright 1989,1994 by Hilgraeve Inc. -- Monroe, MI
* All rights reserved
*
* $Revision: 1 $
* $Date: 10/05/98 1:16p $
*/
/* The NOTIMEOUTS constant can be defined to prevent HyperProtocol from
* timing out while waiting for the other end of the connection. This is
* useful while debugging when events may be drawn out by debugging activities
*/
/* #define NOTIMEOUTS */
/* Constants for HyperProtocol */
#define H_MSGCHAR 0x01
#define MAXRETRIES 5
#define MAX_START_TRIES 25
#define RESYNCH_TIME 50
#define RESYNCH_INC 50
// #define RESYNCH_TIME 300
// #define RESYNCH_INC 300
#define FINAL_ACK_WAIT 1800L
#define BURSTSIZE 5
#define TIMEOUT_LIMIT 3
#define H_START_WAIT 100 /* no. of seconds to wait for startup */
#define H_MINBLOCK 128
#define H_MINDEADMAN 10
#define H_CHARTIME 100L
#define tochar(c) ((BYTE)((c) + 0x20))
#define unchar(c) ((BYTE)((c) - 0x20))
#define h_crc_calc(x, cc)\
{\
unsigned q;\
q = (x->h_crc ^ (cc)) & 0x0F;\
x->h_crc = (x->h_crc >> 4) ^ (q * 0x1081);\
q = (x->h_crc ^ ((cc) >> 4)) & 0x0F;\
x->h_crc = (x->h_crc >> 4) ^ (q * 0x1081);\
}
/* * * * * * * * * * * * * * * * * * * * * * *
* This section pertains to the sender only *
* * * * * * * * * * * * * * * * * * * * * * */
/* status display codes passed to hsdsp_status() */
#define HSS_WAITSTART 0
#define HSS_SENDING 1
#define HSS_WAITACK 2
#define HSS_WAITRESUME 3
#define HSS_CANCELLED 4
#define HSS_COMPLETE 5
#define HSS_MAX 6
/* event display codes passed to hsdsp_event() */
#define HSE_GOTSTART 0
#define HSE_GOTRETRY 1
#define HSE_GOTRESUME 2
#define HSE_GOTACK 3
#define HSE_USRABORT 4
#define HSE_RMTABORT 5
#define HSE_USRCANCEL 6
#define HSE_RMTCANCEL 7
#define HSE_FILEERR 8
#define HSE_NORESP 9
#define HSE_FULL 10
#define HSE_DONE 11
#define HSE_ILLEGAL 12
#define HSE_ERRLIMIT 13
#define HSE_MAX 14
/* structure for the file status table. This table holds details about files
* during and after the time they are sent until they are acknowledged by
* the receiver.
*/
struct s_ftbl
{
int filen; /* file number (1st file sent is 1, etc. */
int cntrl; /* control bits FTC_CONFIRMED and FTC_COMPRESSED */
int status; /* transfer status, normal, aborted, error, etc. */
long flength; /* length of this file in bytes */
long dsp_bytes; /* length of all files prior to this file */
long thru_bytes; /* amt. of data actually sent prior to this file */
TCHAR fname[FNAME_LEN]; /* file name */
};
/* file table control bits */
#define FTC_CONFIRMED 0x01
#define FTC_COMPRESSED 0x02
#define FTC_DONT_CMPRS 0x04
/* file table status values */
#define FTS_NORMAL 0
#define FTS_USRABORT 1
#define FTS_RMTABORT 2
#define FTS_FILEERR 3
#define FTS_COMMERR 4
/* control structure used by hyperprotocol sender */
struct s_hsc
{
int ft_current; /* index to current file in file table */
int ft_open; /* index to currently opened file */
int ft_top; /* index of highest used entry in file table */
int ft_limit; /* number of entries available in file table */
jmp_buf jb_bailout; /* jump buffer used to bail out of xfer */
jmp_buf jb_restart; /* jump buffer used during restarts */
int rmt_compress; /* TRUE if remote has indicated it is able to
handle compression */
int nfiles; /* no. of files to be transferred */
long nbytes; /* no. of bytes to be transferred */
long bytes_sent; /* no. of bytes actually passed to xmitter */
int rmtchkt; /* Type of error checking requested by remote
session. H_CRC by default. */
long last_response; /* time last message received */
int lastmsgn; /* last message number */
int rmtcancel; /* TRUE if remote has cancelled xfer */
int started; /* TRUE after 1st restart message is received
from remote */
int lasterr_filenum; /* file number of last restart request */
long lasterr_offset; /* file offset of last restart request */
int sameplace; /* no. of consecutive restarts to same spot*/
int receiver_timedout; /* true if receiver sent time out msg */
struct s_ftbl *hs_ftbl; /* pointer to dynamically allocated file
progress table */
int (*hs_ptrgetc)(void *); /* pointer to function to get
characters to send */
};
/* globals used by sender */
// extern struct s_hsc FAR *hsc; /* contains transfer control variables */
// extern struct s_ftbl FAR *hs_ftbl; /* pointer to dynamically allocated file
// progress table */
// extern metachar (NEAR *hs_ptrgetc)(void);/* pointer to function to get
// characters to send */
/* macros used to send characters using the double buffering scheme */
#define HSXB_SIZE 1024
#define HSXB_CYCLE 75
#define hs_xmit_(p,c) (--p->hsxb.cnt > 0 ? (*p->hsxb.bptr++ = (c)) : hs_xmit_switch(p,c))
#define HS_XMIT(p,c) {if ((c) == H_MSGCHAR) hs_xmit_(p,c); hs_xmit_(p,c);}
struct s_hsxb
{
char *curbufr; /* buffer being filled */
char *altbufr; /* other buffer, possibly being transmitted */
char *bptr; /* place to put next character to be sent */
unsigned bufrsize; /* size of each buffer in bytes */
unsigned total; /* number of bytes still free in the current buffer
not counting those in the current fill cycle */
unsigned cnt; /* number of bytes left to load in this fill cycle */
};
// extern unsigned hse_text[];
// extern unsigned hss_text[];
// extern struct s_hsxb hsxb; /* control structure for double buffered
// transmission scheme */
#define HS_XMIT_CLEAR hs_xbclear
#define HS_XMIT_FLUSH hs_xbswitch
struct s_hprsd
{
int k_received;
unsigned int hld_options;
};
// extern struct s_hprsd FAR *hsd;
/* * * * * * * * * * * * * * * * * * * * * * * *
* This section pertains to the receiver only *
* * * * * * * * * * * * * * * * * * * * * * * */
/* Result codes for overall transfer */
#define H_OK 0
#define H_ERRLIMIT 1
#define H_BADMSGFMT 2
#define H_FILEERR 3
#define H_NORESYNCH 4
#define H_USERABORT 5
#define H_TIMEOUT 6
#define H_COMPLETE 7
#define H_NOSTART 8
#define H_RMTABORT 9
/* Result codes for data collection routines */
#define HR_UNDECIDED 0
#define HR_COMPLETE 1
#define HR_TIMEOUT 2
#define HR_MESSAGE 3
#define HR_KBDINT 4
#define HR_FILEERR 5
#define HR_NOCARRIER 6
#define HR_BADCHECK 7
#define HR_BADMSG 8
#define HR_LOSTDATA 9
#define HR_DCMPERR 10
#define HR_LOST_CARR 11
#define HR_VIRUS_FOUND 12
/* Hyper receive status codes for hrdsp_status() */
#define HRS_REQSTART 0
#define HRS_REQRESYNCH 1
#define HRS_REC 2
#define HRS_CANCELLED 3
#define HRS_COMPLETE 4
#define HRS_MAX 5
/* event codes for hrdsp_event() */
#define HRE_NONE 0
#define HRE_DATAERR 1
#define HRE_LOSTDATA 2
#define HRE_NORESP 3
#define HRE_RETRYERR 4
#define HRE_ILLEGAL 5
#define HRE_ERRFIXED 6
#define HRE_RMTABORT 7
#define HRE_USRCANCEL 8
#define HRE_TIMEOUT 9
#define HRE_DCMPERR 10
#define HRE_LOST_CARR 11
#define HRE_TOO_MANY 12
#define HRE_DISK_FULL 13
#define HRE_CANT_OPEN 14
#define HRE_DISK_ERR 15
#define HRE_OLDER_FILE 16
#define HRE_NO_FILETIME 17
#define HRE_VIRUS_DET 18
#define HRE_USER_SKIP 19
#define HRE_USER_REFUSED 20
#define HRE_MAX 21
/* Structure containing control variables for the receiver */
struct s_hrc
{
long bytes_expected; /* total number of bytes expected for xfer */
long checkpoint; /* number of bytes known to be good */
long basesize; /* original size of file being appended to */
int expected_msg; /* number of next expected message */
/* a timestamp of 0 means unused */
unsigned long ul_lstw; /* timestamp of file being received, if any */
unsigned long ul_cmp; /* time to compare to if /N option used */
/* a timestamp of -1 means rejected by time */
long filesize; /* size of file being received */
int files_expected; /* number of files to be rcvd. during xfer */
BYTE rmtfname[FNAME_LEN]; /* name remote system used for file */
TCHAR ourfname[FNAME_LEN]; /* name we will use for file */
int cancel_reason; /* event code associated with cancellation */
int using_compression; /* TRUE if we're using compression */
BYTE rmsg_bufr[256]; /* buffer to build outgoing messages */
int single_file; /* TRUE if user named single file as dest */
//SSHDLMCH ssmchVscan; /* handle for virus scanning */
int virus_detected; /* set TRUE upon virus detection */
//FARPROC pfVirusCheck; /* pointer to function for virus check */
int (*hr_ptr_putc)(void *, int);
};
// VOID _export PASCAL hr_virus_detect(VOID FAR *h, USHORT usMatchId);
/* globals for receiver */
// extern struct s_hrc FAR *hrc;/* pointer to receiver's control structure */
// extern metachar (NEAR *hr_ptr_putc)(metachar);
extern int hr_result_codes[]; /* maps HyperProtocol event codes to
transfer status codes */
/******************************************************/
/* control structure used by both sender and receiver */
/******************************************************/
struct s_hc
{
HSESSION hSession;
int blocksize; /* current size of data blocks */
int current_filen; /* current file number */
int datacnt; /* keeps track of data sent or received */
long deadmantime; /* time between dead man notices */
unsigned total_tries; /* number of restarts */
long total_thru; /* total number of bytes transferred */
long total_dsp; /* total number of bytes for vu display */
int ucancel; /* set true if user hits cancel key */
int usecrc; /* set true if CRC is being used */
long xfertimer; /* interval timer value */
long xfertime; /* transfer time */
BYTE omsg_bufr[256]; /* outgoing message buffer */
BYTE *omsg; /* pointer into outgoing message buffer */
int omsgn; /* next outgoing message number */
int omsg_printable; /* true of outgoing message characters
should be confined to printable chrs */
int omsg_embed; /* true if outgoing messages should be embedded
in other outgoing data */
long last_omsg; /* time last outgoing message was sent */
unsigned h_checksum; /* used to calculate data checksum */
unsigned h_crc; /* used to calculate data crcs */
long h_filebytes; /* counts bytes transferred */
/* External parameters set by the user */
int h_useattr; /* use received attributes when available */
int h_trycompress; /* try to use compression when possible */
int h_chkt; /* 1 == checksum, 2 == CRC */
int h_resynctime; /* new resync time value */
int h_suspenddsk; /* old feature, no longer used */
long displayed_time; /* used in display timing */
BYTE *storageptr; /* temporary use */
BYTE msgdata[96]; /* more static storate stuff */
BYTE *dptr;
int rmcnt;
struct s_hrc rc; /* data used for receiving */
struct s_hsc sc; /* data used for sending */
struct s_hsxb hsxb; /* control structure for double buffered */
struct s_hprsd sd; /* display stuff */
ST_IOBUF *fhdl;
};
/* Globals used by sender and receiver.
* These items are defined as globals rather than being placed int one
* of the control structures because they are accessed frequently in
* speed-sensitive portions of the code.
*/
// extern struct s_hc FAR *hc; /* pointer to control structure */
// extern unsigned h_checksum; /* used to calculate data checksum */
// extern unsigned h_crc; /* used to calculate data crcs */
// extern long h_filebytes; /* counts bytes transferred */
/*************************/
/* function prototypes : */
/*************************/
/* used by both sender and receiver -- */
extern void omsg_init(struct s_hc *hc, int fPrintable, int fEmbedMsg);
extern void omsg_new(struct s_hc *hc, BYTE type);
extern int omsg_add(struct s_hc *hc, BYTE *newfield);
extern int omsg_setnum(struct s_hc *hc, int n);
extern int omsg_send(struct s_hc *hc,
int burstcnt,
int usecrc,
int backspace);
extern long omsg_last(struct s_hc *hc);
extern int omsg_number(struct s_hc *hc);
// extern void h_crc_calc(uchar);
/* used by receiver -- */
extern int hr_collect_msg(struct s_hc *, int *, BYTE **, long);
extern int hr_storedata(void *, int);
extern void hr_still_alive(struct s_hc *, int, int);
extern void hr_kbdint(struct s_hc *);
extern int hr_decode_msg(struct s_hc *, BYTE *);
extern int hr_reject_file(struct s_hc *, int);
extern int hr_closefile(struct s_hc *, int);
extern int hr_collect_data(struct s_hc *, int *, int, long);
extern int hr_cancel(struct s_hc *, int);
extern int hr_restart(struct s_hc *, int);
extern int hr_resynch(struct s_hc *, int);
extern int hr_putc(void *, int);
extern int hr_putc_vir(void *, int);
extern int hr_toss(void *, int);
extern void hr_suspend_input(VOID *hS, int suspend);
extern void hr_check_input(VOID *hS, int suspend);
/* used by sender -- */
extern int hyper_sendx(struct s_hc *, int);
extern int hs_datasend(struct s_hc *);
extern void hs_dorestart(struct s_hc *, int, long, int, int);
extern int hs_reteof(struct s_hc *);
extern int hs_getc(struct s_hc *);
extern void hs_background(struct s_hc *);
extern void hs_rcvmsg(struct s_hc *);
extern void hs_filebreak(struct s_hc *hc, int nfiles, long nbytes);
extern void hs_waitack(struct s_hc *);
extern void hs_decode_rmsg(struct s_hc *, BYTE *);
extern void hs_fileack(struct s_hc *, int);
extern void hs_logx(struct s_hc *, int);
/******************* end of hpr.hh *************************/