socket_api.h revision 010d83a9304c5a91596085d917d248abff47903a
1a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Copyright 2014 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) 5a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#ifndef EXTENSIONS_BROWSER_API_SOCKET_SOCKET_API_H_ 6a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#define EXTENSIONS_BROWSER_API_SOCKET_SOCKET_API_H_ 7a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 8a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include <string> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 107d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/gtest_prod_util.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/ref_counted.h" 12a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "extensions/browser/api/api_resource_manager.h" 13a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "extensions/browser/api/async_api_function.h" 14f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "extensions/browser/extension_function.h" 15a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "extensions/common/api/socket.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/base/address_list.h" 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/dns/host_resolver.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/socket/tcp_client_socket.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)namespace content { 21a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class BrowserContext; 22a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class ResourceContext; 23a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace net { 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class IOBuffer; 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace extensions { 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Socket; 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 333551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// A simple interface to ApiResourceManager<Socket> or derived class. The goal 343551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// of this interface is to allow Socket API functions to use distinct instances 353551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// of ApiResourceManager<> depending on the type of socket (old version in 363551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// "socket" namespace vs new version in "socket.xxx" namespaces). 373551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)class SocketResourceManagerInterface { 383551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) public: 393551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) virtual ~SocketResourceManagerInterface() {} 403551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 41a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual bool SetBrowserContext(content::BrowserContext* context) = 0; 42a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual int Add(Socket* socket) = 0; 43a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual Socket* Get(const std::string& extension_id, int api_resource_id) = 0; 44a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual void Remove(const std::string& extension_id, int api_resource_id) = 0; 453551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) virtual base::hash_set<int>* GetResourceIds( 463551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) const std::string& extension_id) = 0; 473551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)}; 483551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 493551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// Implementation of SocketResourceManagerInterface using an 503551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// ApiResourceManager<T> instance (where T derives from Socket). 51a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)template <typename T> 523551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)class SocketResourceManager : public SocketResourceManagerInterface { 533551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) public: 54a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SocketResourceManager() : manager_(NULL) {} 55a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 56a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual bool SetBrowserContext(content::BrowserContext* context) OVERRIDE { 57a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) manager_ = ApiResourceManager<T>::Get(context); 58a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) DCHECK(manager_) 59a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) << "There is no socket manager. " 60a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "If this assertion is failing during a test, then it is likely that " 61a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "TestExtensionSystem is failing to provide an instance of " 62a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "ApiResourceManager<Socket>."; 633551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return manager_ != NULL; 643551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 653551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 66a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual int Add(Socket* socket) OVERRIDE { 673551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // Note: Cast needed here, because "T" may be a subclass of "Socket". 683551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return manager_->Add(static_cast<T*>(socket)); 693551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 703551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 713551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) virtual Socket* Get(const std::string& extension_id, 723551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) int api_resource_id) OVERRIDE { 733551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return manager_->Get(extension_id, api_resource_id); 743551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 753551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 763551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) virtual void Remove(const std::string& extension_id, 773551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) int api_resource_id) OVERRIDE { 783551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) manager_->Remove(extension_id, api_resource_id); 793551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 803551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 81a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual base::hash_set<int>* GetResourceIds(const std::string& extension_id) 82a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) OVERRIDE { 833551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return manager_->GetResourceIds(extension_id); 843551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 853551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 863551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) private: 873551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ApiResourceManager<T>* manager_; 883551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)}; 893551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SocketAsyncApiFunction : public AsyncApiFunction { 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SocketAsyncApiFunction(); 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~SocketAsyncApiFunction(); 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // AsyncApiFunction: 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool PrePrepare() OVERRIDE; 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool Respond() OVERRIDE; 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1013551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) virtual scoped_ptr<SocketResourceManagerInterface> 1023551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) CreateSocketResourceManager(); 1033551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 1043551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) int AddSocket(Socket* socket); 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Socket* GetSocket(int api_resource_id); 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void RemoveSocket(int api_resource_id); 1073551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) base::hash_set<int>* GetSocketIds(); 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1093551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) private: 1103551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) scoped_ptr<SocketResourceManagerInterface> manager_; 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SocketExtensionWithDnsLookupFunction : public SocketAsyncApiFunction { 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SocketExtensionWithDnsLookupFunction(); 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~SocketExtensionWithDnsLookupFunction(); 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 118a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // AsyncApiFunction: 119a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual bool PrePrepare() OVERRIDE; 120a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void StartDnsLookup(const std::string& hostname); 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void AfterDnsLookup(int lookup_result) = 0; 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string resolved_address_; 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnDnsLookup(int resolve_result); 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 129a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Weak pointer to the resource context. 130a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) content::ResourceContext* resource_context_; 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<net::HostResolver::RequestHandle> request_handle_; 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<net::AddressList> addresses_; 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SocketCreateFunction : public SocketAsyncApiFunction { 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DECLARE_EXTENSION_FUNCTION("socket.create", SOCKET_CREATE) 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SocketCreateFunction(); 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~SocketCreateFunction(); 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // AsyncApiFunction: 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool Prepare() OVERRIDE; 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void Work() OVERRIDE; 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1507d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) FRIEND_TEST_ALL_PREFIXES(SocketUnitTest, Create); 151a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) enum SocketType { kSocketTypeInvalid = -1, kSocketTypeTCP, kSocketTypeUDP }; 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 153a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) scoped_ptr<core_api::socket::Create::Params> params_; 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SocketType socket_type_; 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SocketDestroyFunction : public SocketAsyncApiFunction { 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DECLARE_EXTENSION_FUNCTION("socket.destroy", SOCKET_DESTROY) 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~SocketDestroyFunction() {} 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // AsyncApiFunction: 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool Prepare() OVERRIDE; 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void Work() OVERRIDE; 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int socket_id_; 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SocketConnectFunction : public SocketExtensionWithDnsLookupFunction { 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DECLARE_EXTENSION_FUNCTION("socket.connect", SOCKET_CONNECT) 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SocketConnectFunction(); 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~SocketConnectFunction(); 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // AsyncApiFunction: 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool Prepare() OVERRIDE; 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void AsyncWorkStart() OVERRIDE; 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // SocketExtensionWithDnsLookupFunction: 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void AfterDnsLookup(int lookup_result) OVERRIDE; 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void StartConnect(); 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnConnect(int result); 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int socket_id_; 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string hostname_; 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int port_; 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Socket* socket_; 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SocketDisconnectFunction : public SocketAsyncApiFunction { 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DECLARE_EXTENSION_FUNCTION("socket.disconnect", SOCKET_DISCONNECT) 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~SocketDisconnectFunction() {} 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // AsyncApiFunction: 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool Prepare() OVERRIDE; 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void Work() OVERRIDE; 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int socket_id_; 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SocketBindFunction : public SocketAsyncApiFunction { 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 2152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DECLARE_EXTENSION_FUNCTION("socket.bind", SOCKET_BIND) 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~SocketBindFunction() {} 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // AsyncApiFunction: 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool Prepare() OVERRIDE; 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void Work() OVERRIDE; 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int socket_id_; 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string address_; 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int port_; 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SocketListenFunction : public SocketAsyncApiFunction { 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 2322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DECLARE_EXTENSION_FUNCTION("socket.listen", SOCKET_LISTEN) 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SocketListenFunction(); 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~SocketListenFunction(); 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // AsyncApiFunction: 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool Prepare() OVERRIDE; 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void Work() OVERRIDE; 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 244a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) scoped_ptr<core_api::socket::Listen::Params> params_; 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SocketAcceptFunction : public SocketAsyncApiFunction { 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 2492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DECLARE_EXTENSION_FUNCTION("socket.accept", SOCKET_ACCEPT) 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SocketAcceptFunction(); 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~SocketAcceptFunction(); 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // AsyncApiFunction: 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool Prepare() OVERRIDE; 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void AsyncWorkStart() OVERRIDE; 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 261a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) void OnAccept(int result_code, net::TCPClientSocket* socket); 262a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 263a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) scoped_ptr<core_api::socket::Accept::Params> params_; 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SocketReadFunction : public SocketAsyncApiFunction { 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 2682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DECLARE_EXTENSION_FUNCTION("socket.read", SOCKET_READ) 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SocketReadFunction(); 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~SocketReadFunction(); 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // AsyncApiFunction: 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool Prepare() OVERRIDE; 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void AsyncWorkStart() OVERRIDE; 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnCompleted(int result, scoped_refptr<net::IOBuffer> io_buffer); 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 281a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) scoped_ptr<core_api::socket::Read::Params> params_; 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SocketWriteFunction : public SocketAsyncApiFunction { 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 2862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DECLARE_EXTENSION_FUNCTION("socket.write", SOCKET_WRITE) 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SocketWriteFunction(); 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~SocketWriteFunction(); 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // AsyncApiFunction: 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool Prepare() OVERRIDE; 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void AsyncWorkStart() OVERRIDE; 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnCompleted(int result); 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int socket_id_; 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<net::IOBuffer> io_buffer_; 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t io_buffer_size_; 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SocketRecvFromFunction : public SocketAsyncApiFunction { 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 3062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DECLARE_EXTENSION_FUNCTION("socket.recvFrom", SOCKET_RECVFROM) 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SocketRecvFromFunction(); 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~SocketRecvFromFunction(); 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // AsyncApiFunction 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool Prepare() OVERRIDE; 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void AsyncWorkStart() OVERRIDE; 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnCompleted(int result, 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<net::IOBuffer> io_buffer, 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& address, 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int port); 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 322a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) scoped_ptr<core_api::socket::RecvFrom::Params> params_; 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SocketSendToFunction : public SocketExtensionWithDnsLookupFunction { 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 3272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DECLARE_EXTENSION_FUNCTION("socket.sendTo", SOCKET_SENDTO) 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SocketSendToFunction(); 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~SocketSendToFunction(); 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // AsyncApiFunction: 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool Prepare() OVERRIDE; 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void AsyncWorkStart() OVERRIDE; 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnCompleted(int result); 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // SocketExtensionWithDnsLookupFunction: 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void AfterDnsLookup(int lookup_result) OVERRIDE; 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void StartSendTo(); 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int socket_id_; 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<net::IOBuffer> io_buffer_; 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t io_buffer_size_; 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string hostname_; 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int port_; 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Socket* socket_; 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SocketSetKeepAliveFunction : public SocketAsyncApiFunction { 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 3552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DECLARE_EXTENSION_FUNCTION("socket.setKeepAlive", SOCKET_SETKEEPALIVE) 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SocketSetKeepAliveFunction(); 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~SocketSetKeepAliveFunction(); 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // AsyncApiFunction: 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool Prepare() OVERRIDE; 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void Work() OVERRIDE; 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 367a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) scoped_ptr<core_api::socket::SetKeepAlive::Params> params_; 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SocketSetNoDelayFunction : public SocketAsyncApiFunction { 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 3722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DECLARE_EXTENSION_FUNCTION("socket.setNoDelay", SOCKET_SETNODELAY) 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SocketSetNoDelayFunction(); 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~SocketSetNoDelayFunction(); 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // AsyncApiFunction: 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool Prepare() OVERRIDE; 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void Work() OVERRIDE; 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 384a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) scoped_ptr<core_api::socket::SetNoDelay::Params> params_; 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SocketGetInfoFunction : public SocketAsyncApiFunction { 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 3892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DECLARE_EXTENSION_FUNCTION("socket.getInfo", SOCKET_GETINFO) 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SocketGetInfoFunction(); 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~SocketGetInfoFunction(); 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // AsyncApiFunction: 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool Prepare() OVERRIDE; 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void Work() OVERRIDE; 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 401a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) scoped_ptr<core_api::socket::GetInfo::Params> params_; 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SocketGetNetworkListFunction : public AsyncExtensionFunction { 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 4062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DECLARE_EXTENSION_FUNCTION("socket.getNetworkList", SOCKET_GETNETWORKLIST) 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~SocketGetNetworkListFunction() {} 410010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) virtual bool RunAsync() OVERRIDE; 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void GetNetworkListOnFileThread(); 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void HandleGetNetworkListError(); 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SendResponseOnUIThread(const net::NetworkInterfaceList& interface_list); 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 418c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class SocketJoinGroupFunction : public SocketAsyncApiFunction { 419c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public: 420c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DECLARE_EXTENSION_FUNCTION("socket.joinGroup", SOCKET_MULTICAST_JOIN_GROUP) 421c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 422c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SocketJoinGroupFunction(); 423c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 424c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) protected: 425c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual ~SocketJoinGroupFunction(); 426c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 427c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // AsyncApiFunction 428c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual bool Prepare() OVERRIDE; 429c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void Work() OVERRIDE; 430c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 431c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private: 432a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) scoped_ptr<core_api::socket::JoinGroup::Params> params_; 433c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 434c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 435c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class SocketLeaveGroupFunction : public SocketAsyncApiFunction { 436c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public: 437c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DECLARE_EXTENSION_FUNCTION("socket.leaveGroup", SOCKET_MULTICAST_LEAVE_GROUP) 438c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 439c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SocketLeaveGroupFunction(); 440c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 441c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) protected: 442c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual ~SocketLeaveGroupFunction(); 443c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 444c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // AsyncApiFunction 445c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual bool Prepare() OVERRIDE; 446c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void Work() OVERRIDE; 447c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 448c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private: 449a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) scoped_ptr<core_api::socket::LeaveGroup::Params> params_; 450c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 451c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 452c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class SocketSetMulticastTimeToLiveFunction : public SocketAsyncApiFunction { 453c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public: 454c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DECLARE_EXTENSION_FUNCTION("socket.setMulticastTimeToLive", 455c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SOCKET_MULTICAST_SET_TIME_TO_LIVE) 456c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 457c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SocketSetMulticastTimeToLiveFunction(); 458c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 459c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) protected: 460c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual ~SocketSetMulticastTimeToLiveFunction(); 461c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 462c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // AsyncApiFunction 463c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual bool Prepare() OVERRIDE; 464c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void Work() OVERRIDE; 465c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 466c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private: 467a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) scoped_ptr<core_api::socket::SetMulticastTimeToLive::Params> params_; 468c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 469c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 470c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class SocketSetMulticastLoopbackModeFunction : public SocketAsyncApiFunction { 471c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public: 472c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DECLARE_EXTENSION_FUNCTION("socket.setMulticastLoopbackMode", 473c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SOCKET_MULTICAST_SET_LOOPBACK_MODE) 474c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 475c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SocketSetMulticastLoopbackModeFunction(); 476c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 477c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) protected: 478c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual ~SocketSetMulticastLoopbackModeFunction(); 479c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 480c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // AsyncApiFunction 481c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual bool Prepare() OVERRIDE; 482c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void Work() OVERRIDE; 483c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 484c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private: 485a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) scoped_ptr<core_api::socket::SetMulticastLoopbackMode::Params> params_; 486c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 487c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 488c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class SocketGetJoinedGroupsFunction : public SocketAsyncApiFunction { 489c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public: 490c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DECLARE_EXTENSION_FUNCTION("socket.getJoinedGroups", 491c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SOCKET_MULTICAST_GET_JOINED_GROUPS) 492c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 493c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SocketGetJoinedGroupsFunction(); 494c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 495c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) protected: 496c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual ~SocketGetJoinedGroupsFunction(); 497c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 498c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // AsyncApiFunction 499c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual bool Prepare() OVERRIDE; 500c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void Work() OVERRIDE; 501c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 502c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private: 503a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) scoped_ptr<core_api::socket::GetJoinedGroups::Params> params_; 504c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace extensions 5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 507a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#endif // EXTENSIONS_BROWSER_API_SOCKET_SOCKET_API_H_ 508