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 12 using std::string; 13 using std::vector; 14 15 namespace net { 16 CachedNetworkParameters()17CachedNetworkParameters::CachedNetworkParameters() { 18 } 19 ~CachedNetworkParameters()20CachedNetworkParameters::~CachedNetworkParameters() { 21 } 22 SourceAddressToken()23SourceAddressToken::SourceAddressToken() { 24 } 25 ~SourceAddressToken()26SourceAddressToken::~SourceAddressToken() { 27 } 28 SerializeAsString() const29string SourceAddressToken::SerializeAsString() const { 30 string out; 31 out.push_back(ip_.size()); 32 out.append(ip_); 33 string time_str = base::Int64ToString(timestamp_); 34 out.push_back(time_str.size()); 35 out.append(time_str); 36 // TODO(rtenneti): Implement serialization of optional CachedNetworkParameters 37 // when they are used. 38 return out; 39 } 40 ParseFromArray(const char * plaintext,size_t plaintext_length)41bool SourceAddressToken::ParseFromArray(const char* plaintext, 42 size_t plaintext_length) { 43 if (plaintext_length == 0) { 44 return false; 45 } 46 size_t ip_len = plaintext[0]; 47 if (plaintext_length <= 1 + ip_len) { 48 return false; 49 } 50 size_t time_len = plaintext[1 + ip_len]; 51 if (plaintext_length != 1 + ip_len + 1 + time_len) { 52 return false; 53 } 54 55 string time_str(&plaintext[1 + ip_len + 1], time_len); 56 int64 timestamp; 57 if (!base::StringToInt64(time_str, ×tamp)) { 58 return false; 59 } 60 61 ip_.assign(&plaintext[1], ip_len); 62 timestamp_ = timestamp; 63 64 // TODO(rtenneti): Implement parsing of optional CachedNetworkParameters when 65 // they are used. 66 return true; 67 } 68 69 } // namespace net 70