public static WwwAuthenticate buildFromString(String challenge)
        {
            WwwAuthenticate answer = new WwwAuthenticate();

            AuthenticationHeaderScanner authenticationHeaderScanner = new AuthenticationHeaderScanner(challenge);

            authenticationHeaderScanner.scanPastDigestString();

            String name = authenticationHeaderScanner.scanName();

            while (null != name) 
            {
                if ("nonce".Equals(name))
                {
                    String value = authenticationHeaderScanner.scanQuotedValue();

                    answer._nonce = value;
                }
                else if ("opaque".Equals(name))
                {
                    String value = authenticationHeaderScanner.scanQuotedValue();

                    answer._opaque = value;

                }
                else if ("qop".Equals(name))
                {
                    String value = authenticationHeaderScanner.scanQuotedValue();

                    answer._qop = value;

                }
                else if ("realm".Equals(name))
                {
                    String value = authenticationHeaderScanner.scanQuotedValue();

                    answer._realm = value;

                }
                else
                {
                    // 'auth-param' in section 3.2.1 of RFC-2617 says ... 
                    // Any unrecognized directive MUST be ignored.

                    String value = authenticationHeaderScanner.scanValue();

                    String warning = String.Format("unrecognised name-value pair. name = '{0}', value = '{1}'", name, value);
                    log.warn(warning);

                }
                name = authenticationHeaderScanner.scanName();

            }

            return answer;
        }
        public WwwAuthenticate buildWwwAuthenticate()
        {
            WwwAuthenticate answer = new WwwAuthenticate();

            answer.nonce = _nonce;
            answer.opaque = _opaque;
            answer.realm = _usersRealm;

            return answer;
        }