mirror of
https://github.com/moparisthebest/curl
synced 2024-08-13 17:03:50 -04:00
no longer uses errno but Curl_sockerrno() and now acknowledges return codes
from Curl_client_write
This commit is contained in:
parent
df9108e19b
commit
3b7359a27a
88
lib/tftp.c
88
lib/tftp.c
@ -36,7 +36,6 @@
|
|||||||
#ifdef HAVE_SYS_STAT_H
|
#ifdef HAVE_SYS_STAT_H
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#endif
|
#endif
|
||||||
#include <errno.h>
|
|
||||||
|
|
||||||
#if defined(WIN32)
|
#if defined(WIN32)
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
@ -294,7 +293,7 @@ static void tftp_send_first(tftp_state_data_t *state, tftp_event_t event)
|
|||||||
state->conn->ip_addr->ai_addr,
|
state->conn->ip_addr->ai_addr,
|
||||||
state->conn->ip_addr->ai_addrlen);
|
state->conn->ip_addr->ai_addrlen);
|
||||||
if(sbytes < 0) {
|
if(sbytes < 0) {
|
||||||
failf(data, "%s\n", Curl_strerror(state->conn, errno));
|
failf(data, "%s\n", Curl_strerror(state->conn, Curl_sockerrno()));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -362,7 +361,7 @@ static void tftp_rx(tftp_state_data_t *state, tftp_event_t event)
|
|||||||
(struct sockaddr *)&state->remote_addr,
|
(struct sockaddr *)&state->remote_addr,
|
||||||
state->remote_addrlen);
|
state->remote_addrlen);
|
||||||
if(sbytes < 0) {
|
if(sbytes < 0) {
|
||||||
failf(data, "%s\n", Curl_strerror(state->conn, errno));
|
failf(data, "%s\n", Curl_strerror(state->conn, Curl_sockerrno()));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Check if completed (That is, a less than full packet is received) */
|
/* Check if completed (That is, a less than full packet is received) */
|
||||||
@ -390,7 +389,7 @@ static void tftp_rx(tftp_state_data_t *state, tftp_event_t event)
|
|||||||
state->remote_addrlen);
|
state->remote_addrlen);
|
||||||
/* Check all sbytes were sent */
|
/* Check all sbytes were sent */
|
||||||
if(sbytes<0) {
|
if(sbytes<0) {
|
||||||
failf(data, "%s\n", Curl_strerror(state->conn, errno));
|
failf(data, "%s\n", Curl_strerror(state->conn, Curl_sockerrno()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -437,15 +436,15 @@ static void tftp_tx(tftp_state_data_t *state, tftp_event_t event)
|
|||||||
"tftp_tx: giving up waiting for block %d ack",
|
"tftp_tx: giving up waiting for block %d ack",
|
||||||
state->block);
|
state->block);
|
||||||
} else {
|
} else {
|
||||||
/* Re-send the data packet */
|
/* Re-send the data packet */
|
||||||
sbytes = sendto(state->sockfd, (void *)&state->spacket,
|
sbytes = sendto(state->sockfd, (void *)&state->spacket,
|
||||||
4+state->sbytes, SEND_4TH_ARG,
|
4+state->sbytes, SEND_4TH_ARG,
|
||||||
(struct sockaddr *)&state->remote_addr,
|
(struct sockaddr *)&state->remote_addr,
|
||||||
state->remote_addrlen);
|
state->remote_addrlen);
|
||||||
/* Check all sbytes were sent */
|
/* Check all sbytes were sent */
|
||||||
if(sbytes<0) {
|
if(sbytes<0) {
|
||||||
failf(data, "%s\n", Curl_strerror(state->conn, errno));
|
failf(data, "%s\n", Curl_strerror(state->conn, Curl_sockerrno()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -466,7 +465,7 @@ static void tftp_tx(tftp_state_data_t *state, tftp_event_t event)
|
|||||||
state->remote_addrlen);
|
state->remote_addrlen);
|
||||||
/* Check all sbytes were sent */
|
/* Check all sbytes were sent */
|
||||||
if(sbytes<0) {
|
if(sbytes<0) {
|
||||||
failf(data, "%s\n", Curl_strerror(state->conn, errno));
|
failf(data, "%s\n", Curl_strerror(state->conn, Curl_sockerrno()));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -487,7 +486,7 @@ static void tftp_tx(tftp_state_data_t *state, tftp_event_t event)
|
|||||||
state->remote_addrlen);
|
state->remote_addrlen);
|
||||||
/* Check all sbytes were sent */
|
/* Check all sbytes were sent */
|
||||||
if(sbytes<0) {
|
if(sbytes<0) {
|
||||||
failf(data, "%s\n", Curl_strerror(state->conn, errno));
|
failf(data, "%s\n", Curl_strerror(state->conn, Curl_sockerrno()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -676,40 +675,43 @@ CURLcode Curl_tftp(struct connectdata *conn, bool *done)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Sanity check packet length */
|
/* Sanity check packet length */
|
||||||
if (state->rbytes < 4)
|
if (state->rbytes < 4) {
|
||||||
{
|
|
||||||
failf(conn->data, "Received too short packet\n");
|
failf(conn->data, "Received too short packet\n");
|
||||||
/* Not a timeout, but how best to handle it? */
|
/* Not a timeout, but how best to handle it? */
|
||||||
event = TFTP_EVENT_TIMEOUT;
|
event = TFTP_EVENT_TIMEOUT;
|
||||||
} else {
|
}
|
||||||
|
else {
|
||||||
|
|
||||||
/* The event is given by the TFTP packet time */
|
/* The event is given by the TFTP packet time */
|
||||||
event = (tftp_event_t)getrpacketevent(&state->rpacket);
|
event = (tftp_event_t)getrpacketevent(&state->rpacket);
|
||||||
|
|
||||||
switch(event) {
|
switch(event) {
|
||||||
case TFTP_EVENT_DATA:
|
case TFTP_EVENT_DATA:
|
||||||
/* Don't pass to the client empty or retransmitted packets */
|
/* Don't pass to the client empty or retransmitted packets */
|
||||||
if (state->rbytes > 4 &&
|
if (state->rbytes > 4 &&
|
||||||
((state->block+1) == getrpacketblock(&state->rpacket))) {
|
((state->block+1) == getrpacketblock(&state->rpacket))) {
|
||||||
Curl_client_write(data, CLIENTWRITE_BODY,
|
code = Curl_client_write(data, CLIENTWRITE_BODY,
|
||||||
(char *)&state->rpacket.data[4], state->rbytes-4);
|
(char *)&state->rpacket.data[4],
|
||||||
}
|
state->rbytes-4);
|
||||||
break;
|
if(code)
|
||||||
case TFTP_EVENT_ERROR:
|
return code;
|
||||||
state->error = (tftp_error_t)getrpacketblock(&state->rpacket);
|
}
|
||||||
infof(conn->data, "%s\n", (char *)&state->rpacket.data[4]);
|
break;
|
||||||
break;
|
case TFTP_EVENT_ERROR:
|
||||||
case TFTP_EVENT_ACK:
|
state->error = (tftp_error_t)getrpacketblock(&state->rpacket);
|
||||||
break;
|
infof(conn->data, "%s\n", (char *)&state->rpacket.data[4]);
|
||||||
case TFTP_EVENT_RRQ:
|
break;
|
||||||
case TFTP_EVENT_WRQ:
|
case TFTP_EVENT_ACK:
|
||||||
default:
|
break;
|
||||||
failf(conn->data, "%s\n", "Internal error: Unexpected packet");
|
case TFTP_EVENT_RRQ:
|
||||||
break;
|
case TFTP_EVENT_WRQ:
|
||||||
}
|
default:
|
||||||
|
failf(conn->data, "%s\n", "Internal error: Unexpected packet");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
/* Update the progress meter */
|
/* Update the progress meter */
|
||||||
Curl_pgrsUpdate(conn);
|
Curl_pgrsUpdate(conn);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user