+/**
+ * Send an end-to-end FWD ACK message for the most recent in-sequence payload.
+ *
+ * @param t Tunnel this is about.
+ */
+static void
+tunnel_send_fwd_data_ack (struct MeshTunnel *t)
+{
+ struct GNUNET_MESH_DataACK msg;
+
+ msg.header.type = htons (GNUNET_MESSAGE_TYPE_MESH_DATA_ACK);
+ msg.header.size = htons (sizeof (msg));
+ msg.tid = htonl (t->id.tid);
+ GNUNET_PEER_resolve (t->id.oid, &msg.oid);
+ msg.pid = htonl (t->prev_fc.last_pid_recv);
+ msg.futures = 0; // FIXME set bits of other newer messages received
+
+ send_prebuilt_message (&msg.header, t->prev_hop, t);
+}
+
+
+/**
+ * Send an end-to-end BCK ACK message for the most recent in-sequence payload.
+ *
+ * @param t Tunnel this is about.
+ */
+static void
+tunnel_send_bck_data_ack (struct MeshTunnel *t)
+{
+ struct GNUNET_MESH_DataACK msg;
+
+ msg.header.type = htons (GNUNET_MESSAGE_TYPE_MESH_DATA_ACK);
+ msg.header.size = htons (sizeof (msg));
+ msg.tid = htonl (t->id.tid);
+ GNUNET_PEER_resolve (t->id.oid, &msg.oid);
+ msg.pid = htonl (t->next_fc.last_pid_recv);
+ msg.futures = 0; // FIXME set bits of other newer messages received
+
+ send_prebuilt_message (&msg.header, t->next_hop, t);
+}
+
+