tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

nricestunaddr.cpp (2922B)


      1 /* This Source Code Form is subject to the terms of the Mozilla Public
      2 * License, v. 2.0. If a copy of the MPL was not distributed with this file,
      3 * You can obtain one at http://mozilla.org/MPL/2.0/. */
      4 
      5 #include "logging.h"
      6 
      7 // nICEr includes
      8 extern "C" {
      9 #include "local_addr.h"
     10 #include "nr_api.h"
     11 }
     12 
     13 // Local includes
     14 #include "nricestunaddr.h"
     15 
     16 namespace mozilla {
     17 
     18 MOZ_MTLOG_MODULE("mtransport")
     19 
     20 NrIceStunAddr::NrIceStunAddr() : localAddr_(new nr_local_addr) {
     21  memset(localAddr_, 0, sizeof(nr_local_addr));
     22 }
     23 
     24 NrIceStunAddr::NrIceStunAddr(const nr_local_addr* addr)
     25    : localAddr_(new nr_local_addr) {
     26  nr_local_addr_copy(localAddr_, const_cast<nr_local_addr*>(addr));
     27 }
     28 
     29 NrIceStunAddr::NrIceStunAddr(const NrIceStunAddr& rhs)
     30    : localAddr_(new nr_local_addr) {
     31  nr_local_addr_copy(localAddr_, const_cast<nr_local_addr*>(rhs.localAddr_));
     32 }
     33 
     34 NrIceStunAddr::~NrIceStunAddr() { delete localAddr_; }
     35 
     36 size_t NrIceStunAddr::SerializationBufferSize() const {
     37  return sizeof(nr_local_addr);
     38 }
     39 
     40 nsresult NrIceStunAddr::Serialize(char* buffer, size_t buffer_size) const {
     41  if (buffer_size != sizeof(nr_local_addr)) {
     42    MOZ_MTLOG(ML_ERROR,
     43              "Failed trying to serialize NrIceStunAddr, "
     44              "input buffer length ("
     45                  << buffer_size << ") does not match required length ("
     46                  << sizeof(nr_local_addr) << ")");
     47    MOZ_ASSERT(false, "Failed to serialize NrIceStunAddr, bad buffer size");
     48    return NS_ERROR_FAILURE;
     49  }
     50 
     51  nr_local_addr* toAddr = (nr_local_addr*)buffer;
     52  if (nr_local_addr_copy(toAddr, localAddr_)) {
     53    MOZ_MTLOG(ML_ERROR,
     54              "Failed trying to serialize NrIceStunAddr, "
     55              "could not copy nr_local_addr.");
     56    MOZ_ASSERT(false,
     57               "Failed to serialize NrIceStunAddr, nr_local_addr_copy failed");
     58    return NS_ERROR_FAILURE;
     59  }
     60 
     61  return NS_OK;
     62 }
     63 
     64 nsresult NrIceStunAddr::Deserialize(const char* buffer, size_t buffer_size) {
     65  if (buffer_size != sizeof(nr_local_addr)) {
     66    MOZ_MTLOG(ML_ERROR,
     67              "Failed trying to deserialize NrIceStunAddr, "
     68              "input buffer length ("
     69                  << buffer_size << ") does not match required length ("
     70                  << sizeof(nr_local_addr) << ")");
     71    MOZ_ASSERT(false, "Failed to deserialize NrIceStunAddr, bad buffer size");
     72    return NS_ERROR_FAILURE;
     73  }
     74 
     75  nr_local_addr* from_addr =
     76      const_cast<nr_local_addr*>((const nr_local_addr*)buffer);
     77 
     78  // At this point, from_addr->addr.addr is invalid (null), but will
     79  // be fixed by nr_local_addr_copy.
     80  if (nr_local_addr_copy(localAddr_, from_addr)) {
     81    MOZ_MTLOG(ML_ERROR,
     82              "Failed trying to deserialize NrIceStunAddr, "
     83              "could not copy nr_local_addr.");
     84    MOZ_ASSERT(
     85        false,
     86        "Failed to deserialize NrIceStunAddr, nr_local_addr_copy failed");
     87    return NS_ERROR_FAILURE;
     88  }
     89 
     90  return NS_OK;
     91 }
     92 
     93 }  // namespace mozilla