summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/ratp.c8
-rw-r--r--scripts/remote/ratp.py14
2 files changed, 13 insertions, 9 deletions
diff --git a/lib/ratp.c b/lib/ratp.c
index e810a9e541..2dee41009e 100644
--- a/lib/ratp.c
+++ b/lib/ratp.c
@@ -1042,6 +1042,8 @@ static int ratp_behaviour_g(struct ratp_internal *ri, void *pkt)
return 0;
}
+static int ratp_behaviour_i1(struct ratp_internal *ri, void *pkt);
+
/*
* Our SYN has been acknowledged. At this point we are
* technically in the ESTABLISHED state. Send any initial data
@@ -1062,7 +1064,11 @@ static int ratp_behaviour_h1(struct ratp_internal *ri, void *pkt)
ratp_state_change(ri, RATP_STATE_ESTABLISHED);
- return 0;
+ /* If the input message has data (i.e. it is not just an ACK
+ * without data) then we need to send back an ACK ourselves,
+ * or even data if we have it pending. This is the same
+ * procedure done in i1, so just run it. */
+ return ratp_behaviour_i1 (ri, pkt);
}
/*
diff --git a/scripts/remote/ratp.py b/scripts/remote/ratp.py
index e6b3e19b69..7972d31f2f 100644
--- a/scripts/remote/ratp.py
+++ b/scripts/remote/ratp.py
@@ -489,12 +489,8 @@ class RatpConnection(object):
def _h1(self, r):
logging.info("H1")
-
- # FIXME: initial data?
self._state = RatpState.established
- self._r_sn = r.c_sn
-
- return False
+ return self._common_i1(r)
def _h2(self, r):
logging.info("H2")
@@ -584,9 +580,7 @@ class RatpConnection(object):
self._time_wait_deadline = monotonic() + self._get_rto()
return False
- def _i1(self, r):
- logging.info("I1")
-
+ def _common_i1(self, r):
if r.c_so:
self._r_sn = r.c_sn
self._rx_buf.append(chr(r.length))
@@ -608,6 +602,10 @@ class RatpConnection(object):
self._write(s)
return False
+ def _i1(self, r):
+ logging.info("I1")
+ return self._common_i1(r)
+
def _machine(self, pkt):
logging.info("State: %r", self._state)
if self._state == RatpState.listen: