/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 |