2020-09-30 17:17:25 +02:00

213 lines
7.1 KiB
C

/*++
Copyright (c) 1991 Microsoft Corporation
Module Name:
tftp.h
Abstract:
Definitions for the tftp program.
Author:
Mike Massa (mikemas) Jan 31, 1992
Revision History:
Who When What
-------- -------- ----------------------------------------------
mikemas 01-31-92 created
Notes:
--*/
/******************************************************************
*
* SpiderTCP Socket Utilities
*
* Copyright 1988 Spider Systems Limited
*
* TFTP.H
*
* Tftp and tftpd includes
*
* CN_RQ, CN_LSTN, CN_RCV, CN_WAIT, CN_MKWRT, STRSAVE, UDP_ALLOC
* CN_ACK, LOGPKT, CN_SWAB, CN_CLOSE, CN_SEND, CN_RCVF, CN_ERR
* CN_LOG, CN_INFORM, TST_AND_CLR
*
*
******************************************************************/
/*
* /usr/projects/tcp/SCCS.rel3/rel/src/include/sys/snet/0/s.tftp.h
* @(#)tftp.h 5.3
*
* Last delta created 14:07:57 3/4/91
* This file extracted 11:19:46 3/8/91
*
* Modifications:
*
* GSS 12/04/88 Integrated into Admin System II, all
* projects
*/
/* This file contains the definitions for the TFTP connection control
* block, which contains all the information pertaining to a connection.
* A conn structure is allocated at connection open time and retained
* until the connection is closed. The routines in the file conn.c
* are sufficient for dealing with connections.
* It also contains the structure definition for tftp packets.
*/
/* A connection control block */
struct conn {
SOCKET netfd; /* network file descriptor */
int type; /* user or server connection */
int synced; /* conn synchronized flag */
unsigned int block_num; /* next block number */
char * last_sent; /* previous packet sent */
int last_len; /* size of previous packet */
time_t nxt_retrans; /* when to retransmit */
int retrans; /* number of retransmits */
int timeout; /* retransmit timeout */
char * cur_pkt; /* current packet (send or rcv) */
int cur_len; /* current packet len */
char * last_rcv; /* last received packet */
int rcv_len; /* size of last rcvd. packet */
char *file; /* file name */
int dir; /* direction */
int mode; /* transfer mode */
char *c_mode; /* char. string mode */
struct in_addr fhost; /* foreign host */
int fport; /* foreign port for connection */
int lport; /* local port for connection */
int intrace; /* input packet trace flag */
int outtrace; /* output packet trace flag */
int logging; /* connection logging flag */
int our_blksize; /* block size we want */
int blksize; /* negotiated block size */
int base_timeout; /* base timeout value */
int expecting_oack; /* we sent options in request */
};
/* connection constants */
#define TIMEOUT 1 /* initial retransmit timeout */
#define INITTIMEOUT 1 /* initial connection timeout */
#define MAX_TIMEOUT 30 /* max. retransmit timeout */
#define MAX_RETRANS 5 /* max. no. of retransmits */
#define DAEMON 0 /* a daemon connection */
#define USER 1 /* a user connection */
#define TMO 0 /* retransmitting due to timeout */
#define DUP 1 /* retransmitting due to duplicate */
#define DATALEN 1432 /* size of data portion of tftp pkt */
/* tftp packet structure */
struct tftp {
unsigned short fp_opcode; /* header */
unsigned short fp_blkno; /* Block number */
char fp_blk[DATALEN];/* Data */
char dummy;
};
/* values for fp_opcode */
#define RRQ 1 /* Read Request */
#define WRQ 2 /* Write Request */
#define DATA 3 /* Data block */
#define DACK 4 /* Data Acknowledge */
#define ERROR 5 /* Error */
#define OACK 6 /* Options Acknowledge */
/* values for error codes in ERROR packets */
#define TEUNDEF 0 /* Not defined, see message (if any) */
#define TEFNF 1 /* File not found */
#define TEACESS 2 /* Access violation */
#define TEFULL 3 /* Disc full or allocation exceeded */
#define TETFTP 4 /* Illegal TFTP operation */
#define TETID 5 /* Unknown transfer ID */
#define TEEXISTS 6 /* File already exists */
#define TEUSER 7 /* No such user */
#define TEBADOPT 8 /* Bad options */
/* Random constants */
#define TFTPLEN sizeof(struct tftp) /* max inet packet size */
#define READ RRQ /* read requested */
#define WRITE WRQ /* write requested */
#define NETASCII 0 /* netascii transfer mode */
#define IMAGE 1 /* image transfer mode */
#define INPKT 0 /* input packet */
#define OUTPKT 1 /* output packet */
#define TRUE 1
#define FALSE 0
/* extern declarations */
#include <stdio.h>
extern struct conn *cn_rq();
extern struct conn *cn_lstn();
extern struct tftp *cn_rcv();
extern struct tftp *cn_mkwrt();
extern void cn_ack();
extern void logpkt();
extern void cn_swab();
extern void cn_close();
extern void cn_send();
extern void cn_rcvf();
extern void __cdecl cn_log(const char *, int, ...);
extern void __cdecl cn_inform(const char *, ...);
extern void cn_err (register struct conn *, struct in_addr,
int, int, char *);
extern char *strsave();
extern char tst_and_clr();
extern char * udp_alloc();
struct tftp *
cn_wait(
struct conn *cn,
unsigned short opcode);
int
cn_parse(
struct conn *,
struct in_addr,
int,
char *,
int);
int
cn_retrans(
struct conn *,
int
);
int
cn_wrt(
struct conn *,
int);
int
cn_wrtf(
struct conn *);
int
do_cmd(
struct conn *);