public object ProcessRequest(HttpListenerContext httpContext, Interfaces.IHttpRequestProcessor requestProcessor, bool sendResponse)
        {
            System.IO.BinaryReader objReader = null;
            System.Xml.XmlDocument objDOM = null;
            byte[] arrInputBuffer = null;
            byte[] arrOutputBuffer = null;
            string strInputXML = string.Empty;
            object objResponse = null;

            if (httpContext.Request.ContentLength64 > 0 && httpContext.Request.InputStream.CanRead)
            {
                objReader = new System.IO.BinaryReader(httpContext.Request.InputStream);
                arrInputBuffer = new byte[httpContext.Request.ContentLength64];
                arrInputBuffer = objReader.ReadBytes(arrInputBuffer.Length);
                strInputXML = System.Text.ASCIIEncoding.UTF8.GetString(arrInputBuffer);
                objDOM = new System.Xml.XmlDocument();
                objDOM.LoadXml(strInputXML);

                // Process the Xml message
                objResponse = requestProcessor.Process(objDOM);
                if (sendResponse && objResponse != null)
                {
                    if (objResponse is string)
                    {
                        arrOutputBuffer = System.Text.Encoding.ASCII.GetBytes((string)objResponse);

                        // Send Response
                        httpContext.Response.ContentType = "text/xml";
                        httpContext.Response.OutputStream.Write(arrOutputBuffer, 0, arrOutputBuffer.Length);
                        httpContext.Response.OutputStream.Close();

                        // TODO: (Possibly) Audit trail for the Output message sent to client
                    }
                }
            }
            else
            {
                objResponse = httpContext.Request.Url.OriginalString;
            }

            return objResponse;
        }