To be able to support endpoint-to-endpoint fast-forwarding (formerly called
mux-to-mux fast-forwarding), we cannot rely on data in the input channel to
compute amount of data the applet has produced.
The applet API is not really designed to know how many bytes are produced or
received at each call. Till now, it was not a problem because data always
passed through the channels. With E2E fast-frowarding, input data may be
immediately consumed. From the caller point of view (task_run_applet), there
is only the total field of the input channel that will change. So let's use
it now.
channel_check_idletimer(ic);
- input = channel_data(ic);
+ input = ic->total;
output = co_data(oc);
app->applet->fct(app);
sc_have_room(sco);
}
- input = channel_data(ic) - input;
+ input = ic->total - input;
if (input) {
channel_check_xfer(ic, input);
sc_ep_report_read_activity(sc);