nsresult MediaPipeline::PipelineTransport::SendRtcpPacket_s( nsAutoPtr<DataBuffer> data) { if (!pipeline_) return NS_OK; // Detached if (!pipeline_->rtcp_send_srtp_) { MOZ_MTLOG(PR_LOG_DEBUG, "Couldn't write RTCP packet; SRTCP not set up yet"); return NS_OK; } MOZ_ASSERT(pipeline_->rtcp_transport_); NS_ENSURE_TRUE(pipeline_->rtcp_transport_, NS_ERROR_NULL_POINTER); // libsrtp enciphers in place, so we need a new, big enough // buffer. // XXX. allocates and deletes one buffer per packet sent. // Bug 822129. int max_len = data->len() + SRTP_MAX_EXPANSION; ScopedDeletePtr<unsigned char> inner_data( new unsigned char[max_len]); memcpy(inner_data, data->data(), data->len()); int out_len; nsresult res = pipeline_->rtcp_send_srtp_->ProtectRtcp(inner_data, data->len(), max_len, &out_len); if (!NS_SUCCEEDED(res)) return res; pipeline_->increment_rtcp_packets_sent(); return pipeline_->SendPacket(pipeline_->rtcp_transport_, inner_data, out_len); }
void NrSocketIpc::sendto_m(const net::NetAddr &addr, nsAutoPtr<DataBuffer> buf) { ASSERT_ON_THREAD(main_thread_); MOZ_ASSERT(socket_child_); ReentrantMonitorAutoEnter mon(monitor_); if (NS_FAILED(socket_child_->SendWithAddress(&addr, buf->data(), buf->len()))) { err_ = true; } }