aboutsummaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorAris Adamantiadis <aris@0xbadc0de.be>2005-11-22 23:15:31 +0000
committerAris Adamantiadis <aris@0xbadc0de.be>2005-11-22 23:15:31 +0000
commit1847fb2373f6cc5e95d36efa4e0b260fb1337c3c (patch)
tree2b9370ba4cfd49a1554caca9b43753bc179553cc /include
parentcddc5d6889f252b2cde5403f16063b640864f55d (diff)
downloadlibssh-1847fb2373f6cc5e95d36efa4e0b260fb1337c3c.tar.gz
libssh-1847fb2373f6cc5e95d36efa4e0b260fb1337c3c.tar.xz
libssh-1847fb2373f6cc5e95d36efa4e0b260fb1337c3c.zip
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
Diffstat (limited to 'include')
-rw-r--r--include/libssh/libssh.h4
-rw-r--r--include/libssh/priv.h10
2 files changed, 13 insertions, 1 deletions
diff --git a/include/libssh/libssh.h b/include/libssh/libssh.h
index ebfe41f1..60002504 100644
--- a/include/libssh/libssh.h
+++ b/include/libssh/libssh.h
@@ -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);
diff --git a/include/libssh/priv.h b/include/libssh/priv.h
index c2a1f863..e587e1ea 100644
--- a/include/libssh/priv.h
+++ b/include/libssh/priv.h
@@ -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;