<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <meta http-equiv="X-UA-Compatible" content="IE=9"/> <meta name="generator" content="Doxygen 1.8.3.1"/> <title>libssh: The libssh callbacks</title> <link href="tabs.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="jquery.js"></script> <script type="text/javascript" src="dynsections.js"></script> <link href="doxygen.css" rel="stylesheet" type="text/css" /> </head> <body> <div id="top"><!-- do not remove this div, it is closed by doxygen! --> <div id="titlearea"> <table cellspacing="0" cellpadding="0"> <tbody> <tr style="height: 56px;"> <td style="padding-left: 0.5em;"> <div id="projectname">libssh  <span id="projectnumber">0.5.5</span> </div> </td> </tr> </tbody> </table> </div> <!-- end header part --> <!-- Generated by Doxygen 1.8.3.1 --> <div id="navrow1" class="tabs"> <ul class="tablist"> <li><a href="index.html"><span>Main Page</span></a></li> <li><a href="pages.html"><span>Related Pages</span></a></li> <li><a href="modules.html"><span>Modules</span></a></li> <li><a href="annotated.html"><span>Data Structures</span></a></li> <li><a href="files.html"><span>Files</span></a></li> </ul> </div> </div><!-- top --> <div class="header"> <div class="summary"> <a href="#nested-classes">Data Structures</a> | <a href="#define-members">Macros</a> | <a href="#typedef-members">Typedefs</a> | <a href="#func-members">Functions</a> </div> <div class="headertitle"> <div class="title">The libssh callbacks<div class="ingroups"><a class="el" href="group__libssh.html">The libssh API</a></div></div> </div> </div><!--header--> <div class="contents"> <p>Callback which can be replaced in libssh. <a href="#details">More...</a></p> <table class="memberdecls"> <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a> Data Structures</h2></td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structssh__callbacks__struct.html">ssh_callbacks</a></td></tr> <tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">The structure to replace libssh functions with appropriate callbacks. <a href="structssh__callbacks__struct.html#details">More...</a><br/></td></tr> <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structssh__socket__callbacks__struct.html">ssh_socket_callbacks</a></td></tr> <tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">These are the callbacks exported by the socket structure They are called by the socket module when a socket event appears. <a href="structssh__socket__callbacks__struct.html#details">More...</a><br/></td></tr> <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> </table><table class="memberdecls"> <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a> Macros</h2></td></tr> <tr class="memitem:gafe09b81e5346f0babe288dc38113d289"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__libssh__callbacks.html#gafe09b81e5346f0babe288dc38113d289">ssh_callbacks_init</a>(p)</td></tr> <tr class="memdesc:gafe09b81e5346f0babe288dc38113d289"><td class="mdescLeft"> </td><td class="mdescRight">Initializes an <a class="el" href="structssh__callbacks__struct.html" title="The structure to replace libssh functions with appropriate callbacks.">ssh_callbacks_struct</a> A call to this macro is mandatory when you have set a new ssh_callback_struct structure. <a href="#gafe09b81e5346f0babe288dc38113d289">More...</a><br/></td></tr> <tr class="separator:gafe09b81e5346f0babe288dc38113d289"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ga8fd26956f4e2b9bc57cfef26c50e321b"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__libssh__callbacks.html#ga8fd26956f4e2b9bc57cfef26c50e321b">SSH_PACKET_CALLBACK</a>(name)   int name (ssh_session session, uint8_t type, ssh_buffer packet, void *user)</td></tr> <tr class="memdesc:ga8fd26956f4e2b9bc57cfef26c50e321b"><td class="mdescLeft"> </td><td class="mdescRight">This macro declares a packet callback handler. <a href="#ga8fd26956f4e2b9bc57cfef26c50e321b">More...</a><br/></td></tr> <tr class="separator:ga8fd26956f4e2b9bc57cfef26c50e321b"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ga4766917128a12b646a8aee7ebc019f8c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga4766917128a12b646a8aee7ebc019f8c"></a> #define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__libssh__callbacks.html#ga4766917128a12b646a8aee7ebc019f8c">SSH_PACKET_NOT_USED</a>   2</td></tr> <tr class="memdesc:ga4766917128a12b646a8aee7ebc019f8c"><td class="mdescLeft"> </td><td class="mdescRight">Packet was not used and should be passed to any other callback available. <br/></td></tr> <tr class="separator:ga4766917128a12b646a8aee7ebc019f8c"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:gac29df803aa1295d6a498c1b081f3b494"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__libssh__callbacks.html#gac29df803aa1295d6a498c1b081f3b494">SSH_PACKET_USED</a>   1</td></tr> <tr class="memdesc:gac29df803aa1295d6a498c1b081f3b494"><td class="mdescLeft"> </td><td class="mdescRight">return values for a ssh_packet_callback <a href="#gac29df803aa1295d6a498c1b081f3b494">More...</a><br/></td></tr> <tr class="separator:gac29df803aa1295d6a498c1b081f3b494"><td class="memSeparator" colspan="2"> </td></tr> </table><table class="memberdecls"> <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a> Typedefs</h2></td></tr> <tr class="memitem:ga7c6a9d477c59ee65b3c03d77b510595f"><td class="memItemLeft" align="right" valign="top">typedef int(* </td><td class="memItemRight" valign="bottom"><a class="el" href="group__libssh__callbacks.html#ga7c6a9d477c59ee65b3c03d77b510595f">ssh_auth_callback</a> )(const char *prompt, char *buf, size_t len, int echo, int verify, void *userdata)</td></tr> <tr class="memdesc:ga7c6a9d477c59ee65b3c03d77b510595f"><td class="mdescLeft"> </td><td class="mdescRight">SSH authentication callback. <a href="#ga7c6a9d477c59ee65b3c03d77b510595f">More...</a><br/></td></tr> <tr class="separator:ga7c6a9d477c59ee65b3c03d77b510595f"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ga6dd3c923f67d136837394cf53cc281ca"><td class="memItemLeft" align="right" valign="top">typedef void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="group__libssh__callbacks.html#ga6dd3c923f67d136837394cf53cc281ca">ssh_channel_close_callback</a> )(ssh_session session, ssh_channel channel, void *userdata)</td></tr> <tr class="memdesc:ga6dd3c923f67d136837394cf53cc281ca"><td class="mdescLeft"> </td><td class="mdescRight">SSH channel close callback. <a href="#ga6dd3c923f67d136837394cf53cc281ca">More...</a><br/></td></tr> <tr class="separator:ga6dd3c923f67d136837394cf53cc281ca"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ga2676f5018fc9a7a4034527a38636c1cb"><td class="memItemLeft" align="right" valign="top">typedef int(* </td><td class="memItemRight" valign="bottom"><a class="el" href="group__libssh__callbacks.html#ga2676f5018fc9a7a4034527a38636c1cb">ssh_channel_data_callback</a> )(ssh_session session, ssh_channel channel, void *data, uint32_t len, int is_stderr, void *userdata)</td></tr> <tr class="memdesc:ga2676f5018fc9a7a4034527a38636c1cb"><td class="mdescLeft"> </td><td class="mdescRight">SSH channel data callback. <a href="#ga2676f5018fc9a7a4034527a38636c1cb">More...</a><br/></td></tr> <tr class="separator:ga2676f5018fc9a7a4034527a38636c1cb"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ga0b5a09075bab3711b50d079d403eded5"><td class="memItemLeft" align="right" valign="top">typedef void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="group__libssh__callbacks.html#ga0b5a09075bab3711b50d079d403eded5">ssh_channel_eof_callback</a> )(ssh_session session, ssh_channel channel, void *userdata)</td></tr> <tr class="memdesc:ga0b5a09075bab3711b50d079d403eded5"><td class="mdescLeft"> </td><td class="mdescRight">SSH channel eof callback. <a href="#ga0b5a09075bab3711b50d079d403eded5">More...</a><br/></td></tr> <tr class="separator:ga0b5a09075bab3711b50d079d403eded5"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ga9ea789f1b8b71edf89b86a0af810cd0e"><td class="memItemLeft" align="right" valign="top">typedef void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="group__libssh__callbacks.html#ga9ea789f1b8b71edf89b86a0af810cd0e">ssh_channel_exit_signal_callback</a> )(ssh_session session, ssh_channel channel, const char *signal, int core, const char *errmsg, const char *lang, void *userdata)</td></tr> <tr class="memdesc:ga9ea789f1b8b71edf89b86a0af810cd0e"><td class="mdescLeft"> </td><td class="mdescRight">SSH channel exit signal callback. <a href="#ga9ea789f1b8b71edf89b86a0af810cd0e">More...</a><br/></td></tr> <tr class="separator:ga9ea789f1b8b71edf89b86a0af810cd0e"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:gabad42498382063acdcd67dc931d67f9f"><td class="memItemLeft" align="right" valign="top">typedef void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="group__libssh__callbacks.html#gabad42498382063acdcd67dc931d67f9f">ssh_channel_exit_status_callback</a> )(ssh_session session, ssh_channel channel, int exit_status, void *userdata)</td></tr> <tr class="memdesc:gabad42498382063acdcd67dc931d67f9f"><td class="mdescLeft"> </td><td class="mdescRight">SSH channel exit status callback. <a href="#gabad42498382063acdcd67dc931d67f9f">More...</a><br/></td></tr> <tr class="separator:gabad42498382063acdcd67dc931d67f9f"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ga56787ff30d1f2a76dafc4f7cd1744ae7"><td class="memItemLeft" align="right" valign="top">typedef void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="group__libssh__callbacks.html#ga56787ff30d1f2a76dafc4f7cd1744ae7">ssh_channel_signal_callback</a> )(ssh_session session, ssh_channel channel, const char *signal, void *userdata)</td></tr> <tr class="memdesc:ga56787ff30d1f2a76dafc4f7cd1744ae7"><td class="mdescLeft"> </td><td class="mdescRight">SSH channel signal callback. <a href="#ga56787ff30d1f2a76dafc4f7cd1744ae7">More...</a><br/></td></tr> <tr class="separator:ga56787ff30d1f2a76dafc4f7cd1744ae7"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ga649b6ab88336adf945a0def9efb80fbe"><td class="memItemLeft" align="right" valign="top">typedef void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="group__libssh__callbacks.html#ga649b6ab88336adf945a0def9efb80fbe">ssh_global_request_callback</a> )(ssh_session session, ssh_message message, void *userdata)</td></tr> <tr class="memdesc:ga649b6ab88336adf945a0def9efb80fbe"><td class="mdescLeft"> </td><td class="mdescRight">SSH global request callback. <a href="#ga649b6ab88336adf945a0def9efb80fbe">More...</a><br/></td></tr> <tr class="separator:ga649b6ab88336adf945a0def9efb80fbe"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:gad1b724cd0c1cfb92e80ce4f51cadfdfd"><td class="memItemLeft" align="right" valign="top">typedef void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="group__libssh__callbacks.html#gad1b724cd0c1cfb92e80ce4f51cadfdfd">ssh_log_callback</a> )(ssh_session session, int priority, const char *message, void *userdata)</td></tr> <tr class="memdesc:gad1b724cd0c1cfb92e80ce4f51cadfdfd"><td class="mdescLeft"> </td><td class="mdescRight">SSH log callback. <a href="#gad1b724cd0c1cfb92e80ce4f51cadfdfd">More...</a><br/></td></tr> <tr class="separator:gad1b724cd0c1cfb92e80ce4f51cadfdfd"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ga41076189f34fb00a54bc54f58832fbae"><td class="memItemLeft" align="right" valign="top">typedef int(* </td><td class="memItemRight" valign="bottom"><a class="el" href="group__libssh__callbacks.html#ga41076189f34fb00a54bc54f58832fbae">ssh_packet_callback</a> )(ssh_session session, uint8_t type, ssh_buffer packet, void *user)</td></tr> <tr class="memdesc:ga41076189f34fb00a54bc54f58832fbae"><td class="mdescLeft"> </td><td class="mdescRight">Prototype for a packet callback, to be called when a new packet arrives. <a href="#ga41076189f34fb00a54bc54f58832fbae">More...</a><br/></td></tr> <tr class="separator:ga41076189f34fb00a54bc54f58832fbae"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ga2c8dca5a8a40b6e567a1a01c28c01804"><td class="memItemLeft" align="right" valign="top">typedef void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="group__libssh__callbacks.html#ga2c8dca5a8a40b6e567a1a01c28c01804">ssh_status_callback</a> )(ssh_session session, float status, void *userdata)</td></tr> <tr class="memdesc:ga2c8dca5a8a40b6e567a1a01c28c01804"><td class="mdescLeft"> </td><td class="mdescRight">SSH Connection status callback. <a href="#ga2c8dca5a8a40b6e567a1a01c28c01804">More...</a><br/></td></tr> <tr class="separator:ga2c8dca5a8a40b6e567a1a01c28c01804"><td class="memSeparator" colspan="2"> </td></tr> </table><table class="memberdecls"> <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a> Functions</h2></td></tr> <tr class="memitem:ga2e4b0507c738748a3f10e43fe201fe09"><td class="memItemLeft" align="right" valign="top">LIBSSH_API int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__libssh__callbacks.html#ga2e4b0507c738748a3f10e43fe201fe09">ssh_set_callbacks</a> (ssh_session session, ssh_callbacks cb)</td></tr> <tr class="memdesc:ga2e4b0507c738748a3f10e43fe201fe09"><td class="mdescLeft"> </td><td class="mdescRight">Set the session callback functions. <a href="#ga2e4b0507c738748a3f10e43fe201fe09">More...</a><br/></td></tr> <tr class="separator:ga2e4b0507c738748a3f10e43fe201fe09"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:gacea52d1373970a4922bf60e6b1680919"><td class="memItemLeft" align="right" valign="top">LIBSSH_API int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__libssh__callbacks.html#gacea52d1373970a4922bf60e6b1680919">ssh_set_channel_callbacks</a> (ssh_channel channel, ssh_channel_callbacks cb)</td></tr> <tr class="memdesc:gacea52d1373970a4922bf60e6b1680919"><td class="mdescLeft"> </td><td class="mdescRight">Set the channel callback functions. <a href="#gacea52d1373970a4922bf60e6b1680919">More...</a><br/></td></tr> <tr class="separator:gacea52d1373970a4922bf60e6b1680919"><td class="memSeparator" colspan="2"> </td></tr> </table> <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> <p>Callback which can be replaced in libssh. </p> <h2 class="groupheader">Macro Definition Documentation</h2> <a class="anchor" id="gafe09b81e5346f0babe288dc38113d289"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define ssh_callbacks_init</td> <td>(</td> <td class="paramtype"> </td> <td class="paramname">p</td><td>)</td> <td></td> </tr> </table> </div><div class="memdoc"> <b>Value:</b><div class="fragment"><div class="line"><span class="keywordflow">do</span> {\</div> <div class="line"> (p)->size=<span class="keyword">sizeof</span>(*(p)); \</div> <div class="line">} <span class="keywordflow">while</span>(0);</div> </div><!-- fragment --> <p>Initializes an <a class="el" href="structssh__callbacks__struct.html" title="The structure to replace libssh functions with appropriate callbacks.">ssh_callbacks_struct</a> A call to this macro is mandatory when you have set a new ssh_callback_struct structure. </p> <p>Its goal is to maintain the binary compatibility with future versions of libssh as the structure evolves with time. </p> </div> </div> <a class="anchor" id="ga8fd26956f4e2b9bc57cfef26c50e321b"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define SSH_PACKET_CALLBACK</td> <td>(</td> <td class="paramtype"> </td> <td class="paramname">name</td><td>)</td> <td>   int name (ssh_session session, uint8_t type, ssh_buffer packet, void *user)</td> </tr> </table> </div><div class="memdoc"> <p>This macro declares a packet callback handler. </p> <div class="fragment"><div class="line"><a class="code" href="group__libssh__callbacks.html#ga8fd26956f4e2b9bc57cfef26c50e321b" title="This macro declares a packet callback handler.">SSH_PACKET_CALLBACK</a>(mycallback){</div> <div class="line">...</div> <div class="line">}</div> </div><!-- fragment --> </div> </div> <a class="anchor" id="gac29df803aa1295d6a498c1b081f3b494"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define SSH_PACKET_USED   1</td> </tr> </table> </div><div class="memdoc"> <p>return values for a ssh_packet_callback </p> <p>Packet was used and should not be parsed by another callback </p> </div> </div> <h2 class="groupheader">Typedef Documentation</h2> <a class="anchor" id="ga7c6a9d477c59ee65b3c03d77b510595f"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">typedef int(* ssh_auth_callback)(const char *prompt, char *buf, size_t len, int echo, int verify, void *userdata)</td> </tr> </table> </div><div class="memdoc"> <p>SSH authentication callback. </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">prompt</td><td>Prompt to be displayed. </td></tr> <tr><td class="paramname">buf</td><td>Buffer to save the password. You should null-terminate it. </td></tr> <tr><td class="paramname">len</td><td>Length of the buffer. </td></tr> <tr><td class="paramname">echo</td><td>Enable or disable the echo of what you type. </td></tr> <tr><td class="paramname">verify</td><td>Should the password be verified? </td></tr> <tr><td class="paramname">userdata</td><td>Userdata to be passed to the callback function. Useful for GUI applications.</td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>0 on success, < 0 on error. </dd></dl> </div> </div> <a class="anchor" id="ga6dd3c923f67d136837394cf53cc281ca"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">typedef void(* ssh_channel_close_callback)(ssh_session session, ssh_channel channel, void *userdata)</td> </tr> </table> </div><div class="memdoc"> <p>SSH channel close callback. </p> <p>Called when a channel is closed by remote peer </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">session</td><td>Current session handler </td></tr> <tr><td class="paramname">channel</td><td>the actual channel </td></tr> <tr><td class="paramname">userdata</td><td>Userdata to be passed to the callback function. </td></tr> </table> </dd> </dl> </div> </div> <a class="anchor" id="ga2676f5018fc9a7a4034527a38636c1cb"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">typedef int(* ssh_channel_data_callback)(ssh_session session, ssh_channel channel, void *data, uint32_t len, int is_stderr, void *userdata)</td> </tr> </table> </div><div class="memdoc"> <p>SSH channel data callback. </p> <p>Called when data is available on a channel </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">session</td><td>Current session handler </td></tr> <tr><td class="paramname">channel</td><td>the actual channel </td></tr> <tr><td class="paramname">data</td><td>the data that has been read on the channel </td></tr> <tr><td class="paramname">len</td><td>the length of the data </td></tr> <tr><td class="paramname">is_stderr</td><td>is 0 for stdout or 1 for stderr </td></tr> <tr><td class="paramname">userdata</td><td>Userdata to be passed to the callback function. </td></tr> </table> </dd> </dl> </div> </div> <a class="anchor" id="ga0b5a09075bab3711b50d079d403eded5"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">typedef void(* ssh_channel_eof_callback)(ssh_session session, ssh_channel channel, void *userdata)</td> </tr> </table> </div><div class="memdoc"> <p>SSH channel eof callback. </p> <p>Called when a channel receives EOF </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">session</td><td>Current session handler </td></tr> <tr><td class="paramname">channel</td><td>the actual channel </td></tr> <tr><td class="paramname">userdata</td><td>Userdata to be passed to the callback function. </td></tr> </table> </dd> </dl> </div> </div> <a class="anchor" id="ga9ea789f1b8b71edf89b86a0af810cd0e"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">typedef void(* ssh_channel_exit_signal_callback)(ssh_session session, ssh_channel channel, const char *signal, int core, const char *errmsg, const char *lang, void *userdata)</td> </tr> </table> </div><div class="memdoc"> <p>SSH channel exit signal callback. </p> <p>Called when a channel has received an exit signal </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">session</td><td>Current session handler </td></tr> <tr><td class="paramname">channel</td><td>the actual channel </td></tr> <tr><td class="paramname">signal</td><td>the signal name (without the SIG prefix) </td></tr> <tr><td class="paramname">core</td><td>a boolean telling wether a core has been dumped or not </td></tr> <tr><td class="paramname">errmsg</td><td>the description of the exception </td></tr> <tr><td class="paramname">lang</td><td>the language of the description (format: RFC 3066) </td></tr> <tr><td class="paramname">userdata</td><td>Userdata to be passed to the callback function. </td></tr> </table> </dd> </dl> </div> </div> <a class="anchor" id="gabad42498382063acdcd67dc931d67f9f"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">typedef void(* ssh_channel_exit_status_callback)(ssh_session session, ssh_channel channel, int exit_status, void *userdata)</td> </tr> </table> </div><div class="memdoc"> <p>SSH channel exit status callback. </p> <p>Called when a channel has received an exit status </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">session</td><td>Current session handler </td></tr> <tr><td class="paramname">channel</td><td>the actual channel </td></tr> <tr><td class="paramname">userdata</td><td>Userdata to be passed to the callback function. </td></tr> </table> </dd> </dl> </div> </div> <a class="anchor" id="ga56787ff30d1f2a76dafc4f7cd1744ae7"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">typedef void(* ssh_channel_signal_callback)(ssh_session session, ssh_channel channel, const char *signal, void *userdata)</td> </tr> </table> </div><div class="memdoc"> <p>SSH channel signal callback. </p> <p>Called when a channel has received a signal </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">session</td><td>Current session handler </td></tr> <tr><td class="paramname">channel</td><td>the actual channel </td></tr> <tr><td class="paramname">signal</td><td>the signal name (without the SIG prefix) </td></tr> <tr><td class="paramname">userdata</td><td>Userdata to be passed to the callback function. </td></tr> </table> </dd> </dl> </div> </div> <a class="anchor" id="ga649b6ab88336adf945a0def9efb80fbe"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">typedef void(* ssh_global_request_callback)(ssh_session session, ssh_message message, void *userdata)</td> </tr> </table> </div><div class="memdoc"> <p>SSH global request callback. </p> <p>All global request will go through this callback. </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">session</td><td>Current session handler </td></tr> <tr><td class="paramname">message</td><td>the actual message </td></tr> <tr><td class="paramname">userdata</td><td>Userdata to be passed to the callback function. </td></tr> </table> </dd> </dl> </div> </div> <a class="anchor" id="gad1b724cd0c1cfb92e80ce4f51cadfdfd"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">typedef void(* ssh_log_callback)(ssh_session session, int priority, const char *message, void *userdata)</td> </tr> </table> </div><div class="memdoc"> <p>SSH log callback. </p> <p>All logging messages will go through this callback </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">session</td><td>Current session handler </td></tr> <tr><td class="paramname">priority</td><td>Priority of the log, the smaller being the more important </td></tr> <tr><td class="paramname">message</td><td>the actual message </td></tr> <tr><td class="paramname">userdata</td><td>Userdata to be passed to the callback function. </td></tr> </table> </dd> </dl> </div> </div> <a class="anchor" id="ga41076189f34fb00a54bc54f58832fbae"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">typedef int(* ssh_packet_callback)(ssh_session session, uint8_t type, ssh_buffer packet, void *user)</td> </tr> </table> </div><div class="memdoc"> <p>Prototype for a packet callback, to be called when a new packet arrives. </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">session</td><td>The current session of the packet </td></tr> <tr><td class="paramname">type</td><td>packet type (see <a class="el" href="ssh2_8h_source.html">ssh2.h</a>) </td></tr> <tr><td class="paramname">packet</td><td>buffer containing the packet, excluding size, type and padding fields </td></tr> <tr><td class="paramname">user</td><td>user argument to the callback and are called each time a packet shows up </td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>SSH_PACKET_USED Packet was parsed and used </dd> <dd> SSH_PACKET_NOT_USED Packet was not used or understood, processing must continue </dd></dl> </div> </div> <a class="anchor" id="ga2c8dca5a8a40b6e567a1a01c28c01804"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">typedef void(* ssh_status_callback)(ssh_session session, float status, void *userdata)</td> </tr> </table> </div><div class="memdoc"> <p>SSH Connection status callback. </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">session</td><td>Current session handler </td></tr> <tr><td class="paramname">status</td><td>Percentage of connection status, going from 0.0 to 1.0 once connection is done. </td></tr> <tr><td class="paramname">userdata</td><td>Userdata to be passed to the callback function. </td></tr> </table> </dd> </dl> </div> </div> <h2 class="groupheader">Function Documentation</h2> <a class="anchor" id="ga2e4b0507c738748a3f10e43fe201fe09"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">LIBSSH_API int ssh_set_callbacks </td> <td>(</td> <td class="paramtype">ssh_session </td> <td class="paramname"><em>session</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">ssh_callbacks </td> <td class="paramname"><em>cb</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p>Set the session callback functions. </p> <p>This functions sets the callback structure to use your own callback functions for auth, logging and status.</p> <div class="fragment"><div class="line"><span class="keyword">struct </span><a class="code" href="structssh__callbacks__struct.html" title="The structure to replace libssh functions with appropriate callbacks.">ssh_callbacks_struct</a> cb = {</div> <div class="line"> .<a class="code" href="structssh__callbacks__struct.html#a319d5838c0e75ed3917ea5021a3f8448" title="User-provided data.">userdata</a> = data,</div> <div class="line"> .auth_function = my_auth_function</div> <div class="line">};</div> <div class="line"><a class="code" href="group__libssh__callbacks.html#gafe09b81e5346f0babe288dc38113d289" title="Initializes an ssh_callbacks_struct A call to this macro is mandatory when you have set a new ssh_cal...">ssh_callbacks_init</a>(&cb);</div> <div class="line"><a class="code" href="group__libssh__callbacks.html#ga2e4b0507c738748a3f10e43fe201fe09" title="Set the session callback functions.">ssh_set_callbacks</a>(session, &cb);</div> </div><!-- fragment --><dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">session</td><td>The session to set the callback structure.</td></tr> <tr><td class="paramname">cb</td><td>The callback structure itself.</td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>SSH_OK on success, SSH_ERROR on error. </dd></dl> </div> </div> <a class="anchor" id="gacea52d1373970a4922bf60e6b1680919"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">LIBSSH_API int ssh_set_channel_callbacks </td> <td>(</td> <td class="paramtype">ssh_channel </td> <td class="paramname"><em>channel</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">ssh_channel_callbacks </td> <td class="paramname"><em>cb</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p>Set the channel callback functions. </p> <p>This functions sets the callback structure to use your own callback functions for channel data and exceptions</p> <div class="fragment"><div class="line"><span class="keyword">struct </span>ssh_channel_callbacks_struct cb = {</div> <div class="line"> .<a class="code" href="structssh__callbacks__struct.html#a319d5838c0e75ed3917ea5021a3f8448" title="User-provided data.">userdata</a> = data,</div> <div class="line"> .channel_data = my_channel_data_function</div> <div class="line">};</div> <div class="line"><a class="code" href="group__libssh__callbacks.html#gafe09b81e5346f0babe288dc38113d289" title="Initializes an ssh_callbacks_struct A call to this macro is mandatory when you have set a new ssh_cal...">ssh_callbacks_init</a>(&cb);</div> <div class="line"><a class="code" href="group__libssh__callbacks.html#gacea52d1373970a4922bf60e6b1680919" title="Set the channel callback functions.">ssh_set_channel_callbacks</a>(channel, &cb);</div> </div><!-- fragment --><dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">channel</td><td>The channel to set the callback structure.</td></tr> <tr><td class="paramname">cb</td><td>The callback structure itself.</td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>SSH_OK on success, SSH_ERROR on error. </dd></dl> </div> </div> </div><!-- contents --> <!-- start footer part --> <hr class="footer"/><address class="footer"><small> Generated by  <a href="http://www.doxygen.org/index.html"> <img class="footer" src="doxygen.png" alt="doxygen"/> </a> 1.8.3.1 </small></address> </body> </html>