1/*
2 *  Copyright (c) 2013 The WebRTC project authors. All Rights Reserved.
3 *
4 *  Use of this source code is governed by a BSD-style license
5 *  that can be found in the LICENSE file in the root of the source
6 *  tree. An additional intellectual property rights grant can be found
7 *  in the file PATENTS.  All contributing project authors may
8 *  be found in the AUTHORS file in the root of the source tree.
9 */
10
11#include "webrtc/video/transport_adapter.h"
12
13namespace webrtc {
14namespace internal {
15
16TransportAdapter::TransportAdapter(newapi::Transport* transport)
17    : transport_(transport), enabled_(0) {}
18
19int TransportAdapter::SendPacket(int /*channel*/,
20                                 const void* packet,
21                                 int length) {
22  if (enabled_.Value() == 0)
23    return false;
24
25  bool success = transport_->SendRtp(static_cast<const uint8_t*>(packet),
26                                     static_cast<size_t>(length));
27  return success ? length : -1;
28}
29
30int TransportAdapter::SendRTCPPacket(int /*channel*/,
31                                     const void* packet,
32                                     int length) {
33  if (enabled_.Value() == 0)
34    return false;
35
36  bool success = transport_->SendRtcp(static_cast<const uint8_t*>(packet),
37                                      static_cast<size_t>(length));
38  return success ? length : -1;
39}
40
41void TransportAdapter::Enable() {
42  // If this exchange fails it means enabled_ was already true, no need to
43  // check result and iterate.
44  enabled_.CompareExchange(1, 0);
45}
46
47void TransportAdapter::Disable() { enabled_.CompareExchange(0, 1); }
48
49}  // namespace internal
50}  // namespace webrtc
51