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)
175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// IpcPacketSocketFactory implements rtc::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
205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// rtc::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.
235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class IpcPacketSocketFactory : public rtc::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)
295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual rtc::AsyncPacketSocket* CreateUdpSocket(
305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      const rtc::SocketAddress& local_address,
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      int min_port, int max_port) OVERRIDE;
325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual rtc::AsyncPacketSocket* CreateServerTcpSocket(
335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      const rtc::SocketAddress& local_address,
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      int min_port,
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      int max_port,
36b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)      int opts) OVERRIDE;
375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual rtc::AsyncPacketSocket* CreateClientTcpSocket(
385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      const rtc::SocketAddress& local_address,
395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      const rtc::SocketAddress& remote_address,
405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      const rtc::ProxyInfo& proxy_info,
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const std::string& user_agent,
42b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)      int opts) OVERRIDE;
435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual rtc::AsyncResolverInterface* CreateAsyncResolver() OVERRIDE;
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  P2PSocketDispatcher* socket_dispatcher_;
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(IpcPacketSocketFactory);
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace content
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // CONTENT_RENDERER_P2P_IPC_SOCKET_FACTORY_H_
54