/* * 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. */ #ifndef WEBRTC_BASE_MACSOCKETSERVER_H__ #define WEBRTC_BASE_MACSOCKETSERVER_H__ #include #include #include "webrtc/base/physicalsocketserver.h" namespace rtc { /////////////////////////////////////////////////////////////////////////////// // MacBaseSocketServer /////////////////////////////////////////////////////////////////////////////// class MacAsyncSocket; class MacBaseSocketServer : public PhysicalSocketServer { public: MacBaseSocketServer(); ~MacBaseSocketServer() override; // SocketServer Interface Socket* CreateSocket(int type) override; Socket* CreateSocket(int family, int type) override; AsyncSocket* CreateAsyncSocket(int type) override; AsyncSocket* CreateAsyncSocket(int family, int type) override; bool Wait(int cms, bool process_io) override = 0; void WakeUp() override = 0; void RegisterSocket(MacAsyncSocket* socket); void UnregisterSocket(MacAsyncSocket* socket); // PhysicalSocketServer Overrides bool SetPosixSignalHandler(int signum, void (*handler)(int)) override; protected: void EnableSocketCallbacks(bool enable); const std::set& sockets() { return sockets_; } private: static void FileDescriptorCallback(CFFileDescriptorRef ref, CFOptionFlags flags, void* context); std::set sockets_; }; // Core Foundation implementation of the socket server. While idle it // will run the current CF run loop. When the socket server has work // to do the run loop will be paused. Does not support Carbon or Cocoa // UI interaction. class MacCFSocketServer : public MacBaseSocketServer { public: MacCFSocketServer(); ~MacCFSocketServer() override; // SocketServer Interface bool Wait(int cms, bool process_io) override; void WakeUp() override; void OnWakeUpCallback(); private: CFRunLoopRef run_loop_; CFRunLoopSourceRef wake_up_; }; } // namespace rtc #endif // WEBRTC_BASE_MACSOCKETSERVER_H__