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 17 SourceAddressToken::SourceAddressToken() { 18 } 19 20 SourceAddressToken::~SourceAddressToken() { 21 } 22 23 string 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 33 bool 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