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