Revenj.Http.HttpSocketContext.ReturnError C# (CSharp) Method

ReturnError() private method

private ReturnError ( Socket socket, int status, string message, bool withHeaders ) : void
socket Socket
status int
message string
withHeaders bool
return void
        internal void ReturnError(Socket socket, int status, string message, bool withHeaders)
        {
            if (!socket.Connected)
            {
                offsetInOutput = 0;
                return;
            }
            var http = HttpResponse[status - 100];
            var offset = offsetInOutput;
            Buffer.BlockCopy(http, 0, OutputTemp, offset, http.Length);
            offset += http.Length;
            offsetInOutput = 0;
            Buffer.BlockCopy(ConnectionClose, 0, OutputTemp, offset, ConnectionClose.Length);
            offset += ConnectionClose.Length;
            offset = AddServerAndDate(offset);
            socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.KeepAlive, false);
            if (message == null)
            {
                Buffer.BlockCopy(ZeroContentLength, 0, OutputTemp, offset, ZeroContentLength.Length);
                socket.Send(OutputTemp, offset + ZeroContentLength.Length, SocketFlags.None);
                socket.Close();
                return;
            }
            if (withHeaders)
            {
                for (int x = 0; x < ResponseHeadersLength; x++)
                {
                    var kv = ResponseHeaders[x];
                    offset += ASCII.GetBytes(kv.Key, 0, kv.Key.Length, OutputTemp, offset);
                    OutputTemp[offset++] = 58;
                    OutputTemp[offset++] = 32;
                    offset += ASCII.GetBytes(kv.Value, 0, kv.Value.Length, OutputTemp, offset);
                    OutputTemp[offset++] = 13;
                    OutputTemp[offset++] = 10;
                }
            }
            Buffer.BlockCopy(PlainTextContentType, 0, OutputTemp, offset, PlainTextContentType.Length);
            offset += PlainTextContentType.Length;
            var len = UTF8.GetByteCount(message);
            offset = AddContentLength(len, offset);
            offset += UTF8.GetBytes(message, 0, message.Length, OutputTemp, offset);
            socket.Send(OutputTemp, offset, SocketFlags.None);
            socket.Close();
            return;
        }

Same methods

HttpSocketContext::ReturnError ( Socket socket, int status ) : bool

Usage Example

Example #1
0
        private void LogError(Socket socket, HttpSocketContext ctx, Exception ex)
        {
            var sex = ex as SecurityException;
            var ans = ex as ActionNotSupportedException;

            if (sex != null)
            {
                try { ctx.ReturnError(socket, (int)HttpStatusCode.Forbidden, sex.Message, true); }
                catch (Exception e)
                {
                    TraceSource.TraceEvent(TraceEventType.Error, 5404, "{0}", e);
                }
            }
            else if (ans != null)
            {
                try { ctx.ReturnError(socket, 404, ans.Message, true); }
                catch (Exception e)
                {
                    TraceSource.TraceEvent(TraceEventType.Error, 5404, "{0}", e);
                }
            }
            else
            {
                TraceSource.TraceEvent(TraceEventType.Error, 5403, "{0}", ex);
                try { ctx.ReturnError(socket, 500, ex.Message, false); }
                catch (Exception ex2)
                {
                    TraceSource.TraceEvent(TraceEventType.Error, 5404, "{0}", ex2);
                }
            }
        }
All Usage Examples Of Revenj.Http.HttpSocketContext::ReturnError