Coverage Report

Created: 2018-09-25 14:53

/src/mozilla-central/media/mtransport/nricestunaddr.cpp
Line
Count
Source (jump to first uncovered line)
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 "nr_api.h"
10
#include "r_memory.h"
11
#include "local_addr.h"
12
}
13
14
// Local includes
15
#include "nricestunaddr.h"
16
17
namespace mozilla {
18
19
MOZ_MTLOG_MODULE("mtransport")
20
21
NrIceStunAddr::NrIceStunAddr()
22
  : localAddr_(new nr_local_addr)
23
0
{
24
0
  memset(localAddr_, 0, sizeof(nr_local_addr));
25
0
}
26
27
NrIceStunAddr::NrIceStunAddr(const nr_local_addr* addr)
28
  : localAddr_(new nr_local_addr)
29
0
{
30
0
  nr_local_addr_copy(localAddr_,
31
0
                     const_cast<nr_local_addr*>(addr));
32
0
}
33
34
NrIceStunAddr::NrIceStunAddr(const NrIceStunAddr& rhs)
35
  : localAddr_(new nr_local_addr)
36
0
{
37
0
  nr_local_addr_copy(localAddr_,
38
0
                     const_cast<nr_local_addr*>(rhs.localAddr_));
39
0
}
40
41
NrIceStunAddr::~NrIceStunAddr()
42
0
{
43
0
  delete localAddr_;
44
0
}
45
46
size_t
47
NrIceStunAddr::SerializationBufferSize() const
48
0
{
49
0
  return sizeof(nr_local_addr);
50
0
}
51
52
nsresult
53
NrIceStunAddr::Serialize(char* buffer, size_t buffer_size) const
54
0
{
55
0
  if (buffer_size != sizeof(nr_local_addr)) {
56
0
    MOZ_MTLOG(ML_ERROR, "Failed trying to serialize NrIceStunAddr, "
57
0
                        "input buffer length (" << buffer_size <<
58
0
                        ") does not match required length ("
59
0
                        << sizeof(nr_local_addr) << ")");
60
0
    MOZ_ASSERT(false, "Failed to serialize NrIceStunAddr, bad buffer size");
61
0
    return NS_ERROR_FAILURE;
62
0
  }
63
0
64
0
  nr_local_addr* toAddr = (nr_local_addr*)buffer;
65
0
  if (nr_local_addr_copy(toAddr, localAddr_)) {
66
0
    MOZ_MTLOG(ML_ERROR, "Failed trying to serialize NrIceStunAddr, "
67
0
                        "could not copy nr_local_addr.");
68
0
    MOZ_ASSERT(false, "Failed to serialize NrIceStunAddr, nr_local_addr_copy failed");
69
0
    return NS_ERROR_FAILURE;
70
0
  }
71
0
72
0
  // don't serialize what will be a bad addr when we deserialize
73
0
  toAddr->addr.addr = nullptr;
74
0
75
0
  return NS_OK;
76
0
}
77
78
nsresult
79
NrIceStunAddr::Deserialize(const char* buffer, size_t buffer_size)
80
0
{
81
0
  if (buffer_size != sizeof(nr_local_addr)) {
82
0
    MOZ_MTLOG(ML_ERROR, "Failed trying to deserialize NrIceStunAddr, "
83
0
                        "input buffer length (" << buffer_size <<
84
0
                        ") does not match required length ("
85
0
                        << sizeof(nr_local_addr) << ")");
86
0
    MOZ_ASSERT(false, "Failed to deserialize NrIceStunAddr, bad buffer size");
87
0
    return NS_ERROR_FAILURE;
88
0
  }
89
0
90
0
  nr_local_addr* from_addr =
91
0
      const_cast<nr_local_addr*>((const nr_local_addr*)buffer);
92
0
93
0
  // At this point, from_addr->addr.addr is invalid (null), but will
94
0
  // be fixed by nr_local_addr_copy.
95
0
  if (nr_local_addr_copy(localAddr_, from_addr)) {
96
0
    MOZ_MTLOG(ML_ERROR, "Failed trying to deserialize NrIceStunAddr, "
97
0
                        "could not copy nr_local_addr.");
98
0
    MOZ_ASSERT(false, "Failed to deserialize NrIceStunAddr, nr_local_addr_copy failed");
99
0
    return NS_ERROR_FAILURE;
100
0
  }
101
0
102
0
  return NS_OK;
103
0
}
104
105
} // namespace mozilla