168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// found in the LICENSE file. 468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "ppapi/cpp/network_list.h" 668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "ppapi/c/pp_errors.h" 868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "ppapi/cpp/array_output.h" 968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "ppapi/cpp/logging.h" 1068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "ppapi/cpp/module_impl.h" 1168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "ppapi/cpp/net_address.h" 1268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "ppapi/cpp/var.h" 1368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 1468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)namespace pp { 1568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 1668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)namespace { 1768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 1868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)template <> const char* interface_name<PPB_NetworkList_1_0>() { 1968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) return PPB_NETWORKLIST_INTERFACE_1_0; 2068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)} 2168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 2268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)} // namespace 2368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 2468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)NetworkList::NetworkList() { 2568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)} 2668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 2768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)NetworkList::NetworkList(PassRef, PP_Resource resource) 2868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) : Resource(PASS_REF, resource) { 2968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)} 3068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 3168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// static 3268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)bool NetworkList::IsAvailable() { 3368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) return has_interface<PPB_NetworkList_1_0>(); 3468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)} 3568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 3668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)uint32_t NetworkList::GetCount() const { 3768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) if (!has_interface<PPB_NetworkList_1_0>()) 3868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) return 0; 3968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) return get_interface<PPB_NetworkList_1_0>()->GetCount(pp_resource()); 4068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)} 4168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 4268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)std::string NetworkList::GetName(uint32_t index) const { 4368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) if (!has_interface<PPB_NetworkList_1_0>()) 4468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) return std::string(); 4568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) Var result(PASS_REF, 4668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) get_interface<PPB_NetworkList_1_0>()->GetName( 4768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) pp_resource(), index)); 4868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) return result.is_string() ? result.AsString() : std::string(); 4968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)} 5068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 5168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)PP_NetworkList_Type NetworkList::GetType(uint32_t index) const { 5268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) if (!has_interface<PPB_NetworkList_1_0>()) 5368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) return PP_NETWORKLIST_TYPE_ETHERNET; 5468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) return get_interface<PPB_NetworkList_1_0>()->GetType( 5568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) pp_resource(), index); 5668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)} 5768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 5868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)PP_NetworkList_State NetworkList::GetState(uint32_t index) const { 5968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) if (!has_interface<PPB_NetworkList_1_0>()) 6068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) return PP_NETWORKLIST_STATE_DOWN; 6168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) return get_interface<PPB_NetworkList_1_0>()->GetState( 6268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) pp_resource(), index); 6368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)} 6468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 6568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)int32_t NetworkList::GetIpAddresses( 6668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) uint32_t index, 6768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) std::vector<NetAddress>* addresses) const { 6868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) if (!has_interface<PPB_NetworkList_1_0>()) 6968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) return PP_ERROR_NOINTERFACE; 7068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) if (!addresses) 7168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) return PP_ERROR_BADARGUMENT; 7268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 7368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) ResourceArrayOutputAdapter<NetAddress> adapter(addresses); 7468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) return get_interface<PPB_NetworkList_1_0>()->GetIpAddresses( 7568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) pp_resource(), index, adapter.pp_array_output()); 7668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)} 7768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 7868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)std::string NetworkList::GetDisplayName(uint32_t index) const { 7968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) if (!has_interface<PPB_NetworkList_1_0>()) 8068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) return std::string(); 8168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) Var result(PASS_REF, 8268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) get_interface<PPB_NetworkList_1_0>()->GetDisplayName( 8368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) pp_resource(), index)); 8468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) return result.is_string() ? result.AsString() : std::string(); 8568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)} 8668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 8768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)uint32_t NetworkList::GetMTU(uint32_t index) const { 8868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) if (!has_interface<PPB_NetworkList_1_0>()) 8968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) return 0; 9068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) return get_interface<PPB_NetworkList_1_0>()->GetMTU( 9168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) pp_resource(), index); 9268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)} 9368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 9468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)} // namespace pp 95