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