fake_net_address_interface.cc revision 5d1f7b1de12d16ceb2c938c56701a3e8bfa558f7
1// Copyright 2014 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "fake_ppapi/fake_net_address_interface.h" 6 7#include <netinet/in.h> 8 9#include "fake_ppapi/fake_pepper_interface.h" 10#include "fake_ppapi/fake_resource_manager.h" 11#include "fake_ppapi/fake_var_manager.h" 12#include "gtest/gtest.h" 13 14namespace { 15 16class FakeNetAddressResource : public FakeResource { 17 public: 18 explicit FakeNetAddressResource(PP_NetAddress_IPv4 addr) 19 : is_v6(false), address(addr) {} 20 explicit FakeNetAddressResource(PP_NetAddress_IPv6 addr) 21 : is_v6(true), address_v6(addr) {} 22 23 static const char* classname() { return "FakeNetAddressResource"; } 24 25 bool is_v6; 26 PP_NetAddress_IPv4 address; 27 PP_NetAddress_IPv6 address_v6; 28}; 29 30} // namespace 31 32FakeNetAddressInterface::FakeNetAddressInterface(FakePepperInterface* ppapi) 33 : ppapi_(ppapi) {} 34 35PP_Resource FakeNetAddressInterface::CreateFromIPv4Address( 36 PP_Instance instance, 37 PP_NetAddress_IPv4* address) { 38 if (instance != ppapi_->GetInstance()) 39 return 0; 40 41 FakeNetAddressResource* addr_resource = new FakeNetAddressResource(*address); 42 43 PP_Resource rtn = CREATE_RESOURCE(ppapi_->resource_manager(), 44 FakeNetAddressResource, 45 addr_resource); 46 return rtn; 47} 48 49PP_Resource FakeNetAddressInterface::CreateFromIPv6Address( 50 PP_Instance instance, 51 PP_NetAddress_IPv6* address) { 52 if (instance != ppapi_->GetInstance()) 53 return 0; 54 55 FakeNetAddressResource* addr_resource = new FakeNetAddressResource(*address); 56 PP_Resource rtn = CREATE_RESOURCE(ppapi_->resource_manager(), 57 FakeNetAddressResource, 58 addr_resource); 59 return rtn; 60} 61 62PP_Bool FakeNetAddressInterface::IsNetAddress(PP_Resource address) { 63 FakeNetAddressResource* address_resource = 64 ppapi_->resource_manager()->Get<FakeNetAddressResource>(address); 65 if (address_resource == NULL) 66 return PP_FALSE; 67 return PP_TRUE; 68} 69 70PP_NetAddress_Family FakeNetAddressInterface::GetFamily(PP_Resource address) { 71 FakeNetAddressResource* address_resource = 72 ppapi_->resource_manager()->Get<FakeNetAddressResource>(address); 73 if (address_resource == NULL) 74 return PP_NETADDRESS_FAMILY_UNSPECIFIED; 75 76 if (address_resource->is_v6) 77 return PP_NETADDRESS_FAMILY_IPV6; 78 79 return PP_NETADDRESS_FAMILY_IPV4; 80} 81 82PP_Bool FakeNetAddressInterface::DescribeAsIPv4Address( 83 PP_Resource address, PP_NetAddress_IPv4* target) { 84 FakeNetAddressResource* address_resource = 85 ppapi_->resource_manager()->Get<FakeNetAddressResource>(address); 86 if (address_resource == NULL) 87 return PP_FALSE; 88 89 if (address_resource->is_v6) 90 return PP_FALSE; 91 92 *target = address_resource->address; 93 return PP_TRUE; 94} 95 96PP_Bool FakeNetAddressInterface::DescribeAsIPv6Address( 97 PP_Resource address, PP_NetAddress_IPv6* target) { 98 FakeNetAddressResource* address_resource = 99 ppapi_->resource_manager()->Get<FakeNetAddressResource>(address); 100 if (address_resource == NULL) 101 return PP_FALSE; 102 103 if (!address_resource->is_v6) 104 return PP_FALSE; 105 106 *target = address_resource->address_v6; 107 return PP_TRUE; 108} 109 110PP_Var FakeNetAddressInterface::DescribeAsString(PP_Resource, PP_Bool) { 111 // TODO(sbc): implement 112 assert(false); 113 return PP_Var(); 114} 115