1
0
mirror of https://git.libssh.org/projects/libssh.git synced 2025-07-31 00:03:07 +03:00

added bases for nonblocking packet sending and receiving. packet_send

and packet_read may return SSH_AGAIN if the session is nonblocking and 
there is not enough data to be read.
I also added a socket buffering through session->in_socket_buffer. It is 
more low-level than the packet buffer.
I should rename in_buffer with in_packet_buffer.
There is still work to do with the socket status, (opened, error, 
closed, ...) and much more work to extend the nonblocking to session 
opening, messages sending and such.
I find the switch(session->packet_state) solution very nice (especially 
when the nonblocking function may have 10 differents states, like in a 
connection.)


git-svn-id: svn+ssh://svn.berlios.de/svnroot/repos/libssh/trunk@49 7dcaeef0-15fb-0310-b436-a5af3365683c
This commit is contained in:
Aris Adamantiadis
2005-11-22 23:15:31 +00:00
parent cddc5d6889
commit 1847fb2373
5 changed files with 217 additions and 118 deletions

View File

@ -90,6 +90,10 @@ typedef uint8_t u8;
#define SSH_FATAL 2
#define SSH_EINTR 3
/* error return codes */
#define SSH_OK 0 /* No error */
#define SSH_ERROR -1 /* error of some kind */
#define SSH_AGAIN 1 /* the nonblocking call must be repeated */
char *ssh_get_error(void *error);
int ssh_get_error_code(void *error);

View File

@ -304,7 +304,7 @@ struct ssh_session {
not block */
int data_to_write;
int data_except;
int blocking; // functions should not block
int blocking; // functions should block
STRING *banner; /* that's the issue banner from
the server */
@ -315,6 +315,14 @@ struct ssh_session {
BUFFER *in_buffer;
PACKET in_packet;
BUFFER *out_buffer;
BUFFER *out_socket_buffer;
BUFFER *in_socket_buffer;
/* the states are used by the nonblocking stuff to remember */
/* where it was before being interrupted */
int packet_state;
KEX server_kex;
KEX client_kex;
BUFFER *in_hashbuf;