1// Copyright (c) 2013 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/quic/crypto/source_address_token.h"
6
7#include <vector>
8
9#include "base/strings/string_number_conversions.h"
10#include "base/strings/string_split.h"
11
12using std::string;
13using std::vector;
14
15namespace net {
16
17CachedNetworkParameters::CachedNetworkParameters() {
18}
19
20CachedNetworkParameters::~CachedNetworkParameters() {
21}
22
23SourceAddressToken::SourceAddressToken() {
24}
25
26SourceAddressToken::~SourceAddressToken() {
27}
28
29string SourceAddressToken::SerializeAsString() const {
30  string out;
31  out.push_back(ip_.size());
32  out.append(ip_);
33  string time_str = base::Int64ToString(timestamp_);
34  out.push_back(time_str.size());
35  out.append(time_str);
36  // TODO(rtenneti): Implement serialization of optional CachedNetworkParameters
37  // when they are used.
38  return out;
39}
40
41bool SourceAddressToken::ParseFromArray(const char* plaintext,
42                                        size_t plaintext_length) {
43  if (plaintext_length == 0) {
44    return false;
45  }
46  size_t ip_len = plaintext[0];
47  if (plaintext_length <= 1 + ip_len) {
48    return false;
49  }
50  size_t time_len = plaintext[1 + ip_len];
51  if (plaintext_length != 1 + ip_len + 1 + time_len) {
52    return false;
53  }
54
55  string time_str(&plaintext[1 + ip_len + 1], time_len);
56  int64 timestamp;
57  if (!base::StringToInt64(time_str, &timestamp)) {
58    return false;
59  }
60
61  ip_.assign(&plaintext[1], ip_len);
62  timestamp_ = timestamp;
63
64  // TODO(rtenneti): Implement parsing of optional CachedNetworkParameters when
65  // they are used.
66  return true;
67}
68
69}  // namespace net
70