[email protected] wrote:
> - Log -----------------------------------------------------------------
> commit 7899d28ecbb3f2c0330429ea9c47834167fe2f7f
> Author: Daniel Stenberg <[email protected]>
> Commit: Daniel Stenberg <[email protected]>
> 
>     sftp_write: handle "left over" acked data
>     
>     The SFTP handle struct now buffers number of acked bytes that haven't
>     yet been returned. The way this is used is as following:
>     
>     1. sftp_write() gets called with a buffer of let say size 32000. We
>     split 32000 into 8 smaller packets and send them off one by one. One of
>     them gets acked before the function returns so 4000 is returned.
>     
>     2. sftp_write() gets called again a short while after the previous one,
>     now with a much smaller size passed in to the function. Lets say 8000.
>     In the mean-time, all of the remaining packets from the previous call
>     have been acked (7*4000 = 28000). This function then returns 8000 as all
>     data passed in are already sent and it can't return any more than what
>     it got passed in. But we have 28000 bytes acked. We now store the
>     remaining 20000 in the handle->u.file.acked struct field to add up in
>     the next call.
>     
>     3. sftp_write() gets called again, and now there's a backlogged 20000
>     bytes to return as fine and that will get skipped from the beginning
>     of the buffer that is passed in.

What a mess. :\ Not so much the implementation but the problem..

It would be nice to change at least _sftp_write() so that it can
return more bytes as sent than were given to it at this call, but
never more than has been given to it total.

This would mean a change from the API as it is today, but I think
it's the only way to make sense of the mess.

If I start by _sftp_write()ing 32000 byte, 4000 get sent, and I then
continue _sftp_write()ing less-than-28000 byte on every call, there
is a problem.


//Peter
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

Reply via email to