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 17SourceAddressToken::SourceAddressToken() { 18} 19 20SourceAddressToken::~SourceAddressToken() { 21} 22 23string SourceAddressToken::SerializeAsString() const { 24 string out; 25 out.push_back(ip_.size()); 26 out.append(ip_); 27 string time_str = base::Int64ToString(timestamp_); 28 out.push_back(time_str.size()); 29 out.append(time_str); 30 return out; 31} 32 33bool SourceAddressToken::ParseFromArray(const char* plaintext, 34 size_t plaintext_length) { 35 if (plaintext_length == 0) { 36 return false; 37 } 38 size_t ip_len = plaintext[0]; 39 if (plaintext_length <= 1 + ip_len) { 40 return false; 41 } 42 size_t time_len = plaintext[1 + ip_len]; 43 if (plaintext_length != 1 + ip_len + 1 + time_len) { 44 return false; 45 } 46 47 string time_str(&plaintext[1 + ip_len + 1], time_len); 48 int64 timestamp; 49 if (!base::StringToInt64(time_str, ×tamp)) { 50 return false; 51 } 52 53 ip_.assign(&plaintext[1], ip_len); 54 timestamp_ = timestamp; 55 return true; 56} 57 58} // namespace net 59