mirror of
https://github.com/pi-hole/dnsmasq.git
synced 2025-12-19 10:18:25 +00:00
Tftp code tweaks.
This commit is contained in:
26
src/tftp.c
26
src/tftp.c
@@ -198,11 +198,11 @@ static void tftp_request(struct listener *listen, time_t now)
|
|||||||
|
|
||||||
name = namebuff;
|
name = namebuff;
|
||||||
|
|
||||||
addra.addr4 = addr.in.sin_addr;
|
|
||||||
|
|
||||||
if (family == AF_INET6)
|
if (family == AF_INET6)
|
||||||
addra.addr6 = addr.in6.sin6_addr;
|
addra.addr6 = addr.in6.sin6_addr;
|
||||||
|
else
|
||||||
|
addra.addr4 = addr.in.sin_addr;
|
||||||
|
|
||||||
if (daemon->tftp_interfaces)
|
if (daemon->tftp_interfaces)
|
||||||
{
|
{
|
||||||
/* dedicated tftp interface list */
|
/* dedicated tftp interface list */
|
||||||
@@ -662,7 +662,7 @@ void check_tftp_listeners(time_t now)
|
|||||||
int endcon = 0, error = 0, timeout = 0;
|
int endcon = 0, error = 0, timeout = 0;
|
||||||
|
|
||||||
tmp = transfer->next;
|
tmp = transfer->next;
|
||||||
|
|
||||||
/* ->start set to zero in handle_tftp() when we recv an error packet. */
|
/* ->start set to zero in handle_tftp() when we recv an error packet. */
|
||||||
if (transfer->start == 0)
|
if (transfer->start == 0)
|
||||||
endcon = error = 1;
|
endcon = error = 1;
|
||||||
@@ -679,22 +679,18 @@ void check_tftp_listeners(time_t now)
|
|||||||
/* Do transmission or re-transmission. When we get an ACK, the call to handle_tftp()
|
/* Do transmission or re-transmission. When we get an ACK, the call to handle_tftp()
|
||||||
bumps transfer->lastack and trips the retransmit timer so that we send the next block(s)
|
bumps transfer->lastack and trips the retransmit timer so that we send the next block(s)
|
||||||
here. */
|
here. */
|
||||||
unsigned int i, winsize;
|
|
||||||
ssize_t len;
|
ssize_t len;
|
||||||
|
|
||||||
transfer->retransmit += transfer->timeout + (1<<(transfer->backoff/2));
|
transfer->retransmit += transfer->timeout + (1<<(transfer->backoff/2));
|
||||||
transfer->backoff++;
|
transfer->backoff++;
|
||||||
transfer->block = transfer->lastack;
|
transfer->block = transfer->lastack;
|
||||||
|
|
||||||
if ((len = get_block(daemon->packet, transfer)) == 0)
|
if ((len = get_block(daemon->packet, transfer)) == 0)
|
||||||
endcon = 1; /* got last ACK */
|
endcon = 1; /* got last ACK */
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* send a window'a worth of blocks unless we're retransmitting OACK */
|
/* send a window'a worth of blocks unless we're retransmitting OACK */
|
||||||
winsize = transfer->block ? transfer->windowsize : 1;
|
unsigned int i, winsize = transfer->block ? transfer->windowsize : 1;
|
||||||
|
|
||||||
/* we overwrote the buffer... */
|
|
||||||
daemon->srv_save = NULL;
|
|
||||||
|
|
||||||
for (i = 0; i < winsize && !endcon; i++, transfer->block++)
|
for (i = 0; i < winsize && !endcon; i++, transfer->block++)
|
||||||
{
|
{
|
||||||
@@ -860,7 +856,10 @@ static ssize_t tftp_err(int err, char *packet, char *message, char *file, char *
|
|||||||
char message[];
|
char message[];
|
||||||
} *mess = (struct errmess *)packet;
|
} *mess = (struct errmess *)packet;
|
||||||
ssize_t len, ret = 4;
|
ssize_t len, ret = 4;
|
||||||
|
|
||||||
|
/* we overwrote the buffer... */
|
||||||
|
daemon->srv_save = NULL;
|
||||||
|
|
||||||
memset(packet, 0, daemon->packet_buff_sz);
|
memset(packet, 0, daemon->packet_buff_sz);
|
||||||
if (file)
|
if (file)
|
||||||
sanitise(file);
|
sanitise(file);
|
||||||
@@ -888,7 +887,10 @@ static ssize_t tftp_err_oops(char *packet, const char *file)
|
|||||||
static ssize_t get_block(char *packet, struct tftp_transfer *transfer)
|
static ssize_t get_block(char *packet, struct tftp_transfer *transfer)
|
||||||
{
|
{
|
||||||
memset(packet, 0, daemon->packet_buff_sz);
|
memset(packet, 0, daemon->packet_buff_sz);
|
||||||
|
|
||||||
|
/* we overwrote the buffer... */
|
||||||
|
daemon->srv_save = NULL;
|
||||||
|
|
||||||
if (transfer->block == 0)
|
if (transfer->block == 0)
|
||||||
{
|
{
|
||||||
/* send OACK */
|
/* send OACK */
|
||||||
|
|||||||
Reference in New Issue
Block a user