in sources/Google.Solutions.Ssh/Native/NativeMethods.cs [180:347]
internal delegate IntPtr Alloc(
IntPtr size,
IntPtr context);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
internal delegate IntPtr Realloc(
IntPtr ptr,
IntPtr size,
IntPtr context);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
internal delegate void Free(
IntPtr ptr,
IntPtr context);
[DllImport(Libssh2, CallingConvention = CallingConvention.Cdecl)]
internal static extern Libssh2SessionHandle libssh2_session_init_ex(
Alloc alloc,
Free free,
Realloc realloc,
IntPtr context);
[DllImport(Libssh2, CallingConvention = CallingConvention.Cdecl)]
internal static extern Int32 libssh2_free(
Libssh2SessionHandle session,
IntPtr ptr);
[DllImport(Libssh2, CallingConvention = CallingConvention.Cdecl)]
internal static extern Int32 libssh2_session_free(
IntPtr session);
[DllImport(Libssh2, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
internal static extern Int32 libssh2_session_disconnect_ex(
Libssh2SessionHandle session,
SSH_DISCONNECT reason,
[MarshalAs(UnmanagedType.LPStr)] string? description,
[MarshalAs(UnmanagedType.LPStr)] string? lang);
[DllImport(Libssh2, CallingConvention = CallingConvention.Cdecl)]
internal static extern Int32 libssh2_session_get_blocking(
Libssh2SessionHandle session);
[DllImport(Libssh2, CallingConvention = CallingConvention.Cdecl)]
internal static extern void libssh2_session_set_blocking(
Libssh2SessionHandle session,
Int32 blocking);
//---------------------------------------------------------------------
// Algorithm functions.
//---------------------------------------------------------------------
[DllImport(Libssh2, CallingConvention = CallingConvention.Cdecl)]
internal static extern IntPtr libssh2_session_methods(
Libssh2SessionHandle session,
LIBSSH2_METHOD methodType);
[DllImport(Libssh2, CallingConvention = CallingConvention.Cdecl)]
internal static extern Int32 libssh2_session_supported_algs(
Libssh2SessionHandle session,
LIBSSH2_METHOD methodType,
[Out] out IntPtr algorithmsPtrPtr);
[DllImport(Libssh2, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
internal static extern Int32 libssh2_session_method_pref(
Libssh2SessionHandle session,
LIBSSH2_METHOD methodType,
[MarshalAs(UnmanagedType.LPStr)] string prefs);
//---------------------------------------------------------------------
// Banner functions.
//---------------------------------------------------------------------
[DllImport(Libssh2, CallingConvention = CallingConvention.Cdecl)]
internal static extern IntPtr libssh2_session_banner_get(
Libssh2SessionHandle session);
[DllImport(Libssh2, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
internal static extern Int32 libssh2_session_banner_set(
Libssh2SessionHandle session,
[MarshalAs(UnmanagedType.LPStr)] string banner);
//---------------------------------------------------------------------
// Handshake functions.
//---------------------------------------------------------------------
//
// NB. This function hangs when using libssh2 1.9.0 on Windows 10 1903.
// https://github.com/libssh2/libssh2/issues/388
//
[DllImport(Libssh2, CallingConvention = CallingConvention.Cdecl)]
internal static extern Int32 libssh2_session_handshake(
Libssh2SessionHandle session,
IntPtr socket);
//---------------------------------------------------------------------
// Hostkey functions.
//---------------------------------------------------------------------
[DllImport(Libssh2, CallingConvention = CallingConvention.Cdecl)]
internal static extern IntPtr libssh2_session_hostkey(
Libssh2SessionHandle session,
out IntPtr length,
out LIBSSH2_HOSTKEY_TYPE type);
[DllImport(Libssh2, CallingConvention = CallingConvention.Cdecl)]
internal static extern IntPtr libssh2_hostkey_hash(
Libssh2SessionHandle session,
LIBSSH2_HOSTKEY_HASH hashType);
//---------------------------------------------------------------------
// Timeout.
//---------------------------------------------------------------------
[DllImport(Libssh2, CallingConvention = CallingConvention.Cdecl)]
internal static extern int libssh2_session_get_timeout(
Libssh2SessionHandle session);
[DllImport(Libssh2, CallingConvention = CallingConvention.Cdecl)]
internal static extern void libssh2_session_set_timeout(
Libssh2SessionHandle session,
int timeout);
//---------------------------------------------------------------------
// User auth.
//
// NB. The documentation on libssh2_userauth_publickey is extremely sparse.
// For a usage example, see:
// https://github.com/stuntbadger/GuacamoleServer/blob/master/src/common-ssh/ssh.c
//---------------------------------------------------------------------
[DllImport(Libssh2, CallingConvention = CallingConvention.Cdecl)]
internal static extern Int32 libssh2_userauth_authenticated(
Libssh2SessionHandle session);
[DllImport(Libssh2, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
internal static extern IntPtr libssh2_userauth_list(
Libssh2SessionHandle session,
[MarshalAs(UnmanagedType.LPStr)] string username,
int usernameLength);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
internal delegate int SignCallback(
IntPtr session,
out IntPtr signature,
out IntPtr signatureLength,
IntPtr data,
IntPtr dataLength,
IntPtr context);
[DllImport(Libssh2, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
internal static extern int libssh2_userauth_publickey(
Libssh2SessionHandle session,
[MarshalAs(UnmanagedType.LPStr)] string username,
[MarshalAs(UnmanagedType.LPArray)] byte[] publicKey,
IntPtr pemPublicKeyLength,
SignCallback callback,
IntPtr context);
[StructLayout(LayoutKind.Sequential)]
internal struct LIBSSH2_USERAUTH_KBDINT_PROMPT
{
internal IntPtr TextPtr;
internal int TextLength;
internal byte Echo;
}