/// <exception cref="System.IO.IOException"></exception>
internal override void ConfigureRequest(HttpURLConnection conn)
{
IDictionary<string, string> r = new LinkedHashMap<string, string>();
string realm = @params.Get("realm");
string nonce = @params.Get("nonce");
string cnonce = @params.Get("cnonce");
string uri = Uri(conn.GetURL());
string qop = @params.Get("qop");
string method = conn.GetRequestMethod();
string A1 = user + ":" + realm + ":" + pass;
string A2 = method + ":" + uri;
r.Put("username", user);
r.Put("realm", realm);
r.Put("nonce", nonce);
r.Put("uri", uri);
string response;
string nc;
if ("auth".Equals(qop))
{
nc = string.Format("%08x", ++requestCount);
response = KD(H(A1), nonce + ":" + nc + ":" + cnonce + ":" + qop + ":" + H(A2));
}
else
{
nc = null;
response = KD(H(A1), nonce + ":" + H(A2));
}
r.Put("response", response);
if (@params.ContainsKey("algorithm"))
{
r.Put("algorithm", "MD5");
}
if (cnonce != null && qop != null)
{
r.Put("cnonce", cnonce);
}
if (@params.ContainsKey("opaque"))
{
r.Put("opaque", @params.Get("opaque"));
}
if (qop != null)
{
r.Put("qop", qop);
}
if (nc != null)
{
r.Put("nc", nc);
}
StringBuilder v = new StringBuilder();
foreach (KeyValuePair<string, string> e in r.EntrySet())
{
if (v.Length > 0)
{
v.Append(", ");
}
v.Append(e.Key);
v.Append('=');
v.Append('"');
v.Append(e.Value);
v.Append('"');
}
conn.SetRequestProperty(HttpSupport.HDR_AUTHORIZATION, NAME + " " + v);
}