Home | History | Annotate | Download | only in crypto
      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 CachedNetworkParameters::CachedNetworkParameters() {
     18 }
     19 
     20 CachedNetworkParameters::~CachedNetworkParameters() {
     21 }
     22 
     23 SourceAddressToken::SourceAddressToken() {
     24 }
     25 
     26 SourceAddressToken::~SourceAddressToken() {
     27 }
     28 
     29 string 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 
     41 bool 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, &timestamp)) {
     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