⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 zmodem.h

📁 这是G.723和G.729的音频编解码的源代码
💻 H
字号:
// zmodem.h: interface for the Czmodem class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_ZMODEM_H__A70C24C1_807B_11D3_AE6D_000080014FC8__INCLUDED_)
#define AFX_ZMODEM_H__A70C24C1_807B_11D3_AE6D_000080014FC8__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include "commondef.h"
/*
 * ascii constants
 */
extern const BYTE pZRQINITFrame[21];
#define ZRQINITFrameLength 21
#define WINDOWSSIZE 10

#define	SOH			0x01
#define	STX			0x02
#define	EOT			0x04
#define	ENQ			0x05
#define	ACK			0x06
#define	LF			0x0a
#define	CR			0x0d
#define	XON			0x11
#define	XOFF		0x13
#define	NAK			0x15
#define	CAN			0x18

/*
 * zmodem constants
 */

#define ZMAXHLEN    0x10		/* maximum header information length */
#define ZMAXSPLEN	0x400		/* maximum subpacket length */


#define	ZPAD		0x2a		/* pad character; begins frames */
#define	ZDLE		0x18		/* ctrl-x zmodem escape */
#define	ZDLEE		0x58		/* escaped ZDLE */	

#define	ZBIN		0x41		/* binary frame indicator (CRC16) */
#define	ZHEX		0x42		/* hex frame indicator */
#define	ZBIN32		0x43		/* binary frame indicator (CRC32) */
#define	ZBINR32		0x44		/* run length encoded binary frame (CRC32) */

#define	ZVBIN		0x61		/* binary frame indicator (CRC16) */
#define	ZVHEX		0x62		/* hex frame indicator */
#define	ZVBIN32		0x63		/* binary frame indicator (CRC32) */
#define	ZVBINR32	0x64		/* run length encoded binary frame (CRC32) */

#define	ZRESC		0x7e		/* run length encoding flag / escape character */

/*
 * zmodem frame types
 */

#define	ZRQINIT		0x00		/* request receive init (s->r) */
#define	ZRINIT		0x01		/* receive init (r->s) */
#define	ZSINIT		0x02		/* send init sequence (optional) (s->r) */
#define	ZACK		0x03		/* ack to ZRQINIT ZRINIT or ZSINIT (s<->r) */
#define	ZFILE		0x04		/* file name (s->r) */
#define	ZSKIP		0x05		/* skip this file (r->s) */
#define	ZNAK		0x06		/* last packet was corrupted (?) */
#define	ZABORT		0x07		/* abort batch transfers (?) */
#define	ZFIN		0x08		/* finish session (s<->r) */
#define	ZRPOS		0x09		/* resume data transmission here (r->s) */
#define	ZDATA		0x0a		/* data packet(s) follow (s->r) */
#define	ZEOF		0x0b		/* end of file reached (s->r) */
#define	ZFERR		0x0c		/* fatal read or write error detected (?) */
#define	ZCRC		0x0d		/* request for file CRC and response (?) */
#define	ZCHALLENGE	0x0e		/* security challenge (r->s) */
#define	ZCOMPL		0x0f		/* request is complete (?) */	
#define	ZCAN		0x10		/* pseudo frame; 
								   other end cancelled session with 5* CAN */
#define	ZFREECNT	0x11		/* request free bytes on file system (s->r) */
#define	ZCOMMAND	0x12		/* issue command (s->r) */
#define	ZSTDERR		0x13		/* output data to stderr (??) */

/*
 * ZDLE sequences
 */

#define	ZCRCE		0x68		/* CRC next, frame ends, header packet follows */
#define	ZCRCG		0x69		/* CRC next, frame continues nonstop */
#define	ZCRCQ		0x6a		/* CRC next, frame continuous, ZACK expected */
#define	ZCRCW		0x6b		/* CRC next, frame ends,       ZACK expected */
#define	ZRUB0		0x6c		/* translate to rubout 0x7f */
#define	ZRUB1		0x6d		/* translate to rubout 0xff */

/*
 * frame specific data.
 * entries are prefixed with their location in the header array.
 */

/*
 * Byte positions within header array
 */

#define FTYPE 0					/* frame type */

#define ZF0	4					/* First flags byte */
#define ZF1	3
#define ZF2	2
#define ZF3	1

