| // 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 <vector> |
| |
| #include "base/strings/string_number_conversions.h" |
| #include "base/strings/string_split.h" |
| |
| using std::string; |
| using std::vector; |
| |
| namespace net { |
| |
| SourceAddressToken::SourceAddressToken() { |
| } |
| |
| SourceAddressToken::~SourceAddressToken() { |
| } |
| |
| string SourceAddressToken::SerializeAsString() const { |
| string out; |
| out.push_back(ip_.size()); |
| out.append(ip_); |
| string time_str = base::Int64ToString(timestamp_); |
| out.push_back(time_str.size()); |
| out.append(time_str); |
| 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; |
| return true; |
| } |
| |
| } // namespace net |