summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndreas Schneider <mail@cynapses.org>2009-04-02 12:32:03 +0000
committerAndreas Schneider <mail@cynapses.org>2009-04-02 12:32:03 +0000
commiteb461d1dbe21f70d9d33b0d21a6af7d6ff9c9a11 (patch)
treeca45630c42ba22538bd204e8d3452210d7561bf4
parentcfea89fb7c7fe8482e3a6fadbd6595f2d552ed87 (diff)
downloadlibssh-eb461d1dbe21f70d9d33b0d21a6af7d6ff9c9a11.tar.gz
libssh-eb461d1dbe21f70d9d33b0d21a6af7d6ff9c9a11.tar.xz
libssh-eb461d1dbe21f70d9d33b0d21a6af7d6ff9c9a11.zip
Improve ssh_options_set_status_callback().
git-svn-id: svn+ssh://svn.berlios.de/svnroot/repos/libssh/trunk@363 7dcaeef0-15fb-0310-b436-a5af3365683c
-rw-r--r--include/libssh/libssh.h4
-rw-r--r--libssh/options.c35
2 files changed, 28 insertions, 11 deletions
diff --git a/include/libssh/libssh.h b/include/libssh/libssh.h
index 489dfd5..51fac3f 100644
--- a/include/libssh/libssh.h
+++ b/include/libssh/libssh.h
@@ -314,13 +314,13 @@ int ssh_options_getopt(SSH_OPTIONS *options, int *argcptr, char **argv);
int ssh_options_set_host(SSH_OPTIONS *opt, const char *host);
int ssh_options_set_fd(SSH_OPTIONS *opt, socket_t fd);
int ssh_options_set_bind(SSH_OPTIONS *opt, const char *bindaddr, int port);
-void ssh_options_set_status_callback(SSH_OPTIONS *opt, void (*callback)
- (void *arg, float status), void *arg);
void ssh_options_set_timeout(SSH_OPTIONS *opt, long seconds, long usec);
int ssh_options_set_ssh_dir(SSH_OPTIONS *opt, const char *dir);
int ssh_options_set_known_hosts_file(SSH_OPTIONS *opt, const char *dir);
int ssh_options_set_identity(SSH_OPTIONS *opt, const char *identity);
int ssh_options_set_banner(SSH_OPTIONS *opt, const char *banner);
+int ssh_options_set_status_callback(SSH_OPTIONS *opt, void (*callback)
+ (void *arg, float status), void *arg);
void ssh_options_allow_ssh1(SSH_OPTIONS *opt, int allow);
void ssh_options_allow_ssh2(SSH_OPTIONS *opt, int allow);
void ssh_options_set_dsa_server_key(SSH_OPTIONS *opt, const char *dsakey);
diff --git a/libssh/options.c b/libssh/options.c
index ede7ebf..8adcc95 100644
--- a/libssh/options.c
+++ b/libssh/options.c
@@ -611,17 +611,34 @@ int ssh_options_default_known_hosts_file(SSH_OPTIONS *opt) {
return 0;
}
-/** During ssh_connect(), libssh will call the callback with status from
+/**
+ * @brief Set a callback to show connection status in realtime.
+ *
+ * During ssh_connect(), libssh will call the callback with status from
* 0.0 to 1.0
- * \brief set a callback to show connection status in realtime
- * \param opt options structure
- * \param callback a function pointer to a callback in form f(void *userarg, float status)
- * \param arg value to be given as argument to the callback function when it is called
- * \see ssh_connect()
+ *
+ * @param opt The options structure to use.
+ *
+ * @param callback A function pointer to a callback in form
+ * f(void *userarg, float status).
+ *
+ * @param arg The value to be given as argument to the callback
+ * function when it is called.
+ *
+ * @return 0 on success, < 0 on error.
+ *
+ * @see ssh_connect()
*/
-void ssh_options_set_status_callback(SSH_OPTIONS *opt, void (*callback)(void *arg, float status), void *arg ){
- opt->connect_status_function=callback;
- opt->connect_status_arg=arg;
+int ssh_options_set_status_callback(SSH_OPTIONS *opt,
+ void (*callback)(void *arg, float status), void *arg) {
+ if (opt == NULL || callback == NULL) {
+ return -1;
+ }
+
+ opt->connect_status_function = callback;
+ opt->connect_status_arg = arg;
+
+ return 0;
}
/** \bug currently it only timeouts the socket connection, not the