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

Change blocking parameter to a flag

This commit is contained in:
Aris Adamantiadis
2011-01-10 17:39:47 +01:00
parent 076dfb8294
commit bcea8921ba
3 changed files with 20 additions and 5 deletions

View File

@@ -384,6 +384,7 @@ LIBSSH_API int ssh_get_random(void *where,int len,int strong);
LIBSSH_API int ssh_get_version(ssh_session session);
LIBSSH_API int ssh_get_status(ssh_session session);
LIBSSH_API int ssh_init(void);
LIBSSH_API int ssh_is_blocking(ssh_session session);
LIBSSH_API int ssh_is_server_known(ssh_session session);
LIBSSH_API void ssh_log(ssh_session session, int prioriry, const char *format, ...) PRINTF_ATTRIBUTE(3, 4);
LIBSSH_API ssh_channel ssh_message_channel_request_open_reply_accept(ssh_message msg);

View File

@@ -51,6 +51,10 @@ enum ssh_dh_state_e {
DH_STATE_FINISHED
};
/* libssh calls may block an undefined amount of time */
#define SSH_SESSION_FLAG_BLOCKING 1
struct ssh_session_struct {
struct error_struct error;
struct ssh_socket_struct *socket;
@@ -72,8 +76,8 @@ struct ssh_session_struct {
/* two previous are deprecated */
/* int auth_service_asked; */
/* socket status */
int blocking; /* functions should block */
/* session flags (SSH_SESSION_FLAG_*) */
int flags;
ssh_string banner; /* that's the issue banner from
the server */

View File

@@ -85,7 +85,7 @@ ssh_session ssh_new(void) {
session->alive = 0;
session->auth_methods = 0;
session->blocking = 1;
ssh_set_blocking(session, 1);
session->log_indent = 0;
session->maxchannel = FIRST_CHANNEL;
@@ -280,11 +280,21 @@ void ssh_silent_disconnect(ssh_session session) {
* \bug nonblocking code is in development and won't work as expected
*/
void ssh_set_blocking(ssh_session session, int blocking) {
if (session == NULL) {
if (session == NULL) {
return;
}
session->flags &= ~SSH_SESSION_FLAG_BLOCKING;
session->flags |= blocking ? SSH_SESSION_FLAG_BLOCKING : 0;
}
session->blocking = blocking ? 1 : 0;
/**
* @brief Return the blocking mode of libssh
* @param[in] session The SSH session
* @returns 0 if the session is nonblocking,
* @returns 1 if the functions may block.
*/
int ssh_is_blocking(ssh_session session){
return (session->flags&SSH_SESSION_FLAG_BLOCKING) ? 1 : 0;
}
/**