public void Connect(bool async)
{
try
{
if (string.IsNullOrEmpty(p_URL)) return;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(p_URL);
request.Headers.Clear();
request.Headers.Add("GET", "/ HTTP/1.0");
request.Headers.Add("Icy-MetaData", "1");
request.UserAgent = "WinampMPEG/5.09";
request.KeepAlive = false;
if (async)
{
RequestState requestState = new RequestState(request);
// Start the asynchronous request.
IAsyncResult result = (IAsyncResult)request.BeginGetResponse(new AsyncCallback(ResponseCallback), requestState);
// If there is a timeout, the callback fires and the request becomes aborted.
System.Threading.ThreadPool.RegisterWaitForSingleObject(result.AsyncWaitHandle, new System.Threading.WaitOrTimerCallback(TimeoutCallback), request, p_Timeout, true);
// The response came in the allowed time.
AllDone.WaitOne();
//if (requestState.ResponseStream != null) requestState.ResponseStream.Close();
if (requestState.Response != null) requestState.Response.Close();
}
else
{
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
if (response.StatusDescription == "OK" && response.Headers.Count > 0)
{
int metaInt = Global.StringToInt(response.GetResponseHeader("icy-metaint"));
string name = response.GetResponseHeader("icy-name");
string genre = response.GetResponseHeader("icy-genre");
string url = response.GetResponseHeader("icy-url");
OnHeaderReceived(metaInt, name, genre, url);
}
response.Close();
}
}
catch { }
}