| 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
|
|
|