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