private void GetHostByNameSink(IAsyncResult result) { IPHostEntry e; try { e = Dns.EndGetHostEntry(result); } catch (Exception ex) { // Could not resolve? EventLogger.Log(ex); return; } object[] Args = (object[])result.AsyncState; Uri Resource = (Uri)Args[0]; object Tag = Args[1]; ContinueRequest( new IPEndPoint(e.AddressList[0], Resource.Port), HTTPMessage.UnEscapeString(Resource.PathAndQuery), Tag, null); }
/// <summary> /// Parses a URL /// </summary> /// <param name="ServiceURL">The URL to Parse</param> /// <param name="WebIP">The IPAddress</param> /// <param name="Port">The Port Number</param> /// <param name="ServiceName">The Object</param> static public void ParseURL(String ServiceURL, out String WebIP, out int Port, out String ServiceName) { Uri NewUri = new Uri(ServiceURL); WebIP = NewUri.Host; if (NewUri.HostNameType == UriHostNameType.Dns) { WebIP = Dns.GetHostEntry(WebIP).AddressList[0].ToString(); } Port = NewUri.Port; ServiceName = HTTPMessage.UnEscapeString(NewUri.PathAndQuery); }
/// <summary> /// Pipelines a Uri request /// </summary> /// <param name="Resource">Uri to GET</param> /// <param name="Tag">State Data</param> public void PipelineRequest(Uri Resource, object Tag) { object[] Args = { Resource, Tag }; string IP = Resource.Host; if (Resource.HostNameType == UriHostNameType.Dns) { Dns.BeginGetHostEntry(IP, GetHostByNameSink, Args); } else { ContinueRequest( new IPEndPoint(IPAddress.Parse(Resource.Host), Resource.Port), HTTPMessage.UnEscapeString(Resource.PathAndQuery), Tag, null); } }