/* File: C:\WACKER\xfer\krm.hh (Created: 28-Jan-1994) * created from HAWIN source file * krm.hh -- Internal definitions for KERMIT file transfer * protocol routines. * * Copyright 1989,1994 by Hilgraeve Inc. -- Monroe, MI * All rights reserved * * $Revision: 2 $ * $Date: 4/24/02 3:36p $ */ #define Dbg(a,b) #define DbgW(a,b,c) #define DbgWW(a,b,c,d) #define DbgWWW(a,b,c,d,e) #define DbgL(a,b,c) #if defined(ERROR) #undef ERROR #endif #define ERROR (-1) #if !defined(MAXLINE) #define MAXLINE 130 #endif #if !defined(DEL) #define DEL 0177 #endif #define MAXPCKT 100 /* maximum length for packet data */ #define K_QCTL '#' #define K_QBIN '&' #define K_REPT '~' #define K_CHK1 1 #define K_CHK2 2 #define K_CHK3 3 #define CAPMASK_ATTR 0x08 #define tochar(ch) ((ch) + ' ') #define unchar(ch) ((ch) - ' ') #define ctl(ch) ((ch) ^ 0x40) /* valid packet types include 'Y', 'N', 'S, 'I', 'F', 'A', 'D', 'Z', * 'B', 'E', 'R', 'C', 'K', 'T', 'G' * plus special types returned by rec_packet(): */ #define BAD_PACKET '\030' /* Kermit receive states */ #define KREC_INIT 0 #define KREC_FILE 1 #define KREC_DATA 2 #define KREC_COMPLETE 3 #define KREC_ABORT 4 /* Kermit packet error codes */ #define KE_NOERROR 0 #define KE_TIMEOUT 1 #define KE_NAK 2 #define KE_BAD_PACKET 3 #define KE_RMTERR 4 #define KE_WRONG 5 #define KE_REPEAT 6 #define KE_SEQUENCE 7 #define KE_FATAL 8 /* Kermit abort codes */ #define KA_OK 0 #define KA_LABORT1 1 #define KA_RABORT1 2 #define KA_LABORTALL 3 #define KA_RABORTALL 4 #define KA_IMMEDIATE 5 #define KA_RMTERR 6 #define KA_LOST_CARRIER 7 #define KA_ERRLIMIT 8 #define KA_OUT_OF_SEQ 9 #define KA_BAD_FORMAT 10 #define KA_TOO_MANY 11 #define KA_CANT_OPEN 12 #define KA_DISK_FULL 13 #define KA_DISK_ERROR 14 #define KA_OLDER_FILE 15 #define KA_NO_FILETIME 16 #define KA_WONT_CANCEL 17 #define KA_VIRUS_DETECT 18 #define KA_USER_REFUSED 19 /* progress display codes */ #define FILE_DONE 1 #define TRANSFER_DONE 2 #define KPCKT struct _kpckt KPCKT { unsigned char pmark; unsigned char plen; unsigned char pseq; unsigned char ptype; unsigned char pdata[MAXPCKT]; int datalen; }; struct s_krm_rcv_control { int files_received; int files_aborted; int oldtries; int dsptries; int total_tries; long bytes_expected; int size_known; int lasterr; unsigned char uabort_code; int data_packet_rcvd; int store_later; // struct s_filetime compare_time; unsigned long ul_compare_time; // struct s_filetime filetime; unsigned long ul_filetime; int next_rtype; int next_plen; int next_rseq; unsigned char next_packet[MAXPCKT]; KPCKT resp_pckt; }; typedef struct s_krm_rcv_control ST_R_KRM; typedef struct s_krm_control ST_KRM; struct s_krm_control { HSESSION hSession; HCOM hCom; ST_IOBUF *fhdl; long basesize; int ksequence; int packetnum; int tries; int abort_code; void * flagkey_hdl; long xfertime; char xtra_err[MAXLINE]; char their_fname[MAXPCKT]; TCHAR our_fname[FNAME_LEN]; long total_dsp; long total_thru; long nbytes; int file_cnt; int files_done; int its_maxl; int its_timeout; int its_npad; unsigned char its_padc; unsigned char its_eol; unsigned char its_chkt; unsigned char its_qctl; unsigned char its_qbin; unsigned char its_rept; int its_capat; int fname_width; /* These used to be globals */ int k_useattr; /* send 'normalized' file names ? */ int k_maxl; /* maximum packet length we'll take */ int k_timeout; /* time they should wait for us */ unsigned char k_chkt; /* check type we want to use */ int k_retries; /* no. of retries */ unsigned char k_markchar; /* first char of each packet */ unsigned char k_eol; /* end of line character for packets */ int k_npad; /* no. of pad chars. to send us */ unsigned char k_padc; /* pad char. we want */ unsigned total_retries; long displayed_time; ST_R_KRM kr; /* receive control structure */ /* variables for sending and receiving */ KPCKT *this_kpckt; KPCKT *next_kpckt; long kbytes_sent; int (*p_kputc)(ST_KRM *p, int c); long kbytes_received; int (*p_kgetc)(ST_KRM *p); void (*KrmProgress)(ST_KRM *p, int n); }; // extern int krm_dbg; /* used for real-time debugging using dbg.c */ // extern struct s_krm_control FAR *kc; // extern void (NEARF *KrmProgress)(HSESSION, bits); // variables for receiving // extern struct s_krm_rcv_control FAR *krc; // extern metachar (NEAR *p_kputc)(metachar); // extern long kbytes_received; // variables for sending // extern metachar (NEAR *p_kgetc)(void); // extern long kbytes_sent; extern unsigned ke_msg[]; /* packet error messages */ extern int kresult_code[]; /* result codes */ /* function prototypes: */ extern void krm_box(int p_toprow, int p_leftcol, int p_botmrow, int p_rightcol); extern void krm_box_remove(void); extern void krmGetParameters(ST_KRM *kc); extern void ksend_packet(ST_KRM *hK, unsigned char type, unsigned dlength, int seq, KPCKT FAR *pckt); extern int krec_packet(ST_KRM *hK, int *len, int *seq, unsigned char *data); extern int buildparams(ST_KRM *hK, int initiating, unsigned char *bufr); extern void getparams(ST_KRM *hK, int initiating, unsigned char *bufr); extern void ks_progress(ST_KRM *hK, int status); extern int krec_init(ST_KRM *hK); extern int krec_file(ST_KRM *hK); extern int krec_data(ST_KRM *hK); extern void kr_progress(ST_KRM *hK, int status); extern int kunload_packet(ST_KRM *hK, int len, unsigned char *bufr); extern int kr_putc(ST_KRM *kc, int c); extern void krm_rcheck(ST_KRM *hK, int before); extern void krm_check_input(int suspend); extern void kunload_attributes(ST_KRM *hK, unsigned char *data, KPCKT FAR *rsp_pckt); extern void krm_settime(unsigned char *data, unsigned long *pl); extern int kload_packet(ST_KRM *hK, unsigned char *bufr); extern int ks_getc(ST_KRM *kc); /************************** end of krm.hh *****************************/