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.
5 #include "net/quic/crypto/source_address_token.h"
7 #include "base/strings/string_number_conversions.h"
8 #include "base/strings/string_split.h"
14 SourceAddressToken::SourceAddressToken()
15 : has_cached_network_parameters_(false) {
18 SourceAddressToken::~SourceAddressToken() {
21 string
SourceAddressToken::SerializeAsString() const {
23 out
.push_back(static_cast<char>(ip_
.size()));
25 string time_str
= base::Int64ToString(timestamp_
);
26 out
.push_back(static_cast<char>(time_str
.size()));
28 // TODO(rtenneti): Implement serialization of optional CachedNetworkParameters
29 // when they are used.
33 bool SourceAddressToken::ParseFromArray(const char* plaintext
,
34 size_t plaintext_length
) {
35 if (plaintext_length
== 0) {
38 size_t ip_len
= plaintext
[0];
39 if (plaintext_length
<= 1 + ip_len
) {
42 size_t time_len
= plaintext
[1 + ip_len
];
43 if (plaintext_length
!= 1 + ip_len
+ 1 + time_len
) {
47 string
time_str(&plaintext
[1 + ip_len
+ 1], time_len
);
49 if (!base::StringToInt64(time_str
, ×tamp
)) {
53 ip_
.assign(&plaintext
[1], ip_len
);
54 timestamp_
= timestamp
;
56 // TODO(rtenneti): Implement parsing of optional CachedNetworkParameters when
61 SourceAddressTokens::SourceAddressTokens() {
64 SourceAddressTokens::~SourceAddressTokens() {
65 STLDeleteElements(&tokens_
);
68 string
SourceAddressTokens::SerializeAsString() const {
71 for (size_t i
= 0; i
< tokens_size(); i
++) {
72 const SourceAddressToken
& source_address_token
= tokens(i
);
73 out
.append(source_address_token
.SerializeAsString());
78 bool SourceAddressTokens::ParseFromArray(const char* plaintext
,
79 size_t plaintext_length
) {
80 // TODO(rtenneti): Implement parsing of SourceAddressTokens when they are