diff options
author | Aleksander Morgado <aleksander@aleksander.es> | 2017-06-21 21:13:20 +0200 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2017-06-23 13:34:07 +0200 |
commit | 6b3a3e56faa63397b3c160e74767c620ebca91a7 (patch) | |
tree | 3c0084b4d8b4cda3fba403c2e8d76d77bae8e3c5 | |
parent | 9e5063aeebeddfcd31164ec0b952c7f48b9361bb (diff) | |
download | barebox-6b3a3e56faa63397b3c160e74767c620ebca91a7.tar.gz barebox-6b3a3e56faa63397b3c160e74767c620ebca91a7.tar.xz |
ratp: send initial data in behaviour B if any pending
And also, use ratp_send_ack() instead of manually constructing an ACK
if no data is pending to be sent.
The current barebox implementation doesn't allow any queueing of data
until the connection is established, so this is probably not a case
that would get run anyway.
Signed-off-by: Aleksander Morgado <aleksander@aleksander.es>
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
-rw-r--r-- | lib/ratp.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/lib/ratp.c b/lib/ratp.c index c7f3f41713..e810a9e541 100644 --- a/lib/ratp.c +++ b/lib/ratp.c @@ -622,11 +622,11 @@ static void ratp_behaviour_b(struct ratp_internal *ri, void *pkt) ri->sn_received = ratp_sn(hdr); if (hdr->control & RATP_CONTROL_ACK) { - control = ratp_set_sn(ratp_an(hdr)) | - ratp_set_an(!ratp_sn(hdr)) | - RATP_CONTROL_ACK; - ratp_send_hdr(ri, control); ratp_state_change(ri, RATP_STATE_ESTABLISHED); + if (list_empty(&ri->sendmsg) || ri->sendmsg_current) + ratp_send_ack(ri, hdr); + else + ratp_send_next_data(ri); } else { struct ratp_header synack = {}; |