1// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef CONTENT_RENDERER_P2P_IPC_SOCKET_FACTORY_H_
6#define CONTENT_RENDERER_P2P_IPC_SOCKET_FACTORY_H_
7
8#include "base/basictypes.h"
9#include "base/compiler_specific.h"
10#include "content/common/content_export.h"
11#include "third_party/libjingle/source/talk/p2p/base/packetsocketfactory.h"
12
13namespace content {
14
15class P2PSocketDispatcher;
16
17// IpcPacketSocketFactory implements rtc::PacketSocketFactory
18// interface for libjingle using IPC-based P2P sockets. The class must
19// be used on a thread that is a libjingle thread (implements
20// rtc::Thread) and also has associated base::MessageLoop. Each
21// socket created by the factory must be used on the thread it was
22// created on.
23class IpcPacketSocketFactory : public rtc::PacketSocketFactory {
24 public:
25  CONTENT_EXPORT explicit IpcPacketSocketFactory(
26      P2PSocketDispatcher* socket_dispatcher);
27  virtual ~IpcPacketSocketFactory();
28
29  virtual rtc::AsyncPacketSocket* CreateUdpSocket(
30      const rtc::SocketAddress& local_address,
31      int min_port, int max_port) OVERRIDE;
32  virtual rtc::AsyncPacketSocket* CreateServerTcpSocket(
33      const rtc::SocketAddress& local_address,
34      int min_port,
35      int max_port,
36      int opts) OVERRIDE;
37  virtual rtc::AsyncPacketSocket* CreateClientTcpSocket(
38      const rtc::SocketAddress& local_address,
39      const rtc::SocketAddress& remote_address,
40      const rtc::ProxyInfo& proxy_info,
41      const std::string& user_agent,
42      int opts) OVERRIDE;
43  virtual rtc::AsyncResolverInterface* CreateAsyncResolver() OVERRIDE;
44
45 private:
46  P2PSocketDispatcher* socket_dispatcher_;
47
48  DISALLOW_COPY_AND_ASSIGN(IpcPacketSocketFactory);
49};
50
51}  // namespace content
52
53#endif  // CONTENT_RENDERER_P2P_IPC_SOCKET_FACTORY_H_
54