#define ZP0	1					/* Low order 8 bits of position */
#define ZP1	2
#define ZP2	3
#define ZP3	4					/* High order 8 bits of file position */

/*
 * ZRINIT frame
 * zmodem receiver capability flags
 */

#define	ZF0_CANFDX		0x01	/* Receiver can send and receive true full duplex */
#define	ZF0_CANOVIO		0x02	/* receiver can receive data during disk I/O */
#define	ZF0_CANBRK		0x04	/* receiver can send a break signal */
#define	ZF0_CANCRY		0x08	/* Receiver can decrypt DONT USE */
#define	ZF0_CANLZW		0x10	/* Receiver can uncompress DONT USE */
#define	ZF0_CANFC32		0x20	/* Receiver can use 32 bit Frame Check */
#define	ZF0_ESCCTL		0x40	/* Receiver expects ctl chars to be escaped */
#define	ZF0_ESC8		0x80	/* Receiver expects 8th bit to be escaped */

#define ZF1_CANVHDR		0x01	/* Variable headers OK */

/*
 * ZSINIT frame
 * zmodem sender capability
 */

#define ZF0_TESCCTL 	0x40	/* Transmitter expects ctl chars to be escaped */
#define ZF0_TESC8   	0x80	/* Transmitter expects 8th bit to be escaped */

#define ZATTNLEN		0x20	/* Max length of attention string */
#define ALTCOFF			ZF1		/* Offset to alternate canit string, 0 if not used */

/*
 * ZFILE frame
 */

/*
 * Conversion options one of these in ZF0
 */

#define ZF0_ZCBIN		1		/* Binary transfer - inhibit conversion */
#define ZF0_ZCNL		2		/* Convert NL to local end of line convention */
#define ZF0_ZCRESUM		3		/* Resume interrupted file transfer */

/*
 * Management include options, one of these ored in ZF1
 */

#define ZF1_ZMSKNOLOC	0x80	/* Skip file if not present at rx */
#define ZF1_ZMMASK		0x1f	/* Mask for the choices below */
#define ZF1_ZMNEWL		1		/* Transfer if source newer or longer */
#define ZF1_ZMCRC		2		/* Transfer if different file CRC or length */
#define ZF1_ZMAPND		3		/* Append contents to existing file (if any) */
#define ZF1_ZMCLOB		4		/* Replace existing file */
#define ZF1_ZMNEW		5		/* Transfer if source newer */
#define ZF1_ZMDIFF		6		/* Transfer if dates or lengths different */
#define ZF1_ZMPROT		7		/* Protect destination file */
#define ZF1_ZMCHNG		8		/* Change filename if destination exists */

/*
 * Transport options, one of these in ZF2
 */

#define ZF2_ZTNOR		0		/* no compression */
#define ZF2_ZTLZW		1		/* Lempel-Ziv compression */
#define ZF2_ZTRLE		3		/* Run Length encoding */

/*
 * Extended options for ZF3, bit encoded
 */

#define ZF3_ZCANVHDR	0x01	/* Variable headers OK */
								/* Receiver window size override */
#define ZF3_ZRWOVR 		0x04	/* byte position for receive window override/256 */
#define ZF3_ZXSPARS		0x40	/* encoding for sparse file operations */

/*
 * ZCOMMAND frame
 */

#define ZF0_ZCACK1		0x01	/* Acknowledge, then do command */

/*
 *   Z M O D E M . H     Manifest constants for ZMODEM
 *    application to application file transfer protocol
 *    Copyright 1993 Omen Technology Inc All Rights Reserved
 */
/* Frame types (see array "frametypes" in zm.c) */

/* zdlread return values (internal) */
/* -1 is general error, -2 is timeout */
#define GOTOR 0400
#define GOTCRCE (ZCRCE|GOTOR)	/* ZDLE-ZCRCE received */
#define GOTCRCG (ZCRCG|GOTOR)	/* ZDLE-ZCRCG received */
#define GOTCRCQ (ZCRCQ|GOTOR)	/* ZDLE-ZCRCQ received */
#define GOTCRCW (ZCRCW|GOTOR)	/* ZDLE-ZCRCW received */
#define GOTCAN	(GOTOR|030)	/* CAN*5 seen */


