ipc_socket_factory.h revision b2df76ea8fec9e32f6f3718986dba0d95315b29c
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2011 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CONTENT_RENDERER_P2P_IPC_SOCKET_FACTORY_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CONTENT_RENDERER_P2P_IPC_SOCKET_FACTORY_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/common/content_export.h"
11b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#include "third_party/libjingle/source/talk/p2p/base/packetsocketfactory.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content {
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class P2PSocketDispatcher;
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// IpcPacketSocketFactory implements talk_base::PacketSocketFactory
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// interface for libjingle using IPC-based P2P sockets. The class must
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// be used on a thread that is a libjingle thread (implements
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// talk_base::Thread) and also has associated base::MessageLoop. Each
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// socket created by the factory must be used on the thread it was
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// created on.
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class IpcPacketSocketFactory : public talk_base::PacketSocketFactory {
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CONTENT_EXPORT explicit IpcPacketSocketFactory(
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      P2PSocketDispatcher* socket_dispatcher);
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~IpcPacketSocketFactory();
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual talk_base::AsyncPacketSocket* CreateUdpSocket(
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const talk_base::SocketAddress& local_address,
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      int min_port, int max_port) OVERRIDE;
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual talk_base::AsyncPacketSocket* CreateServerTcpSocket(
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const talk_base::SocketAddress& local_address,
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      int min_port,
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      int max_port,
36b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)      int opts) OVERRIDE;
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual talk_base::AsyncPacketSocket* CreateClientTcpSocket(
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const talk_base::SocketAddress& local_address,
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const talk_base::SocketAddress& remote_address,
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const talk_base::ProxyInfo& proxy_info,
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const std::string& user_agent,
42b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)      int opts) OVERRIDE;
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  P2PSocketDispatcher* socket_dispatcher_;
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(IpcPacketSocketFactory);
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace content
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // CONTENT_RENDERER_P2P_IPC_SOCKET_FACTORY_H_
53