
Removes the use of uint8, etc. in favor of uint8_t. BUG=webrtc:5024 R=henrik.lundin@webrtc.org, henrikg@webrtc.org, perkj@webrtc.org, solenberg@webrtc.org, stefan@webrtc.org, tina.legrand@webrtc.org Review URL: https://codereview.webrtc.org/1362503003 . Cr-Commit-Position: refs/heads/master@{#10196}
121 lines
3.4 KiB
C++
121 lines
3.4 KiB
C++
/*
|
|
* Copyright 2004 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_PHYSICALSOCKETSERVER_H__
|
|
#define WEBRTC_BASE_PHYSICALSOCKETSERVER_H__
|
|
|
|
#include <vector>
|
|
|
|
#include "webrtc/base/asyncfile.h"
|
|
#include "webrtc/base/scoped_ptr.h"
|
|
#include "webrtc/base/socketserver.h"
|
|
#include "webrtc/base/criticalsection.h"
|
|
|
|
#if defined(WEBRTC_POSIX)
|
|
typedef int SOCKET;
|
|
#endif // WEBRTC_POSIX
|
|
|
|
namespace rtc {
|
|
|
|
// Event constants for the Dispatcher class.
|
|
enum DispatcherEvent {
|
|
DE_READ = 0x0001,
|
|
DE_WRITE = 0x0002,
|
|
DE_CONNECT = 0x0004,
|
|
DE_CLOSE = 0x0008,
|
|
DE_ACCEPT = 0x0010,
|
|
};
|
|
|
|
class Signaler;
|
|
#if defined(WEBRTC_POSIX)
|
|
class PosixSignalDispatcher;
|
|
#endif
|
|
|
|
class Dispatcher {
|
|
public:
|
|
virtual ~Dispatcher() {}
|
|
virtual uint32_t GetRequestedEvents() = 0;
|
|
virtual void OnPreEvent(uint32_t ff) = 0;
|
|
virtual void OnEvent(uint32_t ff, int err) = 0;
|
|
#if defined(WEBRTC_WIN)
|
|
virtual WSAEVENT GetWSAEvent() = 0;
|
|
virtual SOCKET GetSocket() = 0;
|
|
virtual bool CheckSignalClose() = 0;
|
|
#elif defined(WEBRTC_POSIX)
|
|
virtual int GetDescriptor() = 0;
|
|
virtual bool IsDescriptorClosed() = 0;
|
|
#endif
|
|
};
|
|
|
|
// A socket server that provides the real sockets of the underlying OS.
|
|
class PhysicalSocketServer : public SocketServer {
|
|
public:
|
|
PhysicalSocketServer();
|
|
~PhysicalSocketServer() override;
|
|
|
|
// SocketFactory:
|
|
Socket* CreateSocket(int type) override;
|
|
Socket* CreateSocket(int family, int type) override;
|
|
|
|
AsyncSocket* CreateAsyncSocket(int type) override;
|
|
AsyncSocket* CreateAsyncSocket(int family, int type) override;
|
|
|
|
// Internal Factory for Accept
|
|
AsyncSocket* WrapSocket(SOCKET s);
|
|
|
|
// SocketServer:
|
|
bool Wait(int cms, bool process_io) override;
|
|
void WakeUp() override;
|
|
|
|
void Add(Dispatcher* dispatcher);
|
|
void Remove(Dispatcher* dispatcher);
|
|
|
|
#if defined(WEBRTC_POSIX)
|
|
AsyncFile* CreateFile(int fd);
|
|
|
|
// Sets the function to be executed in response to the specified POSIX signal.
|
|
// The function is executed from inside Wait() using the "self-pipe trick"--
|
|
// regardless of which thread receives the signal--and hence can safely
|
|
// manipulate user-level data structures.
|
|
// "handler" may be SIG_IGN, SIG_DFL, or a user-specified function, just like
|
|
// with signal(2).
|
|
// Only one PhysicalSocketServer should have user-level signal handlers.
|
|
// Dispatching signals on multiple PhysicalSocketServers is not reliable.
|
|
// The signal mask is not modified. It is the caller's responsibily to
|
|
// maintain it as desired.
|
|
virtual bool SetPosixSignalHandler(int signum, void (*handler)(int));
|
|
|
|
protected:
|
|
Dispatcher* signal_dispatcher();
|
|
#endif
|
|
|
|
private:
|
|
typedef std::vector<Dispatcher*> DispatcherList;
|
|
typedef std::vector<size_t*> IteratorList;
|
|
|
|
#if defined(WEBRTC_POSIX)
|
|
static bool InstallSignal(int signum, void (*handler)(int));
|
|
|
|
scoped_ptr<PosixSignalDispatcher> signal_dispatcher_;
|
|
#endif
|
|
DispatcherList dispatchers_;
|
|
IteratorList iterators_;
|
|
Signaler* signal_wakeup_;
|
|
CriticalSection crit_;
|
|
bool fWait_;
|
|
#if defined(WEBRTC_WIN)
|
|
WSAEVENT socket_ev_;
|
|
#endif
|
|
};
|
|
|
|
} // namespace rtc
|
|
|
|
#endif // WEBRTC_BASE_PHYSICALSOCKETSERVER_H__
|