Home | History | Annotate | Download | only in fake_ppapi
      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 
     14 namespace {
     15 
     16 class 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 
     32 FakeNetAddressInterface::FakeNetAddressInterface(FakePepperInterface* ppapi)
     33     : ppapi_(ppapi) {}
     34 
     35 PP_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 
     49 PP_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 
     62 PP_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 
     70 PP_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 
     82 PP_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 
     96 PP_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 
    110 PP_Var FakeNetAddressInterface::DescribeAsString(PP_Resource, PP_Bool) {
    111   // TODO(sbc): implement
    112   assert(false);
    113   return PP_Var();
    114 }
    115