[Mono.Security]: Add 'MonoTlsProvider.SupportsCleanShutdown' and 'MonoTlsSettings...
[mono.git] / mcs / class / System / Mono.Btls / MonoBtlsContext.cs
index 08c2678a2276f6554da8f4b50d6127550b7b84bc..559db4aca5d4f8288686b51369d6324a1114f5fd 100644 (file)
@@ -300,7 +300,7 @@ namespace Mono.Btls
                        throw new NotImplementedException ();
                }
 
-               public override int Read (byte[] buffer, int offset, int size, out bool wantMore)
+               public override (int ret, bool wantMore) Read (byte[] buffer, int offset, int size)
                {
                        Debug ("Read: {0} {1} {2}", buffer.Length, offset, size);
 
@@ -313,27 +313,23 @@ namespace Mono.Btls
                                var status = ssl.Read (data, ref size);
                                Debug ("Read done: {0} {1}", status, size);
 
-                               if (status == MonoBtlsSslError.WantRead) {
-                                       wantMore = true;
-                                       return 0;
-                               } else if (status == MonoBtlsSslError.ZeroReturn) {
-                                       wantMore = false;
-                                       return size;
-                               } else if (status != MonoBtlsSslError.None) {
+                               if (status == MonoBtlsSslError.WantRead)
+                                       return (0, true);
+                               if (status == MonoBtlsSslError.ZeroReturn)
+                                       return (size, false);
+                               if (status != MonoBtlsSslError.None)
                                        throw GetException (status);
-                               }
 
                                if (size > 0)
                                        Marshal.Copy (data, buffer, offset, size);
 
-                               wantMore = false;
-                               return size;
+                               return (size, false);
                        } finally {
                                Marshal.FreeHGlobal (data);
                        }
                }
 
-               public override int Write (byte[] buffer, int offset, int size, out bool wantMore)
+               public override (int ret, bool wantMore) Write (byte[] buffer, int offset, int size)
                {
                        Debug ("Write: {0} {1} {2}", buffer.Length, offset, size);
 
@@ -347,15 +343,12 @@ namespace Mono.Btls
                                var status = ssl.Write (data, ref size);
                                Debug ("Write done: {0} {1}", status, size);
 
-                               if (status == MonoBtlsSslError.WantWrite) {
-                                       wantMore = true;
-                                       return 0;
-                               } else if (status != MonoBtlsSslError.None) {
+                               if (status == MonoBtlsSslError.WantWrite)
+                                       return (0, true);
+                               if (status != MonoBtlsSslError.None)
                                        throw GetException (status);
-                               }
 
-                               wantMore = false;
-                               return size;
+                               return (size, false);
                        } finally {
                                Marshal.FreeHGlobal (data);
                        }
@@ -364,7 +357,8 @@ namespace Mono.Btls
                public override void Shutdown ()
                {
                        Debug ("Shutdown!");
-//                     ssl.SetQuietShutdown ();
+                       if (Settings == null || !Settings.SendCloseNotify)
+                               ssl.SetQuietShutdown ();
                        ssl.Shutdown ();
                }