/* * This file is part of the SSH Library * * Copyright (c) 2009 Aris Adamantiadis * * The SSH Library is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2.1 of the License, or (at your * option) any later version. * * The SSH Library is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public * License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with the SSH Library; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, * MA 02111-1307, USA. */ /* callback.h * This file includes the public declarations for the libssh callback mechanism */ #ifndef _SSH_CALLBACK_H #define _SSH_CALLBACK_H #include #include #ifdef __cplusplus extern "C" { #endif /** * @brief SSH authentication callback. * * @param prompt Prompt to be displayed. * @param buf Buffer to save the password. You should null-terminate it. * @param len Length of the buffer. * @param echo Enable or disable the echo of what you type. * @param verify Should the password be verified? * @param userdata Userdata to be passed to the callback function. Useful * for GUI applications. * * @return 0 on success, < 0 on error. */ typedef int (*ssh_auth_callback) (const char *prompt, char *buf, size_t len, int echo, int verify, void *userdata); typedef void (*ssh_log_callback) (ssh_session session, int priority, const char *message, void *userdata); /** this callback will be called with status going from 0.0 to 1.0 during * connection */ typedef void (*ssh_status_callback) (ssh_session session, float status, void *userdata); struct ssh_callbacks_struct { /** size of this structure. internal, shoud be set with ssh_callbacks_init()*/ size_t size; /** User-provided data. User is free to set anything he wants here */ void *userdata; /** this functions will be called if e.g. a keyphrase is needed. */ ssh_auth_callback auth_function; /** this function will be called each time a loggable event happens. */ ssh_log_callback log_function; /** this function gets called during connection time to indicate the percentage * of connection steps completed. */ void (*connect_status_function)(void *userdata, float status); }; typedef struct ssh_callbacks_struct * ssh_callbacks; /** Initializes an ssh_callbacks_struct * A call to this macro is mandatory when you have set a new * ssh_callback_struct structure. Its goal is to maintain the binary * compatibility with future versions of libssh as the structure * evolves with time. */ #define ssh_callbacks_init(p) do {\ p->size=sizeof(*p); \ } while(0); LIBSSH_API int ssh_options_set_auth_callback(ssh_options opt, ssh_auth_callback cb, void *userdata); LIBSSH_API int ssh_options_set_log_function(ssh_options opt, ssh_log_callback cb, void *userdata); LIBSSH_API int ssh_options_set_status_callback(ssh_options opt, void (*callback) (void *arg, float status), void *arg); #ifdef __cplusplus } #endif #endif /*_SSH_CALLBACK_H */