/// <summary>
        /// Parse the given HTTP request and return the roaming network
        /// for the given HTTP hostname and HTTP query parameter
        /// or an HTTP error response.
        /// </summary>
        /// <param name="HTTPRequest">A HTTP request.</param>
        /// <param name="HTTPServer">A HTTP server.</param>
        /// <param name="RoamingNetwork">The roaming network.</param>
        /// <param name="HTTPResponse">A HTTP error response.</param>
        /// <returns>True, when roaming network was found; false else.</returns>
        public static Boolean ParseRoamingNetwork(this HTTPRequest HTTPRequest,
                                                  HTTPServer <RoamingNetworks, RoamingNetwork> HTTPServer,
                                                  out RoamingNetwork RoamingNetwork,
                                                  out HTTPResponse HTTPResponse)
        {
            if (HTTPServer == null)
            {
                Console.WriteLine("HTTPServer == null!");
            }

            #region Initial checks

            if (HTTPRequest == null)
            {
                throw new ArgumentNullException("HTTPRequest", "The given HTTP request must not be null!");
            }

            if (HTTPServer == null)
            {
                throw new ArgumentNullException("HTTPServer", "The given HTTP server must not be null!");
            }

            #endregion

            RoamingNetwork_Id RoamingNetworkId;
            RoamingNetwork = null;
            HTTPResponse   = null;

            if (HTTPRequest.ParsedURLParameters.Length < 1)
            {
                HTTPResponse = new HTTPResponse.Builder(HTTPRequest)
                {
                    HTTPStatusCode = HTTPStatusCode.BadRequest,
                    Server         = HTTPServer.DefaultServerName,
                    Date           = DateTime.Now,
                };

                return(false);
            }

            if (!RoamingNetwork_Id.TryParse(HTTPRequest.ParsedURLParameters[0], out RoamingNetworkId))
            {
                HTTPResponse = new HTTPResponse.Builder(HTTPRequest)
                {
                    HTTPStatusCode = HTTPStatusCode.BadRequest,
                    Server         = HTTPServer.DefaultServerName,
                    Date           = DateTime.Now,
                    ContentType    = HTTPContentType.JSON_UTF8,
                    Content        = @"{ ""description"": ""Invalid RoamingNetworkId!"" }".ToUTF8Bytes()
                };

                return(false);
            }

            RoamingNetwork = HTTPServer.
                             GetAllTenants(HTTPRequest.Host).
                             FirstOrDefault(roamingnetwork => roamingnetwork.Id == RoamingNetworkId);

            if (RoamingNetwork == null)
            {
                HTTPResponse = new HTTPResponse.Builder(HTTPRequest)
                {
                    HTTPStatusCode = HTTPStatusCode.NotFound,
                    Server         = HTTPServer.DefaultServerName,
                    Date           = DateTime.Now,
                    ContentType    = HTTPContentType.JSON_UTF8,
                    Content        = @"{ ""description"": ""Unknown RoamingNetworkId!"" }".ToUTF8Bytes()
                };

                return(false);
            }

            return(true);
        }