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/test/channel_transport/channel_transport.h"
12 
13 #include <stdio.h>
14 
15 #if !defined(WEBRTC_ANDROID) && !defined(WEBRTC_IOS)
16 #include "testing/gtest/include/gtest/gtest.h"
17 #endif
18 #include "webrtc/test/channel_transport/udp_transport.h"
19 #include "webrtc/voice_engine/include/voe_network.h"
20 
21 #if defined(WEBRTC_ANDROID) || defined(WEBRTC_IOS)
22 #undef NDEBUG
23 #include <assert.h>
24 #endif
25 
26 namespace webrtc {
27 namespace test {
28 
VoiceChannelTransport(VoENetwork * voe_network,int channel)29 VoiceChannelTransport::VoiceChannelTransport(VoENetwork* voe_network,
30                                              int channel)
31     : channel_(channel),
32       voe_network_(voe_network) {
33   uint8_t socket_threads = 1;
34   socket_transport_ = UdpTransport::Create(channel, socket_threads);
35   int registered = voe_network_->RegisterExternalTransport(channel,
36                                                            *socket_transport_);
37 #if !defined(WEBRTC_ANDROID) && !defined(WEBRTC_IOS)
38   EXPECT_EQ(0, registered);
39 #else
40   assert(registered == 0);
41 #endif
42 }
43 
~VoiceChannelTransport()44 VoiceChannelTransport::~VoiceChannelTransport() {
45   voe_network_->DeRegisterExternalTransport(channel_);
46   UdpTransport::Destroy(socket_transport_);
47 }
48 
IncomingRTPPacket(const int8_t * incoming_rtp_packet,const size_t packet_length,const char *,const uint16_t)49 void VoiceChannelTransport::IncomingRTPPacket(
50     const int8_t* incoming_rtp_packet,
51     const size_t packet_length,
52     const char* /*from_ip*/,
53     const uint16_t /*from_port*/) {
54   voe_network_->ReceivedRTPPacket(
55       channel_, incoming_rtp_packet, packet_length, PacketTime());
56 }
57 
IncomingRTCPPacket(const int8_t * incoming_rtcp_packet,const size_t packet_length,const char *,const uint16_t)58 void VoiceChannelTransport::IncomingRTCPPacket(
59     const int8_t* incoming_rtcp_packet,
60     const size_t packet_length,
61     const char* /*from_ip*/,
62     const uint16_t /*from_port*/) {
63   voe_network_->ReceivedRTCPPacket(channel_, incoming_rtcp_packet,
64                                    packet_length);
65 }
66 
SetLocalReceiver(uint16_t rtp_port)67 int VoiceChannelTransport::SetLocalReceiver(uint16_t rtp_port) {
68   static const int kNumReceiveSocketBuffers = 500;
69   int return_value = socket_transport_->InitializeReceiveSockets(this,
70                                                                  rtp_port);
71   if (return_value == 0) {
72     return socket_transport_->StartReceiving(kNumReceiveSocketBuffers);
73   }
74   return return_value;
75 }
76 
SetSendDestination(const char * ip_address,uint16_t rtp_port)77 int VoiceChannelTransport::SetSendDestination(const char* ip_address,
78                                               uint16_t rtp_port) {
79   return socket_transport_->InitializeSendSockets(ip_address, rtp_port);
80 }
81 
82 }  // namespace test
83 }  // namespace webrtc
84