1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen/*
2ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen * libjingle
3ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen * Copyright 2011, Google Inc.
4ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen *
5ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen * Redistribution and use in source and binary forms, with or without
6ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen * modification, are permitted provided that the following conditions are met:
7ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen *
8ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen *  1. Redistributions of source code must retain the above copyright notice,
9ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen *     this list of conditions and the following disclaimer.
10ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen *  2. Redistributions in binary form must reproduce the above copyright notice,
11ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen *     this list of conditions and the following disclaimer in the documentation
12ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen *     and/or other materials provided with the distribution.
13ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen *  3. The name of the author may not be used to endorse or promote products
14ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen *     derived from this software without specific prior written permission.
15ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen *
16ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
17ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
18ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
19ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
20ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
21ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
22ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
23ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
24ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
25ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen */
27ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
28ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#ifndef TALK_BASE_BASICPACKETSOCKETFACTORY_H_
29ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#define TALK_BASE_BASICPACKETSOCKETFACTORY_H_
30ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
31ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "talk/base/asyncsocket.h"
32ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "talk/base/packetsocketfactory.h"
33ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
34ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsennamespace talk_base {
35ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
36ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass AsyncSocket;
37ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass SocketFactory;
38ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass Thread;
39ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
40ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass BasicPacketSocketFactory : public PacketSocketFactory {
41ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen public:
42ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  explicit BasicPacketSocketFactory(Thread* thread);
43ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  explicit BasicPacketSocketFactory(SocketFactory* socket_factory);
44ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual ~BasicPacketSocketFactory();
45ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
46ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual AsyncPacketSocket* CreateUdpSocket(
47ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      const SocketAddress& local_address, int min_port, int max_port);
48ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual AsyncPacketSocket* CreateServerTcpSocket(
49ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      const SocketAddress& local_address, int min_port, int max_port,
50ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      bool listen, bool ssl);
51ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual AsyncPacketSocket* CreateClientTcpSocket(
52ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      const SocketAddress& local_address, const SocketAddress& remote_address,
53ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      const ProxyInfo& proxy_info, const std::string& user_agent, bool ssl);
54ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
55ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen private:
56ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  int BindSocket(AsyncSocket* socket, const SocketAddress& local_address,
57ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                 int min_port, int max_port);
58ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
59ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  SocketFactory* socket_factory();
60ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
61ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  Thread* thread_;
62ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  SocketFactory* socket_factory_;
63ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen};
64ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
65ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}  // namespace talk_base
66ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
67ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#endif  // TALK_BASE_BASICPACKETSOCKETFACTORY_H_
68