コード例 #1
0
        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);
                }
            }
        }
コード例 #2
0
        //---------------------------------------------------------------------
        // 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());
                }
            }
        }
コード例 #3
0
        //---------------------------------------------------------------------
        // 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>());
                }
            }
        }
コード例 #4
0
 public static extern Int32 libssh2_session_method_pref(
     SshSessionHandle session,
     LIBSSH2_METHOD methodType,
     [MarshalAs(UnmanagedType.LPStr)] string prefs);
コード例 #5
0
 public static extern Int32 libssh2_session_supported_algs(
     SshSessionHandle session,
     LIBSSH2_METHOD methodType,
     [Out] out IntPtr algorithmsPtrPtr);
コード例 #6
0
 public static extern IntPtr libssh2_session_methods(
     SshSessionHandle session,
     LIBSSH2_METHOD methodType);