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 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, &timestamp)) {
     50     return false;
     51   }
     52 
     53   ip_.assign(&plaintext[1], ip_len);
     54   timestamp_ = timestamp;
     55   return true;
     56 }
     57 
     58 }  // namespace net
     59