| // Copyright (c) 2013 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. |
| |
| #include "net/quic/crypto/source_address_token.h" |
| |
| #include "base/strings/string_number_conversions.h" |
| #include "base/strings/string_split.h" |
| |
| using std::string; |
| |
| namespace net { |
| |
| SourceAddressToken::SourceAddressToken() |
| : has_cached_network_parameters_(false) { |
| } |
| |
| SourceAddressToken::~SourceAddressToken() { |
| } |
| |
| string SourceAddressToken::SerializeAsString() const { |
| string out; |
| out.push_back(static_cast<char>(ip_.size())); |
| out.append(ip_); |
| string time_str = base::Int64ToString(timestamp_); |
| out.push_back(static_cast<char>(time_str.size())); |
| out.append(time_str); |
| // TODO(rtenneti): Implement serialization of optional CachedNetworkParameters |
| // when they are used. |
| return out; |
| } |
| |
| bool SourceAddressToken::ParseFromArray(const char* plaintext, |
| size_t plaintext_length) { |
| if (plaintext_length == 0) { |
| return false; |
| } |
| size_t ip_len = plaintext[0]; |
| if (plaintext_length <= 1 + ip_len) { |
| return false; |
| } |
| size_t time_len = plaintext[1 + ip_len]; |
| if (plaintext_length != 1 + ip_len + 1 + time_len) { |
| return false; |
| } |
| |
| string time_str(&plaintext[1 + ip_len + 1], time_len); |
| int64 timestamp; |
| if (!base::StringToInt64(time_str, ×tamp)) { |
| return false; |
| } |
| |
| ip_.assign(&plaintext[1], ip_len); |
| timestamp_ = timestamp; |
| |
| // TODO(rtenneti): Implement parsing of optional CachedNetworkParameters when |
| // they are used. |
| return true; |
| } |
| |
| SourceAddressTokens::SourceAddressTokens() { |
| } |
| |
| SourceAddressTokens::~SourceAddressTokens() { |
| STLDeleteElements(&tokens_); |
| } |
| |
| string SourceAddressTokens::SerializeAsString() const { |
| string out; |
| |
| for (size_t i = 0; i < tokens_size(); i++) { |
| const SourceAddressToken& source_address_token = tokens(i); |
| out.append(source_address_token.SerializeAsString()); |
| } |
| return out; |
| } |
| |
| bool SourceAddressTokens::ParseFromArray(const char* plaintext, |
| size_t plaintext_length) { |
| // TODO(rtenneti): Implement parsing of SourceAddressTokens when they are |
| // used. |
| return true; |
| } |
| |
| } // namespace net |