slirp: support dynamic block size for TFTP transfers

The blocksize option is defined in RFC 1783 and RFC 2348.
We now support block sizes between 1 and 1428 bytes, instead of 512 only.

Signed-off-by: Hervé Poussineau <hpoussin@reactos.org>
Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
This commit is contained in:
Hervé Poussineau 2016-11-21 20:45:49 +01:00 committed by Samuel Thibault
parent 893dcdbfa9
commit 9443598d7e
2 changed files with 19 additions and 15 deletions

View file

@ -15,6 +15,7 @@
#define TFTP_OACK 6
#define TFTP_FILENAME_MAX 512
#define TFTP_BLOCKSIZE_MAX 1428
struct tftp_t {
struct udphdr udp;
@ -22,13 +23,13 @@ struct tftp_t {
union {
struct {
uint16_t tp_block_nr;
uint8_t tp_buf[512];
uint8_t tp_buf[TFTP_BLOCKSIZE_MAX];
} tp_data;
struct {
uint16_t tp_error_code;
uint8_t tp_msg[512];
uint8_t tp_msg[TFTP_BLOCKSIZE_MAX];
} tp_error;
char tp_buf[512 + 2];
char tp_buf[TFTP_BLOCKSIZE_MAX + 2];
} x;
} __attribute__((packed));
@ -36,6 +37,7 @@ struct tftp_session {
Slirp *slirp;
char *filename;
int fd;
uint16_t block_size;
struct sockaddr_storage client_addr;
uint16_t client_port;