Index: webrtc/base/macsocketserver.cc |
diff --git a/webrtc/base/macsocketserver.cc b/webrtc/base/macsocketserver.cc |
deleted file mode 100644 |
index b763e813b037d94909d8263d01049b4dcd5e0008..0000000000000000000000000000000000000000 |
--- a/webrtc/base/macsocketserver.cc |
+++ /dev/null |
@@ -1,215 +0,0 @@ |
-/* |
- * Copyright 2007 The WebRTC Project Authors. All rights reserved. |
- * |
- * Use of this source code is governed by a BSD-style license |
- * that can be found in the LICENSE file in the root of the source |
- * tree. An additional intellectual property rights grant can be found |
- * in the file PATENTS. All contributing project authors may |
- * be found in the AUTHORS file in the root of the source tree. |
- */ |
- |
- |
-#include "webrtc/base/macsocketserver.h" |
- |
-#include "webrtc/base/common.h" |
-#include "webrtc/base/logging.h" |
-#include "webrtc/base/macasyncsocket.h" |
-#include "webrtc/base/macutils.h" |
-#include "webrtc/base/thread.h" |
- |
-namespace rtc { |
- |
-/////////////////////////////////////////////////////////////////////////////// |
-// MacBaseSocketServer |
-/////////////////////////////////////////////////////////////////////////////// |
- |
-MacBaseSocketServer::MacBaseSocketServer() { |
-} |
- |
-MacBaseSocketServer::~MacBaseSocketServer() { |
-} |
- |
-Socket* MacBaseSocketServer::CreateSocket(int type) { |
- return NULL; |
-} |
- |
-Socket* MacBaseSocketServer::CreateSocket(int family, int type) { |
- return NULL; |
-} |
- |
-AsyncSocket* MacBaseSocketServer::CreateAsyncSocket(int type) { |
- return CreateAsyncSocket(AF_INET, type); |
-} |
- |
-AsyncSocket* MacBaseSocketServer::CreateAsyncSocket(int family, int type) { |
- if (SOCK_STREAM != type) |
- return NULL; |
- |
- MacAsyncSocket* socket = new MacAsyncSocket(this, family); |
- if (!socket->valid()) { |
- delete socket; |
- return NULL; |
- } |
- return socket; |
-} |
- |
-void MacBaseSocketServer::RegisterSocket(MacAsyncSocket* s) { |
- sockets_.insert(s); |
-} |
- |
-void MacBaseSocketServer::UnregisterSocket(MacAsyncSocket* s) { |
- VERIFY(1 == sockets_.erase(s)); // found 1 |
-} |
- |
-bool MacBaseSocketServer::SetPosixSignalHandler(int signum, |
- void (*handler)(int)) { |
- Dispatcher* dispatcher = signal_dispatcher(); |
- if (!PhysicalSocketServer::SetPosixSignalHandler(signum, handler)) { |
- return false; |
- } |
- |
- // Only register the FD once, when the first custom handler is installed. |
- if (!dispatcher && (dispatcher = signal_dispatcher())) { |
- CFFileDescriptorContext ctx = { 0 }; |
- ctx.info = this; |
- |
- CFFileDescriptorRef desc = CFFileDescriptorCreate( |
- kCFAllocatorDefault, |
- dispatcher->GetDescriptor(), |
- false, |
- &MacBaseSocketServer::FileDescriptorCallback, |
- &ctx); |
- if (!desc) { |
- return false; |
- } |
- |
- CFFileDescriptorEnableCallBacks(desc, kCFFileDescriptorReadCallBack); |
- CFRunLoopSourceRef ref = |
- CFFileDescriptorCreateRunLoopSource(kCFAllocatorDefault, desc, 0); |
- |
- if (!ref) { |
- CFRelease(desc); |
- return false; |
- } |
- |
- CFRunLoopAddSource(CFRunLoopGetCurrent(), ref, kCFRunLoopCommonModes); |
- CFRelease(desc); |
- CFRelease(ref); |
- } |
- |
- return true; |
-} |
- |
-// Used to disable socket events from waking our message queue when |
-// process_io is false. Does not disable signal event handling though. |
-void MacBaseSocketServer::EnableSocketCallbacks(bool enable) { |
- for (std::set<MacAsyncSocket*>::iterator it = sockets().begin(); |
- it != sockets().end(); ++it) { |
- if (enable) { |
- (*it)->EnableCallbacks(); |
- } else { |
- (*it)->DisableCallbacks(); |
- } |
- } |
-} |
- |
-void MacBaseSocketServer::FileDescriptorCallback(CFFileDescriptorRef fd, |
- CFOptionFlags flags, |
- void* context) { |
- MacBaseSocketServer* this_ss = |
- reinterpret_cast<MacBaseSocketServer*>(context); |
- ASSERT(this_ss); |
- Dispatcher* signal_dispatcher = this_ss->signal_dispatcher(); |
- ASSERT(signal_dispatcher); |
- |
- signal_dispatcher->OnPreEvent(DE_READ); |
- signal_dispatcher->OnEvent(DE_READ, 0); |
- CFFileDescriptorEnableCallBacks(fd, kCFFileDescriptorReadCallBack); |
-} |
- |
- |
-/////////////////////////////////////////////////////////////////////////////// |
-// MacCFSocketServer |
-/////////////////////////////////////////////////////////////////////////////// |
- |
-void WakeUpCallback(void* info) { |
- MacCFSocketServer* server = static_cast<MacCFSocketServer*>(info); |
- ASSERT(NULL != server); |
- server->OnWakeUpCallback(); |
-} |
- |
-MacCFSocketServer::MacCFSocketServer() |
- : run_loop_(CFRunLoopGetCurrent()), |
- wake_up_(NULL) { |
- CFRunLoopSourceContext ctx; |
- memset(&ctx, 0, sizeof(ctx)); |
- ctx.info = this; |
- ctx.perform = &WakeUpCallback; |
- wake_up_ = CFRunLoopSourceCreate(NULL, 0, &ctx); |
- ASSERT(NULL != wake_up_); |
- if (wake_up_) { |
- CFRunLoopAddSource(run_loop_, wake_up_, kCFRunLoopCommonModes); |
- } |
-} |
- |
-MacCFSocketServer::~MacCFSocketServer() { |
- if (wake_up_) { |
- CFRunLoopSourceInvalidate(wake_up_); |
- CFRelease(wake_up_); |
- } |
-} |
- |
-bool MacCFSocketServer::Wait(int cms, bool process_io) { |
- ASSERT(CFRunLoopGetCurrent() == run_loop_); |
- |
- if (!process_io && cms == 0) { |
- // No op. |
- return true; |
- } |
- |
- if (!process_io) { |
- // No way to listen to common modes and not get socket events, unless |
- // we disable each one's callbacks. |
- EnableSocketCallbacks(false); |
- } |
- |
- SInt32 result; |
- if (kForever == cms) { |
- do { |
- // Would prefer to run in a custom mode that only listens to wake_up, |
- // but we have qtkit sending work to the main thread which is effectively |
- // blocked here, causing deadlock. Thus listen to the common modes. |
- // TODO: If QTKit becomes thread safe, do the above. |
- result = CFRunLoopRunInMode(kCFRunLoopDefaultMode, 10000000, false); |
- } while (result != kCFRunLoopRunFinished && result != kCFRunLoopRunStopped); |
- } else { |
- // TODO: In the case of 0ms wait, this will only process one event, so we |
- // may want to loop until it returns TimedOut. |
- CFTimeInterval seconds = cms / 1000.0; |
- result = CFRunLoopRunInMode(kCFRunLoopDefaultMode, seconds, false); |
- } |
- |
- if (!process_io) { |
- // Reenable them. Hopefully this won't cause spurious callbacks or |
- // missing ones while they were disabled. |
- EnableSocketCallbacks(true); |
- } |
- |
- if (kCFRunLoopRunFinished == result) { |
- return false; |
- } |
- return true; |
-} |
- |
-void MacCFSocketServer::WakeUp() { |
- if (wake_up_) { |
- CFRunLoopSourceSignal(wake_up_); |
- CFRunLoopWakeUp(run_loop_); |
- } |
-} |
- |
-void MacCFSocketServer::OnWakeUpCallback() { |
- ASSERT(run_loop_ == CFRunLoopGetCurrent()); |
- CFRunLoopStop(run_loop_); |
-} |
-} // namespace rtc |