internal static void SendFault(IConnection connection, string faultString, byte[] drainBuffer, TimeSpan sendTimeout, int maxRead) { if (TD.ConnectionReaderSendFaultIsEnabled()) { TD.ConnectionReaderSendFault(faultString); } EncodedFault encodedFault = new EncodedFault(faultString); TimeoutHelper timeoutHelper = new TimeoutHelper(sendTimeout); try { connection.Write(encodedFault.EncodedBytes, 0, encodedFault.EncodedBytes.Length, true, timeoutHelper.RemainingTime()); connection.Shutdown(timeoutHelper.RemainingTime()); } catch (CommunicationException e) { DiagnosticUtility.TraceHandledException(e, TraceEventType.Information); connection.Abort(); return; } catch (TimeoutException e) { if (TD.SendTimeoutIsEnabled()) { TD.SendTimeout(e.Message); } DiagnosticUtility.TraceHandledException(e, TraceEventType.Information); connection.Abort(); return; } // make sure we read until EOF or a quota is hit int read = 0; int readTotal = 0; for (;;) { try { read = connection.Read(drainBuffer, 0, drainBuffer.Length, timeoutHelper.RemainingTime()); } catch (CommunicationException e) { DiagnosticUtility.TraceHandledException(e, TraceEventType.Information); connection.Abort(); return; } catch (TimeoutException e) { if (TD.SendTimeoutIsEnabled()) { TD.SendTimeout(e.Message); } DiagnosticUtility.TraceHandledException(e, TraceEventType.Information); connection.Abort(); return; } if (read == 0) { break; } readTotal += read; if (readTotal > maxRead || timeoutHelper.RemainingTime() <= TimeSpan.Zero) { connection.Abort(); return; } } ConnectionUtilities.CloseNoThrow(connection, timeoutHelper.RemainingTime()); }
internal static void SendFault(IConnection connection, string faultString, byte[] drainBuffer, TimeSpan sendTimeout, int maxRead) { if (TD.ConnectionReaderSendFaultIsEnabled()) { TD.ConnectionReaderSendFault(faultString); } EncodedFault encodedFault = new EncodedFault(faultString); TimeoutHelper timeoutHelper = new TimeoutHelper(sendTimeout); try { connection.Write(encodedFault.EncodedBytes, 0, encodedFault.EncodedBytes.Length, true, timeoutHelper.RemainingTime()); connection.Shutdown(timeoutHelper.RemainingTime()); } catch (CommunicationException e) { DiagnosticUtility.TraceHandledException(e, TraceEventType.Information); connection.Abort(); return; } catch (TimeoutException e) { if (TD.SendTimeoutIsEnabled()) { TD.SendTimeout(e.Message); } DiagnosticUtility.TraceHandledException(e, TraceEventType.Information); connection.Abort(); return; } // make sure we read until EOF or a quota is hit int read = 0; int readTotal = 0; for (;;) { try { read = connection.Read(drainBuffer, 0, drainBuffer.Length, timeoutHelper.RemainingTime()); } catch (CommunicationException e) { DiagnosticUtility.TraceHandledException(e, TraceEventType.Information); connection.Abort(); return; } catch (TimeoutException e) { if (TD.SendTimeoutIsEnabled()) { TD.SendTimeout(e.Message); } DiagnosticUtility.TraceHandledException(e, TraceEventType.Information); connection.Abort(); return; } if (read == 0) break; readTotal += read; if (readTotal > maxRead || timeoutHelper.RemainingTime() <= TimeSpan.Zero) { connection.Abort(); return; } } ConnectionUtilities.CloseNoThrow(connection, timeoutHelper.RemainingTime()); }
internal static void SendFault(IConnection connection, string faultString, byte[] drainBuffer, TimeSpan sendTimeout, int maxRead) { EncodedFault fault = new EncodedFault(faultString); TimeoutHelper helper = new TimeoutHelper(sendTimeout); try { connection.Write(fault.EncodedBytes, 0, fault.EncodedBytes.Length, true, helper.RemainingTime()); connection.Shutdown(helper.RemainingTime()); } catch (CommunicationException exception) { if (DiagnosticUtility.ShouldTraceInformation) { DiagnosticUtility.ExceptionUtility.TraceHandledException(exception, TraceEventType.Information); } connection.Abort(); return; } catch (TimeoutException exception2) { if (DiagnosticUtility.ShouldTraceInformation) { DiagnosticUtility.ExceptionUtility.TraceHandledException(exception2, TraceEventType.Information); } connection.Abort(); return; } int num = 0; int num2 = 0; do { try { num = connection.Read(drainBuffer, 0, drainBuffer.Length, helper.RemainingTime()); } catch (CommunicationException exception3) { if (DiagnosticUtility.ShouldTraceInformation) { DiagnosticUtility.ExceptionUtility.TraceHandledException(exception3, TraceEventType.Information); } connection.Abort(); return; } catch (TimeoutException exception4) { if (DiagnosticUtility.ShouldTraceInformation) { DiagnosticUtility.ExceptionUtility.TraceHandledException(exception4, TraceEventType.Information); } connection.Abort(); return; } if (num == 0) { ConnectionUtilities.CloseNoThrow(connection, helper.RemainingTime()); return; } num2 += num; }while ((num2 <= maxRead) && (helper.RemainingTime() > TimeSpan.Zero)); connection.Abort(); }