/* Parameters for ZRINIT header */
#define ZRPXWN	8	/* 9th byte in header contains window size/256 */
#define ZRPXQQ	9	/* 10th to 14th bytes contain quote mask */
/* Bit Masks for ZRINIT flags byte ZF0 */
#define CANFDX	01	/* Rx can send and receive true FDX */
#define CANOVIO	02	/* Rx can receive data during disk I/O */
#define CANBRK	04	/* Rx can send a break signal */
#define CANRLE	010	/* Receiver can decode RLE */
#define CANLZW	020	/* Receiver can uncompress */
#define CANFC32	040	/* Receiver can use 32 bit Frame Check */
#define ESCCTL 0100	/* Receiver expects ctl chars to be escaped */
#define ESC8   0200	/* Receiver expects 8th bit to be escaped */

/* Bit Masks for ZRINIT flags byte ZF1 */
#define CANVHDR	01	/* Variable headers OK */
#define ZRRQWN	8	/* Receiver specified window size in ZRPXWN */
#define ZRRQQQ	16	/* Additional control chars to quote in ZRPXQQ	*/
#define ZRQNVH	(ZRRQWN|ZRRQQQ)	/* Variable len hdr reqd to access info */

/* Parameters for ZSINIT frame */
#define ALTCOFF ZF1	/* Offset to alternate canit string, 0 if not used */
/* Bit Masks for ZSINIT flags byte ZF0 */
#define TESCCTL 0100	/* Transmitter expects ctl chars to be escaped */
#define TESC8   0200	/* Transmitter expects 8th bit to be escaped */

/* Parameters for ZFILE frame */
/* Conversion options one of these in ZF0 */
#define ZCBIN	1	/* Binary transfer - inhibit conversion */
#define ZCNL	2	/* Convert NL to local end of line convention */
#define ZCRESUM	3	/* Resume interrupted file transfer */
/* Management include options, one of these ored in ZF1 */
#define ZMSKNOLOC	0200	/* Skip file if not present at rx */
/* Management options, one of these ored in ZF1 */
#define ZMMASK	037	/* Mask for the choices below */
#define ZMNEWL	1	/* Transfer if source newer or longer */
#define ZMCRC	2	/* Transfer if different file CRC or length */
#define ZMAPND	3	/* Append contents to existing file (if any) */
#define ZMCLOB	4	/* Replace existing file */
#define ZMNEW	5	/* Transfer if source newer */
	/* Number 5 is alive ... */
#define ZMDIFF	6	/* Transfer if dates or lengths different */
#define ZMPROT	7	/* Protect destination file */
#define ZMCHNG	8	/* Change filename if destination exists */
/* Transport options, one of these in ZF2 */
#define ZTLZW	1	/* Lempel-Ziv compression */
#define ZTRLE	3	/* Run Length encoding */
/* Extended options for ZF3, bit encoded */
#define ZXSPARS	64	/* Encoding for sparse file operations */
#define ZCANVHDR	01	/* Variable headers OK */
/* Receiver window size override */
#define ZRWOVR 4	/* byte position for receive window override/256 */

/* Parameters for ZCOMMAND frame ZF0 (otherwise 0) */
#define ZCACK1	1	/* Acknowledge, then do command */

//zmdm.h
#define ENDOFFRAME 2
#define FRAMEOK    1
#define TIMEOUT   -1											/* rx routine did not receive a character within timeout */
#define INVHDR    -2											/* invalid header received; but within timeout */
#define INVDATA   -3											/* invalid data subpacket received */
#define ZDLEESC 0x8000											/* one of ZCRCE; ZCRCG; ZCRCQ or ZCRCW was received; ZDLE escaped */

#define HDRLEN     5											/* size of a zmodme header */

#define MAX_SUBPACKETSIZE MAXFILETRANSMITPACKETLENGTH

class Czmodem  
{
public:
	virtual int ReadRawData(BYTE* pContent, int nLength);
	Czmodem();
	virtual ~Czmodem();

