Better handling of extra upload requests

This commit is contained in:
Joseph C. Lehner 2016-02-17 12:31:31 +01:00
parent 758d301c31
commit 68501ff596

19
nmrp.c
View file

@ -349,7 +349,7 @@ int nmrp_do(struct nmrpd_args *args)
char *filename; char *filename;
struct in_addr ipaddr, ipmask; struct in_addr ipaddr, ipmask;
time_t beg; time_t beg;
int i, status, ulreqs, expect; int i, status, ulreqs, expect, unexpected;
struct ethsock *sock; struct ethsock *sock;
void (*sigh_orig)(int); void (*sigh_orig)(int);
@ -469,6 +469,9 @@ int nmrp_do(struct nmrpd_args *args)
if (expect != NMRP_C_NONE && rx.msg.code != expect) { if (expect != NMRP_C_NONE && rx.msg.code != expect) {
fprintf(stderr, "Received %s while waiting for %s!\n", fprintf(stderr, "Received %s while waiting for %s!\n",
msg_code_str(rx.msg.code), msg_code_str(expect)); msg_code_str(rx.msg.code), msg_code_str(expect));
unexpected = 1;
} else {
unexpected = 0;
} }
tx.msg.code = NMRP_C_NONE; tx.msg.code = NMRP_C_NONE;
@ -518,11 +521,17 @@ int nmrp_do(struct nmrpd_args *args)
break; break;
case NMRP_C_TFTP_UL_REQ: case NMRP_C_TFTP_UL_REQ:
if (++ulreqs > 1) { if (!unexpected) {
if (verbosity) { if (++ulreqs > 5) {
printf("Ignoring upload request %d.\n", ulreqs); printf("Bailing out after %d upload requests.\n",
ulreqs);
tx.msg.code = NMRP_C_CLOSE_REQ;
break;
}
} else {
if (verbosity) {
printf("Ignoring extra upload request.\n");
} }
ethsock_set_timeout(sock, args->ul_timeout);
break; break;
} }