Fix: Disable HTTP KeepAlive

To improve support for proxy servers which do not support this
optimisation.
See:
http://discoict.com.au/forum/support/2013/2/connection-issues,-lwt,-updates-etc.aspx
This commit is contained in:
Gary Sharp
2013-02-08 12:32:54 +11:00
parent 8089544dab
commit eb03365513
7 changed files with 684 additions and 655 deletions
+93 -89
View File
@@ -1,90 +1,94 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;
using System.Net;
using System.Xml.Linq;
using System.IO;
using System.Globalization;
namespace Disco.Web.Models.InitialConfig
{
public class WelcomeModel
{
[Required(ErrorMessage="The Organisation Name is required.")]
public string OrganisationName { get; set; }
private static string _OrganisationNameCache;
public bool AutodetectOrganisation()
{
if (_OrganisationNameCache != null)
{
this.OrganisationName = _OrganisationNameCache;
return true;
}
// DnsQuery for broadband.doe.wan
IPHostEntry doeWanDnsEntry;
try
{
doeWanDnsEntry = Dns.GetHostEntry("broadband.doe.wan");
}
catch (Exception)
{ return false; } // Fail on error
// Try using IPSearch feature
XDocument doeWanIPSearchResult = TryDownloadDoeIPSearch(true);
if (doeWanIPSearchResult == null)
doeWanIPSearchResult = TryDownloadDoeIPSearch(false);
if (doeWanIPSearchResult == null)
return false;
try
{
var siteName = doeWanIPSearchResult.Element("resultset").Element("site").Element("name").Value.ToLower();
this.OrganisationName = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(siteName);
_OrganisationNameCache = this.OrganisationName;
return true;
}
catch (Exception)
{ return false; } // Fail on error
}
private XDocument TryDownloadDoeIPSearch(bool useProxy)
{
try
{
HttpWebRequest wReq = (HttpWebRequest)HttpWebRequest.Create("http://broadband.doe.wan/ipsearch/showresult.php");
if (!useProxy)
wReq.Proxy = new WebProxy(); // Empty Proxy Config
wReq.Method = WebRequestMethods.Http.Post;
wReq.ContentType = "application/x-www-form-urlencoded";
wReq.UserAgent = string.Format("Disco/{0}", DiscoApplication.Version);
using (var wrStream = wReq.GetRequestStream())
{
using (var wrStreamWriter = new StreamWriter(wrStream))
{
wrStreamWriter.Write("mode=whoami");
}
}
using (HttpWebResponse wRes = (HttpWebResponse)wReq.GetResponse())
{
if (wRes.StatusCode == HttpStatusCode.OK)
{
using (var wResStream = wRes.GetResponseStream())
{
return XDocument.Load(wResStream);
}
}
else
return null;
}
}
catch (Exception)
{ return null; } // Fail on error
}
}
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;
using System.Net;
using System.Xml.Linq;
using System.IO;
using System.Globalization;
namespace Disco.Web.Models.InitialConfig
{
public class WelcomeModel
{
[Required(ErrorMessage="The Organisation Name is required.")]
public string OrganisationName { get; set; }
private static string _OrganisationNameCache;
public bool AutodetectOrganisation()
{
if (_OrganisationNameCache != null)
{
this.OrganisationName = _OrganisationNameCache;
return true;
}
// DnsQuery for broadband.doe.wan
IPHostEntry doeWanDnsEntry;
try
{
doeWanDnsEntry = Dns.GetHostEntry("broadband.doe.wan");
}
catch (Exception)
{ return false; } // Fail on error
// Try using IPSearch feature
XDocument doeWanIPSearchResult = TryDownloadDoeIPSearch(true);
if (doeWanIPSearchResult == null)
doeWanIPSearchResult = TryDownloadDoeIPSearch(false);
if (doeWanIPSearchResult == null)
return false;
try
{
var siteName = doeWanIPSearchResult.Element("resultset").Element("site").Element("name").Value.ToLower();
this.OrganisationName = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(siteName);
_OrganisationNameCache = this.OrganisationName;
return true;
}
catch (Exception)
{ return false; } // Fail on error
}
private XDocument TryDownloadDoeIPSearch(bool useProxy)
{
try
{
HttpWebRequest wReq = (HttpWebRequest)HttpWebRequest.Create("http://broadband.doe.wan/ipsearch/showresult.php");
// Added: 2013-02-08 G#
// Fix for Proxy Servers which dont support KeepAlive
wReq.KeepAlive = false;
// End Added: 2013-02-08 G#
if (!useProxy)
wReq.Proxy = new WebProxy(); // Empty Proxy Config
wReq.Method = WebRequestMethods.Http.Post;
wReq.ContentType = "application/x-www-form-urlencoded";
wReq.UserAgent = string.Format("Disco/{0}", DiscoApplication.Version);
using (var wrStream = wReq.GetRequestStream())
{
using (var wrStreamWriter = new StreamWriter(wrStream))
{
wrStreamWriter.Write("mode=whoami");
}
}
using (HttpWebResponse wRes = (HttpWebResponse)wReq.GetResponse())
{
if (wRes.StatusCode == HttpStatusCode.OK)
{
using (var wResStream = wRes.GetResponseStream())
{
return XDocument.Load(wResStream);
}
}
else
return null;
}
}
catch (Exception)
{ return null; } // Fail on error
}
}
}