Things TODO =========== * Fix the numerous malloc+copy operations for sending data, see below for details * make sure the windowing code adapts better to slow situations so that it doesn't then use as much memory as today. Possibly by an app-controllable "Window mode"? * Introduce a function that can free data that is returned allocated from the lib, like when libssh2_session_last_error() is asked to return the string with 'want_buf' set to non-zero. * Add more info to the man pages. * Decrease the number of mallocs. Everywhere. Will get easier once the buffering improvements have been done. * Use SO_NOSIGPIPE for Mac OS/BSD systems where MSG_NOSIGNAL doesn't exist/work * Extend the test suite to actually test lots of aspects of libssh2 * Fix all compiler warnings (some can't be done without API changes) * Expose error messages sent by the server * Make SFTP transfers ask for and send several packages at once so that it doesn't have to send-waitforack-send-waitforack as much. At next SONAME bump =================== * stop using #defined macros as part of the official API. The macros should either be turned into real functions or discarded from the API. * fix the parts of the API where object pointers and function pointers are mixed like libssh2_session_callback_set() * remove the following functions from the API/ABI libssh2_base64_decode() libssh2_session_flag() libssh2_channel_handle_extended_data() libssh2_channel_receive_window_adjust() libssh2_poll() libssh2_poll_channel_read() libssh2_session_startup() (libssh2_session_handshake() is the replacement) * Rename a few function: libssh2_hostkey_hash => libssh2_session_hostkey_hash libssh2_banner_set => libssh2_session_banner_set * change 'int' to 'libssh2_socket_t' in the public API for sockets. * Use 'size_t' for string lengths in all functions. * Add a comment field to struct libssh2_knownhost. * remove the existing libssh2_knownhost_add() function and rename libssh2_knownhost_addc to become the new libssh2_knownhost_add instead * remove the existing libssh2_scp_send_ex() function and rename libssh2_scp_send64 to become the new libssh2_scp_send instead. * remove the existing libssh2_knownhost_check() functin and rename libssh2_knownhost_checkp() to become the new libssh2_knownhost_check instead Buffering Improvements ====================== compression - needs to ne able to take the input to compress from two pointers (with two sizes) and generate a single compressed output chunk - should also not allocate the compressed output buffer but use a single one within the session struct (as transport_write() will copy the data off from that buffer immediately anyway), or even better the transport_write() function could allocate a buffer to fix an uncompressed buffer as then the compression function can write its output directly into the allocated send buffer - should probably be split off into a separate compression and decompression function instead of a single unified as they are now, to make these changes easier transport_write - should accept a "packet struct" input with separate pointers to headers and to payload (each of which may be allocated or not) - Separating the headers from the payload will greatly enhance our ability to use a fixed buffer within the session handle for the header part and provide the payload part as a mere pointer. - This function is used >30 times in the code. - If this function gets called with a total packet size that is larger than 32K, it should create more than one SSH packet so that it keeps the largest one below 32K channel_write - should not copy/allocate anything for the data, only create a header chunk and pass on the payload data to transport_write "pointed to" sftp_write - should not copy/allocate anything for the data, only create a header chunk and pass on the payload data to channel_write "pointed to"