// 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(ip_.size())); out.append(ip_); string time_str = base::Int64ToString(timestamp_); out.push_back(static_cast(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