	void ReceiveFile(char* Option);
	void SendFile(char* FileName, char* Option);
	virtual void tx_raw(int c);
private:
	/* Globals used by ZMODEM functions */
	int Rxframeind;	/* ZBIN ZBIN32, or ZHEX type of frame */
    int Rxtype;		/* Type of header received */
    int Rxcount;		/* Count of data bytes received */
    int Rxtimeout;	/* Tenths of seconds to wait for something */
    long Rxpos;	/* Received file position */
    long Txpos;	/* Transmitted file position */
    int Txfcs32;		/* TURE 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 */
    int Znulls;		/* Number of nulls to send at beginning of ZDATA hdr */
    char Attn[ZATTNLEN+1];	/* Attention string rx sends to tx on err */
    char *Altcan;	/* Alternate canit string */

    int in_fp;												/* input file descriptor */
    int out_fp;												/* output file descriptor */
    unsigned char rxd_header[ZMAXHLEN];						/* last received header */
    int rxd_header_len;										/* last received header size */

/*
 * receiver capability flags
 * extracted from the ZRINIT frame as received
 */

    int can_full_duplex;
    int can_overlap_io;
    int can_break;
    int can_fcs_32;
    int escape_all_control_characters;						/* guess */
    int escape_8th_bit;

    int use_variable_headers;								/* use variable length headers */

/*
 * file management options.
 * only one should be on
 */

    int management_newer;
    int management_clobber;
    int management_protect;
//end of zmdm.h
	unsigned short int  crc16tab[0x100];
	int receive_32_bit_data;
	int raw_trace;
	int want_fcs_32;
	long ack_file_pos;				/* file position used in acknowledgement of correctly */
									/* received data subpackets */
	unsigned char inputbuffer[MAXFILETRANSMITPACKETLENGTH];
	int n_in_inputbuffer;
	int inputbuffer_index;



	FILE * fp;												/* fp of file being received or NULL */
	long mdate;														/* file date of file being received */
	char filename[0x80];											/* filename of file being received */
	char * name;													/* pointer to the part of the filename used in the actual open */

	char * line;												/* device to use for io */
	int opt_v;												/* show progress output */
	int opt_d;												/* show debug output */
	int opt_q;
	int junk_pathnames;										/* junk incoming path names or keep them */
	unsigned char rx_data_subpacket[MAXFILERECEIVEPACKETLENGTH];							/* zzap = 8192 */

	long current_file_size;
	time_t transfer_start;
	int subpacket_size;							/* data subpacket size. may be modified during a session */
	int n_files_remaining;
	unsigned char tx_data_subpacket[MAXFILETRANSMITPACKETLENGTH];

private:
	virtual void	fd_init(void);													/* make the io channel raw */
	virtual void	fd_exit(void);													/* reset io channel to state before zmtx was called */
	void	tx_hheader(unsigned char * buf,int n);
	void	tx_bheader(unsigned char * buf,int n);
	virtual void rx_purge(void);
	void tx_esc(int c);
	void tx(unsigned char c);
	void tx_flush(void);
	void tx_nibble(int n);
	void tx_hex(int h);
	void tx_hex_header(unsigned char *p);
	void tx_bin32_header(unsigned char *p);
	void tx_bin16_header(unsigned char *p);
	void tx_header(unsigned char *p);
	void tx_32_data(int sub_frame_type,unsigned char * p,int l);
	void tx_16_data(int sub_frame_type,unsigned char * p,int l);
	void tx_data(int sub_frame_type,unsigned char * p, int l);
	void tx_pos_header(int type,long pos);
	void tx_znak();
	void tx_zskip();
	void alarm(int a);
	int rx_poll();
	virtual int rx_raw(int to);
	int rx(int to);
	int rx_32_data(unsigned char * p,int * l);
	int rx_16_data(register unsigned char * p,int * l);
	int rx_data(unsigned char * p, int * l);
	int rx_nibble(int to);
	int rx_hex(int to);
	void rx_bin16_header(int to);
	void rx_hex_header(int to);
	void rx_bin32_header(int to);
	int rx_header_raw(int to,int errors);
	int rx_header(int timeout);
	int rx_header_and_check(int timeout);
	void show_progress(char * name,FILE * fp);
	int receive_file_data(char * name,FILE * fp);
	void tx_zrinit();
	void receive_file();
	virtual void cleanup(void);
	virtual void usage(void);
	int send_from(char * name,FILE * fp);
	int	send_file(char * name);
};
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -