1// Copyright (c) 2010 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "net/spdy/spdy_settings_storage.h"
6
7#include <utility>
8
9namespace net {
10
11SpdySettingsStorage::SpdySettingsStorage() {
12}
13
14SpdySettingsStorage::~SpdySettingsStorage() {
15}
16
17const spdy::SpdySettings& SpdySettingsStorage::Get(
18    const HostPortPair& host_port_pair) const {
19  SettingsMap::const_iterator it = settings_map_.find(host_port_pair);
20  if (it == settings_map_.end()) {
21    static const spdy::SpdySettings kEmpty;
22    return kEmpty;
23  }
24  return it->second;
25}
26
27void SpdySettingsStorage::Set(const HostPortPair& host_port_pair,
28                              const spdy::SpdySettings& settings) {
29  spdy::SpdySettings persistent_settings;
30
31  // Iterate through the list, and only copy those settings which are marked
32  // for persistence.
33  spdy::SpdySettings::const_iterator it;
34  for (it = settings.begin(); it != settings.end(); ++it) {
35    spdy::SettingsFlagsAndId id = it->first;
36    if (id.flags() & spdy::SETTINGS_FLAG_PLEASE_PERSIST) {
37      id.set_flags(spdy::SETTINGS_FLAG_PERSISTED);
38      persistent_settings.push_back(std::make_pair(id, it->second));
39    }
40  }
41
42  // If we didn't persist anything, then we are done.
43  if (persistent_settings.empty())
44    return;
45
46  settings_map_[host_port_pair] = persistent_settings;
47}
48
49}  // namespace net
50
51