// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef NET_HTTP_HTTP_AUTH_CHALLENGE_TOKENIZER_H_
#define NET_HTTP_HTTP_AUTH_CHALLENGE_TOKENIZER_H_

#include <string>

#include "net/base/net_export.h"
#include "net/http/http_util.h"

namespace net {

// Breaks up a challenge string into the the auth scheme and parameter list,
// according to RFC 2617 Sec 1.2:
//     challenge = auth-scheme 1*SP 1#auth-param
//
// Depending on the challenge scheme, it may be appropriate to interpret the
// parameters as either a base-64 encoded string or a comma-delimited list
// of name-value pairs. param_pairs() and base64_param() methods are provided
// to support either usage.
class NET_EXPORT_PRIVATE HttpAuthChallengeTokenizer {
 public:
  HttpAuthChallengeTokenizer(std::string::const_iterator begin,
                             std::string::const_iterator end);
  ~HttpAuthChallengeTokenizer();

  // Get the original text.
  std::string challenge_text() const {
    return std::string(begin_, end_);
  }

  // Get the auth scheme of the challenge.
  std::string::const_iterator scheme_begin() const { return scheme_begin_; }
  std::string::const_iterator scheme_end() const { return scheme_end_; }
  std::string scheme() const {
    return std::string(scheme_begin_, scheme_end_);
  }

  std::string::const_iterator params_begin() const { return params_begin_; }
  std::string::const_iterator params_end() const { return params_end_; }
  HttpUtil::NameValuePairsIterator param_pairs() const;
  std::string base64_param() const;

 private:
  void Init(std::string::const_iterator begin,
            std::string::const_iterator end);

  std::string::const_iterator begin_;
  std::string::const_iterator end_;

  std::string::const_iterator scheme_begin_;
  std::string::const_iterator scheme_end_;

  std::string::const_iterator params_begin_;
  std::string::const_iterator params_end_;
};

}  // namespace net

#endif  // NET_HTTP_HTTP_AUTH_CHALLENGE_TOKENIZER_H_
