public void SetPreferredMethods( LIBSSH2_METHOD methodType, string[] methods) { this.sessionHandle.CheckCurrentThreadOwnsHandle(); if (!Enum.IsDefined(typeof(LIBSSH2_METHOD), methodType)) { throw new ArgumentException(nameof(methodType)); } if (methods == null || methods.Length == 0) { throw new ArgumentException(nameof(methods)); } using (SshTraceSources.Default.TraceMethod().WithParameters( methodType, methods)) { var prefs = string.Join(",", methods); var result = (LIBSSH2_ERROR)UnsafeNativeMethods.libssh2_session_method_pref( this.sessionHandle, methodType, prefs); if (result != LIBSSH2_ERROR.NONE) { throw CreateException(result); } } }
//--------------------------------------------------------------------- // Algorithms. //--------------------------------------------------------------------- public string[] GetActiveAlgorithms(LIBSSH2_METHOD methodType) { this.session.Handle.CheckCurrentThreadOwnsHandle(); if (!Enum.IsDefined(typeof(LIBSSH2_METHOD), methodType)) { throw new ArgumentException(nameof(methodType)); } using (SshTraceSources.Default.TraceMethod().WithParameters(methodType)) { var stringPtr = UnsafeNativeMethods.libssh2_session_methods( this.session.Handle, methodType); if (stringPtr == IntPtr.Zero) { return(Array.Empty <string>()); } else { var algorithmList = Marshal.PtrToStringAnsi(stringPtr); return(algorithmList.Split(',').ToArray()); } } }
//--------------------------------------------------------------------- // Algorithms. //--------------------------------------------------------------------- public string[] GetSupportedAlgorithms(LIBSSH2_METHOD methodType) { this.sessionHandle.CheckCurrentThreadOwnsHandle(); if (!Enum.IsDefined(typeof(LIBSSH2_METHOD), methodType)) { throw new ArgumentException(nameof(methodType)); } using (SshTraceSources.Default.TraceMethod().WithParameters(methodType)) { int count = UnsafeNativeMethods.libssh2_session_supported_algs( this.sessionHandle, methodType, out IntPtr algorithmsPtrPtr); if (count > 0 && algorithmsPtrPtr != IntPtr.Zero) { var algorithmsPtrs = new IntPtr[count]; Marshal.Copy(algorithmsPtrPtr, algorithmsPtrs, 0, algorithmsPtrs.Length); var algorithms = algorithmsPtrs .Select(ptr => Marshal.PtrToStringAnsi(ptr)) .ToArray(); UnsafeNativeMethods.libssh2_free( this.sessionHandle, algorithmsPtrPtr); return(algorithms); } else if (count < 0) { throw CreateException((LIBSSH2_ERROR)count); } else { return(Array.Empty <string>()); } } }
public static extern Int32 libssh2_session_method_pref( SshSessionHandle session, LIBSSH2_METHOD methodType, [MarshalAs(UnmanagedType.LPStr)] string prefs);
public static extern Int32 libssh2_session_supported_algs( SshSessionHandle session, LIBSSH2_METHOD methodType, [Out] out IntPtr algorithmsPtrPtr);
public static extern IntPtr libssh2_session_methods( SshSessionHandle session, LIBSSH2_METHOD methodType);