summaryrefslogtreecommitdiffstats
path: root/chromium/third_party/webrtc/base/macsocketserver.h
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/third_party/webrtc/base/macsocketserver.h')
-rw-r--r--chromium/third_party/webrtc/base/macsocketserver.h136
1 files changed, 136 insertions, 0 deletions
diff --git a/chromium/third_party/webrtc/base/macsocketserver.h b/chromium/third_party/webrtc/base/macsocketserver.h
new file mode 100644
index 00000000000..8eebac6c632
--- /dev/null
+++ b/chromium/third_party/webrtc/base/macsocketserver.h
@@ -0,0 +1,136 @@
+/*
+ * 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 <set>
+#if defined(WEBRTC_MAC) && !defined(WEBRTC_IOS) // Invalid on IOS
+#include <Carbon/Carbon.h>
+#endif
+#include "webrtc/base/physicalsocketserver.h"
+
+namespace rtc {
+
+///////////////////////////////////////////////////////////////////////////////
+// MacBaseSocketServer
+///////////////////////////////////////////////////////////////////////////////
+class MacAsyncSocket;
+
+class MacBaseSocketServer : public PhysicalSocketServer {
+ public:
+ MacBaseSocketServer();
+ virtual ~MacBaseSocketServer();
+
+ // SocketServer Interface
+ virtual Socket* CreateSocket(int type) { return NULL; }
+ virtual Socket* CreateSocket(int family, int type) { return NULL; }
+
+ virtual AsyncSocket* CreateAsyncSocket(int type);
+ virtual AsyncSocket* CreateAsyncSocket(int family, int type);
+
+ virtual bool Wait(int cms, bool process_io) = 0;
+ virtual void WakeUp() = 0;
+
+ void RegisterSocket(MacAsyncSocket* socket);
+ void UnregisterSocket(MacAsyncSocket* socket);
+
+ // PhysicalSocketServer Overrides
+ virtual bool SetPosixSignalHandler(int signum, void (*handler)(int));
+
+ protected:
+ void EnableSocketCallbacks(bool enable);
+ const std::set<MacAsyncSocket*>& sockets() {
+ return sockets_;
+ }
+
+ private:
+ static void FileDescriptorCallback(CFFileDescriptorRef ref,
+ CFOptionFlags flags,
+ void* context);
+
+ std::set<MacAsyncSocket*> 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();
+ virtual ~MacCFSocketServer();
+
+ // SocketServer Interface
+ virtual bool Wait(int cms, bool process_io);
+ virtual void WakeUp();
+ void OnWakeUpCallback();
+
+ private:
+ CFRunLoopRef run_loop_;
+ CFRunLoopSourceRef wake_up_;
+};
+
+#ifndef CARBON_DEPRECATED
+
+///////////////////////////////////////////////////////////////////////////////
+// MacCarbonSocketServer
+///////////////////////////////////////////////////////////////////////////////
+
+// Interacts with the Carbon event queue. While idle it will block,
+// waiting for events. When the socket server has work to do, it will
+// post a 'wake up' event to the queue, causing the thread to exit the
+// event loop until the next call to Wait. Other events are dispatched
+// to their target. Supports Carbon and Cocoa UI interaction.
+class MacCarbonSocketServer : public MacBaseSocketServer {
+ public:
+ MacCarbonSocketServer();
+ virtual ~MacCarbonSocketServer();
+
+ // SocketServer Interface
+ virtual bool Wait(int cms, bool process_io);
+ virtual void WakeUp();
+
+ private:
+ EventQueueRef event_queue_;
+ EventRef wake_up_;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// MacCarbonAppSocketServer
+///////////////////////////////////////////////////////////////////////////////
+
+// Runs the Carbon application event loop on the current thread while
+// idle. When the socket server has work to do, it will post an event
+// to the queue, causing the thread to exit the event loop until the
+// next call to Wait. Other events are automatically dispatched to
+// their target.
+class MacCarbonAppSocketServer : public MacBaseSocketServer {
+ public:
+ MacCarbonAppSocketServer();
+ virtual ~MacCarbonAppSocketServer();
+
+ // SocketServer Interface
+ virtual bool Wait(int cms, bool process_io);
+ virtual void WakeUp();
+
+ private:
+ static OSStatus WakeUpEventHandler(EventHandlerCallRef next, EventRef event,
+ void *data);
+ static void TimerHandler(EventLoopTimerRef timer, void *data);
+
+ EventQueueRef event_queue_;
+ EventHandlerRef event_handler_;
+ EventLoopTimerRef timer_;
+};
+
+#endif
+} // namespace rtc
+
+#endif // WEBRTC_BASE_MACSOCKETSERVER_H__