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; 275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class URLRequestContextGetter; 285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class SSLClientSocket; 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace extensions { 325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class TLSSocket; 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Socket; 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 353551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// A simple interface to ApiResourceManager<Socket> or derived class. The goal 363551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// of this interface is to allow Socket API functions to use distinct instances 373551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// of ApiResourceManager<> depending on the type of socket (old version in 383551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// "socket" namespace vs new version in "socket.xxx" namespaces). 393551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)class SocketResourceManagerInterface { 403551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) public: 413551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) virtual ~SocketResourceManagerInterface() {} 423551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 43a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual bool SetBrowserContext(content::BrowserContext* context) = 0; 44a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual int Add(Socket* socket) = 0; 45a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual Socket* Get(const std::string& extension_id, int api_resource_id) = 0; 46a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual void Remove(const std::string& extension_id, int api_resource_id) = 0; 475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual void Replace(const std::string& extension_id, 485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) int api_resource_id, 495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Socket* socket) = 0; 503551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) virtual base::hash_set<int>* GetResourceIds( 513551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) const std::string& extension_id) = 0; 523551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)}; 533551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 543551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// Implementation of SocketResourceManagerInterface using an 553551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// ApiResourceManager<T> instance (where T derives from Socket). 56a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)template <typename T> 573551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)class SocketResourceManager : public SocketResourceManagerInterface { 583551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) public: 59a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SocketResourceManager() : manager_(NULL) {} 60a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 61a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual bool SetBrowserContext(content::BrowserContext* context) OVERRIDE { 62a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) manager_ = ApiResourceManager<T>::Get(context); 63a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) DCHECK(manager_) 64a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) << "There is no socket manager. " 65a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "If this assertion is failing during a test, then it is likely that " 66a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "TestExtensionSystem is failing to provide an instance of " 67a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "ApiResourceManager<Socket>."; 683551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return manager_ != NULL; 693551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 703551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 71a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual int Add(Socket* socket) OVERRIDE { 723551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // Note: Cast needed here, because "T" may be a subclass of "Socket". 733551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return manager_->Add(static_cast<T*>(socket)); 743551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 753551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 763551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) virtual Socket* Get(const std::string& extension_id, 773551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) int api_resource_id) OVERRIDE { 783551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return manager_->Get(extension_id, api_resource_id); 793551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 803551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual void Replace(const std::string& extension_id, 825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) int api_resource_id, 835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Socket* socket) OVERRIDE { 845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) manager_->Replace(extension_id, api_resource_id, static_cast<T*>(socket)); 855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 873551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) virtual void Remove(const std::string& extension_id, 883551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) int api_resource_id) OVERRIDE { 893551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) manager_->Remove(extension_id, api_resource_id); 903551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 913551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 92a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual base::hash_set<int>* GetResourceIds(const std::string& extension_id) 93a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) OVERRIDE { 943551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return manager_->GetResourceIds(extension_id); 953551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 963551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 973551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) private: 983551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ApiResourceManager<T>* manager_; 993551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)}; 1003551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SocketAsyncApiFunction : public AsyncApiFunction { 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SocketAsyncApiFunction(); 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~SocketAsyncApiFunction(); 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // AsyncApiFunction: 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool PrePrepare() OVERRIDE; 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool Respond() OVERRIDE; 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1123551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) virtual scoped_ptr<SocketResourceManagerInterface> 1133551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) CreateSocketResourceManager(); 1143551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 1153551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) int AddSocket(Socket* socket); 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Socket* GetSocket(int api_resource_id); 1175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) void ReplaceSocket(int api_resource_id, Socket* socket); 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void RemoveSocket(int api_resource_id); 1193551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) base::hash_set<int>* GetSocketIds(); 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1213551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) private: 1223551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) scoped_ptr<SocketResourceManagerInterface> manager_; 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SocketExtensionWithDnsLookupFunction : public SocketAsyncApiFunction { 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SocketExtensionWithDnsLookupFunction(); 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~SocketExtensionWithDnsLookupFunction(); 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 130a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // AsyncApiFunction: 131a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual bool PrePrepare() OVERRIDE; 132a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void StartDnsLookup(const std::string& hostname); 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void AfterDnsLookup(int lookup_result) = 0; 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string resolved_address_; 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnDnsLookup(int resolve_result); 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 141a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Weak pointer to the resource context. 142a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) content::ResourceContext* resource_context_; 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<net::HostResolver::RequestHandle> request_handle_; 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<net::AddressList> addresses_; 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SocketCreateFunction : public SocketAsyncApiFunction { 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DECLARE_EXTENSION_FUNCTION("socket.create", SOCKET_CREATE) 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SocketCreateFunction(); 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~SocketCreateFunction(); 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // AsyncApiFunction: 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool Prepare() OVERRIDE; 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void Work() OVERRIDE; 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1627d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) FRIEND_TEST_ALL_PREFIXES(SocketUnitTest, Create); 163a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) enum SocketType { kSocketTypeInvalid = -1, kSocketTypeTCP, kSocketTypeUDP }; 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 165a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) scoped_ptr<core_api::socket::Create::Params> params_; 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SocketType socket_type_; 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SocketDestroyFunction : public SocketAsyncApiFunction { 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DECLARE_EXTENSION_FUNCTION("socket.destroy", SOCKET_DESTROY) 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~SocketDestroyFunction() {} 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // AsyncApiFunction: 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool Prepare() OVERRIDE; 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void Work() OVERRIDE; 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int socket_id_; 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SocketConnectFunction : public SocketExtensionWithDnsLookupFunction { 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DECLARE_EXTENSION_FUNCTION("socket.connect", SOCKET_CONNECT) 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SocketConnectFunction(); 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~SocketConnectFunction(); 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // AsyncApiFunction: 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool Prepare() OVERRIDE; 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void AsyncWorkStart() OVERRIDE; 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // SocketExtensionWithDnsLookupFunction: 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void AfterDnsLookup(int lookup_result) OVERRIDE; 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void StartConnect(); 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnConnect(int result); 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int socket_id_; 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string hostname_; 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int port_; 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Socket* socket_; 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SocketDisconnectFunction : public SocketAsyncApiFunction { 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 2122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DECLARE_EXTENSION_FUNCTION("socket.disconnect", SOCKET_DISCONNECT) 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~SocketDisconnectFunction() {} 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // AsyncApiFunction: 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool Prepare() OVERRIDE; 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void Work() OVERRIDE; 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int socket_id_; 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SocketBindFunction : public SocketAsyncApiFunction { 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 2272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DECLARE_EXTENSION_FUNCTION("socket.bind", SOCKET_BIND) 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~SocketBindFunction() {} 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // AsyncApiFunction: 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool Prepare() OVERRIDE; 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void Work() OVERRIDE; 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int socket_id_; 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string address_; 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int port_; 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SocketListenFunction : public SocketAsyncApiFunction { 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 2442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DECLARE_EXTENSION_FUNCTION("socket.listen", SOCKET_LISTEN) 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SocketListenFunction(); 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~SocketListenFunction(); 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // AsyncApiFunction: 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool Prepare() OVERRIDE; 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void Work() OVERRIDE; 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 256a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) scoped_ptr<core_api::socket::Listen::Params> params_; 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SocketAcceptFunction : public SocketAsyncApiFunction { 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 2612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DECLARE_EXTENSION_FUNCTION("socket.accept", SOCKET_ACCEPT) 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SocketAcceptFunction(); 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~SocketAcceptFunction(); 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // AsyncApiFunction: 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool Prepare() OVERRIDE; 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void AsyncWorkStart() OVERRIDE; 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 273a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) void OnAccept(int result_code, net::TCPClientSocket* socket); 274a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 275a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) scoped_ptr<core_api::socket::Accept::Params> params_; 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SocketReadFunction : public SocketAsyncApiFunction { 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 2802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DECLARE_EXTENSION_FUNCTION("socket.read", SOCKET_READ) 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SocketReadFunction(); 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~SocketReadFunction(); 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // AsyncApiFunction: 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool Prepare() OVERRIDE; 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void AsyncWorkStart() OVERRIDE; 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnCompleted(int result, scoped_refptr<net::IOBuffer> io_buffer); 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 293a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) scoped_ptr<core_api::socket::Read::Params> params_; 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SocketWriteFunction : public SocketAsyncApiFunction { 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 2982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DECLARE_EXTENSION_FUNCTION("socket.write", SOCKET_WRITE) 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SocketWriteFunction(); 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~SocketWriteFunction(); 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // AsyncApiFunction: 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool Prepare() OVERRIDE; 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void AsyncWorkStart() OVERRIDE; 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnCompleted(int result); 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int socket_id_; 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<net::IOBuffer> io_buffer_; 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t io_buffer_size_; 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SocketRecvFromFunction : public SocketAsyncApiFunction { 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 3182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DECLARE_EXTENSION_FUNCTION("socket.recvFrom", SOCKET_RECVFROM) 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SocketRecvFromFunction(); 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~SocketRecvFromFunction(); 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // AsyncApiFunction 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool Prepare() OVERRIDE; 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void AsyncWorkStart() OVERRIDE; 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnCompleted(int result, 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<net::IOBuffer> io_buffer, 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& address, 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int port); 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 334a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) scoped_ptr<core_api::socket::RecvFrom::Params> params_; 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SocketSendToFunction : public SocketExtensionWithDnsLookupFunction { 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 3392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DECLARE_EXTENSION_FUNCTION("socket.sendTo", SOCKET_SENDTO) 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SocketSendToFunction(); 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~SocketSendToFunction(); 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // AsyncApiFunction: 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool Prepare() OVERRIDE; 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void AsyncWorkStart() OVERRIDE; 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnCompleted(int result); 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // SocketExtensionWithDnsLookupFunction: 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void AfterDnsLookup(int lookup_result) OVERRIDE; 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void StartSendTo(); 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int socket_id_; 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<net::IOBuffer> io_buffer_; 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t io_buffer_size_; 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string hostname_; 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int port_; 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Socket* socket_; 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SocketSetKeepAliveFunction : public SocketAsyncApiFunction { 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 3672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DECLARE_EXTENSION_FUNCTION("socket.setKeepAlive", SOCKET_SETKEEPALIVE) 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SocketSetKeepAliveFunction(); 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~SocketSetKeepAliveFunction(); 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // AsyncApiFunction: 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool Prepare() OVERRIDE; 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void Work() OVERRIDE; 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 379a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) scoped_ptr<core_api::socket::SetKeepAlive::Params> params_; 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SocketSetNoDelayFunction : public SocketAsyncApiFunction { 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 3842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DECLARE_EXTENSION_FUNCTION("socket.setNoDelay", SOCKET_SETNODELAY) 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SocketSetNoDelayFunction(); 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~SocketSetNoDelayFunction(); 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // AsyncApiFunction: 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool Prepare() OVERRIDE; 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void Work() OVERRIDE; 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 396a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) scoped_ptr<core_api::socket::SetNoDelay::Params> params_; 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SocketGetInfoFunction : public SocketAsyncApiFunction { 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 4012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DECLARE_EXTENSION_FUNCTION("socket.getInfo", SOCKET_GETINFO) 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SocketGetInfoFunction(); 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~SocketGetInfoFunction(); 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // AsyncApiFunction: 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool Prepare() OVERRIDE; 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void Work() OVERRIDE; 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 413a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) scoped_ptr<core_api::socket::GetInfo::Params> params_; 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SocketGetNetworkListFunction : public AsyncExtensionFunction { 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 4182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DECLARE_EXTENSION_FUNCTION("socket.getNetworkList", SOCKET_GETNETWORKLIST) 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~SocketGetNetworkListFunction() {} 422010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) virtual bool RunAsync() OVERRIDE; 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void GetNetworkListOnFileThread(); 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void HandleGetNetworkListError(); 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SendResponseOnUIThread(const net::NetworkInterfaceList& interface_list); 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 430c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class SocketJoinGroupFunction : public SocketAsyncApiFunction { 431c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public: 432c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DECLARE_EXTENSION_FUNCTION("socket.joinGroup", SOCKET_MULTICAST_JOIN_GROUP) 433c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 434c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SocketJoinGroupFunction(); 435c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 436c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) protected: 437c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual ~SocketJoinGroupFunction(); 438c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 439c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // AsyncApiFunction 440c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual bool Prepare() OVERRIDE; 441c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void Work() OVERRIDE; 442c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 443c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private: 444a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) scoped_ptr<core_api::socket::JoinGroup::Params> params_; 445c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 446c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 447c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class SocketLeaveGroupFunction : public SocketAsyncApiFunction { 448c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public: 449c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DECLARE_EXTENSION_FUNCTION("socket.leaveGroup", SOCKET_MULTICAST_LEAVE_GROUP) 450c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 451c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SocketLeaveGroupFunction(); 452c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 453c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) protected: 454c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual ~SocketLeaveGroupFunction(); 455c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 456c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // AsyncApiFunction 457c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual bool Prepare() OVERRIDE; 458c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void Work() OVERRIDE; 459c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 460c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private: 461a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) scoped_ptr<core_api::socket::LeaveGroup::Params> params_; 462c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 463c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 464c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class SocketSetMulticastTimeToLiveFunction : public SocketAsyncApiFunction { 465c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public: 466c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DECLARE_EXTENSION_FUNCTION("socket.setMulticastTimeToLive", 467c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SOCKET_MULTICAST_SET_TIME_TO_LIVE) 468c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 469c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SocketSetMulticastTimeToLiveFunction(); 470c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 471c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) protected: 472c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual ~SocketSetMulticastTimeToLiveFunction(); 473c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 474c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // AsyncApiFunction 475c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual bool Prepare() OVERRIDE; 476c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void Work() OVERRIDE; 477c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 478c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private: 479a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) scoped_ptr<core_api::socket::SetMulticastTimeToLive::Params> params_; 480c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 481c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 482c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class SocketSetMulticastLoopbackModeFunction : public SocketAsyncApiFunction { 483c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public: 484c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DECLARE_EXTENSION_FUNCTION("socket.setMulticastLoopbackMode", 485c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SOCKET_MULTICAST_SET_LOOPBACK_MODE) 486c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 487c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SocketSetMulticastLoopbackModeFunction(); 488c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 489c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) protected: 490c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual ~SocketSetMulticastLoopbackModeFunction(); 491c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 492c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // AsyncApiFunction 493c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual bool Prepare() OVERRIDE; 494c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void Work() OVERRIDE; 495c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 496c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private: 497a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) scoped_ptr<core_api::socket::SetMulticastLoopbackMode::Params> params_; 498c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 499c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 500c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class SocketGetJoinedGroupsFunction : public SocketAsyncApiFunction { 501c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public: 502c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DECLARE_EXTENSION_FUNCTION("socket.getJoinedGroups", 503c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SOCKET_MULTICAST_GET_JOINED_GROUPS) 504c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 505c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SocketGetJoinedGroupsFunction(); 506c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 507c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) protected: 508c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual ~SocketGetJoinedGroupsFunction(); 509c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 510c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // AsyncApiFunction 511c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual bool Prepare() OVERRIDE; 512c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void Work() OVERRIDE; 513c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 514c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private: 515a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) scoped_ptr<core_api::socket::GetJoinedGroups::Params> params_; 516c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 5175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 5185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class SocketSecureFunction : public SocketAsyncApiFunction { 5195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) public: 5205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) DECLARE_EXTENSION_FUNCTION("socket.secure", SOCKET_SECURE); 5215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) SocketSecureFunction(); 5225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 5235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) protected: 5245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual ~SocketSecureFunction(); 5255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 5265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // AsyncApiFunction 5275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual bool Prepare() OVERRIDE; 5285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual void AsyncWorkStart() OVERRIDE; 5295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 5305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) private: 5315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Callback from TLSSocket::UpgradeSocketToTLS(). 5325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) void TlsConnectDone(scoped_ptr<TLSSocket> socket, int result); 5335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 5345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) scoped_ptr<core_api::socket::Secure::Params> params_; 5355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) scoped_refptr<net::URLRequestContextGetter> url_request_getter_; 5365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 5375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(SocketSecureFunction); 5385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}; 5395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace extensions 5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 542a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#endif // EXTENSIONS_BROWSER_API_SOCKET_SOCKET_API_H_ 543