blob: ed6d60e05e7b3da9f22caf0ac6b59c6e625e9c14 [file] [log] [blame]
henrike@webrtc.orgf0488722014-05-13 18:00:26 +00001/*
2 * Copyright 2007 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#ifndef WEBRTC_BASE_MACSOCKETSERVER_H__
11#define WEBRTC_BASE_MACSOCKETSERVER_H__
12
13#include <set>
kthelgasona90879b2016-09-08 03:34:40 -070014#include <CoreFoundation/CoreFoundation.h>
henrike@webrtc.orgf0488722014-05-13 18:00:26 +000015#include "webrtc/base/physicalsocketserver.h"
16
17namespace rtc {
18
19///////////////////////////////////////////////////////////////////////////////
20// MacBaseSocketServer
21///////////////////////////////////////////////////////////////////////////////
22class MacAsyncSocket;
23
24class MacBaseSocketServer : public PhysicalSocketServer {
25 public:
26 MacBaseSocketServer();
kwiberg@webrtc.org67186fe2015-03-09 22:21:53 +000027 ~MacBaseSocketServer() override;
henrike@webrtc.orgf0488722014-05-13 18:00:26 +000028
29 // SocketServer Interface
kwiberg@webrtc.org67186fe2015-03-09 22:21:53 +000030 Socket* CreateSocket(int type) override;
31 Socket* CreateSocket(int family, int type) override;
henrike@webrtc.orgf0488722014-05-13 18:00:26 +000032
kwiberg@webrtc.org67186fe2015-03-09 22:21:53 +000033 AsyncSocket* CreateAsyncSocket(int type) override;
34 AsyncSocket* CreateAsyncSocket(int family, int type) override;
henrike@webrtc.orgf0488722014-05-13 18:00:26 +000035
kwiberg@webrtc.org67186fe2015-03-09 22:21:53 +000036 bool Wait(int cms, bool process_io) override = 0;
37 void WakeUp() override = 0;
henrike@webrtc.orgf0488722014-05-13 18:00:26 +000038
39 void RegisterSocket(MacAsyncSocket* socket);
40 void UnregisterSocket(MacAsyncSocket* socket);
41
42 // PhysicalSocketServer Overrides
kwiberg@webrtc.org67186fe2015-03-09 22:21:53 +000043 bool SetPosixSignalHandler(int signum, void (*handler)(int)) override;
henrike@webrtc.orgf0488722014-05-13 18:00:26 +000044
45 protected:
46 void EnableSocketCallbacks(bool enable);
47 const std::set<MacAsyncSocket*>& sockets() {
48 return sockets_;
49 }
50
51 private:
52 static void FileDescriptorCallback(CFFileDescriptorRef ref,
53 CFOptionFlags flags,
54 void* context);
55
56 std::set<MacAsyncSocket*> sockets_;
57};
58
59// Core Foundation implementation of the socket server. While idle it
60// will run the current CF run loop. When the socket server has work
61// to do the run loop will be paused. Does not support Carbon or Cocoa
62// UI interaction.
63class MacCFSocketServer : public MacBaseSocketServer {
64 public:
65 MacCFSocketServer();
kwiberg@webrtc.org67186fe2015-03-09 22:21:53 +000066 ~MacCFSocketServer() override;
henrike@webrtc.orgf0488722014-05-13 18:00:26 +000067
68 // SocketServer Interface
kwiberg@webrtc.org67186fe2015-03-09 22:21:53 +000069 bool Wait(int cms, bool process_io) override;
70 void WakeUp() override;
henrike@webrtc.orgf0488722014-05-13 18:00:26 +000071 void OnWakeUpCallback();
72
73 private:
74 CFRunLoopRef run_loop_;
75 CFRunLoopSourceRef wake_up_;
76};
henrike@webrtc.orgf0488722014-05-13 18:00:26 +000077} // namespace rtc
78
79#endif // WEBRTC_BASE_MACSOCKETSERVER_H__