OLD | NEW |
| (Empty) |
1 /* | |
2 * Copyright (c) 2012 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/system_wrappers/interface/critical_section_wrapper.h" | |
12 #include "webrtc/system_wrappers/interface/event_wrapper.h" | |
13 #include "webrtc/system_wrappers/interface/sleep.h" | |
14 #include "webrtc/system_wrappers/interface/thread_wrapper.h" | |
15 #include "webrtc/voice_engine/include/voe_network.h" | |
16 #include "webrtc/voice_engine/test/auto_test/fakes/fake_external_transport.h" | |
17 #include "webrtc/voice_engine/voice_engine_defines.h" | |
18 | |
19 FakeExternalTransport::FakeExternalTransport(webrtc::VoENetwork* ptr) | |
20 : my_network_(ptr), | |
21 lock_(NULL), | |
22 event_(NULL), | |
23 length_(0), | |
24 channel_(0), | |
25 delay_is_enabled_(0), | |
26 delay_time_in_ms_(0) { | |
27 const char* thread_name = "external_thread"; | |
28 lock_ = webrtc::CriticalSectionWrapper::CreateCriticalSection(); | |
29 event_ = webrtc::EventWrapper::Create(); | |
30 thread_ = webrtc::ThreadWrapper::CreateThread(Run, this, thread_name); | |
31 if (thread_) { | |
32 thread_->Start(); | |
33 thread_->SetPriority(webrtc::kHighPriority); | |
34 } | |
35 } | |
36 | |
37 FakeExternalTransport::~FakeExternalTransport() { | |
38 if (thread_) { | |
39 event_->Set(); | |
40 thread_->Stop(); | |
41 delete event_; | |
42 event_ = NULL; | |
43 delete lock_; | |
44 lock_ = NULL; | |
45 } | |
46 } | |
47 | |
48 bool FakeExternalTransport::Run(void* ptr) { | |
49 return static_cast<FakeExternalTransport*> (ptr)->Process(); | |
50 } | |
51 | |
52 bool FakeExternalTransport::Process() { | |
53 switch (event_->Wait(500)) { | |
54 case webrtc::kEventSignaled: | |
55 lock_->Enter(); | |
56 my_network_->ReceivedRTPPacket(channel_, packet_buffer_, length_, | |
57 webrtc::PacketTime()); | |
58 lock_->Leave(); | |
59 return true; | |
60 case webrtc::kEventTimeout: | |
61 return true; | |
62 case webrtc::kEventError: | |
63 break; | |
64 } | |
65 return true; | |
66 } | |
67 | |
68 int FakeExternalTransport::SendPacket(int channel, | |
69 const void *data, | |
70 size_t len) { | |
71 lock_->Enter(); | |
72 if (len < 1612) { | |
73 memcpy(packet_buffer_, (const unsigned char*) data, len); | |
74 length_ = len; | |
75 channel_ = channel; | |
76 } | |
77 lock_->Leave(); | |
78 event_->Set(); // Triggers ReceivedRTPPacket() from worker thread. | |
79 return static_cast<int>(len); | |
80 } | |
81 | |
82 int FakeExternalTransport::SendRTCPPacket(int channel, | |
83 const void *data, | |
84 size_t len) { | |
85 if (delay_is_enabled_) { | |
86 webrtc::SleepMs(delay_time_in_ms_); | |
87 } | |
88 my_network_->ReceivedRTCPPacket(channel, data, len); | |
89 return static_cast<int>(len); | |
90 } | |
91 | |
92 void FakeExternalTransport::SetDelayStatus(bool enable, | |
93 unsigned int delayInMs) { | |
94 delay_is_enabled_ = enable; | |
95 delay_time_in_ms_ = delayInMs; | |
96 } | |
OLD | NEW |